From 99218515eaeb26e4571dd92dff199ea234fffd83 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 5 Sep 2023 16:12:43 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix=20=E9=83=A8=E5=88=86=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=93=8D=E4=BD=9C=E6=B2=A1=E6=9C=89Commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/db/__init__.py | 6 +++--- app/db/models/downloadhistory.py | 5 +++-- app/db/models/plugin.py | 3 ++- app/db/models/transferhistory.py | 1 + 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/db/__init__.py b/app/db/__init__.py index acae147d..e18a61e8 100644 --- a/app/db/__init__.py +++ b/app/db/__init__.py @@ -8,8 +8,9 @@ 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, + pool_size=1024, + pool_recycle=600, + pool_timeout=180, max_overflow=0) # 会话工厂 SessionFactory = sessionmaker(autocommit=False, autoflush=False, bind=Engine) @@ -33,7 +34,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() From 6a08b4ba7fa7da81e4627aee0c7c37d7330bde92 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 5 Sep 2023 16:18:04 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix=20=E6=8F=90=E9=AB=98DB=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E7=AD=89=E5=BE=85=E6=97=B6=E9=97=B4=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8Ddatabase=20locked=E6=8A=A5=E9=94=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/db/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/db/__init__.py b/app/db/__init__.py index e18a61e8..da335492 100644 --- a/app/db/__init__.py +++ b/app/db/__init__.py @@ -11,7 +11,8 @@ Engine = create_engine(f"sqlite:///{settings.CONFIG_PATH}/user.db", pool_size=1024, pool_recycle=600, pool_timeout=180, - max_overflow=0) + max_overflow=0, + connect_args={"timeout": 60}) # 会话工厂 SessionFactory = sessionmaker(autocommit=False, autoflush=False, bind=Engine) From c69762d4c94c08f054dfbbeb2a7b3f7f8099482d Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 5 Sep 2023 16:35:15 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix=20#448=20TR=E9=99=90=E9=80=9F=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/qbittorrent/qbittorrent.py | 1 + app/modules/transmission/transmission.py | 5 ++-- app/plugins/speedlimiter/__init__.py | 38 ++++++++++++------------ 3 files changed, 23 insertions(+), 21 deletions(-) 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)}") From 4cb7a488a9189fc4ddbc53374a39b2307b4453dc Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 5 Sep 2023 16:43:02 +0800 Subject: [PATCH 4/5] fix #193 --- app/chain/transfer.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 44b3784a..55f1ecdd 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] + transfer_meta = metas[mkey] + transfer_info = transfers[mkey] # 刷新媒体库 - self.refresh_mediaserver(mediainfo=media, file_path=transferinfo.target_path) + self.refresh_mediaserver(mediainfo=media, file_path=transfer_info.target_path) # 刮削 - self.scrape_metadata(path=transferinfo.target_path, mediainfo=media) + self.scrape_metadata(path=transfer_info.target_path, mediainfo=media) # 发送通知 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)} 个") From 1a039814632260afbd51998c9733254eca3d4a54 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 5 Sep 2023 16:43:34 +0800 Subject: [PATCH 5/5] fix #193 --- app/chain/transfer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 55f1ecdd..4aef7f88 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -336,10 +336,10 @@ class TransferChain(ChainBase): for mkey, media in medias.items(): transfer_meta = metas[mkey] transfer_info = transfers[mkey] - # 刷新媒体库 - self.refresh_mediaserver(mediainfo=media, file_path=transfer_info.target_path) # 刮削 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: