xiyidaiwa
ede1a1269f
fix:更新版本号到5.3.0.2
2026-08-17 23:46:15 +08:00
xiyidaiwa
e25a3c9d8f
feat: 新增界面整体缩放与字体超大档,修复设置页溢出
...
- 界面缩放:Electron webContents.setZoomFactor,档位 90%/100%/110%/125%/150%
- 主进程新增 set-zoom-factor IPC,启动时从 window-state.json 恢复 zoomFactor
- 窗口尺寸保存与退出前均持久化当前 zoom
- displaySettings 新增 UiScaleOption + initUiScale,App.vue 启动恢复
- SettingsModal 新增「界面缩放」卡片,实时经 IPC 应用并持久化
- 字体大小新增「超大」档(html font-size 20px),共 5 档
- 修复设置模态框在字体/界面放大后内容超出视口:面板限制
max-h-[calc(100vh-2rem)],内容区 flex-1 overflow-y-auto 滚动
2026-08-17 23:40:23 +08:00
xiyidaiwa
7b658e9dd1
fix(ui): 将固定 px 字号改为 rem,让全局字体大小档位生效
...
用户反馈首页红框区域(横幅标题/副标题)没随字号档位变大。
原因是多处使用了 Tailwind 固定 px 任意值(text-[10px]/[11px]/[12px]/[13px]/[15px]),
它们不随 html font-size 缩放。统一替换为等效 rem 任意值:
10px → 0.625rem, 11px → 0.6875rem, 12px → 0.75rem, 13px → 0.8125rem, 15px → 0.9375rem
涉及 8 个 Vue 组件,保证字号档位全局联动(仍保持 16px 基准下的原视觉大小)。
vue-tsc 通过,打包成功;HomeView.vue 原有 emit 未使用 lint 错误未动。
2026-08-17 23:15:18 +08:00
xiyidaiwa
4dc1a1d7fe
feat(settings): 新增字体大小设置(仅字号档位,不含整体缩放/字体族)
...
- 新增 src/global/displaySettings.ts:small/medium/large/xlarge 四档 → html 15/16/17/18px,
localStorage(spark-store-font-size) 持久化,applyFontSize 写 html font-size 全局联动 rem 字号类
- App.vue onMounted 最前 initFontSize()(与 initTagPriorityStrategy 同级,防字号闪烁)
- SettingsModal.vue 新增「字体大小」卡片(4 档分段按钮 + 预览),selectFontSize 即时应用+持久化
- 用户确认范围:仅字号档位,整体缩放与字体族切换本期不做
- vue-tsc/lint/打包均通过
2026-08-17 23:00:14 +08:00
xiyidaiwa
5efed0dca2
修改版本号为5.3.0.1
2026-08-17 09:15:29 +08:00
xiyidaiwa
ada3a6dab4
fix(install-manager): 按 dpkg 规则放宽 deb 文件名校验,修复含 epoch 冒号包被误拦
...
- 新增 FILENAME_PATTERN,按 Debian 规则允许包名/版本号合法字符:含 epoch 冒号
(如 steam-launcher_1:1.0.0.87_amd64.deb)与排序标记 ~(如 1.0~beta),及字母数字 . _ + -
- filename 校验由严格 PKGNAME_PATTERN 改为 FILENAME_PATTERN,并保留路径遍历双保险
(拒绝 '..' 段 + path.basename 拒绝含 '/' 的路径),安全性未削弱
- 修正字符组内 [:~] 正则区间陷阱:用 \- 转义隔离,避免误匹配 <,=,>,?,@,[,] 等符号
- 已用真实仓库 2085 个包验证:包名/文件名拒绝均为 0,全部可正常放行下载与安装
2026-08-17 09:12:08 +08:00
shenmo7192
ae9142ad06
update 5.3.0
2026-08-15 16:53:11 +08:00
AAA Elysia 猫猫侠 ~喵 and Gitee
da08c78238
bump(debian/changelog): 5.3.0-0
...
Signed-off-by: AAA Elysia 猫猫侠 ~喵 <elysia-best@simplelinux.cn.eu.org >
2026-08-14 15:14:47 +00:00
xiyidaiwa
7bad39a796
fix(security/robustness): 清理 update-center 调试日志 + cancel-install id 校验
...
- update-center/index.ts: 引入 pino logger,将约 30 处 console.log(含 [DEBUG] 前缀及敏感路径)
替换为 logger.debug(生产默认 info 级不打印,消除敏感信息泄露)
- install-manager.ts: cancel-install 增加 id 整数类型校验(typeof number && isInteger),防御非法输入
- PR 审查其余 5 项经代码实证为误报:JSON.parse 已有 try-catch、activeDownloadCount 的 mkdir/axios
均在 try 内且 finally 必执行、check/remove-installed 已用 parseAppPayload 做 PKGNAME_PATTERN 校验、
origin 已枚举归一化、initializeUpdateCenter 已有单例守卫;async handler 顶层 try-catch 因 Electron
主进程默认 unhandledRejection 不崩溃且改动面大(19 handler)风险高,未改
2026-08-13 23:37:03 +08:00
xiyidaiwa
3cedd0c517
fix(robustness): 截图探测被 abort 取消时不污染负缓存(维度2)
...
- checkScreenshotExists 原 catch 不区分异常类型,用户快速切换/关闭详情触发 abort 时,
未完成的 HEAD 请求误写 false,导致同进程内再打开该应用少显示图片(重启才自愈)
- 改为 signal.aborted 时上抛错误:由 loadScreenshots 的 Promise.all reject 被 openDetail
的 .catch 吞掉,既不写缓存也不覆盖 screenshots.value,后续新 controller 轮次正确填充
- 网络错误(非取消)仍正常写 false 过滤 404 脏数据;vue-tsc/lint/打包均通过
2026-08-13 23:09:10 +08:00
xiyidaiwa
e67f4752a4
fix(stability): cancel-install 增加 SIGTERM→SIGKILL 超时降级防止僵尸进程
...
- install-manager.ts: cancel-install 仅 kill()(SIGTERM),子进程忽略时成僵尸;新增 forceKill 封装先 SIGTERM 后 5s 超时降级 SIGKILL
- PR 审查其余 6 项经代码实证均为误报/可维护性建议,未改动:JSON.parse 已有 try-catch、pkgname 已 PKGNAME_PATTERN 校验防穿越、shell-caller 已双引号+白名单、watch 不修改 apps.length 无循环、baseApps 量级无需 shallowRef、install-complete 已 off 清理
2026-08-13 22:49:36 +08:00
xiyidaiwa
cdd94c650d
fix(security): PR 审查整改 - setWindowOpenHandler 域名白名单 / openWebsite 协议校验 / 批量云端安装并发控制
...
- electron/main/index.ts: setWindowOpenHandler 增加 ALLOWED_EXTERNAL_HOSTS 域名后缀白名单,仅可信 https 域名可 shell.openExternal(阻断项2)
- AppDetailModal.vue: openWebsite 增加 http/https 协议校验 + noopener,noreferrer(改进项5)
- useAccountSync.ts: installCloudItems 改为分批(BATCH_SIZE=3) + Promise.allSettled 错误收集(改进项2)
- 审查误报/未改动项已贴代码实证:阻断1 v-html 已用 textContent 转义;改进3 resolveCloudInstallCandidate 已有降级匹配链;改进4 单窗口无 HMR 不重复注册;改进1 暂停/恢复主进程无 handler 维持 TODO
2026-08-13 22:38:26 +08:00
xiyidaiwa
72d107c9de
fix: 截图以 img_urls 为候选并探测过滤 404(解决飞书类脏数据)
...
- 实测飞书 bytedance-feishu-stable 的 app.json img_urls 声明 5 张
(screen_1~5),但 screen_4/5 实际 404(后端元数据声明与实际文件不一致)
- 上一版(.4)直接采用 img_urls 会把 2 个 404 URL 塞进预览,仍出现空白页
- 改为:以 img_urls 为候选集合,对每个 URL 做 HEAD 存在性探测,仅保留真实可用的
(飞书过滤后只剩 3 张,微信 3 张保持 3 张)——既保证实际有几张预览几张,又兜底
后端脏数据;探测结果按 URL 内存缓存复用,同一应用反复打开不重复请求
- 恢复 abort 机制:打开新详情/关闭时取消旧探测,避免陈旧结果覆盖
- debian/changelog 测试版本号 5.2.1.5-test
- 验证:curl 实测飞书 screen_4/5=404、微信 3 张全 200;vue-tsc 0 / eslint 0 / 打包成功
2026-08-13 22:30:38 +08:00
xiyidaiwa
8e1de74cab
fix: 截图直接采用后端 img_urls,移除 HEAD 探测
...
- 实测后端 app.json 的 img_urls 为真实权威截图列表(微信 3 张即返回 3 个 URL,
spk-json 与 erotica 两域名同路径 screen_1~3=200、screen_4~5=404)
- loadScreenshots 改为直接读取 app.img_urls(兼容 string[] 与字符串形式 JSON),
由 ScreenPreview 的 screenshots.length 自动收敛预览数量与边界
- 彻底移除每次打开详情页的 5 个并发 HEAD 探测请求,消除服务器压力隐患
- 移除 checkScreenshotExists / screenshotAbortController / axiosInstance 依赖
- debian/changelog 测试版本号 5.2.1.4-test
- 验证:curl 实测 img_urls 真实存在;vue-tsc 0 / eslint 0 / 打包成功
2026-08-13 22:15:46 +08:00
xiyidaiwa
d8bea4ac23
fix: 应用截图按实际存在数量预览,不再固定 5 张
...
- useAppDetail.loadScreenshots 改为异步探测:并发 HEAD 请求 screen_1~5.png,
仅把返回 2xx 的真实截图加入 screenshots,不足 5 张时预览计数与按钮边界自动跟随
- ScreenPreview 已有的 disabled 边界 (currentScreenIndex === screenshots.length-1)
因此生效,切换到最后一张后禁止继续向后,消除空白页
- 新增 screenshotAbortController:打开新详情/关闭详情时取消旧探测,避免结果覆盖
- 探测异常不影响详情页弹窗,截图区域在探测完成后自动刷新/显示暂无应用截图
- debian/changelog 测试版本号 5.2.1.3-test
- 验证:vue-tsc 0 / eslint 0 / dpkg-buildpackage 打包成功
2026-08-13 21:54:08 +08:00
xiyidaiwa
e1edf1dcd5
fix: fetchWithRetry 对 429 限流增加指数退避与 Retry-After 尊重
...
- useHttp.calculateRetryDelay:优先读服务端 Retry-After 头;429 用指数退避
(1000*2^attempt, 封顶 30s);其余 5xx 仍固定延迟,避免限流场景频繁重试浪费带宽
- debian/changelog 测试版本号 5.2.1.2-test
- 验证:vue-tsc 0 / eslint 0 / dpkg-buildpackage 打包成功
审查项实证(其余 3 项均误报/已有防护,不改):
- ① install-manager pkgname 二次校验:已有 PKGNAME_PATTERN(/^[a-zA-Z0-9._+-]+$/)
在 parseAppPayload/addInstallTask/launch-app 三入口校验,且 spawn 全用 shell:false
参数逐元素传递,命令注入不可达;审查建议的 replace 属冗余纵深防御,不改
- ② InstalledAppsModal /var/lib/ 宽泛:误报,真实白名单(400-409行)已是
/var/lib/apm/ 与 /var/lib/dpkg/info/ 具体子目录,无宽泛 /var/lib/ 项
- ③ useAppState.ts 注入模式缺注册检查:误报,useAppState.ts 无 registerRequireLogin;
真实 registerRequireLogin 在 useFavorites/useAppDetail,默认 ()=>true 为刻意安全兜底
(未注册=放行),审查建议的 InjectionPoint 包装会破坏该语义,不改
2026-08-13 21:02:12 +08:00
xiyidaiwa
7be90f13ce
fix: 排序魔法数字提取常量 + sidebar-config 远程校验类型守卫
...
- InstalledAppsModal 提取 ORIGIN_PRIORITY 具名常量与 originPriority(),
消除排序比较函数中的 0/1 魔法数字(保留 hasOrigin 双来源语义)
- useCatalog.loadSidebarConfig 新增 isValidSidebarEntry 类型守卫,对远程
sidebar-config.json 入口做字段类型/长度/type 白名单校验,防止畸形数据进入
渲染层(type 白名单与 typedefinition.ts 的 SidebarEntry.type 严格一致)
- debian/changelog 测试版本号 5.2.1.1-test
- 验证:vue-tsc 0 / eslint 0 / dpkg-buildpackage 打包成功
审查项实证:
- 改进③(filteredApps 多次 filter) 误报:当前已为单 filter 遍历(.24 已改),
审查贴旧片段且退化 a.origin 会破坏双来源,不改
- 改进①/② 为真改进,已采纳并保真实现
2026-08-13 20:43:43 +08:00
xiyidaiwa
0f62a7e36a
feat(update-center): 支持被系统锁定(hold)包的强制安装与更新中心体验优化
...
- 标记 apt-mark hold 的 spark(aptss) 源包,默认禁用勾选并提示开启强制安装
- 更新中心发起更新时透传 forceHeld,后端 Spark 本地 deb 走 shell-caller
force-ssinstall 分支(单次免密 pkexec:unhold→ssinstall→hold),避免二次提权
- 无可选项时禁用全选并提示"无可更新项";更新选中后从列表中移除已启动项
- DownloadDetail 紧凑布局避免整页滚动;Toolbar 全选与更新选中按钮同行
- 继承 PKGNAME_PATTERN 与 metalinkUrl 白名单(https+*.spark-app.store+拒..)纵深防御
- apm 源无 hold 概念,forceHeld 在 apm 分支忽略(正确行为)
2026-08-13 16:42:21 +08:00
xiyidaiwa
d7bdcf3680
fix: 标签策略启动初始化加固 + 已安装应用过滤/统计性能优化
...
- 标签优先显示策略 initTagPriorityStrategy 提到 App.vue onMounted 统一调用,
消除组件挂载顺序导致先读内存默认 auto 的竞态窗口(AppDetailModal 移除重复调用)
- InstalledAppsModal 过滤逻辑合并为单次遍历(保留 hasOrigin 双来源语义)
- 统计 apm/spark/total 改为基于 searchFilteredApps 单次遍历
- canOpenDetail 补充业务含义注释与可读性变量
- 将 App.vue 重构的 9 个 composable 纳入版本管理
- 验证:vue-tsc 0 / eslint 0 / dpkg-buildpackage 打包 spark-store_5.2.1.24-test 成功
2026-08-12 23:16:17 +08:00
xiyidaiwa
5e7d88ecc5
fix(审计修复): 缓存穿透TTL共享 + 预刷新网络/超时 + 最大化/APM优先设计注释
...
- 新增 cacheBusterInterceptor.ts:createCacheBusterInterceptor(ttl=5min) 带 TTL 复用戳,
解决同会话频繁击穿缓存(B1)并将 App.vue/storeConfig 两处重复逻辑合并为共享工厂(I3)
- storeConfig.ts: priorityConfigAxios 改用共享拦截器;HYBRID_DEFAULT_PRIORITY 加注释
明确「主推 APM 是既定产品方向」(B2,非缺陷)
- App.vue: axiosInstance 改用共享拦截器(带 TTL)
- index.ts: 预刷新 startSourcePreRefreshOnce 加 net.isOnline() 检查 + 60s 超时兜底,
避免离线/卡死触发 pkexec 弹窗困惑(I1);createWindow 恢复逻辑加注释明确
「最大化后恢复重置为默认尺寸是有意设计,非缺陷」(I2)
- vue-tsc + eslint 通过
2026-08-12 21:02:48 +08:00
xiyidaiwa
30e1bc4840
refactor(更新中心): E方案重设计更新条目 + 已忽略沉底 + 复用app.update显示更新时间 + 安全加固
...
- UpdateCenterItem.vue: 改为单行紧凑卡片,显示 包名·当前→新版本、来源标签、更新时间(品牌色)、大小;已忽略项淡化
- updateCenter.ts: filteredItems 将已忽略项沉底到列表末尾
- UpdateCenterList/Modal + App.vue: 透传全局 apps,用 app.json 的 Update 字段(Date.parse)推算 updateTime,零额外网络请求
- typedefinition.ts + update-center/types.ts: 新增可选 updateTime 字段
- install-manager.ts: launch-app 补 pkgname.length > 256 长度限制(防 DoS)
- index.ts: close 事件先 clearTimeout 防抖定时器再同步保存窗口状态(消除竞态)
- App.vue: fetchWithRetry 重试 3→2、延迟 1000→500ms(体验优化)
- 7维审计通过;AI审查2阻断项(getIconUrl防护/fetchWithRetry泛型)经核实为误报
2026-08-11 23:54:00 +08:00
xiyidaiwa
aef9ccd1ec
fix(主题/UI): 修复标题栏主题按钮事件链、社区版徽标方案B、侧边栏顶部块清理
...
- App.vue: WindowTitleBar 补 :theme-mode 与 @toggle-theme 绑定,使标题栏主题按钮真正触发 toggleTheme;watch(themeMode) 补 syncThemePreference() 立即落地 dark 类
- WindowTitleBar.vue: 新增 ThemeToggle 主题切换按钮;社区版标签改为方案B描边霓虹徽章(亮/暗双态)
- AppSidebar.vue: 删除侧边栏顶部 logo/账户菜单/主题切换块,导航容器滚动条还原为 scrollbar-muted,清理相关 script 死代码
2026-08-11 22:45:37 +08:00
shenmo7192
c2ba273ca2
update 5.2.1.0
2026-07-17 23:47:22 +08:00
shenmo7192
ca5e7b98ac
build: 更新版本号为5.2.1-0以准备 Debian 包发布
...
同步修改了debian changelog和package相关文件的版本字段,适配 Debian 软件包的版本命名规范,完成初始打包准备工作
2026-07-17 21:18:37 +08:00
shenmo7192
0a908a31f6
chore: release v5.2.1 and improve submitter UI/UX
...
1. update version to 5.2.1 in changelog and package.json
2. add real-time upload progress display in submission window
3. optimize icon filename display and form reset logic
4. add success modal after successful submission
5. improve logging formatting in submitter backend
2026-07-16 14:03:40 +08:00
elysia-best
649c9fb53b
fix: 简化构建并修复龙架构构建
...
Signed-off-by: elysia-best <a.elysia@proton.me >
2026-07-16 01:06:49 +08:00
shenmo7192
c8783ed66c
chore(release): prepare v5.2.0 stable release
...
1. update debian changelog version from 5.2.0~alpha1 to 5.2.0
2. remove deprecated CI workflow backup files
3. fix duplicate loading issue by adding loadingTabs state
4. add effectiveLoading computed state to handle per-tab loading status
2026-07-15 20:25:04 +08:00
gfdgd-xi
bd8d070f32
Bump version 5.2.0~alpha1
...
Signed-off-by: gfdgd_xi <3025613752@qq.com >
2026-06-16 22:43:28 +08:00
gfdgd-xi
3d964c9473
使用debian脚本构建deb包
...
Signed-off-by: gfdgd_xi <3025613752@qq.com >
2026-06-16 22:29:05 +08:00