feat: 增加桌面端登录、视频清单和封面缓存

This commit is contained in:
Nixevol
2026-09-27 03:57:00 +08:00
parent 0c1e04464a
commit cc930cd1ed
69 changed files with 9895 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
import threading
from server.services.device import DeviceProfile
class SessionStore:
def __init__(self) -> None:
self._lock = threading.Lock()
self._devices: dict[str, DeviceProfile] = {}
self._active = ""
self._profile: dict | None = None
self._revision = 0
def bind(self, token: str, device: DeviceProfile, replace: bool = False) -> DeviceProfile:
with self._lock:
if replace or token not in self._devices:
self._devices[token] = device
return self._devices[token]
def device_for(self, token: str) -> DeviceProfile | None:
with self._lock:
return self._devices.get(token)
def remember(self, token: str, profile: dict) -> None:
with self._lock:
self._active = token
self._profile = dict(profile)
self._revision += 1
def set_profile(self, token: str, profile: dict) -> bool:
with self._lock:
if token != self._active:
return False
self._profile = dict(profile)
self._revision += 1
return True
def active_token(self) -> str:
with self._lock:
return self._active
def snapshot(self) -> dict | None:
with self._lock:
if not self._active or self._profile is None:
return None
return {"profile": dict(self._profile), "revision": self._revision}
def clear(self, token: str) -> None:
with self._lock:
self._devices.pop(token, None)
if self._active == token:
self._active = ""
self._profile = None
sessions = SessionStore()