diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/mailnews/local/src/nsLocalUndoTxn.h | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/mailnews/local/src/nsLocalUndoTxn.h')
-rw-r--r-- | comm/mailnews/local/src/nsLocalUndoTxn.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/comm/mailnews/local/src/nsLocalUndoTxn.h b/comm/mailnews/local/src/nsLocalUndoTxn.h new file mode 100644 index 0000000000..f9f8244193 --- /dev/null +++ b/comm/mailnews/local/src/nsLocalUndoTxn.h @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsLocalUndoTxn_h__ +#define nsLocalUndoTxn_h__ + +#include "mozilla/Attributes.h" +#include "msgCore.h" +#include "nsIMsgFolder.h" +#include "nsMailboxService.h" +#include "nsMsgTxn.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" +#include "nsCOMPtr.h" +#include "nsIFolderListener.h" +#include "nsIWeakReferenceUtils.h" + +class nsLocalUndoFolderListener; + +class nsLocalMoveCopyMsgTxn : public nsIFolderListener, public nsMsgTxn { + public: + nsLocalMoveCopyMsgTxn(); + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIFOLDERLISTENER + + // overloading nsITransaction methods + NS_IMETHOD UndoTransaction(void) override; + NS_IMETHOD RedoTransaction(void) override; + + // helper + nsresult AddSrcKey(nsMsgKey aKey); + nsresult AddDstKey(nsMsgKey aKey); + nsresult AddDstMsgSize(uint32_t msgSize); + nsresult SetSrcFolder(nsIMsgFolder* srcFolder); + nsresult GetSrcIsImap(bool* isImap); + nsresult SetDstFolder(nsIMsgFolder* dstFolder); + nsresult Init(nsIMsgFolder* srcFolder, nsIMsgFolder* dstFolder, bool isMove); + nsresult UndoImapDeleteFlag(nsIMsgFolder* aFolder, + nsTArray<nsMsgKey>& aKeyArray, bool deleteFlag); + nsresult UndoTransactionInternal(); + // If the store using this undo transaction can "undelete" a message, + // it will call this function on the transaction; This makes undo/redo + // easy because message keys don't change after undo/redo. Otherwise, + // we need to adjust the src or dst keys after every undo/redo action + // to note the new keys. + void SetCanUndelete(bool canUndelete) { m_canUndelete = canUndelete; } + + private: + virtual ~nsLocalMoveCopyMsgTxn(); + nsWeakPtr m_srcFolder; + nsTArray<nsMsgKey> m_srcKeyArray; // used when src is local or imap + nsWeakPtr m_dstFolder; + nsTArray<nsMsgKey> m_dstKeyArray; + bool m_isMove; + bool m_srcIsImap4; + bool m_canUndelete; + nsTArray<uint32_t> m_dstSizeArray; + bool m_undoing; // if false, re-doing + uint32_t m_numHdrsCopied; + nsTArray<nsCString> m_copiedMsgIds; + nsLocalUndoFolderListener* mUndoFolderListener; +}; + +class nsLocalUndoFolderListener : public nsIFolderListener { + public: + NS_DECL_ISUPPORTS + NS_DECL_NSIFOLDERLISTENER + + nsLocalUndoFolderListener(nsLocalMoveCopyMsgTxn* aTxn, nsIMsgFolder* aFolder); + + private: + virtual ~nsLocalUndoFolderListener(); + nsLocalMoveCopyMsgTxn* mTxn; + nsIMsgFolder* mFolder; +}; + +#endif |