Author: sveinung
Date: Sun Jan 31 07:06:14 2016
New Revision: 31682

URL: http://svn.gna.org/viewcvs/freeciv?rev=31682&view=rev
Log:
Make user meta server message a setting.

This gives it access to various setting features like the /show command and
the client side server setting GUI.

Freeciv-web has a GUI for setting the user meta server message. At the
moment it has to patch Freeciv to transfer the current metamessage value to
the client. The value of server settings are transfered to the client.

Don't remove the old metamessage command. Reasons:
* it can set a message with quotation marks
* consistency with the other meta server settings
* old scripts may rely on it
* server administrators are used to it

See patch #6876

Modified:
    trunk/common/game.c
    trunk/common/game.h
    trunk/fc_version
    trunk/server/legacysave.c
    trunk/server/meta.c
    trunk/server/savecompat.c
    trunk/server/savegame2.c
    trunk/server/savegame3.c
    trunk/server/settings.c

Modified: trunk/common/game.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.c?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/common/game.c (original)
+++ trunk/common/game.c Sun Jan 31 07:06:14 2016
@@ -391,7 +391,6 @@
     game.server.last_ping         = 0;
     game.server.max_players       = GAME_DEFAULT_MAX_PLAYERS;
     game.server.meta_info.user_message[0] = '\0';
-    game.server.meta_info.user_message_set = FALSE;
     /* Do not clear meta_info.type here as it's already set to correct value */
     game.server.mgr_distance      = GAME_DEFAULT_MGR_DISTANCE;
     game.server.mgr_foodneeded    = GAME_DEFAULT_MGR_FOODNEEDED;

Modified: trunk/common/game.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.h?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/common/game.h (original)
+++ trunk/common/game.h Sun Jan 31 07:06:14 2016
@@ -245,7 +245,6 @@
       } save_options;
 
       struct {
-        bool user_message_set;
         char user_message[256];
         char type[20];
       } meta_info;
@@ -594,6 +593,8 @@
 
 #define GAME_DEFAULT_THREADED_SAVE   FALSE
 
+#define GAME_DEFAULT_USER_META_MESSAGE ""
+
 #define GAME_DEFAULT_SKILL_LEVEL     AI_LEVEL_EASY
 #define GAME_HARDCODED_DEFAULT_SKILL_LEVEL 3 /* that was 'easy' in old saves */
 #define GAME_OLD_DEFAULT_SKILL_LEVEL 5  /* normal; for oldest save games */

Modified: trunk/fc_version
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/fc_version?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/fc_version    (original)
+++ trunk/fc_version    Sun Jan 31 07:06:14 2016
@@ -54,7 +54,7 @@
 #   - Avoid adding a new mandatory capability to the development branch for
 #     as long as possible.  We want to maintain network compatibility with
 #     the stable branch for as long as possible.
-NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2016.Jan.29b"
+NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2016.Jan.31"
 NETWORK_CAPSTRING_OPTIONAL=""
 
 FREECIV_DISTRIBUTOR=""

Modified: trunk/server/legacysave.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/legacysave.c?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/server/legacysave.c   (original)
+++ trunk/server/legacysave.c   Sun Jan 31 07:06:14 2016
@@ -3289,9 +3289,9 @@
     set_meta_patches_string(secfile_lookup_str_default(file, 
                                                 default_meta_patches_string(),
                                                 "game.metapatches"));
-    game.server.meta_info.user_message_set =
-      secfile_lookup_bool_default(file, FALSE, "game.user_metamessage");
-    if (game.server.meta_info.user_message_set) {
+
+    if (secfile_lookup_bool_default(file, FALSE,
+                                    "game.user_metamessage")) {
       set_user_meta_message_string(secfile_lookup_str_default(file, 
                                                 default_meta_message_string(),
                                                 "game.metamessage"));

Modified: trunk/server/meta.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/meta.c?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/server/meta.c (original)
+++ trunk/server/meta.c Sun Jan 31 07:06:14 2016
@@ -134,7 +134,8 @@
 *************************************************************************/
 const char *get_user_meta_message_string(void)
 {
-  if (game.server.meta_info.user_message_set) {
+  if (game.server.meta_info.user_message
+      && game.server.meta_info.user_message[0] != '\0') {
     return game.server.meta_info.user_message;
   }
 
@@ -187,12 +188,10 @@
 {
   if (string != NULL && string[0] != '\0') {
     sz_strlcpy(game.server.meta_info.user_message, string);
-    game.server.meta_info.user_message_set = TRUE;
     set_meta_message_string(string);
   } else {
     /* Remove user meta message. We will use automatic messages instead */
     game.server.meta_info.user_message[0] = '\0';
-    game.server.meta_info.user_message_set = FALSE;
     set_meta_message_string(default_meta_message_string());    
   }
 }

Modified: trunk/server/savecompat.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/savecompat.c?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/server/savecompat.c   (original)
+++ trunk/server/savecompat.c   Sun Jan 31 07:06:14 2016
@@ -1149,6 +1149,7 @@
   bool randsaved;
   int plrno;
   int nplayers;
+  int num_settings;
 
   /* Check status and return if not OK (sg_success != TRUE). */
   sg_check_ret();
@@ -1175,6 +1176,30 @@
                              "player%d.flags", plrno);
     }
   }
+
+  /* Settings */
+  num_settings = secfile_lookup_int_default(loading->file, 0,
+                                            "settings.set_count");
+
+  /* User meta server message is now a setting. */
+  if (secfile_lookup_bool_default(loading->file, FALSE,
+                                  "game.meta_usermessage")) {
+    const char *metamessage;
+
+    metamessage = secfile_lookup_str_default(loading->file, "",
+                                             "game.meta_message");
+
+    /* Insert the meta message as a setting */
+    secfile_insert_str(loading->file, "metamessage",
+                       "settings.set%d.name", num_settings);
+    secfile_insert_str(loading->file, metamessage,
+                       "settings.set%d.value", num_settings);
+    secfile_insert_str(loading->file, "",
+                       "settings.set%d.gamestart", num_settings);
+    num_settings++;
+  }
+
+  secfile_replace_int(loading->file, num_settings, "settings.set_count");
 }
 
 #ifdef FREECIV_DEV_SAVE_COMPAT
@@ -1213,6 +1238,7 @@
   int plrno;
   int nplayers;
   size_t diplstate_type_size;
+  int num_settings;
 
   /* Check status and return if not OK (sg_success != TRUE). */
   sg_check_ret();
@@ -1443,6 +1469,30 @@
       }
     }
   }
+
+  /* Settings */
+  num_settings = secfile_lookup_int_default(loading->file, 0,
+                                            "settings.set_count");
+
+  /* User meta server message is now a setting. */
+  if (secfile_lookup_bool_default(loading->file, FALSE,
+                                  "game.meta_usermessage")) {
+    const char *metamessage;
+
+    metamessage = secfile_lookup_str_default(loading->file, "",
+                                             "game.meta_message");
+
+    /* Insert the meta message as a setting */
+    secfile_insert_str(loading->file, "metamessage",
+                       "settings.set%d.name", num_settings);
+    secfile_insert_str(loading->file, metamessage,
+                       "settings.set%d.value", num_settings);
+    secfile_insert_str(loading->file, "",
+                       "settings.set%d.gamestart", num_settings);
+    num_settings++;
+  }
+
+  secfile_replace_int(loading->file, num_settings, "settings.set_count");
 }
 #endif /* FREECIV_DEV_SAVE_COMPAT */
 

Modified: trunk/server/savegame2.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame2.c?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/server/savegame2.c    (original)
+++ trunk/server/savegame2.c    Sun Jan 31 07:06:14 2016
@@ -1464,15 +1464,6 @@
                                       default_meta_patches_string(),
                                       "game.meta_patches");
   set_meta_patches_string(string);
-  game.server.meta_info.user_message_set
-    = secfile_lookup_bool_default(loading->file, FALSE,
-                                  "game.meta_usermessage");
-  if (game.server.meta_info.user_message_set) {
-    string = secfile_lookup_str_default(loading->file,
-                                        default_meta_message_string(),
-                                        "game.meta_message");
-    set_user_meta_message_string(string);
-  }
 
   if (0 == strcmp(DEFAULT_META_SERVER_ADDR, srvarg.metaserver_addr)) {
     /* Do not overwrite this if the user requested a specific metaserver

Modified: trunk/server/savegame3.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame3.c?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/server/savegame3.c    (original)
+++ trunk/server/savegame3.c    Sun Jan 31 07:06:14 2016
@@ -1780,15 +1780,6 @@
                                       default_meta_patches_string(),
                                       "game.meta_patches");
   set_meta_patches_string(string);
-  game.server.meta_info.user_message_set
-    = secfile_lookup_bool_default(loading->file, FALSE,
-                                  "game.meta_usermessage");
-  if (game.server.meta_info.user_message_set) {
-    string = secfile_lookup_str_default(loading->file,
-                                        default_meta_message_string(),
-                                        "game.meta_message");
-    set_user_meta_message_string(string);
-  }
 
   if (0 == strcmp(DEFAULT_META_SERVER_ADDR, srvarg.metaserver_addr)) {
     /* Do not overwrite this if the user requested a specific metaserver
@@ -1933,7 +1924,6 @@
 ****************************************************************************/
 static void sg_save_game(struct savedata *saving)
 {
-  const char *user_message;
   enum server_states srv_state;
   char global_advances[game.control.num_tech_types + 1];
   int i;
@@ -1954,12 +1944,6 @@
 
   secfile_insert_str(saving->file, get_meta_patches_string(),
                      "game.meta_patches");
-  secfile_insert_bool(saving->file, game.server.meta_info.user_message_set,
-                      "game.meta_usermessage");
-  user_message = get_user_meta_message_string();
-  if (user_message != NULL) {
-    secfile_insert_str(saving->file, user_message, "game.meta_message");
-  }
   secfile_insert_str(saving->file, meta_addr_port(), "game.meta_server");
 
   secfile_insert_str(saving->file, server.game_identifier, "game.id");

Modified: trunk/server/settings.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/settings.c?rev=31682&r1=31681&r2=31682&view=diff
==============================================================================
--- trunk/server/settings.c     (original)
+++ trunk/server/settings.c     Sun Jan 31 07:06:14 2016
@@ -31,6 +31,7 @@
 /* server */
 #include "gamehand.h"
 #include "maphand.h"
+#include "meta.h"
 #include "notify.h"
 #include "plrhand.h"
 #include "report.h"
@@ -744,6 +745,23 @@
 }
 
 /*************************************************************************
+  Update metaserver message string from changed user meta server message
+  string.
+*************************************************************************/
+static void metamessage_action(const struct setting *pset)
+{
+  /* Set the metaserver message based on the new meta server user message.
+   * An empty user metaserver message results in an automatic meta message.
+   * A non empty user meta message results in the user meta message. */
+  set_user_meta_message_string(pset->string.value);
+
+  if (is_metaserver_open()) {
+    /* Update the meta server. */
+    send_server_info_to_metaserver(META_INFO);
+  }
+}
+
+/*************************************************************************
   Validation callback functions.
 *************************************************************************/
 
@@ -2754,6 +2772,16 @@
              "\"kick\" command may reconnect. Changing this setting will "
              "affect users kicked in the past."), NULL, NULL, NULL,
           GAME_MIN_KICK_TIME, GAME_MAX_KICK_TIME, GAME_DEFAULT_KICK_TIME)
+
+  GEN_STRING("metamessage", game.server.meta_info.user_message,
+             SSET_META, SSET_INTERNAL, SSET_RARE, SSET_SERVER_ONLY,
+             N_("Metaserver info line"),
+             N_("User defined metaserver info line. For most of the time "
+                "a user defined metamessage will be used instead of an "
+                "automatically generated message. "
+                "Set to empty (\"\", not \"empty\") to always use an "
+                "automatically generated meta server message."),
+             NULL, metamessage_action, GAME_DEFAULT_USER_META_MESSAGE)
 };
 
 #undef GEN_BOOL


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to