fix: stabilize web registration and asset loading
This commit is contained in:
@@ -14,6 +14,7 @@ const ICON_SCRIPT: Script = preload("res://scenes/ui/SettingsPanelIcon.gd")
|
||||
const TOGGLE_SCRIPT: Script = preload("res://scenes/ui/SettingsToggle.gd")
|
||||
const SLIDER_SCRIPT: Script = preload("res://scenes/ui/SettingsSlider.gd")
|
||||
const BADGE_TEXTURE_PATH: String = "res://assets/ui/settings/settings_whale_badge_asset_v1.png"
|
||||
const WebFilePicker = preload("res://_Core/utils/WebFilePicker.gd")
|
||||
|
||||
const TEXT_COLOR: Color = Color(0.188, 0.294, 0.424)
|
||||
const MUTED_COLOR: Color = Color(0.560, 0.639, 0.733)
|
||||
@@ -22,6 +23,7 @@ const SOFT_BLUE: Color = Color(0.918, 0.961, 0.992, 0.92)
|
||||
const DANGER_COLOR: Color = Color(0.894, 0.392, 0.357)
|
||||
const MOVEMENT_ACTIONS: Array[String] = ["move_left", "move_right", "move_up", "move_down"]
|
||||
const AVATAR_NATIVE_FILE_FILTERS: Array[String] = ["*.png,*.jpg,*.jpeg,*.webp"]
|
||||
const WEB_FILE_MAX_BYTES: int = 8 * 1024 * 1024
|
||||
|
||||
const CATEGORIES: Array[Dictionary] = [
|
||||
{"id": "basic", "label": "基础", "icon": "basic"},
|
||||
@@ -71,6 +73,7 @@ var _savedSettings: Dictionary = DEFAULT_SETTINGS.duplicate(true)
|
||||
var _isOpen: bool = false
|
||||
var _transitionTween: Tween
|
||||
var _avatarUploadPending: bool = false
|
||||
var _webFilePicker: RefCounted = WebFilePicker.new()
|
||||
|
||||
func _ready() -> void:
|
||||
visible = false
|
||||
@@ -976,6 +979,9 @@ func _on_reconnect_pressed() -> void:
|
||||
_statusLabel.text = "已请求重新连接聊天服务"
|
||||
|
||||
func _on_upload_avatar_pressed() -> void:
|
||||
if _try_open_web_avatar_file_picker():
|
||||
_set_account_status("请选择头像图片")
|
||||
return
|
||||
if _open_macos_avatar_file_dialog():
|
||||
return
|
||||
if _try_open_native_avatar_file_picker():
|
||||
@@ -983,6 +989,27 @@ func _on_upload_avatar_pressed() -> void:
|
||||
return
|
||||
_set_account_status("系统文件选择器暂时不可用")
|
||||
|
||||
func _try_open_web_avatar_file_picker() -> bool:
|
||||
if OS.get_name() != "Web" or _webFilePicker == null:
|
||||
return false
|
||||
return bool(_webFilePicker.call("open", ".png,.jpg,.jpeg,.webp", WEB_FILE_MAX_BYTES, _on_web_avatar_file_selected))
|
||||
|
||||
func _on_web_avatar_file_selected(status: String, fileName: String, _mimeType: String, base64Data: String) -> void:
|
||||
if status == "cancel":
|
||||
_set_account_status("已取消头像选择")
|
||||
return
|
||||
if status == "too_large":
|
||||
_set_account_status("头像图片不能超过8MB")
|
||||
return
|
||||
if status != "ok":
|
||||
_set_account_status("浏览器读取头像失败")
|
||||
return
|
||||
var path := WebFilePicker.save_base64_file(base64Data, fileName, "avatar")
|
||||
if path.is_empty():
|
||||
_set_account_status("头像图片暂存失败")
|
||||
return
|
||||
_on_avatar_file_selected(path)
|
||||
|
||||
func _try_open_native_avatar_file_picker() -> bool:
|
||||
if DisplayServer.get_name() == "headless":
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user