From eef12cec97f96546a18c596fcfd5a07fb760b2df Mon Sep 17 00:00:00 2001
From: Peter Kosyh
Date: Mon, 5 Nov 2018 16:18:39 +0300
Subject: [PATCH] mail_daemon: IMAP delete messages on the server only when
delete_remote_when_local setting is set
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Change-Id: I88fcc7a185cede080af7c3b85f9466a02f895809
Reviewed-on: https://review.haiku-os.org/674
Reviewed-by: Stephan Aßmus
---
.../mail_daemon/inbound_protocols/imap/IMAPFolder.cpp | 3 ++-
.../mail_daemon/inbound_protocols/imap/IMAPProtocol.h | 5 +++--
src/add-ons/mail_daemon/inbound_protocols/imap/Settings.cpp | 6 ++++++
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPFolder.cpp b/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPFolder.cpp
index 8b882c28ca..ec0cdfac37 100644
--- a/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPFolder.cpp
+++ b/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPFolder.cpp
@@ -247,7 +247,8 @@ IMAPFolder::SyncMessageFlags(uint32 uid, uint32 mailboxFlags)
// The message does not exist anymore locally, delete it on the
// server
// TODO: copy it to the trash directory first!
- fProtocol.UpdateMessageFlags(*this, uid, IMAP::kDeleted);
+ if (fProtocol.Settings()->DeleteRemoteWhenLocal())
+ fProtocol.UpdateMessageFlags(*this, uid, IMAP::kDeleted);
return;
}
if (status == B_OK)
diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPProtocol.h b/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPProtocol.h
index 0f89ae4b8a..24bf46fc2d 100644
--- a/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPProtocol.h
+++ b/src/add-ons/mail_daemon/inbound_protocols/imap/IMAPProtocol.h
@@ -49,6 +49,7 @@ public:
read_flags flags = B_READ);
virtual void MessageReceived(BMessage* message);
+ const ::Settings* Settings() const { return &fSettings; };
protected:
virtual status_t HandleFetchBody(const entry_ref& ref,
@@ -66,7 +67,7 @@ protected:
typedef std::map WorkerMap;
typedef std::map FolderNodeMap;
- Settings fSettings;
+ ::Settings fSettings;
mutex fWorkerLock;
BObjectList fWorkers;
WorkerMap fWorkerMap;
@@ -75,4 +76,4 @@ protected:
};
-#endif // IMAP_PROTOCOL_H
+#endif // IMAP_PROTOCOL_H
\ No newline at end of file
diff --git a/src/add-ons/mail_daemon/inbound_protocols/imap/Settings.cpp b/src/add-ons/mail_daemon/inbound_protocols/imap/Settings.cpp
index 397d95128c..f77e9bd881 100644
--- a/src/add-ons/mail_daemon/inbound_protocols/imap/Settings.cpp
+++ b/src/add-ons/mail_daemon/inbound_protocols/imap/Settings.cpp
@@ -108,3 +108,9 @@ Settings::BodyFetchLimit() const
{
return fMessage.GetInt32("partial_download_limit", -1);
}
+
+bool
+Settings::DeleteRemoteWhenLocal() const
+{
+ return fMessage.FindBool("delete_remote_when_local");
+}