diff --git a/app/chain/transfer.py b/app/chain/transfer.py index f1c2fbbe..77884450 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -1,4 +1,3 @@ -import json import shutil import threading from pathlib import Path @@ -188,10 +187,11 @@ class TransferChain(ChainBase): if not file_mediainfo: logger.warn(f'{file_path} 未识别到媒体信息') # 新增转移失败历史记录 - his = self.__insert_fail_history( + his = self.transferhis.add_fail( src_path=file_path, - download_hash=download_hash, - meta=file_meta + mode=settings.TRANSFER_TYPE, + meta=file_meta, + download_hash=download_hash ) self.post_message(Notification( mtype=NotificationType.Manual, @@ -225,8 +225,9 @@ class TransferChain(ChainBase): logger.warn(f"{file_path.name} 入库失败:{transferinfo.message}") err_msgs.append(f"{file_path.name} {transferinfo.message}") # 新增转移失败历史记录 - self.__insert_fail_history( + self.transferhis.add_fail( src_path=file_path, + mode=settings.TRANSFER_TYPE, download_hash=download_hash, meta=file_meta, mediainfo=file_mediainfo, @@ -259,8 +260,9 @@ class TransferChain(ChainBase): transfers[mkey].fail_list.extend(transferinfo.fail_list) # 新增转移成功历史记录 - self.__insert_sucess_history( + self.transferhis.add_success( src_path=file_path, + mode=settings.TRANSFER_TYPE, download_hash=download_hash, meta=file_meta, mediainfo=file_mediainfo, @@ -486,72 +488,6 @@ class TransferChain(ChainBase): min_filesize=min_filesize) return state, errmsg - def __insert_sucess_history(self, src_path: Path, meta: MetaBase, - mediainfo: MediaInfo, transferinfo: TransferInfo, - download_hash: str = None): - """ - 新增转移成功历史记录 - """ - self.transferhis.add_force( - src=str(src_path), - dest=str(transferinfo.target_path), - mode=settings.TRANSFER_TYPE, - type=mediainfo.type.value, - category=mediainfo.category, - title=mediainfo.title, - year=mediainfo.year, - tmdbid=mediainfo.tmdb_id, - imdbid=mediainfo.imdb_id, - tvdbid=mediainfo.tvdb_id, - doubanid=mediainfo.douban_id, - seasons=meta.season, - episodes=meta.episode, - image=mediainfo.get_poster_image(), - download_hash=download_hash, - status=1, - files=json.dumps(transferinfo.file_list) - ) - - def __insert_fail_history(self, src_path: Path, download_hash: str, meta: MetaBase, - transferinfo: TransferInfo = None, mediainfo: MediaInfo = None): - """ - 新增转移失败历史记录 - """ - if mediainfo and transferinfo: - his = self.transferhis.add_force( - src=str(src_path), - dest=str(transferinfo.target_path), - mode=settings.TRANSFER_TYPE, - type=mediainfo.type.value, - category=mediainfo.category, - title=mediainfo.title or meta.name, - year=mediainfo.year or meta.year, - tmdbid=mediainfo.tmdb_id, - imdbid=mediainfo.imdb_id, - tvdbid=mediainfo.tvdb_id, - doubanid=mediainfo.douban_id, - seasons=meta.season, - episodes=meta.episode, - image=mediainfo.get_poster_image(), - download_hash=download_hash, - status=0, - errmsg=transferinfo.message or '未知错误', - files=json.dumps(transferinfo.file_list) - ) - else: - his = self.transferhis.add_force( - title=meta.name, - year=meta.year, - src=str(src_path), - mode=settings.TRANSFER_TYPE, - seasons=meta.season, - episodes=meta.episode, - download_hash=download_hash, - status=0, - errmsg="未识别到媒体信息" - ) - return his - def send_transfer_message(self, meta: MetaBase, mediainfo: MediaInfo, transferinfo: TransferInfo, season_episode: str = None): """ diff --git a/app/db/transferhistory_oper.py b/app/db/transferhistory_oper.py index 34f0cbaf..3c5e6688 100644 --- a/app/db/transferhistory_oper.py +++ b/app/db/transferhistory_oper.py @@ -1,8 +1,13 @@ +import json import time +from pathlib import Path from typing import Any, List +from app.core.context import MediaInfo +from app.core.meta import MetaBase from app.db import DbOper from app.db.models.transferhistory import TransferHistory +from app.schemas import TransferInfo class TransferHistoryOper(DbOper): @@ -88,3 +93,69 @@ class TransferHistoryOper(DbOper): 补充转移记录download_hash """ TransferHistory.update_download_hash(self._db, historyid, download_hash) + + def add_success(self, src_path: Path, mode: str, meta: MetaBase, + mediainfo: MediaInfo, transferinfo: TransferInfo, + download_hash: str = None): + """ + 新增转移成功历史记录 + """ + self.add_force( + src=str(src_path), + dest=str(transferinfo.target_path), + mode=mode, + type=mediainfo.type.value, + category=mediainfo.category, + title=mediainfo.title, + year=mediainfo.year, + tmdbid=mediainfo.tmdb_id, + imdbid=mediainfo.imdb_id, + tvdbid=mediainfo.tvdb_id, + doubanid=mediainfo.douban_id, + seasons=meta.season, + episodes=meta.episode, + image=mediainfo.get_poster_image(), + download_hash=download_hash, + status=1, + files=json.dumps(transferinfo.file_list) + ) + + def add_fail(self, src_path: Path, mode: str, meta: MetaBase, mediainfo: MediaInfo = None, + transferinfo: TransferInfo = None, download_hash: str = None): + """ + 新增转移失败历史记录 + """ + if mediainfo and transferinfo: + his = self.add_force( + src=str(src_path), + dest=str(transferinfo.target_path), + mode=mode, + type=mediainfo.type.value, + category=mediainfo.category, + title=mediainfo.title or meta.name, + year=mediainfo.year or meta.year, + tmdbid=mediainfo.tmdb_id, + imdbid=mediainfo.imdb_id, + tvdbid=mediainfo.tvdb_id, + doubanid=mediainfo.douban_id, + seasons=meta.season, + episodes=meta.episode, + image=mediainfo.get_poster_image(), + download_hash=download_hash, + status=0, + errmsg=transferinfo.message or '未知错误', + files=json.dumps(transferinfo.file_list) + ) + else: + his = self.add_force( + title=meta.name, + year=meta.year, + src=str(src_path), + mode=mode, + seasons=meta.season, + episodes=meta.episode, + download_hash=download_hash, + status=0, + errmsg="未识别到媒体信息" + ) + return his diff --git a/app/plugins/dirmonitor/__init__.py b/app/plugins/dirmonitor/__init__.py index 7ed2cbcb..eb77f203 100644 --- a/app/plugins/dirmonitor/__init__.py +++ b/app/plugins/dirmonitor/__init__.py @@ -1,8 +1,6 @@ -import json import re import shutil import threading -import time import traceback from datetime import datetime from pathlib import Path @@ -17,7 +15,6 @@ from watchdog.observers.polling import PollingObserver from app.chain.transfer import TransferChain from app.core.config import settings from app.core.context import MediaInfo -from app.core.meta import MetaBase from app.core.metainfo import MetaInfo from app.db.downloadhistory_oper import DownloadHistoryOper from app.db.transferhistory_oper import TransferHistoryOper @@ -251,17 +248,10 @@ class DirMonitor(_PluginBase): title=f"{file_path.name} 未识别到媒体信息,无法入库!" )) # 新增转移成功历史记录 - self.transferhis.add_force( - src=event_path, - dest=str(target), + self.transferhis.add_fail( + src_path=file_path, mode=self._transfer_type, - title=meta.name, - year=meta.year, - seasons=file_meta.season, - episodes=file_meta.episode, - status=0, - errmsg="未识别到媒体信息", - date=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + meta=file_meta ) return logger.info(f"{file_path.name} 识别为:{mediainfo.type.value} {mediainfo.title_year}") @@ -286,8 +276,9 @@ class DirMonitor(_PluginBase): # 转移失败 logger.warn(f"{file_path.name} 入库失败:{transferinfo.message}") # 新增转移失败历史记录 - self.__insert_fail_history( + self.transferhis.add_fail( src_path=file_path, + mode=self._transfer_type, download_hash=download_hash, meta=file_meta, mediainfo=mediainfo, @@ -302,8 +293,9 @@ class DirMonitor(_PluginBase): return # 新增转移成功历史记录 - self.__insert_sucess_history( + self.transferhis.add_success( src_path=file_path, + mode=self._transfer_type, download_hash=download_hash, meta=file_meta, mediainfo=mediainfo, @@ -467,72 +459,6 @@ class DirMonitor(_PluginBase): return downloadHis.download_hash return None - def __insert_sucess_history(self, src_path: Path, meta: MetaBase, - mediainfo: MediaInfo, transferinfo: TransferInfo, - download_hash: str = None): - """ - 新增转移成功历史记录 - """ - self.transferhis.add_force( - src=str(src_path), - dest=str(transferinfo.target_path), - mode=self._transfer_type, - type=mediainfo.type.value, - category=mediainfo.category, - title=mediainfo.title, - year=mediainfo.year, - tmdbid=mediainfo.tmdb_id, - imdbid=mediainfo.imdb_id, - tvdbid=mediainfo.tvdb_id, - doubanid=mediainfo.douban_id, - seasons=meta.season, - episodes=meta.episode, - image=mediainfo.get_poster_image(), - download_hash=download_hash, - status=1, - files=json.dumps(transferinfo.file_list) - ) - - def __insert_fail_history(self, src_path: Path, download_hash: str, meta: MetaBase, - transferinfo: TransferInfo = None, mediainfo: MediaInfo = None): - """ - 新增转移失败历史记录 - """ - if mediainfo and transferinfo: - his = self.transferhis.add_force( - src=str(src_path), - dest=str(transferinfo.target_path), - mode=settings.TRANSFER_TYPE, - type=mediainfo.type.value, - category=mediainfo.category, - title=mediainfo.title or meta.name, - year=mediainfo.year or meta.year, - tmdbid=mediainfo.tmdb_id, - imdbid=mediainfo.imdb_id, - tvdbid=mediainfo.tvdb_id, - doubanid=mediainfo.douban_id, - seasons=meta.season, - episodes=meta.episode, - image=mediainfo.get_poster_image(), - download_hash=download_hash, - status=0, - errmsg=transferinfo.message or '未知错误', - files=json.dumps(transferinfo.file_list) - ) - else: - his = self.transferhis.add_force( - title=meta.name, - year=meta.year, - src=str(src_path), - mode=settings.TRANSFER_TYPE, - seasons=meta.season, - episodes=meta.episode, - download_hash=download_hash, - status=0, - errmsg="未识别到媒体信息" - ) - return his - def get_state(self) -> bool: return self._enabled