|
|
|
@@ -5,6 +5,8 @@ signal credits_failed(message: String)
|
|
|
|
|
signal store_operation_completed(message: String)
|
|
|
|
|
signal spin_resolved(reward_key: String, reward_label: String, coins_won: int)
|
|
|
|
|
signal spin_config_loaded
|
|
|
|
|
signal award_received(amount: int, reason: String)
|
|
|
|
|
signal ledger_changed
|
|
|
|
|
|
|
|
|
|
const EndpointConfig := preload("res://scripts/autoload/api_endpoint_config.gd")
|
|
|
|
|
const DEFAULT_URL := "https://us3q.ranaze.com/api/credits"
|
|
|
|
@@ -21,9 +23,13 @@ var loading := false
|
|
|
|
|
var request: HTTPRequest
|
|
|
|
|
var action_request: HTTPRequest
|
|
|
|
|
var spin_config_request: HTTPRequest
|
|
|
|
|
var ledger_request: HTTPRequest
|
|
|
|
|
var request_token := ""
|
|
|
|
|
var api_url := DEFAULT_URL
|
|
|
|
|
var pending_store_action := ""
|
|
|
|
|
var ledger: Array = []
|
|
|
|
|
var ledger_next_before := ""
|
|
|
|
|
var ledger_append := false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
@@ -42,6 +48,10 @@ func _ready() -> void:
|
|
|
|
|
spin_config_request.timeout = 20.0
|
|
|
|
|
spin_config_request.request_completed.connect(_on_spin_config_completed)
|
|
|
|
|
add_child(spin_config_request)
|
|
|
|
|
ledger_request = HTTPRequest.new()
|
|
|
|
|
ledger_request.timeout = 20.0
|
|
|
|
|
ledger_request.request_completed.connect(_on_ledger_completed)
|
|
|
|
|
add_child(ledger_request)
|
|
|
|
|
AuthState.auth_changed.connect(_on_auth_changed)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -67,6 +77,43 @@ func apply_status(parsed: Dictionary) -> void:
|
|
|
|
|
credits_changed.emit()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func apply_award_response(parsed: Dictionary) -> void:
|
|
|
|
|
var status: Variant = parsed.get("credits", null)
|
|
|
|
|
if typeof(status) == TYPE_DICTIONARY:
|
|
|
|
|
apply_status(status)
|
|
|
|
|
for award_variant in parsed.get("creditAwards", []):
|
|
|
|
|
if typeof(award_variant) != TYPE_DICTIONARY:
|
|
|
|
|
continue
|
|
|
|
|
var award: Dictionary = award_variant
|
|
|
|
|
var amount := int(award.get("amount", 0))
|
|
|
|
|
if amount > 0:
|
|
|
|
|
award_received.emit(amount, str(award.get("description", "Learning reward")))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func load_ledger(before: String = "") -> void:
|
|
|
|
|
if not AuthState.can_send_authenticated_request() or ledger_request.get_http_client_status() != HTTPClient.STATUS_DISCONNECTED:
|
|
|
|
|
return
|
|
|
|
|
ledger_append = not before.is_empty()
|
|
|
|
|
var suffix := "/ledger?limit=20"
|
|
|
|
|
if not before.is_empty():
|
|
|
|
|
suffix += "&before=%s" % before.uri_encode()
|
|
|
|
|
ledger_request.request(api_url + suffix, PackedStringArray(["Authorization: Bearer %s" % AuthState.access_token]), HTTPClient.METHOD_GET)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _on_ledger_completed(result: int, response_code: int, _headers: PackedStringArray, body: PackedByteArray) -> void:
|
|
|
|
|
if result != HTTPRequest.RESULT_SUCCESS or response_code < 200 or response_code >= 300:
|
|
|
|
|
credits_failed.emit("Coin history could not be loaded.")
|
|
|
|
|
return
|
|
|
|
|
var parsed: Variant = JSON.parse_string(body.get_string_from_utf8())
|
|
|
|
|
if typeof(parsed) != TYPE_DICTIONARY:
|
|
|
|
|
return
|
|
|
|
|
var items: Array = parsed.get("items", [])
|
|
|
|
|
ledger = ledger + items if ledger_append else items
|
|
|
|
|
var cursor: Variant = parsed.get("nextBefore", null)
|
|
|
|
|
ledger_next_before = "" if cursor == null else str(cursor)
|
|
|
|
|
ledger_changed.emit()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _on_completed(result: int, response_code: int, _headers: PackedStringArray, body: PackedByteArray) -> void:
|
|
|
|
|
loading = false
|
|
|
|
|
if response_code == 401:
|
|
|
|
@@ -173,6 +220,8 @@ func _on_auth_changed() -> void:
|
|
|
|
|
bank_cycle = 0
|
|
|
|
|
products = []
|
|
|
|
|
spin_rewards = []
|
|
|
|
|
ledger = []
|
|
|
|
|
ledger_next_before = ""
|
|
|
|
|
loaded = false
|
|
|
|
|
loading = false
|
|
|
|
|
if request.get_http_client_status() != HTTPClient.STATUS_DISCONNECTED:
|
|
|
|
|