 shenmo7192andGitee
|
55247a72da
|
!414 feat: 新增字体大小设置与界面整体缩放,修复放大后设置页溢出
Merge pull request !414 from xiyidaiwa/Erotica
|
2026-08-18 05:49:52 +00:00 |
|
 shenmo7192andGitee
|
791b196256
|
!415 fix(systemd): 修复服务配置单元(unit) 的语法问题
Merge pull request !415 from zinface/systemd/service-unit-fix
|
2026-08-18 05:49:28 +00:00 |
|
 shenmo7192andGitee
|
eb4f01da94
|
!413 fix: 使用定时器而非服务来执行周期性更新检查
Merge pull request !413 from zinface/systemd/spark-update
|
2026-08-18 05:47:12 +00:00 |
|
zinface
|
bc49a41018
|
fix(systemd): 修复服务配置单元(unit) 的语法问题
|
2026-08-18 10:21:08 +08:00 |
|
zinface
|
b87112fa38
|
fix(systemd): 分析 timer 无效原因及解决方案
我看了下,这 timer 无效有几个原因
1. timer 本身要 enable 和 start
2. service 里要去掉 RemainAfterExit=yes 这条(不能让服务一直处于 activate)
3. timer 重新设计更新触发时间(6,12,18:00) 一天更新3次,分布到 30min 内
4. service 重新保持开机运行一次(撤回提交中的部分修改)
起码确定这不是服务器,不再 6h 分布,而是桌面系统,及时在到达时间后,在30min内完成更新(也同样不拥挤在一块),话说回来,到点后,在30分钟内统一更新所有安装了星火应用商店的机器,这用户量应该能支撑得住噻?
|
2026-08-18 09:14:00 +08:00 |
|
xiyidaiwa
|
d0e6dc1b79
|
feat(build): 更新测试构建脚本以同步应用内版本号
- 为 electron-builder.yml 添加 extraMetadata.version 临时配置
- 实现打包完成后自动恢复 electron-builder.yml 文件
- 添加 trap 机制确保异常退出时也能正确恢复配置
- 清理旧的 electron-builder 产物避免内容污染
- 完善脚本注释说明版本同步机制和使用注意事项
|
2026-08-18 09:09:52 +08:00 |
|
xiyidaiwa
|
81567f8351
|
refactor(display): 移除字体大小设置,仅保留界面整体缩放
用户实测发现仅调字体到特大/超大时主页面卡片布局遮挡,且字体大小
与界面缩放功能效果高度重叠。故采用方案1:删除字体大小入口,放大
统一由 Electron setZoomFactor 处理(整体等比缩放,不破坏布局)。
- displaySettings.ts:移除 FontSizeOption/FONT_SIZE_OPTIONS/applyFontSize/
setFontSize/initFontSize 等全部字体相关导出,仅保留界面缩放
- App.vue:移除 initFontSize 导入与调用
- SettingsModal.vue:删除「字体大小」卡片及所有相关逻辑,仅留「界面缩放」
- 还原 8 个组件中当初为字体联动改写的 rem 为原始 px(10/11/12/13/15px),
消除对 html font-size 的依赖,卡片布局不再因字号变化溢出
|
2026-08-18 00:15:24 +08:00 |
|
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 |
|
shenmo7192
|
2f85f1da71
|
fix(ui): 首页欢迎标题字号与左侧栏一致
|
2026-08-17 22:58:14 +08:00 |
|
shenmo7192
|
700197bdc1
|
fix(ui): 将首页推荐文字调大至与左侧栏一致
|
2026-08-17 22:45:03 +08:00 |
|
zinface
|
582435b857
|
fix: 使用定时器而非服务来执行周期性更新检查
|
2026-08-17 21:53:11 +08:00 |
|
 shenmo7192andGitee
|
e4540252b3
|
!412 fix(install-manager): 按 dpkg 规则放宽 deb 文件名校验,修复含 epoch 冒号包被误拦
Merge pull request !412 from xiyidaiwa/Erotica
|
2026-08-17 02:30:47 +00: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 |
|
shenmo7192
|
b916fc90f3
|
bump ver: 5.3.0
5.3.0
|
2026-08-15 16:46:39 +08:00 |
|
shenmo7192
|
f3728eae00
|
feat(detail): 应用详情默认展开已安装版本
|
2026-08-15 16:46:32 +08:00 |
|
shenmo7192
|
b4fbd44ed9
|
bump ver
|
2026-08-15 16:14:28 +08:00 |
|
 shenmo7192andGitee
|
a4d75c01ad
|
!410 bump(debian/changelog): 5.3.0-0
Merge pull request !410 from AAA Elysia 猫猫侠 ~喵/N/A
|
2026-08-14 15:15:24 +00:00 |
|
 AAA Elysia 猫猫侠 ~喵andGitee
|
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 |
|
 shenmo7192andGitee
|
3403d1fb83
|
!409 docs & ui: 新增测试打包脚本约定并优化首页间距
Merge pull request !409 from xiyidaiwa/Erotica
|
2026-08-14 15:10:26 +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
|
b5c5ab04b5
|
fix(update-center): 修复更新中心点击更新后卡在"开始更新..."不动
- 根因:service.ts 用 webContents.send("queue-install") 向主下载队列发任务,
但 webContents.send 的目标对象是渲染进程,主进程 ipcMain 监听不到自己发出的消息,
导致任务从未进入 install-manager 的下载队列,UI 永远卡在 queued。
- 将 install-manager.ts 的 queue-install 处理逻辑抽为导出的 addInstallTask(payload, sender),
新增 QueueInstallPayload 类型,避免 any。
- 更新中心 service.ts 的 start() 改为直接 await addInstallTask(...),任务真正入队。
- 文档 docs/app-list-cache-analysis.md 新增第 9 节记录本修复。
|
2026-08-13 09:37:17 +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
|
a7b8cd52af
|
fix(安全/性能): AI审查实证修复 - metalinkUrl SSRF校验 + withTimeout定时器泄漏 + 批量更新/初始加载守卫
- install-manager.ts: queue-install 增加 metalinkUrl 校验(仅允许相对路径或官方域名,防 SSRF)
- App.vue: withTimeout 用 finally(clearTimeout) 修复定时器泄漏
- App.vue: apps 批量更新改数组赋值替代 push(...),避免逐元素响应式重渲染
- App.vue: apps.length watcher 增加 initialCatalogLoaded 守卫,初始目录加载期间跳过已安装列表刷新 IPC
- 审计实证:①filename校验已有(误报) ④pauseDownload为历史TODO且后端不支持(不在此PR) ⑦⑧为可维护性大项(记录待后续)
注:AI审查4阻断项实证——①误报 ②真实加固 ③真实修复 ④历史遗留;4改进项 ⑤⑥真实已修 ⑦⑧记录
|
2026-08-12 20:28:27 +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 |
|
xiyidaiwa
|
7cafcc51f6
|
fix(download): 下载失败时补全日志,避免卡在"正在获取 Metalink"突兀退出
- 主进程 Metalink 下载请求失败显式 sendLog 并回传渲染端(原仅静默 logger.error)
- aria2c 拉起失败补 sendLog 日志
- Metalink 写入完成补 sendLog 提示
- 渲染端 install-complete 失败分支将错误原因写入 logs,并补成功/失败终止日志
- 配套: 缓存修复(C1 主进程 no-cache + C2 axios ?_t 版本戳) 已在上一提交实现
- 文档 docs/app-list-cache-analysis.md 新增第8节下载日志断层修复方案
|
2026-08-11 18:50:31 +08:00 |
|
xiyidaiwa
|
e0e6c50b89
|
fix(cache): 列表/分类请求禁用客户端缓存,根治新应用上架后搜不到
- C1: 主进程 onBeforeSendHeaders 对 .json 数据请求注入 Cache-Control: no-cache + Pragma
- C2: 渲染端 axiosInstance 与 priorityConfigAxios 对 .json GET 追加 ?_t 时间戳版本戳,穿透 CDN 边缘缓存
- 按去除 query 的 pathname 判断 .json,兼容 C2 自身追加的 ?_t,避免 C1/C2 交互失效
- 根因: nginx 无 Cache-Control 头 -> Chromium 启发式缓存(≈(now-LastModified)/10) 复用陈旧副本,重启仍命中旧 JSON,仅删 Cache 目录才生效
|
2026-08-11 18:44:32 +08:00 |
|
xiyidaiwa
|
8888afd4f5
|
fix: PR 审查真实缺陷修复(图标错位/定时器清理/并发/统计同步)
- AppDetailModal: iconPath 改用 viewingOrigin 动态计算,修复合并源切换时图标与数据错位
- App.vue: onUnmounted 清理 saveBoundsTimer 防抖定时器,避免组件销毁后悬空 IPC 调用
- App.vue: loadHomeListEntries 串行 for-of 改 Promise.all 并发拉取,缩短首页入口加载
- InstalledAppsModal: 顶部统计徽章基于搜索过滤结果实时计算,修复搜索时数字不同步
(审查误报项已核实未改: fetchAppFromStore 已有 encodeURIComponent + AbortSignal)
|
2026-08-11 00:20:19 +08:00 |
|
xiyidaiwa
|
44fa822146
|
fix: 排行榜日期比较鲁棒性 + 下载计数请求取消
- ranking.ts: topByUpdate 改用时戳数字比较,兼容后端不一致的日期格式
(如 2026-08-10 / 2026/08/10 / 带时分秒),无效日期兜底为 0 避免 NaN 乱序
- App.vue: fetchDownloadCount 的 fetch 加 rootAbortController.signal,
组件卸载时可取消未完成请求,避免内存泄漏
(注: 这两个真实缺陷由 PR 审查在错误 diff 下点名,本提交独立于 Erotica PR)
|
2026-08-10 23:59:15 +08:00 |
|
xiyidaiwa
|
102ac72d89
|
fix: 安全加固 + 首页推荐优先加载解耦
- install-manager: queue-install JSON.parse 加 try-catch 防异常 payload
- App.vue: openExternalUrl 协议白名单(http/https) 防恶意 scheme
- AppDetailModal: sanitizeMoreContent 改用 textContent 防 v-html XSS
- storeConfig: loadPriorityConfig 校验顶层结构,畸形数据回退 APM
- App.vue onMounted: 首页推荐(loadHome+preloadHomeListApps) 与全量
应用加载(loadApps) 解耦,进入软件即优先显示首页推荐
|
2026-08-10 23:40:21 +08:00 |
|
xiyidaiwa
|
5bd0a367c4
|
refactor(update-center): 消除刷新重试代码重复并加对称设计注释
- updateCenter.ts: 提取 getBackoffDelay,补充与主进程预刷新为对称设计的说明
- index.ts: 提取 getPreRefreshBackoffDelay,对齐命名与注释
- 仅消除重复拼写、补注释,刷新重试功能行为不变
- 超时保护仍只作用于刷新源路径,不波及列表加载与其他 IPC
验证: eslint + vue-tsc 通过,test-build 5.2.1.14-test 通过
|
2026-08-10 23:14:18 +08:00 |
|
xiyidaiwa
|
3f22207505
|
fix/refactor: 更新中心扫描与多项安全加固(经专业审计)
更新中心扫描修复:
- updateCenter.ts: 抽出 runSystemUpdateThenLoad, open/refresh 共用,
打开时即刷新双源(aptss ssupdate + apm update), 失败仅告警不阻断扫描
- shell-caller.sh: ssupdate 分支 exit $? 恒 0 吞掉刷新失败, 改为 exit $exit_code
- update-center/query.ts: 移除 nextVersion===currentVersion 误删真实更新项逻辑,
信任 aptss 上游 upgradable 判断
安全加固:
- AppDetailModal.vue: 新增 sanitizeMoreContent 剥除 HTML 标签后再 v-html, 防 XSS
- InstalledAppsModal.vue: ALLOWED_LOCAL_ICON_PREFIXES 收紧为具体子目录, 缩小
本地文件读取面
- install-manager.ts: filename 用 path.basename 防路径遍历; 包名/文件名 PKGNAME_PATTERN 校验
- index.ts: 临时目录改用 spark-store-${pid} 隔离, will-quit 清理对应目录
经 7 维度专业审计(安全/功能/类型/可维护/资源/性能/兼容)通过。
|
2026-08-10 21:42:36 +08:00 |
|
xiyidaiwa
|
0be6f8ad11
|
fix: 修复更新中心打开时扫描不到软件更新的问题
- shell-caller.sh: ssupdate 分支 exit $? 永远返回 0 会吞掉刷新失败,
改为 exit $exit_code 真实上报 aptss ssupdate 成败
- updateCenter.ts: 打开更新中心(open)时先执行 update-center-run-system-update
(pkexec aptss ssupdate) 刷新软件源, 与刷新按钮行为一致, 避免基于陈旧
apt 缓存扫描导致漏报可更新项
经多维度专业审查(安全/功能/类型/可维护/资源/性能/兼容)通过。
|
2026-08-10 21:21:40 +08:00 |
|
xiyidaiwa
|
800a92b419
|
fix: 处理 PR 审查意见(竞态/类型安全/冗余/日志泄露)
- App.vue fetchAppFromStore 的 fetch 接入 rootAbortController.signal,
组件卸载时取消请求,避免竞态与内存泄漏;catch 静默处理 AbortError。
- App.vue loadHome 远程字段由 `as string` 断言改为 typeof 运行时守卫,
避免非字符串数据注入响应式状态(非崩溃,属改进)。
- ranking.ts topUpdatedContributors 移除对 topByUpdate 已过滤结果的冗余 filter。
- storeConfig 加载成功日志改为仅打印规则条数,避免完整配置泄露且保留诊断价值。
- 未采纳:parseAppPayload 默认 origin=spark 维持不变(spark 为历史默认源,
盲改 apm 有反向误路由风险,且该字符串分支仅为极旧格式兜底)。
|
2026-08-10 17:19:55 +08:00 |
|
xiyidaiwa
|
9247fe8e63
|
fix: 合并应用子版相反命中时按 apmPriority 例外优先裁决
getHybridDefaultOrigin 原先对合并应用子版采用「spark 先于 apm」短路返回,
当 sparkApp 命中 sparkPriority 且 apmApp 命中 apmPriority(方向相反)时,
会错误返回 spark,违反 priority-config.json 中 apmPriority「例外优先」语义。
改为先收集两子版命中结果,方向相反时让 apm 胜出;仅单子版命中或同向时
维持原行为。已用 Node 复现验证(相反命中返回 apm、对照旧逻辑返回 spark)。
|
2026-08-10 08:27:18 +08:00 |
|