diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 44b3784a..4aef7f88 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -323,13 +323,6 @@ class TransferChain(ChainBase): mediainfo=file_mediainfo, transferinfo=transferinfo ) - - # 广播事件 - self.eventmanager.send_event(EventType.TransferComplete, { - 'meta': file_meta, - 'mediainfo': file_mediainfo, - 'transferinfo': transferinfo - }) # 更新进度 processed_num += 1 self.progress.update(value=processed_num / total_num * 100, @@ -337,21 +330,30 @@ class TransferChain(ChainBase): key=ProgressKey.FileTransfer) # 目录或文件转移完成 + self.progress.update(value=100, + text=f"所有文件转移完成,正在执行后续处理 ...", + key=ProgressKey.FileTransfer) for mkey, media in medias.items(): - meta = metas[mkey] - transferinfo = transfers[mkey] - # 刷新媒体库 - self.refresh_mediaserver(mediainfo=media, file_path=transferinfo.target_path) + transfer_meta = metas[mkey] + transfer_info = transfers[mkey] # 刮削 - self.scrape_metadata(path=transferinfo.target_path, mediainfo=media) + self.scrape_metadata(path=transfer_info.target_path, mediainfo=media) + # 刷新媒体库 + self.refresh_mediaserver(mediainfo=media, file_path=transfer_info.target_path) # 发送通知 se_str = None if media.type == MediaType.TV: - se_str = f"{meta.season} {StringUtils.format_ep(season_episodes[mkey])}" - self.send_transfer_message(meta=meta, + se_str = f"{transfer_meta.season} {StringUtils.format_ep(season_episodes[mkey])}" + self.send_transfer_message(meta=transfer_meta, mediainfo=media, - transferinfo=transferinfo, + transferinfo=transfer_info, season_episode=se_str) + # 广播事件 + self.eventmanager.send_event(EventType.TransferComplete, { + 'meta': transfer_meta, + 'mediainfo': media, + 'transferinfo': transfer_info + }) # 结束进度 logger.info(f"{path} 转移完成,共 {total_num} 个文件," f"成功 {total_num - len(err_msgs)} 个,失败 {len(err_msgs)} 个") diff --git a/app/db/__init__.py b/app/db/__init__.py index acae147d..da335492 100644 --- a/app/db/__init__.py +++ b/app/db/__init__.py @@ -8,9 +8,11 @@ Engine = create_engine(f"sqlite:///{settings.CONFIG_PATH}/user.db", pool_pre_ping=True, echo=False, poolclass=QueuePool, - pool_size=1000, - pool_recycle=60 * 10, - max_overflow=0) + pool_size=1024, + pool_recycle=600, + pool_timeout=180, + max_overflow=0, + connect_args={"timeout": 60}) # 会话工厂 SessionFactory = sessionmaker(autocommit=False, autoflush=False, bind=Engine) @@ -33,7 +35,6 @@ def get_db(): class DbOper: - _db: Session = None def __init__(self, db: Session = None): diff --git a/app/db/models/downloadhistory.py b/app/db/models/downloadhistory.py index 6f911902..0999c86b 100644 --- a/app/db/models/downloadhistory.py +++ b/app/db/models/downloadhistory.py @@ -130,9 +130,10 @@ class DownloadFiles(Base): @staticmethod def delete_by_fullpath(db: Session, fullpath: str): - return db.query(DownloadFiles).filter(DownloadFiles.fullpath == fullpath, - DownloadFiles.state == 1).update( + db.query(DownloadFiles).filter(DownloadFiles.fullpath == fullpath, + DownloadFiles.state == 1).update( { "state": 0 } ) + db.commit() diff --git a/app/db/models/plugin.py b/app/db/models/plugin.py index b1717043..e4af5e58 100644 --- a/app/db/models/plugin.py +++ b/app/db/models/plugin.py @@ -23,7 +23,8 @@ class PluginData(Base): @staticmethod def del_plugin_data_by_key(db: Session, plugin_id: str, key: str): - return db.query(PluginData).filter(PluginData.plugin_id == plugin_id, PluginData.key == key).delete() + db.query(PluginData).filter(PluginData.plugin_id == plugin_id, PluginData.key == key).delete() + db.commit() @staticmethod def get_plugin_data_by_plugin_id(db: Session, plugin_id: str): diff --git a/app/db/models/transferhistory.py b/app/db/models/transferhistory.py index 86554582..b004877b 100644 --- a/app/db/models/transferhistory.py +++ b/app/db/models/transferhistory.py @@ -122,3 +122,4 @@ class TransferHistory(Base): "download_hash": download_hash } ) + db.commit() diff --git a/app/modules/qbittorrent/qbittorrent.py b/app/modules/qbittorrent/qbittorrent.py index 8ed72504..ba385d0c 100644 --- a/app/modules/qbittorrent/qbittorrent.py +++ b/app/modules/qbittorrent/qbittorrent.py @@ -339,6 +339,7 @@ class Qbittorrent(metaclass=Singleton): try: self.qbc.transfer.upload_limit = int(upload_limit) self.qbc.transfer.download_limit = int(download_limit) + return True except Exception as err: logger.error(f"设置速度限制出错:{err}") return False diff --git a/app/modules/transmission/transmission.py b/app/modules/transmission/transmission.py index e9013b4e..38deeafe 100644 --- a/app/modules/transmission/transmission.py +++ b/app/modules/transmission/transmission.py @@ -243,14 +243,14 @@ class Transmission(metaclass=Singleton): logger.error(f"获取传输信息出错:{err}") return None - def set_speed_limit(self, download_limit: float = None, upload_limit: float = None): + def set_speed_limit(self, download_limit: float = None, upload_limit: float = None) -> bool: """ 设置速度限制 :param download_limit: 下载速度限制,单位KB/s :param upload_limit: 上传速度限制,单位kB/s """ if not self.trc: - return + return False try: download_limit_enabled = True if download_limit else False upload_limit_enabled = True if upload_limit else False @@ -260,6 +260,7 @@ class Transmission(metaclass=Singleton): speed_limit_down_enabled=download_limit_enabled, speed_limit_up_enabled=upload_limit_enabled ) + return True except Exception as err: logger.error(f"设置速度限制出错:{err}") return False diff --git a/app/plugins/speedlimiter/__init__.py b/app/plugins/speedlimiter/__init__.py index 1ee65415..fafce52e 100644 --- a/app/plugins/speedlimiter/__init__.py +++ b/app/plugins/speedlimiter/__init__.py @@ -539,25 +539,25 @@ class SpeedLimiter(_PluginBase): title=title, text=f"Qbittorrent 已取消限速" ) - else: - if self._tr: - self._tr.set_speed_limit(download_limit=download_limit, upload_limit=upload_limit) - # 发送通知 - if self._notify: - title = "【播放限速】" - if upload_limit or download_limit: - subtitle = f"Transmission 开始{limit_type}限速" - self.post_message( - mtype=NotificationType.MediaServer, - title=title, - text=f"{subtitle}\n{text}" - ) - else: - self.post_message( - mtype=NotificationType.MediaServer, - title=title, - text=f"Transmission 已取消限速" - ) + else: + if self._tr: + self._tr.set_speed_limit(download_limit=download_limit, upload_limit=upload_limit) + # 发送通知 + if self._notify: + title = "【播放限速】" + if upload_limit or download_limit: + subtitle = f"Transmission 开始{limit_type}限速" + self.post_message( + mtype=NotificationType.MediaServer, + title=title, + text=f"{subtitle}\n{text}" + ) + else: + self.post_message( + mtype=NotificationType.MediaServer, + title=title, + text=f"Transmission 已取消限速" + ) except Exception as e: logger.error(f"设置限速失败:{str(e)}")