KDE PIM/Meetings/Osnabrueck 2
From January 2rd to 5th 2004, KDE PIM developers met in Osnabrück again to discuss about and hack on the KDE PIM application family. The results of the discussions and the hacking can be found below.
In the "Kolab client" session the status of the different Kolab client parts in Kontactwas presented. Marc also gave a short overview of the work currently done in the Aegypten branch.
We identified as main missing parts:
- Invitation handling
- Move iCalendar parsing from KMail to KOrganizer
- Plugin interface in KMail for handling display of special mime types (like iCalendar for invitations)
- Move KMail to KConfig XT
- Port KMail configuration dialog to use KControl modules
- Centralize identity and account configuration
- Kolab Configuration Wizard (To be addressed by generic configuration wizard framework based on KConfig XT)
- Free/Busy Handling in KOrganizer
- KPilot integration in Kontact
Work was done on all of these topics during the meeting. A lot of code went to osnabrueck_branch and some of the tasks from the list are already completed.
Even before the meeting there was consensus within the kdepim team that a separate release of kdepim shortly after 3.2 would be useful to deliver the features which weren't completely ready for 3.2. There was a session to discuss this release at the meeting, followed by an IRC meeting including some of the people not present in Osnabrück.
Cornelius presented a proposal for a release plan:
At Osnabrueck we discussed the next kdepim release after 3.2. There was a wide agreement that it makes sense to do a separate release of kdepim soon after 3.2 idependently of the rest of KDE to deliver the features which were almost ready for 3.2 but finally didn't make it into 3.2. Key features we would like to include in the separate kdepim release are: - Kolab client - KitchenSync (Syncing calendar and addressbook between desktops) - HTML mail composing - KPilot integration into Kontact - Client-side IMAP filtering - Connection of Kontact to eGroupware The propsal is to make this a feature-driven release by starting the release cycle when four of the six key features are implemented. The estimated time frame for this would be end of February. The release cycle would look like this: x: Start of release cycle triggered by completion of four of six key features x + 2 weeks: feature freeze, branch, alpha release x + 5 weeks: beta 1 x + 7 weeks: rc1, message freeze x + 9 weeks: stable release, documentation freeze, merge to HEAD x + 13 weeks: i18n release + critical bug fixes If required we can add additional betas or release candidates delaying the subsequent steps. If all goes well, the release would happen somewhen in May. To make it possible to release in the proposed way we need some additional policies. All the people in Osnabrueck agreed on that: - kdepim has to compile and run with the released stable 3.2 kdelibs, no dependencies on changes in the kdelibs HEAD branch later than 3.2. - kdepim has to be kept stable enough to be ready for an alpha release two weeks after the feature completion criteria is met, that means no experiments which will need a lot of time to become stable, but keeping the kdepim HEAD branch in a usable state. David proposed me to be the release coordinator for the separate kdepim release, there were no objections to the proposal and I'm willing to do this job.
Two questions were discussed in depth:
Versioning scheme for separate kdepim release
One proposal was to name it kdepim-3.3. In favour of this scheme is that it speaks for itself, it clearly indicates that the release is an update with new features, it fits to the way kdepim releases were done in the past and it would make packaging straight-forward.
Another proposal was to use a completely different name like Kontact 1.0. This would have made it clear that it is a separate release. It might also be better suited to avoid confusion of people looking for (non-existing) kdelibs-3.3 packages fitting to kdepim-3.3 packages. The concrete Kontact 1.0 name wouldn't be appropriate for all parts of kdepim, though.
We also discussed putting the new features in the 3.2.x branch, but this has the severe problems that it would break feature and message freeze in the stable branch, would introduce new bugs into the branch, would have a misleading versioning scheme (the minor release isn't used for feature updates up to now) and would eliminate the option to maintain a stable 3.2.x branch without the new features.
The conclusion and agreement was to go with the kdepim-3.3 name
Maintance of the 3.2.x branch
With a kdepim-3.3 release another branch is introduced which needs additional resources. The question came up if the 3.2.x would still be maintained under these conditions.
There are several reasons for maintaining the 3.2.x branch. This would be the more stable branch. Maintaining it wouldn't force people to upgrade to kdepim-3.3 with the new features (and new bugs). Some packagers will take up the official stable 3.2.x branch.
Against maintaining the branch speaks that it would be less effort to not do so and that packagers would have a clear recommendation what branch to use.
The conclusion and general feeling was that kdepim-3.3 development should happen in a separate branch in order to keep all options. How much effort is required to do that depends on who picks up which branch and how stability of the 3.3 branch develops.
Other issues and conclusion
Adriaan proposed to offer some "Janitor" jobs for things like providing screenshots for documentation and volunteered to follow up on this proposal after the meeting.
During the IRC meeting we discussed some aspects of the release in some more detail. General consensus was to follow the proposals.
As result the kdepim-3.3 release plan was set up. This hopefully will result in a Kontact 1.0 release in May 2004.
These are the individual reports of the participants of the meeting.
First, I started off fixing some smaller korganizer bugs and discussing some patches with Lutz. Later I merged the two kpilot config dilogs to one, so that we'll only have one kcm module for kpilot. The rest of the time was spent on trying to convert all of kpilot to KConfig XT (only partly finished) and writing the kontact plugin (showing kpilot's current state and config in the summary view and making the config available in the menu). The latter is more or less finished already, but not yet commited, the KConfig XT is under way (and still needs a lot of work to fix the config sync issue, as we have two processes working on the same config at the same time), and the KCMification of KPilot's setup dialog is also done but not commited yet. To sum up, what's finished: -) combine the two kpilot setup dialogs to one -) make kcm for setup dialog -) write kontact plugin to show the status of kpilot and make the kcm available in the config dlg What's halfway done: -) Moving all conduits and the kpilot and kpilotDaemon apps to KConfig XT (yes, that's the boring and time-consuming monkey-work on the one hand, and on the other hand I have to redesign the whole config stuff framework in kpilot, which was already quite sophisticated by passing on the global config object to the conduits and making sure that the config loaded in kpilot and in kpilotDaemon stay in sync -- at least most of the time ;-) ) Still missing: -) Config sync issue of kpilot and kpilotDaemon -) add a dcop signal to kpilotDaemon to indicate a config and/or status change, so the plugin can connect to that signal and doesn't have to poll the daemon ever few seconds to update the status. -) Simple "Wizard" to setup KPilot and its conduits for kontact
I started by looking through the bugreports and looking for ready-to-apply patches. I was lucky and found one by Volker Krause who fixed the problem with KNode not honoring the statusbar extension. With that patch the KNode part does no longer permanently occupy the statusbar after being launched. Then I fixed icon loading in KOrganizer when running as part and investigated a nasty crash that was caused by a dangling pointer and that was eventually fixed and committed. Inbetween, I stopped PIM hacking to investigate issues with icecream, the new cool tool distcc-derived tool that we used for distributed compilation. I ported the scheduler and server over to use getopts() for commandline parameter handling and added a README. In osnabrueck_branch, I fulfilled some minor wishlist items, such as renaming items which is currently not possible anymore due to string freeze. Finally I went through the Kontact Settings menu and tried to ensure constant menus. XMLGUI is tricky, but with David's help, I was able to get a consistant menu structure without too much hassle. Aside of that, I had some interesting discussions with Lutz about syncing and available applications and libraries. I assisted David to fix the nasty KUniqueApplication issues. Finally I cleaned up the bug database
At first I applyed some patches from my harddisc which hadn't been reviewed and did manly the following stuff Kontact: - using 'Configure Summary View...' as action name #70466 - show this configure action only when kcms are available #71326 - let the knotes part and summary widget using CalendarResources - a small gui improvement by using grey bars as headlines - add configUpdate() method to Kontact::Plugin KAddressBook: - made VCardTool a private class and port all apps to VCardConverter - removed wrongly added picture #71852 KOrganizer: - add multi day selection to osnabrueck_branch - fixed issue with missing actions of the plugins when embedded in kontact Furthermore I reworked the contact editor in KAddressBook, it's now extensible via plugins. During the last days my main actions were bugfixing and adding new cool stuff, see the next cvs digest for more info ;)
I did some dimap fixes, reworked its status handling to upload locally changed flags and share more code with online imap. Then I started on porting the kmail configure dialogs to kcms and the kmail config backend to KConfigXT for easier integration in Kontact and the overall greater good. Inbetween I spent time discussing details of the mimetypehandler plugin design with Marc and Ingo.
Work quite a lot on dIMAP. It's now as good as it gets for 3.2, and it is a lot faster and much better. Thanks to Till for helping me out here. I have now gotten the IMAP resource for KAddressBook in shape. Most of this work was done during the meeting, some of it by Tobias (thanks). KMail now no longer links to ktnef or libkcal - a process that was started during the meeting and just finished. This is the first step in having a plugin for showing invitations. I also made the first step towards having invitations handled in kroupware_branch style again. This will be finished during the upcoming week. And finally the IMAP interface of KMail was completed.
Speedup loading of files with many events by a factor of 7 (this helps with karm and korganizer startup times). Fixed karm so that it doesn't create an event every time the autosave timer fired. This was the reason for the huge number of events in karm's .ics file. Improve integration between standalone apps and kontact. This means one can launch "kmail", "kmail [email protected]", "korganizer", "kaddressbook --new-contact", "knode news://server/group" while kontact is running, and kontact will answer that call the right way (switching to the part if no argument was given, or handling the command lines arguments). In all cases the kontact window is also activated (brought to the front). Also wrote a test plan (in uniqueapphandler.cpp) to make sure to test all cases. Technical description of the above: * kontact plugins provide a DCOPObject to handle newInstance calls. In order to parse command-line options it needs to call something in the part - which it does using an in-process DCOP call, since it doesn't link to it. * the above isn't done if standalone app was already running when kontact starts. In such a case the plugin has to watch for the moment when the standalone app terminates, using the DCOPClient signal. Then it can create the above. Note that once this happens, kontact "takes over", the standalone app can't be launched anymore. * This required two changes in kdelibs (new method in DCOPClient, and a way to reset KCmdLineArgs in order to redefine a complete new set of arguments).
The only thing I really did was make the KPilot KNotes conduit mostly work. With Reinhold, we re-did the configuration of KPilot yet again, and started a move to kconfigXT (and discovered all of its limitations). Reinhold made a kontact summary plugin for kpilot, so that the first steps to visibly integrating kpilot with kontact have been made.
I did the following at Osnabrück: - Discussed with Marc the body part formatter plugins (which will be used for handling invitations) and started the implementation. - Fixed bugs, handled bug reports, reviewed patches.
- Generic framework for configuration wizards based on KConfig XT. This currently consists of two classes (KConfigPropagator and KConfigWizard) and a small test program in libkdepim. The goal is to describe configuration wizards by some propagation rules for configuration options added to a KConfig XT XML file and some simple widgets to be put in into a standard wizard-like dialog. This should solve the problem of the Kolab client configuration which needs a lot of settings in the individual applications to be set based on only a small set of information like address and account information of the Kolab server etc. - Release planning for kdepim-3.3 - Discussions, patch reviewing, organization
Summary of the Hacking
These are the most relevant things which were done during the hacking sessions on the CVS branch which was created for this meeting (osnabrueck_branch):
- Move iCal handling from KMail to KOrganizer (Bo)
- Implement IMAP resource for KAddressBook (Bo)
- Fix problems with menu order in Kontact (Daniel)
- Improve integration between standalone applications and Kontact (David)
- Plugin interface for additional contact editor pages (Tobias)
- IMAP/dIMAP fixes, especially message status handling (Till, Bo)
- View all contacts of an attached vCard instead of only the first one (Andreas)
- Spam Filter Setup Wizard (Andreas)
- Make invitation handling work as in the Kroupware project (Bo)
- "New Article" for Newsgroups component (Daniel)
- New KNotes part (Tobias)
- Add todo summary view (Tobias)
- KPilot plugin for Kontact (Reinhold)
- Multi day selection (Tobias)
- Bug fixes (Tobias, Reinhold, Cornelius)
- Bug fixes (Adriaan, Reinhold, Daniel, Tobias)
- Configuration dialog changes (Reinhold)
- Add xmlrpc (eGroupware) resources (Tobias)
- Finish KABC-IMAP resource (Bo, Tobias)
- IMAP resource fixes (Bo)
- Speed up loading of calendar (David)
- Added PluginLoader template (Marc)
Experience with Icecream
During the hacking sessions we used a new tool called icecream for distributed compiling. This is similar to Teambuilder and distcc. General experience was quite positive. Some improvements on icecream itself were done during the meeting.