Kicking Off with EteSync and UI Decoupling
The first week of my Google Summer of Code journey with the KDE community has nearly come to an end, and it’s been an exciting start. As a quick reminder, my project — “Merkuro – Porting Away from QtWidgets” — focuses on making Akonadi components leaner by decoupling their UI from core logic and reducing dependencies on QtWidgets
.
Choosing Where to Begin
Originally, I planned to begin with the KMail agents. However, after discussing it with one of my mentors, Claudio, we realized that these agents may benefit from more than just UI decoupling — they are prime candidates to be moved into the kdepim-runtime
repository. This would help consolidate Akonadi agents and resources for better maintainability and cohesion.
Because this is a larger architectural change, we agreed it would be more effective to tackle it later in the project.
Refocusing on Resources Within kdepim-runtime
I shifted my focus to the agents and resources already in kdepim-runtime
. I was pleased to see that some groundwork for decoupling had already been laid for resources like DAV, Google, and IMAP, giving me a solid reference to work from.
With a clear direction, I chose the EteSync resource as my first decoupling target.
Decoupling the EteSync Resource
This week, I carried out three main tasks:
Refactoring the Core Code
I modifiedetesyncresource.cpp/.h
andetesyncclientstate.cpp/.h
to remove all UI-related logic previously embedded in the core functionality.Updating the Build System
I adjusted theCMakeLists.txt
to ensure the resource no longer compiles or links against anyQtWidgets
-based code.Creating the UI Plugin
I created a dedicated configuration plugin consisting ofetesyncconfig.cpp
and its corresponding.json
metadata file. All UI-related code now lives in this separate plugin.
Testing with Akonadi Console
To verify my changes, I’ve been using the Akonadi Console, a powerful tool that lets developers inspect and manage Akonadi agents and resources in real time. My goal is to ensure the refactored EteSync resource functions correctly in Merkuro, Kontact, and any other application that uses Akonadi.
What’s Next?
Before submitting a merge request, I plan to carry out thorough initial testing to ensure everything is stable and there are no regressions. Once the EteSync resource is confirmed to work cleanly with the plugin, I’ll move on to the next target in the decoupling process.
It’s been a productive first week, and I’m looking forward to building on this momentum in the weeks to come!