diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-06-15 18:43:05 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-06-15 20:31:43 +0200 |
commit | 456b850448bc306e9e1608fd1707ab9ceeb08c1e (patch) | |
tree | cccf3cfee29216fba3af182a15b2a9b6f78fb753 | |
parent | 3a3545ac93e0b310dfb6c6da5f83df1f26dff8a6 (diff) | |
download | sink-456b850448bc306e9e1608fd1707ab9ceeb08c1e.tar.gz sink-456b850448bc306e9e1608fd1707ab9ceeb08c1e.zip |
Move to trash
-rw-r--r-- | common/domain/applicationdomaintype.cpp | 2 | ||||
-rw-r--r-- | common/domain/mail.cpp | 2 | ||||
-rw-r--r-- | examples/imapresource/imapresource.cpp | 47 |
3 files changed, 30 insertions, 21 deletions
diff --git a/common/domain/applicationdomaintype.cpp b/common/domain/applicationdomaintype.cpp index 4db2e3b..df63c35 100644 --- a/common/domain/applicationdomaintype.cpp +++ b/common/domain/applicationdomaintype.cpp | |||
@@ -275,7 +275,7 @@ namespace ImapResource { | |||
275 | auto &&resource = ApplicationDomainType::createEntity<SinkResource>(); | 275 | auto &&resource = ApplicationDomainType::createEntity<SinkResource>(); |
276 | resource.setProperty("type", "org.kde.imap"); | 276 | resource.setProperty("type", "org.kde.imap"); |
277 | resource.setProperty("account", account); | 277 | resource.setProperty("account", account); |
278 | resource.setProperty("capabilities", QVariant::fromValue(QByteArrayList() << ResourceCapabilities::Mail::storage << ResourceCapabilities::Mail::drafts << ResourceCapabilities::Mail::folderhierarchy)); | 278 | resource.setProperty("capabilities", QVariant::fromValue(QByteArrayList() << ResourceCapabilities::Mail::storage << ResourceCapabilities::Mail::drafts << ResourceCapabilities::Mail::folderhierarchy << ResourceCapabilities::Mail::trash)); |
279 | return resource; | 279 | return resource; |
280 | } | 280 | } |
281 | } | 281 | } |
diff --git a/common/domain/mail.cpp b/common/domain/mail.cpp index 706e410..dd4eca8 100644 --- a/common/domain/mail.cpp +++ b/common/domain/mail.cpp | |||
@@ -85,6 +85,7 @@ QSharedPointer<ReadPropertyMapper<TypeImplementation<Mail>::Buffer> > TypeImplem | |||
85 | propertyMapper->addMapping<Mail::Folder, Buffer>(&Buffer::folder); | 85 | propertyMapper->addMapping<Mail::Folder, Buffer>(&Buffer::folder); |
86 | propertyMapper->addMapping<Mail::MimeMessage, Buffer>(&Buffer::mimeMessage); | 86 | propertyMapper->addMapping<Mail::MimeMessage, Buffer>(&Buffer::mimeMessage); |
87 | propertyMapper->addMapping<Mail::Draft, Buffer>(&Buffer::draft); | 87 | propertyMapper->addMapping<Mail::Draft, Buffer>(&Buffer::draft); |
88 | propertyMapper->addMapping<Mail::Trash, Buffer>(&Buffer::trash); | ||
88 | return propertyMapper; | 89 | return propertyMapper; |
89 | } | 90 | } |
90 | 91 | ||
@@ -102,5 +103,6 @@ QSharedPointer<WritePropertyMapper<TypeImplementation<Mail>::BufferBuilder> > Ty | |||
102 | propertyMapper->addMapping<Mail::Folder>(&BufferBuilder::add_folder); | 103 | propertyMapper->addMapping<Mail::Folder>(&BufferBuilder::add_folder); |
103 | propertyMapper->addMapping<Mail::MimeMessage>(&BufferBuilder::add_mimeMessage); | 104 | propertyMapper->addMapping<Mail::MimeMessage>(&BufferBuilder::add_mimeMessage); |
104 | propertyMapper->addMapping<Mail::Draft>(&BufferBuilder::add_draft); | 105 | propertyMapper->addMapping<Mail::Draft>(&BufferBuilder::add_draft); |
106 | propertyMapper->addMapping<Mail::Trash>(&BufferBuilder::add_trash); | ||
105 | return propertyMapper; | 107 | return propertyMapper; |
106 | } | 108 | } |
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<QByteArray, QString> specialPurposeFolders() | |||
63 | QHash<QByteArray, QString> hash; | 63 | QHash<QByteArray, QString> hash; |
64 | //FIXME localize | 64 | //FIXME localize |
65 | hash.insert("drafts", "Drafts"); | 65 | hash.insert("drafts", "Drafts"); |
66 | hash.insert("trash", "Trash"); | ||
66 | return hash; | 67 | return hash; |
67 | } | 68 | } |
68 | 69 | ||
@@ -80,51 +81,57 @@ static QHash<QByteArray, QString> sSpecialPurposeFolders = specialPurposeFolders | |||
80 | //Lowercase-name, specialpurpose | 81 | //Lowercase-name, specialpurpose |
81 | static QHash<QString, QByteArray> sSpecialPurposeNames = specialPurposeNames(); | 82 | static QHash<QString, QByteArray> sSpecialPurposeNames = specialPurposeNames(); |
82 | 83 | ||
83 | class DraftsProcessor : public Sink::Preprocessor | 84 | class SpecialPurposeProcessor : public Sink::Preprocessor |
84 | { | 85 | { |
85 | public: | 86 | public: |
86 | DraftsProcessor(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) : mResourceType(resourceType), mResourceInstanceIdentifier(resourceInstanceIdentifier) {} | 87 | SpecialPurposeProcessor(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) : mResourceType(resourceType), mResourceInstanceIdentifier(resourceInstanceIdentifier) {} |
87 | 88 | ||
88 | QByteArray ensureDraftsFolder(Sink::Storage::Transaction &transaction) | 89 | QByteArray ensureFolder(Sink::Storage::Transaction &transaction, const QByteArray &specialPurpose) |
89 | { | 90 | { |
90 | if (mDraftsFolder.isEmpty()) { | 91 | if (!mSpecialPurposeFolders.contains(specialPurpose)) { |
91 | //Try to find an existing drafts folder | 92 | //Try to find an existing drafts folder |
92 | Sink::EntityReader<ApplicationDomain::Folder> reader(mResourceType, mResourceInstanceIdentifier, transaction); | 93 | Sink::EntityReader<ApplicationDomain::Folder> reader(mResourceType, mResourceInstanceIdentifier, transaction); |
93 | reader.query(Sink::Query().filter<ApplicationDomain::Folder::SpecialPurpose>(Query::Comparator("drafts", Query::Comparator::Contains)), | 94 | reader.query(Sink::Query().filter<ApplicationDomain::Folder::SpecialPurpose>(Query::Comparator("drafts", Query::Comparator::Contains)), |
94 | [this](const ApplicationDomain::Folder &f) -> bool{ | 95 | [this, specialPurpose](const ApplicationDomain::Folder &f) -> bool{ |
95 | mDraftsFolder = f.identifier(); | 96 | mSpecialPurposeFolders.insert(specialPurpose, f.identifier()); |
96 | return false; | 97 | return false; |
97 | }); | 98 | }); |
98 | if (mDraftsFolder.isEmpty()) { | 99 | if (!mSpecialPurposeFolders.contains(specialPurpose)) { |
99 | Trace() << "Failed to find a drafts folder, creating a new one"; | 100 | Trace() << "Failed to find a drafts folder, creating a new one"; |
100 | auto folder = ApplicationDomain::Folder::create(mResourceInstanceIdentifier); | 101 | auto folder = ApplicationDomain::Folder::create(mResourceInstanceIdentifier); |
101 | folder.setSpecialPurpose(QByteArrayList() << "drafts"); | 102 | folder.setSpecialPurpose(QByteArrayList() << specialPurpose); |
102 | folder.setName(sSpecialPurposeFolders.value("drafts")); | 103 | folder.setName(sSpecialPurposeFolders.value(specialPurpose)); |
103 | folder.setIcon("folder"); | 104 | folder.setIcon("folder"); |
104 | //This processes the pipeline synchronously | 105 | //This processes the pipeline synchronously |
105 | createEntity(folder); | 106 | createEntity(folder); |
106 | mDraftsFolder = folder.identifier(); | 107 | mSpecialPurposeFolders.insert(specialPurpose, folder.identifier()); |
107 | } | 108 | } |
108 | } | 109 | } |
109 | return mDraftsFolder; | 110 | return mSpecialPurposeFolders.value(specialPurpose); |
110 | } | 111 | } |
111 | 112 | ||
112 | void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | 113 | void moveToFolder(Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) |
113 | { | 114 | { |
115 | if (newEntity.getProperty("trash").toBool()) { | ||
116 | newEntity.setProperty("folder", ensureFolder(transaction, "trash")); | ||
117 | return; | ||
118 | } | ||
114 | if (newEntity.getProperty("draft").toBool()) { | 119 | if (newEntity.getProperty("draft").toBool()) { |
115 | newEntity.setProperty("folder", ensureDraftsFolder(transaction)); | 120 | newEntity.setProperty("folder", ensureFolder(transaction, "drafts")); |
116 | } | 121 | } |
117 | } | 122 | } |
118 | 123 | ||
119 | void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, | 124 | void newEntity(const QByteArray &uid, qint64 revision, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE |
120 | Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | ||
121 | { | 125 | { |
122 | if (newEntity.getProperty("draft").toBool()) { | 126 | moveToFolder(newEntity, transaction); |
123 | newEntity.setProperty("folder", ensureDraftsFolder(transaction)); | 127 | } |
124 | } | 128 | |
129 | void modifiedEntity(const QByteArray &uid, qint64 revision, const Sink::ApplicationDomain::BufferAdaptor &oldEntity, Sink::ApplicationDomain::BufferAdaptor &newEntity, Sink::Storage::Transaction &transaction) Q_DECL_OVERRIDE | ||
130 | { | ||
131 | moveToFolder(newEntity, transaction); | ||
125 | } | 132 | } |
126 | 133 | ||
127 | QByteArray mDraftsFolder; | 134 | QHash<QByteArray, QByteArray> mSpecialPurposeFolders; |
128 | QByteArray mResourceType; | 135 | QByteArray mResourceType; |
129 | QByteArray mResourceInstanceIdentifier; | 136 | QByteArray mResourceInstanceIdentifier; |
130 | }; | 137 | }; |
@@ -647,7 +654,7 @@ ImapResource::ImapResource(const QByteArray &instanceIdentifier, const QSharedPo | |||
647 | changereplay->mPassword = mPassword; | 654 | changereplay->mPassword = mPassword; |
648 | setupChangereplay(changereplay); | 655 | setupChangereplay(changereplay); |
649 | 656 | ||
650 | setupPreprocessors(ENTITY_TYPE_MAIL, QVector<Sink::Preprocessor*>() << new DraftsProcessor(mResourceType, mResourceInstanceIdentifier) << new MimeMessageMover(mResourceInstanceIdentifier) << new MailPropertyExtractor << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); | 657 | setupPreprocessors(ENTITY_TYPE_MAIL, QVector<Sink::Preprocessor*>() << new SpecialPurposeProcessor(mResourceType, mResourceInstanceIdentifier) << new MimeMessageMover(mResourceInstanceIdentifier) << new MailPropertyExtractor << new DefaultIndexUpdater<Sink::ApplicationDomain::Mail>); |
651 | setupPreprocessors(ENTITY_TYPE_FOLDER, QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); | 658 | setupPreprocessors(ENTITY_TYPE_FOLDER, QVector<Sink::Preprocessor*>() << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); |
652 | } | 659 | } |
653 | 660 | ||