From 5475eab39364c7608e1a34504401ff09e3b80726 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 20 Jun 2016 16:00:10 +0200 Subject: Detect and skip noselect folders --- examples/imapresource/imapresource.cpp | 3 +++ examples/imapresource/imapserverproxy.cpp | 14 +++++++++++--- examples/imapresource/imapserverproxy.h | 9 +++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) (limited to 'examples/imapresource') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index 30ccf95..e01461d 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -322,6 +322,9 @@ public: } for (const auto &folder : folderList) { + if (folder.noselect) { + continue; + } QSet uids; auto messagesFuture = imap.fetchMessages(folder, [this, folder, &uids](const QVector &messages) { Trace() << "Synchronizing mails" << folder.normalizedPath(); diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp index 49711a9..a82e3ac 100644 --- a/examples/imapresource/imapserverproxy.cpp +++ b/examples/imapresource/imapserverproxy.cpp @@ -44,6 +44,11 @@ const char* Imap::Flags::Deleted = "\\Deleted"; const char* Imap::Flags::Answered = "\\Answered"; const char* Imap::Flags::Flagged = "\\Flagged"; +const char* Imap::FolderFlags::Noselect = "\\Noselect"; +const char* Imap::FolderFlags::Noinferiors = "\\Noinferiors"; +const char* Imap::FolderFlags::Marked = "\\Marked"; +const char* Imap::FolderFlags::Unmarked = "\\Unmarked"; + template static KAsync::Job runJob(KJob *job, const std::function &f) { @@ -359,9 +364,12 @@ KAsync::Job ImapServerProxy::fetchFolders(std::function &mailboxes, const QList > &flags){ QVector list; - for (const auto &mailbox : mailboxes) { - Trace() << "Found mailbox: " << mailbox.name; - list << Folder{mailbox.name.split(mailbox.separator), mailbox.name, mailbox.separator}; + for (int i = 0; i < mailboxes.size(); i++) { + const auto mailbox = mailboxes[i]; + const auto mailboxFlags = flags[i]; + bool noselect = mailboxFlags.contains(QByteArray(FolderFlags::Noselect).toLower()) || mailboxFlags.contains(QByteArray(FolderFlags::Noselect)); + Log() << "Found mailbox: " << mailbox.name << mailboxFlags << FolderFlags::Noselect << noselect; + list << Folder{mailbox.name.split(mailbox.separator), mailbox.name, mailbox.separator, noselect}; } callback(list); }); diff --git a/examples/imapresource/imapserverproxy.h b/examples/imapresource/imapserverproxy.h index 95ed704..21228eb 100644 --- a/examples/imapresource/imapserverproxy.h +++ b/examples/imapresource/imapserverproxy.h @@ -40,6 +40,14 @@ namespace Flags extern const char* Flagged; } +namespace FolderFlags +{ + extern const char* Noinferiors; + extern const char* Noselect; + extern const char* Marked; + extern const char* Unmarked; +} + struct Message { qint64 uid; qint64 size; @@ -64,6 +72,7 @@ struct Folder { QList pathParts; QString path; QChar separator; + bool noselect; }; class ImapServerProxy { -- cgit v1.2.3