summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/compose/src/nsMsgCopy.h
blob: 4fa50bd8ace1df9482c7dffaddc7643f6fc3454c (plain)
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
/* -*- 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 "nsIMsgHdr.h"
#include "nsIMsgFolder.h"
#include "nsITransactionManager.h"
#include "nsIMsgCopy.h"
#include "nsIMsgCopyServiceListener.h"
#include "nsIMsgCopyService.h"

// 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 nsIMsgCopy, public nsIUrlListener {
 public:
  nsMsgCopy();

  // nsISupports interface
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGCOPY
  NS_DECL_NSIURLLISTENER

  //////////////////////////////////////////////////////////////////////
  // Object methods...
  //////////////////////////////////////////////////////////////////////
  //
  nsresult DoCopy(nsIFile* aDiskFile, nsIMsgFolder* dstFolder,
                  nsIMsgDBHdr* aMsgToReplace, bool aIsDraft, uint32_t aMsgFlags,
                  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;
  uint32_t mMsgFlags;
  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_ */