summaryrefslogtreecommitdiffstats
path: root/examples/imapresource/imapresource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/imapresource/imapresource.cpp')
-rw-r--r--examples/imapresource/imapresource.cpp36
1 files changed, 31 insertions, 5 deletions
diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp
index 0579dae..0b3dcf5 100644
--- a/examples/imapresource/imapresource.cpp
+++ b/examples/imapresource/imapresource.cpp
@@ -87,6 +87,25 @@ static QByteArray parentRid(const Imap::Folder &folder)
87 return folder.parentPath().toUtf8(); 87 return folder.parentPath().toUtf8();
88} 88}
89 89
90static QByteArray getSpecialPurposeType(const QByteArrayList &flags)
91{
92 if (Imap::flagsContain(Imap::FolderFlags::Trash, flags)) {
93 return ApplicationDomain::SpecialPurpose::Mail::trash;
94 }
95 if (Imap::flagsContain(Imap::FolderFlags::Drafts, flags)) {
96 return ApplicationDomain::SpecialPurpose::Mail::drafts;
97 }
98 if (Imap::flagsContain(Imap::FolderFlags::Sent, flags)) {
99 return ApplicationDomain::SpecialPurpose::Mail::sent;
100 }
101 return {};
102}
103
104static bool hasSpecialPurposeFlag(const QByteArrayList &flags)
105{
106 return !getSpecialPurposeType(flags).isEmpty();
107}
108
90 109
91class ImapSynchronizer : public Sink::Synchronizer { 110class ImapSynchronizer : public Sink::Synchronizer {
92 Q_OBJECT 111 Q_OBJECT
@@ -100,7 +119,7 @@ public:
100 QByteArray createFolder(const Imap::Folder &f) 119 QByteArray createFolder(const Imap::Folder &f)
101 { 120 {
102 const auto parentFolderRid = parentRid(f); 121 const auto parentFolderRid = parentRid(f);
103 SinkTraceCtx(mLogCtx) << "Creating folder: " << f.name() << parentFolderRid; 122 SinkTraceCtx(mLogCtx) << "Creating folder: " << f.name() << parentFolderRid << f.flags;
104 123
105 const auto remoteId = folderRid(f); 124 const auto remoteId = folderRid(f);
106 Sink::ApplicationDomain::Folder folder; 125 Sink::ApplicationDomain::Folder folder;
@@ -108,10 +127,17 @@ public:
108 folder.setIcon("folder"); 127 folder.setIcon("folder");
109 folder.setEnabled(f.subscribed); 128 folder.setEnabled(f.subscribed);
110 QHash<QByteArray, Query::Comparator> mergeCriteria; 129 QHash<QByteArray, Query::Comparator> mergeCriteria;
111 if (SpecialPurpose::isSpecialPurposeFolderName(f.name()) && parentFolderRid.isEmpty()) { 130 auto specialPurpose = [&] {
112 auto type = SpecialPurpose::getSpecialPurposeType(f.name()); 131 if (hasSpecialPurposeFlag(f.flags)) {
113 folder.setSpecialPurpose(QByteArrayList() << type); 132 return getSpecialPurposeType(f.flags);
114 mergeCriteria.insert(ApplicationDomain::Folder::SpecialPurpose::name, Query::Comparator(type, Query::Comparator::Contains)); 133 } else if (SpecialPurpose::isSpecialPurposeFolderName(f.name()) && parentFolderRid.isEmpty()) {
134 return SpecialPurpose::getSpecialPurposeType(f.name());
135 }
136 return QByteArray{};
137 }();
138 if (!specialPurpose.isEmpty()) {
139 folder.setSpecialPurpose(QByteArrayList() << specialPurpose);
140 mergeCriteria.insert(ApplicationDomain::Folder::SpecialPurpose::name, Query::Comparator(specialPurpose, Query::Comparator::Contains));
115 } 141 }
116 142
117 if (!parentFolderRid.isEmpty()) { 143 if (!parentFolderRid.isEmpty()) {