mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
fixed bug 10801 -- failed to save messages as templates; stationary folder is now per identity; r=putterman
This commit is contained in:
parent
531ae8e977
commit
9ddf019857
@ -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);
|
||||
};
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user