mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-03-06 14:27:43 +00:00
Added support for a dedicated es_systems_sorting.xml file to change systems sorting without having to modify es_systems.xml
This commit is contained in:
parent
a22605863b
commit
5ca8009038
|
@ -734,14 +734,8 @@ bool SystemData::loadConfig()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sortName == "") {
|
if (sortName == "")
|
||||||
sortName = fullname;
|
sortName = fullname;
|
||||||
}
|
|
||||||
else {
|
|
||||||
LOG(LogDebug) << "SystemData::loadConfig(): System \"" << name
|
|
||||||
<< "\" has a <systemsortname> tag set, sorting as \"" << sortName
|
|
||||||
<< "\" instead of \"" << fullname << "\"";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert path to generic directory seperators.
|
// Convert path to generic directory seperators.
|
||||||
path = Utils::FileSystem::getGenericPath(path);
|
path = Utils::FileSystem::getGenericPath(path);
|
||||||
|
@ -798,6 +792,8 @@ bool SystemData::loadConfig()
|
||||||
Window::getInstance()->renderSplashScreen(Window::SplashScreenState::SCANNING, 1.0f);
|
Window::getInstance()->renderSplashScreen(Window::SplashScreenState::SCANNING, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadSortingConfig();
|
||||||
|
|
||||||
LOG(LogInfo) << "Parsed configuration for " << systemCount << " system"
|
LOG(LogInfo) << "Parsed configuration for " << systemCount << " system"
|
||||||
<< (systemCount == 1 ? ", loaded " : "s, loaded ") << sSystemVector.size()
|
<< (systemCount == 1 ? ", loaded " : "s, loaded ") << sSystemVector.size()
|
||||||
<< " system" << (sSystemVector.size() == 1 ? "" : "s")
|
<< " system" << (sSystemVector.size() == 1 ? "" : "s")
|
||||||
|
@ -816,6 +812,69 @@ bool SystemData::loadConfig()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SystemData::loadSortingConfig()
|
||||||
|
{
|
||||||
|
std::vector<std::string> paths;
|
||||||
|
std::string filePath {ResourceManager::getInstance().getResourcePath(
|
||||||
|
":/systems/sorting/es_systems_sorting.xml", false)};
|
||||||
|
|
||||||
|
if (Utils::FileSystem::exists(filePath))
|
||||||
|
paths.emplace_back(filePath);
|
||||||
|
|
||||||
|
filePath = Utils::FileSystem::getHomePath() + "/.emulationstation/custom_systems" +
|
||||||
|
"/es_systems_sorting.xml";
|
||||||
|
|
||||||
|
if (Utils::FileSystem::exists(filePath))
|
||||||
|
paths.emplace_back(filePath);
|
||||||
|
|
||||||
|
if (paths.empty()) {
|
||||||
|
LOG(LogDebug) << "No systems sorting file found";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& path : paths) {
|
||||||
|
LOG(LogInfo) << "Parsing systems sorting file \"" << path << "\"...";
|
||||||
|
|
||||||
|
pugi::xml_document doc;
|
||||||
|
#if defined(_WIN64)
|
||||||
|
const pugi::xml_parse_result& res {
|
||||||
|
doc.load_file(Utils::String::stringToWideString(path).c_str())};
|
||||||
|
#else
|
||||||
|
const pugi::xml_parse_result& res {doc.load_file(path.c_str())};
|
||||||
|
#endif
|
||||||
|
if (!res) {
|
||||||
|
LOG(LogError) << "Couldn't parse es_systems_sorting.xml: " << res.description();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const pugi::xml_node& systemList {doc.child("systemList")};
|
||||||
|
if (!systemList) {
|
||||||
|
LOG(LogError) << "es_systems_sorting.xml is missing the <systemList> tag";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string systemName;
|
||||||
|
std::string sortName;
|
||||||
|
|
||||||
|
for (pugi::xml_node system {systemList.child("system")}; system;
|
||||||
|
system = system.next_sibling("system")) {
|
||||||
|
sortName = system.child("systemsortname").text().get();
|
||||||
|
|
||||||
|
if (sortName == "")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
systemName = Utils::String::replace(system.child("name").text().get(), "\n", "");
|
||||||
|
|
||||||
|
auto systemEntry = std::find_if(
|
||||||
|
sSystemVector.begin(), sSystemVector.end(),
|
||||||
|
[systemName](SystemData* system) { return system->getName() == systemName; });
|
||||||
|
|
||||||
|
if (systemEntry != SystemData::sSystemVector.end())
|
||||||
|
(*systemEntry)->mSortName = sortName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::string SystemData::getLaunchCommandFromLabel(const std::string& label)
|
std::string SystemData::getLaunchCommandFromLabel(const std::string& label)
|
||||||
{
|
{
|
||||||
auto commandIter = std::find_if(
|
auto commandIter = std::find_if(
|
||||||
|
|
|
@ -110,6 +110,8 @@ public:
|
||||||
// Loads the systems configuration file(s) at getConfigPath() and creates the systems.
|
// Loads the systems configuration file(s) at getConfigPath() and creates the systems.
|
||||||
static bool loadConfig();
|
static bool loadConfig();
|
||||||
static std::vector<std::string> getConfigPath(bool legacyWarning);
|
static std::vector<std::string> getConfigPath(bool legacyWarning);
|
||||||
|
// Parses an optional es_systems_sorting.xml file.
|
||||||
|
static void loadSortingConfig();
|
||||||
|
|
||||||
// Generates the game system directories and information files based on es_systems.xml.
|
// Generates the game system directories and information files based on es_systems.xml.
|
||||||
static bool createSystemDirectories();
|
static bool createSystemDirectories();
|
||||||
|
|
Loading…
Reference in a new issue