diff options
Diffstat (limited to 'examples/imapresource/imapresource.cpp')
-rw-r--r-- | examples/imapresource/imapresource.cpp | 36 |
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 | ||
90 | static 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 | |||
104 | static bool hasSpecialPurposeFlag(const QByteArrayList &flags) | ||
105 | { | ||
106 | return !getSpecialPurposeType(flags).isEmpty(); | ||
107 | } | ||
108 | |||
90 | 109 | ||
91 | class ImapSynchronizer : public Sink::Synchronizer { | 110 | class 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()) { |