feat: add a separate watch thumbnail gallery and logical device
Community checks / verify (push) Skipped
Verify Frame Flow / verify (push) Failing after 6m12s

This commit is contained in:
渡口浪人
2026-10-23 15:00:29 +08:00
parent 7178235022
commit 081d8b6ee0
12 changed files with 552 additions and 21 deletions
@@ -0,0 +1,37 @@
"""Separate watch gallery metadata; image files retain existing asset access rules."""
import json
from pigway_frame_flow.storage.database import encode
TARGET_ID = "watch"
def record(service, asset_id, metadata):
service.db.execute(
"INSERT OR REPLACE INTO asset_sources VALUES(?,?)",
(asset_id, encode({**metadata, "type": "thumbnail", "target_id": TARGET_ID})),
)
def recover(service):
# Earlier automatic thumbnails have authoritative operation receipts. Never
# guess that an unrelated image is a thumbnail from its name or dimensions.
rows = service.db.all("SELECT result FROM operations WHERE result IS NOT NULL")
receipts = [json.loads(row["result"]).get("wrist_thumbnail") for row in rows]
receipts += [
json.loads(row["payload"])
for row in service.db.all(
"SELECT payload FROM app_config WHERE key LIKE 'wrist-thumbnail:%'"
)
]
for receipt in receipts:
if not isinstance(receipt, dict) or not receipt.get("asset_id"):
continue
asset_id = receipt["asset_id"]
if service.db.one(
"SELECT id FROM assets WHERE id=?", (asset_id,)
) and not service.db.one(
"SELECT asset_id FROM asset_sources WHERE asset_id=?", (asset_id,)
):
record(service, asset_id, receipt)