API/Autodoc/Files/RuStoreGodotAppUpdate.gd.en.md


Source code

#   Currently supported: delayed, silent (without RuStore UI), and immediate update.
class_name RuStoreGodotAppUpdateManager extends Object

const SINGLETON_NAME = "RuStoreGodotAppUpdate"
const METRIC_TYPE = "godot"

# @brief Action performed on successful completion of get_app_update_info.
signal on_get_app_update_info_success

# @brief Action performed on get_app_update_info error.
signal on_get_app_update_info_failure

# @brief Action performed on successful completion of start_update_flow_*.
signal on_start_update_flow_success

# @brief Action performed on start_update_flow_* error.
signal on_start_update_flow_failure

# @brief Action performed on complete_update_* error.
signal on_complete_update_failure

# @brief Update state callback.
signal on_state_updated

var _isInitialized: bool = false
var _clientWrapper: Object = null

static var _instance: RuStoreGodotAppUpdateManager = null

#   Creates the instance if it has not been created yet.
static func get_instance() -> RuStoreGodotAppUpdateManager:
    if _instance == null:
        _instance = RuStoreGodotAppUpdateManager.new()
    return _instance


func _init():
    if Engine.has_singleton(SINGLETON_NAME):
        _clientWrapper = Engine.get_singleton(SINGLETON_NAME)
        _clientWrapper.rustore_get_app_update_info_success.connect(_on_get_app_update_info_success)
        _clientWrapper.rustore_get_app_update_info_failure.connect(_on_get_app_update_info_failure)
        _clientWrapper.rustore_start_update_flow_success.connect(_on_start_update_flow_success)
        _clientWrapper.rustore_start_update_flow_failure.connect(_on_start_update_flow_failure)
        _clientWrapper.rustore_complete_update_failure.connect(_on_complete_update_failure)
        _clientWrapper.rustore_on_state_updated.connect(_on_state_updated)
        _clientWrapper.init(METRIC_TYPE)
        _isInitialized = true


# @return Returns true if registration is successful, otherwise false.
func register_listener() -> bool:
    return _clientWrapper.registerListener()


# @return Returns true if the operation completed successfully, otherwise false.
func unregister_listener() -> bool:
    return _clientWrapper.unregisterListener()


# @brief Checks for available updates.
func get_app_update_info():
    _clientWrapper.getAppUpdateInfo()


func _on_get_app_update_info_success(data: String):
    var obj = RuStoreAppUpdateInfo.new(data)
    on_get_app_update_info_success.emit(obj)


func _on_get_app_update_info_failure(data: String):
    var obj = RuStoreError.new(data)
    on_get_app_update_info_failure.emit(obj)


# @return Returns true if an immediate update is available, otherwise false.
func check_is_immediate_update_allowed() -> bool:
    return _clientWrapper.checkIsImmediateUpdateAllowed()


# @brief Starts the application update download procedure.
func start_update_flow_immediate():
    _clientWrapper.startUpdateFlowImmediate()

func start_update_flow_silent():
    _clientWrapper.startUpdateFlowSilent()

func start_update_flow_delayed():
    _clientWrapper.startUpdateFlowDelayed()

func _on_start_update_flow_success(resultCode: int):
    var flowResult: ERuStoreUpdateFlowResult.Item = resultCode
    on_start_update_flow_success.emit(flowResult)


func _on_start_update_flow_failure(data: String):
    var obj = RuStoreError.new(data)
    on_start_update_flow_failure.emit(obj)


#   ERuStoreAppUpdateType.Item.FLEXIBLE and ERuStoreAppUpdateType.Item.SILENT.
func complete_update_silent():
    _clientWrapper.completeUpdateSilent()

func complete_update_flexible():
    _clientWrapper.completeUpdateFlexible()

func _on_complete_update_failure(data: String):
    var obj = RuStoreError.new(data)
    on_complete_update_failure.emit(obj)


# On state updated
func _on_state_updated(data: String):
    var obj = RuStoreInstallState.new(data)
    on_state_updated.emit(obj)