summaryrefslogtreecommitdiffstats
path: root/examples/imapresource/imapresource.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-01-11 14:46:04 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-01-11 15:59:24 +0100
commit489d5b72696d5c5f802ee206bdde0693ba172018 (patch)
tree057a02663a11ac9f031d7e91b1b12f85cd5c0216 /examples/imapresource/imapresource.cpp
parent051a0be95cbe4fe5eb0c7431e13987a2aa56bcc0 (diff)
downloadsink-489d5b72696d5c5f802ee206bdde0693ba172018.tar.gz
sink-489d5b72696d5c5f802ee206bdde0693ba172018.zip
Set enabled state from subscription
Diffstat (limited to 'examples/imapresource/imapresource.cpp')
-rw-r--r--examples/imapresource/imapresource.cpp43
1 files changed, 18 insertions, 25 deletions
diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp
index 4f7b9f3..8ada325 100644
--- a/examples/imapresource/imapresource.cpp
+++ b/examples/imapresource/imapresource.cpp
@@ -96,17 +96,19 @@ public:
96 96
97 } 97 }
98 98
99 QByteArray createFolder(const QString &folderName, const QByteArray &folderRemoteId, const QByteArray &parentFolderRid, const QByteArray &icon) 99 QByteArray createFolder(const Imap::Folder &f)
100 { 100 {
101 SinkTrace() << "Creating folder: " << folderName << parentFolderRid; 101 const auto parentFolderRid = parentRid(f);
102 const auto remoteId = folderRemoteId; 102 SinkTrace() << "Creating folder: " << f.name() << parentFolderRid;
103 const auto bufferType = ENTITY_TYPE_FOLDER; 103
104 const auto remoteId = folderRid(f);
104 Sink::ApplicationDomain::Folder folder; 105 Sink::ApplicationDomain::Folder folder;
105 folder.setName(folderName); 106 folder.setName(f.name());
106 folder.setIcon(icon); 107 folder.setIcon("folder");
108 folder.setEnabled(f.subscribed);
107 QHash<QByteArray, Query::Comparator> mergeCriteria; 109 QHash<QByteArray, Query::Comparator> mergeCriteria;
108 if (SpecialPurpose::isSpecialPurposeFolderName(folderName)) { 110 if (SpecialPurpose::isSpecialPurposeFolderName(f.name())) {
109 auto type = SpecialPurpose::getSpecialPurposeType(folderName); 111 auto type = SpecialPurpose::getSpecialPurposeType(f.name());
110 folder.setSpecialPurpose(QByteArrayList() << type); 112 folder.setSpecialPurpose(QByteArrayList() << type);
111 mergeCriteria.insert(ApplicationDomain::Folder::SpecialPurpose::name, Query::Comparator(type, Query::Comparator::Contains)); 113 mergeCriteria.insert(ApplicationDomain::Folder::SpecialPurpose::name, Query::Comparator(type, Query::Comparator::Contains));
112 } 114 }
@@ -114,16 +116,15 @@ public:
114 if (!parentFolderRid.isEmpty()) { 116 if (!parentFolderRid.isEmpty()) {
115 folder.setParent(syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, parentFolderRid)); 117 folder.setParent(syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, parentFolderRid));
116 } 118 }
117 createOrModify(bufferType, remoteId, folder, mergeCriteria); 119 createOrModify(ENTITY_TYPE_FOLDER, remoteId, folder, mergeCriteria);
118 return remoteId; 120 return remoteId;
119 } 121 }
120 122
121 void synchronizeFolders(const QVector<Folder> &folderList) 123 void synchronizeFolders(const QVector<Folder> &folderList)
122 { 124 {
123 const QByteArray bufferType = ENTITY_TYPE_FOLDER;
124 SinkTrace() << "Found folders " << folderList.size(); 125 SinkTrace() << "Found folders " << folderList.size();
125 126
126 scanForRemovals(bufferType, 127 scanForRemovals(ENTITY_TYPE_FOLDER,
127 [&folderList](const QByteArray &remoteId) -> bool { 128 [&folderList](const QByteArray &remoteId) -> bool {
128 // folderList.contains(remoteId) 129 // folderList.contains(remoteId)
129 for (const auto &folder : folderList) { 130 for (const auto &folder : folderList) {
@@ -136,7 +137,7 @@ public:
136 ); 137 );
137 138
138 for (const auto &f : folderList) { 139 for (const auto &f : folderList) {
139 createFolder(f.name(), folderRid(f), parentRid(f), "folder"); 140 createFolder(f);
140 } 141 }
141 } 142 }
142 143
@@ -162,8 +163,6 @@ public:
162 { 163 {
163 auto time = QSharedPointer<QTime>::create(); 164 auto time = QSharedPointer<QTime>::create();
164 time->start(); 165 time->start();
165 const QByteArray bufferType = ENTITY_TYPE_MAIL;
166
167 SinkTrace() << "Importing new mail." << folderRid; 166 SinkTrace() << "Importing new mail." << folderRid;
168 167
169 const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, folderRid); 168 const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, folderRid);
@@ -179,7 +178,7 @@ public:
179 mail.setExtractedFullPayloadAvailable(message.fullPayload); 178 mail.setExtractedFullPayloadAvailable(message.fullPayload);
180 setFlags(mail, message.flags); 179 setFlags(mail, message.flags);
181 180
182 createOrModify(bufferType, remoteId, mail); 181 createOrModify(ENTITY_TYPE_MAIL, remoteId, mail);
183 // const auto elapsed = time->elapsed(); 182 // const auto elapsed = time->elapsed();
184 // SinkTrace() << "Synchronized " << count << " mails in " << folderRid << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; 183 // SinkTrace() << "Synchronized " << count << " mails in " << folderRid << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]";
185 } 184 }
@@ -188,7 +187,6 @@ public:
188 { 187 {
189 auto time = QSharedPointer<QTime>::create(); 188 auto time = QSharedPointer<QTime>::create();
190 time->start(); 189 time->start();
191 const QByteArray bufferType = ENTITY_TYPE_MAIL;
192 const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, folderRid); 190 const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, folderRid);
193 if (folderLocalId.isEmpty()) { 191 if (folderLocalId.isEmpty()) {
194 SinkWarning() << "Failed to lookup local id of: " << folderRid; 192 SinkWarning() << "Failed to lookup local id of: " << folderRid;
@@ -199,7 +197,7 @@ public:
199 197
200 int count = 0; 198 int count = 0;
201 199
202 scanForRemovals(bufferType, 200 scanForRemovals(ENTITY_TYPE_MAIL,
203 [&](const std::function<void(const QByteArray &)> &callback) { 201 [&](const std::function<void(const QByteArray &)> &callback) {
204 store().indexLookup<ApplicationDomain::Mail, ApplicationDomain::Mail::Folder>(folderLocalId, callback); 202 store().indexLookup<ApplicationDomain::Mail, ApplicationDomain::Mail::Folder>(folderLocalId, callback);
205 }, 203 },
@@ -436,23 +434,18 @@ public:
436 auto imap = QSharedPointer<ImapServerProxy>::create(mServer, mPort); 434 auto imap = QSharedPointer<ImapServerProxy>::create(mServer, mPort);
437 if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Folder>()) { 435 if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Folder>()) {
438 return login(imap) 436 return login(imap)
439 .then<QVector<Folder>>([=]() { 437 .then<void>([=]() {
440 auto folderList = QSharedPointer<QVector<Folder>>::create(); 438 auto folderList = QSharedPointer<QVector<Folder>>::create();
441 return imap->fetchFolders([folderList](const Folder &folder) { 439 return imap->fetchFolders([folderList](const Folder &folder) {
442 *folderList << folder; 440 *folderList << folder;
443 }) 441 })
444 .onError([](const KAsync::Error &error) { 442 .syncThen<void>([this, folderList]() {
445 SinkWarning() << "Folder list sync failed.";
446 })
447 .syncThen<QVector<Folder>>([this, folderList]() {
448 synchronizeFolders(*folderList); 443 synchronizeFolders(*folderList);
449 commit();
450 return *folderList;
451 }); 444 });
452 }) 445 })
453 .then<void>([=] (const KAsync::Error &error) { 446 .then<void>([=] (const KAsync::Error &error) {
454 if (error) { 447 if (error) {
455 SinkWarning() << "Error during sync: " << error.errorMessage; 448 SinkWarning() << "Error during folder sync: " << error.errorMessage;
456 } 449 }
457 return imap->logout() 450 return imap->logout()
458 .then(KAsync::error(error)); 451 .then(KAsync::error(error));