diff options
Diffstat (limited to 'mailnews/compose/src/nsMsgCopy.h')
-rw-r--r-- | mailnews/compose/src/nsMsgCopy.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/mailnews/compose/src/nsMsgCopy.h b/mailnews/compose/src/nsMsgCopy.h new file mode 100644 index 000000000..7b559d754 --- /dev/null +++ b/mailnews/compose/src/nsMsgCopy.h @@ -0,0 +1,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_ */ |