From 456b850448bc306e9e1608fd1707ab9ceeb08c1e Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 15 Jun 2016 18:43:05 +0200 Subject: Move to trash --- examples/imapresource/imapresource.cpp | 47 +++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 20 deletions(-) (limited to 'examples') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index b3aafed..1e2c0df 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -63,6 +63,7 @@ static QHash specialPurposeFolders() QHash hash; //FIXME localize hash.insert("drafts", "Drafts"); + hash.insert("trash", "Trash"); return hash; } @@ -80,51 +81,57 @@ static QHash sSpecialPurposeFolders = specialPurposeFolders //Lowercase-name, specialpurpose static QHash sSpecialPurposeNames = specialPurposeNames(); -class DraftsProcessor : public Sink::Preprocessor +class SpecialPurposeProcessor : public Sink::Preprocessor { public: - DraftsProcessor(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) : mResourceType(resourceType), mResourceInstanceIdentifier(resourceInstanceIdentifier) {} + SpecialPurposeProcessor(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) : mResourceType(resourceType), mResourceInstanceIdentifier(resourceInstanceIdentifier) {} - QByteArray ensureDraftsFolder(Sink::Storage::Transaction &transaction) + QByteArray ensureFolder(Sink::Storage::Transaction &transaction, const QByteArray &specialPurpose) { - if (mDraftsFolder.isEmpty()) { + if (!mSpecialPurposeFolders.contains(specialPurpose)) { //Try to find an existing drafts folder Sink::EntityReader reader(mResourceType, mResourceInstanceIdentifier, transaction); reader.query(Sink::Query().filter(Query::Comparator("drafts", Query::Comparator::Contains)), - [this](const ApplicationDomain::Folder &f) -> bool{ - mDraftsFolder = f.identifier(); + [this, specialPurpose](const ApplicationDomain::Folder &f) -> bool{ + mSpecialPurposeFolders.insert(specialPurpose, f.identifier()); return false; }); - if (mDraftsFolder.isEmpty()) { + if (!mSpecialPurposeFolders.contains(specialPurpose)) { Trace() << "Failed to find a drafts folder, creating a new one"; auto folder = ApplicationDomain::Folder::create(mResourceInstanceIdentifier); - folder.setSpecialPurpose(QByteArrayList() << "drafts"); - folder.setName(sSpecialPurposeFolders.value("drafts")); + folder.setSpecialPurpose(QByteArrayList() << specialPurpose); + folder.setName(sSpecialPurposeFolders.value(specialPurpose)); folder.setIcon("folder"); //This processes the pipeline synchronously createEntity(folder); - mDraftsFolder = folder.identifier(); + mSpecialPurposeFolders.insert(specialPurpose, folder.identifier()); } } - return mDraftsFolder; + return mSpecialPurposeFolders.value(specialPurpose); } - void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + void moveToFolder(Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) { + if (newEntity.getProperty("trash").toBool()) { + newEntity.setProperty("folder", ensureFolder(transaction, "trash")); + return; + } if (newEntity.getProperty("draft").toBool()) { - newEntity.setProperty("folder", ensureDraftsFolder(transaction)); + newEntity.setProperty("folder", ensureFolder(transaction, "drafts")); } } - void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, - Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE { - if (newEntity.getProperty("draft").toBool()) { - newEntity.setProperty("folder", ensureDraftsFolder(transaction)); - } + moveToFolder(newEntity, transaction); + } + + void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE + { + moveToFolder(newEntity, transaction); } - QByteArray mDraftsFolder; + QHash mSpecialPurposeFolders; QByteArray mResourceType; QByteArray mResourceInstanceIdentifier; }; @@ -647,7 +654,7 @@ ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPo changereplay->mPassword = mPassword; setupChangereplay(changereplay); - setupPreprocessors(ENTITY_TYPE_MAIL, QVector() << new DraftsProcessor(mResourceType, mResourceInstanceIdentifier) << new MimeMessageMover(mResourceInstanceIdentifier) << new MailPropertyExtractor << new DefaultIndexUpdater); + setupPreprocessors(ENTITY_TYPE_MAIL, QVector() << new SpecialPurposeProcessor(mResourceType, mResourceInstanceIdentifier) << new MimeMessageMover(mResourceInstanceIdentifier) << new MailPropertyExtractor << new DefaultIndexUpdater); setupPreprocessors(ENTITY_TYPE_FOLDER, QVector() << new DefaultIndexUpdater); } -- cgit v1.2.3