diff --git a/app/api/endpoints/mediaserver.py b/app/api/endpoints/mediaserver.py index b1ea2670..ef30e3fc 100644 --- a/app/api/endpoints/mediaserver.py +++ b/app/api/endpoints/mediaserver.py @@ -137,8 +137,9 @@ def playing(server: str, count: int = 12, @router.get("/library", summary="媒体库列表", response_model=List[schemas.MediaServerLibrary]) -def library(server: str, userinfo: schemas.TokenPayload = Depends(verify_token)) -> Any: +def library(server: str, hidden: bool = False, + userinfo: schemas.TokenPayload = Depends(verify_token)) -> Any: """ 获取媒体服务器媒体库列表 """ - return MediaServerChain().librarys(server=server, username=userinfo.username) or [] + return MediaServerChain().librarys(server=server, username=userinfo.username, hidden=hidden) or [] diff --git a/app/chain/mediaserver.py b/app/chain/mediaserver.py index e0441534..eb8acc82 100644 --- a/app/chain/mediaserver.py +++ b/app/chain/mediaserver.py @@ -21,11 +21,11 @@ class MediaServerChain(ChainBase): self.dboper = MediaServerOper() self.mediaserverhelper = MediaServerHelper() - def librarys(self, server: str, username: str = None) -> List[schemas.MediaServerLibrary]: + def librarys(self, server: str, username: str = None, hidden: bool = False) -> List[schemas.MediaServerLibrary]: """ 获取媒体服务器所有媒体库 """ - return self.run_module("mediaserver_librarys", server=server, username=username) + return self.run_module("mediaserver_librarys", server=server, username=username, hidden=hidden) def items(self, server: str, library_id: Union[str, int]) -> List[schemas.MediaServerItem]: """ @@ -85,7 +85,8 @@ class MediaServerChain(ChainBase): logger.info(f"开始同步媒体库 {server_name} 的数据 ...") for library in self.librarys(server_name): # 同步黑名单 跳过 - if library.id not in sync_libraries: + if sync_libraries and library.id not in sync_libraries: + logger.info(f"{server_name} 未在同步媒体库列表中,跳过") continue logger.info(f"正在同步 {server_name} 媒体库 {library.name} ...") library_count = 0 diff --git a/app/modules/emby/__init__.py b/app/modules/emby/__init__.py index 35bda1b8..bc5b17f4 100644 --- a/app/modules/emby/__init__.py +++ b/app/modules/emby/__init__.py @@ -161,13 +161,14 @@ class EmbyModule(_ModuleBase, _MediaServerBase): return media_statistics def mediaserver_librarys(self, server: str, - username: str = None) -> Optional[List[schemas.MediaServerLibrary]]: + username: str = None, + hidden: bool = False) -> Optional[List[schemas.MediaServerLibrary]]: """ 媒体库列表 """ server: Emby = self.get_server(server) if server: - return server.get_librarys(username) + return server.get_librarys(username=username, hidden=hidden) return None def mediaserver_items(self, server: str, library_id: str) -> Optional[Generator]: diff --git a/app/modules/emby/emby.py b/app/modules/emby/emby.py index aa26a158..67cecabb 100644 --- a/app/modules/emby/emby.py +++ b/app/modules/emby/emby.py @@ -128,7 +128,7 @@ class Emby: logger.error(f"连接User/Views 出错:" + str(e)) return [] - def get_librarys(self, username: str = None) -> List[schemas.MediaServerLibrary]: + def get_librarys(self, username: str = None, hidden: bool = False) -> List[schemas.MediaServerLibrary]: """ 获取媒体服务器所有媒体库列表 """ @@ -136,6 +136,8 @@ class Emby: return [] libraries = [] for library in self.__get_emby_librarys(username) or []: + if hidden and self._sync_libraries and library.get("Id") not in self._sync_libraries: + continue match library.get("CollectionType"): case "movies": library_type = MediaType.MOVIE.value diff --git a/app/modules/jellyfin/__init__.py b/app/modules/jellyfin/__init__.py index 3190f034..1ae85709 100644 --- a/app/modules/jellyfin/__init__.py +++ b/app/modules/jellyfin/__init__.py @@ -159,13 +159,14 @@ class JellyfinModule(_ModuleBase, _MediaServerBase): return media_statistics def mediaserver_librarys(self, server: str = None, - username: str = None) -> Optional[List[schemas.MediaServerLibrary]]: + username: str = None, + hidden: bool = False) -> Optional[List[schemas.MediaServerLibrary]]: """ 媒体库列表 """ server: Jellyfin = self.get_server(server) if server: - return server.get_librarys(username) + return server.get_librarys(username=username, hidden=hidden) return None def mediaserver_items(self, server: str, library_id: str) -> Optional[Generator]: diff --git a/app/modules/jellyfin/jellyfin.py b/app/modules/jellyfin/jellyfin.py index ac65f331..ab3fb37d 100644 --- a/app/modules/jellyfin/jellyfin.py +++ b/app/modules/jellyfin/jellyfin.py @@ -124,7 +124,7 @@ class Jellyfin: logger.error(f"连接Users/Views 出错:" + str(e)) return [] - def get_librarys(self, username: str = None) -> List[schemas.MediaServerLibrary]: + def get_librarys(self, username: str = None, hidden: bool = False) -> List[schemas.MediaServerLibrary]: """ 获取媒体服务器所有媒体库列表 """ @@ -132,6 +132,8 @@ class Jellyfin: return [] libraries = [] for library in self.__get_jellyfin_librarys(username) or []: + if hidden and self._sync_libraries and library.get("Id") not in self._sync_libraries: + continue match library.get("CollectionType"): case "movies": library_type = MediaType.MOVIE.value diff --git a/app/modules/plex/__init__.py b/app/modules/plex/__init__.py index 370e9261..97b5426f 100644 --- a/app/modules/plex/__init__.py +++ b/app/modules/plex/__init__.py @@ -147,13 +147,14 @@ class PlexModule(_ModuleBase, _MediaServerBase): media_statistics.append(media_statistic) return media_statistics - def mediaserver_librarys(self, server: str = None, **kwargs) -> Optional[List[schemas.MediaServerLibrary]]: + def mediaserver_librarys(self, server: str = None, hidden: bool = False, + **kwargs) -> Optional[List[schemas.MediaServerLibrary]]: """ 媒体库列表 """ server: Plex = self.get_server(server) if server: - return server.get_librarys() + return server.get_librarys(hidden) return None def mediaserver_items(self, server: str, library_id: str) -> Optional[Generator]: diff --git a/app/modules/plex/plex.py b/app/modules/plex/plex.py index 1c166fd4..23a6aa9f 100644 --- a/app/modules/plex/plex.py +++ b/app/modules/plex/plex.py @@ -100,7 +100,7 @@ class Plex: return [f"{self._host.rstrip('/') + url}?X-Plex-Token={self._token}" for url in list(poster_urls.keys())[:total_size]] - def get_librarys(self) -> List[schemas.MediaServerLibrary]: + def get_librarys(self, hidden: bool = False) -> List[schemas.MediaServerLibrary]: """ 获取媒体服务器所有媒体库列表 """ @@ -113,6 +113,8 @@ class Plex: return [] libraries = [] for library in self._libraries: + if hidden and self._sync_libraries and library.key not in self._sync_libraries: + continue match library.type: case "movie": library_type = MediaType.MOVIE.value