Window is no longer a fiber, should prevent window from locking up due to a fiber not yielding, replaced ui's direct async calls with BackgroundWorker.foreground_job, show pulsing circle behind app logo on boot

This commit is contained in:
2022-02-12 08:47:48 -06:00
parent 202966fd08
commit 232ed2032f
11 changed files with 236 additions and 153 deletions

View File

@@ -60,25 +60,20 @@ class W3DHub
para I18n.t(:"games.fetching_news"), padding: 8
end
Async do
internet = Async::HTTP::Internet.instance
fetch_w3dhub_news
populate_w3dhub_news
end
BackgroundWorker.foreground_job(-> { fetch_w3dhub_news }, ->(result) { populate_w3dhub_news })
end
end
def fetch_w3dhub_news
news = Api.news("launcher-home")
if news
news.items[0..9].each do |item|
Cache.fetch(item.image)
end
return unless news
@w3dhub_news = news
news.items[0..9].each do |item|
Cache.fetch(item.image)
end
@w3dhub_news = news
end
def populate_w3dhub_news

View File

@@ -171,23 +171,20 @@ class W3DHub
title I18n.t(:"games.fetching_news"), padding: 8
end
Async do
fetch_game_news(game)
populate_game_news(game)
end
BackgroundWorker.foreground_job(-> { fetch_game_news(game) }, ->(result) { populate_game_news(game) })
end
end
def fetch_game_news(game)
news = Api.news(game.id)
if news
news.items[0..9].each do |item|
Cache.fetch(item.image)
end
return unless news
@game_news[game.id] = news
news.items[0..9].each do |item|
Cache.fetch(item.image)
end
@game_news[game.id] = news
end
def populate_game_news(game)

View File

@@ -36,15 +36,12 @@ class W3DHub
# Do network stuff
Async do
account = Api.user_login(@username.value, @password.value)
Api.on_fiber(:user_login, @username.value, @password.value) do |account|
if account
Store.account = account
Store.settings[:account][:data] = account
Store.settings.save_settings
internet = Async::HTTP::Internet.instance
Cache.fetch(account.avatar_uri, true)
populate_account_info
@@ -71,12 +68,13 @@ class W3DHub
end
if Store.account
Async do
Cache.fetch(Store.account.avatar_uri)
populate_account_info
page(W3DHub::Pages::Games)
end
BackgroundWorker.foreground_job(
-> { Cache.fetch(Store.account.avatar_uri) },
->(result) {
populate_account_info
page(W3DHub::Pages::Games)
}
)
end
end

View File

@@ -130,11 +130,14 @@ class W3DHub
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
if @refresh_server
BackgroundWorker.foreground_job(
-> { fetch_server_details(@refresh_server) },
->(result) {
populate_server_info(@refresh_server) if @refresh_server == @selected_server
@refresh_server = nil
}
)
end
end
end
@@ -222,10 +225,10 @@ class W3DHub
@selected_server = server
Async do
fetch_server_details(server)
populate_server_info(server) if server == @selected_server
end
BackgroundWorker.foreground_job(
-> { fetch_server_details(server) },
->(result) { populate_server_info(server) if server == @selected_server }
)
end
stylize_selected_server(server_container) if server.id == @selected_server&.id
@@ -352,12 +355,10 @@ class W3DHub
end
def fetch_server_details(server)
Async do
internet = Async::HTTP::Internet.instance
server_data = Api.server_details(internet, server.id, 2)
server.update(server_data) if server_data
end
BackgroundWorker.foreground_job(
-> { Api.server_details(server.id, 2) },
->(server_data) { server.update(server_data) if server_data }
)
end
def game_icon(server)