From 5d604b9b1402599547f4c733fa94ae5752b91773 Mon Sep 17 00:00:00 2001 From: pren Date: Thu, 22 May 2025 11:24:55 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0debug=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E6=8E=92=E6=9F=A5del=5Fno=5Ffree=E6=97=A0=E6=B3=95=E8=A2=AB?= =?UTF-8?q?=E4=BD=BF=E8=83=BD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins.v2/brushflow/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins.v2/brushflow/__init__.py b/plugins.v2/brushflow/__init__.py index 03412e3..3fb0094 100644 --- a/plugins.v2/brushflow/__init__.py +++ b/plugins.v2/brushflow/__init__.py @@ -39,6 +39,8 @@ class BrushConfig: """ def __init__(self, config: dict, process_site_config=True): + logger.debug(f"[xx]根据配置创建BrushConfig:{config}") + self.enabled = config.get("enabled", False) self.notify = config.get("notify", True) self.onlyonce = config.get("onlyonce", False) @@ -74,6 +76,7 @@ class BrushConfig: self.brush_sequential = config.get("brush_sequential", False) self.proxy_delete = config.get("proxy_delete", False) self.del_no_free = config.get("del_no_free", False) if self.freeleech in ["free", "2xfree"] else False + logger.debug(f'self.freeleech: {self.freeleech}, self.freeleech in ["free", "2xfree"]: {self.freeleech in ["free", "2xfree"]}, del_no_free: {del_no_free}') self.active_time_range = config.get("active_time_range") self.cron = config.get("cron") self.qb_category = config.get("qb_category") @@ -2571,6 +2574,8 @@ class BrushFlow(_PluginBase): if not torrent: logger.debug(f"未获取到种子 {torrent_info.get('hash', '?')} 的任务信息。") + logger.debug(f"brush_config.del_no_free: {brush_config.del_no_free}") + while torrent and brush_config.del_no_free: if not torrent.get("freedate", None): logger.warning(f"配置了‘删除促销过期的未完成下载’,但未获取到该种子的促销截止时间,跳过。") From 7cc2571027fc3b993f6a6e8968c22b35bcda2e00 Mon Sep 17 00:00:00 2001 From: pren Date: Thu, 22 May 2025 11:37:25 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Ddel=5Fno=5Ffree=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=A2=ABGUI=E8=AE=BE=E7=BD=AE=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins.v2/brushflow/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins.v2/brushflow/__init__.py b/plugins.v2/brushflow/__init__.py index 3fb0094..77178b0 100644 --- a/plugins.v2/brushflow/__init__.py +++ b/plugins.v2/brushflow/__init__.py @@ -3022,6 +3022,7 @@ class BrushFlow(_PluginBase): "exclude": brush_config.exclude, "size": brush_config.size, "seeder": brush_config.seeder, + "timezone_offset": brush_config.timezone_offset, "pubtime": brush_config.pubtime, "seed_time": brush_config.seed_time, "hr_seed_time": brush_config.hr_seed_time, @@ -3045,6 +3046,7 @@ class BrushFlow(_PluginBase): "qb_category": brush_config.qb_category, "enable_site_config": brush_config.enable_site_config, "site_config": brush_config.site_config, + "del_no_free": brush_config.del_no_free, "_tabs": self._tabs } From 0df7d4ae0ca123ae2bc76550f9532c88cd19c92e Mon Sep 17 00:00:00 2001 From: pren Date: Thu, 22 May 2025 11:41:50 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E4=B8=ADdel=5Fno=5Ffree=E5=8F=98=E9=87=8F=E7=9A=84=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在日志输出中,将错误的变量名`del_no_free`修正为`self.del_no_free`,以确保日志信息正确反映对象属性值。 --- plugins.v2/brushflow/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins.v2/brushflow/__init__.py b/plugins.v2/brushflow/__init__.py index 77178b0..1cdfb00 100644 --- a/plugins.v2/brushflow/__init__.py +++ b/plugins.v2/brushflow/__init__.py @@ -76,7 +76,7 @@ class BrushConfig: self.brush_sequential = config.get("brush_sequential", False) self.proxy_delete = config.get("proxy_delete", False) self.del_no_free = config.get("del_no_free", False) if self.freeleech in ["free", "2xfree"] else False - logger.debug(f'self.freeleech: {self.freeleech}, self.freeleech in ["free", "2xfree"]: {self.freeleech in ["free", "2xfree"]}, del_no_free: {del_no_free}') + logger.debug(f'self.freeleech: {self.freeleech}, self.freeleech in ["free", "2xfree"]: {self.freeleech in ["free", "2xfree"]}, del_no_free: {self.del_no_free}') self.active_time_range = config.get("active_time_range") self.cron = config.get("cron") self.qb_category = config.get("qb_category") From 4a1bdb6c45176ccf3e0fb2a6f02a7241a387f1ce Mon Sep 17 00:00:00 2001 From: pren Date: Thu, 22 May 2025 12:00:17 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=9C=A8=E6=9C=AA=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=88=A0=E7=A7=8D=E7=9A=84=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E4=B8=AD=E5=A2=9E=E5=8A=A0del=5Fno=5Ffree=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins.v2/brushflow/__init__.py | 38 ++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/plugins.v2/brushflow/__init__.py b/plugins.v2/brushflow/__init__.py index 1cdfb00..1098e09 100644 --- a/plugins.v2/brushflow/__init__.py +++ b/plugins.v2/brushflow/__init__.py @@ -39,8 +39,6 @@ class BrushConfig: """ def __init__(self, config: dict, process_site_config=True): - logger.debug(f"[xx]根据配置创建BrushConfig:{config}") - self.enabled = config.get("enabled", False) self.notify = config.get("notify", True) self.onlyonce = config.get("onlyonce", False) @@ -76,7 +74,6 @@ class BrushConfig: self.brush_sequential = config.get("brush_sequential", False) self.proxy_delete = config.get("proxy_delete", False) self.del_no_free = config.get("del_no_free", False) if self.freeleech in ["free", "2xfree"] else False - logger.debug(f'self.freeleech: {self.freeleech}, self.freeleech in ["free", "2xfree"]: {self.freeleech in ["free", "2xfree"]}, del_no_free: {self.del_no_free}') self.active_time_range = config.get("active_time_range") self.cron = config.get("cron") self.qb_category = config.get("qb_category") @@ -2539,6 +2536,24 @@ class BrushFlow(_PluginBase): return True, f"H&R种子,分享率 {torrent_info.get('ratio'):.2f},大于 {brush_config.seed_ratio}" return False, "H&R种子,未能满足设置的H&R删除条件" + while brush_config.del_no_free: + if not torrent_task.get("freedate", None): + logger.warning(f"配置了‘删除促销过期的未完成下载’,但未获取到该种子的促销截止时间,跳过。") + break + try: + now = datetime.now() + freedate_origin = torrent_task.get("freedate") + freedate = freedate_origin.replace("T", " ").replace("Z", "") + freedate = datetime.strptime(freedate, "%Y-%m-%d %H:%M:%S") + delta_minutes = (((now - freedate).total_seconds() + 60) // 60) - brush_config.timezone_offset + logger.debug(f"促销截止(站点时间): {freedate_origin}, 时区偏移: {brush_config.timezone_offset}, 用户当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}, 时间差: {delta_minutes}分") + if delta_minutes <= 0: + return True, "促销过期" + except Exception as e: + logger.warning(f"处理‘删除促销过期的未完成下载’时报错,继续判断其他删除条件。") + logger.debug(f"error: {e}") + break + # 处理其他场景,1. 不是H&R种子;2. 是H&R种子但没有特定条件配置 reason = reason if not hit_and_run else "H&R种子(未设置H&R条件),未能满足设置的删除条件" if brush_config.seed_time and torrent_info.get("seeding_time") >= float(brush_config.seed_time) * 3600: @@ -2561,28 +2576,22 @@ class BrushFlow(_PluginBase): return True, reason if not hit_and_run else "H&R种子(未设置H&R条件)," + reason - def __evaluate_proxy_pre_conditions_for_delete(self, site_name: str, torrent_info: dict) -> Tuple[bool, str]: + def __evaluate_proxy_pre_conditions_for_delete(self, site_name: str, torrent_info: dict, torrent_task: dict) -> Tuple[bool, str]: """ 评估动态删除前置条件并返回是否应删除种子及其原因 """ brush_config = self.__get_brush_config(sitename=site_name) - torrent = (self.get_data("torrents") or {}).get(torrent_info.get("hash", ""), None) should_delete = False reason = "未能满足动态删除设置的前置删除条件" - if not torrent: - logger.debug(f"未获取到种子 {torrent_info.get('hash', '?')} 的任务信息。") - - logger.debug(f"brush_config.del_no_free: {brush_config.del_no_free}") - - while torrent and brush_config.del_no_free: - if not torrent.get("freedate", None): + while brush_config.del_no_free: + if not torrent_task.get("freedate", None): logger.warning(f"配置了‘删除促销过期的未完成下载’,但未获取到该种子的促销截止时间,跳过。") break try: now = datetime.now() - freedate_origin = torrent.get("freedate") + freedate_origin = torrent_task.get("freedate") freedate = freedate_origin.replace("T", " ").replace("Z", "") freedate = datetime.strptime(freedate, "%Y-%m-%d %H:%M:%S") delta_minutes = (((now - freedate).total_seconds() + 60) // 60) - brush_config.timezone_offset @@ -2664,7 +2673,8 @@ class BrushFlow(_PluginBase): # 删除种子的具体实现可能会根据实际情况略有不同 should_delete, reason = self.__evaluate_proxy_pre_conditions_for_delete(site_name=site_name, - torrent_info=torrent_info) + torrent_info=torrent_info, + torrent_task=torrent_task) if should_delete: delete_hashes.append(torrent_hash) self.__send_delete_message(site_name=site_name, torrent_title=torrent_title, torrent_desc=torrent_desc, From b5b193aaac69ca14f767a445210a5f3bfa183f0c Mon Sep 17 00:00:00 2001 From: pren Date: Thu, 22 May 2025 12:19:02 +0800 Subject: [PATCH 5/6] fix bug --- plugins.v2/brushflow/__init__.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/plugins.v2/brushflow/__init__.py b/plugins.v2/brushflow/__init__.py index 1098e09..76e7422 100644 --- a/plugins.v2/brushflow/__init__.py +++ b/plugins.v2/brushflow/__init__.py @@ -2545,7 +2545,7 @@ class BrushFlow(_PluginBase): freedate_origin = torrent_task.get("freedate") freedate = freedate_origin.replace("T", " ").replace("Z", "") freedate = datetime.strptime(freedate, "%Y-%m-%d %H:%M:%S") - delta_minutes = (((now - freedate).total_seconds() + 60) // 60) - brush_config.timezone_offset + delta_minutes = (((freedate - now).total_seconds() + 60) // 60) - brush_config.timezone_offset logger.debug(f"促销截止(站点时间): {freedate_origin}, 时区偏移: {brush_config.timezone_offset}, 用户当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}, 时间差: {delta_minutes}分") if delta_minutes <= 0: return True, "促销过期" @@ -2582,7 +2582,6 @@ class BrushFlow(_PluginBase): """ brush_config = self.__get_brush_config(sitename=site_name) - should_delete = False reason = "未能满足动态删除设置的前置删除条件" while brush_config.del_no_free: @@ -2594,16 +2593,14 @@ class BrushFlow(_PluginBase): freedate_origin = torrent_task.get("freedate") freedate = freedate_origin.replace("T", " ").replace("Z", "") freedate = datetime.strptime(freedate, "%Y-%m-%d %H:%M:%S") - delta_minutes = (((now - freedate).total_seconds() + 60) // 60) - brush_config.timezone_offset + delta_minutes = (((freedate - now).total_seconds() + 60) // 60) - brush_config.timezone_offset logger.debug(f"促销截止(站点时间): {freedate_origin}, 时区偏移: {brush_config.timezone_offset}, 用户当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}, 时间差: {delta_minutes}分") if delta_minutes <= 0: - should_delete = True - reason = f"促销已过期。" + return True, f"促销已过期" except Exception as e: logger.warning(f"处理‘删除促销过期的未完成下载’时报错,继续判断其他删除条件。") logger.debug(f"error: {e}") - finally: - break + break if brush_config.download_time and torrent_info.get("downloaded") < torrent_info.get( "total_size") and torrent_info.get("dltime") >= float(brush_config.download_time) * 3600: From 7c976748833363cf30eb22beac4dbab290431333 Mon Sep 17 00:00:00 2001 From: pren Date: Thu, 22 May 2025 12:23:17 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E2=80=9C=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=9A=84=E4=B8=8B=E8=BD=BD=E2=80=9D=E7=9A=84?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins.v2/brushflow/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins.v2/brushflow/__init__.py b/plugins.v2/brushflow/__init__.py index 76e7422..7c81996 100644 --- a/plugins.v2/brushflow/__init__.py +++ b/plugins.v2/brushflow/__init__.py @@ -2536,7 +2536,7 @@ class BrushFlow(_PluginBase): return True, f"H&R种子,分享率 {torrent_info.get('ratio'):.2f},大于 {brush_config.seed_ratio}" return False, "H&R种子,未能满足设置的H&R删除条件" - while brush_config.del_no_free: + while brush_config.del_no_free and torrent_info.get("downloaded") < torrent_info.get("total_size"): if not torrent_task.get("freedate", None): logger.warning(f"配置了‘删除促销过期的未完成下载’,但未获取到该种子的促销截止时间,跳过。") break