fix 同步删除插件兼容多分辨率

This commit is contained in:
thsrite
2023-09-12 15:21:34 +08:00
parent dd7803c90a
commit d7310ade86
3 changed files with 72 additions and 18 deletions

View File

@ -86,7 +86,7 @@ class TransferHistory(Base):
@staticmethod @staticmethod
def list_by(db: Session, mtype: str = None, title: str = None, year: str = None, season: str = None, def list_by(db: Session, mtype: str = None, title: str = None, year: str = None, season: str = None,
episode: str = None, tmdbid: int = None): episode: str = None, tmdbid: int = None, dest: str = None):
""" """
据tmdbid、season、season_episode查询转移记录 据tmdbid、season、season_episode查询转移记录
tmdbid + mtype 或 title + year 必输 tmdbid + mtype 或 title + year 必输
@ -98,16 +98,19 @@ class TransferHistory(Base):
return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid, return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid,
TransferHistory.type == mtype, TransferHistory.type == mtype,
TransferHistory.seasons == season, TransferHistory.seasons == season,
TransferHistory.episodes == episode).all() TransferHistory.episodes == episode,
TransferHistory.dest == dest).all()
elif season: elif season:
# 查询一季 # 查询一季
return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid, return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid,
TransferHistory.type == mtype, TransferHistory.type == mtype,
TransferHistory.seasons == season).all() TransferHistory.seasons == season,
TransferHistory.dest == dest).all()
else: else:
# 查询所有 # 查询所有
return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid, return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid,
TransferHistory.type == mtype).all() TransferHistory.type == mtype,
TransferHistory.dest == dest).all()
# 标题 + 年份 # 标题 + 年份
elif title and year: elif title and year:
# 电视剧某季某集 # 电视剧某季某集
@ -115,16 +118,19 @@ class TransferHistory(Base):
return db.query(TransferHistory).filter(TransferHistory.title == title, return db.query(TransferHistory).filter(TransferHistory.title == title,
TransferHistory.year == year, TransferHistory.year == year,
TransferHistory.seasons == season, TransferHistory.seasons == season,
TransferHistory.episodes == episode).all() TransferHistory.episodes == episode,
TransferHistory.dest == dest).all()
# 电视剧某季 # 电视剧某季
elif season: elif season:
return db.query(TransferHistory).filter(TransferHistory.title == title, return db.query(TransferHistory).filter(TransferHistory.title == title,
TransferHistory.year == year, TransferHistory.year == year,
TransferHistory.seasons == season).all() TransferHistory.seasons == season,
TransferHistory.dest == dest).all()
# 电视剧所有季集|电影 # 电视剧所有季集|电影
else: else:
return db.query(TransferHistory).filter(TransferHistory.title == title, return db.query(TransferHistory).filter(TransferHistory.title == title,
TransferHistory.year == year).all() TransferHistory.year == year,
TransferHistory.dest == dest).all()
return [] return []

View File

@ -52,13 +52,14 @@ class TransferHistoryOper(DbOper):
return TransferHistory.statistic(self._db, days) return TransferHistory.statistic(self._db, days)
def get_by(self, title: str = None, year: str = None, mtype: str = None, def get_by(self, title: str = None, year: str = None, mtype: str = None,
season: str = None, episode: str = None, tmdbid: int = None) -> List[TransferHistory]: season: str = None, episode: str = None, tmdbid: int = None, dest: str = None) -> List[TransferHistory]:
""" """
按类型、标题、年份、季集查询转移记录 按类型、标题、年份、季集查询转移记录
""" """
return TransferHistory.list_by(db=self._db, return TransferHistory.list_by(db=self._db,
mtype=mtype, mtype=mtype,
title=title, title=title,
dest=dest,
year=year, year=year,
season=season, season=season,
episode=episode, episode=episode,

View File

@ -57,6 +57,7 @@ class MediaSyncDel(_PluginBase):
_notify = False _notify = False
_del_source = False _del_source = False
_exclude_path = None _exclude_path = None
_library_path = None
_transferhis = None _transferhis = None
_downloadhis = None _downloadhis = None
qb = None qb = None
@ -80,6 +81,7 @@ class MediaSyncDel(_PluginBase):
self._notify = config.get("notify") self._notify = config.get("notify")
self._del_source = config.get("del_source") self._del_source = config.get("del_source")
self._exclude_path = config.get("exclude_path") self._exclude_path = config.get("exclude_path")
self._library_path = config.get("library_path")
if self._enabled and str(self._sync_type) == "log": if self._enabled and str(self._sync_type) == "log":
self._scheduler = BackgroundScheduler(timezone=settings.TZ) self._scheduler = BackgroundScheduler(timezone=settings.TZ)
@ -231,6 +233,28 @@ class MediaSyncDel(_PluginBase):
} }
] ]
}, },
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'props': {
'cols': 12,
},
'content': [
{
'component': 'VTextarea',
'props': {
'model': 'library_path',
'rows': '2',
'label': '媒体库路径',
'placeholder': '媒体服务器路径:MoviePilot路径一行一个'
}
}
]
}
]
},
{ {
'component': 'VRow', 'component': 'VRow',
'content': [ 'content': [
@ -260,6 +284,7 @@ class MediaSyncDel(_PluginBase):
"enabled": False, "enabled": False,
"notify": True, "notify": True,
"del_source": False, "del_source": False,
"library_path": "",
"sync_type": "webhook", "sync_type": "webhook",
"cron": "*/30 * * * *", "cron": "*/30 * * * *",
"exclude_path": "", "exclude_path": "",
@ -528,6 +553,7 @@ class MediaSyncDel(_PluginBase):
# 查询转移记录 # 查询转移记录
msg, transfer_history = self.__get_transfer_his(media_type=media_type, msg, transfer_history = self.__get_transfer_his(media_type=media_type,
media_name=media_name, media_name=media_name,
media_path=media_path,
tmdb_id=tmdb_id, tmdb_id=tmdb_id,
season_num=season_num, season_num=season_num,
episode_num=episode_num) episode_num=episode_num)
@ -626,12 +652,11 @@ class MediaSyncDel(_PluginBase):
# 保存历史 # 保存历史
self.save_data("history", history) self.save_data("history", history)
def __get_transfer_his(self, media_type: str, media_name: str, def __get_transfer_his(self, media_type: str, media_name: str, media_path: str,
tmdb_id: int, season_num: int, episode_num: int): tmdb_id: int, season_num: int, episode_num: int):
""" """
查询转移记录 查询转移记录
""" """
# 季数 # 季数
if season_num: if season_num:
season_num = str(season_num).rjust(2, '0') season_num = str(season_num).rjust(2, '0')
@ -642,16 +667,25 @@ class MediaSyncDel(_PluginBase):
# 类型 # 类型
mtype = MediaType.MOVIE if media_type in ["Movie", "MOV"] else MediaType.TV mtype = MediaType.MOVIE if media_type in ["Movie", "MOV"] else MediaType.TV
# 处理路径映射 (处理同一媒体多分辨率的情况)
if self._library_path:
paths = self._library_path.split("\n")
for path in paths:
sub_paths = path.split(":")
media_path = media_path.replace(sub_paths[0], sub_paths[1]).replace('\\', '/')
# 删除电影 # 删除电影
if mtype == MediaType.MOVIE: if mtype == MediaType.MOVIE:
msg = f'电影 {media_name} {tmdb_id}' msg = f'电影 {media_name} {tmdb_id}'
transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id, transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id,
mtype=mtype.value) mtype=mtype.value,
dest=media_path)
# 删除电视剧 # 删除电视剧
elif mtype == MediaType.TV and not season_num and not episode_num: elif mtype == MediaType.TV and not season_num and not episode_num:
msg = f'剧集 {media_name} {tmdb_id}' msg = f'剧集 {media_name} {tmdb_id}'
transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id, transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id,
mtype=mtype.value) mtype=mtype.value,
dest=media_path)
# 删除季 S02 # 删除季 S02
elif mtype == MediaType.TV and season_num and not episode_num: elif mtype == MediaType.TV and season_num and not episode_num:
if not season_num or not str(season_num).isdigit(): if not season_num or not str(season_num).isdigit():
@ -660,7 +694,8 @@ class MediaSyncDel(_PluginBase):
msg = f'剧集 {media_name} S{season_num} {tmdb_id}' msg = f'剧集 {media_name} S{season_num} {tmdb_id}'
transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id, transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id,
mtype=mtype.value, mtype=mtype.value,
season=f'S{season_num}') season=f'S{season_num}',
dest=media_path)
# 删除剧集S02E02 # 删除剧集S02E02
elif mtype == MediaType.TV and season_num and episode_num: elif mtype == MediaType.TV and season_num and episode_num:
if not season_num or not str(season_num).isdigit() or not episode_num or not str(episode_num).isdigit(): if not season_num or not str(season_num).isdigit() or not episode_num or not str(episode_num).isdigit():
@ -670,7 +705,8 @@ class MediaSyncDel(_PluginBase):
transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id, transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id,
mtype=mtype.value, mtype=mtype.value,
season=f'S{season_num}', season=f'S{season_num}',
episode=f'E{episode_num}') episode=f'E{episode_num}',
dest=media_path)
else: else:
return "", [] return "", []
@ -723,26 +759,36 @@ class MediaSyncDel(_PluginBase):
logger.info(f"媒体路径 {media_path} 已被排除,暂不处理") logger.info(f"媒体路径 {media_path} 已被排除,暂不处理")
return return
# 处理路径映射 (处理同一媒体多分辨率的情况)
if self._library_path:
paths = self._library_path.split("\n")
for path in paths:
sub_paths = path.split(":")
media_path = media_path.replace(sub_paths[0], sub_paths[1]).replace('\\', '/')
# 获取删除的记录 # 获取删除的记录
# 删除电影 # 删除电影
if media_type == "Movie": if media_type == "Movie":
msg = f'电影 {media_name}' msg = f'电影 {media_name}'
transfer_history: List[TransferHistory] = self._transferhis.get_by( transfer_history: List[TransferHistory] = self._transferhis.get_by(
title=media_name, title=media_name,
year=media_year) year=media_year,
dest=media_path)
# 删除电视剧 # 删除电视剧
elif media_type == "Series": elif media_type == "Series":
msg = f'剧集 {media_name}' msg = f'剧集 {media_name}'
transfer_history: List[TransferHistory] = self._transferhis.get_by( transfer_history: List[TransferHistory] = self._transferhis.get_by(
title=media_name, title=media_name,
year=media_year) year=media_year,
dest=media_path)
# 删除季 S02 # 删除季 S02
elif media_type == "Season": elif media_type == "Season":
msg = f'剧集 {media_name} {media_season}' msg = f'剧集 {media_name} {media_season}'
transfer_history: List[TransferHistory] = self._transferhis.get_by( transfer_history: List[TransferHistory] = self._transferhis.get_by(
title=media_name, title=media_name,
year=media_year, year=media_year,
season=media_season) season=media_season,
dest=media_path)
# 删除剧集S02E02 # 删除剧集S02E02
elif media_type == "Episode": elif media_type == "Episode":
msg = f'剧集 {media_name} {media_season}{media_episode}' msg = f'剧集 {media_name} {media_season}{media_episode}'
@ -750,7 +796,8 @@ class MediaSyncDel(_PluginBase):
title=media_name, title=media_name,
year=media_year, year=media_year,
season=media_season, season=media_season,
episode=media_episode) episode=media_episode,
dest=media_path)
else: else:
continue continue