The following list contains the things which need to be done for Akonadi.
Note: The person noted in the "Contact" column is not necessarily the one implementing that feature, but the one who can tell you what to do and how to help, i.e. you can also contribute to those tasks ;-)
Urgent tasks that need to be finished for the KDE 4.1 release (May 19th):
|DONE||Item streaming in ItemSync/ResourceBase||As discussed in Osnabrueck||<Tom/Volker>|
|DONE||Payload serialization format versioning|| see below
|DONE||API for additional item parts||As discussed in Osnabruck||<Volker/Tobias>|
|DONE||Infrastructure for showing additional dialogs from agents/resources||As discussed in Osnabrueck||<Tom>|
|DONE||Allow to limit ItemFetchJob to current cache content||Prevents search index feeder agents from downloading all remote data||Volker <firstname.lastname@example.org>|
|DONE||Fix API for item/collection modifications||See Osnabrueck meeting notes for details||Volker <email@example.com>|
|DONE||Plugin Versioning||For serializer plugins, also check using Qt plugin stuff instead of the libkdepim plugin framework||Tobias <firstname.lastname@example.org>|
|DONE||Tray app||small app to control the server and have a something that can report errors||Toma <email@example.com>|
|DONE||Backup support||Dump & Restore database contents, also useful when upgrading to a newer database version||<firstname.lastname@example.org>|
That's the stuff we want to have in 4.2, very roughly ordered by priority.
|DONE||Server error reporting||Helpful error message when the server cannot be started or if there is some other problem communicating with it.||Volker <email@example.com>|
|IN PROGRESS||KResource migration tool||For KABC and KCal resources, setting up Akonadi <-> KResource bridges where needed||<Volker>|
|IN PROGRESS||KResource bridges||Subresource support still has to be done||<Kevin>|
|TO DO||Complete iCal resource||error handling, robustness, legacy formats, etc.||[mailto: <>]|
|IN PROGRESS||Complete vCard resource||same as iCal||<Bertjan>|
|IN PROGRESS||Item size||Needed by Mailody||<firstname.lastname@example.org>|
|IN PROGRESS||Finish collection model/view||see below||<email@example.com>|
|IN PROGRESS||Collection statistics for sub-trees||Provide a CollectionStatus object covering the full sub-tree in the model, allowing accumulated unread counts etc.||<Thomas>|
|TO DO||Batch jobs for modifying/deleting collections/items||it would be great to have jobs which perform operations on several entities in one sitting (a use-case: mark all as read).||[mailto: <>]|
|TO DO||Batch job to retrieve a set of items from Akonadi||Those items don't belong to the same collection, rather they are located in different collections||[mailto: <>]|
|TO DO||CollectionFetchJob/ItemFetchJob should be able to retrieve entities by remote id/mimetype||
This is problematic with change notifications, as they have to know about the filtering with the \Seen flag as well. This type of filtering would be possible with full Nepomuk interface though. We don't want yet another query language here. The plan is to fix the nepomuk agent and use that as semi-public interface for now.
|TO DO||ResourceBase::collectionsRetrievalDone is missing||I'm working around by calling collectionsRetrievedIncremental() with empty collection lists||[mailto: <>]|
|IN PROGRESS||LINK/UNLINK commands||Managing item references in virtual collections||Volker <firstname.lastname@example.org>|
This stuff is currently not considered for 4.2 due to lack of resources. Of course it will be added nevertheless if someone implements it. The list is completely unsorted.
|TO DO||Error reporting||Akonadi::Job basically has only one error code: Unknown||<Tobias>|
|IN PROGRESS||Akonadi Artwork||Icon for the tray app||Toma <email@example.com>|
|TO DO||Nepomuk integration||Generic Item tag/rate/comment, etc.||<Tom>|
|TO DO||Account creation wizard||as discussed in Berlin, see below||[mailto: <>]|
|TO DO||Sync collection tree after creating setting up a resource||see AgentInstanceCreateJob||[mailto: <>]|
|TO DO||Support standard commands for QUndo framework||[mailto: <>]|
|TO DO||Conflict detection in resources||See Osnabrueck meeting notes for details||[mailto: <>]|
|IN PROGRESS||Action framework||see below||Volker <firstname.lastname@example.org>|
|TO DO||Solid integration||Switch online/offline state in ResourceBase automatically||[mailto: <>]|
|TO DO||Make unittests work without destroying the production database||[mailto: <>]|
|IN PROGRESS||Fix API docs||The libakonadi move as well as the huge API changes following it broke lots of the docs technical and content-wise, see below||<Tobias>|
|TO DO||Filesystem Backend||Store content data in files instead of the database, transfer filehandles instead of data to the client||[mailto: <>]|
|TO DO||Migration||Data and settings from pre-Akonadi times, see below||[mailto: <>]|
|TO DO||Remote Search||Delegating searches to resources, see below||[mailto: <>]|
|TO DO||Extended notifications||Item change notification do not yet include their source collections (real and virtual)||[mailto: <>]|
|TO DO||Alternative for Akonadi::ResourceBase||Not using the scheduler to avoid the serialization of operations, see RSS resource. (This will get very complicated. Maybe use a proxy ResourceBase for this, which is thread-pooled?)||[mailto: <>]|
|TO DO||Collection parameter for Monitor::itemChanged() and Monitor::itemRemoved()||
If the item resides in several collections (normal + virtual collections) then emit those signals for each collection. Adding this would mean changing it in many places (Monitor, Observer, ...), this is lots of work but probably the right thing to do. Related to virtual collections, since with them, items can be in multiple collections. Better wait until the Nepomuk stuff is finished?
Overview on the current state of support for various types:
|yes||partial||MessageModel, MessageCollectionModel, threading proxy model||?||maildir, IMAP||threading agent|
|News||yes (1)||partial (1)||(1)||(1)||NNTP|
|Contact||yes||no||ContactModel||-||vCard, facebook, KRes|
|Notes||no||no||-||-||-||not started yet|
|Feeds||yes||no||Feeds, Items||?||OPML||GSoC in playground/pim|
|Bookmarks||yes||no||-||-||local bookmarks, del.icio.us|
(1) see Email
|TO DO||Extend Message Model||Add all required columns, save/restore layout, flag delegate, configurable columns, etc.||[mailto: <>]|
|TO DO||Share mail flag code||Standard actions, standard flag enum/constants, Nepomuk interaction||[mailto: <>]|
|TO DO||Extend ENVELOPE||Add more information to the envelope payload part in the serializer plugin, eg. trheading information is missing||[mailto: <>]|
|TO DO||Fix/finish threading||[mailto: <>]|
|TO DO||Todo proxy model||See KOrganizers To-Do view||<Bruno?>|
|IN PROGRESS||Subtype identification||See discussion on kde-pim mailinglist||<Kevin?>|
|TO DO||Agenda view||KOrganizer agenda view based on Akonadi||<Bruno?>|
|TO DO||Month view||KOrganizer month view based on Akonadi||<Bruno?>|
|TO DO||Timeline view||KOrganizer timeline view based on Akonadi||[mailto: <>]|
|IN PROGRESS||KResource Akonadi bridge||for applications using KCal or KABC||Kevin <email@example.com>|
|IN PROGRESS||Akonadi KResource bridge||for data accessed through KCal or KABC resources||Kevin <firstname.lastname@example.org>|
|TO DO||Expire Agent||[mailto: <>]|
|TO DO||MBOX Resource||<Thomas>|
|TO DO||Extend IMAP Resource||[mailto: <>]|
|TO DO||POP3 Resource||<Thomas>|
|IN PROGRESS||RSS Resource||GSoC in playground/pim (Details)||<Dmitry>|
|TO DO||Filter Agent||[mailto: <>]|
|TO DO||Search||[mailto: <>]|
|TO DO||Filter Rule GUI||Used by filters and searches||[mailto: <>]|
Resource status overview (this should list all resources existing in KDE3 or already under development for Akonadi):
|Resource||Retrieve Collections||Retrieve Items||Change Collections||Change Items||Configuration||Notes|
|iCal||yes (4)||yes (1) (2)||no||yes (5)||yes||does not yet watch for file changes|
|vCard||yes (4)||yes (1) (2)||no||?||yes||does not yet watch for file changes|
|maildir||yes (1) (4)||yes (1) (2)||?||?||yes|
|mbox||no||no||no||no||no||not started yet, code exists in KMail|
|IMAP||yes (1) (4)?||yes (1) (2)||no||no||no||code exists in kio_imap4 and Mailody, support for extensions: quota, ACL, annotations missing, what about Kolab and Scalix?|
|POP3||no||no||no||no||no||not started yet,code exists in kio_pop3|
|NNTP||yes (4)||yes (2)||n/a||n/a||yes||Needs support for local collection names and collection hierarchy|
|Local Bookmarks||?||?||?||?||(3)||Code in akonadi/resources|
|OpenChange||?||?||?||?||?||Code in akonadi/resources|
|?||?||?||?||?||Code in playground/pim|
|del.icio.us||?||?||?||yes||no||Code in playground/pim|
Ideas/notes etc. on various open issues in Akonadi.
Idea: Have something like KStandardAction for Akonadi that not only includes the representation of the action but also its state management and the actual operations. Like libakonadi that should be splitted into a generic, type-independent part and be extensible for type-specific actions. This will enable code sharing among many applications and guarantee consistent actions everywhere.
State management: watch selection models of a collection and/or item model.
Use KXMLGUI for context menus in standard views to allow easy extensibility with custom actions.
The list is definitely long enough to make this worthwhile.
Ideas/missing features/bugs of the collection model/view:
Notes on how to keep long-term protocol, source and binary compatibility.
Notes/ideas/complaints about the Akonadi::ResourceBase API:
Smaller stuff that should be fixed before the ABI freeze and is not yet listed above:
Notes on the resource configuration wizard discussion.
First review of the akonadi code reveals PGSQL Qt driver is already supported, but the code is not totally ready for it. Some first reading comments about where to patch for supporting PostgreSQL too:
mysql: SHOW INDEXES FROM %1 pgsql: SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered, i.indisvalid, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true), c2.reltablespace FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i WHERE c.oid = '16713' AND c.oid = i.indrelid AND i.indexrelid = c2.oid ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname relname | indisprimary | indisunique | indisclustered | indisvalid | pg_get_indexdef | reltablespace --------------+--------------+-------------+----------------+------------+--------------------------------------------------------------+--------------- foo_pkey | t | t | f | t | CREATE UNIQUE INDEX foo_pkey ON foo USING btree (id) | 0 foo_time_key | f | t | f | t | CREATE UNIQUE INDEX foo_time_key ON foo USING btree ("time") | 0 (2 lignes)
The current plan is to put some parts of KMail into a stand-alone library, independent of KMail. This increases code reuse (for example, the message composer could be shared with Mailody) and makes the code a lot easier to maintain and to port to Akonadi.
|TO DO||Bodypart formatters||[mailto: <>]|
|TO DO||Reader Window||[mailto: <>]|
|TO DO||Composer: Editor||[mailto: <>]|
|TO DO||Composer: Message Composer||[mailto: <>]|
|TO DO||Composer: GUI Window||[mailto: <>]|
|TO DO||Queue Manager for mailtransport||[mailto: <>]|
|TO DO||Templates: Core||[mailto: <>]|
|TO DO||Templates: GUI||[mailto: <>]|
|TO DO||Port KMCommands||[mailto: <>]|
|TO DO||Port away from KMMessage and KMFolder* everywhere it is left||An idea might be: wrap KMMsgBase/KMMessage inside a reference counted Message class. Insulate everything else from it by wrapper functions. KMFolder should be easier...||[mailto: <>]|
|TO DO||Migration application for index and other config||[mailto: <>]|
|TO DO||Port MDNs||[mailto: <>]|
Sort of related so the stuff above but with a scope for all of KDE PIM and beyond.
|TO DO||Share identity config GUI parts||eg. the signature configuration widget||[mailto: <>]|
|TO DO||Mailtransport Agent||Global shared outbox, central mail sending instance||[mailto: <>]|
|TO DO||Recently sent to support in mailtransport||related to above, based on Akonadi/Nepomuk||[mailto: <>]|
|TO DO||Composer engine||Shared stuff for KMail/KNode/Mailody: Crypto, editor, editor actions, attachment model, message assembly, etc.||[mailto: <>]|
There are three different parts of source code:
The documentation is mainly in the code itself, in the form of doxygen comments. You can find the generated documentation on [api.kde.org api.kde.org], for example:
So far only MySQL. There is some work on PostgreSQL support going on though. Basically, every database that is supported by QtSQL can be used, requiring minimal changes in the code at most. However, not all of them provide the features needed by Akonadi (see next two questions).
We tried. Really. It can't handle the concurrent access very well, in the best case this means very slow operations, but we've also seen deadlocks and failing transactions. Once that's fixed in sqlite, adjusting Akonadi to use it again instead of MySQL is no problem.
We tried that as well, there are two reasons for not using it: No support for the InnoDB engine (which we need for transaction support) and poor availability (only OpenSUSE provided usable packages, needed a patched QSQL driver).
No. Akonadi starts its own local MySQL server (unless configured otherwise, see next question). All you need is having the 'mysqld' binary installed at runtime (usually found in the mysql-server package of your distribution).
Yes, it can. You find the corresponding settings in ~/.config/akonadi/akonadiserverrc.
See section "Deployment Issues" above, we are aware of that and working on it. Some of these, like backup/restore are already implemented. But please be aware that most of this issues also existed before (eg. with KMail's custom binary indexes).
No. There has to be one Akonadi server instance per user. However, it is possible to use a shared database server.
No. Akonadi is not a groupware server. It's a local cache only.
Distributions using Apparmor require you to run aa-complain mysqld with root privileges then reload apparmor.
On kubuntu this is:
sudo aa-complain mysqld sudo /etc/init.d/apparmor reload
Although you probably don't have an apparmor in your processlist, you are still using it, run aa-complain mysqld and try again.
EDS is limited to contacts and calendar data, Akonadi is type-independent. Especially, Akonadi is designed to also handle high-volume data such as email. Akonadi and EDS also differ largely in their access protocol on the technical level (Corba/D-Bus vs. local socket with IMAP-like protocol/D-Bus) as well as one the protocol level (type specific vs. generic).
From the developers point of view, there is Akonadi::CollectionCreateJob for that, from the users point of view, most applications allow that, eg. Mailody or akonadiconsole.
However, there is one limitation: Top-level collections can only be created by resources, not by normal applications. The reason for that is that every object (collection or item) is supposed to have an owning resource, that is a resource that is responsible for storing and retrieving that object. There is an ongoing discussion to remove this restriction though.
So, if you want to create a collection eg. for testing purposes, add a resource first. Most Akonadi applications offer an option to do that, a module for KControl is planned as well.