fix: identify history images and keep failure reasons visible
This commit is contained in:
@@ -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"):
|
||||
|
||||
Reference in New Issue
Block a user