76 lines
2.9 KiB
GDScript
76 lines
2.9 KiB
GDScript
@tool
|
|
extends Control
|
|
|
|
const TwitchRewardEditorService = preload("res://addons/twitcher/editor/inspector/twitch_reward_editor_service.gd")
|
|
const TwitchEditorSettings = preload("res://addons/twitcher/editor/twitch_editor_settings.gd")
|
|
const TwitchEditorNodeUtils = preload("res://addons/twitcher/editor/twitch_editor_node_utils.gd")
|
|
|
|
@onready var file_select: FileSelect = %FileSelect
|
|
@onready var fetch_all_rewards: Button = %FetchAllRewards
|
|
@onready var fetch_manageable_rewards: Button = %FetchManageableRewards
|
|
@onready var info: Label = %Info
|
|
|
|
@export var token: OAuthToken
|
|
@export var setting: OAuthSetting
|
|
|
|
func _ready() -> void:
|
|
fetch_all_rewards.pressed.connect(_on_fetch_all)
|
|
fetch_manageable_rewards.pressed.connect(_on_fetch_manageable)
|
|
file_select.file_selected.connect(_on_file_selected)
|
|
file_select.path = TwitchEditorSettings.reward_folder
|
|
|
|
|
|
func _on_file_selected(path: String) -> void:
|
|
TwitchEditorSettings.reward_folder = path
|
|
|
|
|
|
func _download_rewards(all: bool) -> void:
|
|
var api: TwitchAPI = TwitchEditorNodeUtils.create_api(token, setting)
|
|
add_child(api)
|
|
var media_loader: TwitchMediaLoader = TwitchEditorNodeUtils.create_media_loader(api)
|
|
add_child(media_loader)
|
|
var broadcaster: TwitchUser = await TwitchService.get_current_user_via_api(api)
|
|
var rewards: Array[TwitchCustomReward] = await _fetch_rewards(api, all, broadcaster)
|
|
var twitch_rewards: Array[TwitchReward] = []
|
|
for reward in rewards:
|
|
var twitch_reward: TwitchReward = TwitchReward.new()
|
|
twitch_reward.broadcaster_user = broadcaster
|
|
TwitchRewardEditorService.convert_to_twitch_reward(twitch_reward, reward, media_loader)
|
|
var file_name: String = twitch_reward.title.to_snake_case()
|
|
file_name = RegEx.create_from_string("[^\\w_-]").sub(file_name, "")
|
|
var folder: String = file_select.path
|
|
if not folder: folder = "res://"
|
|
printt(twitch_reward.title, twitch_reward.id)
|
|
|
|
ResourceSaver.save(twitch_reward, folder + "/" + file_name + ".tres")
|
|
media_loader.queue_free()
|
|
api.queue_free()
|
|
|
|
|
|
func _fetch_rewards(api: TwitchAPI, all: bool, broadcaster: TwitchUser) -> Array[TwitchCustomReward]:
|
|
if not TwitchEditorSettings.is_valid():
|
|
_info("Editor is not authorizd yet. Use 'Test Credentials' from the previous page to authorize the editor.")
|
|
TwitchEditorSettings.editor_oauth_token.authorized.connect(func(): _info(""), CONNECT_ONE_SHOT)
|
|
return []
|
|
|
|
|
|
var opt: TwitchGetCustomReward.Opt = TwitchGetCustomReward.Opt.create()
|
|
opt.only_manageable_rewards = not all
|
|
var response: TwitchGetCustomReward.Response = await api.get_custom_reward(opt, broadcaster.id)
|
|
if response.response.response_code == 200:
|
|
return response.data
|
|
var response_data: String = response.response.response_data.get_string_from_utf8()
|
|
_info("Couldn't fetch Rewards cause of %s" % response_data)
|
|
return []
|
|
|
|
|
|
func _info(text: String) -> void:
|
|
info.text = text
|
|
|
|
|
|
func _on_fetch_all() -> void:
|
|
_download_rewards(true)
|
|
|
|
|
|
func _on_fetch_manageable() -> void:
|
|
_download_rewards(false)
|