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
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
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
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
xiyidaiwa
7ac1b2f0b6
refactor: 按代码审查清理标签优先显示策略相关代码
...
- 移除 AppDetailModal auto 决策分支的调试 console.log(生产不残留调试日志)
- 删除 storeConfig 中无读取方的 isPriorityConfigLoaded/hasPriorityConfigFile
死变量,并修正 catch 分支借 resetPriorityConfig 误标 loaded 的语义矛盾
- getHybridDefaultOrigin 对合并应用子版匹配时,子版 category 为空则
回退顶层 app.category,避免分类规则漏匹配
- 补充 forceViewingOrigin 强制来源不随设置策略实时切换的注释(设计行为)
2026-08-10 08:11:13 +08:00
xiyidaiwa
b3eb1d01d9
fix: 标签优先显示策略 auto 模式按服务端优先级配置展示
...
- auto 模式用合并应用自身(含 sparkApp/apmApp)匹配 priority-config.json,
不再仅取单一子版,避免漏匹配。
- openDetail 区分「已安装页显式来源强制」与「其他页面按策略」;
非强制分支清除 forceViewingOrigin 粘性标志,避免跨入口状态泄漏。
- AppDetailModal 按 TagPriorityStrategy 响应式重算默认来源;
手动切标签仅本次会话预览,不持久。
- storeConfig.loadPriorityConfig 改用 axios(与渲染进程一致),
修复 Electron 下全局 fetch 失败导致配置为空、auto 全部回退 APM 的问题。
- 首页推荐列表 parseAppList 从 jsonUrl 提取分类,避免 category 误为 unknown。
2026-08-07 18:21:39 +08:00
shenmo7192
24d55d0997
refactor: 优化代码结构并新增多标签分类应用加载逻辑
...
1. 重构下载重试超时列表为多行格式提升可读性
2. 合并环境变量配置行简化代码
3. 新增多标签分类页面的应用加载能力,包括:
- 添加displayCategories和displayApps计算属性
- 实现loadTabCategories和loadTabApps加载子分类数据
- 抽离normalizeAppJson复用应用数据格式化逻辑
- 优化侧边栏分类切换的应用过滤逻辑
2026-05-30 20:41:59 +08:00
momen
439af8c26f
feat(account): polish reviews favorites and account UI
2026-05-29 21:34:42 +08:00
momen
c24c88458c
fix(account): default backend api base url
2026-05-18 22:21:18 +08:00
momen
881aceb78c
feat(account): add client account api foundation
2026-05-18 22:02:39 +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
momen
0b17ada45a
feat(update-center): 实现集中式软件更新中心功能
...
新增更新中心模块,支持管理 APM 和传统 deb 软件更新任务
- 添加更新任务队列管理、状态跟踪和日志记录功能
- 实现更新项忽略配置持久化存储
- 新增更新确认对话框和迁移提示
- 优化主窗口关闭时的任务保护机制
- 添加单元测试覆盖核心逻辑
2026-04-09 08:19:51 +08:00
shenmo7192
4e9fc30616
feat(storeConfig): 添加配置文件存在标记并调整默认优先级规则
...
添加 hasPriorityConfigFile 标记以区分服务器是否存在配置文件
当没有配置文件时默认优先 Spark,有配置文件但规则为空时默认优先 APM
移除未使用的 matchesRule 方法并添加 isConfigEmpty 方法
2026-04-05 09:55:47 +08:00
shenmo7192
d74e05a327
feat(store): 实现混合仓库优先级配置功能
...
添加优先级配置文件支持,根据配置决定默认展示的仓库版本
新增优先级规则匹配逻辑,支持包名、分类和标签匹配
修改应用详情和合并应用的默认来源判断逻辑
2026-04-05 09:52:06 +08:00
vmomenv
1fb81c0409
feat: display cross-version installation status in app detail modal
...
- Replaced single `currentAppIsInstalled` boolean with `currentAppSparkInstalled` and `currentAppApmInstalled` in global store.
- Updated `checkAppInstalled` logic in `App.vue` to fetch the installation status for both Spark and APM versions via `ipcRenderer`.
- Passed both flags to `AppDetailModal.vue` as props.
- Enhanced `AppDetailModal.vue` to compute the "install" button text dynamically: if viewing Spark and APM is installed, it displays `(已安装apm版)`; if viewing APM and Spark is installed, it displays `(已安装spark版)`. The button is also disabled in these scenarios to prevent duplicate cross-version installations.
2026-03-12 08:19:37 +00:00
vmomenv
70cab0182d
feat: 仅保留混合模式并根据架构动态构建请求路径
...
- 删除 AppSidebar.vue 中的 StoreModeSwitcher 引入并删除该组件。
- 强制设置当前商店模式为 'hybrid'。
- 修复了因为 `window.apm_store.arch` 包含 `-store` 或 `-apm` 后缀导致路径替换异常的问题,现在会通过动态添加后缀来构建资源请求路径,以兼容 Spark Store 和 APM Store 服务器不同的资源组织结构。
2026-03-12 01:39:00 +00:00
momen
5bc68f5a9a
update:修复github工作流问题
2026-03-11 09:38:28 +08:00
momen
d24a5225de
update:在商店混合模式下,同包名的软件合并在同一个详情页面并加入切换开关
2026-03-11 09:18:59 +08:00
momen
edd9368c56
update:添加apm与普通商店双支持
2026-03-11 08:36:24 +08:00
Elysia
a3f18bb593
feat(app): add download count display
2026-02-14 23:22:41 +08:00
Elysia
5ac9376200
feat: support download statistics
...
close #15
2026-02-14 23:11:43 +08:00
Elysia
6622e70033
refactor: improve code formatting and consistency across components
...
- Updated button and span elements in ThemeToggle.vue and TopActions.vue for better readability.
- Enhanced UninstallConfirmModal.vue and UpdateAppsModal.vue with consistent indentation and spacing.
- Refactored downloadStatus.ts and storeConfig.ts for improved code clarity.
- Standardized string quotes and spacing in typedefinition.ts and processInstall.ts.
- Ensured consistent use of arrow functions and improved variable declarations throughout the codebase.
2026-02-12 18:32:41 +08:00
Elysia
3221cb6d5e
refactor: standardize app property names and improve TypeScript definitions
...
- Updated property names in AppCard.vue, AppDetailModal.vue, AppGrid.vue, and other components to use camelCase for consistency.
- Enhanced TypeScript definitions for props and emits in various components to improve type safety.
- Refactored download status handling in processInstall.ts to align with updated App interface.
- Improved error handling and type definitions in DownloadDetail.vue and related components.
- Added optional properties and refined existing interfaces in typedefinition.ts for better clarity and usability.
2026-01-31 17:16:02 +08:00
Elysia
5b09dfb3d9
feat(preload): expose architecture detection to renderer process
...
add multiarch support
2026-01-31 10:26:52 +08:00
Elysia
ac0dc225bc
feat(install): add app uninstall functionality
2026-01-26 00:57:15 +08:00
Elysia
50fb1a0065
feat(install): added basis install process
...
Now it is able to install apps from the render process and properly display logs on the app detial page.
2026-01-25 22:30:39 +08:00