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
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
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
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
ae584730c4
refactor: 多维度代码审查修复(安全/清理/类型)
...
- src/App.vue:
- fetchAppFromStore 的 category/pkgname 路径参数 encodeURIComponent 编码(防路径穿越)
- img_urls JSON.parse 增加 try/catch,解析失败回退空数组(两处)
- onUnmounted 统一移除 hashchange/resize/keydown 及全部 IPC 监听,修复内存泄漏
- 提取 createFallbackApp 消除 openDetail 重复回退构造
- 收集并统一停止等待 loading 的一次性 watcher,闭环生命周期清理
- src/global/typedefinition.ts: 移除 CategoryInfo/HomeLink 宽泛索引签名,
CategoryInfo 改用显式 extra 字段
- electron/main/backend/install-manager.ts: 清理冗余 eslint-disable 并修正缩进
(remove-installed/check-installed 已通过 parseAppPayload 完成 pkgname 校验,无需改动)
2026-08-06 22:06:43 +08:00
xiyidaiwa
3816703303
fix: 安全加固——queue-install 路径遍历校验 + 首页远程数据显式字段
...
针对 PR 安全审查的修复:
1. queue-install 路径遍历(阻断项,真实风险):
install-manager.ts 直接用渲染进程传入的 pkgname 拼装下载目录
/tmp/spark-store/download/ 与 ssinstall 命令参数 /,
此前未做任何校验。复用模块顶部 PKGNAME_PATTERN 对 pkgname 与 filename 做白名单校验,
拦截含 ../、/ 或非法字符的输入,杜绝路径遍历。
2. 首页远程数据展开(阻断项,纵深防御):
App.vue loadHome 此前用 { ...l } 直接展开远程 homelinks.json 到响应式数组,
可能注入未知属性。改为显式提取 name/url/icon/more/imgUrl/type/origin 已知字段构造,
仅保留可信字段(url 仍做必需校验以保首页正常渲染)。
注:check-installed 白名单(审查第1项)此前已在 4f772ba7 通过 parseAppPayload 修复,本次无改动。
vue-tsc --noEmit 通过。
2026-08-03 14:17:45 +08:00
xiyidaiwa
4f772ba7eb
fix: 安全与健壮性排查修复(IPC 类型校验/AbortSignal/空名去重/窗口 await)
...
阻断项:
- install-manager: uninstall-installed / remove-installed / check-installed 由 any 改为 unknown + parseAppPayload 严格解析(PKGNAME_PATTERN 校验 pkgname,origin 仅限 spark|apm),消除命令注入风险;parseAppPayload/PKGNAME_PATTERN 提升至模块顶部复用并避免 TDZ
- App.vue openDetail: 参数由 Record<string,unknown> 收紧为 App | OpenDetailInput,新增 pkgname 运行时校验,避免访问 undefined 属性
改进项:
- App.vue homeLinks 去重:跳过空名称避免污染 seenNames,并对 links 数组与 HomeLink 必需字段做校验
- App.vue fetchWithRetry: 新增 AbortSignal 参数,递归链路传递,组件卸载时 rootAbortController.abort() 取消未完成任务
- index.ts showAndFocusMainWindow: 改为 async 并 await createWindow,调用点用 void 修饰避免 floating promise
vue-tsc --noEmit 通过。
2026-08-03 11:24:32 +08:00
xiyidaiwa and shenmo7192
77b4244f1d
!408 refactor(已安装应用): 合并 APM/Spark 分页为列表标签并新增统计
...
Merge pull request !408 from xiyidaiwa/Erotica
2026-07-29 06:47:41 +00:00
xiyidaiwa
df8c2d7eaa
style: 统一滚动条外观并将投稿应用窗口改为圆角
...
- 滚动条:主进程对 Linux 关闭 overlay 滚动条
(disable-features=OverlayScrollbar),使 CSS ::-webkit-scrollbar 自定义生效;
全局统一定义亮色 #94a3b8 / 暗色 #15203b(带极淡描边),宽度 0.75rem,亮暗一致。
- 投稿页:修复滚动条贯穿整个窗口、侵入标题栏(改为 flex 分栏,
标题栏 shrink-0,内容区单独滚动)。
- 应用管理页:移除 scrollbar-nowidth 隐藏与 scrollbar-thumb-* 覆盖色,
改由全局规则统一,与其他页面一致。
- 圆角页面:投稿页与已安装应用页滚动容器内缩 (mr-4 mb-4),
避免滚动条滚入圆角被裁切。
- 投稿应用窗口:独立窗口改为透明圆角窗口 (transparent + rounded-3xl + shadow-2xl),
与弹框风格统一;挂载时 body 背景透明以露出圆角。
- 标题栏:左上角蓝色圆点替换为软件图标 spark-store.svg。
- 更新中心:搜索框对齐主页样式(左侧图标、统一圆角与配色)。
2026-07-22 01:19:52 +08:00
shenmo7192
0a6fcd95c7
feat(install-manager): 安装成功时跳过APM快捷方式创建,仅针对升级任务
2026-07-19 23:27:19 +08:00
shenmo7192
70250acc76
fix(submitter): 捕获打开输出文件夹失败的错误
...
新增错误捕获逻辑,避免打开打包完成的文件夹失败时导致程序报错
2026-07-18 12:48:49 +08:00
shenmo7192
9323c368d6
style: 统一文件名小写处理并格式化代码
...
1. 对deb包名、打包文件名统一转为小写格式,避免大小写不一致问题
2. 格式化多处代码换行和缩进,提升代码可读性
2026-07-18 10:37:52 +08:00
shenmo7192
361dad1a64
feat(submitter): 新增自动获取git用户名并填充提交信息
...
扩展了提交器的自动填充能力,新增通过git config获取本地git用户名的能力,和原有邮箱获取逻辑结合,自动按照格式填充贡献者字段,优化用户提交体验
2026-07-17 23:12:10 +08:00
shenmo7192
f585be0dcd
feat(submitter): add form validation tips and improve submission checks
...
1. add real-time form validation prompt component for submission page
2. add URL validation for official website and screenshot format checks
3. refactor form validity calculation and user input status judgment
4. replace mirror switch with configurable base URL, support dev proxy path handling
5. add processing logic for base64 format screenshots
6. optimize history search and form reset logic
2026-07-16 15:56:13 +08:00
shenmo7192
a8ea7bec34
refactor(submitter): 优化分类加载逻辑,支持按架构获取CDN分类
...
1. 提取公共的CDN分类获取函数,增加 fallback 兜底逻辑
2. 新增支持amd64、arm64等更多架构类型
3. 为每个架构单独加载对应的分类列表,适配不同架构的分类差异
4. 更新日志打印参数,更清晰展示各架构的分类数量
2026-07-16 14:27:26 +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
shenmo7192
68195a94f6
refactor(submitter): 重构分类处理逻辑,完善提交校验与安装包流程
...
1. 重构提交器的分类处理,移除硬编码的分类映射,改用后端返回的type字段
2. 添加categoryId同步逻辑,完善表单校验和提交数据
3. 优化图标处理逻辑,支持base64格式图标
4. 完善deb包元数据处理,自动生成规范的文件名
5. 新增更全面的提交字段校验和API业务错误处理
6. 补充安装脚本的目录复制规则
2026-07-16 13:57:39 +08:00
shenmo7192
5e120d03ae
refactor(installer): 更新下载重试策略为指数退避
...
将原来固定间隔的重试超时列表替换为指数退避的重试间隔,从首次3秒递增到末次1分钟,共10次重试,优化下载失败后的重试体验
2026-07-16 00:44:42 +08:00
shenmo7192
7420466d92
style: 统一代码格式与字符串引号风格
...
1. 替换单引号为双引号统一字符串格式
2. 拆分过长的函数调用与条件判断行提升可读性
3. 简化多行console.log调用为单行格式
4. 为侧边栏添加条目计数标签展示功能
2026-07-14 13:59:55 +08:00
shenmo7192
b233fea4d5
refactor(install): 重构下载安装队列逻辑,拆分并发控制
...
1. 将下载与安装流程分离,实现并发下载限制与单安装实例控制
2. 新增任务阶段枚举,替换原有activeDownloads计数逻辑
3. 优化取消任务的处理流程,区分运行中和排队中的任务
4. 修复下载队列显示的统计错误,改为展示已完成任务数
5. 调整日志格式与代码注释,提升可读性
2026-07-13 23:06:05 +08:00
shenmo7192
7c6bdf0e55
feat(submitter,update-center): add multiple features and optimize submission flow
...
1. add shell caller ssupdate command support
2. add pre-update system refresh for update center
3. add get-git-email IPC handler and auto-fill email
4. optimize deb submission UI and category handling
5. disable and auto-fill package name/version fields
6. add loading and error states for category list
7. fix category value matching for history data
2026-07-13 22:07:01 +08:00
gfdgd-xi and Gitee
8bef913f7a
!400 投稿器用自渲染对话框替换alert修复选择deb后无法编辑信息的问题、拆分投稿器源码
...
Merge pull request !400 from gfdgd xi/Erotica
2026-07-13 08:10:06 +00:00
MarcusPy827
2efea67a60
chore: APM桌面快捷方式补丁修正权限0755 -> 0644
2026-06-30 03:44:57 +08:00
MarcusPy827
51d7e1870c
chore: APM桌面快捷方式补丁改用异步读取+修复过早return
2026-06-30 03:43:21 +08:00
MarcusPy827
98d6ebd2b4
chore: APM桌面快捷方式补丁改用异步读取+从XDG拿路径
2026-06-30 03:27:36 +08:00
MarcusPy827
6921350878
fix: APM安装软件后无法自动创建快捷方式的问题
2026-06-30 03:13:28 +08:00
gfdgd-xi
ebede13b2c
修复tag列表无法正确加载的问题
...
Signed-off-by: gfdgd_xi <3025613752@qq.com >
2026-06-29 22:26:19 +08:00
gfdgd-xi
2cab0b2161
投稿器用自渲染对话框替换alert修复选择deb后无法编辑信息的问题
...
Signed-off-by: gfdgd_xi <3025613752@qq.com >
2026-06-27 18:45:22 +08:00
gfdgd-xi
8d642c43ef
拆分投稿器文件,增加可读性
...
Signed-off-by: gfdgd_xi <3025613752@qq.com >
2026-06-22 14:04:28 +08:00
sunnypai
399b59dae8
fix pkexec lookup for privilege escalation
2026-06-17 13:30:38 +08:00
sunnypai
601d3f51f4
add nixos support
2026-06-17 12:51:44 +08:00
shenmo7192
24d55d0997
refactor: 优化代码结构并新增多标签分类应用加载逻辑
...
1. 重构下载重试超时列表为多行格式提升可读性
2. 合并环境变量配置行简化代码
3. 新增多标签分类页面的应用加载能力,包括:
- 添加displayCategories和displayApps计算属性
- 实现loadTabCategories和loadTabApps加载子分类数据
- 抽离normalizeAppJson复用应用数据格式化逻辑
- 优化侧边栏分类切换的应用过滤逻辑
2026-05-30 20:41:59 +08:00
shenmo7192
f62665cd73
release: bump version to 5.1.1 and fix dns download issue
...
add --async-dns=false aria2 parameter to all download jobs to fix potential dns resolution failures during package download
2026-05-16 02:35:29 +08:00
shenmo7192
e16acbd0a5
refactor(installer): 调整下载重试超时配置和次数
...
更新了下载重试的超时时间列表和总重试次数,从原3次调整为10次,优化下载成功率
2026-05-13 21:13:25 +08:00
shenmo7192
8a5f8d154f
feat: 添加APM安装确认弹窗并重构APM检查流程
...
1. 新增全局状态控制APM安装弹窗显示
2. 新建ApmInstallConfirmModal弹窗组件
3. 将主进程的APM安装弹窗逻辑迁移到前端Vue组件
4. 更新package.json版本到5.1.0
5. 简化安装和升级流程中的APM检查逻辑
2026-05-12 21:54:47 +08:00
Elysia
6a9091b2ec
feat(build): add loong64
...
- Downgrad electron for the sake of loong64
- Add my project to CREDIT.md
Signed-off-by: Elysia <a.elysia@proton.me >
2026-04-19 09:37:21 +08:00
shenmo7192
42046caf2c
feat(update-center): 添加加载状态处理及UI优化
...
为更新中心添加加载状态管理,包括:
- 在打开和刷新操作时显示加载状态
- 禁用刷新按钮防止重复操作
- 添加加载中的动画效果和提示文本
- 优化加载时的UI显示
2026-04-16 14:00:33 +08:00
shenmo7192
e72553d570
feat(update-center): 添加详细日志记录以帮助调试更新中心服务
...
在更新中心服务的关键路径添加console.log和console.error输出
包括服务刷新、包解析、命令执行等环节的输入输出和中间状态
便于排查更新中心相关的问题
2026-04-16 13:48:08 +08:00
momen
309b9bc003
fix(update-center): load aptss updates reliably
2026-04-16 13:32:23 +08:00
momen
0b784af3d7
fix(sources): hide unavailable update and management entries
2026-04-16 13:04:54 +08:00
momen
e1ec526cb9
fix(update-center): handle missing apm and restore scrolling
2026-04-16 11:11:06 +08:00
shenmo7192
68dd6a0a26
perf(spark): 优化已安装应用检查逻辑
...
- 对于 Spark 应用,使用 dpkg-query 替代自定义脚本检查安装状态
- 在 list-installed 接口中支持传入包名列表进行批量检查,避免全量扫描
- 添加 aptss 可用性检查,避免在不可用时执行相关命令
- 移除冗余的 check-installed 二次验证步骤
2026-04-16 00:10:14 +08:00
momen
44587e299a
fix(lint): 清理未使用的安装器符号
2026-04-15 14:11:46 +08:00
momen
36f5d3831e
fix(update): 统一忽略更新配置到用户目录
2026-04-15 11:44:18 +08:00
momen
f044c6c3df
修复更新中心发送的下载项和普通下载故障覆盖的问题
2026-04-13 13:29:58 +08:00
shenmo7192
a280d44481
fix(下载队列): 为滚动容器添加overscroll-contain防止滚动溢出
...
refactor(安装管理器): 移除upgradeOnly逻辑并统一使用ssinstall命令
test(更新中心): 更新测试用例以匹配新的安装逻辑
2026-04-12 21:25:10 +08:00