From bab104230aff325edb2699b0415555c612aadaad Mon Sep 17 00:00:00 2001 From: InfinityPacer Date: Sat, 30 Mar 2024 22:55:07 +0800 Subject: [PATCH 1/6] =?UTF-8?q?fix=20burshflow=20=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E9=85=8D=E7=BD=AE=E5=BC=80=E5=90=AF=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/brushflow/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/brushflow/__init__.py b/plugins/brushflow/__init__.py index 064dc83..148927d 100644 --- a/plugins/brushflow/__init__.py +++ b/plugins/brushflow/__init__.py @@ -117,8 +117,10 @@ class BrushConfig: self.group_site_configs[sitename] = BrushConfig(config=full_config, process_site_config=False) except Exception as e: - logger.error(f"解析站点配置失败,请检查配置项。错误详情: {e}") + logger.error(f"解析站点配置失败,已停用插件并关闭站点独立配置,请检查配置项,错误详情: {e}") self.group_site_configs = {} + self.enable_site_config = False + self.enabled = False def get_site_config(self, sitename): """ From e649ff9dec4cd43426bce9643759ce3ac42f2e43 Mon Sep 17 00:00:00 2001 From: InfinityPacer Date: Sun, 31 Mar 2024 21:18:01 +0800 Subject: [PATCH 2/6] fix brushflow tranmission --- package.json | 2 +- plugins/brushflow/__init__.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index dab3491..9a83da8 100644 --- a/package.json +++ b/package.json @@ -226,7 +226,7 @@ "BrushFlow": { "name": "站点刷流", "description": "自动托管刷流,将会提高对应站点的访问频率。", - "version": "2.1", + "version": "2.2", "icon": "brush.jpg", "author": "jxxghp", "level": 2 diff --git a/plugins/brushflow/__init__.py b/plugins/brushflow/__init__.py index 148927d..c9d3d24 100644 --- a/plugins/brushflow/__init__.py +++ b/plugins/brushflow/__init__.py @@ -184,7 +184,7 @@ class BrushFlow(_PluginBase): # 插件图标 plugin_icon = "brush.jpg" # 插件版本 - plugin_version = "2.1" + plugin_version = "2.2" # 插件作者 plugin_author = "jxxghp,InfinityPacer" # 作者主页 @@ -2252,7 +2252,7 @@ class BrushFlow(_PluginBase): need_delete_hashes = [] - # 即使开了动态删除,但是也有可能部分站点单独设置了关闭,这里根据种子动态进行分组,先处理不需要动态的种子,按设置的规则进行删除 + # 即使开了动态删除,但是也有可能部分站点单独设置了关闭,这里根据种子托管进行分组,先处理不需要托管的种子,按设置的规则进行删除 proxy_delete_torrents, not_proxy_delete_torrents = self.__group_torrents_by_proxy_delete(torrents=torrents, torrent_tasks=torrent_tasks) logger.info(f"托管种子数 {len(proxy_delete_torrents)},未托管种子数 {len(not_proxy_delete_torrents)}") @@ -2264,7 +2264,7 @@ class BrushFlow(_PluginBase): torrent_info_map[self.__get_hash(torrent)].get("total_size", 0) for torrent in not_proxy_delete_torrents if self.__get_hash(torrent) in not_proxy_delete_hashes) - # 如果删除非动态种子后仍未达到最小体积要求,则处理动态种子 + # 如果删除非托管种子后仍未达到最小体积要求,则处理托管种子 if total_torrent_size > min_size and proxy_delete_torrents: proxy_delete_hashes = self.__delete_torrent_for_evaluate_conditions(torrents=proxy_delete_torrents, torrent_tasks=torrent_tasks, @@ -2274,7 +2274,7 @@ class BrushFlow(_PluginBase): torrent_info_map[self.__get_hash(torrent)].get("total_size", 0) for torrent in proxy_delete_torrents if self.__get_hash(torrent) in proxy_delete_hashes) - # 在完成初始删除步骤后,如果总体积仍然超过最小阈值,则进一步找到已完成种子并排除HR种子后按加入时间倒序进行删除 + # 在完成初始删除步骤后,如果总体积仍然超过最小阈值,则进一步找到已完成种子并排除HR种子后按加入时间正序进行删除 if total_torrent_size > min_size: # 重新计算当前的种子列表,排除已删除的种子 remaining_hashes = list( @@ -2707,7 +2707,7 @@ class BrushFlow(_PluginBase): else: logger.error('代理下载种子失败,继续尝试传递种子地址到下载器进行下载') if torrent_content: - torrent = self.tr.add_torrent(content=torrent.enclosure, + torrent = self.tr.add_torrent(content=torrent_content, download_dir=download_dir, cookie=torrent.site_cookie, labels=["已整理", brush_config.brush_tag]) From 0871cf8df6a0517a5dfd421f4890cf153042ce94 Mon Sep 17 00:00:00 2001 From: ljmeng Date: Mon, 1 Apr 2024 00:52:06 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- plugins/crossseed/__init__.py | 47 ++++++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9a83da8..c818c60 100644 --- a/package.json +++ b/package.json @@ -186,7 +186,7 @@ "CrossSeed": { "name": "青蛙辅种助手", "description": "参考ReseedPuppy和IYUU辅种插件实现自动辅种,支持站点:青蛙、AGSVPT、麒麟、UBits、聆音、憨憨等。", - "version": "1.9", + "version": "2.0", "icon": "qingwa.png", "author": "233@qingwa", "level": 2 diff --git a/plugins/crossseed/__init__.py b/plugins/crossseed/__init__.py index 3d79420..af5363c 100644 --- a/plugins/crossseed/__init__.py +++ b/plugins/crossseed/__init__.py @@ -1,6 +1,7 @@ import hashlib import os import re +import time from datetime import datetime, timedelta from pathlib import Path from threading import Event @@ -42,6 +43,7 @@ class CSSiteConfig(object): cookie: str = None, ua: str = None, proxy: bool = None, + query_gap: int = 1, ) -> None: self.name = name self.url = url @@ -50,6 +52,7 @@ class CSSiteConfig(object): self.cookie = cookie self.ua = ua self.proxy = proxy + self.query_gap = query_gap def get_api_url(self): if self.name == "憨憨": @@ -160,6 +163,7 @@ class CrossSeedHelper(object): remote_torrent_infos.append( TorInfo.remote(site.name, pieces_hash, torrent_id) ) + time.sleep(site.query_gap) except requests.exceptions.RequestException as e: return None, f"站点{site.name}请求失败:{e}" return remote_torrent_infos, None @@ -173,7 +177,7 @@ class CrossSeed(_PluginBase): # 插件图标 plugin_icon = "qingwa.png" # 插件版本 - plugin_version = "1.9" + plugin_version = "2.0" # 插件作者 plugin_author = "233@qingwa" # 作者主页 @@ -240,7 +244,7 @@ class CrossSeed(_PluginBase): self._downloaders = config.get("downloaders") self._torrentpath = config.get("torrentpath") # 种子路径和下载器对应 /qb,/tr - self._torrentpaths = self._torrentpath.split(",") + self._torrentpaths = self._torrentpath.strip().split(",") self._sites = config.get("sites") or [] self._notify = config.get("notify") self._nolabels = config.get("nolabels") @@ -282,13 +286,21 @@ class CrossSeed(_PluginBase): ) self._sites = [site.id for site in all_site_cs_info_map.values() if site.id in self._sites] site_names = [site.name for site in all_site_cs_info_map.values() if site.id in self._sites] - + # 整理passkey映射关系 site_name_key_map = dict() + site_name_gap_map = dict() for site_key in self._token.strip().split("\n"): site_key_arr = re.split("[\s::]+",site_key.strip()) site_name = site_key_arr[0] site_name_key_map[site_name] = site_key_arr[1] + if len(site_key_arr) >= 2: + if str.isdigit(site_key_arr[2]): + site_name_gap_map[site_name] = int(site_key_arr[2]) + else: + logger.warn( + f"站点{site_name}配置的查询请求间隔时间不为整数,不能生效, 请修改 {site_key_arr[2]}" + ) # 只给选中的站点补全站点配置 self._site_cs_infos: List[CSSiteConfig] = [] @@ -300,6 +312,10 @@ class CrossSeed(_PluginBase): continue site_cs_info = all_site_cs_info_map.get(site_name) site_cs_info.passkey = site_key + # 追加设置的请求间隔时间 + site_query_gap = site_name_gap_map.get(site_name) + if site_query_gap: + site_cs_info.query_gap = site_query_gap self._site_cs_infos.append(site_cs_info) self.__update_config() @@ -653,7 +669,7 @@ class CrossSeed(_PluginBase): 'type': 'info', 'variant': 'tonal', 'text': '1. 定时任务周期建议每次辅种间隔时间大于1天,不填写每天上午2点到7点随机辅种一次; ' - '2. 支持辅种站点列表:青蛙【已验证】,AGSVPT,麒麟,UBits,聆音 等,配置passkey时,站点名称需严格和上面选项一致,只有选中的站点会辅种,passkey可保存多个; ' + '2. 支持辅种站点列表:青蛙、AGSVPT、红豆饭、麒麟、UBits、聆音等,配置passkey时,站点名称需严格和上面选项一致,只有选中的站点会辅种,passkey可保存多个; ' '3. 请勿与IYUU辅种插件同时添加相同站点,可能会有冲突,且意义不大;' '4. 测试站点是否支持的方法:【站点域名/api/pieces-hash】接口访问返回405则大概率支持 ' } @@ -661,6 +677,29 @@ class CrossSeed(_PluginBase): ] } ] + }, + { + 'component': 'VRow', + 'content': [ + { + 'component': 'VCol', + 'props': { + 'cols': 12, + }, + 'content': [ + { + 'component': 'VAlert', + 'props': { + 'type': 'info', + 'variant': 'tonal', + 'text': '【进阶设置】如果辅种过程中访问/api/pieces-hash接口偶尔会失败,可以设置请求间隔时间。 ' + '可以在passkey后增加 :3 来将某个站点的请求间隔调整为3秒,3可以改为其他数字,只能为整数,默认请求间隔为1秒。 ' + '示例配置 站点名称:Passkey:3' + } + } + ] + } + ] } ] } From 5b0c6663c2856552e21dedda15aaa75d8fb83474 Mon Sep 17 00:00:00 2001 From: ljmeng Date: Mon, 1 Apr 2024 01:02:20 +0800 Subject: [PATCH 4/6] fix --- plugins/crossseed/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/crossseed/__init__.py b/plugins/crossseed/__init__.py index af5363c..fc75269 100644 --- a/plugins/crossseed/__init__.py +++ b/plugins/crossseed/__init__.py @@ -294,7 +294,7 @@ class CrossSeed(_PluginBase): site_key_arr = re.split("[\s::]+",site_key.strip()) site_name = site_key_arr[0] site_name_key_map[site_name] = site_key_arr[1] - if len(site_key_arr) >= 2: + if len(site_key_arr) > 2: if str.isdigit(site_key_arr[2]): site_name_gap_map[site_name] = int(site_key_arr[2]) else: From e1c59c93f21ebe0697c7719e0ecba9f95d56c134 Mon Sep 17 00:00:00 2001 From: Allen Date: Mon, 1 Apr 2024 02:18:04 +0000 Subject: [PATCH 5/6] =?UTF-8?q?=E8=A1=A8=E5=8D=95=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- plugins/downloaderhelper/__init__.py | 74 +++++++++++++++------------- 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index c818c60..b65b458 100644 --- a/package.json +++ b/package.json @@ -458,7 +458,7 @@ "DownloaderHelper": { "name": "下载器助手", "description": "自动做种、站点标签、自动删种。", - "version": "1.3", + "version": "1.4", "icon": "DownloaderHelper.png", "author": "hotlcc", "level": 2 diff --git a/plugins/downloaderhelper/__init__.py b/plugins/downloaderhelper/__init__.py index 52ebeb6..82c0efd 100644 --- a/plugins/downloaderhelper/__init__.py +++ b/plugins/downloaderhelper/__init__.py @@ -32,7 +32,7 @@ class DownloaderHelper(_PluginBase): # 插件图标 plugin_icon = "DownloaderHelper.png" # 插件版本 - plugin_version = "1.3" + plugin_version = "1.4" # 插件作者 plugin_author = "hotlcc" # 作者主页 @@ -177,42 +177,42 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '插件总开关' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VSwitch', 'props': { 'model': 'enable', - 'label': '启用插件' + 'label': '启用插件', + 'hint': '插件总开关' } }] }, { 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '执行插件任务后是否发送通知' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VSwitch', 'props': { 'model': 'enable_notify', - 'label': '发送通知' + 'label': '发送通知', + 'hint': '执行插件任务后是否发送通知' } }] }, { 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '保存插件配置后是否立即触发一次插件任务运行' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VSwitch', 'props': { 'model': 'run_once', - 'label': '立即运行一次' + 'label': '立即运行一次', + 'hint': '保存插件配置后是否立即触发一次插件任务运行' } }] }] @@ -222,42 +222,42 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '监听下载添加事件。当MoviePilot添加下载任务时,会触发执行本插件进行自动做种和添加站点标签。' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VSwitch', 'props': { 'model': 'listen_download_event', - 'label': '监听下载事件' + 'label': '监听下载事件', + 'hint': '监听下载添加事件。当MoviePilot添加下载任务时,会触发执行本插件进行自动做种和添加站点标签。' } }] }, { 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '监听源文件删除事件。当在【历史记录】中删除源文件时,会自动触发运行本插件任务进行自动删种。' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VSwitch', 'props': { 'model': 'listen_source_file_event', - 'label': '监听源文件事件' + 'label': '监听源文件事件', + 'hint': '监听源文件删除事件。当在【历史记录】中删除源文件时,会自动触发运行本插件任务进行自动删种。' } }] }, { 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '给种子添加站点标签时,是否优先以站点名称作为标签内容(否则将使用域名关键字)?' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VSwitch', 'props': { 'model': 'site_name_priority', - 'label': '站点名称优先' + 'label': '站点名称优先', + 'hint': '给种子添加站点标签时,是否优先以站点名称作为标签内容(否则将使用域名关键字)?' } }] }] @@ -267,44 +267,44 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '设置插件任务执行周期。支持5位cron表达式,应避免任务执行过于频繁,例如:0/30 * * * *。缺省时不执行定时任务,但不影响监听任务的执行。' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VTextField', 'props': { 'model': 'cron', 'label': '定时执行周期', - 'placeholder': '0/30 * * * *' + 'placeholder': '0/30 * * * *', + 'hint': '设置插件任务执行周期。支持5位cron表达式,应避免任务执行过于频繁,例如:0/30 * * * *。缺省时不执行定时任务,但不影响监听任务的执行。' } }] }, { 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '下载器中的种子有这些标签时不进行任何操作,多个标签使用英文“,”分割' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VTextField', 'props': { 'model': 'exclude_tags', - 'label': '排除种子标签' + 'label': '排除种子标签', + 'hint': '下载器中的种子有这些标签时不进行任何操作,多个标签使用英文“,”分割' } }] }, { 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12, - 'title': '给种子添加站点标签时的标签前缀,默认值为“站点/”' + 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 }, 'content': [{ 'component': 'VTextField', 'props': { 'model': 'tag_prefix', 'label': '站点标签前缀', - 'placeholder': '站点/' + 'placeholder': '站点/', + 'hint': '给种子添加站点标签时的标签前缀,默认值为“站点/”' } }] }] @@ -313,8 +313,7 @@ class DownloaderHelper(_PluginBase): 'content': [{ 'component': 'VCol', 'props': { - 'cols': 12, - 'title': 'Tracker映射。用于在站点打标签时,指定tracker和站点域名不同的种子的域名对应关系;前面为tracker域名(完整域名或者主域名皆可),中间是英文冒号,后面是站点域名。' + 'cols': 12 }, 'content': [{ 'component': 'VTextarea', @@ -324,7 +323,8 @@ class DownloaderHelper(_PluginBase): 'placeholder': '格式:\n' ':\n' '例如:\n' - 'chdbits.xyz:ptchdbits.co' + 'chdbits.xyz:ptchdbits.co', + 'hint': 'Tracker映射。用于在站点打标签时,指定tracker和站点域名不同的种子的域名对应关系;前面为tracker域名(完整域名或者主域名皆可),中间是英文冒号,后面是站点域名。' } }] }] @@ -373,7 +373,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VSwitch', 'props': { 'model': 'qb_enable', - 'label': '任务开关' + 'label': '任务开关', + 'hint': '该下载器子任务的开关' } }] }, { @@ -386,7 +387,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VSwitch', 'props': { 'model': 'qb_enable_seeding', - 'label': '自动做种' + 'label': '自动做种', + 'hint': '是否开启自动做种功能' } }] }, { @@ -399,7 +401,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VSwitch', 'props': { 'model': 'qb_enable_tagging', - 'label': '站点标签' + 'label': '站点标签', + 'hint': '是否开启站点标签功能' } }] }, { @@ -412,7 +415,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VSwitch', 'props': { 'model': 'qb_enable_delete', - 'label': '自动删种' + 'label': '自动删种', + 'hint': '是否开启自动删种功能' } }] }] From 58863433ce57e842af171038c1504d52cb8d9a8e Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 1 Apr 2024 11:05:43 +0800 Subject: [PATCH 6/6] fix DownloaderHelper ui --- plugins/downloaderhelper/__init__.py | 29 +++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/plugins/downloaderhelper/__init__.py b/plugins/downloaderhelper/__init__.py index 82c0efd..817c264 100644 --- a/plugins/downloaderhelper/__init__.py +++ b/plugins/downloaderhelper/__init__.py @@ -177,7 +177,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4, + 'xl': 3 }, 'content': [{ 'component': 'VSwitch', @@ -191,7 +192,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4, + 'xl': 3 }, 'content': [{ 'component': 'VSwitch', @@ -205,7 +207,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4, + 'xl': 3 }, 'content': [{ 'component': 'VSwitch', @@ -215,14 +218,12 @@ class DownloaderHelper(_PluginBase): 'hint': '保存插件配置后是否立即触发一次插件任务运行' } }] - }] - }, { - 'component': 'VRow', - 'content': [{ + }, { 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4, + 'xl': 3 }, 'content': [{ 'component': 'VSwitch', @@ -236,7 +237,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4, + 'xl': 3 }, 'content': [{ 'component': 'VSwitch', @@ -250,7 +252,8 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4, + 'xl': 3 }, 'content': [{ 'component': 'VSwitch', @@ -267,7 +270,7 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4 }, 'content': [{ 'component': 'VTextField', @@ -282,7 +285,7 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4 }, 'content': [{ 'component': 'VTextField', @@ -296,7 +299,7 @@ class DownloaderHelper(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'xxl': 3, 'xl': 3, 'lg': 3, 'md': 3, 'sm': 6, 'xs': 12 + 'md': 4 }, 'content': [{ 'component': 'VTextField',