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:
2021-12-30 15:47:42 -06:00
parent d880d1525f
commit 1214c35fb5
8 changed files with 116 additions and 14 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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