Complete CCS results and rating flow

This commit is contained in:
hz
2026-07-15 11:08:13 -05:00
parent 9f379cda5c
commit 52d435fa2e
14 changed files with 402 additions and 47 deletions
+24 -6
View File
@@ -8,6 +8,8 @@ signal attempt_changed
signal orders_changed
signal history_changed
signal prediction_changed
signal rating_changed
signal attempt_abandoned
signal report_submitted(report_id: String)
signal report_failed(message: String)
signal request_failed(message: String)
@@ -23,6 +25,7 @@ var attempt := {}
var orders: Array = []
var history: Array = []
var prediction := {}
var rating := {"elo": 1000, "ratedCaseCount": 0}
var is_loading := false
var pending_action := ""
var queue: Array = []
@@ -78,6 +81,10 @@ func load_prediction() -> void:
_send("prediction", HTTPClient.METHOD_GET, "/prediction")
func load_rating() -> void:
_send("rating", HTTPClient.METHOD_GET, "/ratings/me")
func submit_report(attempt_id: String, category: String, details: String) -> void:
_send("report", HTTPClient.METHOD_POST, "/reports", {"attemptId": attempt_id, "category": category, "details": details})
@@ -89,12 +96,21 @@ func adjust_text_scale(delta: float) -> void:
func toggle_highlight(attempt_id: String, region_id: String, start: int, end: int) -> void:
var key := "%s:%s" % [attempt_id, region_id]
var ranges: Array = highlights.get(key, [])
var removed := false
var changed := false
for index in range(ranges.size() - 1, -1, -1):
var item: Dictionary = ranges[index]
if start < int(item.get("end", 0)) and end > int(item.get("start", 0)):
ranges.remove_at(index); removed = true
if not removed: ranges.append({"start": start, "end": end})
var highlight_start := int(item.get("start", 0))
var highlight_end := int(item.get("end", 0))
if start < highlight_end and end > highlight_start:
ranges.remove_at(index)
if highlight_start < start:
ranges.insert(index, {"start": highlight_start, "end": start})
index += 1
if end < highlight_end:
ranges.insert(index, {"start": end, "end": highlight_end})
changed = true
if not changed:
ranges.append({"start": start, "end": end})
highlights[key] = ranges
@@ -124,7 +140,7 @@ func abandon() -> void:
func deadline_unix() -> float:
var value := str(attempt.get("finalOrdersDeadlineUtc", attempt.get("deadlineUtc", "")))
return 0.0 if value.is_empty() or value == "<null>" else Time.get_unix_time_from_datetime_string(value)
return 0.0 if value.is_empty() or value == "<null>" else float(Time.get_unix_time_from_datetime_string(value))
func _send(action: String, method: int, suffix: String, payload: Dictionary = {}) -> void:
@@ -160,7 +176,8 @@ func _on_request_completed(result: int, response_code: int, _headers: PackedStri
return
if response_code == 204:
attempt = {}
attempt_changed.emit()
if action == "abandon": attempt_abandoned.emit()
else: attempt_changed.emit()
return
var parsed: Variant = JSON.parse_string(body.get_string_from_utf8())
if action in ["cases", "orders", "history"] and typeof(parsed) != TYPE_ARRAY:
@@ -174,6 +191,7 @@ func _on_request_completed(result: int, response_code: int, _headers: PackedStri
"orders": orders = parsed; orders_changed.emit()
"history": history = parsed; history_changed.emit()
"prediction": prediction = parsed; prediction_changed.emit()
"rating": rating = parsed; rating_changed.emit()
"report": report_submitted.emit(str(parsed.get("id", "")))
_:
attempt = parsed