1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
/* -*- 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 nsImapUndoTxn_h__
#define nsImapUndoTxn_h__
#include "mozilla/Attributes.h"
#include "nsIMsgFolder.h"
#include "nsImapCore.h"
#include "nsIImapService.h"
#include "nsIImapIncomingServer.h"
#include "nsIUrlListener.h"
#include "nsMsgTxn.h"
#include "MailNewsTypes.h"
#include "nsTArray.h"
#include "nsIMsgOfflineImapOperation.h"
#include "nsCOMPtr.h"
#include "nsWeakReference.h"
#include "nsCOMArray.h"
class nsImapMoveCopyMsgTxn : public nsMsgTxn, nsIUrlListener
{
public:
nsImapMoveCopyMsgTxn();
nsImapMoveCopyMsgTxn(nsIMsgFolder* srcFolder, nsTArray<nsMsgKey>* srcKeyArray,
const char* srcMsgIdString, nsIMsgFolder* dstFolder,
bool isMove);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIURLLISTENER
NS_IMETHOD UndoTransaction(void) override;
NS_IMETHOD RedoTransaction(void) override;
// helper
nsresult SetCopyResponseUid(const char *msgIdString);
nsresult GetSrcKeyArray(nsTArray<nsMsgKey>& srcKeyArray);
void GetSrcMsgIds(nsCString &srcMsgIds) {srcMsgIds = m_srcMsgIdString;}
nsresult AddDstKey(nsMsgKey aKey);
nsresult UndoMailboxDelete();
nsresult RedoMailboxDelete();
nsresult Init(nsIMsgFolder* srcFolder, nsTArray<nsMsgKey>* srcKeyArray,
const char* srcMsgIdString, nsIMsgFolder* dstFolder,
bool idsAreUids, bool isMove);
protected:
virtual ~nsImapMoveCopyMsgTxn();
nsWeakPtr m_srcFolder;
nsCOMArray<nsIMsgDBHdr> m_srcHdrs;
nsTArray<nsMsgKey> m_dupKeyArray;
nsTArray<nsMsgKey> m_srcKeyArray;
nsTArray<nsCString> m_srcMessageIds;
nsCString m_srcMsgIdString;
nsWeakPtr m_dstFolder;
nsCString m_dstMsgIdString;
bool m_idsAreUids;
bool m_isMove;
bool m_srcIsPop3;
nsTArray<uint32_t> m_srcSizeArray;
// this is used when we chain urls for imap undo, since "this" needs
// to be the listener, but the folder may need to also be notified.
nsWeakPtr m_onStopListener;
nsresult GetImapDeleteModel(nsIMsgFolder* aFolder, nsMsgImapDeleteModel *aDeleteModel);
};
class nsImapOfflineTxn : public nsImapMoveCopyMsgTxn
{
public:
nsImapOfflineTxn(nsIMsgFolder* srcFolder, nsTArray<nsMsgKey>* srcKeyArray,
const char* srcMsgIdString,
nsIMsgFolder* dstFolder,
bool isMove,
nsOfflineImapOperationType opType,
nsCOMArray<nsIMsgDBHdr> &srcHdrs);
NS_IMETHOD UndoTransaction(void) override;
NS_IMETHOD RedoTransaction(void) override;
void SetAddFlags(bool addFlags) {m_addFlags = addFlags;}
void SetFlags(uint32_t flags) {m_flags = flags;}
protected:
virtual ~nsImapOfflineTxn();
nsOfflineImapOperationType m_opType;
// these two are used to undo flag changes, which we don't currently do.
bool m_addFlags;
uint32_t m_flags;
};
#endif
|