This commit is contained in:
thsrite 2024-01-08 13:05:48 +08:00
parent c674e32046
commit 4dcefb141a
4 changed files with 48 additions and 14 deletions

View File

@ -20,18 +20,7 @@ def statistic(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
""" """
查询媒体数量统计信息 查询媒体数量统计信息
""" """
media_statistics: Optional[List[schemas.Statistic]] = DashboardChain().media_statistic() return DashboardChain().media_statistic()
if media_statistics:
# 汇总各媒体库统计信息
ret_statistic = schemas.Statistic()
for media_statistic in media_statistics:
ret_statistic.movie_count += media_statistic.movie_count
ret_statistic.tv_count += media_statistic.tv_count
ret_statistic.episode_count += media_statistic.episode_count
ret_statistic.user_count += media_statistic.user_count
return ret_statistic
else:
return schemas.Statistic()
@router.get("/statistic2", summary="媒体数量统计API_TOKEN", response_model=schemas.Statistic) @router.get("/statistic2", summary="媒体数量统计API_TOKEN", response_model=schemas.Statistic)

View File

@ -1,19 +1,50 @@
import json
from typing import Optional, List from typing import Optional, List
from app import schemas from app import schemas
from app.chain import ChainBase from app.chain import ChainBase
from app.db.mediaserver_oper import MediaServerOper
from app.utils.singleton import Singleton from app.utils.singleton import Singleton
class DashboardChain(ChainBase, metaclass=Singleton): class DashboardChain(ChainBase, metaclass=Singleton):
def __init__(self):
super().__init__()
self.dboper = MediaServerOper()
""" """
各类仪表板统计处理链 各类仪表板统计处理链
""" """
def media_statistic(self) -> Optional[List[schemas.Statistic]]:
def media_statistic(self) -> Optional[schemas.Statistic]:
""" """
媒体数量统计 媒体数量统计
""" """
return self.run_module("media_statistic") ret_statistic = schemas.Statistic()
media_statistics = self.run_module("media_statistic")
if media_statistics:
# 汇总各媒体库统计信息
for media_statistic in media_statistics:
ret_statistic.user_count += media_statistic.user_count
# 电影数量
movies = self.dboper.list_by_type(mtype="电影") or []
ret_statistic.movie_count = len(movies)
# 电视剧数量
series = self.dboper.list_by_type(mtype="电视剧") or []
if series:
ret_statistic.tv_count = len(series)
# 剧集数量
for tv in series:
seasoninfo = tv.seasoninfo
if seasoninfo:
if not isinstance(seasoninfo, dict):
seasoninfo = json.loads(seasoninfo)
if seasoninfo.keys():
for season in seasoninfo.keys():
episodes = seasoninfo.get(season) or []
ret_statistic.episode_count += len(episodes)
return ret_statistic
def downloader_info(self) -> schemas.DownloaderInfo: def downloader_info(self) -> schemas.DownloaderInfo:
""" """

View File

@ -65,3 +65,9 @@ class MediaServerOper(DbOper):
if not item: if not item:
return None return None
return str(item.item_id) return str(item.item_id)
def list_by_type(self, mtype: str = None):
"""
获取指定类型的媒体服务器数据
"""
return MediaServerItem.list_by_type(self._db, mtype=mtype)

View File

@ -66,3 +66,11 @@ class MediaServerItem(Base):
return db.query(MediaServerItem).filter(MediaServerItem.title == title, return db.query(MediaServerItem).filter(MediaServerItem.title == title,
MediaServerItem.item_type == mtype, MediaServerItem.item_type == mtype,
MediaServerItem.year == str(year)).first() MediaServerItem.year == str(year)).first()
@staticmethod
@db_query
def list_by_type(db: Session, mtype: str = None):
if mtype:
return db.query(MediaServerItem).filter(MediaServerItem.item_type == mtype).all()
else:
return db.query(MediaServerItem).all()