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"); +}