Use XDG-compliant configuration directory (APPDATA on Windows)

This commit is contained in:
Adam Honse 2020-11-04 23:24:26 -06:00
parent 7b54787dd7
commit f7d187f5b2
4 changed files with 49 additions and 9 deletions

View file

@ -1,4 +1,5 @@
#include "ProfileManager.h"
#include "ResourceManager.h"
#include "RGBController_Dummy.h"
#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
#include <experimental/filesystem>
@ -8,8 +9,9 @@
namespace fs = std::experimental::filesystem;
ProfileManager::ProfileManager(std::vector<RGBController *>& control) : controllers(control)
ProfileManager::ProfileManager(std::vector<RGBController *>& control, std::string config_dir) : controllers(control)
{
configuration_directory = config_dir;
UpdateProfileList();
}
@ -28,7 +30,7 @@ bool ProfileManager::SaveProfile(std::string profile_name)
/*---------------------------------------------------------*\
| Open an output file in binary mode |
\*---------------------------------------------------------*/
std::ofstream controller_file(profile_name, std::ios::out | std::ios::binary);
std::ofstream controller_file(configuration_directory + profile_name, std::ios::out | std::ios::binary);
/*---------------------------------------------------------*\
| Write header |
@ -90,7 +92,7 @@ std::vector<RGBController*> ProfileManager::LoadProfileToList
unsigned int controller_offset = 0;
bool ret_val = false;
std::string filename = profile_name;
std::string filename = configuration_directory + profile_name;
/*---------------------------------------------------------*\
| Open input file in binary mode |
@ -259,7 +261,7 @@ bool ProfileManager::LoadProfileWithOptions
std::vector<bool> temp_controller_used;
bool ret_val = false;
std::string filename = profile_name;
std::string filename = configuration_directory + profile_name;
/*---------------------------------------------------------*\
| Open input file in binary mode |
@ -313,7 +315,7 @@ void ProfileManager::UpdateProfileList()
/*---------------------------------------------------------*\
| Load profiles by looking for .orp files in current dir |
\*---------------------------------------------------------*/
for(const auto & entry : fs::directory_iterator("."))
for(const auto & entry : fs::directory_iterator(configuration_directory))
{
std::string filename = entry.path().filename().string();

View file

@ -5,7 +5,7 @@
class ProfileManager
{
public:
ProfileManager(std::vector<RGBController *>& control);
ProfileManager(std::vector<RGBController *>& control, std::string config_dir);
~ProfileManager();
bool SaveProfile(std::string profile_name);
@ -33,6 +33,8 @@ protected:
std::vector<RGBController *>& controllers;
private:
std::string configuration_directory;
void UpdateProfileList();
bool LoadProfileWithOptions
(

View file

@ -12,6 +12,7 @@
#include "ResourceManager.h"
#include "ProfileManager.h"
#include <stdlib.h>
#include <string>
std::unique_ptr<ResourceManager> ResourceManager::instance;
@ -46,14 +47,14 @@ ResourceManager::ResourceManager()
/*-------------------------------------------------------------------------*\
| Load sizes list from file |
\*-------------------------------------------------------------------------*/
profile_manager = new ProfileManager(rgb_controllers);
profile_manager = new ProfileManager(rgb_controllers, GetConfigurationDirectory());
rgb_controllers_sizes = profile_manager->LoadProfileToList("sizes.ors");
/*-------------------------------------------------------------------------*\
| Load settings from file |
\*-------------------------------------------------------------------------*/
settings_manager = new SettingsManager();
settings_manager->LoadSettings("OpenRGB.json");
settings_manager->LoadSettings(GetConfigurationDirectory() + "OpenRGB.json");
}
ResourceManager::~ResourceManager()
@ -184,6 +185,39 @@ void ResourceManager::DetectionProgressChanged()
DetectionProgressMutex.unlock();
}
std::string ResourceManager::GetConfigurationDirectory()
{
std::string config_dir = "";
const char* xdg_config_home = getenv("XDG_CONFIG_HOME");
const char* appdata = getenv("APPDATA");
/*-----------------------------------------------------*\
| Check both XDG_CONFIG_HOME and APPDATA environment |
| variables. If neither exist, use current directory |
\*-----------------------------------------------------*/
if(xdg_config_home != NULL)
{
config_dir = xdg_config_home;
}
else
{
if(appdata != NULL)
{
config_dir = appdata;
}
}
/*-----------------------------------------------------*\
| If a configuration directory was found, append OpenRGB|
\*-----------------------------------------------------*/
if(config_dir != "")
{
config_dir = config_dir + "/OpenRGB/";
}
return(config_dir);
}
NetworkServer* ResourceManager::GetServer()
{
return(server);

View file

@ -54,7 +54,9 @@ public:
unsigned int GetDetectionPercent();
const char* GetDetectionString();
std::string GetConfigurationDirectory();
std::vector<NetworkClient*>& GetClients();
NetworkServer* GetServer();