From 7587946d51fd00f9912d6ffb1e9b092061b6be99 Mon Sep 17 00:00:00 2001 From: thsrite Date: Wed, 10 Jan 2024 10:53:32 +0800 Subject: [PATCH] fix c674e320 --- app/chain/mediaserver.py | 24 ++---------------------- app/modules/emby/emby.py | 21 ++++++++++++++++++--- app/modules/jellyfin/jellyfin.py | 21 ++++++++++++++++++--- app/schemas/mediaserver.py | 1 - 4 files changed, 38 insertions(+), 29 deletions(-) diff --git a/app/chain/mediaserver.py b/app/chain/mediaserver.py index 64d1d621..68df03b9 100644 --- a/app/chain/mediaserver.py +++ b/app/chain/mediaserver.py @@ -48,33 +48,13 @@ class MediaServerChain(ChainBase): """ 获取媒体服务器正在播放信息 """ - playing_items = self.run_module("mediaserver_playing", count=100, server=server, username=username) - # 判断是否在同步的媒体数据中 - exists_items = [] - for item in playing_items: - if self.dboper.exists(mtype=item.type, - title=item.title, - year=item.year): - exists_items.append(item) - if len(exists_items) == count: - break - return exists_items + return self.run_module("mediaserver_playing", count=count, server=server, username=username) def latest(self, count: int = 20, server: str = None, username: str = None) -> List[schemas.MediaServerPlayItem]: """ 获取媒体服务器最新入库条目 """ - latest_items = self.run_module("mediaserver_latest", count=100, server=server, username=username) - # 判断是否在同步的媒体数据中 - exists_items = [] - for item in latest_items: - if self.dboper.exists(mtype=item.type, - title=item.title, - year=item.subtitle): - exists_items.append(item) - if len(exists_items) == count: - break - return exists_items + return self.run_module("mediaserver_latest", count=count, server=server, username=username) def get_play_url(self, server: str, item_id: Union[str, int]) -> Optional[str]: """ diff --git a/app/modules/emby/emby.py b/app/modules/emby/emby.py index 9306ae68..d47ac440 100644 --- a/app/modules/emby/emby.py +++ b/app/modules/emby/emby.py @@ -971,15 +971,23 @@ class Emby(metaclass=Singleton): else: user = self.user req_url = (f"{self._host}Users/{user}/Items/Resume?" - f"Limit={num}&MediaTypes=Video&api_key={self._apikey}&Fields=ProductionYear") + f"Limit=100&MediaTypes=Video&api_key={self._apikey}&Fields=ProductionYear,Path") try: res = RequestUtils().get_res(req_url) if res: result = res.json().get("Items") or [] ret_resume = [] + # 用户媒体库列表(排除黑名单) + user_librarys = self.get_librarys(username=user) for item in result: + if len(ret_resume) == num: + break if item.get("Type") not in ["Movie", "Episode"]: continue + item_path = item.get("Path") + if item_path and user_librarys and not any( + library.name in item_path for library in user_librarys): + continue item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value link = self.get_play_url(item.get("Id")) if item_type == MediaType.MOVIE.value: @@ -1002,7 +1010,6 @@ class Emby(metaclass=Singleton): ret_resume.append(schemas.MediaServerPlayItem( id=item.get("Id"), title=title, - year=item.get("ProductionYear"), subtitle=subtitle, type=item_type, image=image, @@ -1027,15 +1034,23 @@ class Emby(metaclass=Singleton): else: user = self.user req_url = (f"{self._host}Users/{user}/Items/Latest?" - f"Limit={num}&MediaTypes=Video&api_key={self._apikey}&Fields=ProductionYear") + f"Limit=100&MediaTypes=Video&api_key={self._apikey}&Fields=ProductionYear,Path") try: res = RequestUtils().get_res(req_url) if res: result = res.json() or [] ret_latest = [] + # 用户媒体库列表(排除黑名单) + user_librarys = self.get_librarys(username=user) for item in result: + if len(ret_latest) == num: + break if item.get("Type") not in ["Movie", "Series"]: continue + item_path = item.get("Path") + if item_path and user_librarys and not any( + library.name in item_path for library in user_librarys): + continue item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value link = self.get_play_url(item.get("Id")) image = self.__get_local_image_by_id(item_id=item.get("Id")) diff --git a/app/modules/jellyfin/jellyfin.py b/app/modules/jellyfin/jellyfin.py index 4b298a85..b68359f3 100644 --- a/app/modules/jellyfin/jellyfin.py +++ b/app/modules/jellyfin/jellyfin.py @@ -654,15 +654,23 @@ class Jellyfin(metaclass=Singleton): else: user = self.user req_url = (f"{self._host}Users/{user}/Items/Resume?" - f"Limit={num}&MediaTypes=Video&api_key={self._apikey}&Fields=ProductionYear") + f"Limit=100&MediaTypes=Video&api_key={self._apikey}&Fields=ProductionYear,Path") try: res = RequestUtils().get_res(req_url) if res: result = res.json().get("Items") or [] ret_resume = [] + # 用户媒体库列表(排除黑名单) + user_librarys = self.get_librarys(username=user) for item in result: + if len(ret_resume) == num: + break if item.get("Type") not in ["Movie", "Episode"]: continue + item_path = item.get("Path") + if item_path and user_librarys and not any( + library.name in item_path for library in user_librarys): + continue item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value link = self.get_play_url(item.get("Id")) if item.get("BackdropImageTags"): @@ -679,7 +687,6 @@ class Jellyfin(metaclass=Singleton): ret_resume.append(schemas.MediaServerPlayItem( id=item.get("Id"), title=title, - year=item.get("ProductionYear"), subtitle=subtitle, type=item_type, image=image, @@ -704,15 +711,23 @@ class Jellyfin(metaclass=Singleton): else: user = self.user req_url = (f"{self._host}Users/{user}/Items/Latest?" - f"Limit={num}&MediaTypes=Video&api_key={self._apikey}&Fields=ProductionYear") + f"Limit=100&MediaTypes=Video&api_key={self._apikey}&Fields=ProductionYear,Path") try: res = RequestUtils().get_res(req_url) if res: result = res.json() or [] ret_latest = [] + # 用户媒体库列表(排除黑名单) + user_librarys = self.get_librarys(username=user) for item in result: + if len(ret_latest) == num: + break if item.get("Type") not in ["Movie", "Series"]: continue + item_path = item.get("Path") + if item_path and user_librarys and not any( + library.name in item_path for library in user_librarys): + continue item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value link = self.get_play_url(item.get("Id")) image = self.__get_local_image_by_id(item_id=item.get("Id")) diff --git a/app/schemas/mediaserver.py b/app/schemas/mediaserver.py index 373efa58..582ad2d7 100644 --- a/app/schemas/mediaserver.py +++ b/app/schemas/mediaserver.py @@ -151,7 +151,6 @@ class MediaServerPlayItem(BaseModel): """ id: Optional[Union[str, int]] = None title: Optional[str] = None - year: Optional[str] = None subtitle: Optional[str] = None type: Optional[str] = None image: Optional[str] = None