feat: 增加桌面端登录、视频清单和封面缓存
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
from server.services.adb import Adb
|
||||
from server.services.device import DeviceProfile
|
||||
from server.services.profile_poller import profile_poller
|
||||
from server.services.rapt import rapt
|
||||
from server.services.sessions import sessions
|
||||
|
||||
|
||||
class LoginService:
|
||||
def guest(self, raw_device: dict | None) -> dict:
|
||||
device = DeviceProfile.merge(raw_device)
|
||||
token = rapt.guest_token(device)
|
||||
return self._finish(token, device)
|
||||
|
||||
def password(self, email: str, password: str, raw_device: dict | None) -> dict:
|
||||
device = DeviceProfile.merge(raw_device)
|
||||
token = rapt.email_token(email.strip(), password, device)
|
||||
return self._finish(token, device)
|
||||
|
||||
def adb(self, serial: str, adb_path: str, source: str, raw_device: dict | None) -> dict:
|
||||
if not serial.strip():
|
||||
raise RuntimeError("请选择设备")
|
||||
adb = Adb.locate(adb_path.strip())
|
||||
if source == "device":
|
||||
device = adb.read_profile(serial.strip())
|
||||
chosen = DeviceProfile.merge(raw_device) if raw_device else None
|
||||
if chosen is not None and raw_device:
|
||||
if (raw_device.get("fingerprint") or "").strip():
|
||||
device.fingerprint = chosen.fingerprint
|
||||
if (raw_device.get("language") or "").strip():
|
||||
device.language = chosen.language
|
||||
else:
|
||||
device = DeviceProfile.merge(raw_device)
|
||||
token = adb.read_token(serial.strip())
|
||||
return self._finish(token, device)
|
||||
|
||||
def current(self, token: str, raw_device: dict | None) -> dict:
|
||||
token = token.strip()
|
||||
if not token:
|
||||
raise RuntimeError("请先登录")
|
||||
device = sessions.bind(token, DeviceProfile.merge(raw_device))
|
||||
profile = rapt.user_info(token, device)
|
||||
self._watch(token, profile)
|
||||
return {"token": token, "profile": profile, "device": device.as_dict()}
|
||||
|
||||
def _finish(self, token: str, device: DeviceProfile) -> dict:
|
||||
bound = sessions.bind(token, device, replace=True)
|
||||
profile = rapt.user_info(token, bound)
|
||||
self._watch(token, profile)
|
||||
return {"token": token, "profile": profile, "device": bound.as_dict()}
|
||||
|
||||
@staticmethod
|
||||
def _watch(token: str, profile: dict) -> None:
|
||||
sessions.remember(token, profile)
|
||||
profile_poller.ensure(token)
|
||||
|
||||
|
||||
login = LoginService()
|
||||
Reference in New Issue
Block a user