Renamed search and add functions for Steam to _handle_steam_*, Added ItchIO handlers Updated Steam Add to check and see if we have already fetched the App information, and if so, use it, otherwise try to search. *Note* Need to clear after adding, so we don't accidently add to the wrong user, and need to validate if the game has already been added or not. Added Logic to for ItchIO.
119 lines
3.2 KiB
GDScript
119 lines
3.2 KiB
GDScript
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()
|