Dactyloidae/mailnews/compose/src/nsMsgSendLater.h
Matt A. Tobin eaac1c967d Bug 1487082 - Resolve potential for build bustage regarding bad implicit conversion constructors
* Part 1: make conversion CTORs explicit.
  Minor tweaks to conform with new(ish) static analysis rule which flags up implicit single-argument conversion constructors.
* Part 2: fix a couple of double-mRefCnt declaration errors.
* Part 3: Fix unsafe use of NS_ConvertASCIItoUTF16().

Tag #1273
2019-11-17 00:10:10 +08:00

144 lines
5.1 KiB
C++

/* -*- 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 _nsMsgSendLater_H_
#define _nsMsgSendLater_H_
#include "nsCOMArray.h"
#include "nsIMsgFolder.h"
#include "nsIMsgSendListener.h"
#include "nsIMsgSendLaterListener.h"
#include "nsIMsgSendLater.h"
#include "nsIMsgStatusFeedback.h"
#include "nsTObserverArray.h"
#include "nsIObserver.h"
#include "nsITimer.h"
#include "nsIMsgShutdown.h"
////////////////////////////////////////////////////////////////////////////////////
// This is the listener class for the send operation. We have to create this class
// to listen for message send completion and eventually notify the caller
////////////////////////////////////////////////////////////////////////////////////
class nsMsgSendLater;
class SendOperationListener : public nsIMsgSendListener,
public nsIMsgCopyServiceListener
{
public:
explicit SendOperationListener(nsMsgSendLater *aSendLater);
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGSENDLISTENER
NS_DECL_NSIMSGCOPYSERVICELISTENER
private:
virtual ~SendOperationListener();
nsMsgSendLater *mSendLater;
};
class nsMsgSendLater: public nsIMsgSendLater,
public nsIFolderListener,
public nsIObserver,
public nsIUrlListener,
public nsIMsgShutdownTask
{
public:
nsMsgSendLater();
nsresult Init();
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGSENDLATER
NS_DECL_NSIFOLDERLISTENER
NS_DECL_NSISTREAMLISTENER
NS_DECL_NSIREQUESTOBSERVER
NS_DECL_NSIOBSERVER
NS_DECL_NSIURLLISTENER
NS_DECL_NSIMSGSHUTDOWNTASK
// Methods needed for implementing interface...
nsresult StartNextMailFileSend(nsresult prevStatus);
nsresult CompleteMailFileSend();
nsresult DeleteCurrentMessage();
nsresult SetOrigMsgDisposition();
// Necessary for creating a valid list of recipients
nsresult BuildHeaders();
nsresult DeliverQueuedLine(char *line, int32_t length);
nsresult RebufferLeftovers(char *startBuf, uint32_t aLen);
nsresult BuildNewBuffer(const char* aBuf, uint32_t aCount, uint32_t *totalBufSize);
// methods for listener array processing...
void NotifyListenersOnStartSending(uint32_t aTotalMessageCount);
void NotifyListenersOnMessageStartSending(uint32_t aCurrentMessage,
uint32_t aTotalMessage,
nsIMsgIdentity *aIdentity);
void NotifyListenersOnProgress(uint32_t aCurrentMessage,
uint32_t aTotalMessage,
uint32_t aSendPercent,
uint32_t aCopyPercent);
void NotifyListenersOnMessageSendError(uint32_t aCurrentMessage,
nsresult aStatus,
const char16_t *aMsg);
void EndSendMessages(nsresult aStatus, const char16_t *aMsg,
uint32_t aTotalTried, uint32_t aSuccessful);
bool OnSendStepFinished(nsresult aStatus);
void OnCopyStepFinished(nsresult aStatus);
// counters and things for enumeration
uint32_t mTotalSentSuccessfully;
uint32_t mTotalSendCount;
nsCOMArray<nsIMsgDBHdr> mMessagesToSend;
nsCOMPtr<nsISimpleEnumerator> mEnumerator;
nsCOMPtr<nsIMsgFolder> mMessageFolder;
nsCOMPtr<nsIMsgStatusFeedback> mFeedback;
// Private Information
private:
virtual ~nsMsgSendLater();
nsresult GetIdentityFromKey(const char *aKey, nsIMsgIdentity **aIdentity);
nsresult ReparseDBIfNeeded(nsIUrlListener *aListener);
nsresult InternalSendMessages(bool aUserInitiated,
nsIMsgIdentity *aIdentity);
nsTObserverArray<nsCOMPtr<nsIMsgSendLaterListener> > mListenerArray;
nsCOMPtr<nsIMsgDBHdr> mMessage;
nsCOMPtr<nsITimer> mTimer;
bool mTimerSet;
nsCOMPtr<nsIUrlListener> mShutdownListener;
//
// File output stuff...
//
nsCOMPtr<nsIFile> mTempFile;
nsCOMPtr<nsIOutputStream> mOutFile;
// For building headers and stream parsing...
char *m_to;
char *m_bcc;
char *m_fcc;
char *m_newsgroups;
char *m_newshost;
char *m_headers;
int32_t m_flags;
int32_t m_headersFP;
bool m_inhead;
int32_t m_headersPosition;
int32_t m_bytesRead;
int32_t m_position;
int32_t m_flagsPosition;
int32_t m_headersSize;
char *mLeftoverBuffer;
char *mIdentityKey;
char *mAccountKey;
bool mSendingMessages;
bool mUserInitiated;
nsCOMPtr<nsIMsgIdentity> mIdentity;
};
#endif /* _nsMsgSendLater_H_ */