mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	Support _game postfix in game names, taking it out to make the gameid
This commit is contained in:
		@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
#include "filesys.h"
 | 
			
		||||
#include "settings.h"
 | 
			
		||||
#include "log.h"
 | 
			
		||||
#include "utility_string.h"
 | 
			
		||||
 | 
			
		||||
std::string getGameName(const std::string &game_path)
 | 
			
		||||
{
 | 
			
		||||
@@ -35,20 +36,43 @@ std::string getGameName(const std::string &game_path)
 | 
			
		||||
	return conf.get("name");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct GameFindPath
 | 
			
		||||
{
 | 
			
		||||
	std::string path;
 | 
			
		||||
	bool user_specific;
 | 
			
		||||
	GameFindPath(const std::string &path, bool user_specific):
 | 
			
		||||
		path(path),
 | 
			
		||||
		user_specific(user_specific)
 | 
			
		||||
	{}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
SubgameSpec findSubgame(const std::string &id)
 | 
			
		||||
{
 | 
			
		||||
	if(id == "")
 | 
			
		||||
		return SubgameSpec();
 | 
			
		||||
	std::string share = porting::path_share;
 | 
			
		||||
	std::string user = porting::path_user;
 | 
			
		||||
	std::vector<GameFindPath> find_paths;
 | 
			
		||||
	find_paths.push_back(GameFindPath(
 | 
			
		||||
			user + DIR_DELIM + "games" + DIR_DELIM + id, true));
 | 
			
		||||
	find_paths.push_back(GameFindPath(
 | 
			
		||||
			user + DIR_DELIM + "games" + DIR_DELIM + id + "_game", true));
 | 
			
		||||
	find_paths.push_back(GameFindPath(
 | 
			
		||||
			share + DIR_DELIM + "games" + DIR_DELIM + id, false));
 | 
			
		||||
	find_paths.push_back(GameFindPath(
 | 
			
		||||
			share + DIR_DELIM + "games" + DIR_DELIM + id + "_game", false));
 | 
			
		||||
	// Find game directory
 | 
			
		||||
	std::string game_path = user + DIR_DELIM + "games" + DIR_DELIM + id;
 | 
			
		||||
	std::string game_path;
 | 
			
		||||
	bool user_game = true; // Game is in user's directory
 | 
			
		||||
	if(!fs::PathExists(game_path)){
 | 
			
		||||
		game_path = share + DIR_DELIM + "games" + DIR_DELIM + id;
 | 
			
		||||
		user_game = false;
 | 
			
		||||
	for(u32 i=0; i<find_paths.size(); i++){
 | 
			
		||||
		const std::string &try_path = find_paths[i].path;
 | 
			
		||||
		if(fs::PathExists(try_path)){
 | 
			
		||||
			game_path = try_path;
 | 
			
		||||
			user_game = find_paths[i].user_specific;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if(!fs::PathExists(game_path))
 | 
			
		||||
	if(game_path == "")
 | 
			
		||||
		return SubgameSpec();
 | 
			
		||||
	// Find mod directories
 | 
			
		||||
	std::set<std::string> mods_paths;
 | 
			
		||||
@@ -57,7 +81,6 @@ SubgameSpec findSubgame(const std::string &id)
 | 
			
		||||
		mods_paths.insert(share + DIR_DELIM + "mods" + DIR_DELIM + id);
 | 
			
		||||
	if(user != share || user_game)
 | 
			
		||||
		mods_paths.insert(user + DIR_DELIM + "mods" + DIR_DELIM + id);
 | 
			
		||||
	// TODO: Read proper name from game_path/game.conf
 | 
			
		||||
	std::string game_name = getGameName(game_path);
 | 
			
		||||
	if(game_name == "")
 | 
			
		||||
		game_name = id;
 | 
			
		||||
@@ -76,7 +99,12 @@ std::set<std::string> getAvailableGameIds()
 | 
			
		||||
		for(u32 j=0; j<dirlist.size(); j++){
 | 
			
		||||
			if(!dirlist[j].dir)
 | 
			
		||||
				continue;
 | 
			
		||||
			gameids.insert(dirlist[j].name);
 | 
			
		||||
			const char *ends[] = {"_game", NULL};
 | 
			
		||||
			std::string shorter = removeStringEnd(dirlist[j].name, ends);
 | 
			
		||||
			if(shorter != "")
 | 
			
		||||
				gameids.insert(shorter);
 | 
			
		||||
			else
 | 
			
		||||
				gameids.insert(dirlist[j].name);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return gameids;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user