thegates/app/scripts/api/featured_gates.gd

53 lines
1.5 KiB
GDScript

extends Node
const KEY_URL = "url"
const KEY_TITLE = "title"
const KEY_DESCRIPTION = "description"
const KEY_ICON = "icon"
const KEY_IS_SPECIAL = "is_special"
@export var api: ApiSettings
@export var bookmarks: Bookmarks
var result_str: String = "{}"
func _ready() -> void:
bookmarks.on_ready.connect(on_bookmarks_ready)
if bookmarks.is_ready: on_bookmarks_ready()
func on_bookmarks_ready() -> void:
if bookmarks.gates.size() > 0: return
await featured_gates_request()
Debug.logclr("======== Featured gates ========", Color.LIGHT_SEA_GREEN)
var gates = JSON.parse_string(result_str)
if gates == null or gates.is_empty():
Debug.logclr("No featured gates found", Color.YELLOW)
return
for gate in gates:
Debug.logr(gate["url"])
star_gate(gate)
func featured_gates_request() -> void:
var callback = func(_result, code, _headers, body):
if code == 200:
result_str = body.get_string_from_utf8()
else: Debug.logclr("Featured gates request failed. Code " + str(code), Color.RED)
var err = await Backend.request(api.featured_gates, callback)
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send featured gates request", Color.RED)
func star_gate(gate_d: Dictionary) -> void:
var gate = Gate.create(gate_d[KEY_URL], gate_d[KEY_TITLE], gate_d[KEY_DESCRIPTION], gate_d[KEY_ICON], "")
gate.is_special = gate_d[KEY_IS_SPECIAL]
gate.featured = true
bookmarks.star(gate)
var icon = await FileDownloader.download(gate.icon_url)
bookmarks.update_icon(gate.url, icon)