From 9ddf01985751311047e4fc2a7e5590193d0c8215 Mon Sep 17 00:00:00 2001 From: "jefft%netscape.com" Date: Tue, 23 Nov 1999 22:19:48 +0000 Subject: [PATCH] fixed bug 10801 -- failed to save messages as templates; stationary folder is now per identity; r=putterman --- mailnews/base/public/nsIMessenger.idl | 3 +- mailnews/base/resources/content/widgetglue.js | 28 ++++++++- mailnews/base/src/nsMessenger.cpp | 60 ++++++++----------- 3 files changed, 53 insertions(+), 38 deletions(-) diff --git a/mailnews/base/public/nsIMessenger.idl b/mailnews/base/public/nsIMessenger.idl index 0aceeadf8c2b..23cc36b43d31 100644 --- a/mailnews/base/public/nsIMessenger.idl +++ b/mailnews/base/public/nsIMessenger.idl @@ -26,6 +26,7 @@ #include "xulstubs.idl" #include "nsIRDFCompositeDataSource.idl" #include "nsIMsgWindow.idl" +#include "nsIMsgIdentity.idl" %{C++ #include "nsIDOMWindow.h" @@ -79,7 +80,7 @@ interface nsIMessenger : nsISupports { void SendUnsentMessages(); void LoadFirstDraft(); void SetDocumentCharset(in wstring characterSet); - void saveAs(in string url, in boolean asFile); + void saveAs(in string url, in boolean asFile, in nsIMsgIdentity identity); void openAttachment(in string url, in string displayName, in string messageUri); }; diff --git a/mailnews/base/resources/content/widgetglue.js b/mailnews/base/resources/content/widgetglue.js index 32de8a1f2e7b..713e13d92d03 100644 --- a/mailnews/base/resources/content/widgetglue.js +++ b/mailnews/base/resources/content/widgetglue.js @@ -524,7 +524,7 @@ function MsgSaveAsFile() var uri = messageList[0].getAttribute('id'); dump (uri); if (uri) - messenger.saveAs(uri, true); + messenger.saveAs(uri, true, null); } } @@ -537,9 +537,31 @@ function MsgSaveAsTemplate() if (messageList && messageList.length == 1) { var uri = messageList[0].getAttribute('id'); - dump (uri); + // dump (uri); if (uri) - messenger.saveAs(uri, false); + { + var folderTree = GetFolderTree(); + var identity = null; + var selectedFolderList = folderTree.selectedItems; + if(selectedFolderList.length > 0) + { + var selectedFolder = selectedFolderList[0]; + var folderUri = selectedFolder.getAttribute('id'); + // dump("selectedFolder uri = " + uri + "\n"); + + // get the incoming server associated with this folder uri + var server = FindIncomingServer(folderUri); + // dump("server = " + server + "\n"); + // get the identity associated with this server + var identities = accountManager.GetIdentitiesForServer(server); + // dump("identities = " + identities + "\n"); + // just get the first one + if (identities.Count() > 0 ) { + identity = identities.GetElementAt(0).QueryInterface(Components.interfaces.nsIMsgIdentity); + } + } + messenger.saveAs(uri, false, identity); + } } } function MsgSendUnsentMsg() diff --git a/mailnews/base/src/nsMessenger.cpp b/mailnews/base/src/nsMessenger.cpp index 6c326391118e..6d79c6173aab 100644 --- a/mailnews/base/src/nsMessenger.cpp +++ b/mailnews/base/src/nsMessenger.cpp @@ -97,6 +97,7 @@ #include "nsMsgCompFieldsFact.h" #include "nsMsgI18N.h" #include "nsNeckoUtil.h" +#include "nsXPIDLString.h" static NS_DEFINE_CID(kIStreamConverterServiceCID, NS_STREAMCONVERTERSERVICE_CID); static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); @@ -146,6 +147,7 @@ public: nsCOMPtr m_outputStream; char *m_dataBuffer; nsCOMPtr m_channel; + nsXPIDLCString m_templateUri; }; @@ -526,7 +528,7 @@ done: NS_IMETHODIMP -nsMessenger::SaveAs(const char* url, PRBool asFile) +nsMessenger::SaveAs(const char* url, PRBool asFile, nsIMsgIdentity* identity) { nsresult rv = NS_OK; nsIMsgMessageService* messageService = nsnull; @@ -641,33 +643,31 @@ nsMessenger::SaveAs(const char* url, PRBool asFile) { // ** save as Template PRBool needDummyHeader = PR_TRUE; - char * templateUri = nsnull; - NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv); - if (NS_FAILED(rv)) goto done; - prefs->CopyCharPref("mail.default_templates_uri", &templateUri); - if (!templateUri || !*templateUri) - return NS_ERROR_FAILURE; - needDummyHeader = - PL_strcasestr(templateUri, "mailbox") != nsnull; - nsCRT::free(templateUri); nsSaveAsListener *aListener = new nsSaveAsListener(aSpec); + if (aListener) { - rv = aListener->QueryInterface( - nsCOMTypeInfo::GetIID(), - getter_AddRefs(urlListener)); - if (NS_FAILED(rv)) - { - delete aListener; - return rv; - } - NS_ADDREF(aListener); - // nsUrlListenerManager uses nsVoidArray - // to keep trach of all listeners we have - // to manually add refs ourself - messageService->SaveMessageToDisk(url, aSpec, - needDummyHeader, - urlListener, nsnull); + if (identity) + rv = identity->GetStationaryFolder( + getter_Copies(aListener->m_templateUri)); + if (NS_FAILED(rv)) return rv; + needDummyHeader = + PL_strcasestr(aListener->m_templateUri, "mailbox") != nsnull; + rv = aListener->QueryInterface( + nsCOMTypeInfo::GetIID(), + getter_AddRefs(urlListener)); + if (NS_FAILED(rv)) + { + delete aListener; + return rv; + } + NS_ADDREF(aListener); + // nsUrlListenerManager uses nsVoidArray + // to keep trach of all listeners we have + // to manually add refs ourself + messageService->SaveMessageToDisk(url, aSpec, + needDummyHeader, + urlListener, nsnull); } } } @@ -1455,7 +1455,6 @@ NS_IMETHODIMP nsSaveAsListener::OnStopRunningUrl(nsIURI* url, nsresult exitCode) { nsresult rv = exitCode; - char *templateUri = nsnull; if (m_fileSpec) { @@ -1464,16 +1463,10 @@ nsSaveAsListener::OnStopRunningUrl(nsIURI* url, nsresult exitCode) if (NS_FAILED(rv)) goto done; NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv); if (NS_FAILED(rv)) goto done; - prefs->CopyCharPref("mail.default_templates_uri", &templateUri); - if (!templateUri || !*templateUri) - { - rv = NS_ERROR_FAILURE; - goto done; - } NS_WITH_SERVICE(nsIRDFService, rdf, kRDFServiceCID, &rv); if (NS_FAILED(rv)) goto done; nsCOMPtr res; - rv = rdf->GetResource(templateUri, getter_AddRefs(res)); + rv = rdf->GetResource(m_templateUri, getter_AddRefs(res)); if (NS_FAILED(rv)) goto done; nsCOMPtr templateFolder; templateFolder = do_QueryInterface(res, &rv); @@ -1495,7 +1488,6 @@ done: Release(); // no more work to be done; kill ourself } } - PR_FREEIF(templateUri); return rv; }