2026-03-09 03:03:51 -05:00
|
|
|
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:
|
2026-03-10 10:27:40 -05:00
|
|
|
%SteamSearch.pressed.connect(_handle_steam_search)
|
|
|
|
|
%AddSteamGame.pressed.connect(_handle_steam_add)
|
|
|
|
|
%ItchFetch.pressed.connect(_handle_itch_search)
|
|
|
|
|
%ItchAdd.pressed.connect(_handle_itch_add)
|
2026-03-09 03:03:51 -05:00
|
|
|
|
2026-03-10 10:27:40 -05:00
|
|
|
#region Steam Search
|
|
|
|
|
func _handle_steam_search() -> void:
|
2026-03-09 03:03:51 -05:00
|
|
|
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()
|
|
|
|
|
|
2026-03-10 10:27:40 -05:00
|
|
|
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()
|
2026-03-09 03:03:51 -05:00
|
|
|
|
2026-03-10 10:27:40 -05:00
|
|
|
if app_id == -1: return
|
2026-03-09 03:03:51 -05:00
|
|
|
|
2026-03-10 10:27:40 -05:00
|
|
|
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)
|
2026-03-09 03:03:51 -05:00
|
|
|
if data:
|
2026-03-10 10:27:40 -05:00
|
|
|
%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
|
2026-03-09 03:03:51 -05:00
|
|
|
|
|
|
|
|
func populate_games() -> void:
|
|
|
|
|
for game in chatter.steam_games:
|
|
|
|
|
var inst: GameEntry = GAME_ENTRY.instantiate()
|
|
|
|
|
inst.steam_app_id = game
|
2026-03-12 01:34:24 -05:00
|
|
|
inst.chatter = chatter
|
2026-03-09 03:03:51 -05:00
|
|
|
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]
|
2026-03-12 01:34:24 -05:00
|
|
|
inst.chatter = chatter
|
2026-03-09 03:03:51 -05:00
|
|
|
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()
|