Using Extended IMAP as transport protocol ========================================== Access Modes ------------- Query: All queries can be parameterized with field identifiers (e.g. 'date < 19.12.2005') Light Query: - returns only a subset of data of a pim item (e.g. header, datetime and subject of a mail) Full Query: - returns the full pim item Generic Query: - returns generic lists of strings ?: Returns data or resourceIds? Store: Server Extensions ------------------ The storage server needs some extensions to satisfy our needs. - disable security handling - disable network handing - disable authentication - add management (starting/stopping) of resources - add 'message deleted/changed' notification - add error notification Implementing Qt-based libakonadi ================================ All actions are encapsulated in Jobs, which provide an asynchronous interface (plus a synchronous convenience interface) to the lower transport protocol. Addionally to Marc's API proposal, we'll need ways to cancel/kill a job and to receive progress/status information and error messages. There is a great similarity to KIO::Job, so using KIO (at least for a prototype) might be an option (especially since we have an IMAP KIO slave already). Jobtypes: - ProfileJobs - MonitoringJob - DataJobs ProfileJobs ------------ These jobs encapsulate the handling of profiles, which involves the following tasks: - get list of all available resource types - get list of all profiles - get list of resources of a profile - add resource to a profile - remove resource from a profile - reconfigure resource - set online/offline state MonitoringJob -------------- This job (should be only one per application) provides information about changes in the storage service. The following changes are possible: - new items available - items deleted - items changed - online/offline state changed DataJobs --------- These jobs encapsulate the handling of pim items, which are BLOBs with a mimetype assigned. The following tasks are involved: - parameterized search of items (returns referenceIds) - query for light pim objects for a list of referenceIds - query for full pim objects for a list of referenceIds - query for generic pim objects for a list of referenceIds - storing a pim object - removing a pim object Implementing KDE-specific libakonadi ==================================== For every pim object type (mail/contact/event), there are reimplementations of the generic Jobs. libkabc, libkcal, and libkemail will make us of these specific Jobs.