The Akonadi framework is responsible for providing KDE PIM applications with a centralized database to store, index and retrieve the user's personal information. The data can be stored either in local files or can be synced via a host of services like Google Calendar, Microsoft Exchange WebServer (EWS) or a number of Groupware servers like Nextcloud, DAV etc.
The proposed project is to add to this list a secure, end-to-end encrypted, FLOSS sync solution for your contacts, calendars and tasks, called EteSync. EteSync clients are available for Android, iOS, the desktop (Cal/CardDAV bridge) and the web, and a Thunderbird plugin is in the works. The server too is open-source and can be self-hosted.
The idea is to implement an Akonadi backend resource to enable KDE users to use EteSync to easily end-to-end encrypt and sync their contacts, calendars and tasks.
- A new backend resource for EteSync in Akonadi
- A configuration dialog to take as input an Encryption Password required by EteSync to properly integrate the module with Akonadi
- Rigorous testing as personal user data is being handled
- Adding relevant documentation for testing and using the resource
The new EteSync resource in Akonadi
- Made a new subdirectory for the resource
- Added the EteSync dependency to KDEPIM Runtime
- Got project to build successfully
This required understanding the CMake system, adding relevant dependencies for the new project, and using KDE-specific tools like ECM for logging.
Adding EteSync address books to Kontact
- Implemented relevant functions to get EteSync address books and contacts to show up in Kontact
This involved understanding EteSync's C/C++ library, Akonadi's ResourceBase class, and implementing the relevant function like retrieveCollections() and retrieveItems() to fetch EteSync journals and entries and supply them to Akonadi.
Adding EteSync calendars and tasks to Kontact
- Implemented relevant functions to get EteSync calendars and tasks to show up in Kontact
- Complete implementation of a two-way client for EteSync in Kontact
First, I had to extend the functionality implemented for address books and contacts to calendars and tasks, which was quite simple due to EteSync's similar handling of all types (basically treating everything as a content string). Then, I had to ensure that local changes are being pushed to the server too. For this, relevant function like itemAdded(), itemChanged(), itemRemoved(), collectionAdded(), collectionChanged() and collectionRemoved() had to be implemented.
Implementing the EteSync configuration dialog
- Implemented a two-step configuration dialog for the user to enter their username, password, server URL and encryption password.
This required some basic knowledge of Qt, as I had to create a setup wizard, which validated inputs, initialised pages, and let users initialise their EteSync account if they were signing in for the first time. It also included displaying error messages to users for various errors (bad login password, encryption password, server error etc).
Code review + Beta testing
- Submitted a Merge Request for maintainers to review code and suggest feedback/changes
- Published a "Call for beta testers" for interested KDE and EteSync users to test the new integration
- Many bug fixes based on feedback from mentors and testers
Making the project ready for beta testing was very interesting and insightful. I learnt a lot from the discussions on the MR, and from the various bugs discovered during testing.
I'm currently fixing some bugs and handling corner cases to make the resource more robust and ready for users.
- Week 1: https://www.thejollyblog.tech/posts/KDE/gsoc-part-1-lets-get-started
- Week 2-3: https://www.thejollyblog.tech/posts/KDE/gsoc-part-2-the-coding-period-starts
- Week 4-5: https://www.thejollyblog.tech/posts/KDE/gsoc-part-3-adding-etesync-addressbooks
- Week 6-7: https://www.thejollyblog.tech/posts/KDE/gsoc-part-4-adding-etesync-calendars-tasks
- Week 8-10: https://www.thejollyblog.tech/posts/KDE/gsoc-part-5-call-for-beta-testers
- Week 11-12: https://www.thejollyblog.tech/posts/KDE/gsoc-part-6-user-guide
Communication with the community
The kde-pim mailing list
- GSoC 2020 | Introducing myself (sjolly)
- Sharing my progress (EteSync sync backend for Akonadi, GSoC '20)
- Questions regarding code design choices for Akonadi resource
- Questions regarding Akonadi resource development
- Questions regarding KDE PIM resource development
- Status update: The new EteSync integration with Akonadi (GSoC '20)
Reddit - r/kde
- Status update: Native EteSync support in KDE!
- Native Etesync integration in Kontact: Beta testers needed!
- GSoC: looking for testers for the new EteSync integration in Kontact
I was active on IRC on an almost-daily basis and communicated a lot with my mentors, and the relevant channels :)
Open merge request on Invent
The resource is almost ready to be merged to master. There are a couple of things left to fix, related to licensing and minor bugs (as can be seen on the unresolved threads on the Merge Request). I am currently working on them and it should be done pretty soon.
Documentation on using the new resource
As the resource is almost ready, and it was given to beta testers for feedback, a user guide was important. The user guide has easy-to-follow steps and animations. The guide also points to a blog post, which details steps on compiling the resource from source.
Name: Shashwat Jolly
Email: [email protected]
IRC: sjolly on Freenode