Bug 360404 - Imgur autorization not work : Integrate Oauth2 library [patch]
Summary: Imgur autorization not work : Integrate Oauth2 library [patch]
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Plugin-WebService-Imgur (show other bugs)
Version: 5.0.0
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-03-11 11:00 UTC by roman
Modified: 2018-02-04 07:45 UTC (History)
7 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.1.0


Attachments
Patch to add a oauth2 library to libkipiplugins (198.94 KB, patch)
2016-06-30 16:18 UTC, Fabian Vogt
Details
Add o2 library from https://github.com/pipacs/o2 (199.03 KB, patch)
2016-07-06 18:28 UTC, Fabian Vogt
Details
Fix o2 to be compatible with imgur (1.45 KB, patch)
2016-07-06 18:28 UTC, Fabian Vogt
Details
Rewrite imgur plugin to work with OAuth2 (101.02 KB, patch)
2016-07-06 18:30 UTC, Fabian Vogt
Details

Note You need to log in before you can comment on or make changes to this bug.
Description roman 2016-03-11 11:00:26 UTC
I cannot upload my image on imgur, because when I cick on "Imgur autorixation" I have endless load. In console I hasn't any error, only http request on imgur service


Reproducible: Always

Steps to Reproduce:
1. Open scpectacle
2. Take screenshot
3. Upload to imgur service

Actual Results:  
Endless load

Expected Results:  
Image upload

[roman@localhost ~]$ spectacle 
kipi.library: Plugin  "Экспорт в KML"  was not loaded because the host application is missing
 the feature  "ImagesHasTime"
kipi.plugins: Plugin_Dropbox Plugin Loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Dropbox"
kipi.plugins: Plugin_Smug plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Smug"
kipi.plugins: Plugin_SendImages plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "SendImages"
kipi.plugins: Imgur plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Imgur"
kipi.plugins: Plugin_YandexFotki plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "YandexFotki"
kipi.plugins: Plugin_Flickr plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Flickr"
kipi.plugins: Plugin_SendImages plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "PrintImages"
kipi.plugins: Plugin_Rajce plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Rajce"
kipi.plugins: Plugin_RemoteStorage plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "RemoteStorage"
kipi.plugins: Plugin_AdvancedSlideshow plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "AdvancedSlideshow"
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "FlashExport"
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "kipiplugin_imageviewer"
kipi.plugins: Plugin_Imageshack plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Imageshack"
kipi.plugins: Plugin_Facebook plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Facebook"
kipi.plugins: Plugin_Piwigo plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Piwigo"
kipi.plugins: Reading data from kipirc file..
kipi.plugins: Plugin_GoogleDrive/PicasaWeb(Google Photos) Plugin Loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "Google Services"
kipi.plugins: Plugin_MediaWiki plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "MediaWiki export"
kipi.plugins: Plugin_Vkontakte plugin loaded
kipi.library: Host KXMLGUIClient is null!
kipi.library: Loaded plugin  "VKontakte"
kipi.library: This should only be invoked if the host application supports KIPI::Features ( HostSupportsProgressBar ). If host application do support that, then this function should have been overridden in the KIPI host interface.
kipi.library: This should only be invoked if the host application supports KIPI::Features ( HostSupportsProgressBar ). If host application do support that, then this function should have been overridden in the KIPI host interface.
kipi.library: This should only be invoked if the host application supports KIPI::Features ( HostSupportsProgressBar ). If host application do support that, then this function should have been overridden in the KIPI host interface.
QFSFileEngine::open: No file name specified
kipi.plugins: 0x13c9e98
kipi.plugins: We have activated the imgur exporter!
========== KQOAuthRequest has the following parameters:
 *  "oauth_callback"  :  "http://localhost:35406"
 *  "oauth_consumer_key"  :  "9ad9d48124b7137d9cc9e0397219f52004fcba12a"
 *  "oauth_nonce"  :  "1555254042"
 *  "oauth_signature_method"  :  "HMAC-SHA1"
 *  "oauth_timestamp"  :  "1457693792"
 *  "oauth_version"  :  "1.0"


========== KQOAuthRequest has the following base string:
"POST&https%3A%2F%2Fapi.imgur.com%2Foauth%2Frequest_token&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253A35406%26oauth_consumer_key%3D9ad9d48124b7137d9cc9e0397219f52004fcba12a%26oauth_nonce%3D1555254042%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1457693792%26oauth_version%3D1.0"

========== KQOAuthRequest has the following signature:
 * Signature :  "4cPbIcVTN7srsuxMOpwDh5ao6Wg%3D"

("Authorization", "Content-Type")
"OAuth oauth_callback=\"http%3A%2F%2Flocalhost%3A35406\", oauth_signature_method=\"HMAC-SHA1\", oauth_consumer_key=\"9ad9d48124b7137d9cc9e0397219f52004fcba12a\", oauth_version=\"1.0\", oauth_timestamp=\"1457693792\", oauth_nonce=\"1555254042\", oauth_signature=\"4cPbIcVTN7srsuxMOpwDh5ao6Wg%3D\""
"application/x-www-form-urlencoded"
Comment 1 caulier.gilles 2016-03-11 11:08:39 UTC
This must be fixed in last 4.14.0...

Gilles Caulier
Comment 2 roman 2016-03-11 11:29:04 UTC
I'm use KDE5
Comment 3 caulier.gilles 2016-03-11 12:35:26 UTC
and ??? You can install a more recent version of kipi-plugins...

Gilles Caulier
Comment 4 caulier.gilles 2016-03-11 12:36:24 UTC

*** This bug has been marked as a duplicate of bug 358704 ***
Comment 5 roman 2016-03-11 12:47:03 UTC
You want say what git version of kipi-plugin is old?
Comment 6 caulier.gilles 2016-03-11 12:54:45 UTC
You set version 4.4.0. try with last stable 4.14.0 instead.

current git is 5.0.0, not yet finalized...

Gilles Caulier
Comment 7 Alexander Potashev 2016-03-11 13:02:07 UTC
I think it's OK to report bugs against beta versions and/or Git master, otherwise we will probably release 5.0.0 with horrible bugs.
Comment 8 Alexander Potashev 2016-03-11 13:02:32 UTC
*** Bug 358704 has been marked as a duplicate of this bug. ***
Comment 9 zatherz 2016-03-25 18:18:29 UTC
I have the newest git version and this issue still exists.
Comment 10 varlesh 2016-05-15 09:04:47 UTC
I confirm this. Screen not upload to ImgUr
Spectacle show "Error page returned"
archlinux x86_64
spectacle 16.04.1
Comment 11 Maik Qualmann 2016-06-07 19:11:00 UTC
Git commit 6e02be27e833442028ac2be4f4737d6a9e2493e4 by Maik Qualmann.
Committed on 07/06/2016 at 19:08.
Pushed by mqualmann into branch 'master'.

drop KIO from Imgur export tool and porting to current API
FIXED-IN: 5.0.0

M  +3    -1    NEWS
M  +2    -1    imgur/CMakeLists.txt
M  +8    -8    imgur/imgurimageslist.cpp
M  +67   -88   imgur/imgurtalker.cpp
M  +2    -10   imgur/imgurtalker.h
M  +19   -27   imgur/imgurtalker_common.h
M  +2    -2    imgur/imgurwidget.cpp
M  +5    -0    imgur/imgurwindow.cpp
M  +5    -2    imgur/imgurwindow.h
M  +1    -7    imgur/mpform.cpp
M  +1    -0    imgur/plugin_imgur.cpp

http://commits.kde.org/kipi-plugins/6e02be27e833442028ac2be4f4737d6a9e2493e4
Comment 12 Maik Qualmann 2016-06-08 16:57:19 UTC
Only anonymous mode work currently -> reopened.

Maik
Comment 13 caulier.gilles 2016-06-29 14:19:35 UTC
Maik, 

It still valid ? We will need OAuth2 in kipi-plugins to deal with this problem ?

Gilles
Comment 14 Maik Qualmann 2016-06-29 18:34:23 UTC
Yes, we need OAuth2 to close this bug. Only anonymous upload work currently.

Maik
Comment 15 Fabian Vogt 2016-06-30 16:18:31 UTC
Created attachment 99772 [details]
Patch to add a oauth2 library to libkipiplugins

This patch adds the code from https://github.com/pipacs/o2 with some changes (https://github.com/pipacs/o2/pull/57) to fix building. Several workarounds were needed to integrate it, but it's not too bad.
Comment 16 caulier.gilles 2016-06-30 16:51:58 UTC
Hi Fabian,

Perfect, we will integrate it to libkipiplugins just after 5.0.0 final release planed this week end.

What about to use OAuth2 API in imgur tool ?

Gilles Caulier
Comment 17 Fabian Vogt 2016-06-30 16:54:10 UTC
> What about to use OAuth2 API in imgur tool ?

I'll port my rewrite of the imgur plugin to make use of that library soon.
I'll have to implement some missing features as well, so it may take a few days.
Comment 18 Maik Qualmann 2016-06-30 17:19:39 UTC
Fabian,

really great. Thank you!

Maik
Comment 19 Fabian Vogt 2016-07-06 18:28:20 UTC
Created attachment 99897 [details]
Add o2 library from https://github.com/pipacs/o2
Comment 20 Fabian Vogt 2016-07-06 18:28:41 UTC
Created attachment 99898 [details]
Fix o2 to be compatible with imgur
Comment 21 Fabian Vogt 2016-07-06 18:30:16 UTC
Created attachment 99900 [details]
Rewrite imgur plugin to work with OAuth2

Rewrite done, tested multiple times and it seems to work fine.
It took a bit longer due to some weirdnesses in the imgur OAuth implementation that didn't work well with o2.
Comment 22 Willy Sudiarto Raharjo 2016-07-07 15:41:46 UTC
Tested Fabian Vogt's patch for imgur and confirmed to work here on Slackware 14.2

suggestion: is it possible to bump all cmake minimum to 3.0.0 so that it's consistent in all digiKam/kipi-plugins code?

Thanks
Comment 23 Maik Qualmann 2016-07-07 17:29:41 UTC
I use Chromium as default browser. After logging in, there is an error box that you are not authorized. But the upload is done. With Firefox, there is no error message.

Maik
Comment 24 Fabian Vogt 2016-07-07 17:46:00 UTC
(In reply to Maik Qualmann from comment #23)
> I use Chromium as default browser. After logging in, there is an error box
> that you are not authorized. But the upload is done. With Firefox, there is
> no error message.
> 
> Maik

I had the same issue once, too, but I was unable to reproduce it again after some changes.
I don't understand how it happens at all, as the same QNetworkReply apparently emits both success and failure :-/
Comment 25 Fabian Vogt 2016-07-09 14:39:05 UTC
I just can't reproduce the issue, however I try it. If someone can, please provide the log and, if possible, a wireshark packet trace (which might contain sensitive information as the communication with 127.0.0.1 is not encrypted).
Comment 26 caulier.gilles 2016-07-09 14:51:27 UTC
Fabian,

If Oauth2 integartion work fine with Imgur tool, we will integrate your patches into git/master for next 5.1.0 planned in August.

What about other web service tools, as google, facebook, flickr, etc ? Can you evaluate :

- which tool can use Oauth2 API.
- The complexity to patch current implementation of relevant tools.

Thanks in advance

Gilles Caulier
Comment 27 Fabian Vogt 2016-07-09 16:05:38 UTC
(In reply to caulier.gilles from comment #26)
> Fabian,
> 
> If Oauth2 integartion work fine with Imgur tool, we will integrate your
> patches into git/master for next 5.1.0 planned in August.
The o2 integration into libkipiplugins works fine
and even if I can't figure out what causes the bogus error, it's still much
better than the current state, which does only allow anonymous uploads.

> What about other web service tools, as google, facebook, flickr, etc ? Can
> you evaluate :
> 
> - which tool can use Oauth2 API.
> - The complexity to patch current implementation of relevant tools.

Generally I prefer the "if it's not broken, don't fix it" approach.
The facebook plugin works fine, it just needs to be updated to use
the 2.6 API instead of 2.4 (a simple sed should do).
I don't know about the other plugins, I haven't tested them yet.
Which of them are known to be broken?
Comment 28 caulier.gilles 2016-07-09 16:19:59 UTC
For ex :


Google:
https://bugs.kde.org/show_bug.cgi?id=348274
https://bugs.kde.org/show_bug.cgi?id=339355
https://bugs.kde.org/show_bug.cgi?id=348277

Facebook:
https://bugs.kde.org/show_bug.cgi?id=361699

In general, if authentification can be simplifed in all webservice suppported by OAuth2, this will be a great improvement.

Gilles Caulier
Comment 29 caulier.gilles 2016-07-15 14:09:39 UTC
Maik,

Are you agree to include patches from Fabian for next 5.1.0 releases ?

Also do you think that O2 lib API can be used on some other kipi tools ? Facebook for ex, need serious improvements about the login which is currently not suitable ?

Gilles
Comment 30 Maik Qualmann 2016-07-15 19:26:20 UTC
Yes I agree. I will apply the patch on the weekend.

Maik
Comment 31 Maik Qualmann 2016-07-17 10:39:18 UTC
Git commit 1ca948503bb095df1334131481811a2141697edf by Maik Qualmann.
Committed on 17/07/2016 at 10:38.
Pushed by mqualmann into branch 'master'.

apply patch #99897 from Fabian Vogt to add o2 library from https://github.com/pipacs/o2

M  +1    -2    CMakeLists.txt
D  +0    -33   cmake/modules/FindQtKOAuth.cmake
M  +38   -1    common/libkipiplugins/CMakeLists.txt
A  +16   -0    common/libkipiplugins/o2/CHANGES.md
A  +31   -0    common/libkipiplugins/o2/CMakeLists.txt
A  +23   -0    common/libkipiplugins/o2/LICENSE
A  +212  -0    common/libkipiplugins/o2/README.md
A  +57   -0    common/libkipiplugins/o2/acknowledgements.md
A  +9    -0    common/libkipiplugins/o2/examples/CMakeLists.txt
A  +43   -0    common/libkipiplugins/o2/examples/facebookdemo/CMakeLists.txt
A  +16   -0    common/libkipiplugins/o2/examples/facebookdemo/facebookdemo.pro
A  +119  -0    common/libkipiplugins/o2/examples/facebookdemo/fbdemo.cpp     [License: UNKNOWN]  *
A  +35   -0    common/libkipiplugins/o2/examples/facebookdemo/fbdemo.h     [License: UNKNOWN]  *
A  +71   -0    common/libkipiplugins/o2/examples/facebookdemo/main.cpp     [License: UNKNOWN]  *
A  +5    -0    common/libkipiplugins/o2/examples/sialis/README.md
A  +19   -0    common/libkipiplugins/o2/examples/sialis/main.cpp     [License: UNKNOWN]  *
A  +128  -0    common/libkipiplugins/o2/examples/sialis/main.qml     [License: UNKNOWN]  *
A  +5    -0    common/libkipiplugins/o2/examples/sialis/qml.qrc
A  +-    --    common/libkipiplugins/o2/examples/sialis/sialis.icns
A  +24   -0    common/libkipiplugins/o2/examples/sialis/sialis.pro
A  +40   -0    common/libkipiplugins/o2/examples/sialis/tweetmodel.cpp     [License: UNKNOWN]  *
A  +38   -0    common/libkipiplugins/o2/examples/sialis/tweetmodel.h     [License: UNKNOWN]  *
A  +57   -0    common/libkipiplugins/o2/examples/sialis/twitterapi.cpp     [License: UNKNOWN]  *
A  +45   -0    common/libkipiplugins/o2/examples/sialis/twitterapi.h     [License: UNKNOWN]  *
A  +43   -0    common/libkipiplugins/o2/examples/twitterdemo/CMakeLists.txt
A  +111  -0    common/libkipiplugins/o2/examples/twitterdemo/main.cpp     [License: UNKNOWN]  *
A  +135  -0    common/libkipiplugins/o2/examples/twitterdemo/tweeter.cpp     [License: UNKNOWN]  *
A  +41   -0    common/libkipiplugins/o2/examples/twitterdemo/tweeter.h     [License: UNKNOWN]  *
A  +14   -0    common/libkipiplugins/o2/examples/twitterdemo/twitterdemo.pro
A  +103  -0    common/libkipiplugins/o2/src/CMakeLists.txt
A  +22   -0    common/libkipiplugins/o2/src/o0abstractstore.h     [License: UNKNOWN]  *
A  +126  -0    common/libkipiplugins/o2/src/o0baseauth.cpp     [License: UNKNOWN]  *
A  +120  -0    common/libkipiplugins/o2/src/o0baseauth.h     [License: UNKNOWN]  *
A  +61   -0    common/libkipiplugins/o2/src/o0globals.h     [License: UNKNOWN]  *
A  +14   -0    common/libkipiplugins/o2/src/o0requestparameter.h     [License: UNKNOWN]  *
A  +44   -0    common/libkipiplugins/o2/src/o0settingsstore.cpp     [License: UNKNOWN]  *
A  +42   -0    common/libkipiplugins/o2/src/o0settingsstore.h     [License: UNKNOWN]  *
A  +225  -0    common/libkipiplugins/o2/src/o0simplecrypt.h     [License: BSD]
A  +379  -0    common/libkipiplugins/o2/src/o1.cpp     [License: UNKNOWN]  *
A  +124  -0    common/libkipiplugins/o2/src/o1.h     [License: UNKNOWN]  *
A  +18   -0    common/libkipiplugins/o2/src/o1dropbox.h     [License: UNKNOWN]  *
A  +18   -0    common/libkipiplugins/o2/src/o1flickr.h     [License: UNKNOWN]  *
A  +22   -0    common/libkipiplugins/o2/src/o1freshbooks.h     [License: UNKNOWN]  *
A  +57   -0    common/libkipiplugins/o2/src/o1requestor.cpp     [License: UNKNOWN]  *
A  +61   -0    common/libkipiplugins/o2/src/o1requestor.h     [License: UNKNOWN]  *
A  +20   -0    common/libkipiplugins/o2/src/o1timedreply.cpp     [License: UNKNOWN]  *
A  +25   -0    common/libkipiplugins/o2/src/o1timedreply.h     [License: UNKNOWN]  *
A  +18   -0    common/libkipiplugins/o2/src/o1twitter.h     [License: UNKNOWN]  *
A  +417  -0    common/libkipiplugins/o2/src/o2.cpp     [License: UNKNOWN]  *
A  +170  -0    common/libkipiplugins/o2/src/o2.h     [License: UNKNOWN]  *
A  +90   -0    common/libkipiplugins/o2/src/o2facebook.cpp     [License: UNKNOWN]  *
A  +18   -0    common/libkipiplugins/o2/src/o2facebook.h     [License: UNKNOWN]  *
A  +13   -0    common/libkipiplugins/o2/src/o2gft.cpp     [License: UNKNOWN]  *
A  +14   -0    common/libkipiplugins/o2/src/o2gft.h     [License: UNKNOWN]  *
A  +17   -0    common/libkipiplugins/o2/src/o2hubic.cpp     [License: UNKNOWN]  *
A  +17   -0    common/libkipiplugins/o2/src/o2hubic.h     [License: UNKNOWN]  *
A  +58   -0    common/libkipiplugins/o2/src/o2reply.cpp     [License: UNKNOWN]  *
A  +59   -0    common/libkipiplugins/o2/src/o2reply.h     [License: UNKNOWN]  *
A  +81   -0    common/libkipiplugins/o2/src/o2replyserver.cpp     [License: UNKNOWN]  *
A  +33   -0    common/libkipiplugins/o2/src/o2replyserver.h     [License: UNKNOWN]  *
A  +193  -0    common/libkipiplugins/o2/src/o2requestor.cpp     [License: UNKNOWN]  *
A  +82   -0    common/libkipiplugins/o2/src/o2requestor.h     [License: UNKNOWN]  *
A  +254  -0    common/libkipiplugins/o2/src/o2simplecrypt.cpp     [License: BSD]
A  +125  -0    common/libkipiplugins/o2/src/o2skydrive.cpp     [License: UNKNOWN]  *
A  +18   -0    common/libkipiplugins/o2/src/o2skydrive.h     [License: UNKNOWN]  *
A  +21   -0    common/libkipiplugins/o2/src/o2surveymonkey.cpp     [License: UNKNOWN]  *
A  +14   -0    common/libkipiplugins/o2/src/o2surveymonkey.h     [License: UNKNOWN]  *
A  +69   -0    common/libkipiplugins/o2/src/oxtwitter.cpp     [License: UNKNOWN]  *
A  +37   -0    common/libkipiplugins/o2/src/oxtwitter.h     [License: UNKNOWN]  *

The files marked with a * at the end have a non valid license. Please read: http://techbase.kde.org/Policies/Licensing_Policy and use the headers which are listed at that page.


http://commits.kde.org/kipi-plugins/1ca948503bb095df1334131481811a2141697edf
Comment 32 Maik Qualmann 2016-07-17 10:43:09 UTC
Git commit d2250a7d2cdef4086ca7f0bbd9787cc021be59de by Maik Qualmann.
Committed on 17/07/2016 at 10:42.
Pushed by mqualmann into branch 'master'.

apply patch #99898 from Fabian Vogt to fix o2 to be compatible with imgur

M  +6    -2    common/libkipiplugins/o2/src/o2.cpp

http://commits.kde.org/kipi-plugins/d2250a7d2cdef4086ca7f0bbd9787cc021be59de
Comment 33 Maik Qualmann 2016-07-17 10:49:22 UTC
Git commit c0336e003d91577a84d587d69ee77ff1fb7c78e0 by Maik Qualmann.
Committed on 17/07/2016 at 10:47.
Pushed by mqualmann into branch 'master'.

apply patch #99900 from Fabian Vogt to rewrite imgur plugin to work with OAuth2
FIXED-IN: 5.1.0

M  +1    -22   imgur/CMakeLists.txt
A  +312  -0    imgur/imgurapi3.cpp     [License: UNKNOWN]  *
A  +169  -0    imgur/imgurapi3.h     [License: GPL (v2+)]
M  +76   -96   imgur/imgurimageslist.cpp
M  +18   -33   imgur/imgurimageslist.h
D  +0    -57   imgur/imgurresponses.json
D  +0    -425  imgur/imgurtalker.cpp
D  +0    -111  imgur/imgurtalker.h
D  +0    -158  imgur/imgurtalker_common.h
D  +0    -289  imgur/imgurtalkerauth.cpp
D  +0    -112  imgur/imgurtalkerauth.h
D  +0    -322  imgur/imgurwidget.cpp
D  +0    -92   imgur/imgurwidget.h
M  +171  -199  imgur/imgurwindow.cpp
M  +24   -34   imgur/imgurwindow.h
D  +0    -166  imgur/mpform.cpp
D  +0    -62   imgur/mpform.h

The files marked with a * at the end have a non valid license. Please read: http://techbase.kde.org/Policies/Licensing_Policy and use the headers which are listed at that page.


http://commits.kde.org/kipi-plugins/c0336e003d91577a84d587d69ee77ff1fb7c78e0