fix: identify history images and keep failure reasons visible
Community checks / verify (push) Skipped
Verify Frame Flow / verify (push) Successful in 7m29s

This commit is contained in:
渡口浪人
2026-10-18 22:58:48 +08:00
parent 3a5acaa72a
commit cc3fd02eb7
14 changed files with 157 additions and 32 deletions
+31 -1
View File
@@ -152,6 +152,31 @@ class DisplayService:
)
return id
def operation_image(self, device_id, result):
result = dict(result or {})
asset_id = result.get("rendered_asset_id") or result.get("asset_id")
if not asset_id and result.get("image_id") is not None:
# Cloud cleanup removes image_sources; the original upload receipt survives.
row = self.db.one(
"SELECT result FROM operations WHERE device_id=? "
"AND json_extract(result,'$.image_id')=? "
"AND json_extract(result,'$.rendered_asset_id') IS NOT NULL "
"ORDER BY created_at DESC LIMIT 1",
(device_id, result["image_id"]),
)
if row:
original = json.loads(row["result"])
asset_id = original["rendered_asset_id"]
result.setdefault("image_name", original.get("image_name"))
if asset_id:
result.setdefault("asset_id", asset_id)
asset = self.db.one("SELECT * FROM assets WHERE id=?", (asset_id,))
if asset:
result["image_name"] = result.get("image_name") or asset["name"]
if self.assets.path(asset_id).is_file():
result["preview_url"] = f"/api/v1/assets/{asset_id}"
return result or None
def operation(self, id):
op = self.db.one("SELECT * FROM operations WHERE id=?", (id,))
if not op:
@@ -162,7 +187,9 @@ class DisplayService:
device_id=op["device_id"],
created_at=op["created_at"],
updated_at=op["updated_at"],
result=json.loads(op["result"]) if op["result"] else None,
result=self.operation_image(
op["device_id"], json.loads(op["result"]) if op["result"] else None
),
error=json.loads(op["error"]) if op["error"] else None,
request_id=op["request_id"],
client_id=op["client_id"],
@@ -172,6 +199,9 @@ class DisplayService:
def update(self, id, status, result=None, error=None):
if result:
op = self.db.one("SELECT device_id FROM operations WHERE id=?", (id,))
result = self.operation_image(op["device_id"], result)
result.pop("preview_url", None)
row = self.db.one("SELECT result FROM operations WHERE id=?", (id,))
previous = json.loads(row["result"]) if row and row["result"] else {}
for key in ("photo_attempts", "upload_intent", "sync_observations"):