追加 Hosts、路径撞名拦截、连接页表头随行滚动、GEO 借内核通路
设置页内核参数加 hosts 行,铅笔进弹窗编辑(顶层 hosts: 键, config.go:454,值单个或数组 parseHosts config.go:1131)。弹窗里随便改、 保存才一次性提交——写配置有几秒的校验重载,逐行失焦提交会把等待塞进 每次输入。没动过的行原样写回,数组不被重整形。 订阅和规则组新增时查缓存路径撞名:路径由名字净化而来,「订阅 A」和 「订阅/A」是两个名字、同一个文件,名字查重挡不住,会互相覆盖缓存。 纯函数在 shared 带测试,页面提交前拦。 连接页表头挪进滚动容器加 sticky:.scroller 声明 overflow-y 后按规范 连带拿到横向滚动上下文,表头留在外面时窄屏横向滚动两者脱节。表头 40px 的窗口偏移由 overscan 8 行吸收,不配 scrollMargin。 GEO 单文件下载先借内核的混合端口出去再退直连——内核自己更新 GEO 走 的是它的分流,Patchbay 直连 GitHub 不一定通。ECharts 拆独立 chunk, 业务代码改动不再让这 500KB 跟着换 hash。
This commit is contained in:
@@ -15,6 +15,7 @@ import {
|
||||
listSubscriptions,
|
||||
providerNames,
|
||||
removeSubscription,
|
||||
subscriptionPathConflict,
|
||||
subscriptionReferences,
|
||||
updateSubscription,
|
||||
} from '@shared/providers.ts'
|
||||
@@ -148,6 +149,19 @@ async function submitForm(draft: {
|
||||
}) {
|
||||
const editing = formEditing.value
|
||||
|
||||
// 名字查重放行了、但净化后的缓存路径和别人相同的,在这里拦(编辑不改名,只查新增)
|
||||
if (!editing) {
|
||||
const path = providerCachePath(draft.name)
|
||||
const clash = subscriptionPathConflict(props.data, draft.name, path)
|
||||
if (clash) {
|
||||
toast(`「${draft.name}」和「${clash}」的缓存文件会是同一个`, {
|
||||
kind: 'error',
|
||||
hint: '名字只在符号或空格上有差异时会净化成同一个文件名,换一个名字。',
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 从文件导入:先把内容写到订阅的缓存路径上,成了再写声明。
|
||||
// 顺序不能反——声明先落盘的话,内核重载会去读一个还不存在的文件
|
||||
if (draft.file) {
|
||||
|
||||
Reference in New Issue
Block a user