From 66e8c04fc70dfc5a377b9f6be5dd1816bb0d645d Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Mon, 22 Nov 2021 20:48:46 -0600 Subject: [PATCH] Server list is now pre-fetched during 'bootup' --- lib/pages/server_browser.rb | 13 ++++++++----- lib/states/boot.rb | 20 +++++++++++++++++++- lib/window.rb | 1 + 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/pages/server_browser.rb b/lib/pages/server_browser.rb index 1ecf5e1..e398ab3 100644 --- a/lib/pages/server_browser.rb +++ b/lib/pages/server_browser.rb @@ -2,7 +2,6 @@ class W3DHub class Pages class ServerBrowser < Page def setup - @server_list ||= [] @selected_server ||= nil @selected_color = 0xff_666655 @filters = {} @@ -102,7 +101,11 @@ class W3DHub end end - fetch_server_list + if Store.server_list.empty? + fetch_server_list + else + populate_server_list + end end def populate_server_list @@ -111,7 +114,7 @@ class W3DHub @server_list_container.clear do i = -1 - @server_list.each do |server| + Store.server_list.each do |server| next unless @filters[server.game] next unless server.region == @filter_region || @filter_region == "Any" @@ -297,7 +300,7 @@ class W3DHub list = Api.server_list(2) if list - @server_list = list.sort_by! { |s| s&.status&.players&.size }.reverse + Store.server_list = list.sort_by! { |s| s&.status&.players&.size }.reverse main_thread_queue << proc { populate_server_list } @@ -305,7 +308,7 @@ class W3DHub rescue => e # Something went wrong! pp e - @server_list = [] + Store.server_list = [] end end end diff --git a/lib/states/boot.rb b/lib/states/boot.rb index 82270ef..efe5868 100644 --- a/lib/states/boot.rb +++ b/lib/states/boot.rb @@ -11,7 +11,8 @@ class W3DHub @tasks = { refresh_user_token: { started: false, complete: false }, service_status: { started: false, complete: false }, - applications: { started: false, complete: false } + applications: { started: false, complete: false }, + server_list: { started: false, complete: false } } @task_index = 0 @@ -111,6 +112,23 @@ class W3DHub end end end + + def server_list + @status_label.value = "Getting server list..." + + Thread.new do + begin + list = Api.server_list(2) + + Store.server_list = list.sort_by! { |s| s&.status&.players&.size }.reverse if list + @tasks[:server_list][:complete] = true + rescue => e + # Something went wrong! + pp e + Store.server_list = [] + end + end + end end end end diff --git a/lib/window.rb b/lib/window.rb index 9c4adfd..b8431c1 100644 --- a/lib/window.rb +++ b/lib/window.rb @@ -3,6 +3,7 @@ class W3DHub def setup self.caption = I18n.t(:app_name) + Store[:server_list] = [] Store[:settings] = Settings.new Store[:application_manager] = ApplicationManager.new