Emit install/update/uninstall completion and forward install progress to the base Library contract so OGPU's InstallManager and launch menu stop hanging at 0%
This commit is contained in:
parent
b19903e682
commit
e48a0b501d
3 changed files with 46 additions and 25 deletions
|
|
@ -495,11 +495,12 @@ func _ensure_install_location() -> String:
|
|||
|
||||
|
||||
## Installs (or updates, if a caveId is given) the given game.
|
||||
func install(game: Dictionary, cave_id: String = "") -> void:
|
||||
await thread_group.exec(_install.bind(game, cave_id))
|
||||
## Returns true when the operation finished without errors.
|
||||
func install(game: Dictionary, cave_id: String = "") -> bool:
|
||||
return await thread_group.exec(_install.bind(game, cave_id))
|
||||
|
||||
|
||||
func _install(game: Dictionary, cave_id: String) -> void:
|
||||
func _install(game: Dictionary, cave_id: String) -> bool:
|
||||
var game_id: int = game.get("id", 0)
|
||||
var reason := "update" if cave_id != "" else "install"
|
||||
|
||||
|
|
@ -508,7 +509,7 @@ func _install(game: Dictionary, cave_id: String) -> void:
|
|||
if "error" in uploads_res:
|
||||
logger.warn("Fetch.GameUploads failed: " + str(uploads_res["error"]))
|
||||
emit_signal.call_deferred("app_installed", cave_id, false)
|
||||
return
|
||||
return false
|
||||
# Uploads are cached by butlerd just like owned keys, so retry fresh when
|
||||
# the cached result is stale, otherwise a cold database would report every
|
||||
# game as having no compatible upload.
|
||||
|
|
@ -519,12 +520,12 @@ func _install(game: Dictionary, cave_id: String) -> void:
|
|||
if "error" in uploads_res:
|
||||
logger.warn("Fetch.GameUploads (fresh) failed: " + str(uploads_res["error"]))
|
||||
emit_signal.call_deferred("app_installed", cave_id, false)
|
||||
return
|
||||
return false
|
||||
var uploads: Array = uploads_res.get("uploads", [])
|
||||
if uploads.is_empty():
|
||||
logger.error("No compatible uploads found for game id " + str(game_id))
|
||||
emit_signal.call_deferred("app_installed", cave_id, false)
|
||||
return
|
||||
return false
|
||||
var upload: Dictionary = uploads[0]
|
||||
|
||||
var location_id := await _ensure_install_location()
|
||||
|
|
@ -543,7 +544,7 @@ func _install(game: Dictionary, cave_id: String) -> void:
|
|||
if "error" in queue_res:
|
||||
logger.error("Install.Queue failed: " + str(queue_res["error"]))
|
||||
emit_signal.call_deferred("app_installed", cave_id, false)
|
||||
return
|
||||
return false
|
||||
|
||||
var task_id: String = queue_res.get("id", "")
|
||||
var staging_folder: String = queue_res.get("stagingFolder", "")
|
||||
|
|
@ -572,19 +573,21 @@ func _install(game: Dictionary, cave_id: String) -> void:
|
|||
emit_signal.call_deferred("app_updated", cave_id, success)
|
||||
else:
|
||||
emit_signal.call_deferred("app_installed", cave_id, success)
|
||||
return success
|
||||
|
||||
|
||||
## Uninstalls the given cave.
|
||||
func uninstall(cave_id: String) -> void:
|
||||
await thread_group.exec(_uninstall.bind(cave_id))
|
||||
## Uninstalls the given cave. Returns true on success.
|
||||
func uninstall(cave_id: String) -> bool:
|
||||
return await thread_group.exec(_uninstall.bind(cave_id))
|
||||
|
||||
|
||||
func _uninstall(cave_id: String) -> void:
|
||||
func _uninstall(cave_id: String) -> bool:
|
||||
var res := await _rpc_call("Uninstall.Perform", {"caveId": cave_id})
|
||||
var success := not ("error" in res)
|
||||
if not success:
|
||||
logger.error("Uninstall.Perform failed: " + str(res.get("error")))
|
||||
emit_signal.call_deferred("app_uninstalled", cave_id, success)
|
||||
return success
|
||||
|
||||
|
||||
## Launches the given cave. This call blocks (on the background thread) for
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue