Mainmenu: Still support favorites if send_pre_v25_init is disabled 3998/head
authorest31 <MTest31@outlook.com>
Fri, 15 Apr 2016 02:13:53 +0000 (04:13 +0200)
committerest31 <MTest31@outlook.com>
Fri, 15 Apr 2016 12:40:31 +0000 (14:40 +0200)
@SmallJoker has noted a bug that servers from the (local) main menu
favorites list can't be opened.

This commit fixes the bug by disabling any main menu based protocol
checks for servers from the favorite list.

Also, it fixes a second bug that happens when a server from the
public serverlist doesn't send its supported protocol versions,
most likely because its running a minetest older than commit [1].
Then we have shown an error msg that the server has enforced
one specific protocol version. This was most likely not the case.

Of course, we can't do anything better than do an assumption on
the protocol versions if they are not known. That assumption
should however be closest to the most often occuring case as
possible.

Also, some little cleanups.

[1]: 5a0ed780f56a5225b3d7c5f64099586e390e5f39 "Server: announce MIN/MAX protocol version supported to serverlist. Client: check serverlist"

builtin/mainmenu/common.lua
builtin/mainmenu/tab_multiplayer.lua
builtin/mainmenu/tab_simple_main.lua

index 3dd7d8b4af8627e788217ded037361b272be1968..62ab2b578715dae95bc814514a24e3ad4d61785e 100644 (file)
@@ -246,6 +246,7 @@ function asyncOnlineFavourites()
                }}
        end
        menudata.favorites = menudata.public_known
+       menudata.favorites_is_public = true
        core.handle_async(
                function(param)
                        return core.get_favorites("online")
@@ -257,6 +258,7 @@ function asyncOnlineFavourites()
                                if favs[1] then
                                        menudata.public_known = favs
                                        menudata.favorites = menudata.public_known
+                                       menudata.favorites_is_public = true
                                end
                                core.event_handler("Refresh")
                        end
@@ -297,12 +299,14 @@ function is_server_protocol_compat_or_error(server_proto_min, server_proto_max)
        if not is_server_protocol_compat(server_proto_min, server_proto_max) then
                local server_prot_ver_info
                local client_prot_ver_info
-               if server_proto_min ~= server_proto_max then
+               local s_p_min = server_proto_min or 13
+               local s_p_max = server_proto_max or 24
+               if s_p_min ~= s_p_max then
                        server_prot_ver_info = fgettext_ne("Server supports protocol versions between $1 and $2. ",
-                               server_proto_min or 13, server_proto_max or 24)
+                               s_p_min, s_p_max)
                else
                        server_prot_ver_info = fgettext_ne("Server enforces protocol version $1. ",
-                               server_proto_min or 13)
+                               s_p_min)
                end
                if min_supp_proto ~= max_supp_proto then
                        client_prot_ver_info= fgettext_ne("We support protocol versions between version $1 and $2.",
index 06d8791f0fd634850bd79e936ed64ab30edea1d8..f3ba122fcf4c6b1fb85a26c976df75a0ad5a8b83 100644 (file)
@@ -102,22 +102,22 @@ local function main_button_handler(tabview, fields, name, tabdata)
                local event = core.explode_table_event(fields["favourites"])
                if event.type == "DCL" then
                        if event.row <= #menudata.favorites then
-                               if not is_server_protocol_compat_or_error(menudata.favorites[event.row].proto_min,
-                                               menudata.favorites[event.row].proto_max) then
+                               local fav = menudata.favorites[event.row]
+                               if menudata.favorites_is_public and
+                                               not is_server_protocol_compat_or_error(
+                                                       fav.proto_min, fav.proto_max) then
                                        return true
                                end
-                               gamedata.address    = menudata.favorites[event.row].address
-                               gamedata.port       = menudata.favorites[event.row].port
+                               gamedata.address    = fav.address
+                               gamedata.port       = fav.port
                                gamedata.playername = fields["te_name"]
                                if fields["te_pwd"] ~= nil then
                                        gamedata.password               = fields["te_pwd"]
                                end
                                gamedata.selected_world = 0
 
-                               if menudata.favorites ~= nil then
-                                       gamedata.servername        = menudata.favorites[event.row].name
-                                       gamedata.serverdescription = menudata.favorites[event.row].description
-                               end
+                               gamedata.servername        = fav.name
+                               gamedata.serverdescription = fav.description
 
                                if gamedata.address ~= nil and
                                        gamedata.port ~= nil then
@@ -188,6 +188,7 @@ local function main_button_handler(tabview, fields, name, tabdata)
                        asyncOnlineFavourites()
                else
                        menudata.favorites = core.get_favorites("local")
+                       menudata.favorites_is_public = false
                end
                tabdata.fav_selected = nil
                return true
@@ -197,7 +198,7 @@ local function main_button_handler(tabview, fields, name, tabdata)
                local current_favourite = core.get_table_index("favourites")
                if current_favourite == nil then return end
                core.delete_favorite(current_favourite)
-               menudata.favorites = order_favorite_list(core.get_favorites())
+               menudata.favorites = core.get_favorites("local")
                tabdata.fav_selected = nil
 
                core.setting_set("address","")
@@ -221,11 +222,13 @@ local function main_button_handler(tabview, fields, name, tabdata)
                        menudata.favorites[fav_idx].address == fields["te_address"] and
                        menudata.favorites[fav_idx].port    == fields["te_port"] then
 
-                       gamedata.servername        = menudata.favorites[fav_idx].name
-                       gamedata.serverdescription = menudata.favorites[fav_idx].description
+                       local fav = menudata.favorites[fav_idx]
+                       gamedata.servername        = fav.name
+                       gamedata.serverdescription = fav.description
 
-                       if not is_server_protocol_compat_or_error(menudata.favorites[fav_idx].proto_min,
-                                       menudata.favorites[fav_idx].proto_max)then
+                       if menudata.favorites_is_public and
+                                       not is_server_protocol_compat_or_error(
+                                               fav.proto_min, fav.proto_max) then
                                return true
                        end
                else
@@ -252,6 +255,7 @@ local function on_change(type,old_tab,new_tab)
                asyncOnlineFavourites()
        else
                menudata.favorites = core.get_favorites("local")
+               menudata.favorites_is_public = false
        end
 end
 
index b32418938d06ee33fe5841fc84141e21147b9d3d..cb64b73f6c0f48428df90653c99ed76719a309a8 100644 (file)
@@ -122,6 +122,7 @@ local function main_button_handler(tabview, fields, name, tabdata)
                        asyncOnlineFavourites()
                else
                        menudata.favorites = core.get_favorites("local")
+                       menudata.favorites_is_public = false
                end
                return true
        end
@@ -149,12 +150,14 @@ local function main_button_handler(tabview, fields, name, tabdata)
                if fav_idx ~= nil and fav_idx <= #menudata.favorites and
                        menudata.favorites[fav_idx].address == fields["te_address"] and
                        menudata.favorites[fav_idx].port    == fields["te_port"] then
+                       local fav = menudata.favorites[fav_idx]
 
-                       gamedata.servername                     = menudata.favorites[fav_idx].name
-                       gamedata.serverdescription      = menudata.favorites[fav_idx].description
+                       gamedata.servername        = fav.name
+                       gamedata.serverdescription = fav.description
 
-                       if not is_server_protocol_compat_or_error(menudata.favorites[fav_idx].proto_min,
-                                       menudata.favorites[fav_idx].proto_max) then
+                       if menudata.favorites_is_public and
+                                               not is_server_protocol_compat_or_error(
+                                                       fav.proto_min, fav.proto_max) then
                                return true
                        end
                else
@@ -192,6 +195,7 @@ local function on_activate(type,old_tab,new_tab)
                asyncOnlineFavourites()
        else
                menudata.favorites = core.get_favorites("local")
+               menudata.favorites_is_public = false
        end
 end