diff --git a/app/chain/transfer.py b/app/chain/transfer.py index cd49c2aa..a2280ec4 100755 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -591,7 +591,7 @@ class TransferChain(ChainBase, metaclass=Singleton): text=__process_msg, data={ "current": Path(fileitem.path).as_posix(), - "finished":finished_files + "finished": finished_files }) # 整理 state, err_msg = self.__handle_transfer(task=task, callback=item.callback) @@ -1471,13 +1471,9 @@ class TransferChain(ChainBase, metaclass=Singleton): for file in torrent_files: file_path = save_path / file.name # 如果存在未被屏蔽的媒体文件,则不删除种子 - if ( - file_path.suffix in self.all_exts - and not self._is_blocked_by_exclude_words( - str(file_path), transfer_exclude_words - ) - and file_path.exists() - ): + if (file_path.suffix in self.all_exts + and not self._is_blocked_by_exclude_words(str(file_path), transfer_exclude_words) + and file_path.exists()): return False # 所有媒体文件都被屏蔽或不存在,可以删除种子 diff --git a/app/helper/plugin.py b/app/helper/plugin.py index 0fddfee2..00be523c 100644 --- a/app/helper/plugin.py +++ b/app/helper/plugin.py @@ -610,14 +610,19 @@ class PluginHelper(metaclass=WeakSingleton): asset = next((a for a in assets if a.get("name") == asset_name), None) if not asset: return False, f"未找到资产文件:{asset_name}" - download_url = asset.get("browser_download_url") - if not download_url: - return False, "资产缺少下载地址" + asset_id = asset.get("id") + if not asset_id: + return False, "资产缺少ID信息" + # 构建资产的API下载URL + download_url = f"https://api.github.com/repos/{user_repo}/releases/assets/{asset_id}" except Exception as e: logger.error(f"解析 Release 信息失败:{e}") return False, f"解析 Release 信息失败:{e}" - res = self.__request_with_fallback(download_url, headers=settings.REPO_GITHUB_HEADERS(repo=user_repo)) + # 使用资产的API端点下载,需要设置Accept头为application/octet-stream + headers = settings.REPO_GITHUB_HEADERS(repo=user_repo).copy() + headers["Accept"] = "application/octet-stream" + res = self.__request_with_fallback(download_url, headers=headers, is_api=True) if res is None or res.status_code != 200: return False, f"下载资产失败:{res.status_code if res else '连接失败'}" @@ -1525,15 +1530,21 @@ class PluginHelper(metaclass=WeakSingleton): asset = next((a for a in assets if a.get("name") == asset_name), None) if not asset: return False, f"未找到资产文件:{asset_name}" - download_url = asset.get("browser_download_url") - if not download_url: - return False, "资产缺少下载地址" + asset_id = asset.get("id") + if not asset_id: + return False, "资产缺少ID信息" + # 构建资产的API下载URL + download_url = f"https://api.github.com/repos/{user_repo}/releases/assets/{asset_id}" except Exception as e: logger.error(f"解析 Release 信息失败:{e}") return False, f"解析 Release 信息失败:{e}" + # 使用资产的API端点下载,需要设置Accept头为application/octet-stream + headers = settings.REPO_GITHUB_HEADERS(repo=user_repo).copy() + headers["Accept"] = "application/octet-stream" res = await self.__async_request_with_fallback(download_url, - headers=settings.REPO_GITHUB_HEADERS(repo=user_repo)) + headers=headers, + is_api=True) if res is None or res.status_code != 200: return False, f"下载资产失败:{res.status_code if res else '连接失败'}"