From b256a8d7f129bc54b775dd3928483209d531b4f0 Mon Sep 17 00:00:00 2001 From: HomeDash Bot Date: Sun, 13 Sep 2026 09:02:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(favicon):=20=E5=A4=B1=E8=B4=A5=E9=87=8D?= =?UTF-8?q?=E8=AF=95=E9=97=B4=E9=9A=94=E4=B8=8D=E5=86=8D=E6=8C=A1=E4=BD=8F?= =?UTF-8?q?"=E7=BC=93=E5=AD=98=E6=96=87=E4=BB=B6=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E5=90=8E=E7=9A=84=E9=87=8D=E6=8A=93"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实测:删掉 item-icons 里三个被污染的图标后,rebuild 不再重抓,图标永久缺失 (只有重启容器才恢复)。根因:faviconWorker 在**每次**尝试后都写 faviconAttempted, 而 queueFavicon 会用 faviconRetryGap 挡住"近期尝试过"的 host —— 于是 cachedFavicon() 为空(文件确实不存在)也照样被跳过。 修法:成功时 delete(faviconAttempted, hostport),只给失败保留节流记录。 这样缓存文件被手工清理或数据卷恢复后,下一次 rebuild 就能立即重抓。 --- history-server/favicon.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/history-server/favicon.go b/history-server/favicon.go index e65ffc9..e81288d 100644 --- a/history-server/favicon.go +++ b/history-server/favicon.go @@ -208,7 +208,15 @@ func faviconWorker() { err := fetchFavicon(hostport) faviconMu.Lock() delete(faviconQueued, hostport) - faviconAttempted[hostport] = time.Now() + if err != nil { + // 只给**失败**留节流记录 + faviconAttempted[hostport] = time.Now() + } else { + // 成功则不留下尝试记录:这样日后缓存文件被删(手工清理、数据卷恢复)时, + // 下一次 rebuild 能立刻重抓,而不是被 faviconRetryGap 永久挡住 + // (实测踩到:删掉缓存的三个图标后一直不再抓,只有重启容器才会重抓)。 + delete(faviconAttempted, hostport) + } faviconMu.Unlock() if err != nil { log.Printf("favicon: %s: %v", hostport, err)