[Kde-pim] How to use akonadi

David Jarvie djarvie at kde.org
Mon Sep 7 00:33:25 BST 2009


On Thursday 03 Sep 2009 19:05:03 Eduardo Robles Elvira wrote:
> On Wed, Sep 2, 2009 at 11:04 PM, Mantia Andras<amantia at kde.org> wrote:
> > Tobias Koenig wrote:
> >> On Wed, Sep 02, 2009 at 04:28:12AM +0100, David Jarvie wrote:
> >> Hej David,
> >>
> >>> I've looked for example code, and looked at the API documentation
> >>> (including the Akonadi overview there), but I'm at a bit of a loss to
> >>> know how to start. It would seem that the right thing might be to
> >>> create an Akonadi::Collection instance, but I'm not sure, and what to
> >>> do after that isn't clear.
> >>
> >> You have to use the Akonadi::(Item/Collection)XyzJobs from
> >> kdepimlibs/akonadi to load, modify and save the items and collections.
> >>
> >> So the first step is to use a CollectionFetchJob with the start
> >> collection set to Collection::root() and type set to Recursive. Then in
> >> the finish slot of this job you can trigger an ItemFetchJob for every
> >> returned collection. Then you can iterate over all returned items and
> >> filter out everything that has not the wanted mime type.
> 
> Hi!
> 
> I'm not sure if this would be the right approach, but you could use
> Akonadi jobs to create, delete and modify alarms as suggested, but
> then you could also at the same time use an items' model to maintain
> an updated list of the alarms. This way in case if there' other
> processes modifying the alarms you will get automatically the updates,
> and you don't need to write the logic to get the alarms yourself. You
> could inherit from Akonadi::ItemModel and watch for updates (connect
> to signals like dataChanged, columnsInserted, columnsRemoved).

Thanks to everybody for their advice - I've managed to make fetch and create 
Collections and AgentInstances now, but I have a few more questions which I 
can't find answers to in the docs. (I tried  on IRC, but at the time I could 
log on, there was no response.)

1) After creating an agent, the new collection containing it doesn't appear 
immediately, even using a QTimer:singleShot(0) before using CollectionFetchJob 
to fetch the Collection list again. How can one know when the collection list 
has been refreshed?

2) Does a collection always only contain items belonging to a single resource? 
The existence of the Collection::setResource() method appears to indicate 
this.

3) Are ResourceBase-derived instances ever accessed by clients, or are they 
only for use the server, and clients always use Agent instances? 
Collection::resource() returns a resource identifier - is this really an Agent 
identifier? Else, how can this be used to fetch the actual resource?

4) The KAlarm resource can handle multiple mime types, but I need to set one 
specific mime type when I create an new agent instance (so that it will only 
contain that one mime type). Is this possible, or is it necessary to define 
multiple resources each handling a single mime type?

-- 
David Jarvie.
KDE developer.
KAlarm author and maintainer.
http://www.astrojar.org.uk/kalarm
_______________________________________________
KDE PIM mailing list kde-pim at kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/



More information about the kde-pim mailing list