mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2026-04-26 12:21:39 +00:00
Paths adjustments
This commit is contained in:
parent
49f79d61d3
commit
e4d145683d
4 changed files with 65 additions and 44 deletions
|
|
@ -180,6 +180,7 @@ set(UNLEASHED_RECOMP_USER_CXX_SOURCES
|
||||||
"user/achievement_manager.cpp"
|
"user/achievement_manager.cpp"
|
||||||
"user/config.cpp"
|
"user/config.cpp"
|
||||||
"user/registry.cpp"
|
"user/registry.cpp"
|
||||||
|
"user/paths.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(UNLEASHED_RECOMP_MOD_CXX_SOURCES
|
set(UNLEASHED_RECOMP_MOD_CXX_SOURCES
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,14 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
os::logger::Init();
|
os::logger::Init();
|
||||||
|
|
||||||
|
Registry::Load();
|
||||||
|
|
||||||
|
if (!Registry::RootDirectoryPath.empty())
|
||||||
|
{
|
||||||
|
if (!os::process::SetWorkingDirectory(std::filesystem::path(Registry::RootDirectoryPath)))
|
||||||
|
LOGFN_ERROR("Failed to set working directory: \"{}\"", Registry::RootDirectoryPath.string());
|
||||||
|
}
|
||||||
|
|
||||||
bool forceInstaller = false;
|
bool forceInstaller = false;
|
||||||
bool forceDLCInstaller = false;
|
bool forceDLCInstaller = false;
|
||||||
const char *sdlVideoDriver = nullptr;
|
const char *sdlVideoDriver = nullptr;
|
||||||
|
|
@ -171,13 +179,6 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
Config::Load();
|
Config::Load();
|
||||||
Registry::Load();
|
|
||||||
|
|
||||||
if (!Registry::RootDirectoryPath.empty())
|
|
||||||
{
|
|
||||||
if (!os::process::SetWorkingDirectory(std::filesystem::path(Registry::RootDirectoryPath)))
|
|
||||||
LOGFN_ERROR("Failed to set working directory: \"{}\"", Registry::RootDirectoryPath.string());
|
|
||||||
}
|
|
||||||
|
|
||||||
HostStartup();
|
HostStartup();
|
||||||
|
|
||||||
|
|
|
||||||
52
UnleashedRecomp/user/paths.cpp
Normal file
52
UnleashedRecomp/user/paths.cpp
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#include "paths.h"
|
||||||
|
#include <os/process.h>
|
||||||
|
|
||||||
|
std::filesystem::path g_executableRoot = os::process::GetExecutablePath().remove_filename();
|
||||||
|
std::filesystem::path g_userPath = BuildUserPath();
|
||||||
|
|
||||||
|
bool CheckPortable()
|
||||||
|
{
|
||||||
|
return std::filesystem::exists(g_executableRoot / "/portable.txt");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::filesystem::path BuildUserPath()
|
||||||
|
{
|
||||||
|
if (CheckPortable())
|
||||||
|
return g_executableRoot;
|
||||||
|
|
||||||
|
std::filesystem::path userPath;
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
PWSTR knownPath = NULL;
|
||||||
|
if (SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, NULL, &knownPath) == S_OK)
|
||||||
|
userPath = std::filesystem::path{ knownPath } / USER_DIRECTORY;
|
||||||
|
|
||||||
|
CoTaskMemFree(knownPath);
|
||||||
|
#elif defined(__linux__)
|
||||||
|
const char* homeDir = getenv("HOME");
|
||||||
|
if (homeDir == nullptr)
|
||||||
|
{
|
||||||
|
homeDir = getpwuid(getuid())->pw_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (homeDir != nullptr)
|
||||||
|
{
|
||||||
|
// Prefer to store in the .config directory if it exists. Use the home directory otherwise.
|
||||||
|
std::filesystem::path homePath = homeDir;
|
||||||
|
std::filesystem::path configPath = homePath / ".config";
|
||||||
|
if (std::filesystem::exists(configPath))
|
||||||
|
userPath = configPath / USER_DIRECTORY;
|
||||||
|
else
|
||||||
|
userPath = homePath / ("." USER_DIRECTORY);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static_assert(false, "GetUserPath() not implemented for this platform.");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return userPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::filesystem::path& GetUserPath()
|
||||||
|
{
|
||||||
|
return g_userPath;
|
||||||
|
}
|
||||||
|
|
@ -13,49 +13,16 @@ inline std::filesystem::path GetGamePath()
|
||||||
return GAME_INSTALL_DIRECTORY;
|
return GAME_INSTALL_DIRECTORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::filesystem::path GetUserPath()
|
bool CheckPortable();
|
||||||
{
|
std::filesystem::path BuildUserPath();
|
||||||
if (std::filesystem::exists(GAME_INSTALL_DIRECTORY "/portable.txt"))
|
const std::filesystem::path& GetUserPath();
|
||||||
return GAME_INSTALL_DIRECTORY;
|
|
||||||
|
|
||||||
std::filesystem::path userPath;
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
PWSTR knownPath = NULL;
|
|
||||||
if (SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, NULL, &knownPath) == S_OK)
|
|
||||||
userPath = std::filesystem::path{ knownPath } / USER_DIRECTORY;
|
|
||||||
|
|
||||||
CoTaskMemFree(knownPath);
|
|
||||||
#elif defined(__linux__)
|
|
||||||
const char *homeDir = getenv("HOME");
|
|
||||||
if (homeDir == nullptr)
|
|
||||||
{
|
|
||||||
homeDir = getpwuid(getuid())->pw_dir;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (homeDir != nullptr)
|
|
||||||
{
|
|
||||||
// Prefer to store in the .config directory if it exists. Use the home directory otherwise.
|
|
||||||
std::filesystem::path homePath = homeDir;
|
|
||||||
std::filesystem::path configPath = homePath / ".config";
|
|
||||||
if (std::filesystem::exists(configPath))
|
|
||||||
userPath = configPath / USER_DIRECTORY;
|
|
||||||
else
|
|
||||||
userPath = homePath / ("." USER_DIRECTORY);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static_assert(false, "GetUserPath() not implemented for this platform.");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return userPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline std::filesystem::path GetSavePath(bool checkForMods)
|
inline std::filesystem::path GetSavePath(bool checkForMods)
|
||||||
{
|
{
|
||||||
if (checkForMods && !ModLoader::s_saveFilePath.empty())
|
if (checkForMods && !ModLoader::s_saveFilePath.empty())
|
||||||
return ModLoader::s_saveFilePath.parent_path();
|
return ModLoader::s_saveFilePath.parent_path();
|
||||||
else
|
else
|
||||||
return GetUserPath() / "save";
|
return BuildUserPath() / "save";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returned file name may not necessarily be
|
// Returned file name may not necessarily be
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue