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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 _nsMsgCopy_H_
#define _nsMsgCopy_H_
#include "mozilla/Attributes.h"
#include "nscore.h"
#include "nsIFile.h"
#include "nsMsgSend.h"
#include "nsIMsgFolder.h"
#include "nsITransactionManager.h"
#include "nsIMsgCopyServiceListener.h"
#include "nsIMsgCopyService.h"
// {0874C3B5-317D-11d3-8EFB-00A024A7D144}
#define NS_IMSGCOPY_IID \
{ 0x874c3b5, 0x317d, 0x11d3, \
{ 0x8e, 0xfb, 0x0, 0xa0, 0x24, 0xa7, 0xd1, 0x44 } };
// Forward declarations...
class nsMsgCopy;
////////////////////////////////////////////////////////////////////////////////////
// This is the listener class for the copy operation. We have to create this class
// to listen for message copy completion and eventually notify the caller
////////////////////////////////////////////////////////////////////////////////////
class CopyListener : public nsIMsgCopyServiceListener
{
public:
CopyListener(void);
// nsISupports interface
NS_DECL_THREADSAFE_ISUPPORTS
NS_IMETHOD OnStartCopy() override;
NS_IMETHOD OnProgress(uint32_t aProgress, uint32_t aProgressMax) override;
NS_IMETHOD SetMessageKey(nsMsgKey aMessageKey) override;
NS_IMETHOD GetMessageId(nsACString& aMessageId) override;
NS_IMETHOD OnStopCopy(nsresult aStatus) override;
NS_IMETHOD SetMsgComposeAndSendObject(nsIMsgSend *obj);
bool mCopyInProgress;
private:
virtual ~CopyListener();
nsCOMPtr<nsIMsgSend> mComposeAndSend;
};
//
// This is a class that deals with processing remote attachments. It implements
// an nsIStreamListener interface to deal with incoming data
//
class nsMsgCopy : public nsIUrlListener
{
public:
nsMsgCopy();
// nsISupports interface
NS_DECL_ISUPPORTS
NS_DECL_NSIURLLISTENER
//////////////////////////////////////////////////////////////////////
// Object methods...
//////////////////////////////////////////////////////////////////////
//
nsresult StartCopyOperation(nsIMsgIdentity *aUserIdentity,
nsIFile *aFile,
nsMsgDeliverMode aMode,
nsIMsgSend *aMsgSendObj,
const char *aSavePref,
nsIMsgDBHdr *aMsgToReplace);
nsresult DoCopy(nsIFile *aDiskFile, nsIMsgFolder *dstFolder,
nsIMsgDBHdr *aMsgToReplace, bool aIsDraft,
nsIMsgWindow *msgWindow,
nsIMsgSend *aMsgSendObj);
nsresult GetUnsentMessagesFolder(nsIMsgIdentity *userIdentity, nsIMsgFolder **msgFolder, bool *waitForUrl);
nsresult GetDraftsFolder(nsIMsgIdentity *userIdentity, nsIMsgFolder **msgFolder, bool *waitForUrl);
nsresult GetTemplatesFolder(nsIMsgIdentity *userIdentity, nsIMsgFolder **msgFolder, bool *waitForUrl);
nsresult GetSentFolder(nsIMsgIdentity *userIdentity, nsIMsgFolder **msgFolder, bool *waitForUrl);
nsresult CreateIfMissing(nsIMsgFolder **folder, bool *waitForUrl);
//
// Vars for implementation...
//
nsIFile *mFile; // the file we are sending...
nsMsgDeliverMode mMode;
nsCOMPtr<nsIMsgFolder> mDstFolder;
nsCOMPtr<nsIMsgDBHdr> mMsgToReplace;
bool mIsDraft;
nsCOMPtr<nsIMsgSend> mMsgSendObj;
char *mSavePref;
private:
virtual ~nsMsgCopy();
};
// Useful function for the back end...
nsresult LocateMessageFolder(nsIMsgIdentity *userIdentity,
nsMsgDeliverMode aFolderType,
const char *aSaveURI,
nsIMsgFolder **msgFolder);
nsresult MessageFolderIsLocal(nsIMsgIdentity *userIdentity,
nsMsgDeliverMode aFolderType,
const char *aSaveURI,
bool *aResult);
#endif /* _nsMsgCopy_H_ */
|