extends PanelContainer class_name UserGamesPanel const GAME_ENTRY = preload("res://UI/Controls/game_entry.tscn") @onready var splitter: HSplitContainer = %Splitter var chatter: Chatter: set(value): chatter = value if not chatter: return clear() populate_games() func _ready() -> void: %SteamSearch.pressed.connect(_handle_steam_search) %AddSteamGame.pressed.connect(_handle_steam_add) %ItchFetch.pressed.connect(_handle_itch_search) %ItchAdd.pressed.connect(_handle_itch_add) #region Steam Search func _handle_steam_search() -> void: var info: String = %SteamGameInput.text var app_id: int = -1 if info.begins_with("https:"): var parts := Array(info.split("/")) parts.reverse() for part in parts: if part.is_valid_int(): app_id = part.to_int() break elif info.is_valid_int(): app_id = info.to_int() if app_id == -1: return var data: SteamAppData = await %SteamService.get_steam_app_data(app_id) if data: %SteamAppPanel.display_app_info(data) %SteamAppPanel.show() func _handle_steam_add() -> void: if %SteamAppPanel.data: var app: SteamAppData = %SteamAppPanel.data chatter.steam_games.append(app.steam_app_id) else: var info: String = %SteamGameInput.text var app_id: int = -1 if info.begins_with("https:"): var parts = Array(info.split("/")) parts.reverse() for part in parts: if part.is_valid_int(): app_id = part.to_int() break elif info.is_valid_int(): app_id = info.to_int() if app_id == -1: return var data: SteamAppData = await %SteamService.get_steam_app_data(app_id) if data: chatter.steam_games.append(app_id) chatter.save() clear() populate_games() #endregion #region Itch Search func _handle_itch_search() -> void: var info: String = %ItchInput.text if not (info.begins_with("http://") or info.begins_with("https://")): return var data: ItchIOAppData = await %ItchIOService.get_itch_app_data(info) if data: %ItchAppPanel.display_app_info(data) %ItchAppPanel.show() func _handle_itch_add() -> void: if %ItchAppPanel.data: var app: ItchIOAppData = %ItchAppPanel.data chatter.itch_games[app.title] = app.url else: var info: String = %ItchInput.text if not (info.begins_with("http://") or info.begins_with("https://")): return var data: ItchIOAppData = await %ItchIOService.get_itch_app_data(info) if data: chatter.itch_games[data.title] = data.url chatter.save() clear() populate_games() #endregion func populate_games() -> void: for game in chatter.steam_games: var inst: GameEntry = GAME_ENTRY.instantiate() inst.steam_app_id = game inst.type = GameEntry.Type.STEAM inst.game_info_steam_pressed.connect(func(x: SteamAppData): %SteamAppPanel.show() %SteamAppPanel.display_app_info(x) ) %SteamList.add_child(inst) for game in chatter.itch_games: var inst: GameEntry = GAME_ENTRY.instantiate() inst.itchio_app_url = chatter.itch_games[game] inst.type = GameEntry.Type.ITCHIO inst.game_info_itchio_pressesd.connect(func(x: ItchIOAppData): %ItchAppPanel.show() %ItchAppPanel.display_app_info(x) ) %ItchList.add_child(inst) func clear() -> void: for node in %SteamList.get_children(): node.queue_free() for node in %ItchList.get_children(): node.queue_free() %SteamAppPanel.clear() %ItchAppPanel.clear()