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