From bc926bd9725883b59b7c82d982a36e4bc3fcd542 Mon Sep 17 00:00:00 2001 From: yuming Date: Sun, 26 Apr 2026 15:50:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B8=85=E7=90=86=20=5Fdownload=5Fresul?= =?UTF-8?q?t=20=E4=B8=AD=E5=A4=B1=E8=B4=A5/=E4=B8=AD=E6=96=AD=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=9A=84=E5=83=B5=E5=B0=B8=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UI "正在下载" 数会随时间膨胀(如设置并发=5 却显示 54 个)的根因: _download_result 仅在用户手动「跳过」时被清理,下载失败/中断(3 次重试 都失败、_check_download_finish 大小不匹配抛 BadRequest 等)路径不会清, 导致中途失败的进度记录永久残留在内存字典里被 UI 误判为"还在下载"。 修复:在 download_task 末尾统一调用 remove_download_entry,无论成功/ 失败/跳过任务结束就清掉。该 dict 仅用于 UI/Bot 实时进度展示,不参与 下载触发或重试决策(重试由 ids_to_retry + worker 内部 3 次重试两层兜底), 清理后下载逻辑零影响。 Co-Authored-By: Claude Opus 4.7 (1M context) --- media_downloader.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/media_downloader.py b/media_downloader.py index c16e7a1..e108dc6 100644 --- a/media_downloader.py +++ b/media_downloader.py @@ -366,6 +366,12 @@ async def download_task( file_size, ) + # 任务结束(无论成功/失败/跳过)都清理实时进度缓存,避免失败/中断的"僵尸记录" + # 残留在 _download_result 里被 UI 误判为"还在下载"。 + # 已完成的历史记录走数据库(db.record_download),不依赖这个 dict。 + # key 类型与 update_download_status 写入时保持一致(node.chat_id 原类型)。 + remove_download_entry(node.chat_id, message.id) + # pylint: disable = R0915,R0914