diff --git a/mozilla/xpcom/io/nsAppDirectoryServiceDefs.h b/mozilla/xpcom/io/nsAppDirectoryServiceDefs.h index 0cf8007d1a4..9a45d5858fb 100755 --- a/mozilla/xpcom/io/nsAppDirectoryServiceDefs.h +++ b/mozilla/xpcom/io/nsAppDirectoryServiceDefs.h @@ -55,6 +55,7 @@ #define NS_APP_CHROME_DIR "AChrom" #define NS_APP_PLUGINS_DIR "APlugns" #define NS_APP_SEARCH_DIR "SrchPlugns" +#define NS_APP_MESSENGER_DIR "AMessenger" // -------------------------------------------------------------------------------------- // Files and directories which exist on a per-profile basis diff --git a/mozilla/xpcom/io/nsAppFileLocationProvider.cpp b/mozilla/xpcom/io/nsAppFileLocationProvider.cpp index b608adc11f1..90916fb7b02 100755 --- a/mozilla/xpcom/io/nsAppFileLocationProvider.cpp +++ b/mozilla/xpcom/io/nsAppFileLocationProvider.cpp @@ -29,6 +29,7 @@ #include "nsILocalFile.h" #include "nsString.h" #include "nsXPIDLString.h" +#include "nsIChromeRegistry.h" #if defined(XP_MAC) @@ -94,6 +95,8 @@ #define SEARCH_DIR_NAME "searchplugins" #endif +// default mailnews files parent folder +#define MESSENGER_DIR_NAME "messenger" //***************************************************************************** // nsAppFileLocationProvider::Constructor/Destructor @@ -108,6 +111,8 @@ nsAppFileLocationProvider::~nsAppFileLocationProvider() { } +// Chrome reg service +static NS_DEFINE_CID(kChromeRegistryCID, NS_CHROMEREGISTRY_CID); //***************************************************************************** // nsAppFileLocationProvider::nsISupports @@ -191,6 +196,18 @@ nsAppFileLocationProvider::GetFile(const char *prop, PRBool *persistant, nsIFile if (NS_SUCCEEDED(rv)) rv = localFile->AppendRelativePath(SEARCH_DIR_NAME); } + else if (nsCRT::strcmp(prop, NS_APP_MESSENGER_DIR) == 0) + { + rv = CloneMozBinDirectory(getter_AddRefs(localFile)); + if (NS_SUCCEEDED(rv)) { + rv = localFile->AppendRelativePath(DEFAULTS_DIR_NAME); + if (NS_SUCCEEDED(rv)) { + rv = localFile->AppendRelativePath(MESSENGER_DIR_NAME); + if (NS_SUCCEEDED(rv)) + rv = GetSelectedLocaleDataDir(localFile); + } + } + } if (localFile && NS_SUCCEEDED(rv)) return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)_retval); @@ -349,3 +366,40 @@ NS_METHOD nsAppFileLocationProvider::GetDefaultUserProfileRoot(nsILocalFile **aL return rv; } +//---------------------------------------------------------------------------------------- +// GetSelectedLocaleDataDir - If a locale is selected, appends the selected locale to the +// defaults data dir and returns that new defaults data dir +//---------------------------------------------------------------------------------------- +NS_METHOD nsAppFileLocationProvider::GetSelectedLocaleDataDir(nsILocalFile *defaultsDataDir) +{ + NS_ENSURE_ARG_POINTER(defaultsDataDir); + + nsresult rv; + PRBool baseDirExists = PR_FALSE; + rv = defaultsDataDir->Exists(&baseDirExists); + NS_ENSURE_SUCCESS(rv,rv); + if (baseDirExists) { + nsCOMPtr chromeRegistry = do_GetService(kChromeRegistryCID, &rv); + if (NS_SUCCEEDED(rv)) { + nsXPIDLString localeName; + nsAutoString regionKey; regionKey.AssignWithConversion("global-region"); + rv = chromeRegistry->GetSelectedLocale(regionKey.get(), getter_Copies(localeName)); + if (NS_SUCCEEDED(rv) && + localeName.get() && + nsCRT::strlen(localeName.get())) { + PRBool localeDirExists = PR_FALSE; + nsCOMPtr localeDataDir; + rv = defaultsDataDir->Clone(getter_AddRefs(localeDataDir)); + NS_ENSURE_SUCCESS(rv,rv); + rv = localeDataDir->AppendUnicode(localeName); + NS_ENSURE_SUCCESS(rv,rv); + rv = localeDataDir->Exists(&localeDirExists); + NS_ENSURE_SUCCESS(rv,rv); + if (localeDirExists) { + // use locale provider instead + rv = defaultsDataDir->AppendUnicode(localeName); + NS_ENSURE_SUCCESS(rv,rv); + } + } + } + } + return NS_OK; +} diff --git a/mozilla/xpcom/io/nsAppFileLocationProvider.h b/mozilla/xpcom/io/nsAppFileLocationProvider.h index 78aa6410ef5..d824d26a5e9 100755 --- a/mozilla/xpcom/io/nsAppFileLocationProvider.h +++ b/mozilla/xpcom/io/nsAppFileLocationProvider.h @@ -45,6 +45,7 @@ protected: NS_METHOD CloneMozBinDirectory(nsILocalFile **aLocalFile); NS_METHOD GetProductDirectory(nsILocalFile **aLocalFile); NS_METHOD GetDefaultUserProfileRoot(nsILocalFile **aLocalFile); + NS_METHOD GetSelectedLocaleDataDir(nsILocalFile *aLocalFile); nsCOMPtr mMozBinDirectory; };