Skip to content

Commit

Permalink
Abstract obtaining aliases from settings
Browse files Browse the repository at this point in the history
Also got rid of a goto
  • Loading branch information
SmallJoker authored and nauta-turbidus committed Oct 7, 2024
1 parent 927f030 commit c051162
Showing 1 changed file with 17 additions and 16 deletions.
33 changes: 17 additions & 16 deletions src/content/subgames.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,18 @@ std::string normalizeGameId(const std::string_view id)
return std::string(shorter.empty() ? id : shorter);
}

std::unordered_set<std::string> getAliasesFromSettings(Settings &conf)
{
std::unordered_set<std::string> aliases;
if (!conf.exists("aliases"))
return aliases;

std::vector<std::string> aliases_raw = str_split(conf.get("aliases"), ',');
for (const std::string &alias : aliases_raw)
aliases.insert(normalizeGameId(trim(alias)));
return aliases;
}

}


Expand Down Expand Up @@ -140,12 +152,7 @@ static SubgameSpec getSubgameSpec(const std::string &game_id,
if (conf.exists("last_mod"))
last_mod = conf.get("last_mod");

std::unordered_set<std::string> aliases;
if (conf.exists("aliases")) {
std::vector<std::string> aliases_raw = str_split(conf.get("aliases"), ',');
for (const std::string &alias : aliases_raw)
aliases.insert(normalizeGameId(trim(alias)));
}
std::unordered_set<std::string> aliases = getAliasesFromSettings(conf);

SubgameSpec spec(game_id, game_path, gamemods_path, mods_paths, game_title,
menuicon_path, game_author, game_release, first_mod, last_mod, aliases);
Expand Down Expand Up @@ -223,19 +230,13 @@ SubgameSpec findSubgame(const std::string &id)
const std::string conf_path = it->second.path + DIR_DELIM + "game.conf";
Settings conf;
conf.readConfigFile(conf_path.c_str());
if (conf.exists("aliases")) {
std::vector<std::string> aliases = str_split(conf.get("aliases"), ',');
for (const std::string &alias_raw : aliases) {
std::string alias = normalizeGameId(trim(alias_raw));
if (alias == idv) {
found = it;
goto break_out_of_loops;
}
}
std::unordered_set<std::string> aliases = getAliasesFromSettings(conf);
if (aliases.find(idv) != aliases.end()) {
found = it;
break;
}
}
}
break_out_of_loops:

if (found == gamepaths.end()) // Failed to find the game taking aliases into account
return SubgameSpec();
Expand Down

0 comments on commit c051162

Please sign in to comment.