Also support AppData/Local to allow a non-roaming config

This commit is contained in:
kaetemi 2016-02-04 13:02:32 +01:00
parent e19b222059
commit bc01568599
2 changed files with 17 additions and 7 deletions

View file

@ -230,7 +230,7 @@ public:
/** Get application directory. /** Get application directory.
* \return directory where applications should write files. * \return directory where applications should write files.
*/ */
std::string getApplicationDirectory(const std::string &appName = ""); std::string getApplicationDirectory(const std::string &appName = "", bool local = false);
/** Get a temporary directory. /** Get a temporary directory.
* \return temporary directory where applications should write files. * \return temporary directory where applications should write files.
@ -540,7 +540,7 @@ public:
/** Get application directory. /** Get application directory.
* \return directory where applications should write files. * \return directory where applications should write files.
*/ */
static std::string getApplicationDirectory(const std::string &appName = ""); static std::string getApplicationDirectory(const std::string &appName = "", bool local = false);
/** Get a temporary directory. /** Get a temporary directory.
* \return temporary directory where applications should write files. * \return temporary directory where applications should write files.

View file

@ -1777,19 +1777,29 @@ std::string CFileContainer::getWindowsDirectory()
#endif #endif
} }
std::string CPath::getApplicationDirectory(const std::string &appName) std::string CPath::getApplicationDirectory(const std::string &appName, bool local)
{ {
return getInstance()->_FileContainer.getApplicationDirectory(appName); return getInstance()->_FileContainer.getApplicationDirectory(appName, local);
} }
std::string CFileContainer::getApplicationDirectory(const std::string &appName) std::string CFileContainer::getApplicationDirectory(const std::string &appName, bool local)
{ {
static std::string appPath; static std::string appPaths[2];
std::string &appPath = appPaths[local ? 1 : 0];
if (appPath.empty()) if (appPath.empty())
{ {
#ifdef NL_OS_WINDOWS #ifdef NL_OS_WINDOWS
wchar_t buffer[MAX_PATH]; wchar_t buffer[MAX_PATH];
#ifdef CSIDL_LOCAL_APPDATA
if (local)
{
SHGetSpecialFolderPathW(NULL, buffer, CSIDL_LOCAL_APPDATA, TRUE);
}
else
#endif
{
SHGetSpecialFolderPathW(NULL, buffer, CSIDL_APPDATA, TRUE); SHGetSpecialFolderPathW(NULL, buffer, CSIDL_APPDATA, TRUE);
}
appPath = CPath::standardizePath(ucstring((ucchar*)buffer).toUtf8()); appPath = CPath::standardizePath(ucstring((ucchar*)buffer).toUtf8());
#elif defined(NL_OS_MAC) #elif defined(NL_OS_MAC)
appPath = CPath::standardizePath(getenv("HOME")); appPath = CPath::standardizePath(getenv("HOME"));