refactor: harden client runtime and exports
This commit is contained in:
@@ -8,8 +8,8 @@ extends Control
|
||||
# ============================================================================
|
||||
|
||||
const MOVEMENT_ACTIONS: Array[String] = ["move_left", "move_right", "move_up", "move_down"]
|
||||
const NetworkConfig = preload("res://_Core/utils/NetworkConfig.gd")
|
||||
const API_PATH: String = "/course-resources/datawhale"
|
||||
const REQUEST_TIMEOUT: float = 18.0
|
||||
const PANEL_SIZE: Vector2 = Vector2(1500, 1020)
|
||||
const MIN_MARGIN: Vector2 = Vector2(24, 24)
|
||||
const CARD_SIZE: Vector2 = Vector2(320, 348)
|
||||
@@ -24,7 +24,6 @@ var _overlay: ColorRect
|
||||
var _panel: Control
|
||||
var _grid: GridContainer
|
||||
var _statusLabel: Label
|
||||
var _request: HTTPRequest
|
||||
var _isOpen: bool = false
|
||||
var _transitionTween: Tween
|
||||
|
||||
@@ -124,10 +123,6 @@ func _buildUi() -> void:
|
||||
root.add_child(_buildGridPanel())
|
||||
root.add_child(_buildFooter())
|
||||
|
||||
_request = HTTPRequest.new()
|
||||
_request.timeout = 18.0
|
||||
_request.request_completed.connect(_onRequestCompleted)
|
||||
add_child(_request)
|
||||
_updatePanelAlpha(0.0, 0.0)
|
||||
|
||||
func _buildHeader() -> Control:
|
||||
@@ -222,23 +217,15 @@ func _buildFooter() -> Control:
|
||||
func _fetchCourses() -> void:
|
||||
_statusLabel.text = "正在同步 Datawhale 课程..."
|
||||
_clearChildren(_grid)
|
||||
var err := _request.request("%s%s" % [NetworkConfig.get_api_base_url(), API_PATH])
|
||||
if err != OK:
|
||||
_statusLabel.text = "课程加载失败:%s" % error_string(err)
|
||||
|
||||
func _onRequestCompleted(result: int, responseCode: int, _headers: PackedStringArray, body: PackedByteArray) -> void:
|
||||
if result != HTTPRequest.RESULT_SUCCESS or responseCode < 200 or responseCode >= 300:
|
||||
_statusLabel.text = "课程加载失败,请稍后再试"
|
||||
var api_client := get_node_or_null("/root/ApiClient")
|
||||
if api_client == null or not api_client.has_method("get_json"):
|
||||
_statusLabel.text = "课程服务不可用"
|
||||
return
|
||||
api_client.call("get_json", API_PATH, _onRequestCompleted, false, REQUEST_TIMEOUT)
|
||||
|
||||
var parsed: Variant = JSON.parse_string(body.get_string_from_utf8())
|
||||
if not parsed is Dictionary:
|
||||
_statusLabel.text = "课程数据解析失败"
|
||||
return
|
||||
|
||||
var payload: Dictionary = parsed as Dictionary
|
||||
if not bool(payload.get("success", true)):
|
||||
_statusLabel.text = str(payload.get("message", "课程加载失败"))
|
||||
func _onRequestCompleted(success: bool, payload: Dictionary, error_info: Dictionary) -> void:
|
||||
if not success:
|
||||
_statusLabel.text = str(error_info.get("message", "课程加载失败,请稍后再试"))
|
||||
return
|
||||
|
||||
var data: Variant = payload.get("data", {})
|
||||
|
||||
Reference in New Issue
Block a user