Files

64 lines
1.6 KiB
C++
Raw Permalink Normal View History

#include "Runtime/ConsoleVariables/FileStoreManager.hpp"
2019-09-04 17:22:05 -04:00
#include "Runtime/CBasics.hpp"
2019-09-04 17:22:05 -04:00
#include <logvisor/logvisor.hpp>
#if _WIN32
#include <nowide/convert.hpp>
#endif
2019-09-04 17:22:05 -04:00
2015-11-14 00:48:31 -08:00
#if _WIN32
#include <ShlObj.h>
#endif
2015-11-12 16:12:09 -10:00
2017-12-05 17:22:31 -10:00
#if WINDOWS_STORE
using namespace Windows::Storage;
#endif
namespace metaforce {
2016-03-04 13:02:44 -10:00
static logvisor::Module Log("FileStoreManager");
2015-11-12 16:12:09 -10:00
2021-06-30 14:20:45 -04:00
FileStoreManager::FileStoreManager(std::string_view domain) : m_domain(domain) {
2015-11-12 16:12:09 -10:00
#if _WIN32
2017-12-05 17:22:31 -10:00
#if !WINDOWS_STORE
2018-12-07 19:18:42 -10:00
WCHAR home[MAX_PATH];
if (!SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_PROFILE, NULL, 0, home)))
2021-06-30 14:20:45 -04:00
Log.report(logvisor::Fatal, FMT_STRING("unable to locate profile for file store"));
2015-11-14 00:48:31 -08:00
2021-06-30 14:20:45 -04:00
std::string path = nowide::narrow(home);
2017-12-05 17:22:31 -10:00
#else
2018-12-07 19:18:42 -10:00
StorageFolder ^ cacheFolder = ApplicationData::Current->LocalCacheFolder;
2021-06-30 14:20:45 -04:00
std::string path(cacheFolder->Path->Data());
2017-12-05 17:22:31 -10:00
#endif
2021-06-30 14:20:45 -04:00
path += "/.heclrun";
2015-11-14 00:48:31 -08:00
CBasics::MakeDir(path.c_str());
2021-06-30 14:20:45 -04:00
path += '/';
2018-12-07 19:18:42 -10:00
path += domain.data();
2015-11-14 00:48:31 -08:00
CBasics::MakeDir(path.c_str());
2018-12-07 19:18:42 -10:00
m_storeRoot = path;
2015-11-12 16:12:09 -10:00
#else
const char* xdg_data_home = getenv("XDG_DATA_HOME");
std::string path;
if (xdg_data_home) {
if (xdg_data_home[0] != '/')
2020-04-11 12:48:11 -10:00
Log.report(logvisor::Fatal, FMT_STRING("invalid $XDG_DATA_HOME for file store (must be absolute)"));
path = xdg_data_home;
} else {
const char* home = getenv("HOME");
if (!home)
2020-04-11 12:48:11 -10:00
Log.report(logvisor::Fatal, FMT_STRING("unable to locate $HOME for file store"));
path = home;
2020-03-03 16:52:57 -08:00
path += "/.local/share";
}
2021-01-06 20:46:56 -05:00
path += "/hecl/";
2018-12-07 19:18:42 -10:00
path += domain.data();
if (CBasics::RecursiveMakeDir(path.c_str()) != 0)
2020-04-11 12:48:11 -10:00
Log.report(logvisor::Fatal, FMT_STRING("unable to mkdir at {}"), path);
2018-12-07 19:18:42 -10:00
m_storeRoot = path;
2015-11-12 16:12:09 -10:00
#endif
}
2018-12-07 19:18:42 -10:00
} // namespace hecl::Runtime