Merge pull request #1609 from rudolfwalter/develop

Improve XDG Base Directory Specification implementation
This commit is contained in:
Günter Obiltschnig 2017-02-23 09:20:43 +01:00 committed by GitHub
commit 7e4c84e1e2
14 changed files with 37 additions and 79 deletions

View File

@ -304,11 +304,6 @@ public:
/// On Unix systems, this is the '~/.local/share/'. On Windows systems,
/// this is '%APPDATA%'.
static std::string tempHome();
/// Returns the user's temp directory.
///
/// On Unix systems, this is the '~/.local/temp/'.
static std::string cacheHome();
/// Returns the user's cache directory.
///

View File

@ -34,7 +34,6 @@ public:
static std::string homeImpl();
static std::string configHomeImpl();
static std::string dataHomeImpl();
static std::string tempHomeImpl();
static std::string cacheHomeImpl();
static std::string tempImpl();
static std::string configImpl();

View File

@ -35,7 +35,6 @@ public:
static std::string configHomeImpl();
static std::string dataHomeImpl();
static std::string cacheHomeImpl();
static std::string tempHomeImpl();
static std::string tempImpl();
static std::string configImpl();
static std::string nullImpl();

View File

@ -35,7 +35,6 @@ public:
static std::string configHomeImpl();
static std::string dataHomeImpl();
static std::string cacheHomeImpl();
static std::string tempHomeImpl();
static std::string tempImpl();
static std::string configImpl();
static std::string nullImpl();

View File

@ -35,7 +35,6 @@ public:
static std::string configHomeImpl();
static std::string dataHomeImpl();
static std::string cacheHomeImpl();
static std::string tempHomeImpl();
static std::string tempImpl();
static std::string configImpl();
static std::string nullImpl();

View File

@ -615,16 +615,6 @@ std::string Path::dataHome()
}
std::string Path::tempHome()
{
#if defined(POCO_OS_FAMILY_UNIX) || defined(POCO_OS_FAMILY_WINDOWS)
return PathImpl::tempHomeImpl();
#else
return PathImpl::tempImpl();
#endif
}
std::string Path::cacheHome()
{
#if defined(POCO_OS_FAMILY_UNIX) || defined(POCO_OS_FAMILY_WINDOWS)

View File

@ -81,15 +81,23 @@ std::string PathImpl::configHomeImpl()
{
#if defined(POCO_VXWORKS)
return PathImpl::homeImpl();
#else
#elif POCO_OS == POCO_OS_MAC_OS_X
std::string path = PathImpl::homeImpl();
std::string::size_type n = path.size();
if (n > 0 && path[n - 1] == '/')
#if POCO_OS == POCO_OS_MAC_OS_X
path.append("Library/Preferences/");
path.append("Library/Preferences/");
return path;
#else
path.append(".config/");
#endif
std::string path;
if (EnvironmentImpl::hasImpl("XDG_CONFIG_HOME"))
path = EnvironmentImpl::getImpl("XDG_CONFIG_HOME");
if (!path.empty())
return path;
path = PathImpl::homeImpl();
std::string::size_type n = path.size();
if (n > 0 && path[n - 1] == '/')
path.append(".config/");
return path;
#endif
@ -100,15 +108,23 @@ std::string PathImpl::dataHomeImpl()
{
#if defined(POCO_VXWORKS)
return PathImpl::homeImpl();
#else
#elif POCO_OS == POCO_OS_MAC_OS_X
std::string path = PathImpl::homeImpl();
std::string::size_type n = path.size();
if (n > 0 && path[n - 1] == '/')
#if POCO_OS == POCO_OS_MAC_OS_X
path.append("Library/Application Support/");
path.append("Library/Application Support/");
return path;
#else
path.append(".local/share/");
#endif
std::string path;
if (EnvironmentImpl::hasImpl("XDG_DATA_HOME"))
path = EnvironmentImpl::getImpl("XDG_DATA_HOME");
if (!path.empty())
return path;
path = PathImpl::homeImpl();
std::string::size_type n = path.size();
if (n > 0 && path[n - 1] == '/')
path.append(".local/share/");
return path;
#endif
@ -119,34 +135,23 @@ std::string PathImpl::cacheHomeImpl()
{
#if defined(POCO_VXWORKS)
return PathImpl::tempImpl();
#else
#elif POCO_OS == POCO_OS_MAC_OS_X
std::string path = PathImpl::homeImpl();
std::string::size_type n = path.size();
if (n > 0 && path[n - 1] == '/')
#if POCO_OS == POCO_OS_MAC_OS_X
path.append("Library/Caches/");
#else
path.append(".cache/");
#endif
path.append("Library/Caches/");
return path;
#endif
}
std::string PathImpl::tempHomeImpl()
{
#if defined(POCO_VXWORKS)
return PathImpl::tempImpl();
#else
std::string path = PathImpl::homeImpl();
std::string path;
if (EnvironmentImpl::hasImpl("XDG_CACHE_HOME"))
path = EnvironmentImpl::getImpl("XDG_CACHE_HOME");
if (!path.empty())
return path;
path = PathImpl::homeImpl();
std::string::size_type n = path.size();
if (n > 0 && path[n - 1] == '/')
#if POCO_OS == POCO_OS_MAC_OS_X
path.append("Library/Caches/");
#else
path.append(".local/tmp/");
#endif
if (n > 0 && path[n - 1] == '/')
path.append(".cache/");
return path;
#endif

View File

@ -124,12 +124,6 @@ std::string PathImpl::cacheHomeImpl()
}
std::string PathImpl::tempHomeImpl()
{
return tempImpl();
}
std::string PathImpl::tempImpl()
{
char buffer[MAX_PATH];

View File

@ -134,12 +134,6 @@ std::string PathImpl::cacheHomeImpl()
}
std::string PathImpl::tempHomeImpl()
{
return tempImpl();
}
std::string PathImpl::tempImpl()
{
Buffer<wchar_t> buffer(MAX_PATH_LEN);

View File

@ -56,12 +56,6 @@ std::string PathImpl::cacheHomeImpl()
}
std::string PathImpl::tempHomeImpl()
{
return tempImpl();
}
std::string PathImpl::configImpl()
{
return("\\");

View File

@ -44,7 +44,6 @@ class Util_API SystemConfiguration: public AbstractConfiguration
/// - system.configHomeDir: the base directory relative to which user specific configuration files should be stored
/// - system.cacheHomeDir: the base directory relative to which user specific non-essential data files should be stored
/// - system.dataHomeDir: the base directory relative to which user specific data files should be stored
/// - system.tempHomeDir: the base directory relative to which user-specific temporary files and other file objects should be placed
/// - system.tempDir: the system's temporary directory
/// - system.configDir: the system's configuration directory
/// - system.dateTime: the current UTC date and time, formatted in ISO 8601 format.
@ -84,7 +83,6 @@ private:
static const std::string CONFIGHOMEDIR;
static const std::string CACHEHOMEDIR;
static const std::string DATAHOMEDIR;
static const std::string TEMPHOMEDIR;
static const std::string TEMPDIR;
static const std::string CONFIGDIR;
static const std::string DATETIME;

View File

@ -170,7 +170,6 @@ void Application::init()
_pConfig->setString("application.dir", appPath.parent().toString());
_pConfig->setString("application.configDir", Path::configHome() + appPath.getBaseName() + Path::separator());
_pConfig->setString("application.cacheDir", Path::cacheHome() + appPath.getBaseName() + Path::separator());
_pConfig->setString("application.tempDir", Path::tempHome() + appPath.getBaseName() + Path::separator());
_pConfig->setString("application.dataDir", Path::dataHome() + appPath.getBaseName() + Path::separator());
processOptions();
}

View File

@ -46,7 +46,6 @@ const std::string SystemConfiguration::HOMEDIR = "system.homeDir";
const std::string SystemConfiguration::CONFIGHOMEDIR = "system.configHomeDir";
const std::string SystemConfiguration::CACHEHOMEDIR = "system.cacheHomeDir";
const std::string SystemConfiguration::DATAHOMEDIR = "system.dataHomeDir";
const std::string SystemConfiguration::TEMPHOMEDIR = "system.tempHomeDir";
const std::string SystemConfiguration::TEMPDIR = "system.tempDir";
const std::string SystemConfiguration::CONFIGDIR = "system.configDir";
const std::string SystemConfiguration::DATETIME = "system.dateTime";
@ -125,10 +124,6 @@ bool SystemConfiguration::getRaw(const std::string& key, std::string& value) con
{
value = Path::dataHome();
}
else if (key == TEMPHOMEDIR)
{
value = Path::tempHome();
}
else if (key == TEMPDIR)
{
value = Path::temp();
@ -181,7 +176,6 @@ void SystemConfiguration::enumerate(const std::string& key, Keys& range) const
range.push_back("configHomeDir");
range.push_back("cacheHomeDir");
range.push_back("dataHomeDir");
range.push_back("tempHomeDir");
range.push_back("tempDir");
range.push_back("configDir");
range.push_back("dateTime");

View File

@ -99,7 +99,6 @@ void SystemConfigurationTest::testKeys()
assert (std::find(keys.begin(), keys.end(), "configHomeDir") != keys.end());
assert (std::find(keys.begin(), keys.end(), "cacheHomeDir") != keys.end());
assert (std::find(keys.begin(), keys.end(), "dataHomeDir") != keys.end());
assert (std::find(keys.begin(), keys.end(), "tempHomeDir") != keys.end());
assert (std::find(keys.begin(), keys.end(), "tempDir") != keys.end());
assert (std::find(keys.begin(), keys.end(), "configDir") != keys.end());
assert (std::find(keys.begin(), keys.end(), "dateTime") != keys.end());