From 9e539844bb62fd8bcc4a8e423205ea4a15a1c15e Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 19 Jan 2016 11:14:32 +0100 Subject: Inspect unread state --- examples/maildirresource/libmaildir/maildir.cpp | 2 +- examples/maildirresource/libmaildir/maildir.h | 2 +- examples/maildirresource/maildirresource.cpp | 18 ++++++++++++++++++ tests/maildirresourcetest.cpp | 16 ++++++++++++---- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/examples/maildirresource/libmaildir/maildir.cpp b/examples/maildirresource/libmaildir/maildir.cpp index 94363b8..28cf46e 100644 --- a/examples/maildirresource/libmaildir/maildir.cpp +++ b/examples/maildirresource/libmaildir/maildir.cpp @@ -770,7 +770,7 @@ bool Maildir::removeEntry(const QString& key) // return newUniqueKey; // } // -Maildir::Flags Maildir::readEntryFlags(const QString& key) const +Maildir::Flags Maildir::readEntryFlags(const QString& key) { Flags flags; const QRegExp rx = *(statusSeparatorRx()); diff --git a/examples/maildirresource/libmaildir/maildir.h b/examples/maildirresource/libmaildir/maildir.h index f80ba5d..fefd5a7 100644 --- a/examples/maildirresource/libmaildir/maildir.h +++ b/examples/maildirresource/libmaildir/maildir.h @@ -178,7 +178,7 @@ public: /** * Return the flags encoded in the maildir file name for an entry **/ - Flags readEntryFlags( const QString& key ) const; + static Flags readEntryFlags( const QString& key ); /** * Return the contents of the headers section of the file the maildir with the given @p file, that diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp index 3531b92..5d540be 100644 --- a/examples/maildirresource/maildirresource.cpp +++ b/examples/maildirresource/maildirresource.cpp @@ -295,7 +295,25 @@ void MaildirResource::removeFromDisk(const QByteArray &instanceIdentifier) KAsync::Job MaildirResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) { + auto synchronizationStore = QSharedPointer::create(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadOnly); + auto synchronizationTransaction = synchronizationStore->createTransaction(Akonadi2::Storage::ReadOnly); Trace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; + if (domainType == ENTITY_TYPE_MAIL) { + if (inspectionType == Akonadi2::Resources::Inspection::PropertyInspectionType) { + if (property == "unread") { + const auto remoteId = resolveLocalId(ENTITY_TYPE_MAIL, entityId, synchronizationTransaction); + const auto flags = KPIM::Maildir::readEntryFlags(remoteId.split('/').last()); + if (expectedValue.toBool() && !(flags & KPIM::Maildir::Seen)) { + return KAsync::error(1, "Expected seen but couldn't find it."); + } + if (!expectedValue.toBool() && (flags & KPIM::Maildir::Seen)) { + return KAsync::error(1, "Expected seen but couldn't find it."); + } + return KAsync::null(); + } + } + } + return KAsync::null(); } MaildirResourceFactory::MaildirResourceFactory(QObject *parent) diff --git a/tests/maildirresourcetest.cpp b/tests/maildirresourcetest.cpp index c649536..046c920 100644 --- a/tests/maildirresourcetest.cpp +++ b/tests/maildirresourcetest.cpp @@ -353,14 +353,22 @@ private Q_SLOTS: return Akonadi2::Store::modify(*mail); }) .then(Akonadi2::Store::flushMessageQueue(query.resources)) - .then >([folder]() -> KAsync::Job { + .then >([folder]() { return Store::fetchAll( Query::PropertyFilter("folder", folder) + Query::RequestedProperties(QByteArrayList() << "folder" << "subject" << "unread") ) - .then >([](const QList &mails) { - QCOMPARE(mails.size(), 1); + .then, QList>([](const QList &mails) { + //Can't use QCOMPARE because it tries to return + if (mails.size() != 1) { + return KAsync::error(1, "Wrong number of mails."); + } auto mail = mails.first(); - QCOMPARE(mail->getProperty("unread").toBool(), true); + //Can't use QCOMPARE because it tries to return + if (mail->getProperty("unread").toBool() != true) { + return KAsync::error(1, "Wrong property value."); + } + auto inspectionCommand = Akonadi2::Resources::Inspection::PropertyInspection(*mail, "unread", true); + return Akonadi2::Resources::inspect(inspectionCommand); }) .then([](){}); }); -- cgit v1.2.3