StreamOverlay/UI/Panels/User/user_games.gd

122 lines
3.3 KiB
GDScript3
Raw Permalink Normal View History

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.chatter = chatter
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.chatter = chatter
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()