mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-15 16:52:34 +00:00
Fixed application taskbar not hiding after task completion, implemented basic uninstaller task, server browser is only told to update from updater if server data has actually changed, added Interface.instance method- fixes assuming window.current_state is a Interface instance.
This commit is contained in:
@@ -25,7 +25,11 @@ class W3DHub
|
||||
@status.instance_variable_set(:@player_count, hash[:numplayers] || 0)
|
||||
@status.instance_variable_set(:@started, hash[:started])
|
||||
@status.instance_variable_set(:@remaining, hash[:remaining])
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
|
||||
class Status
|
||||
|
||||
@@ -105,9 +105,8 @@ class W3DHub
|
||||
|
||||
id, data = rpc[:arguments]
|
||||
server = Store.server_list.find { |s| s.id == id }
|
||||
server&.update(data)
|
||||
state = window.current_state
|
||||
state.update_server_browser(server) if state.is_a?(States::Interface) && server
|
||||
server_updated = server&.update(data)
|
||||
States::Interface.instance&.update_server_browser(server) if server_updated
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -94,7 +94,7 @@ class W3DHub
|
||||
end
|
||||
|
||||
def uninstall(app_id, channel)
|
||||
puts "Uninstall Request: #{app_id} #{channel}"
|
||||
puts "Uninstall Request: #{app_id}-#{channel}"
|
||||
|
||||
return false if !installed?(app_id, channel) || installing?(app_id, channel)
|
||||
|
||||
@@ -297,6 +297,11 @@ class W3DHub
|
||||
listed_version > current_version
|
||||
end
|
||||
|
||||
def uninstalled!(task)
|
||||
Store.settings[:games].delete(:"#{task.app_id}_#{task.release_channel}")
|
||||
Store.settings.save_settings
|
||||
end
|
||||
|
||||
# No application tasks are being done
|
||||
def idle?
|
||||
!busy?
|
||||
@@ -314,6 +319,8 @@ class W3DHub
|
||||
def start_next_available_task
|
||||
return unless idle?
|
||||
|
||||
@tasks.delete_if { |t| t.state == :complete || t.state == :halted || t.state == :failed }
|
||||
|
||||
task = @tasks.find { |t| t.state == :not_started }
|
||||
task&.start
|
||||
end
|
||||
|
||||
@@ -105,6 +105,8 @@ class W3DHub
|
||||
def fail!(reason = "")
|
||||
@task_state = :failed
|
||||
@task_failure_reason = reason.to_s
|
||||
|
||||
hide_application_taskbar
|
||||
end
|
||||
|
||||
def fail_silently!
|
||||
@@ -138,7 +140,15 @@ class W3DHub
|
||||
def update_interface_task_status
|
||||
run_on_main_thread(
|
||||
proc do
|
||||
window.current_state.interface_task_update_pending = self
|
||||
States::Interface.instance&.interface_task_update_pending = self
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
def show_application_taskbar
|
||||
run_on_main_thread(
|
||||
proc do
|
||||
States::Interface.instance&.show_application_taskbar
|
||||
end
|
||||
)
|
||||
end
|
||||
@@ -146,7 +156,7 @@ class W3DHub
|
||||
def hide_application_taskbar
|
||||
run_on_main_thread(
|
||||
proc do
|
||||
window.current_state.hide_application_taskbar
|
||||
States::Interface.instance&.hide_application_taskbar
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
@@ -6,6 +6,8 @@ class W3DHub
|
||||
end
|
||||
|
||||
def execute_task
|
||||
show_application_taskbar
|
||||
|
||||
fail_fast
|
||||
return false if failed?
|
||||
|
||||
@@ -26,20 +28,17 @@ class W3DHub
|
||||
|
||||
unpack_packages(packages)
|
||||
return false if failed?
|
||||
sleep 1
|
||||
|
||||
create_wine_prefix
|
||||
return false if failed?
|
||||
sleep 1
|
||||
|
||||
install_dependencies(packages)
|
||||
return false if failed?
|
||||
sleep 1
|
||||
|
||||
mark_application_installed
|
||||
return false if failed?
|
||||
|
||||
sleep 5
|
||||
sleep 1
|
||||
hide_application_taskbar
|
||||
|
||||
true
|
||||
|
||||
@@ -5,7 +5,7 @@ class W3DHub
|
||||
:uninstaller
|
||||
end
|
||||
|
||||
def exec_task
|
||||
def execute_task
|
||||
# TODO: cherrypick or nuke installation folder
|
||||
# A:
|
||||
# fetch manifests
|
||||
@@ -15,6 +15,43 @@ class W3DHub
|
||||
# B:
|
||||
# Nuke installation folder
|
||||
# mark application as uninstalled
|
||||
|
||||
show_application_taskbar
|
||||
|
||||
remove_installation_directory
|
||||
mark_application_uninstalled
|
||||
|
||||
sleep 1
|
||||
hide_application_taskbar
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
def remove_installation_directory
|
||||
@status.operations.clear
|
||||
@status.label = "Uninstalling #{@application.name}"
|
||||
@status.value = "Purging installation folder..."
|
||||
@status.progress = Float::INFINITY
|
||||
|
||||
path = Cache.install_path(@application, @channel)
|
||||
|
||||
puts path
|
||||
# TODO: Do some sanity checking, i.e. DO NOT start launcher if `whoami` returns root, path makes sense,
|
||||
# we're not on Windows trying to uninstall a game likely installed by the official launcher
|
||||
FileUtils.remove_dir(path)
|
||||
end
|
||||
|
||||
def mark_application_uninstalled
|
||||
Store.application_manager.uninstalled!(self)
|
||||
|
||||
@status.operations.clear
|
||||
@status.label = "Uninstalled #{@application.name}"
|
||||
@status.value = ""
|
||||
@status.progress = 1.0
|
||||
|
||||
@status.step = :mark_application_uninstalled
|
||||
|
||||
puts "#{@app_id} has been uninstalled."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -89,7 +89,7 @@ class W3DHub
|
||||
Hash.new.tap { |hash|
|
||||
hash[I18n.t(:"games.game_settings")] = { icon: "gear", block: proc { Store.application_manager.settings(game.id, channel.id) } }
|
||||
hash[I18n.t(:"games.wine_configuration")] = { icon: "gear", block: proc { Store.application_manager.wine_configuration(game.id, channel.id) } } if W3DHub.unix?
|
||||
hash[I18n.t(:"games.game_modifications")] = { icon: "gear", enabled: false, block: proc { puts "Coming Soon!" } }
|
||||
hash[I18n.t(:"games.game_modifications")] = { icon: "gear", enabled: true, block: proc { populate_game_modifications(game, channel) } }
|
||||
if game.id != "ren"
|
||||
hash[I18n.t(:"games.repair_installation")] = { icon: "wrench", block: proc { Store.application_manager.repair(game.id, channel.id) } }
|
||||
hash[I18n.t(:"games.uninstall_game")] = { icon: "trashCan", block: proc { Store.application_manager.uninstall(game.id, channel.id) } }
|
||||
@@ -225,6 +225,46 @@ class W3DHub
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def populate_game_modifications(application, channel)
|
||||
@game_news_container.clear do
|
||||
([
|
||||
{
|
||||
id: "4E4CB0548029FF234E289B4B8B3E357A",
|
||||
name: "HD Purchase Terminal Icons",
|
||||
author: "username",
|
||||
description: "Replaces them blurry low res icons with juicy hi-res ones.",
|
||||
icon: nil,
|
||||
type: "Textures",
|
||||
subtype: "Purchase Terminal",
|
||||
multiplayer_approved: true,
|
||||
games: ["ren", "ia"],
|
||||
versions: ["0.0.1", "0.0.2", "0.1.0"],
|
||||
url: "https://w3dhub.com/mods/username/hd_purchase_terminal_icons"
|
||||
}
|
||||
] * 10).flatten.each do |mod|
|
||||
flow(width: 1.0, height: 128, margin: 4, border_bottom_thickness: 1, border_bottom_color: 0xff_ffffff) do
|
||||
stack(width: 128, height: 128, padding: 4) do
|
||||
image BLACK_IMAGE, height: 1.0
|
||||
end
|
||||
|
||||
stack(width: 0.75, height: 1.0) do
|
||||
stack(width: 1.0, height: 128 - 28) do
|
||||
link(mod[:name]) { Launchy.open(mod[:url]) }
|
||||
inscription "Author: #{mod[:author]} | #{mod[:type]} | #{mod[:subtype]}"
|
||||
para mod[:description][0..180]
|
||||
end
|
||||
|
||||
flow(width: 1.0, height: 28, padding: 4) do
|
||||
inscription "Version", width: 0.25, text_align: :center
|
||||
list_box items: mod[:versions], width: 0.5, enabled: mod[:versions].size > 1, padding_top: 0, padding_bottom: 0
|
||||
button "Install", width: 0.25, padding_top: 0, padding_bottom: 0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -4,7 +4,15 @@ class W3DHub
|
||||
attr_reader :main_thread_queue
|
||||
attr_accessor :interface_task_update_pending
|
||||
|
||||
@@instance = nil
|
||||
|
||||
def self.instance
|
||||
@@instance
|
||||
end
|
||||
|
||||
def setup
|
||||
@@instance = self
|
||||
|
||||
window.show_cursor = true
|
||||
|
||||
@account = @options[:account]
|
||||
@@ -165,8 +173,6 @@ class W3DHub
|
||||
end
|
||||
|
||||
def update_interface_task_status(task)
|
||||
show_application_taskbar
|
||||
|
||||
@application_taskbar_label.value = task.status.label
|
||||
@application_taskbar_status_label.value = "#{task.status.value} (#{format("%.2f%%", task.status.progress.clamp(0.0, 1.0) * 100.0)})"
|
||||
@application_taskbar_progressbar.value = task.status.progress.clamp(0.0, 1.0)
|
||||
|
||||
Reference in New Issue
Block a user