<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PIM on KDE Blogs</title><link>https://blogs.kde.org/categories/pim/</link><description>Recent content in PIM on KDE Blogs</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 31 Mar 2026 18:04:10 +0300</lastBuildDate><atom:link href="https://blogs.kde.org/categories/pim/index.xml" rel="self" type="application/rss+xml"/><item><title>KDE PIM Sprint in Paris</title><link>https://blogs.kde.org/2025/12/17/kde-pim-sprint-in-paris/</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0000</pubDate><author>Ingo Klöcker</author><guid>https://blogs.kde.org/2025/12/17/kde-pim-sprint-in-paris/</guid><description>&lt;p&gt;Last weekend I attended this year's edition of the &lt;a href="https://community.kde.org/Sprints/PIM/2025"&gt;KDE PIM Sprint&lt;/a&gt; which, this time, took place in Paris.&lt;/p&gt;
&lt;p&gt;I arrived in Paris around 1 p.m. and first walked from Gare du Nord to the Île de la Cité to have a look at the reconstructed roof of Notre Dame. Then I checked in at my hotel and after a brief rest I went to the sprint venue, the office of enioka. There I was greeted by one of our hosts for the weekend and by a few KDE PIMsters who had already taken over the meeting room.&lt;/p&gt;
&lt;p&gt;After firing up my computer, KMail complained that it couldn't access one of my IMAP accounts. The error said &amp;quot;authentication failed&amp;quot; and a second error message claimed that access to KWallet (which stores the passwords of the IMAP accounts) was denied. Using the website of the mail provider I verified that my credentials still work. Adding the IMAP account a second time didn't help. Still the same errors. And a look at KWallet also didn't give me a clue why it should deny access to the password of one of my IMAP accounts when two other IMAP accounts worked. Since access to this IMAP account wasn't that important during the KDE PIM sprint I decided not to waste more time on this problem. This proved to be a good decision because once I was back at home the account magically worked again. I blame weird security measures by the email provider.&lt;/p&gt;
&lt;p&gt;In the meantime more people had arrived and we went for dinner. Afterward we went back to the venue and, now that most people were there, we went over the &lt;a href="https://invent.kde.org/groups/pim/-/milestones"&gt;list of topics from last year's KDE PIM Sprint&lt;/a&gt;. Some progress has been made since the last sprint but many topics didn't see much work done. &lt;a href="https://community.kde.org/Get_Involved"&gt;Any and all help is welcome!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Originally I planned to look into a bug that's been haunting me for some time: KMail shows seemingly random counts of unread messages in the folder list that have little to do with the actual number of unread messages in those folders. Because I'm using the latest stable versions of almost all KDE software (as provided by openSUSE Tumbleweed) I started to build the release/25.12 branch of KMail and its 30+ KDE PIM dependencies. This took the rest of Friday evening and part of Saturday morning. Shortly before midnight we called it a day.&lt;/p&gt;
&lt;p&gt;On Saturday morning, after a joint breakfast in the office, we discussed a few more topics from our &lt;a href="https://community.kde.org/Sprints/PIM/2025#Agenda"&gt;agenda&lt;/a&gt;. After that I decided to scratch my original plan and, instead, to help with making the &lt;a href="https://invent.kde.org/pim/kmime"&gt;KMime&lt;/a&gt; library fit for becoming a &lt;a href="https://api.kde.org/#kde-frameworks"&gt;KDE Framework&lt;/a&gt;. I created a few MRs to replace the usage of bool parameters in the API with enums. Then I looked into adapting the users of KMime to the new API. Unfortunately, this proved more painful than expected because KDE PIM does not only depend on the master branch of everything else in KDE PIM (which I was very well aware of) but a lot of the KDE PIM projects also depend on the master branch of the ktextaddons library which is a kind of intermediate library between KDE Frameworks and KDE PIM with its own release schedule. For many of the KDE PIM projects I could simply lower the required version of ktextaddons to the latest stable release (as shipped by Tumbleweed), but for pimcommon this hack didn't work anymore because it used a new header from ktextaddons master. By then it was already Sunday afternoon and anyway time for me to pack my stuff.&lt;/p&gt;
&lt;p&gt;On my way to Gare du Nord I passed by Sacré Cœur on Montmartre where to my surprise a choir of Santa Clauses and Santa Claudettes was performing French Christmas songs.&lt;/p&gt;
&lt;p&gt;In conclusion, I got more useful work done during this sprint than during some other sprints, although the dependency requirements of KDE PIM annoy me a lot. I've been involved in KDE PIM for 25 years now although, admittedly, I rarely contribute to it in my spare time since I started to code for a living. To a large part the reason for this is that it would cost way too much of my spare time to build all of KDE PIM all of the time.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href="https://haute-couture.enioka.com/en/"&gt;enioka&lt;/a&gt; for hosting us and to Kevin for organizing the sprint. And many thanks to those of you &lt;a href="https://kde.org/donate"&gt;donating to KDE&lt;/a&gt; which makes these sprints possible.&lt;/p&gt;</description></item><item><title>News from KDE PIM in July/August 2019</title><link>https://blogs.kde.org/2019/09/11/news-kde-pim-julyaugust-2019/</link><pubDate>Wed, 11 Sep 2019 00:00:00 +0000</pubDate><author>David Faure</author><guid>https://blogs.kde.org/2019/09/11/news-kde-pim-julyaugust-2019/</guid><description>&lt;p&gt;Following Volker's last blog on this topic, here are some highlights of the recent work that has been done around Kontact / PIM during this summer. First of all, stats: there were around 1200 commits in the past two months, leading to the new 19.08 release.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;KDE Itinerary &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;You can have a good overview of Volker's work by following &lt;a href="https://volkerkrause.eu/2019/08/01/kde-itinerary-june-july-2019.html"&gt;this blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Kontact&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;It seems our team was mostly focused on cleaning, fixing and introducing little UI features during summer:&lt;/p&gt;
&lt;p&gt;Laurent added folder specific exportation from PIM within its PIM data exporter, contact selection from LDAP servers, refactoring some PIM libraries to new ECM macros and cleaned up deprecated method preparing for a Qt 6 future.
In addition to that some bug fixes got in, most notably adding reminders to new events in KOrganizer, text-to-speech fixes and general KMail behavior corrections.&lt;/p&gt;
&lt;p&gt;Reminders to new events in Korganizer:
&lt;img src="http://www.davidfaure.fr/kde/reminder1.png"/&gt;
&lt;img src="http://www.davidfaure.fr/kde/reminder2.png"/&gt;&lt;/p&gt;
&lt;p&gt;Choosing a contact from LDAP server : &lt;img src="http://www.davidfaure.fr/kde/ldap1.png"/&gt;&lt;/p&gt;
&lt;p&gt;All of the libraries have been adapted to compile with Qt 5.13 and soonish we should reach 5.14 compilation state.&lt;/p&gt;
&lt;p&gt;Volker spent time unifying instant message address storage in vCards to KContacts, KContacts soon to be its own framework. The visual style for inline messages in KMail's message viewer was updated too, following the Breeze style as you can see in the picture.&lt;/p&gt;
&lt;p&gt;Visuals for inline message boxes in the mail view : &lt;img src="http://www.davidfaure.fr/kde/inline1.png"/&gt;&lt;/p&gt;
&lt;p&gt;Sandro Knauß worked on the begining of an implementation for MemoryHole support : the idea is to encrypt the mail header (containing metadata) to enforce even further user privacy. In order to achieve that, they wrote a new interface between MimeTreeParser and MessageViewer so we now can update mail headers for later extraction, stay tune for more deails about that next blog posts. In addition and with the help of Glen Ditchfield they put their effort on making messagelib tests green again!&lt;/p&gt;
&lt;p&gt;David Faure ported the all of KDE PIM to D-Bus activation as a way to start applications, which enabled the deprecation of KDBusServiceTrader and maybe in a long term future a refactor to simplify KLauncher.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Akonadi&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Dan worked on a better support of PostgreSQL (better handling of table name case sensitivity and the sorting of versioned directories). Akonadi server received some love with a few cleanup and modernization treats, you will have more detail about what Dan cooked in his kitchen in &lt;a href="https://www.dvratil.cz/"&gt;his blog&lt;/a&gt; so stay tuned!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Infrastructure&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Volker and Laurent made sure all KDE PIM modules would appear correctly under the api.kde.org, to make the KDE PIM codebase easier to follow and discover.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Help us make Kontact even better!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;All these efforts to provide good free software to the world would not be possible without our committers, if you want to take part on that feel free to contact us #kontact and #akonadi IRC channels on Freenode, see the below section to get started:
&lt;a href="https://community.kde.org/KDE_PIM/Development"&gt;&lt;a href="https://community.kde.org/KDE_PIM/Development"&gt;https://community.kde.org/KDE_PIM/Development&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And again, if you are attending Akademy, feel free to come see us !&lt;/p&gt;
&lt;p&gt;This is a guest post from Franck Arrecot due to technical issues with his blog.
Thanks Franck for writing up the above!&lt;/p&gt;</description></item><item><title>2019 Toulouse PIM sprint report</title><link>https://blogs.kde.org/2019/04/17/2019-toulouse-pim-sprint-report/</link><pubDate>Wed, 17 Apr 2019 00:00:00 +0000</pubDate><author>David Faure</author><guid>https://blogs.kde.org/2019/04/17/2019-toulouse-pim-sprint-report/</guid><description>&lt;p&gt;Like every year, a number of KDE PIM developers met in Toulouse for a bit of bugfixing.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Discussions and decisions&lt;/b&gt;
There were a number of those, the most important ones being about food, of course.
Among the topics of lesser importance: turning some PIM libraries into KF5 frameworks (that's just their way to dump more work on me, clearly... but it also means a lot of cleanup work for Volker, first), outreach to the Plasma Mobile PIM team, how to increase the number of attendees for this kind of sprint, how to make it easier to start contributing to KDE PIM, how to blog more often about progress.&lt;/p&gt;
&lt;p&gt;In terms of the actual work done, the list is quite long, here is my view on things.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Features&lt;/b&gt;
Moving an event from one calendar to another is now possible in KOrganizer (the combobox in the editor dialog was disabled due to an old bug, it all seems to work now)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Library cleanups (so they can become frameworks)&lt;/b&gt;
Most of this happened in KCalCore and KContacts. The plan is to submit them for inclusion into KF5 after the 19.08 release (Sep/Oct 2019). Other libs were discussed, a longer and more specific sprint would be needed, to untangle some of the dependencies and do a major cleanup of the libraries.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Deadlock handling&lt;/b&gt;
Thanks to Dan's insights, I was able to &lt;a href="https://phabricator.kde.org/D20326"&gt;improve greatly the handling of the unavoidable database deadlocks&lt;/a&gt;. It's a feature from all database implementations: when multiple transactions are happening at the same time and they end up locking the same rows, the database rolls back forcefully one of the transactions and asks the application to retry. But retrying doesn't mean running the exact same SQL statements (as the code was doing)... If we retry inserting into a table we might get a different auto-increment ID than the first time, so subsequent queries (which might use this ID) have to be adjusted. Therefore we now rerun the whole handling of the current command at the C++ level, instead.
The new &amp;quot;retry&amp;quot; logic has its limits though, some transactions are currently created from another process (in ItemSync). Dan started to redesign sync'ing that it happens more server-side and we don't have those TransactionJobs anymore. To be continued...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Multiple merge candidates&lt;/b&gt;
Despite a lot of head scratching and digging through possible scenarios, we still don't know how exactly this error can happen.
But at least when it does happen, &lt;a href="https://phabricator.kde.org/D20243"&gt;the sync doesn't get stuck forever anymore&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Many thanks to all our sponsors and donators for making such sprints possible, and I hope we do this again, with more people, and less critical bugs :-)&lt;/p&gt;</description></item><item><title>2018 Toulouse PIM sprint report</title><link>https://blogs.kde.org/2018/07/24/2018-toulouse-pim-sprint-report/</link><pubDate>Tue, 24 Jul 2018 00:00:00 +0000</pubDate><author>David Faure</author><guid>https://blogs.kde.org/2018/07/24/2018-toulouse-pim-sprint-report/</guid><description>&lt;p&gt;Like every year, the PIM developers met in Toulouse for a bit of bugfixing ;)&lt;/p&gt;
&lt;p&gt;Except for &lt;a href="https://www.dvratil.cz/2018/04/my-kde-pim-update/"&gt;Dan Vratil&lt;/a&gt;, we forgot to blog about it, here's a belated blog post with what we did there.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Privacy goal&lt;/b&gt;
&lt;a href="https://phabricator.kde.org/T742"&gt;Memory hole support&lt;/a&gt;
The big issue here is that we need to update the headers outside the mimetreeparser, like subject or from/to etc. That's why mimetreeaparser should get an interface, so plugins can change headers. Another header that would benefit of that interface is a DKIM signature checks on the mail, that would update the DKIM status based on actual data.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;KMail&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Improved security when encountering encrypted emails with external references.
 &lt;a href="https://phabricator.kde.org/D12391"&gt;D12391&lt;/a&gt;, &lt;a href="https://phabricator.kde.org/D12393"&gt;D12393&lt;/a&gt;, &lt;a href="https://phabricator.kde.org/D12394"&gt;D12394&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Discussed header validation support (memory hole, DKIM): how to integrate this into mimetreeparser, and how to feed that into the mail renderer. See &lt;a href="https://phabricator.kde.org/T8568"&gt;this task&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Akonadi Search&lt;/b&gt;
Support for encrypted emails&lt;/p&gt;
&lt;p&gt;&lt;b&gt;kdepim dependencies&lt;/b&gt;
In order to move ksieve down the dependency tree:&lt;/p&gt;
 &lt;ul&gt;&lt;li&gt; pimcommon - get rid of PimCommon::SieveSyntaxHighlighterUtil (&lt;a href="https://phabricator.kde.org/D12401"&gt;here&lt;/a&gt; and &lt;a href="https://phabricator.kde.org/D12409"&gt;here&lt;/a&gt;)&lt;/li&gt;
 &lt;li&gt;PimCommon::Util::createImapSettingsInterface is also in AkonadiMime, so properly moved the function to PimCommonAkonadi at least, as it needs Akonadiserver to run anyways&lt;/li&gt;
 &lt;li&gt;for libSieve change dependency kdepim-runtime (imapresource &lt;- libksieve) should make it easier to move libsieve to a lower tier and make imapresource push informations to ksiveui and we can remove akonadi dependency&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;KItinerary&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;try harder to extract boarding times from pkpass files&lt;/li&gt;
&lt;li&gt;live test of the itinerary app passing manual and automatic boarding pass inspection on two airports&lt;/li&gt;
&lt;li&gt;acquire more test data from sprint attendees (and as a result of this made EasyJet IATA BCBP data parsing work, and fixed Iberia boarding pass extraction)&lt;/li&gt;
&lt;li&gt;handle merging of codeshare flight data&lt;/li&gt;
&lt;li&gt;rework data extraction in KMail when multiple data elements are found (this is now all merged together to further improve the completeness of the data)&lt;/li&gt;
&lt;li&gt;made boarding passes/tickets for trains and busses accessbile in the app too (this should in theory enable the app to let you travel on SNCF when booked via trainline.eu)&lt;/li&gt;
&lt;li&gt;attach the entire reservation data to ical events created from it, so it's fully synced to other devices that way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt; Akonadi&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;finished and merged Notification Payloads (T639). The hope of Notification Payloads is to give us substantial performance boost and IO reduction by easing on the amount of SQL queries we do, especially during sync, by sending the changed entities as part of change notifications, so that clients don't have to query the entity from Akonadi after they receive the notification&lt;/li&gt;
&lt;li&gt;improved Akonadi Console to simplify debugging notifications and monitors&lt;/li&gt;
&lt;li&gt;new Logging tab in Akonadi Console with logs from all Akonadi apps&lt;/li&gt;
&lt;li&gt;improve Debbugger view&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Debugging akonadi&lt;/b&gt;
Update debugger window to handle more messages without slowing down the machine too much&lt;/p&gt;
&lt;p&gt;&lt;b&gt;LDAP completion&lt;/b&gt;
Now works again with non-ascii characters in the search string&lt;/p&gt;
&lt;p&gt;&lt;b&gt;WebEngine regressions&lt;/b&gt;
Investigated Qt 5.11 bug which broke clicking on links in KMail, reported to &lt;a href=" https://bugreports.qt.io/browse/QTBUG-67870"&gt;the Qt bugtracker&lt;/a&gt;, fixed since.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Qt performance&lt;/b&gt;
&lt;a href="https://codereview.qt-project.org/227128"&gt;Sped up QTimeZone::isTimeZoneIdAvailable by a factor 43&lt;/a&gt;. This is relevant when deserializing many events from akonadi (testcase: opening an invitation email in standalone kmail, loads the full calendar)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;IMAP Resource&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Fix IMAP resource stuck if connection lost between OK and Login, as well as during Login&lt;/li&gt;
&lt;li&gt;Fix possible data loss on connection lost, depending on the current task. This is likely what leads to some emails in a Send folder having no remoteId, making every future sync of that folder slower&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;kdepim addons&lt;/b&gt;
Fixed long-standing crash on make install, due to a memory leak when closing a separate viewer window.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;KSMTP&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Fix sending emails where a line starts with a dot&lt;/li&gt;
&lt;li&gt;Remove dependency on KMime&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Kontact&lt;/b&gt;
Prettier icons in the Kontact side pane&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Turning PIM libraries into KDE Frameworks (ongoing effort)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Plan for syndication: remove FileRetriever (only used by akregator via Loader::loadFrom), that removes the KIO dependency, after 18.08 freeze ABI and move to KF5&lt;/li&gt;
&lt;li&gt;kcontacts kdelibs4support data dependency: move to CLDR for country name mapping, move the address formatting data from kdelibs4support to kcontacts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;OAuth login&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;moved the XOAUTH2 SASL plugin to LibKGAPI&lt;/li&gt;
&lt;li&gt;IMAP: it's possible to use Gmail IMAP without the OAuth authentication again&lt;/li&gt;
&lt;li&gt;added support for OAuth authentication to SMTP module&lt;/li&gt;
&lt;li&gt;added XOAUTH2 support to KMailTransport, so it's possible to authenticate with Gmail SMTP via XOAUTH2 (which means 2FA and Gmail for Business domains support out of the box)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;outreach&lt;/b&gt;
Accept and handle outstanding review requests from new contributors.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ruqola (RocketChat client)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixing AboutPage tab bar&lt;/li&gt;
&lt;li&gt;Fixing about page author layouting&lt;/li&gt;
&lt;li&gt;Preparing fix for password security if prefilled&lt;/li&gt;
&lt;li&gt;Discussion design over support for multiple accounts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Android backend for KCalCore&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;assumption: we use the platform calendaring API, rather than Akonadi, and use KCalCore::Calendar as the unifying API for that, backed by AkonadiCalendar and a yet to be created AndroidCalendar&lt;/li&gt;
&lt;li&gt;challenge: that API doesn't cover all of ical, but for some sync connectors (namely DavDroid) some extra fields seem available in the ExtraProperties table (confirmed for GEO, X-xxx and attachments)&lt;/li&gt;
&lt;li&gt;problem: OpenTasks + DavDroid do not store custom properties or parent &lt;-&gt; child relations, that's even lost on Android-side changes. This means we also can't access all information needed for Zanshin on Android.&lt;/li&gt;
&lt;li&gt;what to do about the google calendar? any chance to access additional ical fields there?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Syndication&lt;/b&gt;
Removed KIO and KCoreAddons dependency to make it ready to be moved to Frameworks&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Modern C++ usage&lt;/b&gt;
KF5 is still on C++11, due to GCC 4.8 and MSVC 2013
Application code could use C++14 (e.g. generic lambdas), which would require GCC 4.9 and MSVC 2015, which is fine&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Akregator&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cleanups on the storage plugin API&lt;/li&gt;
&lt;li&gt;drop deprecated unused code&lt;/li&gt;
&lt;li&gt;work on a SQL backend (private branch so far, but beginning to work)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Community Data Analysis&lt;/b&gt;
See &lt;a href="https://ervin.ipsquad.net/2018/04/22/exploring-contributors-centrality-over-time/"&gt;Kévin's blog post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Many thanks to all our sponsors and donators for making such sprints possible.&lt;/p&gt;</description></item></channel></rss>