From a9845f1fba87dc4b88ab5d8958fa0458e1a3e1ec Mon Sep 17 00:00:00 2001 From: HomeDash Bot Date: Sat, 12 Sep 2026 12:27:35 +0800 Subject: [PATCH] =?UTF-8?q?feat(nav):=20=E5=B8=B8=E7=94=A8=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=94=B9=E4=B8=BA=E7=BA=AF=E8=AE=BF=E9=97=AE=E9=A2=91?= =?UTF-8?q?=E6=AC=A1=20top-5=EF=BC=8C=E5=8F=96=E6=B6=88=20Gitea=20?= =?UTF-8?q?=E7=BD=AE=E9=A1=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户要求:不要固定置顶 Gitea,且每个服务都应归到准确描述其功能的分组里。 - history-server/main.go:删除「强制 Gitea/代码托管置顶」逻辑(含 isCodeHostVal 参与的首位组装),改为按访问频次取前 5;顶部说明同步更正 - 文档:README / AGENTS.md 里"(Gitea 置顶)"的描述改为"不置顶任何服务" - 现场分组调整:新建「代码托管」分组并把 Gitea 归入(此前它只存在于 系统管理的 常用服务 里,等于没有功能归属) go vet / go test 通过。 --- AGENTS.md | 2 +- README.md | 2 +- history-server/main.go | 29 ++++++++--------------------- 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index f429ea9..0ee2a17 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -181,7 +181,7 @@ curl -s -X POST -H "Authorization: Bearer $TOK" "$A/gateway/apply" curl -s -X POST -H "Authorization: Bearer $TOK" -H 'Content-Type: application/json' \ -d '{"name":"常用服务"}' "$A/section" > ⚠️ **两个分组是系统管理的,不要往里手工加条目**: -> - `常用服务`:按**访问频次**自动取前 5(Gitea 固定置顶),服务端重建 +> - `常用服务`:按**访问频次**自动取前 5(**不置顶任何服务**),服务端重建 > - `历史访问`:按浏览器同步的浏览记录重建(安装入口由它自己放在首位) > > 因此 `navEnabled` 的 `navSection` 必须指向**用户分组**(如 `AI & 工具`、`系统管理`)。 diff --git a/README.md b/README.md index 3f54db9..e152917 100644 --- a/README.md +++ b/README.md @@ -642,7 +642,7 @@ curl -s http://127.0.0.1:18080/api/schema | jq # 人读:items + resourc echo "$code" ``` -> **注意 `常用服务` 与 `历史访问` 是系统管理的分组**:前者按访问频次自动取前 5(Gitea 置顶), +> **注意 `常用服务` 与 `历史访问` 是系统管理的分组**:前者按访问频次自动取前 5(**不置顶任何服务**), > 后者按浏览记录重建。新增服务要放进用户分组(如 `AI & 工具`);`navEnabled` 的 `navSection` > 若指向 `常用服务`,条目会在下次重建时被挤掉。 diff --git a/history-server/main.go b/history-server/main.go index 17f2a84..926dee3 100644 --- a/history-server/main.go +++ b/history-server/main.go @@ -322,7 +322,7 @@ func extensionInstallItem() map[string]any { // rebuildDashySections 读 conf.yml: // 1. 收集除「历史访问」外所有导航项 // 2. 按各导航 host 在 history 的累计访问统计 -// 3. 「常用服务」= 访问最高的 4 个导航(Gitea/代码托管恒置顶) +// 3. 「常用服务」= 访问频次最高的 5 个导航(不置顶任何服务) // 4. 「历史访问」= 非导航 host 的 top 20 func rebuildDashySections() { // 序列化重建:同步请求、启动、以及 favicon 抓完后的重试都会调到这里。 @@ -458,26 +458,13 @@ func rebuildDashySections() { candidates = uniq } - // 强制 Gitea/代码托管置顶:host 或标题含 gitea/git/code/代码/仓库 - // 代码托管识别(独立函数便于单测) - var top []cand - var codeHost *cand - rest := make([]cand, 0, len(candidates)) - for i := range candidates { - if codeHost == nil && isCodeHostVal(candidates[i].nav.title, candidates[i].host, candidates[i].nav.url) { - codeHost = &candidates[i] - } else { - rest = append(rest, candidates[i]) - } - } - top = append(top, rest...) - // 组装:Gitea 第一(若存在),再加访问最高的其余导航,凑满 4 - finalNavs := make([]dashyNav, 0, 4) - if codeHost != nil { - finalNavs = append(finalNavs, codeHost.nav) - } - for _, c := range top { - if len(finalNavs) >= 4 { + // 「常用服务」= 纯访问频次前 N,**不置顶任何服务**。 + // 曾有一版把 Gitea/代码托管强制放第一位;用户要求取消:每个服务都应归在 + // 准确描述其功能的分组里,常用服务只做频次聚合。 + const favTopN = 5 + finalNavs := make([]dashyNav, 0, favTopN) + for _, c := range candidates { + if len(finalNavs) >= favTopN { break } finalNavs = append(finalNavs, c.nav)