fix #71
This commit is contained in:
parent
733e85efec
commit
44d428d934
@ -307,10 +307,11 @@ class ChainBase(metaclass=ABCMeta):
|
|||||||
"""
|
"""
|
||||||
return self.run_module("stop_torrents", hashs=hashs)
|
return self.run_module("stop_torrents", hashs=hashs)
|
||||||
|
|
||||||
def media_exists(self, mediainfo: MediaInfo, itemid: Optional[str] = None) -> Optional[ExistMediaInfo]:
|
def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[ExistMediaInfo]:
|
||||||
"""
|
"""
|
||||||
判断媒体文件是否存在
|
判断媒体文件是否存在
|
||||||
:param mediainfo: 识别的媒体信息
|
:param mediainfo: 识别的媒体信息
|
||||||
|
:param itemid: 媒体服务器ItemID
|
||||||
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
||||||
"""
|
"""
|
||||||
return self.run_module("media_exists", mediainfo=mediainfo, itemid=itemid)
|
return self.run_module("media_exists", mediainfo=mediainfo, itemid=itemid)
|
||||||
|
@ -10,7 +10,7 @@ from app.db.downloadhistory_oper import DownloadHistoryOper
|
|||||||
from app.db.mediaserver_oper import MediaServerOper
|
from app.db.mediaserver_oper import MediaServerOper
|
||||||
from app.helper.torrent import TorrentHelper
|
from app.helper.torrent import TorrentHelper
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.schemas import ExistMediaInfo, NotExistMediaInfo, DownloadingTorrent, Notification, MediaServerItem
|
from app.schemas import ExistMediaInfo, NotExistMediaInfo, DownloadingTorrent, Notification
|
||||||
from app.schemas.types import MediaType, TorrentStatus, EventType, MessageChannel, NotificationType
|
from app.schemas.types import MediaType, TorrentStatus, EventType, MessageChannel, NotificationType
|
||||||
from app.utils.string import StringUtils
|
from app.utils.string import StringUtils
|
||||||
|
|
||||||
@ -499,7 +499,9 @@ class DownloadChain(ChainBase):
|
|||||||
no_exists = {}
|
no_exists = {}
|
||||||
if mediainfo.type == MediaType.MOVIE:
|
if mediainfo.type == MediaType.MOVIE:
|
||||||
# 电影
|
# 电影
|
||||||
exists_movies: Optional[ExistMediaInfo] = self.media_exists(mediainfo)
|
itemid = self.mediaserver.get_item_id(mtype=mediainfo.type.value,
|
||||||
|
tmdbid=mediainfo.tmdb_id)
|
||||||
|
exists_movies: Optional[ExistMediaInfo] = self.media_exists(mediainfo=mediainfo, itemid=itemid)
|
||||||
if exists_movies:
|
if exists_movies:
|
||||||
logger.info(f"媒体库中已存在电影:{mediainfo.title_year}")
|
logger.info(f"媒体库中已存在电影:{mediainfo.title_year}")
|
||||||
return True, {}
|
return True, {}
|
||||||
@ -516,11 +518,10 @@ class DownloadChain(ChainBase):
|
|||||||
logger.error(f"媒体信息中没有季集信息:{mediainfo.title_year}")
|
logger.error(f"媒体信息中没有季集信息:{mediainfo.title_year}")
|
||||||
return False, {}
|
return False, {}
|
||||||
# 电视剧
|
# 电视剧
|
||||||
mediaserveritem: Optional[MediaServerItem] = self.mediaserver.exists(mtype=mediainfo.type.value,
|
itemid = self.mediaserver.get_item_id(mtype=mediainfo.type.value,
|
||||||
tmdbid=mediainfo.tmdb_id,
|
tmdbid=mediainfo.tmdb_id,
|
||||||
season=mediainfo.season)
|
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=mediainfo, itemid=itemid)
|
||||||
exists_tvs: Optional[ExistMediaInfo] = self.media_exists(mediainfo,item_id)
|
|
||||||
if not exists_tvs:
|
if not exists_tvs:
|
||||||
# 所有剧集均缺失
|
# 所有剧集均缺失
|
||||||
for season, episodes in mediainfo.seasons.items():
|
for season, episodes in mediainfo.seasons.items():
|
||||||
|
@ -52,3 +52,12 @@ class MediaServerOper(DbOper):
|
|||||||
if kwargs.get("season") not in seasoninfo.keys():
|
if kwargs.get("season") not in seasoninfo.keys():
|
||||||
return None
|
return None
|
||||||
return item
|
return item
|
||||||
|
|
||||||
|
def get_item_id(self, **kwargs) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
获取媒体服务器数据ID
|
||||||
|
"""
|
||||||
|
item = self.exists(**kwargs)
|
||||||
|
if not item:
|
||||||
|
return None
|
||||||
|
return str(item.item_id)
|
||||||
|
@ -42,13 +42,19 @@ class EmbyModule(_ModuleBase):
|
|||||||
"""
|
"""
|
||||||
return self.emby.get_webhook_message(form.get("data"))
|
return self.emby.get_webhook_message(form.get("data"))
|
||||||
|
|
||||||
def media_exists(self, mediainfo: MediaInfo, itemid: Optional[str] = None) -> Optional[ExistMediaInfo]:
|
def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[ExistMediaInfo]:
|
||||||
"""
|
"""
|
||||||
判断媒体文件是否存在
|
判断媒体文件是否存在
|
||||||
:param mediainfo: 识别的媒体信息
|
:param mediainfo: 识别的媒体信息
|
||||||
|
:param itemid: 媒体服务器ItemID
|
||||||
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
||||||
"""
|
"""
|
||||||
if mediainfo.type == MediaType.MOVIE:
|
if mediainfo.type == MediaType.MOVIE:
|
||||||
|
if itemid:
|
||||||
|
movie = self.emby.get_iteminfo(itemid)
|
||||||
|
if movie:
|
||||||
|
logger.info(f"媒体库中已存在:{movie}")
|
||||||
|
return ExistMediaInfo(type=MediaType.MOVIE)
|
||||||
movies = self.emby.get_movies(title=mediainfo.title, year=mediainfo.year)
|
movies = self.emby.get_movies(title=mediainfo.title, year=mediainfo.year)
|
||||||
if not movies:
|
if not movies:
|
||||||
logger.info(f"{mediainfo.title_year} 在媒体库中不存在")
|
logger.info(f"{mediainfo.title_year} 在媒体库中不存在")
|
||||||
|
@ -317,7 +317,7 @@ class Emby(metaclass=Singleton):
|
|||||||
return None
|
return None
|
||||||
if not item_id:
|
if not item_id:
|
||||||
return {}
|
return {}
|
||||||
# 验证tmdbid是否相同
|
# 验证tmdbid是否相同
|
||||||
item_tmdbid = self.get_iteminfo(item_id).get("ProviderIds", {}).get("Tmdb")
|
item_tmdbid = self.get_iteminfo(item_id).get("ProviderIds", {}).get("Tmdb")
|
||||||
if tmdb_id and item_tmdbid:
|
if tmdb_id and item_tmdbid:
|
||||||
if str(tmdb_id) != str(item_tmdbid):
|
if str(tmdb_id) != str(item_tmdbid):
|
||||||
|
@ -43,13 +43,19 @@ class JellyfinModule(_ModuleBase):
|
|||||||
"""
|
"""
|
||||||
return self.jellyfin.get_webhook_message(json.loads(body))
|
return self.jellyfin.get_webhook_message(json.loads(body))
|
||||||
|
|
||||||
def media_exists(self, mediainfo: MediaInfo, itemid: Optional[str] = None) -> Optional[ExistMediaInfo]:
|
def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[ExistMediaInfo]:
|
||||||
"""
|
"""
|
||||||
判断媒体文件是否存在
|
判断媒体文件是否存在
|
||||||
:param mediainfo: 识别的媒体信息
|
:param mediainfo: 识别的媒体信息
|
||||||
|
:param itemid: 媒体服务器ItemID
|
||||||
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
||||||
"""
|
"""
|
||||||
if mediainfo.type == MediaType.MOVIE:
|
if mediainfo.type == MediaType.MOVIE:
|
||||||
|
if itemid:
|
||||||
|
movie = self.jellyfin.get_iteminfo(itemid)
|
||||||
|
if movie:
|
||||||
|
logger.info(f"媒体库中已存在:{movie}")
|
||||||
|
return ExistMediaInfo(type=MediaType.MOVIE)
|
||||||
movies = self.jellyfin.get_movies(title=mediainfo.title, year=mediainfo.year)
|
movies = self.jellyfin.get_movies(title=mediainfo.title, year=mediainfo.year)
|
||||||
if not movies:
|
if not movies:
|
||||||
logger.info(f"{mediainfo.title_year} 在媒体库中不存在")
|
logger.info(f"{mediainfo.title_year} 在媒体库中不存在")
|
||||||
|
@ -292,7 +292,7 @@ class Jellyfin(metaclass=Singleton):
|
|||||||
return None
|
return None
|
||||||
if not item_id:
|
if not item_id:
|
||||||
return {}
|
return {}
|
||||||
# 验证tmdbid是否相同
|
# 验证tmdbid是否相同
|
||||||
item_tmdbid = self.get_iteminfo(item_id).get("ProviderIds", {}).get("Tmdb")
|
item_tmdbid = self.get_iteminfo(item_id).get("ProviderIds", {}).get("Tmdb")
|
||||||
if tmdb_id and item_tmdbid:
|
if tmdb_id and item_tmdbid:
|
||||||
if str(tmdb_id) != str(item_tmdbid):
|
if str(tmdb_id) != str(item_tmdbid):
|
||||||
|
@ -33,13 +33,19 @@ class PlexModule(_ModuleBase):
|
|||||||
"""
|
"""
|
||||||
return self.plex.get_webhook_message(form.get("payload"))
|
return self.plex.get_webhook_message(form.get("payload"))
|
||||||
|
|
||||||
def media_exists(self, mediainfo: MediaInfo, itemid: Optional[str] = None) -> Optional[ExistMediaInfo]:
|
def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[ExistMediaInfo]:
|
||||||
"""
|
"""
|
||||||
判断媒体文件是否存在
|
判断媒体文件是否存在
|
||||||
:param mediainfo: 识别的媒体信息
|
:param mediainfo: 识别的媒体信息
|
||||||
|
:param itemid: 媒体服务器ItemID
|
||||||
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
||||||
"""
|
"""
|
||||||
if mediainfo.type == MediaType.MOVIE:
|
if mediainfo.type == MediaType.MOVIE:
|
||||||
|
if itemid:
|
||||||
|
movie = self.plex.get_iteminfo(itemid)
|
||||||
|
if movie:
|
||||||
|
logger.info(f"媒体库中已存在:{movie}")
|
||||||
|
return ExistMediaInfo(type=MediaType.MOVIE)
|
||||||
movies = self.plex.get_movies(title=mediainfo.title, year=mediainfo.year)
|
movies = self.plex.get_movies(title=mediainfo.title, year=mediainfo.year)
|
||||||
if not movies:
|
if not movies:
|
||||||
logger.info(f"{mediainfo.title_year} 在媒体库中不存在")
|
logger.info(f"{mediainfo.title_year} 在媒体库中不存在")
|
||||||
@ -49,7 +55,8 @@ class PlexModule(_ModuleBase):
|
|||||||
return ExistMediaInfo(type=MediaType.MOVIE)
|
return ExistMediaInfo(type=MediaType.MOVIE)
|
||||||
else:
|
else:
|
||||||
tvs = self.plex.get_tv_episodes(title=mediainfo.title,
|
tvs = self.plex.get_tv_episodes(title=mediainfo.title,
|
||||||
year=mediainfo.year)
|
year=mediainfo.year,
|
||||||
|
item_id=itemid)
|
||||||
if not tvs:
|
if not tvs:
|
||||||
logger.info(f"{mediainfo.title_year} 在媒体库中不存在")
|
logger.info(f"{mediainfo.title_year} 在媒体库中不存在")
|
||||||
return None
|
return None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user