diff --git a/app/chain/__init__.py b/app/chain/__init__.py index be6d9a15..82a91a13 100644 --- a/app/chain/__init__.py +++ b/app/chain/__init__.py @@ -307,13 +307,13 @@ class ChainBase(metaclass=ABCMeta): """ return self.run_module("stop_torrents", hashs=hashs) - def media_exists(self, mediainfo: MediaInfo) -> Optional[ExistMediaInfo]: + def media_exists(self, mediainfo: MediaInfo, itemid: str) -> Optional[ExistMediaInfo]: """ 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 :return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}} """ - return self.run_module("media_exists", mediainfo=mediainfo) + return self.run_module("media_exists", mediainfo=mediainfo, itemid=itemid) def refresh_mediaserver(self, mediainfo: MediaInfo, file_path: Path) -> Optional[bool]: """ diff --git a/app/chain/download.py b/app/chain/download.py index 5eeb455e..45b9f81e 100644 --- a/app/chain/download.py +++ b/app/chain/download.py @@ -7,9 +7,10 @@ from app.core.config import settings from app.core.context import MediaInfo, TorrentInfo, Context from app.core.meta import MetaBase from app.db.downloadhistory_oper import DownloadHistoryOper +from app.db.mediaserver_oper import MediaServerOper from app.helper.torrent import TorrentHelper from app.log import logger -from app.schemas import ExistMediaInfo, NotExistMediaInfo, DownloadingTorrent, Notification +from app.schemas import ExistMediaInfo, NotExistMediaInfo, DownloadingTorrent, Notification, MediaServerItem from app.schemas.types import MediaType, TorrentStatus, EventType, MessageChannel, NotificationType from app.utils.string import StringUtils @@ -23,6 +24,7 @@ class DownloadChain(ChainBase): super().__init__() self.torrent = TorrentHelper() self.downloadhis = DownloadHistoryOper() + self.mediaserver = MediaServerOper() def post_download_message(self, meta: MetaBase, mediainfo: MediaInfo, torrent: TorrentInfo, channel: MessageChannel = None, @@ -514,7 +516,11 @@ class DownloadChain(ChainBase): logger.error(f"媒体信息中没有季集信息:{mediainfo.title_year}") return False, {} # 电视剧 - exists_tvs: Optional[ExistMediaInfo] = self.media_exists(mediainfo) + mediaserveritem: Optional[MediaServerItem] = self.mediaserver.exists(mtype=mediainfo.type.value, + tmdbid=mediainfo.tmdb_id, + season=mediainfo.season) + item_id = str(mediaserveritem.item_id) if mediaserveritem and mediaserveritem.item_id else None + exists_tvs: Optional[ExistMediaInfo] = self.media_exists(mediainfo,item_id) if not exists_tvs: # 所有剧集均缺失 for season, episodes in mediainfo.seasons.items(): diff --git a/app/modules/emby/__init__.py b/app/modules/emby/__init__.py index 63a92398..e6d90622 100644 --- a/app/modules/emby/__init__.py +++ b/app/modules/emby/__init__.py @@ -42,7 +42,7 @@ class EmbyModule(_ModuleBase): """ return self.emby.get_webhook_message(form.get("data")) - def media_exists(self, mediainfo: MediaInfo) -> Optional[ExistMediaInfo]: + def media_exists(self, mediainfo: MediaInfo, itemid: str) -> Optional[ExistMediaInfo]: """ 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 @@ -59,7 +59,8 @@ class EmbyModule(_ModuleBase): else: tvs = self.emby.get_tv_episodes(title=mediainfo.title, year=mediainfo.year, - tmdb_id=mediainfo.tmdb_id) + tmdb_id=mediainfo.tmdb_id, + item_id=itemid) if not tvs: logger.info(f"{mediainfo.title_year} 在媒体库中不存在") return None diff --git a/app/modules/emby/emby.py b/app/modules/emby/emby.py index ed693125..35ef3aad 100644 --- a/app/modules/emby/emby.py +++ b/app/modules/emby/emby.py @@ -318,10 +318,10 @@ class Emby(metaclass=Singleton): if not item_id: return {} # 验证tmdbid是否相同 - item_tmdbid = self.get_iteminfo(item_id).get("ProviderIds", {}).get("Tmdb") - if tmdb_id and item_tmdbid: - if str(tmdb_id) != str(item_tmdbid): - return {} + item_tmdbid = self.get_iteminfo(item_id).get("ProviderIds", {}).get("Tmdb") + if tmdb_id and item_tmdbid: + if str(tmdb_id) != str(item_tmdbid): + return {} # /Shows/Id/Episodes 查集的信息 if not season: season = "" diff --git a/app/modules/jellyfin/__init__.py b/app/modules/jellyfin/__init__.py index f899e896..510d1dc5 100644 --- a/app/modules/jellyfin/__init__.py +++ b/app/modules/jellyfin/__init__.py @@ -43,7 +43,7 @@ class JellyfinModule(_ModuleBase): """ return self.jellyfin.get_webhook_message(json.loads(body)) - def media_exists(self, mediainfo: MediaInfo) -> Optional[ExistMediaInfo]: + def media_exists(self, mediainfo: MediaInfo, itemid: str) -> Optional[ExistMediaInfo]: """ 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 @@ -60,7 +60,8 @@ class JellyfinModule(_ModuleBase): else: tvs = self.jellyfin.get_tv_episodes(title=mediainfo.title, year=mediainfo.year, - tmdb_id=mediainfo.tmdb_id) + tmdb_id=mediainfo.tmdb_id, + item_id=itemid) if not tvs: logger.info(f"{mediainfo.title_year} 在媒体库中不存在") return None diff --git a/app/modules/jellyfin/jellyfin.py b/app/modules/jellyfin/jellyfin.py index f4c46abb..d78ab21f 100644 --- a/app/modules/jellyfin/jellyfin.py +++ b/app/modules/jellyfin/jellyfin.py @@ -293,10 +293,10 @@ class Jellyfin(metaclass=Singleton): if not item_id: return {} # 验证tmdbid是否相同 - item_tmdbid = self.get_iteminfo(item_id).get("ProviderIds", {}).get("Tmdb") - if tmdb_id and item_tmdbid: - if str(tmdb_id) != str(item_tmdbid): - return {} + item_tmdbid = self.get_iteminfo(item_id).get("ProviderIds", {}).get("Tmdb") + if tmdb_id and item_tmdbid: + if str(tmdb_id) != str(item_tmdbid): + return {} if not season: season = "" try: diff --git a/app/modules/plex/__init__.py b/app/modules/plex/__init__.py index 7ea8c601..8e87ab18 100644 --- a/app/modules/plex/__init__.py +++ b/app/modules/plex/__init__.py @@ -33,7 +33,7 @@ class PlexModule(_ModuleBase): """ return self.plex.get_webhook_message(form.get("payload")) - def media_exists(self, mediainfo: MediaInfo) -> Optional[ExistMediaInfo]: + def media_exists(self, mediainfo: MediaInfo, itemid: str) -> Optional[ExistMediaInfo]: """ 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息