fix 同步删除插件兼容多分辨率
This commit is contained in:
@ -86,7 +86,7 @@ class TransferHistory(Base):
|
||||
|
||||
@staticmethod
|
||||
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 + mtype 或 title + year 必输
|
||||
@ -98,16 +98,19 @@ class TransferHistory(Base):
|
||||
return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid,
|
||||
TransferHistory.type == mtype,
|
||||
TransferHistory.seasons == season,
|
||||
TransferHistory.episodes == episode).all()
|
||||
TransferHistory.episodes == episode,
|
||||
TransferHistory.dest == dest).all()
|
||||
elif season:
|
||||
# 查询一季
|
||||
return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid,
|
||||
TransferHistory.type == mtype,
|
||||
TransferHistory.seasons == season).all()
|
||||
TransferHistory.seasons == season,
|
||||
TransferHistory.dest == dest).all()
|
||||
else:
|
||||
# 查询所有
|
||||
return db.query(TransferHistory).filter(TransferHistory.tmdbid == tmdbid,
|
||||
TransferHistory.type == mtype).all()
|
||||
TransferHistory.type == mtype,
|
||||
TransferHistory.dest == dest).all()
|
||||
# 标题 + 年份
|
||||
elif title and year:
|
||||
# 电视剧某季某集
|
||||
@ -115,16 +118,19 @@ class TransferHistory(Base):
|
||||
return db.query(TransferHistory).filter(TransferHistory.title == title,
|
||||
TransferHistory.year == year,
|
||||
TransferHistory.seasons == season,
|
||||
TransferHistory.episodes == episode).all()
|
||||
TransferHistory.episodes == episode,
|
||||
TransferHistory.dest == dest).all()
|
||||
# 电视剧某季
|
||||
elif season:
|
||||
return db.query(TransferHistory).filter(TransferHistory.title == title,
|
||||
TransferHistory.year == year,
|
||||
TransferHistory.seasons == season).all()
|
||||
TransferHistory.seasons == season,
|
||||
TransferHistory.dest == dest).all()
|
||||
# 电视剧所有季集|电影
|
||||
else:
|
||||
return db.query(TransferHistory).filter(TransferHistory.title == title,
|
||||
TransferHistory.year == year).all()
|
||||
TransferHistory.year == year,
|
||||
TransferHistory.dest == dest).all()
|
||||
|
||||
return []
|
||||
|
||||
|
@ -52,13 +52,14 @@ class TransferHistoryOper(DbOper):
|
||||
return TransferHistory.statistic(self._db, days)
|
||||
|
||||
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,
|
||||
mtype=mtype,
|
||||
title=title,
|
||||
dest=dest,
|
||||
year=year,
|
||||
season=season,
|
||||
episode=episode,
|
||||
|
@ -57,6 +57,7 @@ class MediaSyncDel(_PluginBase):
|
||||
_notify = False
|
||||
_del_source = False
|
||||
_exclude_path = None
|
||||
_library_path = None
|
||||
_transferhis = None
|
||||
_downloadhis = None
|
||||
qb = None
|
||||
@ -80,6 +81,7 @@ class MediaSyncDel(_PluginBase):
|
||||
self._notify = config.get("notify")
|
||||
self._del_source = config.get("del_source")
|
||||
self._exclude_path = config.get("exclude_path")
|
||||
self._library_path = config.get("library_path")
|
||||
|
||||
if self._enabled and str(self._sync_type) == "log":
|
||||
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',
|
||||
'content': [
|
||||
@ -260,6 +284,7 @@ class MediaSyncDel(_PluginBase):
|
||||
"enabled": False,
|
||||
"notify": True,
|
||||
"del_source": False,
|
||||
"library_path": "",
|
||||
"sync_type": "webhook",
|
||||
"cron": "*/30 * * * *",
|
||||
"exclude_path": "",
|
||||
@ -528,6 +553,7 @@ class MediaSyncDel(_PluginBase):
|
||||
# 查询转移记录
|
||||
msg, transfer_history = self.__get_transfer_his(media_type=media_type,
|
||||
media_name=media_name,
|
||||
media_path=media_path,
|
||||
tmdb_id=tmdb_id,
|
||||
season_num=season_num,
|
||||
episode_num=episode_num)
|
||||
@ -626,12 +652,11 @@ class MediaSyncDel(_PluginBase):
|
||||
# 保存历史
|
||||
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):
|
||||
"""
|
||||
查询转移记录
|
||||
"""
|
||||
|
||||
# 季数
|
||||
if season_num:
|
||||
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
|
||||
|
||||
# 处理路径映射 (处理同一媒体多分辨率的情况)
|
||||
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:
|
||||
msg = f'电影 {media_name} {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:
|
||||
msg = f'剧集 {media_name} {tmdb_id}'
|
||||
transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id,
|
||||
mtype=mtype.value)
|
||||
mtype=mtype.value,
|
||||
dest=media_path)
|
||||
# 删除季 S02
|
||||
elif mtype == MediaType.TV and season_num and not episode_num:
|
||||
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}'
|
||||
transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id,
|
||||
mtype=mtype.value,
|
||||
season=f'S{season_num}')
|
||||
season=f'S{season_num}',
|
||||
dest=media_path)
|
||||
# 删除剧集S02E02
|
||||
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():
|
||||
@ -670,7 +705,8 @@ class MediaSyncDel(_PluginBase):
|
||||
transfer_history: List[TransferHistory] = self._transferhis.get_by(tmdbid=tmdb_id,
|
||||
mtype=mtype.value,
|
||||
season=f'S{season_num}',
|
||||
episode=f'E{episode_num}')
|
||||
episode=f'E{episode_num}',
|
||||
dest=media_path)
|
||||
else:
|
||||
return "", []
|
||||
|
||||
@ -723,26 +759,36 @@ class MediaSyncDel(_PluginBase):
|
||||
logger.info(f"媒体路径 {media_path} 已被排除,暂不处理")
|
||||
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":
|
||||
msg = f'电影 {media_name}'
|
||||
transfer_history: List[TransferHistory] = self._transferhis.get_by(
|
||||
title=media_name,
|
||||
year=media_year)
|
||||
year=media_year,
|
||||
dest=media_path)
|
||||
# 删除电视剧
|
||||
elif media_type == "Series":
|
||||
msg = f'剧集 {media_name}'
|
||||
transfer_history: List[TransferHistory] = self._transferhis.get_by(
|
||||
title=media_name,
|
||||
year=media_year)
|
||||
year=media_year,
|
||||
dest=media_path)
|
||||
# 删除季 S02
|
||||
elif media_type == "Season":
|
||||
msg = f'剧集 {media_name} {media_season}'
|
||||
transfer_history: List[TransferHistory] = self._transferhis.get_by(
|
||||
title=media_name,
|
||||
year=media_year,
|
||||
season=media_season)
|
||||
season=media_season,
|
||||
dest=media_path)
|
||||
# 删除剧集S02E02
|
||||
elif media_type == "Episode":
|
||||
msg = f'剧集 {media_name} {media_season}{media_episode}'
|
||||
@ -750,7 +796,8 @@ class MediaSyncDel(_PluginBase):
|
||||
title=media_name,
|
||||
year=media_year,
|
||||
season=media_season,
|
||||
episode=media_episode)
|
||||
episode=media_episode,
|
||||
dest=media_path)
|
||||
else:
|
||||
continue
|
||||
|
||||
|
Reference in New Issue
Block a user