fixed bug 10801 -- failed to save messages as templates; stationary folder is now per identity; r=putterman

This commit is contained in:
jefft%netscape.com 1999-11-23 22:19:48 +00:00
parent 531ae8e977
commit 9ddf019857
3 changed files with 53 additions and 38 deletions

View File

@ -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);
};

View File

@ -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()

View File

@ -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<nsIOutputStream> m_outputStream;
char *m_dataBuffer;
nsCOMPtr<nsIChannel> 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<nsIUrlListener>::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<nsIUrlListener>::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<nsIRDFResource> res;
rv = rdf->GetResource(templateUri, getter_AddRefs(res));
rv = rdf->GetResource(m_templateUri, getter_AddRefs(res));
if (NS_FAILED(rv)) goto done;
nsCOMPtr<nsIMsgFolder> 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;
}