GSoC/2020/StatusReports/ShashwatJolly

From KDE Community Wiki
< GSoC‎ | 2020‎ | StatusReports

Project summary

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.

Mentors

Tom "TAsn" Hacohen

Daniel Vrátil

Adriaan de Groot

Volker Krause

Deliverables

  • 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

Progress Updates

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.

Current status

I'm currently fixing some bugs and handling corner cases to make the resource more robust and ready for users.

Period updates

Communication with the community

The kde-pim mailing list

Sorted chronologically:

Reddit - r/kde

IRC

I was active on IRC on an almost-daily basis and communicated a lot with my mentors, and the relevant channels :)

Relevant links

Blog

https://thejollyblog.tech/tag/kde/

Repository

https://invent.kde.org/sjolly/kdepim-runtime/-/tree/etesyncResource

Project proposal

https://drive.google.com/file/d/1nWU5yaG_Anpl6L_QvMal0Vf2g_sQtC56/view

Open merge request on Invent

https://invent.kde.org/pim/kdepim-runtime/-/merge_requests/1

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

https://www.etesync.com/user-guide/kontact/

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.

Personal info

Name: Shashwat Jolly

Email: [email protected]

Invent: https://invent.kde.org/sjolly

IRC: sjolly on Freenode