Add gameid aliases

This commit is contained in:
Nauta Turbidus 2024-04-15 00:41:06 +02:00
parent eb432d3da0
commit b237a532e1
1 changed files with 46 additions and 4 deletions

View File

@ -134,8 +134,50 @@ SubgameSpec findSubgame(const std::string &id)
} }
} }
if (game_path.empty()) std::string idv = id;
return SubgameSpec();
// Try to find aliased game
if (game_path.empty()) {
std::vector<GameFindPath> gamespaths;
gamespaths.emplace_back(share + DIR_DELIM + "games", false);
gamespaths.emplace_back(user + DIR_DELIM + "games", true);
Strfnd search_paths(getSubgamePathEnv());
while (!search_paths.at_end())
gamespaths.emplace_back(search_paths.next(PATH_DELIM), false);
for (const GameFindPath &gamespath : gamespaths) {
const std::string &path = gamespath.path;
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(path);
for (const fs::DirListNode &dln : dirlist) {
if (!dln.dir)
continue;
// If configuration file is not found or broken, ignore game
Settings conf;
std::string conf_path = path + DIR_DELIM + dln.name +
DIR_DELIM + "game.conf";
if (!conf.readConfigFile(conf_path.c_str()))
continue;
if (conf.exists("gameid_alias")) {
std::string alias = conf.get("gameid_alias");
if (alias == id) {
idv = dln.name;
game_path = path + DIR_DELIM + dln.name;
user_game = gamespath.user_specific;
break;
}
}
}
if (!game_path.empty())
break;
}
if (game_path.empty())
return SubgameSpec();
}
std::string gamemod_path = game_path + DIR_DELIM + "mods"; std::string gamemod_path = game_path + DIR_DELIM + "mods";
@ -160,7 +202,7 @@ SubgameSpec findSubgame(const std::string &id)
else if (conf.exists("name")) else if (conf.exists("name"))
game_title = conf.get("name"); game_title = conf.get("name");
else else
game_title = id; game_title = idv;
std::string game_author; std::string game_author;
if (conf.exists("author")) if (conf.exists("author"))
@ -176,7 +218,7 @@ SubgameSpec findSubgame(const std::string &id)
game_path + DIR_DELIM + "menu" + DIR_DELIM + "icon.png"); game_path + DIR_DELIM + "menu" + DIR_DELIM + "icon.png");
#endif #endif
SubgameSpec spec(id, game_path, gamemod_path, mods_paths, game_title, SubgameSpec spec(idv, game_path, gamemod_path, mods_paths, game_title,
menuicon_path, game_author, game_release); menuicon_path, game_author, game_release);
if (conf.exists("name") && !conf.exists("title")) if (conf.exists("name") && !conf.exists("title"))