diff --git a/history-server/main.go b/history-server/main.go index ecf57a8..85c689d 100644 --- a/history-server/main.go +++ b/history-server/main.go @@ -381,7 +381,7 @@ func extensionInstallItem() map[string]any { // 1. 收集除「历史访问」外所有导航项 // 2. 按各导航 host 在 history 的累计访问统计 // 3. 「常用服务」= 访问频次最高的 5 个导航(不置顶任何服务) -// 4. 「历史访问」= 非导航 host 的 top 20 +// 4. 「历史访问」= 非导航 host 的全部历史(不设条数上限) func rebuildDashySections() { // 序列化重建:同步请求、启动、以及 favicon 抓完后的重试都会调到这里。 rebuildMu.Lock() @@ -516,14 +516,16 @@ func rebuildDashySections() { candidates = uniq } - // 「常用服务」= 纯访问频次前 N,**不置顶任何服务**。 + // 「常用服务」= 所有**被点击过**的导航项,按访问频次降序,**不设条数上限**。 // 曾有一版把 Gitea/代码托管强制放第一位;用户要求取消:每个服务都应归在 // 准确描述其功能的分组里,常用服务只做频次聚合。 - const favTopN = 5 - finalNavs := make([]dashyNav, 0, favTopN) + // 用户要求(2026-09-13):尽最大可能显示,不要限制条目 —— 原先截断到 top5, + // 现在凡有点击记录(visits > 0)的导航项全部展示;0 次的仍不算"常用",不塞进来 + // (否则等于把所有分组复制一份)。 + finalNavs := make([]dashyNav, 0, len(candidates)) for _, c := range candidates { - if len(finalNavs) >= favTopN { - break + if c.visits <= 0 { + continue } finalNavs = append(finalNavs, c.nav) } @@ -568,7 +570,9 @@ func rebuildDashySections() { sort.SliceStable(entries, func(i, j int) bool { return entries[i].TotalVisits > entries[j].TotalVisits }) - histItems := make([]any, 0, 21) + // 用户要求:不限条数(原先截断到 20 条)。历史主机全部展示, + // 排序仍按访问次数降序;首条固定为插件安装入口。 + histItems := make([]any, 0, len(entries)+1) // 首条固定为插件安装入口:未装插件(未注入 data-navi-ext)时保留, // 已装的浏览器由 navi.js 隐藏。 histItems = append(histItems, extensionInstallItem()) @@ -590,9 +594,7 @@ func rebuildDashySections() { "description": fmt.Sprintf("%d\u6b21\u8bbf\u95ee", e.TotalVisits), "icon": icon, "url": e.URL, }) - if len(histItems) >= 21 { - break - } + } foundHist := false for _, si := range secs {