From 13103a73800b91bcfc21bcb7cee0edc9a6a2dcbf Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Mon, 29 Nov 2021 18:39:15 -0600 Subject: [PATCH] Added app icon, removed W3DHub::NAME constant, replaced stub content in community updates section with actual W3D Hub news --- lib/pages/community.rb | 87 ++++++++++++++++++++++++++++++++++++---- lib/states/boot.rb | 12 +++--- lib/states/interface.rb | 2 +- lib/version.rb | 1 - locales/en.yml | 6 ++- media/icons/app.png | Bin 0 -> 8717 bytes 6 files changed, 91 insertions(+), 17 deletions(-) create mode 100644 media/icons/app.png diff --git a/lib/pages/community.rb b/lib/pages/community.rb index 1a87032..9b917ea 100644 --- a/lib/pages/community.rb +++ b/lib/pages/community.rb @@ -2,19 +2,25 @@ class W3DHub class Pages class Community < Page def setup + @w3dhub_news ||= nil + body.clear do stack(width: 1.0, height: 1.0, padding: 8) do stack(width: 1.0, height: 0.15) do - tagline "Welcome to the #{W3DHub::NAME}" - para "The #{W3DHub::NAME} is a one-stop shop for your W3D gaming needs, providing game downloads, automatic updating, an integrated server browser, and centralized management of in-game options." + tagline "Welcome to #{I18n.t(:app_name)}" + para "The #{I18n.t(:app_name_simple)} is a one-stop shop for your W3D gaming needs, providing game downloads, automatic updating, an integrated server browser, and centralized management of in-game options." end flow(width: 1.0, height: 0.15, margin_bottom: 24) do - flow(width: (1.0 - 0.27) / 2, height: 1.0) do + icon_container_width = 0.37 + flow(width: (1.0 - icon_container_width) / 2, height: 1.0) do end - flow(width: 0.27, height: 1.0) do - image "#{GAME_ROOT_PATH}/media/icons/w3dhub.png", height: 1.0, hover: { color: 0xaa_ffffff }, tip: "W3D Hub Forums" do + flow(width: icon_container_width, height: 1.0) do + image "#{GAME_ROOT_PATH}/media/icons/app.png", hover: { color: 0xaa_ffffff }, height: 1.0, tip: "#{I18n.t(:app_name)} Github Repository" do + Launchy.open("https://github.com/cyberarm/w3dhub_ruby") + end + image "#{GAME_ROOT_PATH}/media/icons/w3dhub.png", hover: { color: 0xaa_ffffff }, height: 1.0, margin_left: 32, tip: "W3D Hub Forums" do Launchy.open("https://w3dhub.com/forum/") end image "#{GAME_ROOT_PATH}/media/social_media_icons/discord.png", hover: { color: 0xaa_ffffff }, height: 1.0, margin_left: 32, tip: "W3D Hub Discord Server" do @@ -26,9 +32,11 @@ class W3DHub end end - stack(width: 1.0, height: 0.55, scroll: true) do - tagline "Latest Updates" - para "Hello World " * 100 + stack(width: 1.0, height: 0.55) do + tagline "Latest Updates", height: 0.1 + + @wd3hub_news_container = flow(width: 1.0, height: 0.9, padding: 8, scroll: true) do + end end stack(width: 1.0, height: 0.15, margin_top: 16) do @@ -44,6 +52,69 @@ class W3DHub end end end + + if @w3dhub_news + populate_w3dhub_news + else + Thread.new do + fetch_w3dhub_news + main_thread_queue << proc { populate_w3dhub_news } + end + + @wd3hub_news_container.clear do + para I18n.t(:"games.fetching_news"), padding: 8 + end + 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 + + @w3dhub_news = news + end + end + + def populate_w3dhub_news + return unless @w3dhub_news + + if (feed = @w3dhub_news) + @wd3hub_news_container.clear do + feed.items.sort_by { |i| i.timestamp }.reverse[0..9].each do |item| + flow(width: 0.5, height: 128, margin: 4) do + # background 0x88_000000 + + path = Cache.path(item.image) + + if File.exist?(path) + image path, height: 1.0, padding: 4 + else + image BLACK_IMAGE, height: 1.0, padding: 4 + end + + stack(width: 0.6, height: 1.0) do + stack(width: 1.0, height: 112) do + link "#{item.title}", text_size: 18 do + Launchy.open(item.uri) + end + inscription item.blurb.gsub(/\n+/, "\n").strip[0..180] + end + + flow(width: 1.0) do + inscription item.timestamp.strftime("%Y-%m-%d"), width: 0.499 + link I18n.t(:"games.read_more"), width: 0.5, text_align: :right, text_size: 14 do + Launchy.open(item.uri) + end + end + end + end + end + end + end end end end diff --git a/lib/states/boot.rb b/lib/states/boot.rb index 5a6187f..130c985 100644 --- a/lib/states/boot.rb +++ b/lib/states/boot.rb @@ -7,7 +7,7 @@ class W3DHub background 0xff_252525 @fraction = 0.0 - @w3dhub_logo = get_image("#{GAME_ROOT_PATH}/media/icons/w3dhub.png") + @w3dhub_logo = get_image("#{GAME_ROOT_PATH}/media/icons/app.png") @tasks = { refresh_user_token: { started: false, complete: false }, service_status: { started: false, complete: false }, @@ -24,8 +24,8 @@ class W3DHub @progressbar = progress height: 0.025, width: 1.0 flow(width: 1.0, height: 0.05, padding_left: 16, padding_right: 16, padding_bottom: 8, padding_top: 8) do - @status_label = caption "Starting #{NAME}...", width: 0.5 - inscription "#{NAME} #{W3DHub::VERSION}", width: 0.5, text_align: :right + @status_label = caption "Starting #{I18n.t(:app_name_simple)}...", width: 0.5 + inscription "#{I18n.t(:app_name)} #{W3DHub::VERSION}", width: 0.5, text_align: :right end end end @@ -94,13 +94,13 @@ class W3DHub @tasks[:service_status][:complete] = true else # FIXME: MAIN THREAD! - @status_label.value = "W3D Hub Service is down." + @status_label.value = I18n.t(:"boot.w3dhub_service_is_down") end end end def applications - @status_label.value = "Checking for updates..." + @status_label.value = I18n.t(:"boot.checking_for_updates") Thread.new do @applications = Api.applications @@ -114,7 +114,7 @@ class W3DHub end def server_list - @status_label.value = "Getting server list..." + @status_label.value = I18n.t(:"server_browser.fetching_server_list") Thread.new do begin diff --git a/lib/states/interface.rb b/lib/states/interface.rb index 8ee8eb5..07e2937 100644 --- a/lib/states/interface.rb +++ b/lib/states/interface.rb @@ -26,7 +26,7 @@ class W3DHub background 0xff_252525 @header_container = flow(width: 1.0, height: 0.15, padding: 4) do - image "#{GAME_ROOT_PATH}/media/icons/w3dhub.png", width: 0.11 + image "#{GAME_ROOT_PATH}/media/icons/app.png", width: 0.11 stack(width: 0.89, height: 1.0) do # background 0xff_885500 diff --git a/lib/version.rb b/lib/version.rb index 95e1c69..6e6223a 100644 --- a/lib/version.rb +++ b/lib/version.rb @@ -1,5 +1,4 @@ class W3DHub DIR_NAME = "W3DHubAlt" - NAME = "W3D Hub Launcher" VERSION = "0.1.0" end \ No newline at end of file diff --git a/locales/en.yml b/locales/en.yml index 30fdbe8..11a3280 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -1,5 +1,9 @@ en: - app_name: W3D Hub Launcher + app_name: Cyberarm's Linux Friendly W3D Hub Launcher # W3D Hub Launcher + app_name_simple: W3D Hub Linux Launcher + boot: + w3dhub_service_is_down: W3D Hub service is down. + checking_for_updates: Checking for updates... interface: log_in: Log in register: Register diff --git a/media/icons/app.png b/media/icons/app.png new file mode 100644 index 0000000000000000000000000000000000000000..c10550f87a670fbb0574207af6b71fb9e43d2051 GIT binary patch literal 8717 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 literal 0 HcmV?d00001