digiKam KDE proposal-2013

Project:Cloud Integration Export Plugin

Name:Saurabh M Patel

Email Address: saurabhpatel7717@gmail.com

FreeNode IRC Nick: saurabh_p

IM Service and Username: xmpp:gmail.com/Home, Username: saurabhpatel7717

Location(City,Country,Timezone): Ahmedabad,India,UTC+5:30

Proposal Title: To develop a export plugin for cloud services DropBox and Google-Drive

Motivation for Proposal / Goal:

Motivation:In present world where cloud services are getting so popular among people and companies that everyone wants to use cloud services for their data storage so digiKam which is used for photos management should have a tool to export photos to cloud services.The major one being Dropbox and Google Drive so there has to be a export plugin for these cloud services.

Goals:To provide option to export photos to Dropbox and Google-Drive by providing options for it in ‘export’ tab of digiKam

Implementation Details:

I am going to code for Google-drive export plugin without using any API’s.I would be using KIPI-Plugins for help in interface and getting image for uploading in uploading widget. I would create a login widget similar to Picasa export plugin.
FlowChart for Google-Drive implementation:
I would start coding Google-Drive part by starting to code the login widget for Google-Drive.
Then I would work on uploading widget part.For that I would be using following classes:
1. KIPIPlugins::KPImagesList
2. KIPI::UploadWidget
3. KIPIPlugins::KPProgressWidget
from KIPI-Plugins
Then I would code part to collect all images in images list using KPImagesList in a queue to provide images for uploading one after another.
After that I would code transfer part by creating methods for the same.This methods would update the progress-widget and hide/unhide it.Then it would upload the images to Google-Drive by using methods to upload images to Google-drive.


There are many API’s available for Dropbox provided by Dropbox developers in many languages but not in Qt/C++ and since it would be difficult to integrate them with Qt so I after consulting with Smit Mehta decided to use Qt-Dropbox API provided by lycis i.e:lycis-qtdropbox. I was able to build the qtdropbox project on my local machine and then tried hand on exploring it.It’s a very active project with good response from their developers so I decided to use it in the project for Dropbox.

FlowChart of DropBox implementaion:

Since the API for dropbox is in Qt/C++ it would not be very difficult to integrate in the project and would be implemented in a similar way to that of other export plugins like facebook,picasa etc.

API provides method for login but it would have to be modified to meet digiKam’s needs since it opens a new tab in browser altogether for login so I would create a widget which would ask for login from within digiKam.

It’s interface would use foll. classes

1. KIPIPlugins::KPImagesList

2. KIPI::UploadWidget

3. KIPIPlugins::KPProgressWidget
from KIPI-Plugins

After creating a interface I would create methods so that all images which are to be uploaded are saved in a queue and transferred one after another to upload method which would upload it to Dropbox

API provide methods to access Dropbox files so using it I would upload images to dropbox.


1. Uploading Widget


2. Login Widget


Above 2 pictures show most likely dialogs for login and uploading-widget which I discussed with Smit Mehta.

There are 5 buttons in navigation area in uploading widget image:

1.Move image up

2.Move image down

3. Add image

4. Remove image

5. Clear image-list

Tentative Timeline (in weekly intervals until 2 weeks after the end of GsoC):

Upto June17(pre-project research):Going through codes of various export plugins (I have gone through few already) which I have not went through till now. Also going thoroughly through lycis-QtDropbox API so as to use it more efficiently.Laying out the basic structure for plugins and making a stand-alone program for the project showing a demo of how the project would be implemented.

June17-June27(google drive widgets):First of all I will start coding with Google-drive part.I will start by making login-widget as shown in GUI mockup 2above for Google-Drive.Then I would use KIPI-Plugins classes to make an interface for uploading widget as shown in GUI mockup 1 and complete the uploading widget.

June28-9July(setting up images for upload):Start coding classes like Google_drive_image_item and Google_drive_image_list which would be helpful in setting images for uploading in proper manner.I would keep all images for uploading in a image-list(sort of queue) which would provide images to final stage-uploading.Also few other classes for providing help to image_item and image_list classes would be created as provided in other widgets like facebook, picasa, flickr etc.

July10-July21(coding uploading part):Start coding for uploading images.I would make a class google_drive_upload for handling all matters related to uploading.It would make use of image_item and image_list class to upload images to Google-drive using various classes of Qt to access Web since there is no API which provides direct method for uploading.

July22-July25(integrating plugin into digiKam):After testing the code I would start coding to create a option in export bar for uploading image to Google-Drive.

July26-July28:Reviewing the code and progress for upcoming midterm evaluation

July29:Midterm evaluation

July30-August10(Dropbox widgets):Start with implementaion of Dropbox plugin by laying out the basic structure. I will first start coding for login widget as shown in figure so that login can be done from within digikam instead of a new tab opening every time.Then I would use KIPI-Plugins classes to make an interface for uploading widget as shown in GUI mockup and complete the uploading widget.

August11-Aug22(setting up images for uploading):I will start to code for classes like dropbox_image_item and dropbox_image_list so that images are provided to uploading widget.Also other side-classes which would help the image_item and image_list class.Than I would do similar to Google-drive implementation and provide image_list to upload method which would then upload it.

August23-Aug27(exams in college):Only time during whole period I won’t be able to devote as much time as required.But I would compensate for that during regular period.

August28-September5(coding uploading part):Start coding for uploading class. Dropbox API provides a way to upload images to Dropbox so I would use that methods in a class dropbox_upload for uploading.Images would be provided from image_list class so that they can be uploaded to dropbox.

September6-Sept8(integrating plugin into digiKam):After testing the code I would start coding to create a option in export bar for uploading image to Dropbox.

September8-Sept10(test and review):Reviewing code by mentor and making changes suggested by mentor to plugins made.Also testing both the plugins.

Sept11-Sept16(testing and adding more features):Keep up doing testing and adding some more functionality like resizing images,feature of sharing with others on cloud services if time permits.

Sept16-Sept23(pencils down):Cleaning up the code,fixing bugs and write documentation.

September23:Firm ‘pencils down’ date

Sept23-Oct7(After GSOC):Effort to make export plugins for DropBox and Google-Drive feature available in next release of digiKam.

Do you have other obligations from late May to early August (school, work, vacation, etc.)? Please note that we expect the Summer of Code to be a full-time, 40-hr a week occupation. It is important to be clear and upfront about other commitments that you may have during that time.:

I will be free during entire summer period and would be able to devote full 40-hr a week.My college starts from July22, from then I will be able to work 5 hours a day everyday.Only I would not be able to devote much time from Aug23-Aug27 during which I have my exams in college but I would compensate for that during remaining period.

About Me (let us know who you are!):

I am Saurabh Patel living in Ahmedabad,Gujarat,India, sophomore studying Information and Communication Technology at Dhirubhai Ambani Institute Of Information and Communication Technology(DAIICT) at Gandhinagar,India.

I am working with linux for 2 years since joining college and am very much interested in programming.I have worked on creating a mini-shell[8] and explicit-allocators in projects during college.

Also this year I contributed some patches for game based on Django(python web framework) while working with organization ‘mysociety’[9].

I have worked with version control system-git.

I have been using Qt since starting to this year and was inclined to work with KDE after attending KDE meetup-India which was held in my college.

Since then I have started working on digiKam and helped close them many bugs.I have discussed regarding implementation of my project with Smit Mehta and have been in contact with him regarding this project for over a month.

I plan to add export plugins for Dropbox and Google-Drive in next stable versions of digiKam as soon as possible.I plan to be active with digiKam community and do bug-fixing and maintaining my project even after GSOC.

Junior job link (provide a link to a small task in KDE that you have done. It is not mandatory but will increase your chances of getting accepted considerably. If you don’t know what to work on have a look at http://kde.org/jj or ask a mentor):

Following is the list of bugs I have worked on and closed mostly with the help of Gilles Caullier and Smit Mehta:

1. Bug[305407][1] : Flickr-Added a button with which list of sets on flickr get reset by clicking button instead of terminating digiKam.

2. Bug[272521][2]: Updated albumlist so that it shows albums in alphabetical order.

3. Bug[288463][3]: Submitted a patch which could be applied to git master but need to sort out HUNK errors.

4. Review request[108382][4]: Was assigned a task in category:Small projects to introduce students.It was basically for testing the patch and with digiKam2.9.0 it worked well but on trying with digiKam3.2.0 beta it fails so it is pending on that list.Also I have told Markus Leuthold(one who submitted patch) of the problem.Recently got modified patch from Markus which would close this bug.

5. Bug[179209][5]: Submitted a patch for batch-resize album to any directory but with help of Smit Mehta,Gilles Caulier found that the bug doesn’t exist any more and thus got it resolved.

6. Bug[313981][6]: Tested for the bug and helped it resolved.

7. Bug[255722][7]: Tested for the bug and helped it resolved.

8. TODO: In Picasa plugin’s Picasawebwindow class I informed Gilles about a TODO and he was fine with that solution and thus could be removed but Jens Muller-person who coded that part is not active in community anymore so TODO is not yet resolved.But this TODO could be resolved any-time as Gilles was fine with my views on TODO.


1. https://bugs.kde.org/show_bug.cgi?id=305407

2. https://bugs.kde.org/show_bug.cgi?id=272521

3. https://bugs.kde.org/show_bug.cgi?id=288463

4. https://git.reviewboard.kde.org/r/108382/

5. https://bugs.kde.org/show_bug.cgi?id=179209

6. https://bugs.kde.org/show_bug.cgi?id=313981

7. https://bugs.kde.org/show_bug.cgi?id=255722#c6

8. https://github.com/saurabh7717/shell

9. https://github.com/saurabh7717/fmsgame/branches

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s