Add read-only NAS and WebDAV photo sources with random scheduling

This commit is contained in:
Pigway
2026-10-05 00:52:39 +08:00
parent b530e32c65
commit f5ab1ade77
18 changed files with 5578 additions and 84 deletions
+8
View File
@@ -12,9 +12,11 @@ from pigway_frame_flow.models import (
DisplayRequest,
FutureContent,
ImageContent,
PhotoSourceContent,
TemplateContent,
URLContent,
)
from pigway_frame_flow.providers.photo_sources import PhotoSources
from pigway_frame_flow.renderers.images import convert
from pigway_frame_flow.storage.database import encode, now_iso
@@ -23,6 +25,7 @@ class DisplayService:
"""One persistent queue; injected driver registry. No vendor imports."""
def __init__(self, db, settings, registry: DriverRegistry, assets, renderer):
self.photo_sources = PhotoSources(db, settings, assets)
self.db, self.settings, self.registry, self.assets, self.renderer = (
db,
settings,
@@ -49,6 +52,8 @@ class DisplayService:
)
if isinstance(request.content, TemplateContent):
self.renderer.info(request.content.template)
if isinstance(request.content, PhotoSourceContent):
self.photo_sources.get(request.content.source_id)
if writing and not self.settings.mock and not self.settings.write_enabled:
raise FlowError(E.WRITE_DISABLED, "Real device writes are disabled", 403)
@@ -167,6 +172,9 @@ class DisplayService:
(asset["asset_id"], encode(source)),
)
return asset
if isinstance(content, PhotoSourceContent):
data, name = self.photo_sources.read(content.source_id, content.item_id)
return self.assets.put(convert(data, content.fit, content.profile), name)
if isinstance(content, URLContent):
data = self.assets.fetch_url(content.url)
elif isinstance(content, ImageContent) and content.asset_id: