拓冰建站拓冰建站
首页 / 资讯中心 / 正文

3 步修复 Hydra Real-Debrid 重复下载

3 步修复 Hydra Real-Debrid 重复下载【免费下载链接】hydraHydra Launcher is an open-source gaming platform created to be the single tool that you need项目地址: https://gitcode.com/GitHub_Trending/hy/hydra你挑好游戏用 Real-Debrid 作为下载源进度条终于磨到了 100%。你以为这事过去了可稍后把任务删掉、重新添加同一个磁力链接Hydra Launcher 的下载队列里又冒出一条崭新的下载中——同一份游戏文件被完整拉了第二遍。带宽和磁盘空间双倍消耗Real-Debrid 面板里还多了两条一模一样的任务记录。如果同一个磁力链接下载过一次再次添加却照样重新下载问题多半不在你的网络。下面是可落地的修复路径只动两个源文件改完重启客户端即可生效。快速自检你的重复下载是否命中这个问题对照下面 4 条符合的请打 ✅✅ 重启 Hydra 后原本已完成的 Real-Debrid 任务重新显示下载中而不是已完成✅ 本地下载目录里出现两份文件名相似的同游戏文件副本✅ Real-Debrid 账号的磁力任务列表里同一 hash 同时存在两条记录✅ 删掉队列任务后重新添加同一磁力链接立刻开始重新下载没有任何已存在提示四条里中了两条以上基本可以确认是这套逻辑的问题如果全部 ❌你的情况更可能是磁盘空间不足或队列顺序引起的可以跳过本文。为什么会重下两个根因整条链路用一句话概括Hydra 每次把磁力链接换成可下载直链时都是现场问服务器找不到就新建。具体有两处值得盯住。成因一种子唯一性校验会漏判。人话版列表里没翻到旧种子就立刻新建一个。 技术版src/main/services/download/real-debrid.ts 里的getTorrentId方法会先拉取账号下的任务列表按 hash 匹配一旦没匹配上紧接着就调用addMagnet在服务器端创建新任务。麻烦在于列表接口默认只返回第一页比较时也没有统一大小写。任务排在第一页之外、或者 hash 大小写不一致匹配就会落空Hydra 便认定从没见过重复建种子。成因二解析出的直链没有本地留痕。人话版刚要来的链接记不住下次重新问一遍。 技术版本地状态只存在 src/main/level/sublevels/downloads.ts 的下载记录里。任务每次启动或恢复src/main/services/download/download-manager.ts 都会重新调用getDownloadUrl查询 Real-Debrid 接口。叠加服务器状态更新有延迟任务很容易被误判为未下载而重来。修复实操三步走第一步给 real-debrid.ts 的 hash 比较做归一化改getTorrentId的匹配逻辑为先统一转小写再比较匹配不上才允许新建。这段把 hash 比较改成归一化之后才进行命中就复用旧任务不再重复建种子。static async getTorrentId(magnetUri: string) { const userTorrents await RealDebridClient.getAllTorrentsFromUser(); const { infoHash } await parseTorrent(magnetUri); // 改动统一转小写再比较避免大小写差异导致漏匹配 const found userTorrents.find( (t) t.hash.toLowerCase() infoHash.toLowerCase() ); if (found) return found.id; // 命中即复用已有任务 const torrent await RealDebridClient.addMagnet(magnetUri); return torrent.id; }同时把getAllTorrentsFromUser的请求地址改成/torrents?limit1000一次取全任务避免第一页之外的记录漏判。改完的预期表现重试同一磁力链接时日志里出现复用了旧任务 ID 的记录而不是新建一条。第二步状态没刷新前先别判定重下getDownloadUrl里选完文件后服务器状态经常还停在waiting_files_selection旧逻辑立刻判断容易把还没索引完误读成没下载过。这里改成带 3 次重试的轮询给服务器一点消化时间。// 改动选完文件后轮询等待状态变化而不是立即判断 let torrentInfo await this.getTorrentInfo(realDebridTorrentId); for ( let i 0; i 3 torrentInfo.status waiting_files_selection; i ) { await this.selectAllFiles(realDebridTorrentId); await new Promise((r) setTimeout(r, 2000)); torrentInfo await this.getTorrentInfo(realDebridTorrentId); }改完的预期表现下载不会因状态瞬态中断队列里也不会因为一次误判再冒出新任务。第三步把解析过的直链缓存在本地最后把拿到的直链写盘保存重启后不必再向服务器要。在 src/main/level/sublevels/downloads.ts 旁边新增一个独立 sublevel以任务 hash 为键有效期 24 小时避免和 Download 记录类型冲突。// 改动新增独立 sublevel 缓存直链key 为任务 hash const rdLinks db.sublevel(real-debrid-links, { valueEncoding: json, }); // 写入拿到新直链时回写 await rdLinks.put(hash, { url: downloadUrl, expires: Date.now() 24 * 60 * 60 * 1000, }); // 读取未过期直接返回过期则重新解析 const cached await rdLinks.get(hash).catch(() null); if (cached cached.expires Date.now()) return cached.url;三步做完校验不漏判、判定不急躁、链接不重复问重复下载就断掉了。验证修复重加一次同一磁力链接挑一个已经下载完成的磁力链接删掉本地任务后重新添加。你应该看到队列直接复用已完成的任务而不是发起新的下载再检查~/.config/hydra下的 leveldb 数据能找到以 hash 命名的直链缓存记录。下载去重的后续增强已列入 Hydra 的迭代计划相关改动将在后续版本中随官方发布一起落地。【免费下载链接】hydraHydra Launcher is an open-source gaming platform created to be the single tool that you need项目地址: https://gitcode.com/GitHub_Trending/hy/hydra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门