From 4e9e230e34912d08ec0f0fc01d14ef80654c7cac Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sat, 21 May 2022 16:23:30 +0100 Subject: Deprecate game.conf name, use title instead (#12030) --- src/content/content.cpp | 7 ++++++- src/content/content.h | 7 +++++++ src/content/subgames.cpp | 46 ++++++++++++++++++++++++++++++++++++++-------- src/content/subgames.h | 10 +++++++--- 4 files changed, 58 insertions(+), 12 deletions(-) (limited to 'src/content') diff --git a/src/content/content.cpp b/src/content/content.cpp index 66ef83d42..e576943ff 100644 --- a/src/content/content.cpp +++ b/src/content/content.cpp @@ -96,7 +96,12 @@ void parseContentInfo(ContentSpec &spec) Settings conf; if (!conf_path.empty() && conf.readConfigFile(conf_path.c_str())) { - if (conf.exists("name")) + if (conf.exists("title")) + spec.title = conf.get("title"); + else if (spec.type == "game" && conf.exists("name")) + spec.title = conf.get("name"); + + if (spec.type != "game" && conf.exists("name")) spec.name = conf.get("name"); if (conf.exists("description")) diff --git a/src/content/content.h b/src/content/content.h index e246ed411..ce09a2eb9 100644 --- a/src/content/content.h +++ b/src/content/content.h @@ -27,7 +27,14 @@ struct ContentSpec std::string type; std::string author; u32 release = 0; + + /// Technical name / Id std::string name; + + /// Human-readable title + std::string title; + + /// Short description std::string desc; std::string path; }; diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index 23355990e..d0de926ef 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -17,6 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include #include "content/subgames.h" #include "porting.h" #include "filesys.h" @@ -45,6 +46,25 @@ bool getGameMinetestConfig(const std::string &game_path, Settings &conf) } + +void SubgameSpec::checkAndLog() const +{ + // Log deprecation messages + auto handling_mode = get_deprecated_handling_mode(); + if (!deprecation_msgs.empty() && handling_mode != DeprecatedHandlingMode::Ignore) { + std::ostringstream os; + os << "Game " << title << " at " << path << ":" << std::endl; + for (auto msg : deprecation_msgs) + os << "\t" << msg << std::endl; + + if (handling_mode == DeprecatedHandlingMode::Error) + throw ModError(os.str()); + else + warningstream << os.str(); + } +} + + struct GameFindPath { std::string path; @@ -121,11 +141,13 @@ SubgameSpec findSubgame(const std::string &id) Settings conf; conf.readConfigFile(conf_path.c_str()); - std::string game_name; - if (conf.exists("name")) - game_name = conf.get("name"); + std::string game_title; + if (conf.exists("title")) + game_title = conf.get("title"); + else if (conf.exists("name")) + game_title = conf.get("name"); else - game_name = id; + game_title = id; std::string game_author; if (conf.exists("author")) @@ -140,8 +162,14 @@ SubgameSpec findSubgame(const std::string &id) menuicon_path = getImagePath( game_path + DIR_DELIM + "menu" + DIR_DELIM + "icon.png"); #endif - return SubgameSpec(id, game_path, gamemod_path, mods_paths, game_name, + + SubgameSpec spec(id, game_path, gamemod_path, mods_paths, game_title, menuicon_path, game_author, game_release); + + if (conf.exists("name") && !conf.exists("title")) + spec.deprecation_msgs.push_back("\"name\" setting in game.conf is deprecated, please use \"title\" instead"); + + return spec; } SubgameSpec findWorldSubgame(const std::string &world_path) @@ -159,10 +187,12 @@ SubgameSpec findWorldSubgame(const std::string &world_path) std::string conf_path = world_gamepath + DIR_DELIM + "game.conf"; conf.readConfigFile(conf_path.c_str()); - if (conf.exists("name")) - gamespec.name = conf.get("name"); + if (conf.exists("title")) + gamespec.title = conf.get("title"); + else if (conf.exists("name")) + gamespec.title = conf.get("name"); else - gamespec.name = world_gameid; + gamespec.title = world_gameid; return gamespec; } diff --git a/src/content/subgames.h b/src/content/subgames.h index d36b4952f..d5d168243 100644 --- a/src/content/subgames.h +++ b/src/content/subgames.h @@ -29,7 +29,7 @@ class Settings; struct SubgameSpec { std::string id; - std::string name; + std::string title; std::string author; int release; std::string path; @@ -41,20 +41,24 @@ struct SubgameSpec std::unordered_map addon_mods_paths; std::string menuicon_path; + // For logging purposes + std::vector deprecation_msgs; + SubgameSpec(const std::string &id = "", const std::string &path = "", const std::string &gamemods_path = "", const std::unordered_map &addon_mods_paths = {}, - const std::string &name = "", + const std::string &title = "", const std::string &menuicon_path = "", const std::string &author = "", int release = 0) : id(id), - name(name), author(author), release(release), path(path), + title(title), author(author), release(release), path(path), gamemods_path(gamemods_path), addon_mods_paths(addon_mods_paths), menuicon_path(menuicon_path) { } bool isValid() const { return (!id.empty() && !path.empty()); } + void checkAndLog() const; }; SubgameSpec findSubgame(const std::string &id); -- cgit v1.2.3