Fixing bug 392043, nsIMsgSendListener callbacks don't work. This checkin will remove nsMsgDeliveryListener.h/cpp since the class should not be public and is only used by nsMsgSend.

This commit is contained in:
nick.kreeger%park.edu 2007-08-25 01:24:23 +00:00
Родитель 34e29c661e
Коммит 9cb7b88ebd
10 изменённых файлов: 187 добавлений и 151 удалений

Просмотреть файл

@ -242,6 +242,8 @@ interface nsIMsgSend : nsISupports
[noscript] void notifyListenerOnStopSending(in string aMsgID, in nsresult aStatus, in wstring aMsg, in nsIFile returnFile); [noscript] void notifyListenerOnStopSending(in string aMsgID, in nsresult aStatus, in wstring aMsg, in nsIFile returnFile);
[noscript] void deliverAsMailExit(in nsIURI aUrl, in nsresult aExitCode); [noscript] void deliverAsMailExit(in nsIURI aUrl, in nsresult aExitCode);
[noscript] void deliverAsNewsExit(in nsIURI aUrl, in nsresult aExitCode); [noscript] void deliverAsNewsExit(in nsIURI aUrl, in nsresult aExitCode);
[noscript] void sendDeliveryCallback(in nsIURI aUrl, in boolean inIsNewsDelivery, in nsresult aExitCode);
/* methods for copy listener ... */ /* methods for copy listener ... */
[noscript] void notifyListenerOnStartCopy(); [noscript] void notifyListenerOnStartCopy();

Просмотреть файл

@ -101,7 +101,6 @@ CPPSRCS = \
nsSmtpService.cpp \ nsSmtpService.cpp \
nsMsgCopy.cpp \ nsMsgCopy.cpp \
nsMsgSendLater.cpp \ nsMsgSendLater.cpp \
nsMsgDeliveryListener.cpp \
nsMsgEncoders.cpp \ nsMsgEncoders.cpp \
nsMsgCompUtils.cpp \ nsMsgCompUtils.cpp \
nsMsgAttachment.cpp \ nsMsgAttachment.cpp \

Просмотреть файл

@ -916,7 +916,8 @@ NS_IMETHODIMP nsMsgCompose::RemoveMsgSendListener( nsIMsgSendListener *aMsgSendL
return mExternalSendListeners.RemoveObject( aMsgSendListener ); return mExternalSendListeners.RemoveObject( aMsgSendListener );
} }
nsresult nsMsgCompose::_SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *identity, const char *accountKey, PRBool entityConversionDone) nsresult nsMsgCompose::_SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *identity,
const char *accountKey, PRBool entityConversionDone)
{ {
nsresult rv = NS_OK; nsresult rv = NS_OK;
@ -995,7 +996,8 @@ nsresult nsMsgCompose::_SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *ide
if (deliverMode == nsIMsgCompDeliverMode::AutoSaveAsDraft) if (deliverMode == nsIMsgCompDeliverMode::AutoSaveAsDraft)
deliverMode = nsIMsgCompDeliverMode::SaveAsDraft; deliverMode = nsIMsgCompDeliverMode::SaveAsDraft;
composeSendListener->SetMsgCompose(this); nsRefPtr<nsIMsgCompose> msgCompose(this);
composeSendListener->SetMsgCompose(msgCompose);
composeSendListener->SetDeliverMode(deliverMode); composeSendListener->SetDeliverMode(deliverMode);
if (mProgress) if (mProgress)
@ -3087,39 +3089,31 @@ NS_IMETHODIMP nsMsgComposeSendListener::SetDeliverMode(MSG_DeliverMode deliverMo
nsresult nsresult
nsMsgComposeSendListener::OnStartSending(const char *aMsgID, PRUint32 aMsgSize) nsMsgComposeSendListener::OnStartSending(const char *aMsgID, PRUint32 aMsgSize)
{ {
#ifdef NS_DEBUG nsresult rv;
printf("nsMsgComposeSendListener::OnStartSending()\n"); nsCOMPtr<nsIMsgSendListener> composeSendListener = do_QueryReferent(mWeakComposeObj, &rv);
#endif if (NS_SUCCEEDED(rv) && composeSendListener)
composeSendListener->OnStartSending(aMsgID, aMsgSize);
nsCOMPtr<nsIMsgSendListener> composeSendlistener = do_QueryReferent(mWeakComposeObj);
if (composeSendlistener)
composeSendlistener->OnStartSending(aMsgID, aMsgSize);
return NS_OK; return NS_OK;
} }
nsresult nsresult
nsMsgComposeSendListener::OnProgress(const char *aMsgID, PRUint32 aProgress, PRUint32 aProgressMax) nsMsgComposeSendListener::OnProgress(const char *aMsgID, PRUint32 aProgress, PRUint32 aProgressMax)
{ {
#ifdef NS_DEBUG nsresult rv;
printf("nsMsgComposeSendListener::OnProgress()\n"); nsCOMPtr<nsIMsgSendListener> composeSendListener = do_QueryReferent(mWeakComposeObj, &rv);
#endif if (NS_SUCCEEDED(rv) && composeSendListener)
composeSendListener->OnProgress(aMsgID, aProgress, aProgressMax);
nsCOMPtr<nsIMsgSendListener> composeSendlistener = do_QueryReferent(mWeakComposeObj);
if (composeSendlistener)
composeSendlistener->OnProgress(aMsgID, aProgress, aProgressMax);
return NS_OK; return NS_OK;
} }
nsresult nsresult
nsMsgComposeSendListener::OnStatus(const char *aMsgID, const PRUnichar *aMsg) nsMsgComposeSendListener::OnStatus(const char *aMsgID, const PRUnichar *aMsg)
{ {
#ifdef NS_DEBUG nsresult rv;
printf("nsMsgComposeSendListener::OnStatus()\n"); nsCOMPtr<nsIMsgSendListener> composeSendListener = do_QueryReferent(mWeakComposeObj, &rv);
#endif if (NS_SUCCEEDED(rv) && composeSendListener)
composeSendListener->OnStatus(aMsgID, aMsg);
nsCOMPtr<nsIMsgSendListener> composeSendlistener = do_QueryReferent(mWeakComposeObj);
if (composeSendlistener)
composeSendlistener->OnStatus(aMsgID, aMsg);
return NS_OK; return NS_OK;
} }
@ -3130,29 +3124,27 @@ nsresult nsMsgComposeSendListener::OnSendNotPerformed(const char *aMsgID, nsresu
// for closing the windows. However we would need to do the other operations as below. // for closing the windows. However we would need to do the other operations as below.
nsresult rv = NS_OK; nsresult rv = NS_OK;
nsCOMPtr<nsIMsgCompose> msgCompose = do_QueryReferent(mWeakComposeObj, &rv);
if (msgCompose)
msgCompose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, aStatus);
nsCOMPtr<nsIMsgCompose>compose = do_QueryReferent(mWeakComposeObj); nsCOMPtr<nsIMsgSendListener> composeSendListener = do_QueryReferent(mWeakComposeObj, &rv);
if (compose) if (NS_SUCCEEDED(rv) && composeSendListener)
compose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, aStatus); composeSendListener->OnSendNotPerformed(aMsgID, aStatus);
nsCOMPtr<nsIMsgSendListener> composeSendlistener = do_QueryReferent(mWeakComposeObj); return rv;
if (composeSendlistener)
composeSendlistener->OnSendNotPerformed(aMsgID, aStatus);
return rv ;
} }
nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aStatus,
nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aStatus, const PRUnichar *aMsg, const PRUnichar *aMsg, nsIFile *returnFile)
nsIFile *returnFile)
{ {
nsresult rv = NS_OK; nsresult rv = NS_OK;
nsCOMPtr<nsIMsgCompose>compose = do_QueryReferent(mWeakComposeObj); nsCOMPtr<nsIMsgCompose> msgCompose = do_QueryReferent(mWeakComposeObj, &rv);
if (compose) if (msgCompose)
{ {
nsCOMPtr<nsIMsgProgress> progress; nsCOMPtr<nsIMsgProgress> progress;
compose->GetProgress(getter_AddRefs(progress)); msgCompose->GetProgress(getter_AddRefs(progress));
if (NS_SUCCEEDED(aStatus)) if (NS_SUCCEEDED(aStatus))
{ {
@ -3160,10 +3152,17 @@ nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aS
printf("nsMsgComposeSendListener: Success on the message send operation!\n"); printf("nsMsgComposeSendListener: Success on the message send operation!\n");
#endif #endif
nsCOMPtr<nsIMsgCompFields> compFields; nsCOMPtr<nsIMsgCompFields> compFields;
compose->GetCompFields(getter_AddRefs(compFields)); msgCompose->GetCompFields(getter_AddRefs(compFields));
// only process the reply flags if we successfully sent the message // only process the reply flags if we successfully sent the message
compose->ProcessReplyFlags(); msgCompose->ProcessReplyFlags();
// See if there is a composer window
PRBool hasDomWindow = PR_TRUE;
nsCOMPtr<nsIDOMWindowInternal> domWindow;
rv = msgCompose->GetDomWindow(getter_AddRefs(domWindow));
if (NS_FAILED(rv) || !domWindow)
hasDomWindow = PR_FALSE;
// Close the window ONLY if we are not going to do a save operation // Close the window ONLY if we are not going to do a save operation
nsAutoString fieldsFCC; nsAutoString fieldsFCC;
@ -3173,40 +3172,42 @@ nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aS
{ {
if (fieldsFCC.LowerCaseEqualsLiteral("nocopy://")) if (fieldsFCC.LowerCaseEqualsLiteral("nocopy://"))
{ {
compose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, NS_OK); msgCompose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, NS_OK);
if (progress) if (progress)
{ {
progress->UnregisterListener(this); progress->UnregisterListener(this);
progress->CloseProgressDialog(PR_FALSE); progress->CloseProgressDialog(PR_FALSE);
} }
compose->CloseWindow(PR_TRUE); if (hasDomWindow)
msgCompose->CloseWindow(PR_TRUE);
} }
} }
} }
else else
{ {
compose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, NS_OK); msgCompose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, NS_OK);
if (progress) if (progress)
{ {
progress->UnregisterListener(this); progress->UnregisterListener(this);
progress->CloseProgressDialog(PR_FALSE); progress->CloseProgressDialog(PR_FALSE);
} }
compose->CloseWindow(PR_TRUE); // if we fail on the simple GetFcc call, close the window to be safe and avoid if (hasDomWindow)
// windows hanging around to prevent the app from exiting. msgCompose->CloseWindow(PR_TRUE); // if we fail on the simple GetFcc call, close the window to be safe and avoid
// windows hanging around to prevent the app from exiting.
} }
// Remove the current draft msg when sending draft is done. // Remove the current draft msg when sending draft is done.
PRBool deleteDraft; PRBool deleteDraft;
compose->GetDeleteDraft(&deleteDraft); msgCompose->GetDeleteDraft(&deleteDraft);
if (deleteDraft) if (deleteDraft)
RemoveCurrentDraftMessage(compose, PR_FALSE); RemoveCurrentDraftMessage(msgCompose, PR_FALSE);
} }
else else
{ {
#ifdef NS_DEBUG #ifdef NS_DEBUG
printf("nsMsgComposeSendListener: the message send operation failed!\n"); printf("nsMsgComposeSendListener: the message send operation failed!\n");
#endif #endif
compose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, aStatus); msgCompose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, aStatus);
if (progress) if (progress)
{ {
progress->CloseProgressDialog(PR_TRUE); progress->CloseProgressDialog(PR_TRUE);
@ -3216,9 +3217,9 @@ nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aS
} }
nsCOMPtr<nsIMsgSendListener> composeSendlistener = do_QueryReferent(mWeakComposeObj); nsCOMPtr<nsIMsgSendListener> composeSendListener = do_QueryReferent(mWeakComposeObj, &rv);
if (composeSendlistener) if (NS_SUCCEEDED(rv) && composeSendListener)
composeSendlistener->OnStopSending(aMsgID, aStatus, aMsg, returnFile); composeSendListener->OnStopSending(aMsgID, aStatus, aMsg, returnFile);
return rv; return rv;
} }
@ -3226,9 +3227,10 @@ nsresult nsMsgComposeSendListener::OnStopSending(const char *aMsgID, nsresult aS
nsresult nsresult
nsMsgComposeSendListener::OnGetDraftFolderURI(const char *aFolderURI) nsMsgComposeSendListener::OnGetDraftFolderURI(const char *aFolderURI)
{ {
nsCOMPtr<nsIMsgSendListener> composeSendlistener = do_QueryReferent(mWeakComposeObj); nsresult rv;
if (composeSendlistener) nsCOMPtr<nsIMsgSendListener> composeSendListener = do_QueryReferent(mWeakComposeObj, &rv);
composeSendlistener->OnGetDraftFolderURI(aFolderURI); if (NS_SUCCEEDED(rv) && composeSendListener)
composeSendListener->OnGetDraftFolderURI(aFolderURI);
return NS_OK; return NS_OK;
} }
@ -3257,28 +3259,29 @@ nsresult
nsMsgComposeSendListener::OnStopCopy(nsresult aStatus) nsMsgComposeSendListener::OnStopCopy(nsresult aStatus)
{ {
nsresult rv = NS_OK; nsresult rv = NS_OK;
nsCOMPtr<nsIMsgCompose> msgCompose = do_QueryReferent(mWeakComposeObj, &rv);
nsCOMPtr<nsIMsgCompose>compose = do_QueryReferent(mWeakComposeObj); if (msgCompose)
if (compose)
{ {
if (mDeliverMode == nsIMsgSend::nsMsgQueueForLater || if (mDeliverMode == nsIMsgSend::nsMsgQueueForLater ||
mDeliverMode == nsIMsgSend::nsMsgSaveAsDraft) mDeliverMode == nsIMsgSend::nsMsgSaveAsDraft)
compose->RememberQueuedDisposition(); {
msgCompose->RememberQueuedDisposition();
}
// Ok, if we are here, we are done with the send/copy operation so // Ok, if we are here, we are done with the send/copy operation so
// we have to do something with the window....SHOW if failed, Close // we have to do something with the window....SHOW if failed, Close
// if succeeded // if succeeded
nsCOMPtr<nsIMsgProgress> progress; nsCOMPtr<nsIMsgProgress> progress;
compose->GetProgress(getter_AddRefs(progress)); msgCompose->GetProgress(getter_AddRefs(progress));
if (progress) if (progress)
{ {
//Unregister ourself from msg compose progress // Unregister ourself from msg compose progress
progress->UnregisterListener(this); progress->UnregisterListener(this);
progress->CloseProgressDialog(NS_FAILED(aStatus)); progress->CloseProgressDialog(NS_FAILED(aStatus));
} }
compose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, aStatus); msgCompose->NotifyStateListeners(nsIMsgComposeNotificationType::ComposeProcessDone, aStatus);
if (NS_SUCCEEDED(aStatus)) if (NS_SUCCEEDED(aStatus))
{ {
@ -3290,19 +3293,20 @@ nsMsgComposeSendListener::OnStopCopy(nsresult aStatus)
if (mDeliverMode == nsIMsgSend::nsMsgSaveAsDraft || if (mDeliverMode == nsIMsgSend::nsMsgSaveAsDraft ||
mDeliverMode == nsIMsgSend::nsMsgSaveAsTemplate) mDeliverMode == nsIMsgSend::nsMsgSaveAsTemplate)
{ {
compose->NotifyStateListeners(nsIMsgComposeNotificationType::SaveInFolderDone, aStatus); msgCompose->NotifyStateListeners(nsIMsgComposeNotificationType::SaveInFolderDone, aStatus);
// Remove the current draft msg when saving as draft/template is done. // Remove the current draft msg when saving as draft/template is done.
compose->SetDeleteDraft(PR_TRUE); msgCompose->SetDeleteDraft(PR_TRUE);
RemoveCurrentDraftMessage(compose, PR_TRUE); RemoveCurrentDraftMessage(msgCompose, PR_TRUE);
} }
else else
{ {
// Remove (possible) draft if we're in send later mode // Remove (possible) draft if we're in send later mode
if(mDeliverMode == nsIMsgSend::nsMsgQueueForLater) { if (mDeliverMode == nsIMsgSend::nsMsgQueueForLater)
compose->SetDeleteDraft(PR_TRUE); {
RemoveCurrentDraftMessage(compose, PR_TRUE); msgCompose->SetDeleteDraft(PR_TRUE);
RemoveCurrentDraftMessage(msgCompose, PR_TRUE);
} }
compose->CloseWindow(PR_TRUE); msgCompose->CloseWindow(PR_TRUE);
} }
} }
#ifdef NS_DEBUG #ifdef NS_DEBUG
@ -3317,7 +3321,7 @@ nsMsgComposeSendListener::OnStopCopy(nsresult aStatus)
nsresult nsresult
nsMsgComposeSendListener::GetMsgFolder(nsIMsgCompose *compObj, nsIMsgFolder **msgFolder) nsMsgComposeSendListener::GetMsgFolder(nsIMsgCompose *compObj, nsIMsgFolder **msgFolder)
{ {
nsresult rv; nsresult rv;
nsCOMPtr<nsIMsgFolder> aMsgFolder; nsCOMPtr<nsIMsgFolder> aMsgFolder;
nsCString folderUri; nsCString folderUri;
@ -3340,7 +3344,7 @@ nsMsgComposeSendListener::GetMsgFolder(nsIMsgCompose *compObj, nsIMsgFolder **ms
nsresult nsresult
nsMsgComposeSendListener::RemoveCurrentDraftMessage(nsIMsgCompose *compObj, PRBool calledByCopy) nsMsgComposeSendListener::RemoveCurrentDraftMessage(nsIMsgCompose *compObj, PRBool calledByCopy)
{ {
nsresult rv; nsresult rv;
nsCOMPtr <nsIMsgCompFields> compFields = nsnull; nsCOMPtr <nsIMsgCompFields> compFields = nsnull;
rv = compObj->GetCompFields(getter_AddRefs(compFields)); rv = compObj->GetCompFields(getter_AddRefs(compFields));
@ -3488,19 +3492,19 @@ NS_IMETHODIMP nsMsgComposeSendListener::OnStateChange(nsIWebProgress *aWebProgre
{ {
if (aStateFlags == nsIWebProgressListener::STATE_STOP) if (aStateFlags == nsIWebProgressListener::STATE_STOP)
{ {
nsCOMPtr<nsIMsgCompose>compose = do_QueryReferent(mWeakComposeObj); nsCOMPtr<nsIMsgCompose> msgCompose = do_QueryReferent(mWeakComposeObj);
if (compose) if (msgCompose)
{ {
nsCOMPtr<nsIMsgProgress> progress; nsCOMPtr<nsIMsgProgress> progress;
compose->GetProgress(getter_AddRefs(progress)); msgCompose->GetProgress(getter_AddRefs(progress));
//Time to stop any pending operation... // Time to stop any pending operation...
if (progress) if (progress)
{ {
//Unregister ourself from msg compose progress // Unregister ourself from msg compose progress
progress->UnregisterListener(this); progress->UnregisterListener(this);
PRBool bCanceled = PR_FALSE; PRBool bCanceled = PR_FALSE;
progress->GetProcessCanceledByUser(&bCanceled); progress->GetProcessCanceledByUser(&bCanceled);
if (bCanceled) if (bCanceled)
{ {
@ -3517,9 +3521,9 @@ NS_IMETHODIMP nsMsgComposeSendListener::OnStateChange(nsIWebProgress *aWebProgre
} }
nsCOMPtr<nsIMsgSend> msgSend; nsCOMPtr<nsIMsgSend> msgSend;
compose->GetMessageSend(getter_AddRefs(msgSend)); msgCompose->GetMessageSend(getter_AddRefs(msgSend));
if (msgSend) if (msgSend)
msgSend->Abort(); msgSend->Abort();
} }
} }
return NS_OK; return NS_OK;

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -52,7 +52,6 @@
#include "nsMsgCompUtils.h" #include "nsMsgCompUtils.h"
#include "nsIMsgMessageService.h" #include "nsIMsgMessageService.h"
#include "nsMsgUtils.h" #include "nsMsgUtils.h"
#include "nsMsgDeliveryListener.h"
#include "nsNetUtil.h" #include "nsNetUtil.h"
#include "nsMsgMimeCID.h" #include "nsMsgMimeCID.h"
#include "nsMsgCompCID.h" #include "nsMsgCompCID.h"

Просмотреть файл

@ -51,7 +51,6 @@
#include "nsIPrefService.h" #include "nsIPrefService.h"
#include "nsIPrefBranch.h" #include "nsIPrefBranch.h"
#include "nsIMsgMailNewsUrl.h" #include "nsIMsgMailNewsUrl.h"
#include "nsMsgDeliveryListener.h"
#include "nsMsgEncoders.h" #include "nsMsgEncoders.h"
#include "nsMsgCompUtils.h" #include "nsMsgCompUtils.h"
#include "nsMsgI18N.h" #include "nsMsgI18N.h"
@ -225,6 +224,62 @@ static nsresult StripOutGroupNames(char * addresses)
return NS_OK; return NS_OK;
} }
// This private class just provides us an external URL listener, with callback functionality.
class MsgDeliveryListener : public nsIUrlListener
{
public:
MsgDeliveryListener(nsIMsgSend *aMsgSend, PRBool inIsNewsDelivery);
virtual ~MsgDeliveryListener();
NS_DECL_ISUPPORTS
NS_DECL_NSIURLLISTENER
private:
nsCOMPtr<nsIMsgSend> mMsgSend;
PRBool mIsNewsDelivery;
};
NS_IMPL_ISUPPORTS1(MsgDeliveryListener, nsIUrlListener);
MsgDeliveryListener::MsgDeliveryListener(nsIMsgSend *aMsgSend, PRBool inIsNewsDelivery)
{
mMsgSend = aMsgSend;
mIsNewsDelivery = inIsNewsDelivery;
}
MsgDeliveryListener::~MsgDeliveryListener()
{
}
NS_IMETHODIMP MsgDeliveryListener::OnStartRunningUrl(nsIURI *url)
{
if (mMsgSend)
mMsgSend->NotifyListenerOnStartSending(nsnull, nsnull);
return NS_OK;
}
NS_IMETHODIMP MsgDeliveryListener::OnStopRunningUrl(nsIURI *url, nsresult aExitCode)
{
if (url)
{
nsCOMPtr<nsIMsgMailNewsUrl> mailUrl = do_QueryInterface(url);
if (mailUrl)
mailUrl->UnRegisterListener(this);
}
if (mMsgSend)
{
mMsgSend->NotifyListenerOnStopSending(nsnull, aExitCode, nsnull, nsnull);
mMsgSend->SendDeliveryCallback(url, mIsNewsDelivery, aExitCode);
}
return NS_OK;
}
/* the following macro actually implement addref, release and query interface for our component. */ /* the following macro actually implement addref, release and query interface for our component. */
NS_IMPL_THREADSAFE_ISUPPORTS1(nsMsgComposeAndSend, nsIMsgSend) NS_IMPL_THREADSAFE_ISUPPORTS1(nsMsgComposeAndSend, nsIMsgSend)
@ -3336,58 +3391,49 @@ nsMsgComposeAndSend::Init(
return HackAttachments(attachments, preloaded_attachments); return HackAttachments(attachments, preloaded_attachments);
} }
nsresult NS_IMETHODIMP nsMsgComposeAndSend::SendDeliveryCallback(nsIURI *aUrl, PRBool inIsNewsDelivery, nsresult aExitCode)
SendDeliveryCallback(nsIURI *aUrl, nsresult aExitCode, nsMsgDeliveryType deliveryType, nsISupports *tagData)
{ {
if (tagData) if (inIsNewsDelivery)
{ {
nsCOMPtr<nsIMsgSend> msgSend = do_QueryInterface(tagData); if (NS_FAILED(aExitCode))
if (!msgSend) if (aExitCode != NS_ERROR_ABORT && !NS_IS_MSG_ERROR(aExitCode))
return NS_ERROR_NULL_POINTER; aExitCode = NS_ERROR_POST_FAILED;
if (deliveryType == nsMailDelivery) DeliverAsNewsExit(aUrl, aExitCode);
{
if (NS_FAILED(aExitCode))
switch (aExitCode)
{
case NS_ERROR_UNKNOWN_HOST:
case NS_ERROR_UNKNOWN_PROXY_HOST:
aExitCode = NS_ERROR_SMTP_SEND_FAILED_UNKNOWN_SERVER;
break;
case NS_ERROR_CONNECTION_REFUSED:
case NS_ERROR_PROXY_CONNECTION_REFUSED:
aExitCode = NS_ERROR_SMTP_SEND_FAILED_REFUSED;
break;
case NS_ERROR_NET_INTERRUPT:
aExitCode = NS_ERROR_SMTP_SEND_FAILED_INTERRUPTED;
break;
case NS_ERROR_NET_TIMEOUT:
case NS_ERROR_NET_RESET:
aExitCode = NS_ERROR_SMTP_SEND_FAILED_TIMEOUT;
break;
case NS_ERROR_SMTP_PASSWORD_UNDEFINED:
// nothing to do, just keep the code
break;
default:
if (aExitCode != NS_ERROR_ABORT && !NS_IS_MSG_ERROR(aExitCode))
aExitCode = NS_ERROR_SMTP_SEND_FAILED_UNKNOWN_REASON;
break;
}
msgSend->DeliverAsMailExit(aUrl, aExitCode);
}
else if (deliveryType == nsNewsDelivery)
{
if (NS_FAILED(aExitCode))
if (aExitCode != NS_ERROR_ABORT && !NS_IS_MSG_ERROR(aExitCode))
aExitCode = NS_ERROR_POST_FAILED;
msgSend->DeliverAsNewsExit(aUrl, aExitCode);
}
msgSend->SetRunningRequest(nsnull);
} }
else
{
if (NS_FAILED(aExitCode))
{
switch (aExitCode)
{
case NS_ERROR_UNKNOWN_HOST:
case NS_ERROR_UNKNOWN_PROXY_HOST:
aExitCode = NS_ERROR_SMTP_SEND_FAILED_UNKNOWN_SERVER;
break;
case NS_ERROR_CONNECTION_REFUSED:
case NS_ERROR_PROXY_CONNECTION_REFUSED:
aExitCode = NS_ERROR_SMTP_SEND_FAILED_REFUSED;
break;
case NS_ERROR_NET_INTERRUPT:
aExitCode = NS_ERROR_SMTP_SEND_FAILED_INTERRUPTED;
break;
case NS_ERROR_NET_TIMEOUT:
case NS_ERROR_NET_RESET:
aExitCode = NS_ERROR_SMTP_SEND_FAILED_TIMEOUT;
break;
case NS_ERROR_SMTP_PASSWORD_UNDEFINED:
// nothing to do, just keep the code
break;
default:
if (aExitCode != NS_ERROR_ABORT && !NS_IS_MSG_ERROR(aExitCode))
aExitCode = NS_ERROR_SMTP_SEND_FAILED_UNKNOWN_REASON;
break;
}
}
DeliverAsMailExit(aUrl, aExitCode);
}
return aExitCode; return aExitCode;
} }
@ -3514,7 +3560,7 @@ nsMsgComposeAndSend::DeliverFileAsMail()
NotifyListenerOnStopSending(nsnull, NS_ERROR_OUT_OF_MEMORY, nsnull, nsnull); NotifyListenerOnStopSending(nsnull, NS_ERROR_OUT_OF_MEMORY, nsnull, nsnull);
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
} }
PRBool collectOutgoingAddresses = PR_TRUE; PRBool collectOutgoingAddresses = PR_TRUE;
nsCOMPtr<nsIPrefBranch> pPrefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID)); nsCOMPtr<nsIPrefBranch> pPrefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID));
if (pPrefBranch) if (pPrefBranch)
@ -3603,14 +3649,10 @@ nsMsgComposeAndSend::DeliverFileAsMail()
nsCOMPtr<nsISmtpService> smtpService(do_GetService(NS_SMTPSERVICE_CONTRACTID, &rv)); nsCOMPtr<nsISmtpService> smtpService(do_GetService(NS_SMTPSERVICE_CONTRACTID, &rv));
if (NS_SUCCEEDED(rv) && smtpService) if (NS_SUCCEEDED(rv) && smtpService)
{ {
nsMsgDeliveryListener * aListener = new nsMsgDeliveryListener(SendDeliveryCallback, nsMailDelivery, this); MsgDeliveryListener *deliveryListener = new MsgDeliveryListener(this, PR_FALSE);
nsCOMPtr<nsIUrlListener> uriListener = do_QueryInterface(aListener); if (!deliveryListener)
if (!uriListener)
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
// Note: Don't do a SetMsgComposeAndSendObject since we are in the same thread, and
// using callbacks for notification
// we used to get the prompt from the compose window and we'd pass that in // we used to get the prompt from the compose window and we'd pass that in
// to the smtp protocol as the prompt to use. But when you send a message, // to the smtp protocol as the prompt to use. But when you send a message,
// we dismiss the compose window.....so you are parenting off of a window that // we dismiss the compose window.....so you are parenting off of a window that
@ -3631,7 +3673,7 @@ nsMsgComposeAndSend::DeliverFileAsMail()
msgStatus = do_QueryInterface(mStatusFeedback); msgStatus = do_QueryInterface(mStatusFeedback);
rv = smtpService->SendMailMessage(mTempFile, buf, mUserIdentity, rv = smtpService->SendMailMessage(mTempFile, buf, mUserIdentity,
mSmtpPassword.get(), uriListener, msgStatus, mSmtpPassword.get(), deliveryListener, msgStatus,
callbacks, nsnull, getter_AddRefs(mRunningRequest)); callbacks, nsnull, getter_AddRefs(mRunningRequest));
} }
@ -3656,14 +3698,10 @@ nsMsgComposeAndSend::DeliverFileAsNews()
if (NS_SUCCEEDED(rv) && nntpService) if (NS_SUCCEEDED(rv) && nntpService)
{ {
nsMsgDeliveryListener * aListener = new nsMsgDeliveryListener(SendDeliveryCallback, nsNewsDelivery, this); MsgDeliveryListener *deliveryListener = new MsgDeliveryListener(this, PR_TRUE);
nsCOMPtr<nsIUrlListener> uriListener = do_QueryInterface(aListener); if (!deliveryListener)
if (!uriListener)
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
// Note: Don't do a SetMsgComposeAndSendObject since we are in the same thread, and
// using callbacks for notification
// Tell the user we are posting the message! // Tell the user we are posting the message!
nsString msg; nsString msg;
mComposeBundle->GetStringFromID(NS_MSG_POSTING_MESSAGE, getter_Copies(msg)); mComposeBundle->GetStringFromID(NS_MSG_POSTING_MESSAGE, getter_Copies(msg));
@ -3681,7 +3719,7 @@ nsMsgComposeAndSend::DeliverFileAsNews()
msgWindow = nsnull; msgWindow = nsnull;
rv = nntpService->PostMessage(mTempFile, mCompFields->GetNewsgroups(), mAccountKey.get(), rv = nntpService->PostMessage(mTempFile, mCompFields->GetNewsgroups(), mAccountKey.get(),
uriListener, msgWindow, nsnull); deliveryListener, msgWindow, nsnull);
if (NS_FAILED(rv)) return rv; if (NS_FAILED(rv)) return rv;
} }

Просмотреть файл

@ -182,7 +182,6 @@
// //
class nsMsgSendPart; class nsMsgSendPart;
class nsMsgCopy; class nsMsgCopy;
class nsMsgDeliveryListener;
class nsIPrompt; class nsIPrompt;
class nsIInterfaceRequestor; class nsIInterfaceRequestor;

Просмотреть файл

@ -44,7 +44,6 @@
#include "nsIFile.h" #include "nsIFile.h"
#include "nsISmtpService.h" #include "nsISmtpService.h"
#include "nsIMsgMailNewsUrl.h" #include "nsIMsgMailNewsUrl.h"
#include "nsMsgDeliveryListener.h"
#include "nsIMsgIncomingServer.h" #include "nsIMsgIncomingServer.h"
#include "nsICopyMessageListener.h" #include "nsICopyMessageListener.h"
#include "nsIMsgMessageService.h" #include "nsIMsgMessageService.h"

Просмотреть файл

@ -46,7 +46,6 @@
#include "nsIMsgFolder.h" #include "nsIMsgFolder.h"
#include "nsIMsgSendListener.h" #include "nsIMsgSendListener.h"
#include "nsIMsgSendLaterListener.h" #include "nsIMsgSendLaterListener.h"
#include "nsMsgDeliveryListener.h"
#include "nsIMsgSendLater.h" #include "nsIMsgSendLater.h"
#include "nsIMsgWindow.h" #include "nsIMsgWindow.h"
@ -55,7 +54,6 @@
// to listen for message send completion and eventually notify the caller // to listen for message send completion and eventually notify the caller
//////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////
class nsMsgSendLater; class nsMsgSendLater;
class nsMsgDeliveryListener;
class SendOperationListener : public nsIMsgSendListener, class SendOperationListener : public nsIMsgSendListener,
public nsIMsgCopyServiceListener public nsIMsgCopyServiceListener
@ -127,8 +125,6 @@ private:
nsIMsgSendLaterListener **mListenerArray; nsIMsgSendLaterListener **mListenerArray;
PRInt32 mListenerArrayCount; PRInt32 mListenerArrayCount;
nsMsgSendUnsentMessagesCallback mCompleteCallback;
nsCOMPtr<nsIMsgDBHdr> mMessage; nsCOMPtr<nsIMsgDBHdr> mMessage;
// //