Merge pull request #1353 from thsrite/main
This commit is contained in:
commit
c86cc2cb51
@ -977,16 +977,16 @@ class Emby(metaclass=Singleton):
|
|||||||
if res:
|
if res:
|
||||||
result = res.json().get("Items") or []
|
result = res.json().get("Items") or []
|
||||||
ret_resume = []
|
ret_resume = []
|
||||||
# 用户媒体库列表(排除黑名单)
|
# 用户媒体库文件夹列表(排除黑名单)
|
||||||
user_librarys = self.get_librarys(username=user)
|
library_folders = self.get_user_library_folders()
|
||||||
for item in result:
|
for item in result:
|
||||||
if len(ret_resume) == num:
|
if len(ret_resume) == num:
|
||||||
break
|
break
|
||||||
if item.get("Type") not in ["Movie", "Episode"]:
|
if item.get("Type") not in ["Movie", "Episode"]:
|
||||||
continue
|
continue
|
||||||
item_path = item.get("Path")
|
item_path = item.get("Path")
|
||||||
if item_path and user_librarys and not any(
|
if item_path and library_folders and not any(
|
||||||
library.name in item_path for library in user_librarys):
|
str(item_path).startswith(folder) for folder in library_folders):
|
||||||
continue
|
continue
|
||||||
item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value
|
item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value
|
||||||
link = self.get_play_url(item.get("Id"))
|
link = self.get_play_url(item.get("Id"))
|
||||||
@ -1040,16 +1040,16 @@ class Emby(metaclass=Singleton):
|
|||||||
if res:
|
if res:
|
||||||
result = res.json() or []
|
result = res.json() or []
|
||||||
ret_latest = []
|
ret_latest = []
|
||||||
# 用户媒体库列表(排除黑名单)
|
# 用户媒体库文件夹列表(排除黑名单)
|
||||||
user_librarys = self.get_librarys(username=user)
|
library_folders = self.get_user_library_folders()
|
||||||
for item in result:
|
for item in result:
|
||||||
if len(ret_latest) == num:
|
if len(ret_latest) == num:
|
||||||
break
|
break
|
||||||
if item.get("Type") not in ["Movie", "Series"]:
|
if item.get("Type") not in ["Movie", "Series"]:
|
||||||
continue
|
continue
|
||||||
item_path = item.get("Path")
|
item_path = item.get("Path")
|
||||||
if item_path and user_librarys and not any(
|
if item_path and library_folders and not any(
|
||||||
library.name in item_path for library in user_librarys):
|
str(item_path).startswith(folder) for folder in library_folders):
|
||||||
continue
|
continue
|
||||||
item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value
|
item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value
|
||||||
link = self.get_play_url(item.get("Id"))
|
link = self.get_play_url(item.get("Id"))
|
||||||
@ -1068,3 +1068,17 @@ class Emby(metaclass=Singleton):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"连接Users/Items/Latest出错:" + str(e))
|
logger.error(f"连接Users/Items/Latest出错:" + str(e))
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def get_user_library_folders(self):
|
||||||
|
"""
|
||||||
|
获取Emby媒体库文件夹列表(排除黑名单)
|
||||||
|
"""
|
||||||
|
if not self._host or not self._apikey:
|
||||||
|
return []
|
||||||
|
library_folders = []
|
||||||
|
black_list = (settings.MEDIASERVER_SYNC_BLACKLIST or '').split(",")
|
||||||
|
for library in self.get_emby_folders() or []:
|
||||||
|
if library.get("Name") in black_list:
|
||||||
|
continue
|
||||||
|
library_folders += [folder.get("Path") for folder in library.get("SubFolders")]
|
||||||
|
return library_folders
|
||||||
|
@ -45,6 +45,24 @@ class Jellyfin(metaclass=Singleton):
|
|||||||
self.user = self.get_user()
|
self.user = self.get_user()
|
||||||
self.serverid = self.get_server_id()
|
self.serverid = self.get_server_id()
|
||||||
|
|
||||||
|
def get_jellyfin_folders(self) -> List[dict]:
|
||||||
|
"""
|
||||||
|
获取Jellyfin媒体库路径列表
|
||||||
|
"""
|
||||||
|
if not self._host or not self._apikey:
|
||||||
|
return []
|
||||||
|
req_url = "%Library/SelectableMediaFolders?api_key=%s" % (self._host, self._apikey)
|
||||||
|
try:
|
||||||
|
res = RequestUtils().get_res(req_url)
|
||||||
|
if res:
|
||||||
|
return res.json()
|
||||||
|
else:
|
||||||
|
logger.error(f"Library/SelectableMediaFolders 未获取到返回数据")
|
||||||
|
return []
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"连接Library/SelectableMediaFolders 出错:" + str(e))
|
||||||
|
return []
|
||||||
|
|
||||||
def __get_jellyfin_librarys(self, username: str = None) -> List[dict]:
|
def __get_jellyfin_librarys(self, username: str = None) -> List[dict]:
|
||||||
"""
|
"""
|
||||||
获取Jellyfin媒体库的信息
|
获取Jellyfin媒体库的信息
|
||||||
@ -660,16 +678,16 @@ class Jellyfin(metaclass=Singleton):
|
|||||||
if res:
|
if res:
|
||||||
result = res.json().get("Items") or []
|
result = res.json().get("Items") or []
|
||||||
ret_resume = []
|
ret_resume = []
|
||||||
# 用户媒体库列表(排除黑名单)
|
# 用户媒体库文件夹列表(排除黑名单)
|
||||||
user_librarys = self.get_librarys(username=user)
|
library_folders = self.get_user_library_folders()
|
||||||
for item in result:
|
for item in result:
|
||||||
if len(ret_resume) == num:
|
if len(ret_resume) == num:
|
||||||
break
|
break
|
||||||
if item.get("Type") not in ["Movie", "Episode"]:
|
if item.get("Type") not in ["Movie", "Episode"]:
|
||||||
continue
|
continue
|
||||||
item_path = item.get("Path")
|
item_path = item.get("Path")
|
||||||
if item_path and user_librarys and not any(
|
if item_path and library_folders and not any(
|
||||||
library.name in item_path for library in user_librarys):
|
str(item_path).startswith(folder) for folder in library_folders):
|
||||||
continue
|
continue
|
||||||
item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value
|
item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value
|
||||||
link = self.get_play_url(item.get("Id"))
|
link = self.get_play_url(item.get("Id"))
|
||||||
@ -717,16 +735,16 @@ class Jellyfin(metaclass=Singleton):
|
|||||||
if res:
|
if res:
|
||||||
result = res.json() or []
|
result = res.json() or []
|
||||||
ret_latest = []
|
ret_latest = []
|
||||||
# 用户媒体库列表(排除黑名单)
|
# 用户媒体库文件夹列表(排除黑名单)
|
||||||
user_librarys = self.get_librarys(username=user)
|
library_folders = self.get_user_library_folders()
|
||||||
for item in result:
|
for item in result:
|
||||||
if len(ret_latest) == num:
|
if len(ret_latest) == num:
|
||||||
break
|
break
|
||||||
if item.get("Type") not in ["Movie", "Series"]:
|
if item.get("Type") not in ["Movie", "Series"]:
|
||||||
continue
|
continue
|
||||||
item_path = item.get("Path")
|
item_path = item.get("Path")
|
||||||
if item_path and user_librarys and not any(
|
if item_path and library_folders and not any(
|
||||||
library.name in item_path for library in user_librarys):
|
str(item_path).startswith(folder) for folder in library_folders):
|
||||||
continue
|
continue
|
||||||
item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value
|
item_type = MediaType.MOVIE.value if item.get("Type") == "Movie" else MediaType.TV.value
|
||||||
link = self.get_play_url(item.get("Id"))
|
link = self.get_play_url(item.get("Id"))
|
||||||
@ -745,3 +763,17 @@ class Jellyfin(metaclass=Singleton):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"连接Users/Items/Latest出错:" + str(e))
|
logger.error(f"连接Users/Items/Latest出错:" + str(e))
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def get_user_library_folders(self):
|
||||||
|
"""
|
||||||
|
获取Emby媒体库文件夹列表(排除黑名单)
|
||||||
|
"""
|
||||||
|
if not self._host or not self._apikey:
|
||||||
|
return []
|
||||||
|
library_folders = []
|
||||||
|
black_list = (settings.MEDIASERVER_SYNC_BLACKLIST or '').split(",")
|
||||||
|
for library in self.get_jellyfin_folders() or []:
|
||||||
|
if library.get("Name") in black_list:
|
||||||
|
continue
|
||||||
|
library_folders += [folder.get("Path") for folder in library.get("SubFolders")]
|
||||||
|
return library_folders
|
||||||
|
Loading…
x
Reference in New Issue
Block a user