playground/base/plasma/dataengines/akonadi

Sebastian Kügler sebas at kde.org
Sun Feb 8 21:49:39 CET 2009


SVN commit 923483 by sebas:

birthday, location and photo for the akonadi dataengine contacts part

In more general, the dataengine works as follows:

For email:
-----------
- request "EmailCollections", you'll get a list of EmailCollections-<id>
  as key and the name of the collection as value.
  (The list of collections is loaded on demand)

- Choose one of those collections by request the ID
  (EmailCollection-<id>). The dataengine now queries Akonadi for all
  emails in that collections and will add a new source for every email. In
  you dataUpdated() method, you can simply check if the
  source.startsWith("EmailCollection-") and then query the data from that
  email.

Properties you might be interested in for those email source are:
 - QDate DateTime
 - QString Subject
 - QString From
 - QString To
 - qlonglong Id

The Id can be used to query Akonadi for the body of the email. That part
is not yet included in the Akonadi engine, but might come in the future.

For Contacts:
--------------
- request "ContactCollections", choose one of those and request
  "ContactCollection-<id>".
- request one of those collections ("ContactCollection-<id>")
- New sources for every contact in that collection will appear. You can
  now get at the Contacts data through the following fields in that
  particular source:

 - double longitude
 - double latitude
 - QString Organization, Role, FullEmail, Name, Department, Emails,
   various Phone- numbers

Work to get those datasets more complete is under way. What's in should
already provide for most of the use cases you can dream of.

CCMAIL:plasma-devel at kde.org

 M  +23 -8     akonadiengine.cpp  


--- trunk/playground/base/plasma/dataengines/akonadi/akonadiengine.cpp #923482:923483
@@ -29,6 +29,7 @@
 
 #include <kabc/addressee.h>
 #include <kabc/phonenumber.h>
+#include <kabc/picture.h>
 
 /*
 #include <kmime/kmime_message.h>
@@ -54,7 +55,6 @@
             SLOT(emailItemChanged(Akonadi::Item)) );
     // TODO: monitoring for contacts
 
-    fetchContactCollections(); // TODO: remove, it's there only for debugging
 }
 
 AkonadiEngine::~AkonadiEngine()
@@ -256,22 +256,37 @@
             // Phone and related
             QStringList phoneNumbers;
             foreach (const KABC::PhoneNumber pn, a.phoneNumbers()) {
-                QString key = QString("Phone%1").arg(pn.typeLabel());
-                setData(source, key, a.phoneNumber(pn.type()).toString());
-                phoneNumbers << a.phoneNumber(pn.type()).toString();
+                QString key = QString("Phone-%1").arg(pn.typeLabel());
+                setData(source, key, a.phoneNumber(pn.type()).number());
+                phoneNumbers << a.phoneNumber(pn.type()).number();
             }
             if (!phoneNumbers.count()) {
                 setData(source, "PhoneNumbers", phoneNumbers);
             }
 
-            // department, fullEmail, nickName, organisation, note, prefix, realName, role
+            // Personal
+            if (!a.birthday().isValid()) {
+                setData(source, "Birthday", a.birthday());
+            }
 
+            if (a.photo().isEmpty()) {
+                setData(source, "Photo", a.photo().data());
+                setData(source, "PhotoUrl", a.photo().url());
+            }
+            if (a.geo().isValid()) {
+                setData(source, "Latitude", a.geo().latitude());
+                setData(source, "Longitude", a.geo().longitude());
+            }
 
-            // phoneNumber.toString phoneNumber.typeLabel
+            // addresses
 
-            //setData(source, "Name", a.name());
+            // categories
 
-            // TODO
+            // note,
+
+            // prefix,
+
+            // ...
         }
     }
 }


More information about the Plasma-devel mailing list