Jump to content

GSoC/2020/StatusReports/ShashwatJolly: Difference between revisions

From KDE Community Wiki
Sjolly (talk | contribs)
Created page with "== EteSync sync backend for Akonadi == === Project summary === The Akonadi framework is responsible for providing KDE PIM applications with a centralized database to store, i..."
 
Sjolly (talk | contribs)
 
(40 intermediate revisions by the same user not shown)
Line 1: Line 1:
== EteSync sync backend for Akonadi ==
{|class="tableleft vertical-centered"
|[[Image:Project Header.png|900px|thumb]]
|}


=== Project summary ===
=== Project summary ===
Line 16: Line 18:
[https://euroquis.nl/ Adriaan de Groot]
[https://euroquis.nl/ Adriaan de Groot]


== Deliverables ==
[https://volkerkrause.eu/ Volker Krause]
 
=== Deliverables ===
* A new backend resource for EteSync in Akonadi
* 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
* 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
* Rigorous testing as personal user data is being handled
* Adding relevant documentation to the Userbase and Techbase wikis
* 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.
 
{|class="tablecenter vertical-centered"
|[[Image: EteSync resource in Akonadi.png|450px|thumb]]
|}
 
==== Adding EteSync address books to Kontact ====
* Implemented relevant functions to get EteSync address books and contacts to show up in Kontact
 
This involved understanding [https://github.com/etesync/etesync-rs EteSync's C/C++ library], Akonadi's [https://api.kde.org/kdepim/akonadi/html/classAkonadi_1_1ResourceBase.html ResourceBase class], and implementing the relevant function like ''retrieveCollections()'' and ''retrieveItems()'' to fetch EteSync journals and entries and supply them to Akonadi.
 
{|class="tablecenter vertical-centered"
|[[Image: EteSync-addressbook-and-contacts-visible.png|450px|thumb]]
|}
 
==== 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.
 
{|class="tablecenter vertical-centered"
|[[Image: EteSync-calendar-akonadi.png|450px|thumb]]
|}
 
==== 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).
 
{|class="tablecenter vertical-centered"
|[[Image: EteSync-config-akonadi.png|450px|thumb]]
|}
 
==== Code review + Beta testing  ====
* Submitted a [https://invent.kde.org/pim/kdepim-runtime/-/merge_requests/1 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.
{|class="tablecenter vertical-centered"
|[[Image: WIP Merge Request.png|450px|thumb]]
|}
 
==== Current status ====
I'm currently fixing some bugs and handling corner cases to make the resource more robust and ready for users.
 
=== Period updates ===
* 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 ====
 
Sorted chronologically:
 
* [https://mail.kde.org/pipermail/kde-pim/2020-May/045657.html GSoC 2020 | Introducing myself (sjolly)]
* [https://mail.kde.org/pipermail/kde-pim/2020-June/045963.html Sharing my progress (EteSync sync backend for Akonadi, GSoC '20)]
* [https://mail.kde.org/pipermail/kde-pim/2020-June/046319.html Questions regarding code design choices for Akonadi resource]
* [https://mail.kde.org/pipermail/kde-pim/2020-July/046377.html Questions regarding Akonadi resource development]
* [https://mail.kde.org/pipermail/kde-pim/2020-August/046561.html Questions regarding KDE PIM resource development]
* [https://mail.kde.org/pipermail/kde-pim/2020-September/046576.html Status update: The new EteSync integration with Akonadi (GSoC '20)]
 
==== Reddit - r/kde ====
* [https://www.reddit.com/r/kde/comments/homigo/status_update_native_etesync_support_in_kde/ Status update: Native EteSync support in KDE!]
* [https://www.reddit.com/r/kde/comments/i1ab2c/gsoc_looking_for_testers_for_the_new_etesync/ Native Etesync integration in Kontact: Beta testers needed!]
* [https://www.reddit.com/r/kde/comments/ic4uv9/native_etesync_integration_in_kontact_beta/ GSoC: looking for testers for the new EteSync integration in Kontact]
 
==== 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/


== Relevant links ==
==== Repository ====
=== Blog ===
https://invent.kde.org/sjolly/kdepim-runtime/-/tree/etesyncResource
https://thejollyblog.netlify.app/tag/kde/


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


== Personal info ==
==== 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
'''Name:''' Shashwat Jolly


'''Email:''' [email protected]
'''Email:''' [email protected]


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


'''IRC:''' sjolly on Freenode
'''IRC:''' sjolly on Freenode

Latest revision as of 15:10, 2 September 2020

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