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
+58 -2
View File
@@ -1,7 +1,7 @@
import json
from uuid import uuid4
from fastapi import Depends
from fastapi import Depends, Query
from fastapi.responses import Response
from pydantic import Field
@@ -24,6 +24,50 @@ class ThumbnailRequest(StrictModel):
def install_thumbnails(app, service):
from pigway_frame_flow.display.thumbnail_gallery import record, recover
recover(service)
@app.get(
"/api/v1/thumbnail-devices", dependencies=[Depends(require("images:read"))]
)
def devices():
return [
{
"id": "watch",
"name": "Watch",
"width": 410,
"height": 502,
"transport_connected": False,
"status": "generation_only",
}
]
@app.get("/api/v1/thumbnails", dependencies=[Depends(require("images:read"))])
def gallery(offset: int = Query(0, ge=0), limit: int = Query(50, ge=1, le=200)):
rows = service.db.all(
"SELECT assets.id,asset_sources.payload FROM assets JOIN asset_sources ON asset_sources.asset_id=assets.id "
"WHERE json_extract(asset_sources.payload,'$.type')='thumbnail' "
"ORDER BY assets.created_at DESC,assets.id DESC LIMIT ? OFFSET ?",
(limit, offset),
)
total = service.db.one(
"SELECT COUNT(*) AS count FROM assets JOIN asset_sources ON asset_sources.asset_id=assets.id "
"WHERE json_extract(asset_sources.payload,'$.type')='thumbnail'"
)["count"]
return {
"items": [
{
**service.assets.info(row["id"]),
"thumbnail": json.loads(row["payload"]),
}
for row in rows
],
"total": total,
"offset": offset,
"limit": limit,
}
@app.get("/api/v1/thumbnail-plans", dependencies=[Depends(require("images:read"))])
def plans():
return [
@@ -113,6 +157,18 @@ def install_thumbnails(app, service):
@app.post("/api/v1/thumbnails/generate", dependencies=[Depends(require("admin"))])
def generate(request: ThumbnailRequest):
return service.assets.put(
asset = service.assets.put(
image(request), request.plan.name + ".jpg", "generated"
)
record(
service,
asset["asset_id"],
{
"width": request.plan.width,
"height": request.plan.height,
"plan": request.plan.model_dump(),
"generated_at": asset["created_at"],
"source": {"source_id": request.source_id, "item_id": request.item_id},
},
)
return asset