diff --git a/package.json b/package.json index 8836bef..822585f 100644 --- a/package.json +++ b/package.json @@ -238,11 +238,12 @@ "BrushFlow": { "name": "站点刷流", "description": "自动托管刷流,将会提高对应站点的访问频率。", - "version": "2.6", + "version": "2.7", "icon": "brush.jpg", "author": "jxxghp,InfinityPacer", "level": 2, "history": { + "v2.7": "优化UI显示以及提升性能", "v2.6": "修复排除订阅功能", "v2.5": "增加H&R做种时间、下载器监控配置项,刷流前置条件逻辑调整,代理下载种子默认为关闭" } diff --git a/plugins/brushflow/__init__.py b/plugins/brushflow/__init__.py index 03df5f7..decb634 100644 --- a/plugins/brushflow/__init__.py +++ b/plugins/brushflow/__init__.py @@ -109,7 +109,9 @@ class BrushConfig: # 当新增支持字段时,仅在此处添加字段名 } try: - site_configs = json.loads(self.site_config) + # site_config中去掉以//开始的行 + site_config = re.sub(r'//.*?\n', '', self.site_config).strip() + site_configs = json.loads(site_config) self.group_site_configs = {} for config in site_configs: sitename = config.get("sitename") @@ -192,7 +194,7 @@ class BrushFlow(_PluginBase): # 插件图标 plugin_icon = "brush.jpg" # 插件版本 - plugin_version = "2.6" + plugin_version = "2.7" # 插件作者 plugin_author = "jxxghp,InfinityPacer" # 作者主页 @@ -410,7 +412,20 @@ class BrushFlow(_PluginBase): 'type': 'success', 'variant': 'tonal' }, - 'html': "
部分配置项以及细节请参考https://github.com/InfinityPacer/MoviePilot-Plugins/blob/main/README.md
" + 'content': [ + { + 'component': 'span', + 'text': '部分配置项以及细节请参考:' + }, + { + 'component': 'a', + 'props': { + 'href': 'https://github.com/InfinityPacer/MoviePilot-Plugins/blob/main/README.md', + 'target': '_blank' + }, + 'text': 'https://github.com/InfinityPacer/MoviePilot-Plugins/blob/main/README.md' + } + ] } ] } @@ -1148,17 +1163,22 @@ class BrushFlow(_PluginBase): "component": "VDialog", "props": { "model": "dialog_closed", - "max-width": "80rem", + "max-width": "50rem", "overlay-class": "v-dialog--scrollable v-overlay--scroll-blocked", "content-class": "v-card v-card--density-default v-card--variant-elevated rounded-t" }, "content": [ { "component": "VCard", + "props": { + "title": "设置站点配置" + }, "content": [ { - "component": "VCardItem", - "text": "设置站点配置" + "component": "VDialogCloseBtn", + "props": { + "model": "dialog_closed" + } }, { "component": "VCardText", @@ -1174,12 +1194,12 @@ class BrushFlow(_PluginBase): }, 'content': [ { - "component": "VTextarea", - "props": { - "model": "site_config", - "placeholder": "请输入站点配置", - "label": "站点配置", - "rows": 16 + 'component': 'VAceEditor', + 'props': { + 'modelvalue': 'site_config', + 'lang': 'json', + 'theme': 'monokai', + 'style': 'height: 30rem', } } ] @@ -1201,7 +1221,20 @@ class BrushFlow(_PluginBase): 'type': 'info', 'variant': 'tonal' }, - 'html': "
注意:只有启用站点独立配置时,该配置项才会生效,详细配置参考https://github.com/InfinityPacer/MoviePilot-Plugins/blob/main/README.md
" + 'content': [ + { + 'component': 'span', + 'text': '注意:只有启用站点独立配置时,该配置项才会生效,详细配置参考:' + }, + { + 'component': 'a', + 'props': { + 'href': 'https://github.com/InfinityPacer/MoviePilot-Plugins/blob/main/README.md', + 'target': '_blank' + }, + 'text': 'https://github.com/InfinityPacer/MoviePilot-Plugins/blob/main/README.md' + } + ] } ] } @@ -1269,60 +1302,26 @@ class BrushFlow(_PluginBase): total_active_uploaded = StringUtils.str_filesize(statistic_info.get("active_uploaded") or 0) # 活跃下载量 total_active_downloaded = StringUtils.str_filesize(statistic_info.get("active_downloaded") or 0) + # 表格标题 + headers = [ + {'title': '站点', 'key': 'site', 'sortable': True}, + {'title': '标题', 'key': 'title', 'sortable': True}, + {'title': '大小', 'key': 'size', 'sortable': True}, + {'title': '上传量', 'key': 'uploaded', 'sortable': True}, + {'title': '下载量', 'key': 'downloaded', 'sortable': True}, + {'title': '分享率', 'key': 'ratio', 'sortable': True}, + {'title': '状态', 'key': 'status', 'sortable': True}, + ] # 种子数据明细 - torrent_trs = [ + items = [ { - 'component': 'tr', - 'props': { - 'class': 'text-sm' - }, - 'content': [ - { - 'component': 'td', - 'props': { - 'class': 'whitespace-nowrap break-keep text-high-emphasis' - }, - 'text': data.get("site_name") - }, - { - 'component': 'td', - 'html': f'{data.get("title")}' + - (f'
{data.get("description")}' if data.get( - "description") else "") - - }, - { - 'component': 'td', - 'text': StringUtils.str_filesize(data.get("size")) - }, - { - 'component': 'td', - 'text': StringUtils.str_filesize(data.get("uploaded") or 0) - }, - { - 'component': 'td', - 'text': StringUtils.str_filesize(data.get("downloaded") or 0) - }, - { - 'component': 'td', - 'text': round(data.get('ratio') or 0, 2) - }, - { - 'component': 'td', - 'text': "是" if data.get("hit_and_run") else "否" - }, - { - 'component': 'td', - 'text': f"{data.get('seeding_time') / 3600:.1f}" if data.get('seeding_time') else "N/A" - }, - { - 'component': 'td', - 'props': { - 'class': 'text-no-wrap' - }, - 'text': "已删除" if data.get("deleted") else "正常" - } - ] + 'site': data.get("site_name"), + 'title': data.get("title"), + 'size': StringUtils.str_filesize(data.get("size")), + 'uploaded': StringUtils.str_filesize(data.get("uploaded") or 0), + 'downloaded': StringUtils.str_filesize(data.get("downloaded") or 0), + 'ratio': round(data.get('ratio') or 0, 2), + 'status': "已删除" if data.get("deleted") else "正常" } for data in data_list ] @@ -1376,7 +1375,7 @@ class BrushFlow(_PluginBase): 'props': { 'class': 'text-caption' }, - 'text': '总上传量(活跃)' + 'text': '总上传量 / 活跃' }, { 'component': 'div', @@ -1389,7 +1388,7 @@ class BrushFlow(_PluginBase): 'props': { 'class': 'text-h6' }, - 'text': f"{total_uploaded}({total_active_uploaded})" + 'text': f"{total_uploaded} / {total_active_uploaded}" } ] } @@ -1446,7 +1445,7 @@ class BrushFlow(_PluginBase): 'props': { 'class': 'text-caption' }, - 'text': '总下载量(活跃)' + 'text': '总下载量 / 活跃' }, { 'component': 'div', @@ -1459,7 +1458,7 @@ class BrushFlow(_PluginBase): 'props': { 'class': 'text-h6' }, - 'text': f"{total_downloaded}({total_active_downloaded})" + 'text': f"{total_downloaded} / {total_active_downloaded}" } ] } @@ -1516,7 +1515,7 @@ class BrushFlow(_PluginBase): 'props': { 'class': 'text-caption' }, - 'text': '下载种子数(活跃)' + 'text': '下载种子数 / 活跃' }, { 'component': 'div', @@ -1529,7 +1528,7 @@ class BrushFlow(_PluginBase): 'props': { 'class': 'text-h6' }, - 'text': f"{total_count}({total_active})" + 'text': f"{total_count} / {total_active}" } ] } @@ -1586,7 +1585,7 @@ class BrushFlow(_PluginBase): 'props': { 'class': 'text-caption' }, - 'text': '删除种子数(待归档)' + 'text': '删除种子数 / 待归档' }, { 'component': 'div', @@ -1599,7 +1598,7 @@ class BrushFlow(_PluginBase): 'props': { 'class': 'text-h6' }, - 'text': f"{total_deleted}({total_unarchived})" + 'text': f"{total_deleted} / {total_unarchived}" } ] } @@ -1613,91 +1612,29 @@ class BrushFlow(_PluginBase): }, # 种子明细 { - 'component': 'VCol', + 'component': 'VRow', 'props': { - 'cols': 12, + 'class': 'd-none d-sm-block', }, 'content': [ { - 'component': 'VTable', + 'component': 'VCol', 'props': { - 'hover': True + 'cols': 12, }, 'content': [ { - 'component': 'thead', + 'component': 'VDataTableVirtual', 'props': { - 'class': 'text-no-wrap' - }, - 'content': [ - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': '站点' - }, - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': '标题' - }, - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': '大小' - }, - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': '上传量' - }, - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': '下载量' - }, - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': '分享率' - }, - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': 'HR' - }, - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': '做种时间' - }, - { - 'component': 'th', - 'props': { - 'class': 'text-start ps-4' - }, - 'text': '状态' - } - ] - }, - { - 'component': 'tbody', - 'content': torrent_trs + 'class': 'text-sm', + 'headers': headers, + 'items': items, + 'height': '30rem', + 'density': 'compact', + 'fixed-header': True, + 'hide-no-data': True, + 'hover': True + } } ] } @@ -3444,9 +3381,8 @@ class BrushFlow(_PluginBase): @staticmethod def __get_demo_site_config() -> str: - desc = ("以下为配置示例,请参考 " - "https://github.com/InfinityPacer/MoviePilot-Plugins/blob/main/README.md " - "进行配置,请注意,只需要保留实际配置内容(删除这段)\n") + desc = ("// 以下为配置示例,请参考:https://github.com/InfinityPacer/MoviePilot-Plugins/blob/main/README.md 进行配置\n" + "// 无关内容请使用 // 进行注释\n") config = """[{ "sitename": "站点1", "seed_time": 96,