Change the way AppConfig base path is initialized.

This commit is contained in:
Jean-Philip Desjardins 2023-08-30 17:35:10 -04:00
parent 0679518dec
commit b4f635bdd2
11 changed files with 37 additions and 43 deletions

View file

@ -1,47 +1,33 @@
#include "AppConfig.h" #include "AppConfig.h"
#include "PathUtils.h" #include "PathUtils.h"
#include <iostream>
#include <filesystem> // For file system operations
#define CONFIG_FILENAME ("config.xml")
#define PORTABLE_BASE_DATA_PATH ("Play Data Files")
#define BASE_DATA_PATH ("Play Data Files") #define BASE_DATA_PATH ("Play Data Files")
#define CONFIG_FILENAME ("config.xml")
CAppConfig::CAppConfig() CAppConfig::CAppConfig()
: CConfig(BuildConfigPath()) : CConfig(BuildConfigPath())
{ {
} }
Framework::CConfig::PathType CAppConfig::GetBasePath() Framework::CConfig::PathType CAppConfig::BuildConfigPath()
{ {
// Check for the presence of the "portable.txt" file return GetBasePath() / CONFIG_FILENAME;
if(std::filesystem::exists("portable.txt")) }
CAppConfigBasePath::CAppConfigBasePath()
{
if(fs::exists("portable.txt"))
{ {
//delete "read content portable.txt" m_basePath = BASE_DATA_PATH;
// If "portable.txt" is present, simply use the path specified in PORTABLE_BASE_DATA_PATH
auto basePath = PORTABLE_BASE_DATA_PATH;
// Create the "Play Data Files" directory if it doesn't already exist
std::filesystem::create_directories(basePath);
return basePath; // Return the base path without the complete path
} }
else else
{ {
// If "portable.txt" is absent, use the original code for the base directory path m_basePath = Framework::PathUtils::GetPersonalDataPath() / BASE_DATA_PATH;
auto result = Framework::PathUtils::GetPersonalDataPath() / BASE_DATA_PATH;
// Create the "Play Data Files" directory if it doesn't already exist
Framework::PathUtils::EnsurePathExists(result);
return result;
} }
Framework::PathUtils::EnsurePathExists(m_basePath);
} }
Framework::CConfig::PathType CAppConfig::BuildConfigPath() fs::path CAppConfigBasePath::GetBasePath() const
{ {
auto basePath(GetBasePath()); return m_basePath;
// "config.xml" is located in the directory of the base path
return basePath / CONFIG_FILENAME;
} }

View file

@ -3,14 +3,22 @@
#include "Config.h" #include "Config.h"
#include "Singleton.h" #include "Singleton.h"
class CAppConfig : public Framework::CConfig, public CSingleton<CAppConfig> class CAppConfigBasePath
{
public:
CAppConfigBasePath();
fs::path GetBasePath() const;
private:
fs::path m_basePath;
};
class CAppConfig : public CAppConfigBasePath, public Framework::CConfig, public CSingleton<CAppConfig>
{ {
public: public:
CAppConfig(); CAppConfig();
virtual ~CAppConfig() = default; virtual ~CAppConfig() = default;
static CConfig::PathType GetBasePath();
private: private:
static CConfig::PathType BuildConfigPath(); CConfig::PathType BuildConfigPath();
}; };

View file

@ -31,14 +31,14 @@ std::unique_ptr<CInputConfig> CInputConfig::LoadProfile(std::string name)
Framework::CConfig::PathType CInputConfig::GetProfilePath() Framework::CConfig::PathType CInputConfig::GetProfilePath()
{ {
auto profile_path = CAppConfig::GetBasePath() / PROFILE_PATH; auto profile_path = CAppConfig::GetInstance().GetBasePath() / PROFILE_PATH;
Framework::PathUtils::EnsurePathExists(profile_path); Framework::PathUtils::EnsurePathExists(profile_path);
return profile_path; return profile_path;
} }
Framework::CConfig::PathType CInputConfig::GetProfile(std::string name) Framework::CConfig::PathType CInputConfig::GetProfile(std::string name)
{ {
auto profile_path = CAppConfig::GetBasePath() / PROFILE_PATH; auto profile_path = CAppConfig::GetInstance().GetBasePath() / PROFILE_PATH;
Framework::PathUtils::EnsurePathExists(profile_path); Framework::PathUtils::EnsurePathExists(profile_path);
profile_path /= name; profile_path /= name;
profile_path.replace_extension(".xml"); profile_path.replace_extension(".xml");

View file

@ -12,7 +12,7 @@
CLog::CLog() CLog::CLog()
{ {
#ifndef DISABLE_LOGGING #ifndef DISABLE_LOGGING
m_logBasePath = CAppConfig::GetBasePath() / LOG_PATH; m_logBasePath = CAppConfig::GetInstance().GetBasePath() / LOG_PATH;
Framework::PathUtils::EnsurePathExists(m_logBasePath); Framework::PathUtils::EnsurePathExists(m_logBasePath);
CAppConfig::GetInstance().RegisterPreferenceBoolean(PREF_LOG_SHOWPRINTS, false); CAppConfig::GetInstance().RegisterPreferenceBoolean(PREF_LOG_SHOWPRINTS, false);
m_showPrints = CAppConfig::GetInstance().GetPreferenceBoolean(PREF_LOG_SHOWPRINTS); m_showPrints = CAppConfig::GetInstance().GetPreferenceBoolean(PREF_LOG_SHOWPRINTS);

View file

@ -75,7 +75,7 @@ CPS2VM::CPS2VM()
auto setting = basicDirectorySetting.first; auto setting = basicDirectorySetting.first;
auto path = basicDirectorySetting.second; auto path = basicDirectorySetting.second;
auto absolutePath = CAppConfig::GetBasePath() / path; auto absolutePath = CAppConfig::GetInstance().GetBasePath() / path;
Framework::PathUtils::EnsurePathExists(absolutePath); Framework::PathUtils::EnsurePathExists(absolutePath);
CAppConfig::GetInstance().RegisterPreferencePath(setting, absolutePath); CAppConfig::GetInstance().RegisterPreferencePath(setting, absolutePath);
@ -287,7 +287,7 @@ void CPS2VM::Destroy()
fs::path CPS2VM::GetStateDirectoryPath() fs::path CPS2VM::GetStateDirectoryPath()
{ {
return CAppConfig::GetBasePath() / fs::path("states/"); return CAppConfig::GetInstance().GetBasePath() / fs::path("states/");
} }
fs::path CPS2VM::GenerateStatePath(unsigned int slot) const fs::path CPS2VM::GenerateStatePath(unsigned int slot) const

View file

@ -33,7 +33,7 @@ CScreenShotUtils::Connection CScreenShotUtils::TriggerGetScreenshot(CPS2VM* virt
fs::path CScreenShotUtils::GetScreenShotDirectoryPath() fs::path CScreenShotUtils::GetScreenShotDirectoryPath()
{ {
auto screenshotpath(CAppConfig::GetBasePath() / fs::path("screenshots")); auto screenshotpath(CAppConfig::GetInstance().GetBasePath() / fs::path("screenshots"));
Framework::PathUtils::EnsurePathExists(screenshotpath); Framework::PathUtils::EnsurePathExists(screenshotpath);
return screenshotpath; return screenshotpath;
} }

View file

@ -775,7 +775,7 @@ void CSubSystem::FlushInstructionCache()
void CSubSystem::LoadBIOS() void CSubSystem::LoadBIOS()
{ {
auto biosPath = CAppConfig::GetBasePath() / "bios/scph10000.bin"; auto biosPath = CAppConfig::GetInstance().GetBasePath() / "bios/scph10000.bin";
auto biosStream = Framework::CreateInputStdStream(biosPath.native()); auto biosStream = Framework::CreateInputStdStream(biosPath.native());
biosStream.Read(m_bios, PS2::EE_BIOS_SIZE); biosStream.Read(m_bios, PS2::EE_BIOS_SIZE);
} }

View file

@ -109,8 +109,8 @@ CIoman::CIoman(CIopBios& bios, uint8* ram)
{ {
try try
{ {
auto stdoutPath = CAppConfig::GetBasePath() / "ps2_stdout.txt"; auto stdoutPath = CAppConfig::GetInstance().GetBasePath() / "ps2_stdout.txt";
auto stderrPath = CAppConfig::GetBasePath() / "ps2_stderr.txt"; auto stderrPath = CAppConfig::GetInstance().GetBasePath() / "ps2_stderr.txt";
m_files[FID_STDOUT] = FileInfo{new Framework::CStdStream(fopen(stdoutPath.string().c_str(), "ab"))}; m_files[FID_STDOUT] = FileInfo{new Framework::CStdStream(fopen(stdoutPath.string().c_str(), "ab"))};
m_files[FID_STDERR] = FileInfo{new Framework::CStdStream(fopen(stderrPath.string().c_str(), "ab"))}; m_files[FID_STDERR] = FileInfo{new Framework::CStdStream(fopen(stderrPath.string().c_str(), "ab"))};

View file

@ -738,7 +738,7 @@ void CNamcoArcade::ProcessAcFlashCommand(const SIFCMDHEADER*, CSifMan& sifMan)
fs::path CNamcoArcade::GetArcadeSavePath() fs::path CNamcoArcade::GetArcadeSavePath()
{ {
return CAppConfig::GetBasePath() / fs::path("arcadesaves"); return CAppConfig::GetInstance().GetBasePath() / fs::path("arcadesaves");
} }
void CNamcoArcade::ProcessMemRequest(uint8* ram, uint32 infoPtr) void CNamcoArcade::ProcessMemRequest(uint8* ram, uint32 infoPtr)

View file

@ -33,7 +33,7 @@ void CoverUtils::PopulateCache(std::vector<BootablesDb::Bootable> bootables)
m_lock.lock(); m_lock.lock();
PopulatePlaceholderCover(); PopulatePlaceholderCover();
auto coverpath(CAppConfig::GetBasePath() / fs::path("covers")); auto coverpath(CAppConfig::GetInstance().GetBasePath() / fs::path("covers"));
Framework::PathUtils::EnsurePathExists(coverpath); Framework::PathUtils::EnsurePathExists(coverpath);
auto itr = CoverUtils::cache.find("PH"); auto itr = CoverUtils::cache.find("PH");

View file

@ -236,7 +236,7 @@ void FetchGameTitles()
void FetchGameCovers() void FetchGameCovers()
{ {
auto coverpath(CAppConfig::GetBasePath() / fs::path("covers")); auto coverpath(CAppConfig::GetInstance().GetBasePath() / fs::path("covers"));
Framework::PathUtils::EnsurePathExists(coverpath); Framework::PathUtils::EnsurePathExists(coverpath);
auto bootables = BootablesDb::CClient::GetInstance().GetBootables(); auto bootables = BootablesDb::CClient::GetInstance().GetBootables();