X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmain.cpp;h=4629f92ce852a2c6251cde53275d4eb19a182d69;hb=3799ffd9d517aa19d41c5195cf52a3ddc29f7f72;hp=e2f2b22cf74b07251ed21083d77302f4dfd75064;hpb=ad9786c44b7d09b2d7972884ef5e6791861dd151;p=oweals%2Fminetest.git diff --git a/src/main.cpp b/src/main.cpp index e2f2b22cf..4629f92ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,7 +18,6 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "irrlicht.h" // createDevice -#include "mainmenumanager.h" #include "irrlichttypes_extrabloated.h" #include "chat_interface.h" #include "debug.h" @@ -26,16 +25,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "server.h" #include "filesys.h" #include "version.h" -#include "guiMainMenu.h" -#include "game.h" +#include "client/game.h" #include "defaultsettings.h" #include "gettext.h" #include "log.h" -#include "quicktune.h" +#include "util/quicktune.h" #include "httpfetch.h" -#include "guiEngine.h" #include "gameparams.h" -#include "database.h" +#include "database/database.h" #include "config.h" #include "player.h" #include "porting.h" @@ -44,11 +41,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "terminal_chat_console.h" #endif #ifndef SERVER +#include "gui/guiMainMenu.h" #include "client/clientlauncher.h" +#include "gui/guiEngine.h" +#include "gui/mainmenumanager.h" #endif #ifdef HAVE_TOUCHSCREENGUI - #include "touchscreengui.h" + #include "gui/touchscreengui.h" #endif #if !defined(SERVER) && \ @@ -74,12 +74,12 @@ static void print_help(const OptionList &allowed_options); static void print_allowed_options(const OptionList &allowed_options); static void print_version(); static void print_worldspecs(const std::vector &worldspecs, - std::ostream &os); + std::ostream &os, bool print_name = true, bool print_path = true); static void print_modified_quicktune_values(); static void list_game_ids(); -static void list_worlds(); -static void setup_log_params(const Settings &cmd_args); +static void list_worlds(bool print_name, bool print_path); +static bool setup_log_params(const Settings &cmd_args); static bool create_userdata_path(); static bool init_common(const Settings &cmd_args, int argc, char *argv[]); static void startup_message(); @@ -135,7 +135,8 @@ int main(int argc, char *argv[]) return 0; } - setup_log_params(cmd_args); + if (!setup_log_params(cmd_args)) + return 1; porting::signal_handler_init(); @@ -160,9 +161,19 @@ int main(int argc, char *argv[]) return 0; } - // List worlds if requested - if (cmd_args.exists("world") && cmd_args.get("world") == "list") { - list_worlds(); + // List worlds, world names, and world paths if requested + if (cmd_args.exists("worldlist")) { + if (cmd_args.get("worldlist") == "name") { + list_worlds(true, false); + } else if (cmd_args.get("worldlist") == "path") { + list_worlds(false, true); + } else if (cmd_args.get("worldlist") == "both") { + list_worlds(true, true); + } else { + errorstream << "Invalid --worldlist value: " + << cmd_args.get("worldlist") << std::endl; + return 1; + } return 0; } @@ -252,11 +263,17 @@ static void set_allowed_options(OptionList *allowed_options) allowed_options->insert(std::make_pair("map-dir", ValueSpec(VALUETYPE_STRING, _("Same as --world (deprecated)")))); allowed_options->insert(std::make_pair("world", ValueSpec(VALUETYPE_STRING, - _("Set world path (implies local game) ('list' lists all)")))); + _("Set world path (implies local game if used with option --go)")))); allowed_options->insert(std::make_pair("worldname", ValueSpec(VALUETYPE_STRING, - _("Set world by name (implies local game)")))); + _("Set world by name (implies local game if used with option --go)")))); + allowed_options->insert(std::make_pair("worldlist", ValueSpec(VALUETYPE_STRING, + _("Get list of worlds ('path' lists paths, " + "'name' lists names, 'both' lists both)")))); allowed_options->insert(std::make_pair("quiet", ValueSpec(VALUETYPE_FLAG, _("Print to console errors only")))); + allowed_options->insert(std::make_pair("color", ValueSpec(VALUETYPE_STRING, + _("Coloured logs ('always', 'never' or 'auto'), defaults to 'auto'" + )))); allowed_options->insert(std::make_pair("info", ValueSpec(VALUETYPE_FLAG, _("Print more information to console")))); allowed_options->insert(std::make_pair("verbose", ValueSpec(VALUETYPE_FLAG, @@ -271,6 +288,8 @@ static void set_allowed_options(OptionList *allowed_options) _("Migrate from current map backend to another (Only works when using minetestserver or with --server)")))); allowed_options->insert(std::make_pair("migrate-players", ValueSpec(VALUETYPE_STRING, _("Migrate from current players backend to another (Only works when using minetestserver or with --server)")))); + allowed_options->insert(std::make_pair("migrate-auth", ValueSpec(VALUETYPE_STRING, + _("Migrate from current auth backend to another (Only works when using minetestserver or with --server)")))); allowed_options->insert(std::make_pair("terminal", ValueSpec(VALUETYPE_FLAG, _("Feature an interactive terminal (Only works when using minetestserver or with --server)")))); #ifndef SERVER @@ -288,6 +307,8 @@ static void set_allowed_options(OptionList *allowed_options) _("Set player name")))); allowed_options->insert(std::make_pair("password", ValueSpec(VALUETYPE_STRING, _("Set password")))); + allowed_options->insert(std::make_pair("password-file", ValueSpec(VALUETYPE_STRING, + _("Set password from contents of file")))); allowed_options->insert(std::make_pair("go", ValueSpec(VALUETYPE_FLAG, _("Disable main menu")))); allowed_options->insert(std::make_pair("console", ValueSpec(VALUETYPE_FLAG, @@ -336,24 +357,26 @@ static void list_game_ids() std::cout << gameid < worldspecs = getAvailableWorlds(); - print_worldspecs(worldspecs, std::cout); + print_worldspecs(worldspecs, std::cout, print_name, print_path); } static void print_worldspecs(const std::vector &worldspecs, - std::ostream &os) + std::ostream &os, bool print_name, bool print_path) { for (const WorldSpec &worldspec : worldspecs) { std::string name = worldspec.name; std::string path = worldspec.path; - if (name.find(' ') != std::string::npos) - name = std::string("'").append(name).append("'"); - path = std::string("'").append(path).append("'"); - name = padStringRight(name, 14); - os << " " << name << " " << path << std::endl; + if (print_name && print_path) { + os << "\t" << name << "\t\t" << path << std::endl; + } else if (print_name) { + os << "\t" << name << std::endl; + } else if (print_path) { + os << "\t" << path << std::endl; + } } } @@ -374,7 +397,7 @@ static void print_modified_quicktune_values() } } -static void setup_log_params(const Settings &cmd_args) +static bool setup_log_params(const Settings &cmd_args) { // Quiet mode, print errors only if (cmd_args.getFlag("quiet")) { @@ -382,6 +405,30 @@ static void setup_log_params(const Settings &cmd_args) g_logger.addOutputMaxLevel(&stderr_output, LL_ERROR); } + // Coloured log messages (see log.h) + std::string color_mode; + if (cmd_args.exists("color")) { + color_mode = cmd_args.get("color"); +#if !defined(_WIN32) + } else { + char *color_mode_env = getenv("MT_LOGCOLOR"); + if (color_mode_env) + color_mode = color_mode_env; +#endif + } + if (color_mode != "") { + if (color_mode == "auto") { + Logger::color_mode = LOG_COLOR_AUTO; + } else if (color_mode == "always") { + Logger::color_mode = LOG_COLOR_ALWAYS; + } else if (color_mode == "never") { + Logger::color_mode = LOG_COLOR_NEVER; + } else { + errorstream << "Invalid color mode: " << color_mode << std::endl; + return false; + } + } + // If trace is enabled, enable logging of certain things if (cmd_args.getFlag("trace")) { dstream << _("Enabling trace level debug output") << std::endl; @@ -398,6 +445,8 @@ static void setup_log_params(const Settings &cmd_args) // In certain cases, output verbose level on stderr if (cmd_args.getFlag("verbose") || cmd_args.getFlag("trace")) g_logger.addOutput(&stderr_output, LL_VERBOSE); + + return true; } static bool create_userdata_path() @@ -499,11 +548,8 @@ static bool read_config_file(const Settings &cmd_args) static void init_log_streams(const Settings &cmd_args) { -#if RUN_IN_PLACE - std::string log_filename = DEBUGFILE; -#else std::string log_filename = porting::path_user + DIR_DELIM + DEBUGFILE; -#endif + if (cmd_args.exists("logfile")) log_filename = cmd_args.get("logfile"); @@ -534,9 +580,8 @@ static void init_log_streams(const Settings &cmd_args) "using maximum." << std::endl; } - verbosestream << "log_filename = " << log_filename << std::endl; - - file_log_output.open(log_filename); + file_log_output.setFile(log_filename, + g_settings->getU64("debug_log_size_max") * 1000000); g_logger.addOutputMaxLevel(&file_log_output, log_level); } @@ -809,6 +854,9 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & if (cmd_args.exists("migrate-players")) return ServerEnvironment::migratePlayersDatabase(game_params, cmd_args); + if (cmd_args.exists("migrate-auth")) + return ServerEnvironment::migrateAuthDatabase(game_params, cmd_args); + if (cmd_args.exists("terminal")) { #if USE_CURSES bool name_ok = true; @@ -838,13 +886,14 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & try { // Create server Server server(game_params.world_path, game_params.game_spec, - false, bind_addr.isIPv6(), true, &iface); + false, bind_addr, true, &iface); + server.init(); g_term_console.setup(&iface, &kill, admin_nick); g_term_console.start(); - server.start(bind_addr); + server.start(); // Run server dedicated_server_loop(server, kill); } catch (const ModError &e) { @@ -872,8 +921,9 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & try { // Create server Server server(game_params.world_path, game_params.game_spec, false, - bind_addr.isIPv6(), true); - server.start(bind_addr); + bind_addr, true); + server.init(); + server.start(); // Run server bool &kill = *porting::signal_handler_killstatus();