From 36ca57a54ebcbdfb2fa4374378280867a089bb91 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 1 Mar 2014 22:50:11 +0100 Subject: [PATCH] fs/StandardDirectory: add GetUserCacheDir() Move code from CreateConfiguredDatabase() and add XDG support. This implements an automatic Linux fallback for the setting "db_file" if none was specified. --- NEWS | 1 + src/db/Configured.cxx | 19 ++++--------------- src/fs/StandardDirectory.cxx | 14 ++++++++++++++ src/fs/StandardDirectory.hxx | 7 +++++++ 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/NEWS b/NEWS index 15d41715a..cb9e373bf 100644 --- a/NEWS +++ b/NEWS @@ -34,6 +34,7 @@ ver 0.19 (not yet released) - name each thread (for debugging) * configuration - allow playlist directory without music directory + - use XDG to auto-detect "music_directory" and "db_file" * new resampler option using libsoxr * install systemd unit for socket activation * Android port diff --git a/src/db/Configured.cxx b/src/db/Configured.cxx index 78be3e999..625300d75 100644 --- a/src/db/Configured.cxx +++ b/src/db/Configured.cxx @@ -23,16 +23,11 @@ #include "config/ConfigGlobal.hxx" #include "config/ConfigData.hxx" #include "config/ConfigError.hxx" +#include "fs/AllocatedPath.hxx" +#include "fs/StandardDirectory.hxx" #include "util/Error.hxx" #include "Log.hxx" -#ifdef ANDROID -#include "Main.hxx" -#include "android/Context.hxx" -#include "fs/AllocatedPath.hxx" -#include "plugins/simple/SimpleDatabasePlugin.hxx" -#endif - Database * CreateConfiguredDatabase(EventLoop &loop, DatabaseListener &listener, Error &error) @@ -57,12 +52,9 @@ CreateConfiguredDatabase(EventLoop &loop, DatabaseListener &listener, } if (param == nullptr) { -#ifdef ANDROID - /* if there is no override, use the Android cache - directory */ + /* if there is no override, use the cache directory */ - const AllocatedPath cache_dir = - context->GetCacheDir(Java::GetEnv()); + const AllocatedPath cache_dir = GetUserCacheDir(); if (cache_dir.IsNull()) return nullptr; @@ -71,9 +63,6 @@ CreateConfiguredDatabase(EventLoop &loop, DatabaseListener &listener, allocated = new config_param("database"); allocated->AddBlockParam("path", db_file.c_str(), -1); param = allocated; -#else - return nullptr; -#endif } Database *db = DatabaseGlobalInit(loop, listener, *param, diff --git a/src/fs/StandardDirectory.cxx b/src/fs/StandardDirectory.cxx index 20d66bb10..6456c0254 100644 --- a/src/fs/StandardDirectory.cxx +++ b/src/fs/StandardDirectory.cxx @@ -50,6 +50,8 @@ #ifdef ANDROID #include "java/Global.hxx" #include "android/Environment.hxx" +#include "android/Context.hxx" +#include "Main.hxx" #endif #ifndef WIN32 @@ -252,6 +254,18 @@ AllocatedPath GetUserMusicDir() #endif } +AllocatedPath +GetUserCacheDir() +{ +#ifdef USE_XDG + return GetUserDir("XDG_CACHE_DIR"); +#elif defined(ANDROID) + return context->GetCacheDir(Java::GetEnv()); +#else + return AllocatedPath::Null(); +#endif +} + #ifdef WIN32 AllocatedPath GetSystemConfigDir() diff --git a/src/fs/StandardDirectory.hxx b/src/fs/StandardDirectory.hxx index dca35b486..e3fba375a 100644 --- a/src/fs/StandardDirectory.hxx +++ b/src/fs/StandardDirectory.hxx @@ -33,6 +33,13 @@ AllocatedPath GetUserConfigDir(); */ AllocatedPath GetUserMusicDir(); +/** + * Obtains cache directory for the current user. + */ +gcc_pure +AllocatedPath +GetUserCacheDir(); + #ifdef WIN32 /**