summaryrefslogtreecommitdiffstats
path: root/examples/imapresource/imapresource.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-04-21 17:31:22 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-04-21 17:44:30 +0200
commitfcc89a201a06ede057dae86d4591199bf69fab50 (patch)
treeb1aa85322f325fcf2055c0ddf8f7ffcafdf5002b /examples/imapresource/imapresource.cpp
parent0d9d054be6a1716abff20a49e44d94b9b79ab107 (diff)
downloadsink-fcc89a201a06ede057dae86d4591199bf69fab50.tar.gz
sink-fcc89a201a06ede057dae86d4591199bf69fab50.zip
Make sure we always have a complete hierarchy from the IMAP server
Diffstat (limited to 'examples/imapresource/imapresource.cpp')
-rw-r--r--examples/imapresource/imapresource.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp
index 0b3dcf5..8577b8c 100644
--- a/examples/imapresource/imapresource.cpp
+++ b/examples/imapresource/imapresource.cpp
@@ -119,6 +119,8 @@ public:
119 QByteArray createFolder(const Imap::Folder &f) 119 QByteArray createFolder(const Imap::Folder &f)
120 { 120 {
121 const auto parentFolderRid = parentRid(f); 121 const auto parentFolderRid = parentRid(f);
122 bool isToplevel = parentFolderRid.isEmpty();
123
122 SinkTraceCtx(mLogCtx) << "Creating folder: " << f.name() << parentFolderRid << f.flags; 124 SinkTraceCtx(mLogCtx) << "Creating folder: " << f.name() << parentFolderRid << f.flags;
123 125
124 const auto remoteId = folderRid(f); 126 const auto remoteId = folderRid(f);
@@ -126,22 +128,20 @@ public:
126 folder.setName(f.name()); 128 folder.setName(f.name());
127 folder.setIcon("folder"); 129 folder.setIcon("folder");
128 folder.setEnabled(f.subscribed); 130 folder.setEnabled(f.subscribed);
129 QHash<QByteArray, Query::Comparator> mergeCriteria;
130 auto specialPurpose = [&] { 131 auto specialPurpose = [&] {
131 if (hasSpecialPurposeFlag(f.flags)) { 132 if (hasSpecialPurposeFlag(f.flags)) {
132 return getSpecialPurposeType(f.flags); 133 return getSpecialPurposeType(f.flags);
133 } else if (SpecialPurpose::isSpecialPurposeFolderName(f.name()) && parentFolderRid.isEmpty()) { 134 } else if (SpecialPurpose::isSpecialPurposeFolderName(f.name()) && isToplevel) {
134 return SpecialPurpose::getSpecialPurposeType(f.name()); 135 return SpecialPurpose::getSpecialPurposeType(f.name());
135 } 136 }
136 return QByteArray{}; 137 return QByteArray{};
137 }(); 138 }();
138 if (!specialPurpose.isEmpty()) { 139 if (!specialPurpose.isEmpty()) {
139 folder.setSpecialPurpose(QByteArrayList() << specialPurpose); 140 folder.setSpecialPurpose(QByteArrayList() << specialPurpose);
140 mergeCriteria.insert(ApplicationDomain::Folder::SpecialPurpose::name, Query::Comparator(specialPurpose, Query::Comparator::Contains));
141 } 141 }
142 142
143 if (!parentFolderRid.isEmpty()) { 143 if (!isToplevel) {
144 folder.setParent(syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, parentFolderRid)); 144 folder.setParent(syncStore().resolveRemoteId(ApplicationDomain::Folder::name, parentFolderRid));
145 } 145 }
146 createOrModify(ApplicationDomain::getTypeName<ApplicationDomain::Folder>(), remoteId, folder); 146 createOrModify(ApplicationDomain::getTypeName<ApplicationDomain::Folder>(), remoteId, folder);
147 return remoteId; 147 return remoteId;