From 6745e9a27acf6b1a45ecb993d9ffd9cb71ae5fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B9=9B=E8=93=9D?= Date: Sat, 20 Apr 2024 11:03:55 +0800 Subject: [PATCH 1/3] support sub dir update --- quark_auto_save.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/quark_auto_save.py b/quark_auto_save.py index 1fd7cbe..71d00c7 100644 --- a/quark_auto_save.py +++ b/quark_auto_save.py @@ -439,7 +439,7 @@ class Quark: if os.environ.get("DEBUG") == True: print(f"转存测试失败: {str(e)}") - def do_save_task(self, task): + def do_save_task(self, task, folder_id=False, folder_path=False): # 判断资源失效记录 if task.get("shareurl_ban"): print(f"《{task['taskname']}》:{task['shareurl_ban']}") @@ -458,7 +458,7 @@ class Quark: # print("stoken: ", stoken) # 获取分享文件列表 - share_file_list = self.get_detail(pwd_id, stoken, pdir_fid) + share_file_list = self.get_detail(pwd_id, stoken, folder_id or pdir_fid) # 仅有一个文件夹 if len(share_file_list) == 1 and share_file_list[0]["dir"]: print("🧠 该分享是一个文件夹,读取文件夹内列表") @@ -469,7 +469,7 @@ class Quark: # print("share_file_list: ", share_file_list) # 获取目标目录文件列表 - savepath = task["savepath"] + savepath = folder_path or task["savepath"] if not self.savepath_fid.get(savepath): self.savepath_fid[savepath] = self.get_fids([savepath])[0]["fid"] to_pdir_fid = self.savepath_fid[savepath] @@ -503,6 +503,8 @@ class Quark: ) for dir_file in dir_file_list ) + if file_exists and share_file['dir'] == True: + self.do_save_task(task, share_file['fid'] , task["savepath"] + '/' + share_file['file_name']) if not file_exists: share_file["save_name"] = save_name need_save_list.append(share_file) From 0c2d201a6cdad2b2f55af09c166a7d942f761165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B9=9B=E8=93=9D?= Date: Sat, 20 Apr 2024 13:31:10 +0800 Subject: [PATCH 2/3] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E6=B7=B1?= =?UTF-8?q?=E5=B1=82=E5=B5=8C=E5=A5=97=E7=9B=AE=E5=BD=95=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=20:sparkles:=20=E4=B8=BA=E4=BA=86?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=B7=B1=E5=B1=82=E6=89=AB=E6=8F=8F=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=BC=BA=E5=BA=A6=E8=BF=87=E5=A4=A7=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=85=8D=E7=BD=AEallowSubDirectoryRegList=EF=BC=8C?= =?UTF-8?q?=E7=AC=A6=E5=90=88=E8=A7=84=E5=88=99=E7=9A=84=E5=AD=90=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E6=89=8D=E8=BF=9B=E8=A1=8C=E9=80=92=E5=BD=92=E6=89=AB?= =?UTF-8?q?=E6=8F=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + quark_auto_save.py | 12 +++++++++--- quark_config.json | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 60622a0..4716469 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtow "QYWX_AM": "", "其他推送渠道//此项可删": "配置方法同青龙" }, + "allowSubDirectoryRegList": [], // 正则列表,用于子目录递归更新,一些资源中会分为4K、1080P等, 就可以配置 ["4k","1080p"], 这样遇到这些文件夹的时候也会进行资源更新 "emby": { "url": "http://yourdomain.com:8096", "apikey": "" //在后台 高级-API秘钥 中生成 diff --git a/quark_auto_save.py b/quark_auto_save.py index 71d00c7..8168233 100644 --- a/quark_auto_save.py +++ b/quark_auto_save.py @@ -439,7 +439,7 @@ class Quark: if os.environ.get("DEBUG") == True: print(f"转存测试失败: {str(e)}") - def do_save_task(self, task, folder_id=False, folder_path=False): + def do_save_task(self, task, folder_id = False, folder_path = False): # 判断资源失效记录 if task.get("shareurl_ban"): print(f"《{task['taskname']}》:{task['shareurl_ban']}") @@ -463,7 +463,7 @@ class Quark: if len(share_file_list) == 1 and share_file_list[0]["dir"]: print("🧠 该分享是一个文件夹,读取文件夹内列表") share_file_list = self.get_detail(pwd_id, stoken, share_file_list[0]["fid"]) - if not share_file_list: + if not share_file_list and not folder_path: add_notify(f"《{task['taskname']}》:分享目录为空") return # print("share_file_list: ", share_file_list) @@ -504,7 +504,13 @@ class Quark: for dir_file in dir_file_list ) if file_exists and share_file['dir'] == True: - self.do_save_task(task, share_file['fid'] , task["savepath"] + '/' + share_file['file_name']) + # allowSubDirectoryRegList 是一个正则列表,其中只要有一个正则匹配成功,就执行do_save_task + allowSubDirectoryRegList = CONFIG_DATA.get('allowSubDirectoryRegList') + if allowSubDirectoryRegList: + for reg in allowSubDirectoryRegList: + if re.search(reg, share_file["file_name"], re.I): + self.do_save_task(task, share_file['fid'], (folder_path or task["savepath"]) + '/' + share_file['file_name']) + break if not file_exists: share_file["save_name"] = save_name need_save_list.append(share_file) diff --git a/quark_config.json b/quark_config.json index d608219..dcfb9f7 100644 --- a/quark_config.json +++ b/quark_config.json @@ -10,6 +10,7 @@ "url": "", "apikey": "" }, + "allowSubDirectoryRegList": [], "tasklist": [ { "taskname": "测试-魔法匹配剧集(这是一组有效分享,配置CK后可测试任务是否正常)", From 108a63fd12ce1c1a0b7f3adde2613d3384e42b08 Mon Sep 17 00:00:00 2001 From: Cp0204 Date: Sun, 21 Apr 2024 17:45:59 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E9=87=8D=E5=86=99=E5=AD=90=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E9=80=92=E5=BD=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- quark_auto_save.py | 74 +++++++++++++++++++++++++++++++--------------- quark_config.json | 4 +-- 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 4716469..a3b99da 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,6 @@ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtow "QYWX_AM": "", "其他推送渠道//此项可删": "配置方法同青龙" }, - "allowSubDirectoryRegList": [], // 正则列表,用于子目录递归更新,一些资源中会分为4K、1080P等, 就可以配置 ["4k","1080p"], 这样遇到这些文件夹的时候也会进行资源更新 "emby": { "url": "http://yourdomain.com:8096", "apikey": "" //在后台 高级-API秘钥 中生成 @@ -133,6 +132,7 @@ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtow "emby_id": "", //可选,缺省时按taskname搜索匹配,为0时强制不匹配 "ignore_extension": true, //可选,忽略后缀 "runweek": [1, 2, 3, 4, 6, 7], //可选,指定星期几执行,无此字段则均执行 + "update_subdir": "", // 可选,子目录递归更新的正则表达式,如 "4k|1080p" // 以下字段无需配置 "shareurl_ban": "分享地址已失效" //记录分享是否失效;如有此字段将跳过任务,更新链接后请手动删去 } diff --git a/quark_auto_save.py b/quark_auto_save.py index 8168233..7f0661b 100644 --- a/quark_auto_save.py +++ b/quark_auto_save.py @@ -439,7 +439,7 @@ class Quark: if os.environ.get("DEBUG") == True: print(f"转存测试失败: {str(e)}") - def do_save_task(self, task, folder_id = False, folder_path = False): + def do_save_task(self, task): # 判断资源失效记录 if task.get("shareurl_ban"): print(f"《{task['taskname']}》:{task['shareurl_ban']}") @@ -457,19 +457,40 @@ class Quark: return # print("stoken: ", stoken) + updated_tips = [] + updated_path = self.dir_check_and_save(task, pwd_id, stoken, pdir_fid) + for path, files in updated_path.items(): + if files: + if path == task["savepath"]: + updated_tips.append(", ".join(files)) + else: + updated_tips.append(f"{path}:{', '.join(files)}") + if updated_tips: + add_notify(f"《{task['taskname']}》添加追更:\n{'\n\n'.join(updated_tips)}") + return True + else: + print(f"任务结束:没有新的转存任务") + return False + + def dir_check_and_save(self, task, pwd_id, stoken, pdir_fid="", subdir_path=""): + updated_paths = {} # 获取分享文件列表 - share_file_list = self.get_detail(pwd_id, stoken, folder_id or pdir_fid) + share_file_list = self.get_detail(pwd_id, stoken, pdir_fid) # 仅有一个文件夹 - if len(share_file_list) == 1 and share_file_list[0]["dir"]: + if ( + len(share_file_list) == 1 + and share_file_list[0]["dir"] + and subdir_path == "" + ): print("🧠 该分享是一个文件夹,读取文件夹内列表") share_file_list = self.get_detail(pwd_id, stoken, share_file_list[0]["fid"]) - if not share_file_list and not folder_path: - add_notify(f"《{task['taskname']}》:分享目录为空") - return + if not share_file_list: + # add_notify(f"《{task['taskname']}》:分享目录为空") + return updated_paths # print("share_file_list: ", share_file_list) # 获取目标目录文件列表 - savepath = folder_path or task["savepath"] + savepath = f"{task['savepath']}{subdir_path}" if not self.savepath_fid.get(savepath): self.savepath_fid[savepath] = self.get_fids([savepath])[0]["fid"] to_pdir_fid = self.savepath_fid[savepath] @@ -489,7 +510,7 @@ class Quark: if replace != "" else share_file["file_name"] ) - # 判断目标目录文件是否存在,可选忽略后缀 + # 忽略后缀 if task.get("ignore_extension"): compare_func = lambda a, b1, b2: ( os.path.splitext(a)[0] == os.path.splitext(b1)[0] @@ -497,23 +518,30 @@ class Quark: ) else: compare_func = lambda a, b1, b2: (a == b1 or a == b2) + # 判断目标目录文件是否存在 file_exists = any( compare_func( dir_file["file_name"], share_file["file_name"], save_name ) for dir_file in dir_file_list ) - if file_exists and share_file['dir'] == True: - # allowSubDirectoryRegList 是一个正则列表,其中只要有一个正则匹配成功,就执行do_save_task - allowSubDirectoryRegList = CONFIG_DATA.get('allowSubDirectoryRegList') - if allowSubDirectoryRegList: - for reg in allowSubDirectoryRegList: - if re.search(reg, share_file["file_name"], re.I): - self.do_save_task(task, share_file['fid'], (folder_path or task["savepath"]) + '/' + share_file['file_name']) - break if not file_exists: share_file["save_name"] = save_name need_save_list.append(share_file) + elif share_file["dir"] == True: + # 存在并是一个文件夹 + if task.get("update_subdir", False): + if re.search(task["update_subdir"], share_file["file_name"]): + print(f"检查子文件夹:{savepath}/{share_file['file_name']}") + subdir_updated_path = self.dir_check_and_save( + task, + pwd_id, + stoken, + share_file["fid"], + f"{subdir_path}/{share_file['file_name']}", + ) + if subdir_updated_path: + updated_paths.update(subdir_updated_path) fid_list = [item["fid"] for item in need_save_list] fid_token_list = [item["share_fid_token"] for item in need_save_list] @@ -522,24 +550,22 @@ class Quark: save_file_return = self.save_file( fid_list, fid_token_list, to_pdir_fid, pwd_id, stoken ) + err_msg = None if save_file_return["code"] == 0: task_id = save_file_return["data"]["task_id"] query_task_return = self.query_task(task_id) if query_task_return["code"] == 0: save_name_list.sort() - add_notify( - f"《{task['taskname']}》添加追更:{', '.join(save_name_list)}" - ) - return True + updated_paths[savepath] = save_name_list else: err_msg = query_task_return["message"] else: err_msg = save_file_return["message"] - add_notify(f"《{task['taskname']}》转存失败:{err_msg}") - return False + if err_msg: + add_notify(f"《{task['taskname']}》转存失败:{err_msg}") else: - print("任务结束:没有新的转存任务") - return False + updated_paths[savepath] = [] + return updated_paths def query_task(self, task_id): retry_index = 0 diff --git a/quark_config.json b/quark_config.json index dcfb9f7..2eeb875 100644 --- a/quark_config.json +++ b/quark_config.json @@ -10,7 +10,6 @@ "url": "", "apikey": "" }, - "allowSubDirectoryRegList": [], "tasklist": [ { "taskname": "测试-魔法匹配剧集(这是一组有效分享,配置CK后可测试任务是否正常)", @@ -19,7 +18,8 @@ "pattern": "$TV", "replace": "", "enddate": "2099-01-30", - "emby_id": "" + "emby_id": "", + "update_subdir": "4k|1080p" }, { "taskname": "测试-广告过滤",