Use nsILocalFile relative descs for mail prefs r=sspitzer, sr=mscott 137006, initial patch by ccarlen

This commit is contained in:
bienvenu%nventure.com 2003-12-19 19:47:27 +00:00
parent f00fcdf46d
commit ec56dfbd94
10 changed files with 331 additions and 210 deletions

View File

@ -58,9 +58,12 @@
#include "prprf.h"
#include "nsISupportsObsolete.h"
#include "nsISupportsPrimitives.h"
#include "nsMsgUtils.h"
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
static NS_NAMED_LITERAL_CSTRING(REL_FILE_PREF_SUFFIX, "-rel");
NS_IMPL_THREADSAFE_ISUPPORTS1(nsMsgIdentity,
nsIMsgIdentity)
@ -388,39 +391,44 @@ nsMsgIdentity::ToString(PRUnichar **aResult)
/* Identity attribute accessors */
// XXX - these are a COM objects, use NS_ADDREF
//NS_IMPL_GETSET(nsMsgIdentity, Signature, nsIMsgSignature*, m_signature);
NS_IMETHODIMP
nsMsgIdentity::GetSignature(nsILocalFile **sig) {
nsMsgIdentity::GetSignature(nsILocalFile **sig)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
char *prefName = getPrefName(m_identityKey, "sig_file");
rv = m_prefBranch->GetComplexValue(prefName, NS_GET_IID(nsILocalFile), (void **)sig);
if (NS_FAILED(rv))
*sig = nsnull;
if (!prefName)
return NS_ERROR_FAILURE;
nsCAutoString relPrefName(prefName);
relPrefName.Append(REL_FILE_PREF_SUFFIX);
PRBool gotRelPref;
rv = NS_GetPersistentFile(relPrefName.get(), prefName, nsnull, gotRelPref, sig);
if (NS_SUCCEEDED(rv) && !gotRelPref)
{
rv = NS_SetPersistentFile(relPrefName.get(), prefName, *sig);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to write signature file pref.");
}
PR_Free(prefName);
return NS_OK;
}
NS_IMETHODIMP
nsMsgIdentity::SetSignature(nsILocalFile *sig)
{
nsresult rv = getPrefService();
if (NS_FAILED(rv)) return rv;
rv = NS_OK;
char *prefName = getPrefName(m_identityKey, "sig_file");
nsresult rv = NS_OK;
if (sig)
rv = m_prefBranch->SetComplexValue(prefName, NS_GET_IID(nsILocalFile), sig);
/*
else
m_prefBranch->ClearFilePref(prefName);
*/
PR_Free(prefName);
return rv;
{
char *prefName = getPrefName(m_identityKey, "sig_file");
if (!prefName)
return NS_ERROR_FAILURE;
return NS_OK;
nsCAutoString relPrefName(prefName);
relPrefName.Append(REL_FILE_PREF_SUFFIX);
rv = NS_SetPersistentFile(relPrefName.get(), prefName, sig);
}
return rv;
}
NS_IMETHODIMP

View File

@ -82,6 +82,8 @@
#define PORT_NOT_SET -1
NS_NAMED_LITERAL_CSTRING(REL_FILE_PREF_SUFFIX, "-rel");
MOZ_DECL_CTOR_COUNTER(nsMsgIncomingServer)
nsMsgIncomingServer::nsMsgIncomingServer():
@ -134,17 +136,17 @@ nsMsgIncomingServer::SetRootFolder(nsIMsgFolder * aRootFolder)
NS_IMETHODIMP
nsMsgIncomingServer::GetRootFolder(nsIMsgFolder * *aRootFolder)
{
if (!aRootFolder)
return NS_ERROR_NULL_POINTER;
if (m_rootFolder) {
NS_ENSURE_ARG_POINTER(aRootFolder);
if (m_rootFolder)
{
*aRootFolder = m_rootFolder;
NS_ADDREF(*aRootFolder);
} else {
}
else
{
nsresult rv = CreateRootFolder();
if (NS_FAILED(rv)) return rv;
*aRootFolder = m_rootFolder;
NS_IF_ADDREF(*aRootFolder);
NS_ENSURE_SUCCESS(rv, rv);
NS_IF_ADDREF(*aRootFolder = m_rootFolder);
}
return NS_OK;
}
@ -471,11 +473,21 @@ nsMsgIncomingServer::GetFileValue(const char* prefname,
nsCAutoString fullPrefName;
getPrefName(m_serverKey.get(), prefname, fullPrefName);
nsCAutoString fullRelPrefName(fullPrefName);
fullRelPrefName.Append(REL_FILE_PREF_SUFFIX);
nsCOMPtr<nsILocalFile> prefLocal;
nsresult rv = m_prefBranch->GetComplexValue(fullPrefName.get(),
NS_GET_IID(nsILocalFile),
getter_AddRefs(prefLocal));
PRBool gotRelPref;
nsresult rv = NS_GetPersistentFile(fullRelPrefName.get(), fullPrefName.get(),
nsnull, gotRelPref, getter_AddRefs(prefLocal));
if (NS_FAILED(rv)) return rv;
if (NS_SUCCEEDED(rv) && !gotRelPref)
{
rv = NS_SetPersistentFile(fullRelPrefName.get(), fullPrefName.get(), prefLocal);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to update file pref.");
}
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIFileSpec> outSpec;
@ -494,21 +506,19 @@ nsMsgIncomingServer::SetFileValue(const char* prefname,
{
nsCAutoString fullPrefName;
getPrefName(m_serverKey.get(), prefname, fullPrefName);
nsCAutoString fullRelPrefName(fullPrefName);
fullRelPrefName.Append(REL_FILE_PREF_SUFFIX);
nsresult rv;
nsFileSpec tempSpec;
rv = spec->GetFileSpec(&tempSpec);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsILocalFile> prefLocal;
rv = NS_FileSpecToIFile(&tempSpec, getter_AddRefs(prefLocal));
if (NS_FAILED(rv)) return rv;
rv = m_prefBranch->SetComplexValue(fullPrefName.get(), NS_GET_IID(nsILocalFile),
prefLocal);
if (NS_FAILED(rv)) return rv;
return NS_OK;
nsCOMPtr<nsILocalFile> localFile;
NS_FileSpecToIFile(&tempSpec, getter_AddRefs(localFile));
if (!localFile)
return NS_ERROR_FAILURE;
return NS_SetPersistentFile(fullRelPrefName.get(), fullPrefName.get(), localFile);
}
nsresult

View File

@ -59,6 +59,9 @@
#include "nsIRDFService.h"
#include "nsIMimeConverter.h"
#include "nsMsgMimeCID.h"
#include "nsIPrefService.h"
#include "nsIRelativeFilePref.h"
#include "nsAppDirectoryServiceDefs.h"
#include "nsICategoryManager.h"
#include "nsCategoryManagerUtils.h"
#include "nsISpamSettings.h"
@ -502,7 +505,11 @@ nsresult NS_MsgEscapeEncodeURLPath(const PRUnichar *str, char **result)
NS_ENSURE_ARG_POINTER(str);
NS_ENSURE_ARG_POINTER(result);
*result = nsEscape(NS_ConvertUCS2toUTF8(str).get(), url_Path);
nsCAutoString escapedStr;
NS_EscapeURL(NS_ConvertUCS2toUTF8(str),
esc_FileBaseName|esc_Forced|esc_AlwaysCopy,
escapedStr);
*result = nsCRT::strdup(escapedStr.get());
if (!*result) return NS_ERROR_OUT_OF_MEMORY;
return NS_OK;
}
@ -837,3 +844,87 @@ nsresult MSGApopMD5(const char *text, PRInt32 text_len, const char *password, PR
memcpy(digest, result, DIGEST_LENGTH);
return rv;
}
NS_MSG_BASE nsresult NS_GetPersistentFile(const char *relPrefName,
const char *absPrefName,
const char *dirServiceProp,
PRBool& gotRelPref,
nsILocalFile **aFile)
{
NS_ENSURE_ARG_POINTER(aFile);
*aFile = nsnull;
NS_ENSURE_ARG(relPrefName);
NS_ENSURE_ARG(absPrefName);
gotRelPref = PR_FALSE;
nsCOMPtr<nsIPrefService> prefService(do_GetService(NS_PREFSERVICE_CONTRACTID));
if (!prefService) return NS_ERROR_FAILURE;
nsCOMPtr<nsIPrefBranch> mainBranch;
prefService->GetBranch(nsnull, getter_AddRefs(mainBranch));
if (!mainBranch) return NS_ERROR_FAILURE;
nsCOMPtr<nsILocalFile> localFile;
// Get the relative first
nsCOMPtr<nsIRelativeFilePref> relFilePref;
mainBranch->GetComplexValue(relPrefName,
NS_GET_IID(nsIRelativeFilePref), getter_AddRefs(relFilePref));
if (relFilePref) {
relFilePref->GetFile(getter_AddRefs(localFile));
NS_ASSERTION(localFile, "An nsIRelativeFilePref has no file.");
if (localFile)
gotRelPref = PR_TRUE;
}
// If not, get the old absolute
if (!localFile) {
mainBranch->GetComplexValue(absPrefName,
NS_GET_IID(nsILocalFile), getter_AddRefs(localFile));
// If not, and given a dirServiceProp, use directory service.
if (!localFile && dirServiceProp) {
nsCOMPtr<nsIProperties> dirService(do_GetService("@mozilla.org/file/directory_service;1"));
if (!dirService) return NS_ERROR_FAILURE;
dirService->Get(dirServiceProp, NS_GET_IID(nsILocalFile), getter_AddRefs(localFile));
if (!localFile) return NS_ERROR_FAILURE;
}
}
if (localFile) {
*aFile = localFile;
NS_ADDREF(*aFile);
return NS_OK;
}
return NS_ERROR_FAILURE;
}
NS_MSG_BASE nsresult NS_SetPersistentFile(const char *relPrefName,
const char *absPrefName,
nsILocalFile *aFile)
{
NS_ENSURE_ARG(relPrefName);
NS_ENSURE_ARG(absPrefName);
NS_ENSURE_ARG(aFile);
nsresult rv;
nsCOMPtr<nsIPrefService> prefService(do_GetService(NS_PREFSERVICE_CONTRACTID));
if (!prefService) return NS_ERROR_FAILURE;
nsCOMPtr<nsIPrefBranch> mainBranch;
prefService->GetBranch(nsnull, getter_AddRefs(mainBranch));
if (!mainBranch) return NS_ERROR_FAILURE;
// Write the relative.
nsCOMPtr<nsIRelativeFilePref> relFilePref;
NS_NewRelativeFilePref(aFile, nsDependentCString(NS_APP_USER_PROFILE_50_DIR), getter_AddRefs(relFilePref));
if (!relFilePref) return NS_ERROR_FAILURE;
rv = mainBranch->SetComplexValue(relPrefName, NS_GET_IID(nsIRelativeFilePref), relFilePref);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to write profile-relative file pref.");
// Write the absolute for backwards compatibilty's sake.
// Or, if aPath is on a different drive than the profile dir.
rv = mainBranch->SetComplexValue(absPrefName, NS_GET_IID(nsILocalFile), aFile);
return rv;
}

View File

@ -46,6 +46,8 @@
#include "msgCore.h"
#include "nsCOMPtr.h"
class nsILocalFile;
//These are utility functions that can used throughout the mailnews code
NS_MSG_BASE nsresult GetMessageServiceContractIDForURI(const char *uri, nsCString &contractID);
@ -83,6 +85,16 @@ NS_MSG_BASE nsresult GetExistingFolder(const char *aFolderURI, nsIMsgFolder **aF
NS_MSG_BASE nsresult EscapeFromSpaceLine(nsIFileSpec *pDst, char *start, const char *end);
NS_MSG_BASE PRBool IsAFromSpaceLine(char *start, const char *end);
NS_MSG_BASE nsresult NS_GetPersistentFile(const char *relPrefName,
const char *absPrefName,
const char *dirServiceProp, // Can be NULL
PRBool& gotRelPref,
nsILocalFile **aFile);
NS_MSG_BASE nsresult NS_SetPersistentFile(const char *relPrefName,
const char *absPrefName,
nsILocalFile *aFile);
NS_MSG_BASE nsresult CreateServicesForPasswordManager();
NS_MSG_BASE nsresult IsRFC822HeaderFieldName(const char *aHdr, PRBool *aResult);

View File

@ -101,7 +101,9 @@
#include "nsIMsgMailSession.h"
#include "nsIStreamConverterService.h"
#define PREF_MAIL_ROOT_IMAP "mail.root.imap"
#define PREF_MAIL_ROOT_IMAP "mail.root.imap" // old - for backward compatibility only
#define PREF_MAIL_ROOT_IMAP_REL "mail.root.imap-rel"
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
static NS_DEFINE_CID(kImapUrlCID, NS_IMAPURL_CID);
@ -2943,11 +2945,16 @@ NS_IMETHODIMP nsImapService::NewChannel(nsIURI *aURI, nsIChannel **_retval)
NS_IMETHODIMP
nsImapService::SetDefaultLocalPath(nsIFileSpec *aPath)
{
nsresult rv;
nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (NS_FAILED(rv)) return rv;
return prefBranch->SetComplexValue(PREF_MAIL_ROOT_IMAP, NS_GET_IID(nsIFileSpec), aPath);
NS_ENSURE_ARG(aPath);
nsFileSpec spec;
nsresult rv = aPath->GetFileSpec(&spec);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsILocalFile> localFile;
NS_FileSpecToIFile(&spec, getter_AddRefs(localFile));
if (!localFile) return NS_ERROR_FAILURE;
return NS_SetPersistentFile(PREF_MAIL_ROOT_IMAP_REL, PREF_MAIL_ROOT_IMAP, localFile);
}
NS_IMETHODIMP
@ -2960,41 +2967,34 @@ nsImapService::GetDefaultLocalPath(nsIFileSpec ** aResult)
nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (NS_FAILED(rv)) return rv;
PRBool havePref = PR_FALSE;
nsCOMPtr<nsILocalFile> prefLocal;
nsCOMPtr<nsIFile> localFile;
rv = prefBranch->GetComplexValue(PREF_MAIL_ROOT_IMAP, NS_GET_IID(nsILocalFile),
getter_AddRefs(prefLocal));
if (NS_SUCCEEDED(rv)) {
localFile = prefLocal;
havePref = PR_TRUE;
}
if (!localFile) {
rv = NS_GetSpecialDirectory(NS_APP_IMAP_MAIL_50_DIR, getter_AddRefs(localFile));
if (NS_FAILED(rv)) return rv;
havePref = PR_FALSE;
}
PRBool havePref;
nsCOMPtr<nsILocalFile> localFile;
rv = NS_GetPersistentFile(PREF_MAIL_ROOT_IMAP_REL,
PREF_MAIL_ROOT_IMAP,
NS_APP_IMAP_MAIL_50_DIR,
havePref,
getter_AddRefs(localFile));
PRBool exists;
rv = localFile->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists) {
if (NS_SUCCEEDED(rv) && !exists)
rv = localFile->Create(nsIFile::DIRECTORY_TYPE, 0775);
if (NS_FAILED(rv)) return rv;
}
NS_ENSURE_SUCCESS(rv, rv);
// Make the resulting nsIFileSpec
// TODO: Convert arg to nsILocalFile and avoid this
nsCOMPtr<nsIFileSpec> outSpec;
rv = NS_NewFileSpecFromIFile(localFile, getter_AddRefs(outSpec));
if (NS_FAILED(rv)) return rv;
NS_ENSURE_SUCCESS(rv, rv);
if (!havePref || !exists)
rv = SetDefaultLocalPath(outSpec);
if (!havePref || !exists)
{
rv = NS_SetPersistentFile(PREF_MAIL_ROOT_IMAP_REL, PREF_MAIL_ROOT_IMAP, localFile);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to set root dir pref.");
}
*aResult = outSpec;
NS_IF_ADDREF(*aResult);
return rv;
NS_IF_ADDREF(*aResult = outSpec);
return NS_OK;
}
NS_IMETHODIMP

View File

@ -71,7 +71,8 @@
#include "nsCOMPtr.h"
#include "nsMsgFolderFlags.h"
#define PREF_MAIL_ROOT_MOVEMAIL "mail.root.movemail"
#define PREF_MAIL_ROOT_MOVEMAIL "mail.root.movemail" // old - for backward compatibility only
#define PREF_MAIL_ROOT_MOVEMAIL_REL "mail.root.movemail-rel"
const char * gDefaultSpoolPaths[] = {
"/var/spool/mail/",
@ -512,11 +513,18 @@ freebuff_and_unlock:
NS_IMETHODIMP
nsMovemailService::SetDefaultLocalPath(nsIFileSpec *aPath)
{
NS_ENSURE_ARG(aPath);
nsresult rv;
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefCID, &rv));
nsFileSpec spec;
rv = aPath->GetFileSpec(&spec);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsILocalFile> localFile;
NS_FileSpecToIFile(&spec, getter_AddRefs(localFile));
if (!localFile) return NS_ERROR_FAILURE;
rv = NS_SetPersistentFile(PREF_MAIL_ROOT_MOVEMAIL_REL, PREF_MAIL_ROOT_MOVEMAIL, localFile);
rv = prefs->SetFilePref(PREF_MAIL_ROOT_MOVEMAIL, aPath, PR_FALSE /* set default */);
return rv;
}
@ -527,30 +535,20 @@ nsMovemailService::GetDefaultLocalPath(nsIFileSpec ** aResult)
*aResult = nsnull;
nsresult rv;
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefCID, &rv));
if (NS_FAILED(rv)) return rv;
PRBool havePref = PR_FALSE;
nsCOMPtr<nsILocalFile> prefLocal;
nsCOMPtr<nsIFile> localFile;
rv = prefs->GetFileXPref(PREF_MAIL_ROOT_MOVEMAIL, getter_AddRefs(prefLocal));
if (NS_SUCCEEDED(rv)) {
localFile = prefLocal;
havePref = PR_TRUE;
}
if (!localFile) {
rv = NS_GetSpecialDirectory(NS_APP_MAIL_50_DIR, getter_AddRefs(localFile));
PRBool havePref;
nsCOMPtr<nsILocalFile> localFile;
rv = NS_GetPersistentFile(PREF_MAIL_ROOT_MOVEMAIL_REL,
PREF_MAIL_ROOT_MOVEMAIL,
NS_APP_MAIL_50_DIR,
havePref,
getter_AddRefs(localFile));
if (NS_FAILED(rv)) return rv;
havePref = PR_FALSE;
}
PRBool exists;
rv = localFile->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists) {
if (NS_SUCCEEDED(rv) && !exists)
rv = localFile->Create(nsIFile::DIRECTORY_TYPE, 0775);
if (NS_FAILED(rv)) return rv;
}
// Make the resulting nsIFileSpec
// TODO: Convert arg to nsILocalFile and avoid this
@ -558,12 +556,14 @@ nsMovemailService::GetDefaultLocalPath(nsIFileSpec ** aResult)
rv = NS_NewFileSpecFromIFile(localFile, getter_AddRefs(outSpec));
if (NS_FAILED(rv)) return rv;
if (!havePref || !exists)
rv = SetDefaultLocalPath(outSpec);
if (!havePref || !exists) {
rv = NS_SetPersistentFile(PREF_MAIL_ROOT_MOVEMAIL_REL, PREF_MAIL_ROOT_MOVEMAIL, localFile);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to set root dir pref.");
}
*aResult = outSpec;
NS_IF_ADDREF(*aResult);
return rv;
return NS_OK;
}

View File

@ -51,11 +51,13 @@
#include "nsXPIDLString.h"
#include "nsCOMPtr.h"
#include "nsIFileSpec.h"
#include "nsMsgUtils.h"
#include "nsIDirectoryService.h"
#include "nsAppDirectoryServiceDefs.h"
#define PREF_MAIL_ROOT_NONE "mail.root.none"
#define PREF_MAIL_ROOT_NONE "mail.root.none" // old - for backward compatibility only
#define PREF_MAIL_ROOT_NONE_REL "mail.root.none-rel"
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
@ -71,11 +73,18 @@ NS_IMPL_ISUPPORTS2(nsNoneService, nsINoneService, nsIMsgProtocolInfo)
NS_IMETHODIMP
nsNoneService::SetDefaultLocalPath(nsIFileSpec *aPath)
{
NS_ENSURE_ARG(aPath);
nsresult rv;
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefCID, &rv));
nsFileSpec spec;
rv = aPath->GetFileSpec(&spec);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsILocalFile> localFile;
NS_FileSpecToIFile(&spec, getter_AddRefs(localFile));
if (!localFile) return NS_ERROR_FAILURE;
rv = NS_SetPersistentFile(PREF_MAIL_ROOT_NONE_REL, PREF_MAIL_ROOT_NONE, localFile);
rv = prefs->SetFilePref(PREF_MAIL_ROOT_NONE, aPath, PR_FALSE /* set default */);
return rv;
}
@ -86,30 +95,20 @@ nsNoneService::GetDefaultLocalPath(nsIFileSpec ** aResult)
*aResult = nsnull;
nsresult rv;
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefCID, &rv));
PRBool havePref;
nsCOMPtr<nsILocalFile> localFile;
rv = NS_GetPersistentFile(PREF_MAIL_ROOT_NONE_REL,
PREF_MAIL_ROOT_NONE,
NS_APP_MAIL_50_DIR,
havePref,
getter_AddRefs(localFile));
if (NS_FAILED(rv)) return rv;
PRBool havePref = PR_FALSE;
nsCOMPtr<nsILocalFile> prefLocal;
nsCOMPtr<nsIFile> localFile;
rv = prefs->GetFileXPref(PREF_MAIL_ROOT_NONE, getter_AddRefs(prefLocal));
if (NS_SUCCEEDED(rv)) {
localFile = prefLocal;
havePref = PR_TRUE;
}
if (!localFile) {
rv = NS_GetSpecialDirectory(NS_APP_MAIL_50_DIR, getter_AddRefs(localFile));
if (NS_FAILED(rv)) return rv;
havePref = PR_FALSE;
}
PRBool exists;
rv = localFile->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists) {
if (NS_SUCCEEDED(rv) && !exists)
rv = localFile->Create(nsIFile::DIRECTORY_TYPE, 0775);
if (NS_FAILED(rv)) return rv;
}
// Make the resulting nsIFileSpec
// TODO: Convert arg to nsILocalFile and avoid this
@ -117,12 +116,18 @@ nsNoneService::GetDefaultLocalPath(nsIFileSpec ** aResult)
rv = NS_NewFileSpecFromIFile(localFile, getter_AddRefs(outSpec));
if (NS_FAILED(rv)) return rv;
if (!havePref || !exists)
rv = SetDefaultLocalPath(outSpec);
if (!havePref || !exists) {
rv = NS_SetPersistentFile(PREF_MAIL_ROOT_NONE_REL, PREF_MAIL_ROOT_NONE, localFile);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to set root dir pref.");
}
*aResult = outSpec;
NS_IF_ADDREF(*aResult);
return rv;
return NS_OK;
NS_ENSURE_ARG_POINTER(aResult);
*aResult = nsnull;
}

View File

@ -61,11 +61,13 @@
#include "nsAppDirectoryServiceDefs.h"
#include "prprf.h"
#include "nsEscape.h"
#include "nsMsgUtils.h"
#define POP3_PORT 110 // The IANA port for Pop3
#define SECURE_POP3_PORT 995 // The port for Pop3 over SSL
#define PREF_MAIL_ROOT_POP3 "mail.root.pop3"
#define PREF_MAIL_ROOT_POP3 "mail.root.pop3" // old - for backward compatibility only
#define PREF_MAIL_ROOT_POP3_REL "mail.root.pop3-rel"
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
static NS_DEFINE_CID(kPop3UrlCID, NS_POP3URL_CID);
@ -395,11 +397,18 @@ NS_IMETHODIMP nsPop3Service::NewChannel(nsIURI *aURI, nsIChannel **_retval)
NS_IMETHODIMP
nsPop3Service::SetDefaultLocalPath(nsIFileSpec *aPath)
{
NS_ENSURE_ARG(aPath);
nsresult rv;
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefCID, &rv));
nsFileSpec spec;
rv = aPath->GetFileSpec(&spec);
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsILocalFile> localFile;
NS_FileSpecToIFile(&spec, getter_AddRefs(localFile));
if (!localFile) return NS_ERROR_FAILURE;
rv = NS_SetPersistentFile(PREF_MAIL_ROOT_POP3_REL, PREF_MAIL_ROOT_POP3, localFile);
rv = prefs->SetFilePref(PREF_MAIL_ROOT_POP3, aPath, PR_FALSE /* set default */);
return rv;
}
@ -410,30 +419,20 @@ nsPop3Service::GetDefaultLocalPath(nsIFileSpec ** aResult)
*aResult = nsnull;
nsresult rv;
nsCOMPtr<nsIPref> prefs(do_GetService(kPrefCID, &rv));
if (NS_FAILED(rv)) return rv;
PRBool havePref = PR_FALSE;
nsCOMPtr<nsILocalFile> prefLocal;
nsCOMPtr<nsIFile> localFile;
rv = prefs->GetFileXPref(PREF_MAIL_ROOT_POP3, getter_AddRefs(prefLocal));
if (NS_SUCCEEDED(rv)) {
localFile = prefLocal;
havePref = PR_TRUE;
}
if (!localFile) {
rv = NS_GetSpecialDirectory(NS_APP_MAIL_50_DIR, getter_AddRefs(localFile));
PRBool havePref;
nsCOMPtr<nsILocalFile> localFile;
rv = NS_GetPersistentFile(PREF_MAIL_ROOT_POP3_REL,
PREF_MAIL_ROOT_POP3,
NS_APP_MAIL_50_DIR,
havePref,
getter_AddRefs(localFile));
if (NS_FAILED(rv)) return rv;
havePref = PR_FALSE;
}
PRBool exists;
rv = localFile->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists) {
if (NS_SUCCEEDED(rv) && !exists)
rv = localFile->Create(nsIFile::DIRECTORY_TYPE, 0775);
if (NS_FAILED(rv)) return rv;
}
// Make the resulting nsIFileSpec
// TODO: Convert arg to nsILocalFile and avoid this
@ -441,12 +440,14 @@ nsPop3Service::GetDefaultLocalPath(nsIFileSpec ** aResult)
rv = NS_NewFileSpecFromIFile(localFile, getter_AddRefs(outSpec));
if (NS_FAILED(rv)) return rv;
if (!havePref || !exists)
rv = SetDefaultLocalPath(outSpec);
if (!havePref || !exists) {
rv = NS_SetPersistentFile(PREF_MAIL_ROOT_POP3_REL, PREF_MAIL_ROOT_POP3, localFile);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to set root dir pref.");
}
*aResult = outSpec;
NS_IF_ADDREF(*aResult);
return rv;
return NS_OK;
}

View File

@ -21,7 +21,7 @@
*
* Contributor(s):
* Seth Spitzer <sspitzer@netscape.com>
* David Bienvenu <bienvenu@netscape.com>
* David Bienvenu <bienvenu@nventure.com>
* Henrik Gemal <mozilla@gemal.dk>
*
* Alternatively, the contents of this file may be used under the terms of
@ -64,6 +64,7 @@
#define VALID_VERSION 1
#define NEW_NEWS_DIR_NAME "News"
#define PREF_MAIL_NEWSRC_ROOT "mail.newsrc_root"
#define PREF_MAIL_NEWSRC_ROOT_REL "mail.newsrc_root-rel"
#define HOSTINFO_FILE_NAME "hostinfo.dat"
#define NEWS_DELIMITER '.'
@ -231,15 +232,16 @@ nsNntpIncomingServer::GetLocalStoreType(char **type)
NS_IMETHODIMP
nsNntpIncomingServer::SetNewsrcRootPath(nsIFileSpec *aNewsrcRootPath)
{
nsresult rv;
nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (NS_SUCCEEDED(rv) && prefBranch) {
return prefBranch->SetComplexValue(PREF_MAIL_NEWSRC_ROOT, NS_GET_IID(nsIFileSpec),
aNewsrcRootPath);
}
NS_ENSURE_ARG(aNewsrcRootPath);
nsFileSpec spec;
return NS_ERROR_FAILURE;
nsresult rv = aNewsrcRootPath->GetFileSpec(&spec);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsILocalFile> localFile;
NS_FileSpecToIFile(&spec, getter_AddRefs(localFile));
if (!localFile) return NS_ERROR_FAILURE;
return NS_SetPersistentFile(PREF_MAIL_NEWSRC_ROOT_REL, PREF_MAIL_NEWSRC_ROOT, localFile);
}
NS_IMETHODIMP
@ -248,42 +250,35 @@ nsNntpIncomingServer::GetNewsrcRootPath(nsIFileSpec **aNewsrcRootPath)
NS_ENSURE_ARG_POINTER(aNewsrcRootPath);
*aNewsrcRootPath = nsnull;
nsresult rv;
nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (NS_FAILED(rv)) return rv;
PRBool havePref = PR_FALSE;
nsCOMPtr<nsIFile> localFile;
nsCOMPtr<nsILocalFile> prefLocal;
rv = prefBranch->GetComplexValue(PREF_MAIL_NEWSRC_ROOT, NS_GET_IID(nsILocalFile),
getter_AddRefs(prefLocal));
if (NS_SUCCEEDED(rv)) {
localFile = prefLocal;
havePref = PR_TRUE;
}
if (!localFile) {
rv = NS_GetSpecialDirectory(NS_APP_NEWS_50_DIR, getter_AddRefs(localFile));
if (NS_FAILED(rv)) return rv;
havePref = PR_FALSE;
}
PRBool havePref;
nsCOMPtr<nsILocalFile> localFile;
nsresult rv = NS_GetPersistentFile(PREF_MAIL_NEWSRC_ROOT_REL,
PREF_MAIL_NEWSRC_ROOT,
NS_APP_NEWS_50_DIR,
havePref,
getter_AddRefs(localFile));
NS_ENSURE_SUCCESS(rv, rv);
PRBool exists;
rv = localFile->Exists(&exists);
if (NS_SUCCEEDED(rv) && !exists)
rv = localFile->Create(nsIFile::DIRECTORY_TYPE, 0775);
if (NS_FAILED(rv)) return rv;
NS_ENSURE_SUCCESS(rv, rv);
// Make the resulting nsIFileSpec
// TODO: Convert arg to nsILocalFile and avoid this
nsCOMPtr<nsIFileSpec> outSpec;
rv = NS_NewFileSpecFromIFile(localFile, getter_AddRefs(outSpec));
if (NS_FAILED(rv)) return rv;
NS_ENSURE_SUCCESS(rv, rv);
if (!havePref || !exists)
rv = SetNewsrcRootPath(outSpec);
if (!havePref || !exists)
{
rv = NS_SetPersistentFile(PREF_MAIL_NEWSRC_ROOT_REL, PREF_MAIL_NEWSRC_ROOT, localFile);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to set root dir pref.");
}
*aNewsrcRootPath = outSpec;
NS_IF_ADDREF(*aNewsrcRootPath);
NS_IF_ADDREF(*aNewsrcRootPath = outSpec);
return rv;
}

View File

@ -24,6 +24,7 @@
* Scott MacGregor <mscott@netscape.com>
* Pierre Phaneuf <pp@ludusdesign.com>
* Håkan Waara <hwaara@chello.se>
* David Bienvenu < bienvenu@nventure.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@ -82,6 +83,7 @@
#include "nsNewsDownloader.h"
#include "prprf.h"
#include "nsICacheService.h"
#include "nsMsgUtils.h"
#include "nsEscape.h"
#include "nsNetUtil.h"
@ -89,7 +91,8 @@
#undef SetPort // XXX Windows!
#define PREF_NETWORK_HOSTS_NNTP_SERVER "network.hosts.nntp_server"
#define PREF_MAIL_ROOT_NNTP "mail.root.nntp"
#define PREF_MAIL_ROOT_NNTP "mail.root.nntp" // old - for backward compatibility only
#define PREF_MAIL_ROOT_NNTP_REL "mail.root.nntp-rel"
static NS_DEFINE_CID(kMessengerMigratorCID, NS_MESSENGERMIGRATOR_CID);
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
@ -960,7 +963,8 @@ nsNntpService::GetNntpServerByIdentity(nsIMsgIdentity *aSenderIdentity, nsIMsgIn
rv = inServer->GetType(getter_Copies(serverType));
if(serverType.Equals("nntp"))
{
*aNntpServer = inServer;
*aNntpServer = inServer;
NS_IF_ADDREF(*aNntpServer);
break;
}
@ -1463,11 +1467,16 @@ NS_IMETHODIMP nsNntpService::NewChannel(nsIURI *aURI, nsIChannel **_retval)
NS_IMETHODIMP
nsNntpService::SetDefaultLocalPath(nsIFileSpec *aPath)
{
nsresult rv;
nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (NS_FAILED(rv)) return rv;
return prefBranch->SetComplexValue(PREF_MAIL_ROOT_NNTP, NS_GET_IID(nsIFileSpec), aPath);
NS_ENSURE_ARG(aPath);
nsFileSpec spec;
nsresult rv = aPath->GetFileSpec(&spec);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsILocalFile> localFile;
NS_FileSpecToIFile(&spec, getter_AddRefs(localFile));
if (!localFile) return NS_ERROR_FAILURE;
return NS_SetPersistentFile(PREF_MAIL_ROOT_NNTP_REL, PREF_MAIL_ROOT_NNTP, localFile);
}
NS_IMETHODIMP
@ -1480,44 +1489,34 @@ nsNntpService::GetDefaultLocalPath(nsIFileSpec ** aResult)
nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (NS_FAILED(rv)) return rv;
PRBool havePref = PR_FALSE;
nsCOMPtr<nsIFile> localFile;
nsCOMPtr<nsILocalFile> prefLocal;
rv = prefBranch->GetComplexValue(PREF_MAIL_ROOT_NNTP, NS_GET_IID(nsILocalFile),
getter_AddRefs(prefLocal));
if (NS_SUCCEEDED(rv))
{
localFile = prefLocal;
havePref = PR_TRUE;
}
if (!localFile)
{
rv = NS_GetSpecialDirectory(NS_APP_NEWS_50_DIR, getter_AddRefs(localFile));
if (NS_FAILED(rv)) return rv;
havePref = PR_FALSE;
}
PRBool havePref;
nsCOMPtr<nsILocalFile> localFile;
rv = NS_GetPersistentFile(PREF_MAIL_ROOT_NNTP_REL,
PREF_MAIL_ROOT_NNTP,
NS_APP_NEWS_50_DIR,
havePref,
getter_AddRefs(localFile));
if (NS_FAILED(rv)) return rv;
PRBool exists;
rv = localFile->Exists(&exists);
if (NS_FAILED(rv)) return rv;
if (!exists)
{
if (NS_SUCCEEDED(rv) && !exists)
rv = localFile->Create(nsIFile::DIRECTORY_TYPE, 0775);
if (NS_FAILED(rv)) return rv;
}
NS_ENSURE_SUCCESS(rv, rv);
// Make the resulting nsIFileSpec
// TODO: Convert arg to nsILocalFile and avoid this
nsCOMPtr<nsIFileSpec> outSpec;
rv = NS_NewFileSpecFromIFile(localFile, getter_AddRefs(outSpec));
if (NS_FAILED(rv)) return rv;
NS_ENSURE_SUCCESS(rv, rv);
if (!havePref || !exists)
rv = SetDefaultLocalPath(outSpec);
{
rv = NS_SetPersistentFile(PREF_MAIL_ROOT_NNTP_REL, PREF_MAIL_ROOT_NNTP, localFile);
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to set root dir pref.");
}
*aResult = outSpec;
NS_IF_ADDREF(*aResult);
return rv;
NS_IF_ADDREF(*aResult = outSpec);
return NS_OK;
}
NS_IMETHODIMP