From 7cfd05a7a50864a48bf32f30ef401c2dd4ecdece Mon Sep 17 00:00:00 2001 From: jxxghp Date: Fri, 1 Sep 2023 07:29:49 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E9=80=9A=E7=9F=A5=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/chain/transfer.py | 62 +++++++++++++++--------------- app/plugins/dirmonitor/__init__.py | 4 +- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 0e2371e0..7ff1a430 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -2,7 +2,7 @@ import json import shutil import threading from pathlib import Path -from typing import List, Optional, Tuple, Union +from typing import List, Optional, Tuple, Union, Dict from sqlalchemy.orm import Session @@ -115,13 +115,15 @@ class TransferChain(ChainBase): return False, f"{path.name} 没有找到可转移的媒体文件" # 汇总错误信息 - err_msgs = [] + err_msgs: List[str] = [] + # 汇总季集清单 + season_episodes: Dict[Tuple, List[int]] = [] # 汇总元数据 - metas = {} + metas: Dict[Tuple, MetaBase] = {} # 汇总媒体信息 - medias = {} + medias: Dict[Tuple, MediaInfo] = {} # 汇总转移信息 - transfers = {} + transfers: Dict[Tuple, TransferInfo] = {} # 有集自定义格式 formaterHandler = FormatParser(eformat=epformat.format, @@ -250,30 +252,22 @@ class TransferChain(ChainBase): continue # 汇总信息 - if file_mediainfo.tmdb_id not in medias: + mkey = (file_mediainfo.tmdb_id, meta.begin_season) + if mkey not in medias: # 新增信息 - metas[file_mediainfo.tmdb_id] = file_meta - medias[file_mediainfo.tmdb_id] = file_mediainfo - transfers[file_mediainfo.tmdb_id] = transferinfo + metas[mkey] = file_meta + medias[mkey] = file_mediainfo + season_episodes[mkey] = file_meta.episode_list + transfers[mkey] = transferinfo else: - # 合并元数据集 - if (metas[file_mediainfo.tmdb_id].begin_episode or 0) > (file_meta.begin_episode or 0): - metas[file_mediainfo.tmdb_id].begin_episode = file_meta.begin_episode - if (metas[file_mediainfo.tmdb_id].end_episode or 0) < (file_meta.end_episode or 0): - metas[file_mediainfo.tmdb_id].end_episode = file_meta.end_episode - metas[file_mediainfo.tmdb_id].total_episode += file_meta.total_episode - # 合并元数据季 - if (metas[file_mediainfo.tmdb_id].begin_season or 0) > (file_meta.begin_season or 0): - metas[file_mediainfo.tmdb_id].begin_season = file_meta.begin_season - if (metas[file_mediainfo.tmdb_id].end_season or 0) < (file_meta.end_season or 0): - metas[file_mediainfo.tmdb_id].end_season = file_meta.end_season - metas[file_mediainfo.tmdb_id].total_season += file_meta.total_season + # 合并季集清单 + season_episodes[mkey] = list(set(season_episodes[mkey] + file_meta.episode_list)) # 合并转移数据 - transfers[file_mediainfo.tmdb_id].file_count += transferinfo.file_count - transfers[file_mediainfo.tmdb_id].file_list.extend(transferinfo.file_list) - transfers[file_mediainfo.tmdb_id].file_list_new.extend(transferinfo.file_list_new) - transfers[file_mediainfo.tmdb_id].fail_list.extend(transferinfo.fail_list) - transfers[file_mediainfo.tmdb_id].total_size += transferinfo.total_size + transfers[mkey].file_count += transferinfo.file_count + transfers[mkey].total_size += transferinfo.total_size + transfers[mkey].file_list.extend(transferinfo.file_list) + transfers[mkey].file_list_new.extend(transferinfo.file_list_new) + transfers[mkey].fail_list.extend(transferinfo.fail_list) # 新增转移成功历史记录 self.__insert_sucess_history( @@ -297,15 +291,21 @@ class TransferChain(ChainBase): key=ProgressKey.FileTransfer) # 目录或文件转移完成 - for tmdbid, media in medias.items(): + for mkey, media in medias.items(): + meta = metas[mkey] + transferinfo = transfers[mkey] # 刷新媒体库 - self.refresh_mediaserver(mediainfo=media, file_path=transfers[tmdbid].target_path) + self.refresh_mediaserver(mediainfo=media, file_path=transferinfo.target_path) # 刮削 - self.scrape_metadata(path=transfers[tmdbid].target_path, mediainfo=media) + self.scrape_metadata(path=transferinfo.target_path, mediainfo=media) # 发送通知 - self.send_transfer_message(meta=metas[tmdbid], + se_str = None + if mediainfo.type == MediaType.TV: + se_str = f"{meta.season} {StringUtils.format_ep(season_episodes[mkey])}" + self.send_transfer_message(meta=meta, mediainfo=media, - transferinfo=transfers[tmdbid]) + transferinfo=transferinfo, + season_episode=se_str) # 结束进度 logger.info(f"{path} 转移完成,共 {total_num} 个文件," f"成功 {total_num - len(err_msgs)} 个,失败 {len(err_msgs)} 个") diff --git a/app/plugins/dirmonitor/__init__.py b/app/plugins/dirmonitor/__init__.py index 6b24bdac..fc6ed536 100644 --- a/app/plugins/dirmonitor/__init__.py +++ b/app/plugins/dirmonitor/__init__.py @@ -452,10 +452,8 @@ class DirMonitor(_PluginBase): season_episode = None # 处理文件多,说明是剧集,显示季入库消息 if mediainfo.type == MediaType.TV and len(episodes) > 1: - # 剧集季 - season = "S%s" % str(file_meta.begin_season).rjust(2, "0") # 季集文本 - season_episode = f"{season} {StringUtils.format_ep(episodes)}" + season_episode = f"{file_meta.season} {StringUtils.format_ep(episodes)}" # 发送消息 self.transferchian.send_transfer_message(meta=file_meta, mediainfo=mediainfo,