[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