From 058c038c68fdf9acea05df58b30618709f2a80c3 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Sat, 17 Aug 2024 02:17:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix(BrushFlow):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E8=AE=A2=E9=98=85=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/brushflow/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/brushflow/__init__.py b/plugins/brushflow/__init__.py index e3d45b6..0df145b 100644 --- a/plugins/brushflow/__init__.py +++ b/plugins/brushflow/__init__.py @@ -3755,7 +3755,8 @@ class BrushFlow(_PluginBase): doubanid=subscribe.doubanid, cache=True) if mediainfo: - logger.info(f"subscribe {subscribe.name} {mediainfo.to_dict()}") + logger.info(f"订阅 {subscribe.name} 已识别到媒体信息") + logger.debug(f"subscribe {subscribe.name} {mediainfo.to_dict()}") subscribe_titles.extend(mediainfo.names) subscribe_titles = [title.strip() for title in subscribe_titles if title and title.strip()] self._subscribe_infos[subscribe_key] = subscribe_titles @@ -3769,7 +3770,7 @@ class BrushFlow(_PluginBase): for key in set(self._subscribe_infos) - current_keys: del self._subscribe_infos[key] - logger.info("已订阅标题匹配完成") + logger.info("订阅标题匹配完成") logger.debug(f"当前订阅的标题集合为:{self._subscribe_infos}") unique_titles = {title for titles in self._subscribe_infos.values() for title in titles} return unique_titles From a6e21e11960248b2781e41780f6b494d163f3c2f Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:14:23 +0800 Subject: [PATCH 2/3] feat(BrushFlow): add auto_archive_days --- plugins/brushflow/__init__.py | 72 +++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/plugins/brushflow/__init__.py b/plugins/brushflow/__init__.py index 0df145b..f56735c 100644 --- a/plugins/brushflow/__init__.py +++ b/plugins/brushflow/__init__.py @@ -64,6 +64,7 @@ class BrushConfig: self.delete_size_range = config.get("delete_size_range") self.up_speed = self.__parse_number(config.get("up_speed")) self.dl_speed = self.__parse_number(config.get("dl_speed")) + self.auto_archive_days = self.__parse_number(config.get("auto_archive_days")) self.save_path = config.get("save_path") self.clear_task = config.get("clear_task", False) self.archive_task = config.get("archive_task", False) @@ -1131,6 +1132,25 @@ class BrushFlow(_PluginBase): } } ] + }, + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 4 + }, + 'content': [ + { + 'component': 'VTextField', + 'props': { + 'model': 'auto_archive_days', + 'label': '自动归档记录天数', + 'placeholder': '超过此天数后自动归档', + 'type': 'number', + "min": "0" + } + } + ] } ] } @@ -2391,6 +2411,10 @@ class BrushFlow(_PluginBase): if downloader.delete_torrents(ids=need_delete_hashes, delete_file=True): for torrent_hash in need_delete_hashes: torrent_tasks[torrent_hash]["deleted"] = True + torrent_tasks[torrent_hash]["deleted_time"] = time.time() + + # 归档数据 + self.__auto_archive_tasks(torrent_tasks=torrent_tasks) self.__update_and_save_statistic_info(torrent_tasks) @@ -2818,6 +2842,7 @@ class BrushFlow(_PluginBase): torrent_task = torrent_tasks[hash_value] # 标记为已删除 torrent_task["deleted"] = True + torrent_task["deleted_time"] = time.time() # 处理日志相关内容 delete_tasks.append(torrent_task) site_name = torrent_task.get("site_name", "") @@ -2943,7 +2968,8 @@ class BrushFlow(_PluginBase): "seed_avgspeed": "平均上传速度", "seed_inactivetime": "未活动时间", "up_speed": "单任务上传限速", - "dl_speed": "单任务下载限速" + "dl_speed": "单任务下载限速", + "auto_archive_days": "自动清理记录天数" } config_range_number_attr_to_desc = { @@ -3015,6 +3041,7 @@ class BrushFlow(_PluginBase): "delete_size_range": brush_config.delete_size_range, "up_speed": brush_config.up_speed, "dl_speed": brush_config.dl_speed, + "auto_archive_days": brush_config.auto_archive_days, "save_path": brush_config.save_path, "clear_task": brush_config.clear_task, "archive_task": brush_config.archive_task, @@ -3838,6 +3865,45 @@ class BrushFlow(_PluginBase): """ return sum(task.get("size", 0) for task in torrent_tasks.values() if not task.get("deleted", False)) + def __auto_archive_tasks(self, torrent_tasks: Dict[str, dict]) -> None: + """ + 自动归档已经删除的种子数据 + """ + if not self._brush_config.auto_archive_days or self._brush_config.auto_archive_days <= 0: + logger.info("自动归档记录天数小于等于0,取消自动归档") + return + + # 用于存储已删除的数据 + archived_tasks: Dict[str, dict] = self.get_data("archived") or {} + + current_time = time.time() + archive_threshold_seconds = self._brush_config.auto_archive_days * 86400 # 将天数转换为秒数 + + # 准备一个列表,记录所有需要从原始数据中删除的键 + keys_to_delete = set() + + # 遍历所有 torrent 条目 + for key, value in torrent_tasks.items(): + deleted_time = value.get("deleted_time") + # 场景 1: 检查任务是否已被标记为删除且超出保留天数 + if (value.get("deleted") and isinstance(deleted_time, (int, float)) and + current_time - deleted_time > archive_threshold_seconds): + keys_to_delete.add(key) + archived_tasks[key] = value + continue + + # 场景 2: 检查没有明确删除时间的历史数据 + if value.get("deleted") and deleted_time is None: + keys_to_delete.add(key) + archived_tasks[key] = value + continue + + # 从原始字典中移除已删除的条目 + for key in keys_to_delete: + del torrent_tasks[key] + + self.save_data("archived", archived_tasks) + def __archive_tasks(self): """ 归档已经删除的种子数据 @@ -3848,7 +3914,7 @@ class BrushFlow(_PluginBase): archived_tasks: Dict[str, dict] = self.get_data("archived") or {} # 准备一个列表,记录所有需要从原始数据中删除的键 - keys_to_delete = [] + keys_to_delete = set() # 遍历所有 torrent 条目 for key, value in torrent_tasks.items(): @@ -3857,7 +3923,7 @@ class BrushFlow(_PluginBase): # 如果是,加入到归档字典中 archived_tasks[key] = value # 记录键,稍后删除 - keys_to_delete.append(key) + keys_to_delete.add(key) # 从原始字典中移除已删除的条目 for key in keys_to_delete: From abfa272f2ec5ea0a551bd572e6f770c1a394e129 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:15:22 +0800 Subject: [PATCH 3/3] feat(BrushFlow): v3.8 --- package.json | 3 ++- plugins/brushflow/__init__.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6d44ffc..edef083 100644 --- a/package.json +++ b/package.json @@ -399,12 +399,13 @@ "name": "站点刷流", "description": "自动托管刷流,将会提高对应站点的访问频率。", "labels": "刷流,仪表板", - "version": "3.7", + "version": "3.8", "icon": "brush.jpg", "author": "jxxghp,InfinityPacer", "level": 2, "v2": true, "history": { + "v3.8": "添加自动归档记录天数配置项,支持定时归档已删除数据", "v3.7": "下载数量调整为仅获取刷流标签种子并修复了一些细节问题", "v3.6": "优化检查服务中的时间管控", "v3.5": "移除「删种排除MoviePilot任务」配置项(请使用「删除排除标签」替代),完善刷流任务触发插件事件相关逻辑(联动H&R助手)", diff --git a/plugins/brushflow/__init__.py b/plugins/brushflow/__init__.py index f56735c..faa6c05 100644 --- a/plugins/brushflow/__init__.py +++ b/plugins/brushflow/__init__.py @@ -258,7 +258,7 @@ class BrushFlow(_PluginBase): # 插件图标 plugin_icon = "brush.jpg" # 插件版本 - plugin_version = "3.7" + plugin_version = "3.8" # 插件作者 plugin_author = "jxxghp,InfinityPacer" # 作者主页