mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-16 17:22:35 +00:00
Server Browser is now properly updated like the offical launcher- just a bit more flashy due to taking 100+ ms to regenerate ui elements
This commit is contained in:
10
lib/api.rb
10
lib/api.rb
@@ -177,7 +177,7 @@ class W3DHub
|
|||||||
return data.map { |hash| ServerListServer.new(hash) }
|
return data.map { |hash| ServerListServer.new(hash) }
|
||||||
end
|
end
|
||||||
|
|
||||||
pp response
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
# /listings/getStatus/v2/:id?statusLevel=#{0-2}
|
# /listings/getStatus/v2/:id?statusLevel=#{0-2}
|
||||||
@@ -192,6 +192,14 @@ class W3DHub
|
|||||||
# ...players[]:
|
# ...players[]:
|
||||||
# nick, team (index of teams array), score, kills, deaths
|
# nick, team (index of teams array), score, kills, deaths
|
||||||
def self.server_details(internet, id, level)
|
def self.server_details(internet, id, level)
|
||||||
|
response = internet.get("#{SERVER_LIST_ENDPOINT}/listings/getStatus/v2/#{id}?statusLevel=#{level}", DEFAULT_HEADERS)
|
||||||
|
|
||||||
|
if response.success?
|
||||||
|
hash = JSON.parse(response.read, symbolize_names: true)
|
||||||
|
return hash
|
||||||
|
end
|
||||||
|
|
||||||
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
# /listings/push/v2/negotiate?negotiateVersion=1
|
# /listings/push/v2/negotiate?negotiateVersion=1
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ class W3DHub
|
|||||||
@status.instance_variable_set(:@started, hash[:started])
|
@status.instance_variable_set(:@started, hash[:started])
|
||||||
@status.instance_variable_set(:@remaining, hash[:remaining])
|
@status.instance_variable_set(:@remaining, hash[:remaining])
|
||||||
|
|
||||||
|
@status.instance_variable_set(:@teams, hash[:teams]&.map { |t| Team.new(t) }) if hash[:teams]
|
||||||
|
@status.instance_variable_set(:@players, hash[:players]&.select { |t| t[:nick] != "Nod" && t[:nick] != "GDI" }&.map { |t| Player.new(t) }) if hash[:players]
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ class W3DHub
|
|||||||
class ServerBrowser < Page
|
class ServerBrowser < Page
|
||||||
def setup
|
def setup
|
||||||
@server_locked_icons = {}
|
@server_locked_icons = {}
|
||||||
|
@refresh_server_list = false
|
||||||
|
refresh_server = false
|
||||||
|
|
||||||
@selected_server ||= nil
|
@selected_server ||= nil
|
||||||
@selected_server_container ||= nil
|
@selected_server_container ||= nil
|
||||||
@@ -52,9 +54,9 @@ class W3DHub
|
|||||||
populate_server_list
|
populate_server_list
|
||||||
end
|
end
|
||||||
|
|
||||||
button get_image("#{GAME_ROOT_PATH}/media/ui_icons/return.png"), tip: I18n.t(:"server_browser.refresh"), image_height: 1.0, margin_left: 16, padding_left: 2, padding_right: 2, padding_top: 2, padding_bottom: 2 do
|
# button get_image("#{GAME_ROOT_PATH}/media/ui_icons/return.png"), tip: I18n.t(:"server_browser.refresh"), image_height: 1.0, margin_left: 16, padding_left: 2, padding_right: 2, padding_top: 2, padding_bottom: 2 do
|
||||||
fetch_server_list
|
# fetch_server_list
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
flow(width: 0.249, height: 1.0) do
|
flow(width: 0.249, height: 1.0) do
|
||||||
@@ -113,37 +115,48 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if Store.server_list.empty?
|
populate_server_list
|
||||||
fetch_server_list
|
populate_server_info(@selected_server) if @selected_server
|
||||||
else
|
|
||||||
populate_server_list
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
super
|
super
|
||||||
|
|
||||||
populate_server_list if @refresh_server_list
|
if @refresh_server_list && Gosu.milliseconds >= @refresh_server_list
|
||||||
@refresh_server_list = false
|
@refresh_server_list = nil
|
||||||
|
|
||||||
|
populate_server_list
|
||||||
|
|
||||||
|
if @selected_server&.id == @refresh_server&.id
|
||||||
|
Async do
|
||||||
|
fetch_server_details(@refresh_server) if @refresh_server
|
||||||
|
populate_server_info(@refresh_server) if @refresh_server && @refresh_server == @selected_server
|
||||||
|
|
||||||
|
@refresh_server = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def refresh_server_list(server)
|
def refresh_server_list(server)
|
||||||
populate_server_info(server) if @selected_server&.id == server.id
|
@refresh_server_list = Gosu.milliseconds + 3_000
|
||||||
@refresh_server_list = true
|
@refresh_server = server if @selected_server&.id == server.id
|
||||||
end
|
end
|
||||||
|
|
||||||
def stylize_selected_server(server_container)
|
def stylize_selected_server(server_container)
|
||||||
server_container.style.server_item_background = server_container.style.default[:background]
|
server_container.style.server_item_background = server_container.style.default[:background]
|
||||||
server_container.style.server_item_hover_background = server_container.style.hover[:background]
|
server_container.style.server_item_hover_background = server_container.style.hover[:background]
|
||||||
server_container.style.server_item_active_background = server_container.style.active[:background]
|
server_container.style.server_item_active_background = server_container.style.active[:background]
|
||||||
|
|
||||||
server_container.style.background = @selected_color
|
server_container.style.background = @selected_color
|
||||||
|
|
||||||
server_container.style.default[:background] = @selected_color
|
server_container.style.default[:background] = @selected_color
|
||||||
server_container.style.hover[:background] = @selected_color
|
server_container.style.hover[:background] = @selected_color
|
||||||
server_container.style.active[:background] = @selected_color
|
server_container.style.active[:background] = @selected_color
|
||||||
end
|
end
|
||||||
|
|
||||||
def populate_server_list
|
def populate_server_list
|
||||||
@server_list_container.scroll_top = 0
|
Store.server_list = Store.server_list.sort_by! { |s| [s&.status&.player_count, s&.id] }.reverse if Store.server_list
|
||||||
|
|
||||||
@server_list_container.clear do
|
@server_list_container.clear do
|
||||||
i = -1
|
i = -1
|
||||||
@@ -207,7 +220,10 @@ class W3DHub
|
|||||||
|
|
||||||
@selected_server = server
|
@selected_server = server
|
||||||
|
|
||||||
populate_server_info(server)
|
Async do
|
||||||
|
fetch_server_details(server)
|
||||||
|
populate_server_info(server) if server == @selected_server
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
stylize_selected_server(server_container) if server.id == @selected_server&.id
|
stylize_selected_server(server_container) if server.id == @selected_server&.id
|
||||||
@@ -333,29 +349,12 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_server_list
|
def fetch_server_details(server)
|
||||||
unless Gosu.milliseconds - Store.server_list_last_fetch >= 3_000 # 3 seconds
|
|
||||||
populate_server_list # Fake it
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
Async do
|
Async do
|
||||||
internet = Async::HTTP::Internet.instance
|
internet = Async::HTTP::Internet.instance
|
||||||
|
|
||||||
begin
|
server_data = Api.server_details(internet, server.id, 2)
|
||||||
list = Api.server_list(internet, 2)
|
server.update(server_data) if server_data
|
||||||
|
|
||||||
if list
|
|
||||||
Store.server_list = list.sort_by! { |s| s&.status&.players&.size }.reverse
|
|
||||||
Store.server_list_last_fetch = Gosu.milliseconds
|
|
||||||
|
|
||||||
main_thread_queue << proc { populate_server_list }
|
|
||||||
end
|
|
||||||
rescue => e
|
|
||||||
# Something went wrong!
|
|
||||||
pp e
|
|
||||||
Store.server_list = []
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -78,5 +78,5 @@ require_relative "lib/pages/download_manager"
|
|||||||
Async do
|
Async do
|
||||||
W3DHub::Window.new(width: 980, height: 720, borderless: false).show
|
W3DHub::Window.new(width: 980, height: 720, borderless: false).show
|
||||||
|
|
||||||
raise Async::Stop # ensure reactor is shutdown when window is closed
|
exit # ensure reactor is shutdown when window is closed
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user