[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdeplasma-addons/libs/lancelot-datamodels
From:       Ivan Čukić <ivan.cukic () kde ! org>
Date:       2010-04-15 14:19:15
Message-ID: 20100415141915.576CCAC898 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1115162 by ivan:

Initial Akonadi-based implementation



 M  +98 -11    MessagesKmail.cpp  
 M  +13 -0     MessagesKmail_p.h  


--- trunk/KDE/kdeplasma-addons/libs/lancelot-datamodels/MessagesKmail.cpp \
#1115161:1115162 @@ -50,34 +50,116 @@
 
 #include <KJob>
 #include <Akonadi/Collection>
+#include <Akonadi/CollectionFetchJob>
 #include <Akonadi/CollectionStatistics>
-#include <Akonadi/CollectionFetchJob>
+#include <Akonadi/CollectionStatisticsJob>
+#include <Akonadi/EntityDisplayAttribute>
 #include "MessagesKmail_p.h"
 
 namespace Lancelot {
 namespace Models {
 
+MessagesKmail::Private::Private(MessagesKmail * parent)
+  : q(parent)
+{
+}
+
 void MessagesKmail::Private::fetchEmailCollectionsDone(KJob * job)
 {
     if ( job->error() ) {
         kDebug() << "Job Error:" << job->errorString();
+        return;
+    }
 
-    } else {
-        Akonadi::CollectionFetchJob * cjob =
-            static_cast < Akonadi::CollectionFetchJob * > ( job );
-        int i = 0;
-        foreach (const Akonadi::Collection & collection, cjob->collections()) {
-            if (collection.contentMimeTypes().contains("message/rfc822")) {
-                kDebug() << collection.name() << \
                collection.statistics().unreadCount();
-            }
+    Akonadi::CollectionFetchJob * cjob =
+        static_cast < Akonadi::CollectionFetchJob * > ( job );
+
+    foreach (const Akonadi::Collection & collection, cjob->collections()) {
+        if (collection.contentMimeTypes().contains("message/rfc822")) {
+            Akonadi::CollectionStatisticsJob * job =
+                new Akonadi::CollectionStatisticsJob(collection);
+            connect(job, SIGNAL(result(KJob*)),
+                    this, SLOT(fetchCollectionStatisticsDone(KJob*)));
+
+            collectionJobs[job] = collection;
+
         }
     }
 }
 
+QString MessagesKmail::Private::entityName(const Akonadi::Collection & collection) \
const +{
+    Akonadi::EntityDisplayAttribute * displayAttribute =
+        static_cast < Akonadi::EntityDisplayAttribute * > (
+            collection.attribute < Akonadi::EntityDisplayAttribute > ()
+        );
 
+    if (displayAttribute) {
+        return displayAttribute->displayName();
+    }
+
+    return collection.name();
+}
+
+KIcon MessagesKmail::Private::entityIcon(const Akonadi::Collection & collection) \
const +{
+    Akonadi::EntityDisplayAttribute * displayAttribute =
+        static_cast < Akonadi::EntityDisplayAttribute * > (
+            collection.attribute < Akonadi::EntityDisplayAttribute > ()
+        );
+
+    if (displayAttribute) {
+        return displayAttribute->icon();
+    }
+
+    return KIcon("mail-folder-inbox");
+}
+
+QString MessagesKmail::Private::entityPath(const Akonadi::Entity & entity) const
+{
+    QString path;
+
+    Akonadi::Collection collection = entity.parentCollection();
+        kDebug() << path << collection.remoteId() << collection.url() << \
collection.parent(); +
+    while (collection.isValid()) {
+        path = entityName(collection) + "/" + path;
+        kDebug() << path << collection.remoteId() << collection.url();
+        collection = collection.parentCollection();
+    }
+
+    return path;
+}
+
+void MessagesKmail::Private::fetchCollectionStatisticsDone(KJob * job)
+{
+    if ( job->error() ) {
+        kDebug() << "Job Error:" << job->errorString();
+        return;
+    }
+
+    Akonadi::CollectionStatisticsJob * statisticsJob = qobject_cast < \
Akonadi::CollectionStatisticsJob * > (job); +
+    const Akonadi::CollectionStatistics statistics = statisticsJob->statistics();
+    Akonadi::Collection & collection = collectionJobs[job];
+
+    if (statistics.unreadCount()) {
+        q->add(
+            i18nc("Directory name (number of unread messages)", "%1 (%2)")
+                .arg(entityName(collection))
+                .arg(QString::number(statistics.unreadCount())),
+            QString::null,
+            entityIcon(collection),
+            collection.url()
+            );
+    }
+}
+
 MessagesKmail::MessagesKmail()
-    : d(new Private())
+    : d(new Private(this))
 {
+    setSelfTitle(i18n("Unread messages"));
+    setSelfIcon(KIcon("kmail"));
     load();
 }
 
@@ -87,11 +169,16 @@
 
 void MessagesKmail::activate(int index)
 {
-    Q_UNUSED(index)
+    Q_UNUSED(index);
+
+    clear();
+    load();
 }
 
 void MessagesKmail::load()
 {
+    kDebug();
+
     Akonadi::Collection emailCollection(Akonadi::Collection::root());
     emailCollection.setContentMimeTypes(QStringList() << "message/rfc822");
 
--- trunk/KDE/kdeplasma-addons/libs/lancelot-datamodels/MessagesKmail_p.h \
#1115161:1115162 @@ -18,7 +18,11 @@
  */
 
 #include "MessagesKmail.h"
+#include <QHash>
+#include <KIcon>
 #include <KJob>
+#include <Akonadi/Entity>
+#include <Akonadi/Collection>
 
 namespace Lancelot {
 namespace Models {
@@ -27,11 +31,20 @@
     Q_OBJECT
 
 public:
+    Private(MessagesKmail * parent);
 
+    QHash < KJob *, Akonadi::Collection > collectionJobs;
 
+    QString entityName(const Akonadi::Collection & collection) const;
+    KIcon entityIcon(const Akonadi::Collection & collection) const;
+    QString entityPath(const Akonadi::Entity & entity) const;
+
 public Q_SLOTS:
     void fetchEmailCollectionsDone(KJob * job);
+    void fetchCollectionStatisticsDone(KJob * job);
 
+private:
+    MessagesKmail * const q;
 };
 
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic