diff --git a/app/modules/emby/emby.py b/app/modules/emby/emby.py index afb31235..ef393ebc 100644 --- a/app/modules/emby/emby.py +++ b/app/modules/emby/emby.py @@ -66,6 +66,41 @@ class Emby(metaclass=Singleton): logger.error(f"连接Library/SelectableMediaFolders 出错:" + str(e)) return [] + def get_emby_virtual_folders(self) -> List[dict]: + """ + 获取Emby媒体库所有路径列表(包含共享路径) + """ + if not self._host or not self._apikey: + return [] + req_url = "%semby/Library/VirtualFolders/Query?api_key=%s" % (self._host, self._apikey) + try: + res = RequestUtils().get_res(req_url) + if res: + library_items = res.json().get("Items") + librarys = [] + for library_item in library_items: + library_name = library_item.get('Name') + pathInfos = library_item.get('LibraryOptions', {}).get('PathInfos') + library_paths = [] + for path in pathInfos: + if path.get('NetworkPath'): + library_paths.append(path.get('NetworkPath')) + else: + library_paths.append(path.get('Path')) + + if library_name and library_paths: + librarys.append({ + 'Name': library_name, + 'Path': library_paths + }) + return librarys + else: + logger.error(f"Library/VirtualFolders/Query 未获取到返回数据") + return [] + except Exception as e: + logger.error(f"连接Library/VirtualFolders/Query 出错:" + str(e)) + return [] + def __get_emby_librarys(self, username: str = None) -> List[dict]: """ 获取Emby媒体库列表 @@ -1077,8 +1112,8 @@ class Emby(metaclass=Singleton): return [] library_folders = [] black_list = (settings.MEDIASERVER_SYNC_BLACKLIST or '').split(",") - for library in self.get_emby_folders() or []: + for library in self.get_emby_virtual_folders() or []: if library.get("Name") in black_list: continue - library_folders += [folder.get("Path") for folder in library.get("SubFolders")] + library_folders += [folder for folder in library.get("Path")] return library_folders diff --git a/app/modules/jellyfin/jellyfin.py b/app/modules/jellyfin/jellyfin.py index 0e31fec1..a1b1773e 100644 --- a/app/modules/jellyfin/jellyfin.py +++ b/app/modules/jellyfin/jellyfin.py @@ -63,6 +63,41 @@ class Jellyfin(metaclass=Singleton): logger.error(f"连接Library/SelectableMediaFolders 出错:" + str(e)) return [] + def get_jellyfin_virtual_folders(self) -> List[dict]: + """ + 获取Jellyfin媒体库所有路径列表(包含共享路径) + """ + if not self._host or not self._apikey: + return [] + req_url = "%sLibrary/VirtualFolders/Query?api_key=%s" % (self._host, self._apikey) + try: + res = RequestUtils().get_res(req_url) + if res: + library_items = res.json().get("Items") + librarys = [] + for library_item in library_items: + library_name = library_item.get('Name') + pathInfos = library_item.get('LibraryOptions', {}).get('PathInfos') + library_paths = [] + for path in pathInfos: + if path.get('NetworkPath'): + library_paths.append(path.get('NetworkPath')) + else: + library_paths.append(path.get('Path')) + + if library_name and library_paths: + librarys.append({ + 'Name': library_name, + 'Path': library_paths + }) + return librarys + else: + logger.error(f"Library/VirtualFolders/Query 未获取到返回数据") + return [] + except Exception as e: + logger.error(f"连接Library/VirtualFolders/Query 出错:" + str(e)) + return [] + def __get_jellyfin_librarys(self, username: str = None) -> List[dict]: """ 获取Jellyfin媒体库的信息 @@ -772,8 +807,8 @@ class Jellyfin(metaclass=Singleton): return [] library_folders = [] black_list = (settings.MEDIASERVER_SYNC_BLACKLIST or '').split(",") - for library in self.get_jellyfin_folders() or []: + for library in self.get_jellyfin_virtual_folders() or []: if library.get("Name") in black_list: continue - library_folders += [folder.get("Path") for folder in library.get("SubFolders")] + library_folders += [folder for folder in library.get("Path")] return library_folders