Compare commits

..

773 Commits

Author SHA1 Message Date
shenmo7192 8850cfd4a3 update dtk-build-release-tag-20220425.yml 2022-12-25 07:45:19 +00:00
shenmo7192 bec8a14baf !177 将默认的README改为英文
Merge pull request !177 from shenmo/dev
2022-12-25 04:46:51 +00:00
shenmo7192 1b9c925183 把默认的README改成英文 2022-12-25 12:43:51 +08:00
shenmo7192 09221bc2e9 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-25 03:21:04 +00:00
uniartisan2018 98da0c22fc enhance: 规范代码行为 2022-12-24 10:29:55 +08:00
uniartisan2018 cadbb351fb enhance: 限制循环变量的作用范围 2022-12-24 10:04:40 +08:00
shenmo7192 2de237ce83 fix: aptss ssupdate出错时不再锁死
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-24 10:04:40 +08:00
shenmo7192 511fbaa0b0 update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-23 13:55:58 +00:00
shenmo7192 a6d85b6ade update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-23 13:55:40 +00:00
uniartisan2018 5889ac3045 enhance: 下载列表新增 wayland 窗口标题 2022-12-23 18:42:19 +08:00
uniartisan2018 c1ba14bbd0 fix: 安装依赖缺失 2022-12-23 18:28:38 +08:00
uniartisan2018 7bdccc7783 Merge branch 'dev' of gitee.com:deepin-community-store/spark-store into dev 2022-12-23 18:12:36 +08:00
momen 3a54cba3e5 !176 让浏览器获取中文页面
* !1 enhanced: 判断系统语言,中文则修改请求头,请求中文网页
2022-12-23 10:12:18 +00:00
uniartisan2018 79463246fb fix: 修复编译依赖 2022-12-23 18:11:44 +08:00
uniartisan2018 cc8ff5eff2 enhance: 消除 c11 标准警告 2022-12-23 16:46:32 +08:00
uniartisan2018 613327b2cc fix: 修复非deepin的wayland环境下ui显示 2022-12-23 16:30:36 +08:00
uniartisan2018 8b31db843c fix: Wayland 在某些环境下错误识别为 dde 2022-12-23 16:30:36 +08:00
uniartisan2018 fd4fdbe970 format: 代码格式化 2022-12-23 12:13:48 +08:00
uniartisan2018 89a3ab0b4c feat: support wayland 2022-12-22 21:50:27 +08:00
uniartisan2018 0179c2f04f feat: wayland 2022-12-22 00:49:11 +08:00
shenmo7192 8918e63484 !171 4.1.1-real
Merge pull request !171 from shenmo/dev
2022-12-21 16:18:05 +00:00
shenmo7192 6d1fb80f0f update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-21 16:17:32 +00:00
shenmo7192 4add78c6d7 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-21 16:17:19 +00:00
zty199 89c32013bf fix: 修复应用更新失败问题
zenity 处理多选框时,返回结果取值错误导致,获取值实际为已安装版本号,而不是包名

Log: 修改 zenity 参数为 --print-column=2 获取包名
2022-12-21 23:57:06 +08:00
zty199 8f7ce54584 fix: 修复检查到应用更新没有系统通知的问题
错误地把 sudo 改为了 su(su $USER -c xxxxxx)

Log: 还原为 sudo -u $USER xxxxxx
2022-12-21 05:59:10 +00:00
shenmo7192 65f3114078 !168 4.1.0
Merge pull request !168 from shenmo/dev
2022-12-21 05:31:36 +00:00
shenmo7192 00386c7aeb 修复文案 2022-12-21 13:22:41 +08:00
zty199 3a89394838 fix: 修复可更新应用列表为空时仍然弹出选择应用更新对话框的问题
获取可更新应用列表后直接赋值给 zenity 处理,未对列表为空进行处理

Log: 获取可更新应用列表后,若列表为空则退出;不为空再交给 zenity 处理
2022-12-21 12:09:59 +08:00
shenmo7192 a3f3a9153a 仍然有点小问题的更新检测 2022-12-21 09:24:59 +08:00
shenmo7192 cc582da96b !167 4.0.1 优化Ubuntu
Merge pull request !167 from shenmo/dev
2022-12-20 02:18:57 +00:00
shenmo7192 d5877ffe00 ubuntu 优化显示 2022-12-20 10:17:53 +08:00
shenmo7192 58f590560e !166 4.0 代号:Flamescion
Merge pull request !166 from shenmo/dev
2022-12-19 11:04:38 +00:00
shenmo7192 f636b82f02 4.0Flamescion 2022-12-19 18:54:36 +08:00
shenmo7192 877c3aafd1 正式版 2022-12-19 18:52:37 +08:00
zty199 65c26f035b fix: ISSUE #I66334 安装结束后仍显示 Installing
DownloadItem::install 中 finished 信号发送时间错误:安装操作被放入 QtConcurrent::run 中异步执行,发送信号在主线程中,安装未结束就发送了信号

Log: 调整信号发送位置至子线程中;AppIntoPage::isDownloading 中,若安装任务正在执行,需要 return,否则会出现安装后卸载再重新安装时,直接显示卸载按钮的问题
2022-12-19 17:38:41 +08:00
zty199 ba331cb3fb fix: ISSUE #I66N4Y 关闭动画播放时快速按Alt+F4可反复关闭动画而关不掉商店
动画执行标志位仅在动画结束后被置为不再执行,需要提前

Log: 修改 BaseWidgetOpacity::closeEvent,动画开始执行就修改标志位
2022-12-19 10:55:03 +08:00
zty199 27c95991c5 fix: 修复窗口关闭时崩溃问题
DownloadListWidget 析构时未对 downloadController 指针判空,直接调用 downloadController->stopDownload() 空指针导致崩溃

Log: DownloadListWidget 析构时对 downloadController 指针添加判断
2022-12-19 10:49:53 +08:00
shenmo7192 ffd31445b9 !165 4.0.0.3
Merge pull request !165 from shenmo/Framescion
2022-12-19 02:11:26 +00:00
zinface 02fd887116 cmake-patch: 更新补丁用于支持 BaseWidgetOpacity 基础类的构建内容
此补丁包含以下内容:
 .gitignore                           |   34 ++++
 CMakeLists.txt                       |   93 ++++++++++
 Makefile                             |   60 ++++++
 assets/spark.png                     |  Bin
 cmake/DebPackageConfig.cmake         |  327 ++++++++++++++++++++++++++++++++++
 cmake/SparkAppimageConfig.cmake      |  133 ++++++++++++++
 cmake/SparkBuildGraphviz.cmake       |    8 +
 cmake/SparkDesktopMacros.cmake       |   35 ++++
 cmake/SparkEnvConfig.cmake           |    8 +
 cmake/SparkFindDtkConfig.cmake       |   11 +
 cmake/SparkFindLibraries.cmake       |    7 +
 cmake/SparkFindQt5Config.cmake       |  154 ++++++++++++++++
 cmake/SparkFindQt6Config.cmake       |   24 ++
 cmake/SparkInstallMacrosConfig.cmake |  132 ++++++++++++++
 cmake/SparkMacrosConfig.cmake        |  129 +++++++++++++
 cmake/SparkMacrosExtendConfig.cmake  |  197 ++++++++++++++++++++
 cmake/SparkTranslatorConfig.cmake    |   27 +++
 cmake/linuxdeployqt-help             |   48 +++++
 cmake/package-deb.descript           |   45 +++++
 cmake/spark-appimage.desktop.in      |    9 +
 cmake/spark-desktop.desktop.in       |   11 +
 Makefile                             |   16 ++
 cmake/DebPackageConfig.cmake         |    8 -
 DOCS/spark-cmake-build-system.md     |  301 +++++++++++++++++++++++++++++++
 CMakeLists.txt                       |    1
 cmake/SparkFindQt5Config.cmake       |    4
 CMakeLists.txt                       |    4
 27 files changed, 1818 insertions(+), 8 deletions(-)
2022-12-19 03:00:25 +08:00
zinface fd3df91017 docs: 添加有关 src 下内容的改进,与"描述主体结构预览"文档的编写规范说明 2022-12-19 02:49:36 +08:00
zinface c9d0c8b751 repo: 添加 BaseWidgetOpacity 基础类来实现继承者的淡出动画来代替主窗口的实现
BaseWidgetOpacity 是一个提供了淡出/淡入动画的基础类

1. closeEvent 窗口关闭时进行淡出动画
    此前在 MainWindow 中实现的淡出动画将由 BaseWidgetOpacity 来实现。

    此前 MainWindow 原有的 DBlurEffectWidget 父类将移交至 BaseWidgetOpacity 继承。

注意:
    如果 MainWindow 在未来重写 closeEvent 事件时将可能丢失 BaseWidgetOpacity 中的淡出效果
2022-12-19 02:47:38 +08:00
uiYzzi adf9032897 fix:商店点击刷新线路之后未默认选中首位 2022-12-18 13:46:55 +08:00
uiYzzi 2c1679d0af fix:商店点击刷新线路之后未默认选中首位 2022-12-18 13:03:54 +08:00
shenmo7192 95f9806c1c update .workflow/dtk-build-commit-20220425.yml.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-17 01:24:39 +00:00
uiYzzi 252d2f491d 更新链接 2022-12-16 21:28:33 +08:00
uiYzzi e2f6d97f94 改为使用全新Web接口 2022-12-16 14:01:12 +08:00
uiYzzi 48fd79e9be fix:商店更换线路的选项无效,点击刷新线路之后未默认选中首位 2022-12-15 22:31:00 +08:00
zinface 07eb9493cb cmake-patch: 更新补丁用于支持 Qt5 Svg 依赖的构建内容
此补丁包含以下内容:
 .gitignore                           |   34 ++++
 CMakeLists.txt                       |   93 ++++++++++
 Makefile                             |   60 ++++++
 assets/spark.png                     |  Bin
 cmake/DebPackageConfig.cmake         |  327 ++++++++++++++++++++++++++++++++++
 cmake/SparkAppimageConfig.cmake      |  133 ++++++++++++++
 cmake/SparkBuildGraphviz.cmake       |    8 +
 cmake/SparkDesktopMacros.cmake       |   35 ++++
 cmake/SparkEnvConfig.cmake           |    8 +
 cmake/SparkFindDtkConfig.cmake       |   11 +
 cmake/SparkFindLibraries.cmake       |    7 +
 cmake/SparkFindQt5Config.cmake       |  154 ++++++++++++++++
 cmake/SparkFindQt6Config.cmake       |   24 ++
 cmake/SparkInstallMacrosConfig.cmake |  132 ++++++++++++++
 cmake/SparkMacrosConfig.cmake        |  129 +++++++++++++
 cmake/SparkMacrosExtendConfig.cmake  |  197 ++++++++++++++++++++
 cmake/SparkTranslatorConfig.cmake    |   27 +++
 cmake/linuxdeployqt-help             |   48 +++++
 cmake/package-deb.descript           |   45 +++++
 cmake/spark-appimage.desktop.in      |    9 +
 cmake/spark-desktop.desktop.in       |   11 +
 Makefile                             |   16 ++
 cmake/DebPackageConfig.cmake         |    8 -
 DOCS/spark-cmake-build-system.md     |  301 +++++++++++++++++++++++++++++++
 CMakeLists.txt                       |    1
 cmake/SparkFindQt5Config.cmake       |    4
 26 files changed, 1815 insertions(+), 7 deletions(-)
2022-12-15 20:10:34 +08:00
shenmo7192 217b299a67 update tool/ssinstall.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-15 12:04:37 +00:00
zinface 9738c41bb9 patch: 为星火商店提交一个基础的 cmake 构建补丁
此补丁包含以下内容:
 .gitignore                           |   34 ++++
 CMakeLists.txt                       |   93 ++++++++++
 Makefile                             |   60 ++++++
 assets/spark.png                     |  Bin
 cmake/DebPackageConfig.cmake         |  327 ++++++++++++++++++++++++++++++++++
 cmake/SparkAppimageConfig.cmake      |  133 ++++++++++++++
 cmake/SparkBuildGraphviz.cmake       |    8 +
 cmake/SparkDesktopMacros.cmake       |   35 ++++
 cmake/SparkEnvConfig.cmake           |    8 +
 cmake/SparkFindDtkConfig.cmake       |   11 +
 cmake/SparkFindLibraries.cmake       |    7 +
 cmake/SparkFindQt5Config.cmake       |  154 ++++++++++++++++
 cmake/SparkFindQt6Config.cmake       |   24 ++
 cmake/SparkInstallMacrosConfig.cmake |  132 ++++++++++++++
 cmake/SparkMacrosConfig.cmake        |  129 +++++++++++++
 cmake/SparkMacrosExtendConfig.cmake  |  197 ++++++++++++++++++++
 cmake/SparkTranslatorConfig.cmake    |   27 +++
 cmake/linuxdeployqt-help             |   48 +++++
 cmake/package-deb.descript           |   45 +++++
 cmake/spark-appimage.desktop.in      |    9 +
 cmake/spark-desktop.desktop.in       |   11 +
 Makefile                             |   16 ++
 cmake/DebPackageConfig.cmake         |    8 -
 DOCS/spark-cmake-build-system.md     |  301 +++++++++++++++++++++++++++++++
 24 files changed, 1812 insertions(+), 5 deletions(-)
2022-12-15 15:35:19 +08:00
uiYzzi e17c50d396 fix:安装结束后仍显示Installing 2022-12-15 14:55:46 +08:00
uiYzzi 795c3308d3 修改翻译 2022-12-15 14:47:56 +08:00
shenmo7192 f026844dba 更新部分翻译 2022-12-14 08:56:25 +08:00
shenmo7192 1a05ad05aa update dtk-build-release-tag-20220425.yml 2022-12-13 14:21:46 +00:00
shenmo7192 9c91d0a5a0 400t2 公测准备 2022-12-13 21:47:09 +08:00
uiYzzi a27c8b9ace fix:下载取消后下载进度仍然在widget中显示 2022-12-13 21:37:40 +08:00
uiYzzi 68d91f71ba 应用详情页添加版本号 2022-12-13 21:30:30 +08:00
uiYzzi fca2086d9f 修复取消下载导致闪退 2022-12-13 21:17:51 +08:00
uiYzzi 83ee212484 重写下载按钮逻辑 2022-12-13 20:32:39 +08:00
uiYzzi 922cb6a34f fix:应用商店退出时,aria2c仍然在运行 2022-12-13 19:37:46 +08:00
uiYzzi eb00159691 fix:Appinfo界面信息无法复制 2022-12-13 19:25:52 +08:00
uiYzzi 3b18fc94b5 将下载按钮更新为自绘按钮 2022-12-13 19:00:36 +08:00
shenmo7192 375243503f Merge remote-tracking branch 'refs/remotes/origin/dev' into dev 2022-12-13 18:28:48 +08:00
shenmo7192 9b31040efd ssinstall支持相对路径 2022-12-13 18:28:24 +08:00
shenmo7192 ac5d86db92 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-13 09:53:50 +00:00
uiYzzi 86f270eca9 修复进度条过长 2022-12-13 17:23:34 +08:00
uiYzzi f5bb95da12 修复左侧边栏样式错误 2022-12-13 17:18:10 +08:00
shenmo7192 eadc8dd875 修改: translations/spark-store_zh_CN.ts 2022-12-13 17:13:25 +08:00
shenmo7192 91b628e7a6 installation complete 翻译
现在使用AppName来提示
2022-12-13 17:12:41 +08:00
uiYzzi 6bd8fc7a1e 修改限制单例运行,再次启动时拉起现有实例 2022-12-13 14:54:59 +08:00
uiYzzi c2e665ecb6 修复英文状态下左侧边栏文字不对齐 2022-12-13 14:52:07 +08:00
uiYzzi 50cf537e1d 安装完成通知加上应用名 2022-12-13 14:40:55 +08:00
uniartisan2018 0f0a5795af Merge remote-tracking branch 'upstream/dev' into dev 2022-12-13 12:53:15 +08:00
uniartisan2018 09f96d596a fix: 超时时间错误 2022-12-13 12:52:45 +08:00
uiYzzi a2cb7ef112 需求:在安装结束后将安装状态发送系统通知 2022-12-13 12:43:58 +08:00
uiYzzi 2ed2512d6c fix:设置界面点击链接仍无效,邮箱文案附近出现未被解析的html标签 2022-12-13 12:40:20 +08:00
uiYzzi d720d0670d fix:下载的进度条仍然过长 2022-12-13 12:36:28 +08:00
uiYzzi da2c019da0 fix:点击取消下载 仍然会有系统通知提示下载完毕 2022-12-13 12:34:48 +08:00
shenmo7192 ce8c058265 更新翻译 2022-12-13 10:23:37 +08:00
uiYzzi 7f3eadf3a7 更新文案 2022-12-12 21:47:52 +08:00
uiYzzi 44ea6755f9 fix:4.0 bug 在设置界面意义不明的文案 2022-12-12 21:37:29 +08:00
uiYzzi 9df0e3a3b3 去除安装按钮的子菜单 2022-12-12 21:33:41 +08:00
uiYzzi 13550ebbec 修复由于翻译不正确引起的关于页面bug 2022-12-12 21:30:40 +08:00
uiYzzi 077034b1d6 fix:4.0 开始自动安装时安装按钮仍然存在 2022-12-12 21:13:28 +08:00
uiYzzi ac21f67030 fix:4.0 安装结束后的Info按钮的中文翻译应当为:详情,而不是信息 2022-12-12 21:10:55 +08:00
uniartisan2018 292d4aa5c9 fix: 清除网页缓存未生效 2022-12-12 17:36:12 +08:00
uiYzzi fb4d78ce1d 修复下载量统计超时 2022-12-12 16:23:41 +08:00
shenmo7192 ad25606ef9 新增文案提示用户发生了什么 2022-12-12 16:20:01 +08:00
uiYzzi 6ace772a09 修改发送邮件的等待时间 2022-12-12 16:08:30 +08:00
uiYzzi bfc68fbf6f 修复下载按钮状态未重置 2022-12-12 15:49:41 +08:00
shenmo7192 e2c9f1100d 修改: debian/spark-store.postinst 2022-12-12 15:43:23 +08:00
shenmo7192 77c2e2ebc8 changelog-400t1 2022-12-12 15:30:03 +08:00
uiYzzi eb06f33269 修复 2022-12-12 15:28:12 +08:00
uiYzzi e2c8eb79a0 添加下载完成后自动安装 2022-12-12 15:26:15 +08:00
uiYzzi c825e4b39c 修改文案 2022-12-12 15:23:48 +08:00
shenmo7192 79d12f2409 安全的免密码安装 2022-12-12 15:11:48 +08:00
uiYzzi 382b2de5ca 更新翻译 2022-12-12 14:36:33 +08:00
uiYzzi 0fea4c13ef 添加多个通知,修复下载进度条过长问题 2022-12-12 14:34:29 +08:00
uiYzzi ff84576aab 更改文案 2022-12-12 12:19:38 +08:00
uiYzzi 2b2ebc111e 更新翻译 2022-12-12 12:15:55 +08:00
shenmo7192 20fc6f5a77 update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-12 04:00:46 +00:00
uiYzzi 83bfb8dfd5 解决依赖没有删除完全导致构建失败问题 2022-12-12 11:52:46 +08:00
uiYzzi db5b85db7d 去除无用依赖 2022-12-11 20:53:35 +08:00
uiYzzi 271a7e33f4 添加chatGPT帮忙写的通知推送 2022-12-11 20:40:01 +08:00
uiYzzi 478db77d36 点击侧边栏按钮时清空搜索框 2022-12-11 19:28:25 +08:00
uiYzzi a787745752 设置中添加QQ群号,链接改为可点击,搜索后关键词不清空 2022-12-11 19:21:45 +08:00
uiYzzi 758b752d6e 修复重新安装按钮文案错误 2022-12-11 18:54:00 +08:00
uiYzzi 60ed4c5aff 添加重新安装按钮 2022-12-11 18:41:19 +08:00
zinface 2d3366990a feat: 增加主程序退出动画 2022-12-11 18:25:30 +08:00
uiYzzi b63ae13a3e fix shebang 2022-12-11 18:13:03 +08:00
uiYzzi 6ff58adffa 左侧边栏加入更新按钮 2022-12-11 18:10:36 +08:00
uiYzzi f948c8905a 添加浏览器GPU支持,编译时间获取,关于窗口修改,启动时窗口居中显示 2022-12-11 17:55:27 +08:00
uiYzzi a31f724b65 修复翻译异常与应用详细页文字过长时显示不完整的问题 2022-12-11 17:47:31 +08:00
uiYzzi 8c9c2fcf11 修复非DDE环境下透明度过高的问题 2022-12-11 17:31:10 +08:00
shenmo7192 e251616129 update .workflow/dtk-build-commit-20220425.yml.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-11 09:27:16 +00:00
shenmo7192 6655e14b6c 构建同步到master
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-11 09:26:37 +00:00
柚子 b3aa2036f8 删除文件 Makefile 2022-12-11 09:22:45 +00:00
uiYzzi 8ad1156e3c 修复返回键出现错误问题 2022-12-11 12:02:26 +08:00
uniartisan2018 b5495fa66e !4 make: 添加快速构建脚本,对 VSCode 用户友好
Merge pull request !4 from zinface/makefile-script
2022-12-11 02:11:09 +00:00
uiYzzi 333a1168d4 添加应用详情页下载量显示 2022-12-11 02:05:34 +08:00
uiYzzi 8a54dd92a3 添加dbus功能 2022-12-11 01:19:59 +08:00
uiYzzi ae1c50893d 菜单中添加投稿器,更新等 2022-12-11 01:06:52 +08:00
uiYzzi dd0605d0ba 应用详情页添加分享和请求更新按钮,设置页面添加更新客户端和清理缓存、读取缓存大小功能 2022-12-11 01:03:13 +08:00
uiYzzi 0817901a59 添加下载列表为空时的提示 2022-12-11 00:29:51 +08:00
uiYzzi e171904a34 抽象出控件动画类 2022-12-11 00:17:09 +08:00
zinface abd0e47c69 make: 添加快速构建脚本,对 VSCode 用户友好
此部分对 VSCode 用户友好,并提供一些可扩展的操作
1. make 时将创建 build 目录并使用 qmake 构建(核心数为机器最大核心数)
2. make run 时将运行此程序(程序构建位置将在: build/src/spark-store)
3. make package 用来提供产出包功能?
2022-12-10 23:16:22 +08:00
uiYzzi 1c24079406 添加按下下载按钮时标题栏下载列表按钮抖动 2022-12-10 19:18:23 +08:00
uniartisan2018 67c0cbf27b fix: 修复一些bug 2022-12-10 13:22:54 +08:00
uiYzzi 5cc34e7e3d 修复页面索引错位bug 2022-12-09 22:19:20 +08:00
uiYzzi 98cf333386 添加服务器url配置功能 2022-12-09 21:27:01 +08:00
uiYzzi 562b582f72 添加设置页面 2022-12-09 19:07:22 +08:00
uniartisan2018 73917eeeb1 fix: 打包依赖增加g++ 2022-12-09 15:29:17 +08:00
zinface c5913b4198 !1 feat: 增加主程序进入动画
* !1 update src/mainwindow-dtk.cpp.
* update src/mainwindow-dtk.cpp.
* feat: 增加主程序进入动画
2022-12-09 07:26:55 +00:00
uiYzzi c0e9815d9d 修复深色模式下顶栏的按钮未更新的bug 2022-12-09 15:15:48 +08:00
uiYzzi 050fe964dd 深色主題寫好啦! 2022-12-09 15:13:41 +08:00
uiYzzi 6981a4f476 更改应用详情页UI细节 2022-12-09 14:38:08 +08:00
uiYzzi e72d123a40 更新中文翻译 2022-12-09 13:49:28 +08:00
uniartisan2018 a10390a6e3 update changelog 2022-12-09 12:01:26 +08:00
uiYzzi 3fecd41c4f 下载完成后自动更改按钮文案 2022-12-09 11:59:19 +08:00
uniartisan2018 f0604afcfc 同步3.5版本的更改 2022-12-09 11:59:04 +08:00
uiYzzi 2ec4b1f4d4 4.0 2022-12-09 11:16:11 +08:00
uniartisan2018 fbffe12501 feat:搜索从网页加载 2022-12-08 22:44:34 +08:00
uniartisan2018 df7b49dbe2 fix: aria2指定dns,指定最大并发下载数 2022-12-08 17:51:18 +08:00
uniartisan2018 9d93966124 Merge remote-tracking branch 'upstream/dev' into dev 2022-12-08 17:46:20 +08:00
shenmo7192 977b2ebdc9 update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-12-04 07:09:26 +00:00
shenmo7192 28ed452bb0 * feat: aptss不再尝试安装apt-fast,转而自带
* chore:  删除password-check模块
2022-12-04 15:07:44 +08:00
uniartisan2018 512d86feac update: 更新aria2下载参数 2022-11-27 12:21:15 +08:00
uniartisan2018 8e1e0cea7a fix: minor updates 2022-11-26 19:33:20 +08:00
uniartisan2018 d2214114fb Merge remote-tracking branch 'upstream/dev' into dev 2022-11-26 19:27:41 +08:00
shenmo7192 c90232022e update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-26 09:27:43 +00:00
shenmo7192 84a1554b4b !149 333 feat feat: 首页链接调用浏览器打开
Merge pull request !149 from shenmo/master
2022-11-26 09:27:04 +00:00
shenmo7192 71dbf9b958 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-26 09:22:56 +00:00
shenmo7192 9d12086f09 !148 feat: 首页链接调用浏览器打开
Merge pull request !148 from zty199/auto-7392693-master-b04b4cba
2022-11-26 09:20:37 +00:00
zty199 54a55e15a9 feat: 首页链接调用浏览器打开
首页链接调用浏览器打开

Log: 使用自定义 WebEngineView 和 WebEnginePage 替代 QWebEngineView,重写 createWindow 方法,当页面存在新建窗口或标签页动作时调用浏览器打开网址;修改 Widget UI 布局,在 page1 添加 QVBoxLayout,保证 WebEngineView 自动撑满布局,去除 webFoot 填充控件;更新翻译文件,添加“请勿频繁搜索”翻译文案,去除残留翻译
2022-11-26 17:14:48 +08:00
shenmo7192 5385e2d1b1 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-26 08:50:41 +00:00
uniartisan2018 1e468ba774 fix: 邮件超时 2022-11-26 14:30:00 +08:00
shenmo7192 25efce0017 !147 dev--->master:流水线准备优化,先行同步
Merge pull request !147 from shenmo/dev
2022-11-26 02:07:44 +00:00
shenmo7192 707a2b5e4c !146 修正一些问题
Merge pull request !146 from Pluto/dev
2022-11-26 02:06:19 +00:00
uniartisan2018 b9121c13ab feat: 改进搜索动画 2022-11-26 02:20:17 +08:00
uniartisan2018 9c80179493 feat: 版本号新增编译时间 2022-11-25 22:29:23 +08:00
uniartisan2018 2a89135d1a fix: 指针未释放 2022-11-25 22:05:29 +08:00
zinface b91e0142f4 bigimage: 对应用信息下的截图预览优化(#I62F4X) 2022-11-22 11:58:09 +08:00
uniartisan2018 55897e3cb9 update: 更新介绍 2022-11-20 20:23:45 +08:00
uniartisan2018 f17fcdfe85 feat: 跳转到反馈器 2022-11-20 20:00:14 +08:00
uniartisan2018 9046a3a965 fix: 只允许一个更新进程 2022-11-18 01:11:20 +08:00
shenmo7192 1e72fcb7f2 !145 文案:修复换行
Merge pull request !145 from shenmo/dev
2022-11-17 14:48:33 +00:00
shenmo7192 9007bdf3d3 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-17 14:48:13 +00:00
shenmo7192 afd926ae4a update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-17 14:47:46 +00:00
shenmo7192 4949d67852 !144 文案:添加RC入口
Merge pull request !144 from shenmo/dev
2022-11-17 14:46:44 +00:00
shenmo7192 5f5d71fbd0 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-17 14:46:16 +00:00
shenmo7192 9fd8f64195 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-17 14:45:25 +00:00
shenmo7192 c32ffb7cd2 update .workflow/dtk-build-release-tag-20220425.yml.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-10 11:34:28 +00:00
shenmo7192 af9217b1dc !143 333t4
Merge pull request !143 from shenmo/dev
2022-11-10 11:30:47 +00:00
shenmo7192 93e218dd53 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-10 11:28:20 +00:00
shenmo7192 4de32fa8a6 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-10 11:27:19 +00:00
shenmo7192 2d59a61796 修改: debian/changelog
修改:     debian/spark-store.postinst
	修改:     src/main.cpp
2022-11-09 20:06:50 +08:00
shenmo7192 7abdd90215 文案修改 update tool/update-upgrade/ss-do-upgrade.sh.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-11-08 13:45:24 +00:00
shenmo7192 cbd594e217 !142 333t3
Merge pull request !142 from shenmo/dev
2022-10-28 13:45:08 +00:00
shenmo7192 42b6a20c97 fix 菜单中进入更新列表失效 2022-10-28 21:43:57 +08:00
shenmo7192 110adc995d 文案修改 2022-10-28 10:20:23 +08:00
shenmo7192 cd6d0ac133 cmmit 2022-10-28 10:19:17 +08:00
shenmo7192 568e73de07 文案修改 2022-10-28 09:58:17 +08:00
shenmo7192 62c8841c50 aptss的download也使用ss-apt-fast 2022-10-28 09:55:48 +08:00
shenmo7192 6fd611919b Now use ss-apt-fast as aptss backend 2022-10-28 09:08:21 +08:00
shenmo7192 77a84785de !141 333t2
Merge pull request !141 from shenmo/dev
2022-10-27 16:58:38 +00:00
shenmo7192 9969f4f2fc just in case有些用户没有找到QQ群.... 2022-10-28 00:57:02 +08:00
shenmo7192 833a8ec14b version 2022-10-28 00:52:25 +08:00
shenmo7192 dd679f3f26 333t2推仓库 2022-10-28 00:50:31 +08:00
shenmo7192 5411a832dc fix:更新和检查更新出错时不报错 2022-10-28 00:48:53 +08:00
shenmo7192 0aeadb5526 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-27 13:14:10 +00:00
shenmo7192 91fd97b878 修改文案:检查更新 2022-10-27 10:37:51 +08:00
shenmo7192 f2cf344f62 polkit文件 2022-10-26 16:01:55 +08:00
shenmo7192 8d84e433a6 zenity 不再以root启动 2022-10-26 15:43:43 +08:00
shenmo7192 a6e9dac2f9 没啥用,又加回来了 2022-10-24 09:22:07 +08:00
shenmo7192 495ef3292e 更新提示超时时间增加到15 2022-10-24 09:15:04 +08:00
shenmo7192 5900b3cdf3 feat:安装时不再需要网络
modify: 为了CI的构建速度,在构建依赖中不再依赖语言工具
2022-10-24 09:12:37 +08:00
shenmo7192 e644214263 !140 3304 策略调整 选中的应用作为整体更新,降低服务器压力
Merge pull request !140 from shenmo/dev
2022-10-23 15:52:04 +00:00
shenmo7192 2b76f5e202 3304 2022-10-23 23:50:16 +08:00
shenmo7192 6fe06667eb !139 3303-real
Merge pull request !139 from shenmo/dev
2022-10-23 06:06:22 +00:00
shenmo7192 f61e3a6ede 引号故障 2022-10-23 14:04:58 +08:00
shenmo7192 bddbbcc2e8 !138 3303 暂时关闭实时输出,未找到禁止取消或关闭的方法
Merge pull request !138 from shenmo/dev
2022-10-23 05:58:42 +00:00
shenmo7192 8310a59df8 微调样式 2022-10-23 13:58:32 +08:00
shenmo7192 05cfdbb318 支持分应用显示正在更新 2022-10-23 13:42:32 +08:00
shenmo7192 b5488b6c32 3303 2022-10-23 13:27:14 +08:00
shenmo7192 6cec12be9d 3302 修复pkexec未执行 2022-10-23 13:06:03 +08:00
shenmo7192 53f9746ebf 3301 推送 2022-10-23 10:21:59 +08:00
shenmo7192 b68ef5aab1 !137 3301 sudo去除
Merge pull request !137 from shenmo/dev
2022-10-23 02:20:29 +00:00
shenmo7192 c6daf5159c 去除sudo 2022-10-23 10:19:49 +08:00
shenmo7192 b0453c7a8a !136 3101重大事故:更新系统修复
Merge pull request !136 from shenmo/dev
2022-10-23 02:15:44 +00:00
shenmo7192 c7ee32a452 pkexec 修复 2022-10-23 10:10:55 +08:00
shenmo7192 e1d25e401f update debian/spark-store.preinst.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-22 08:19:33 +00:00
shenmo7192 6b78dce87e !135 体验优化:更新时添加进度条
Merge pull request !135 from shenmo/dev
2022-10-21 09:47:49 +00:00
shenmo7192 e5a198e1d8 添加升级应用时的进度条 2022-10-21 17:46:20 +08:00
shenmo7192 1780110e33 !134 330
Merge pull request !134 from shenmo/dev
2022-10-21 09:28:29 +00:00
shenmo7192 19901b0d7d update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-21 09:28:06 +00:00
shenmo7192 d24af0461b update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-21 09:27:05 +00:00
shenmo7192 31a574ec8b !133 feat: 侧边栏更新管理器
Merge pull request !133 from Pluto/dev
2022-10-21 09:26:27 +00:00
uniartisan2018 3feae61b1b feat: 更新管理器
change: 翻译
2022-10-21 17:20:57 +08:00
shenmo7192 eaf65a326c update tool/update-upgrade/ss-do-upgrade.sh.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-21 08:49:18 +00:00
shenmo7192 13da2bc441 update tool/update-upgrade/ss-do-upgrade.sh.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-21 08:47:41 +00:00
shenmo7192 5420bad0ee 默认免密码查看可更新应用 2022-10-21 14:56:31 +08:00
shenmo7192 8465c9ad2d 全部改为zenity 2022-10-21 14:43:15 +08:00
shenmo7192 5562e2b5d1 fix:不正确地跳过unhold 2022-10-21 13:59:43 +08:00
shenmo7192 a09425f361 符号错误修正 2022-10-21 13:46:23 +08:00
shenmo7192 18db530c0d zenity依赖加入 2022-10-21 13:30:21 +08:00
shenmo7192 03263edf8c 更新系统zenity,适配apt-mark hold 2022-10-21 13:28:34 +08:00
shenmo7192 cd13a1ce08 !132 merge and start develop zenity
Merge pull request !132 from shenmo/dev
2022-10-21 03:03:18 +00:00
uniartisan2018 1c5f31da6f fix: 左侧菜单字体大小变化 2022-10-20 21:13:59 +08:00
shenmo7192 cafb4d1dfe !131 版本号 GUI
Merge pull request !131 from shenmo/dev
2022-10-19 15:15:00 +00:00
shenmo7192 828f1a0f05 update src/main.cpp.
版本号

Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-19 15:14:38 +00:00
shenmo7192 b03795e364 !130 324正式
Merge pull request !130 from shenmo/dev
2022-10-19 14:54:19 +00:00
shenmo7192 c54c13d822 modified: debian/changelog 2022-10-17 18:33:49 +08:00
shenmo7192 fdc9550100 tag相关文案修改 2022-10-17 18:31:46 +08:00
shenmo7192 458cc49302 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-15 14:26:04 +00:00
shenmo7192 e11afad89b !129 反向同步进度
Merge pull request !129 from shenmo/master
2022-10-15 14:25:37 +00:00
shenmo7192 43ae031131 !128 增加dbus
Merge pull request !128 from depend/dev
2022-10-15 12:03:18 +00:00
dependon dd6780d636 增加dbus文件,再次启动的时候会唤起第一个进程
并且处理spark打开
2022-10-15 19:55:19 +08:00
shenmo7192 42368a0245 !127 转扁平化为正常合入,添加依赖libssl-dev
Merge pull request !127 from shenmo/dev
2022-10-13 16:04:52 +00:00
shenmo7192 8ca0035107 根据 https://www.deepinos.org/d/1076-ubuntu2204/3 修改
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-13 16:03:40 +00:00
shenmo7192 10332c59e0 !126 324t3发版
* 3.2.4~test3
* 	修改:     debian/changelog
* !125 fix: 对oss进行URL转译
* Merge remote-tracking branch 'upstream/dev' into dev
* fix: 对oss进行URL转译
* !124 fix: 安装时可能出现的超时错误
* update debian/changelog.
* update src/widget.cpp.
* Merge remote-tracking branch 'upstream/dev' into dev
* update debian/changelog.
* Merge remote-tracking branch 'upstream/dev' into dev
* fix: 超时错误
* update README.zh.md.
* update README.md.
* update README.zh.md.
* update debian/changelog.
* !123 feat: 投稿器
* feat: 投稿器
* !122 fix:gpu 参数
* fix: chrome GPU 参数
* Merge remote-tracking branch 'upstream/dev' into dev
* 修复错误的配置文件
* 改为读取/etc
* update debian/changelog.
* UOS 走普通的aptss,aptss支持UOS源
* 更新时不再清除免密码安装设置
* !121 反向同步
* fix
* Merge remote-tracking branch 'upstream/dev' into dev
* fix: high CPU usage because futex is still waiting for queue after illegal exit
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/dev' into dev
* feat: enable GPU
* Merge remote-tracking branch 'upstream/dev' into dev
* Merge branch 'dev' of gitee.com:uniartisan2018/spark-store into dev
* feat: 清除网页缓存
* 文案修改
* update src/widget.ui.
* feat: 星火应用商店检测更新
2022-10-12 14:08:21 +00:00
shenmo7192 09a1c9f710 3.2.4~test3 2022-10-12 22:08:08 +08:00
shenmo7192 ba29c4171c 修改: debian/changelog
修改:     translations/spark-store_en.ts
	修改:     translations/spark-store_fr.ts
	修改:     translations/spark-store_zh_CN.ts
2022-10-12 22:06:30 +08:00
shenmo7192 3b9dde23e7 !125 fix: 对oss进行URL转译
Merge pull request !125 from Pluto/dev
2022-10-12 10:59:23 +00:00
uniartisan2018 746e9bd3d6 Merge remote-tracking branch 'upstream/dev' into dev 2022-10-12 09:31:38 +08:00
uniartisan2018 d7f0ee983b fix: 对oss进行URL转译 2022-10-12 09:31:23 +08:00
shenmo7192 3feec88f7b !124 fix: 安装时可能出现的超时错误
Merge pull request !124 from Pluto/dev
2022-10-09 11:11:25 +00:00
shenmo7192 c0ffb64a86 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-09 11:01:55 +00:00
shenmo7192 8c08b7e995 update src/widget.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-09 10:41:48 +00:00
uniartisan2018 4d7e766d75 Merge remote-tracking branch 'upstream/dev' into dev 2022-10-09 18:37:01 +08:00
shenmo7192 09115c3961 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-09 10:36:31 +00:00
uniartisan2018 63998bbce4 Merge remote-tracking branch 'upstream/dev' into dev 2022-10-09 18:36:31 +08:00
uniartisan2018 967f62f825 fix: 超时错误 2022-10-09 18:36:22 +08:00
shenmo7192 e8ae0325e0 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-08 16:13:33 +00:00
shenmo7192 66a4563b51 update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-08 16:12:59 +00:00
shenmo7192 330ae3eeb8 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-08 16:12:00 +00:00
shenmo7192 0534c39ee5 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-08 15:45:37 +00:00
uniartisan2018 04047c1e44 !123 feat: 投稿器
* feat: 投稿器
2022-10-08 15:38:55 +00:00
uniartisan2018 5e501b9d17 feat: 投稿器 2022-10-08 23:27:35 +08:00
shenmo7192 5a434a9b7d !122 fix:gpu 参数
Merge pull request !122 from Pluto/dev
2022-10-08 14:41:43 +00:00
uniartisan2018 e554aec98d fix: chrome GPU 参数 2022-10-08 22:24:16 +08:00
uniartisan2018 ab0f5e6613 Merge remote-tracking branch 'upstream/dev' into dev 2022-10-08 22:20:46 +08:00
shenmo7192 59607f6b34 修复错误的配置文件
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-08 14:08:30 +00:00
shenmo7192 a13f0ddcb7 改为读取/etc
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-08 13:47:00 +00:00
shenmo7192 fec604b481 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-10-08 03:22:12 +00:00
shenmo7192 085eddd66f UOS 走普通的aptss,aptss支持UOS源 2022-10-07 22:31:24 +08:00
shenmo7192 30860802dd 更新时不再清除免密码安装设置 2022-09-30 11:27:22 +08:00
shenmo7192 30f36ff35d !121 反向同步
Merge pull request !121 from shenmo/master
2022-09-27 12:15:32 +00:00
lisuke 81993625ba !120 添加编译依赖 fakeroot
* 添加 fakeroot 依赖
2022-09-27 12:14:48 +00:00
shenmo7192 87b68aca1e !119 323版本 降低dtk版本
Merge pull request !119 from shenmo/dev
2022-09-27 01:53:24 +00:00
shenmo7192 10125c5816 update src/main.cpp.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-09-27 01:49:01 +00:00
shenmo7192 21d33ec347 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-09-27 01:48:34 +00:00
shenmo7192 ad57aa26ff 降低dtk需求版本
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-09-27 01:34:48 +00:00
uniartisan2018 8902c81b9e !118 fix: high CPU usage because futex is still waiting for queue after illegal exit
* fix
* Merge remote-tracking branch 'upstream/dev' into dev
* fix: high CPU usage because futex is still waiting for queue after illegal exit
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/dev' into dev
* feat: enable GPU
* !113 3.2.1 merge
* !112 Now stop use mail to collect info
* Merge remote-tracking branch 'upstream/dev' into dev
* Merge branch 'dev' of gitee.com:uniartisan2018/spark-store into dev
* feat: 清除网页缓存
* 文案修改
* update src/widget.ui.
* feat: 星火应用商店检测更新
2022-09-27 01:34:18 +00:00
uniartisan2018 0ad4b6c82c fix 2022-09-26 23:53:28 +08:00
uniartisan2018 189a0b4939 Merge remote-tracking branch 'upstream/dev' into dev 2022-09-26 23:46:34 +08:00
uniartisan2018 c65d7b86df fix: high CPU usage because futex is still waiting for queue after illegal exit 2022-09-26 23:46:25 +08:00
shenmo7192 e269e6ca57 !116 3.2.2 合并
Merge pull request !116 from shenmo/dev
2022-09-21 18:37:02 +00:00
shenmo7192 aff593eba8 !115 3.2.2 启动
* update debian/changelog.
* download可无root运行,相应的,不会自动到最新
* !114 feat: GPU enable
* aptss will now refresh the system source before doing install, downloa…
2022-09-20 04:12:29 +00:00
shenmo7192 beaeac60a3 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-09-20 04:11:58 +00:00
shenmo7192 11d68fb4b5 download可无root运行,相应的,不会自动到最新
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-09-20 04:05:25 +00:00
uniartisan2018 e7680fe2a0 !114 feat: GPU enable
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/dev' into dev
* feat: enable GPU
* !113 3.2.1 merge
* !112 Now stop use mail to collect info
* Merge remote-tracking branch 'upstream/dev' into dev
* Merge branch 'dev' of gitee.com:uniartisan2018/spark-store into dev
* feat: 清除网页缓存
* 文案修改
* update src/widget.ui.
* feat: 星火应用商店检测更新
2022-09-20 04:03:09 +00:00
uniartisan2018 19dff7fb56 Merge remote-tracking branch 'upstream/master' into dev 2022-09-20 11:55:54 +08:00
uniartisan2018 67b314d0d2 Merge remote-tracking branch 'upstream/dev' into dev 2022-09-20 11:55:40 +08:00
uniartisan2018 63b28adaf8 feat: enable GPU 2022-09-20 11:55:36 +08:00
shenmo7192 8741973cca aptss will now refresh the system source before doing install, download, policy....etc 2022-09-19 17:58:00 +08:00
shenmo7192 8e3787ab07 !113 3.2.1 merge
Merge pull request !113 from shenmo/dev
2022-09-18 13:17:11 +00:00
shenmo7192 f7d07e0bf9 !112 Now stop use mail to collect info
* Now abandon mail info collect method and delete the outdated info
2022-09-11 12:24:26 +00:00
uniartisan2018 9e4df5c5c2 !111 feat: 清除QtWebCore的缓存
* Merge remote-tracking branch 'upstream/dev' into dev
* Merge branch 'dev' of gitee.com:uniartisan2018/spark-store into dev
* feat: 清除网页缓存
* 文案修改
* update src/widget.ui.
* feat: 星火应用商店检测更新
2022-09-03 09:25:19 +00:00
uniartisan2018 829a08d40a Merge remote-tracking branch 'upstream/dev' into dev 2022-09-02 19:28:05 +08:00
uniartisan2018 411bbe5935 Merge branch 'dev' of gitee.com:uniartisan2018/spark-store into dev 2022-09-02 19:25:27 +08:00
uniartisan2018 5d5fbfbad4 feat: 清除网页缓存 2022-09-02 19:24:45 +08:00
uniartisan2018 af89e64478 !110 检测更新
* 文案修改
* update src/widget.ui.
* feat: 星火应用商店检测更新
2022-08-31 17:50:24 +00:00
shenmo7192 c93c221cf1 文案修改 2022-09-01 01:47:38 +08:00
shenmo7192 afee0966c8 update src/widget.ui.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2022-08-31 17:44:46 +00:00
uniartisan2018 2df5363c2c feat: 星火应用商店检测更新 2022-09-01 01:39:09 +08:00
shenmo7192 971a5dcc63 安装时删除已有的源 2022-09-01 00:40:16 +08:00
shenmo7192 a252e7b724 3.2.1 更新源服务器改为aptss 2022-09-01 00:29:37 +08:00
shenmo7192 d3987a20ec !108 在检测更新时临时降低优先级到100,防止系统中有且版本一致的包被反复来回更新
* changelog更新
* 修复界面中显示的更新检测服务是否启动不正确
* 在检测更新时临时降低优先级到100,防止系统中有且版本一致的包被反复来回更新
2022-08-29 17:58:39 +00:00
shenmo7192 932e754b88 !107 修改: debian/changelog
* 	修改:     debian/changelog
* ssupdate不再更新cache,防止ssinstall出错率
2022-08-29 17:32:05 +00:00
shenmo7192 72a771b0f1 !106 界面细节修改,提升下载量的瞩目 补充changelog 准备发320测试
Merge pull request !106 from shenmo/auto-4915358-master-984782a5
2022-08-29 17:01:12 +00:00
shenmo7192 b75fbe5674 界面细节修改,提升下载量的瞩目
补充changelog
准备发320测试
2022-08-30 01:00:06 +08:00
shenmo7192 6617522a7c !105 cdn
Merge pull request !105 from Pluto/dev
2022-08-29 16:06:31 +00:00
uniartisan2018 1733d9853d feat: cdn 2022-08-29 23:57:08 +08:00
uniartisan2018 55c6c13e50 fix: 图片服务器逻辑 2022-08-29 22:50:03 +08:00
shenmo7192 9c2f326268 !104 修复错别字 修复spk
* 修复错别字
2022-08-29 14:08:26 +00:00
uniartisan2018 b1a6f79961 fix: 拼写错误 2022-08-29 21:06:17 +08:00
uniartisan2018 1561d511d1 Merge remote-tracking branch 'upstream/master' into dev 2022-08-29 21:05:45 +08:00
uniartisan2018 2d2b431df7 !103 feat: 下载量统计
* Merge remote-tracking branch 'upstream/master' into dev
* feat: 下载量
* fix: spk 搜索问题
* fix: 修复依赖问题
* feat: 统计下载量
* Merge remote-tracking branch 'upstream/master' into dev
* feat: sender-d
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: enhance download speed
* feat: 从所有镜像源中选取最快镜像源高速下载
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 不再使用http头请求文件大小
* Merge remote-tracking branch 'upstream/master' into dev
* feature: metalink backhend
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-08-29 12:53:49 +00:00
uniartisan2018 c87272b463 Merge remote-tracking branch 'upstream/master' into dev 2022-08-29 20:28:59 +08:00
uniartisan2018 da632d41e7 feat: 下载量 2022-08-29 20:20:10 +08:00
uniartisan2018 96b0f0f2be fix: spk 搜索问题 2022-08-29 20:19:42 +08:00
uniartisan2018 8a7d09b716 fix: 修复依赖问题 2022-08-29 17:26:27 +08:00
uniartisan2018 fcdcd84462 !101 feat: 统计下载量
* feat: 统计下载量
* Merge remote-tracking branch 'upstream/master' into dev
* feat: sender-d
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: enhance download speed
* feat: 从所有镜像源中选取最快镜像源高速下载
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 不再使用http头请求文件大小
* Merge remote-tracking branch 'upstream/master' into dev
* feature: metalink backhend
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-08-29 08:32:02 +00:00
uniartisan2018 8f63b58062 feat: 统计下载量 2022-08-29 16:12:37 +08:00
uniartisan2018 2c8d38a0da Merge remote-tracking branch 'upstream/master' into dev 2022-08-29 15:48:17 +08:00
shenmo7192 807777e3dc 3.2
混淆过的.c文件
2022-08-29 15:44:22 +08:00
uniartisan2018 86a9e66e29 feat: sender-d 2022-08-29 15:40:15 +08:00
uniartisan2018 15938d0da4 Merge remote-tracking branch 'upstream/master' into dev 2022-08-29 14:50:15 +08:00
shenmo7192 1331c369ad update dtk-build-release-tag-20220425.yml 2022-08-29 03:03:23 +00:00
shenmo7192 d5182c760b update dtk-build-release-tag-20220425.yml 2022-08-25 15:34:27 +00:00
shenmo7192 f9dc1cd09d !100 测试 tag
* update .workflow/dtk-build-release-tag-20220425.yml.
2022-08-25 15:22:17 +00:00
shenmo7192 230c860d91 !99 3160 版本推送
* 	修改:     debian/changelog
2022-08-24 23:20:48 +00:00
uniartisan2018 69f2d6e626 !98 fix: enhance download speed
* Merge remote-tracking branch 'upstream/master' into dev
* fix: enhance download speed
* feat: 从所有镜像源中选取最快镜像源高速下载
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 不再使用http头请求文件大小
* Merge remote-tracking branch 'upstream/master' into dev
* feature: metalink backhend
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-08-24 23:08:05 +00:00
uniartisan2018 6b560492e8 Merge remote-tracking branch 'upstream/master' into dev 2022-08-24 18:39:38 +08:00
uniartisan2018 8886016357 fix: enhance download speed 2022-08-24 18:37:08 +08:00
shenmo7192 9a74368ef5 !97 3.1.5-5 版本号确认
* 3155
* update debian/changelog.
2022-08-24 08:41:17 +00:00
uniartisan2018 cf5e1cae76 !96 feat: 从所有镜像源中选取最快镜像源高速下载
* feat: 从所有镜像源中选取最快镜像源高速下载
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 不再使用http头请求文件大小
* Merge remote-tracking branch 'upstream/master' into dev
* feature: metalink backhend
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-08-24 06:43:40 +00:00
uniartisan2018 6d23aaa07c feat: 从所有镜像源中选取最快镜像源高速下载 2022-08-24 14:02:55 +08:00
uniartisan2018 3740b551ef Merge remote-tracking branch 'upstream/master' into dev 2022-08-24 13:37:27 +08:00
shenmo7192 4c7d50d117 !95 改为commit自动构建为Pr自动构建测试/更新readme中的依赖包下载地址
* update dtk-build-commit-20220425.yml
* update README.md.
* 更新依赖包链接
2022-08-23 05:26:12 +00:00
shenmo7192 6318b5f51d 删除文件 .workflow/dtk-build-release-tag.yml 2022-08-22 09:05:27 +00:00
shenmo7192 2f94e78c32 !94 发tag自动触发构建
* update dtk-build-release-tag-20220425.yml
* create dtk-build-commit-20220425.yml
2022-08-22 09:03:45 +00:00
shenmo7192 fecda52294 !93 重新以commit为触发条件走ci,gitee go无法从pr获取
* create dtk-build-commit-20220425.yml
2022-08-22 08:57:58 +00:00
shenmo7192 8cefdbaca0 !92 ci release
* 	new file:   .workflow/dtk-build-release-tag.yml
2022-08-22 08:48:55 +00:00
shenmo7192 0da714b35a !90 modified: .workflow/dtk-build-commit-20220425.yml
* 	modified:   .workflow/dtk-build-commit-20220425.yml
2022-08-22 08:43:47 +00:00
shenmo7192 379c5a857d !88 修改ci策略:自动触发
* update dtk-build-commit-20220425.yml
2022-08-22 03:08:46 +00:00
shenmo7192 3b349d43ad !87 流水线
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* create dtk-build-commit-20220425.yml
* 删除文件 .workflow/master-pipeline.yml
* 删除文件 .workflow/dtk-build-commit-20220425.yml
* update .workflow/dtk-build-commit-20220425.yml.
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
* update dtk-build-commit-20220425.yml
2022-08-22 02:38:28 +00:00
shenmo7192 b856734843 !86 修改文案 tool/update-upgrade/ss-do-upgrade.sh
* 	修改文案     tool/update-upgrade/ss-do-upgrade.sh
2022-08-19 11:41:10 +00:00
shenmo7192 238c43b79e !85 修改: debian/spark-store.postinst 重命名: tool/ss-apt-fast -> tool/aptss
* 删除文件 spark-wine7-devel_7.14~spark-1_amd64.deb
* final
* 	修改:     debian/spark-store.postinst
* 	修改:     tool/update-upgrade/ss-update-controler.sh
* 	修改:     debian/spark-store.postinst
* 只额外生成一份给aptss
* 	修改:     debian/spark-store.postinst
*  要提交的变更:
* 	修改:     tool/aptss
* 	修改:     debian/changelog
* 	修改:     pkg/usr/share/bash-completion/completions/aptss
* 	修改:     pkg/usr/share/bash-completion/completions/aptss
* 	修改:     debian/spark-store.postinst
* aa
* Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store
* 	修改:     src/main.cpp
* Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store
* 	修改:     debian/spark-store.postinst
2022-08-19 07:28:10 +00:00
shenmo7192 855b18cfa6 !84 修改: src/main.cpp
* 	修改:     src/main.cpp
* Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store
* 	修改:     debian/spark-store.postinst
2022-08-18 09:41:14 +00:00
shenmo7192 bc897969f8 !83 修改: debian/spark-store.postinst
* 	修改:     debian/spark-store.postinst
2022-08-18 09:37:11 +00:00
shenmo7192 52af8a8229 !82 modified: debian/changelog modified: debian/spark-store.postinst new file: tool/spark-store.asc
* 	modified:   debian/changelog
2022-08-18 09:31:33 +00:00
shenmo7192 5220b886de !81 重新发布3152
* update debian/changelog.
* update debian/spark-store.postinst.
2022-08-18 08:44:13 +00:00
shenmo7192 5be7923e60 !80 http2下curl容易报错导致pubkey错误
* update debian/spark-store.postinst.
2022-08-18 08:39:36 +00:00
shenmo7192 6ca6f63b1f !79 changelog和版本号
Merge pull request !79 from shenmo/auto-4915358-master-ca4f1682
2022-08-18 01:12:49 +00:00
shenmo7192 bda0426a3b changelog和版本号 2022-08-18 09:12:10 +08:00
shenmo7192 a75b7b1e57 Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store 2022-08-18 09:10:51 +08:00
uniartisan2018 8054f85ada !78 fix: 不再使用http头请求文件大小
Merge pull request !78 from Pluto/dev
2022-08-17 15:15:19 +00:00
uniartisan2018 6f23d07929 fix: 不再使用http头请求文件大小 2022-08-17 23:07:14 +08:00
uniartisan2018 b73d97d65d Merge remote-tracking branch 'upstream/master' into dev 2022-08-17 22:12:10 +08:00
shenmo7192 bc6584eacc Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store 2022-08-17 19:41:50 +08:00
shenmo7192 c9e01d10fe !77 修改uos的更新策略,先下载到/var/cache/apt/archives再更新
* 修改uos的更新策略,先下载到/var/cache/apt/archives再更新
2022-08-17 02:59:05 +00:00
shenmo7192 c3b9763aa8 Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store 2022-08-15 22:59:12 +08:00
shenmo7192 398cd512d7 !76 * 改变更新策略,现在支持应用在更新时引入新依赖 * ss-apt-fast现在默认允许降级,以与apt使用体验一致
*   * 改变更新策略,现在支持应用在更新时引入新依赖
2022-08-15 14:54:03 +00:00
shenmo7192 0c0ff452ae !74 修改: debian/spark-store.prerm 新文件: tool/apt-fast-conf/sources.list.d/.keep 删除: tool/apt-fast-conf/sources.list.d/sparkstore.list
* 	修改:     debian/spark-store.prerm
2022-08-09 11:27:38 +00:00
shenmo7192 e6d3b035db 修改: debian/spark-store.prerm
新文件:   tool/apt-fast-conf/sources.list.d/.keep
	删除:     tool/apt-fast-conf/sources.list.d/sparkstore.list
2022-08-09 19:26:59 +08:00
shenmo7192 5e88f7c1eb !73 3142版本号
* 3142版本号
2022-08-09 11:08:02 +00:00
shenmo7192 b639a9d726 !72 * 修复使用更新和安装设置更新商店本体时出错
* * 修复使用更新和安装设置更新商店本体时出错
2022-08-09 10:35:33 +00:00
shenmo7192 e2f6a2b3c2 !71 3142准备测试
* 3142版本
2022-08-08 04:50:47 +00:00
uniartisan2018 c826a3927c !69 metalink 功能
* feature: metalink backhend
* Merge remote-tracking branch 'upstream/master' into dev
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-08-08 04:49:17 +00:00
shenmo7192 0c367799b7 !70 修复:ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
* 	修改:     debian/changelog
* 修复:ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
2022-08-08 04:35:58 +00:00
uniartisan2018 0e351a667a feature: metalink backhend 2022-08-08 12:21:20 +08:00
uniartisan2018 e8612f304a Merge remote-tracking branch 'upstream/master' into dev 2022-08-07 23:34:33 +08:00
shenmo7192 114b5cdfe5 !68 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
* 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
* ss-update-notify-placer.sh. 更新服务验证网络的超时时间增加到5s
* update debian/changelog.
* update debian/changelog.
* 版本号更新 3141
2022-08-07 02:50:40 +00:00
shenmo7192 a563d99bc4 !67 修复: ss-apt-fast full-upgrade未用apt-fast加速
* 修复: ss-apt-fast full-upgrade未用apt-fast加速
2022-08-06 04:50:14 +00:00
shenmo7192 b1cb765b6e !66 * 屏蔽了ssinstall之外的安装方式
* 屏蔽了ssinstall之外的安装方式
* 调整了报错框的形式 
* 修复pkexec下ssinstall不处理依赖
2022-08-06 03:13:57 +00:00
shenmo7192 49c5583ea9 !65 修复安装时使用wget的问题
修复安装时使用wget但是依赖未写明的问题(改用curl)
准备发布3.1.4
2022-08-06 02:24:00 +00:00
shenmo7192 b0dfd6a3da !63 修复UOS未处理模拟软件源,新增ss-apt-fast ssupdate,杂项调整
修复UOS未处理模拟软件源
    删除ssinstall的apt-fast安装功能(转移到ss-apt-fast,并且不会再对UOS安装apt-fast)
    ss-apt-fast除了下载,安装和更新,全部走apt;
    ss-apt-fast现在只会在安装/下载/更新时检测是否有apt-fast并处理
    ss-apt-fast ssupdate 从服务器获取源链接后只更新星火源;
    和 ss-apt-fast ssupdate 功能重复的内容转为调用
2022-08-05 01:34:27 +00:00
shenmo7192 a63c1202bd !62 除自动外,手动检查更新前也重新获取list和update
* update tool/update-upgrade/ss-update-controler.sh.
* update tool/update-upgrade/ss-upgrade-list.sh.
* update tool/update-upgrade/ss-upgrade-list.sh.
2022-08-04 02:09:44 +00:00
shenmo7192 dfe30f9d6d !59 * 调整 现在与系统更新分开,不再导致更新失败 * 支持直接更新软件源文件,不再让d.吃全部更新流量 * ss-apt-fast不再强制root权限
* !61 $1为policy时,apt-fast换成apt
* 手动更新时也重新获取源文件
* 	修改:     tool/ss-apt-fast
*   * 调整 现在与系统更新分开,不再导致更新失败
2022-08-04 02:00:38 +00:00
shenmo7192 b00f3fa501 !58 Change version number
Merge pull request !58 from shenmo/auto-4915358-master-1658494943452
2022-07-22 13:02:38 +00:00
shenmo7192 03f35782c6 Change version number 2022-07-22 21:02:10 +08:00
uniartisan2018 8f192d17ec !57 fix: aria2 配置文件错误
* Merge remote-tracking branch 'upstream/master' into dev
* fix: 忽略系统原有aria2配置文件
* fix: waitforfinished
2022-07-22 13:01:05 +00:00
uniartisan2018 57bbc9536a Merge remote-tracking branch 'upstream/master' into dev 2022-07-21 18:29:58 +08:00
uniartisan2018 9f7b46b600 fix: 忽略系统原有aria2配置文件
fix

fix
2022-07-21 18:21:06 +08:00
uniartisan2018 0dc594b3f1 !56 修复下载提前退出
* 	修改:     src/main.cpp
* 	修改:     debian/changelog
* fix: waitforfinished
2022-07-08 09:37:36 +00:00
uniartisan2018 cdb4fc05a1 fix: waitforfinished 2022-07-08 17:19:13 +08:00
uniartisan2018 198384c552 !46 fix !44
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
uniartisan2018 958988d93c !54 download: 在有cdn工作前提下,不使用主域名
* download: 在有cdn工作前提下,不使用主域名
* merge: upstream
* README: 英文修正 ubuntu22 的依赖问题
* Merge remote-tracking branch 'upstream/master'
* widget: 检查cdn状况在下载开始前检测,不堵塞ui线程
* Merge remote-tracking branch 'upstream/master'
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
uniartisan2018 5f9599c47d !52 使用aria2替换原本的多线程下载
* update debian/control.
* fix: readme
* change: 切换到 aria2
* Download: 初步完成对 axel 的适配工作
* README: 英文修正 ubuntu22 的依赖问题
* Merge remote-tracking branch 'upstream/master'
* widget: 检查cdn状况在下载开始前检测,不堵塞ui线程
* Merge remote-tracking branch 'upstream/master'
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
shenmo7192 766dc8b88a !51 read -e
* update tool/update-upgrade/ss-update-controler.sh.
* update tool/ussinstall.
* update tool/ssinstall.
2022-07-02 23:25:35 +08:00
shenmo7192 20d34a7369 !49 ss-apt-fast需要加入sudo
* update tool/ssinstall.
2022-07-02 23:25:35 +08:00
uniartisan2018 a0c14e7397 !48 widget: 检查cdn状况在下载开始前检测,不堵塞ui线程
* widget: 检查cdn状况在下载开始前检测,不堵塞ui线程
* Merge remote-tracking branch 'upstream/master'
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
shenmo7192 f24565804d !47 文案和显示效果修改
* update tool/ss-apt-fast.
* update tool/ss-apt-fast.
2022-07-02 23:25:35 +08:00
uniartisan2018 244176098c !46 fix !44
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性
2022-07-02 23:25:35 +08:00
uniartisan2018 ac0a38e670 !44 多线程下载前验证源的有效性
* readme: 修正 ubuntu 的编译说明
* download: 检查软件源的有效性/异步
* download: 检查软件源的有效性
2022-06-26 12:09:16 +00:00
shenmo7192 af7990e069 !43 ss-apt-fast相关改动:先行获取mirror和自动安装apt-fast
* 修复 多位数无法显示
* 	modified:   tool/update-upgrade/ss-do-upgrade.sh
* 	modified:   tool/update-upgrade/ss-do-upgrade.sh
* 更改依赖判断方法
* 	modified:   debian/changelog
* * 新增:ssinstall现在会在没有apt-fast的时候自动安装
2022-06-26 06:21:19 +00:00
shenmo7192 f8dbca8f6f !42 3.1.2
Merge pull request !42 from shenmo/master
2022-06-21 14:58:37 +00:00
shenmo7192 a064b7b534 修改: debian/changelog
修改:     debian/control
	修改:     debian/spark-store.postinst
	修改:     debian/spark-store.prerm
	修改:     spark-store-project.pro
	修改:     src/main.cpp
	新文件:   tool/apt-fast-conf/apt-fast.conf
	新文件:   tool/ss-apt-fast
	修改:     tool/ssinstall
	修改:     tool/update-upgrade/ss-do-upgrade.sh
	修改:     tool/update-upgrade/ss-update-controler.sh
2022-06-21 22:37:39 +08:00
shenmo7192 289f3020fe !41 不再case yoyo
Merge pull request !41 from shenmo/master
2022-06-16 05:31:51 +00:00
shenmo7192 9cd974fed9 不再case yoyo 2022-06-16 05:31:05 +00:00
shenmo7192 4d97a1e87b !40 检测yoyo-daemon
Merge pull request !40 from 柚子/N/A
2022-06-10 10:33:15 +00:00
柚子 d326e8919f 检测yoyo-daemon 2022-06-10 10:32:33 +00:00
Jerry 1828a60ff1 !39 update img url
* fix: update img url
2022-06-07 10:54:26 +00:00
shenmo7192 865322c85f !37 修改controler的文案
Merge pull request !37 from shenmo/master
2022-05-15 02:46:38 +00:00
shenmo7192 c22c76efc2 update tool/update-upgrade/ss-update-controler.sh. 2022-05-15 02:45:19 +00:00
shenmo7192 415dd1a63c !36 update tool/update-upgrade/ss-upgrade-list.sh.
Merge pull request !36 from lv36/N/A
2022-05-15 02:40:01 +00:00
lv36 7e105b59b0 update tool/update-upgrade/ss-upgrade-list.sh.
接对ss-update-controler.sh的修改,
微调了输出的显示,个人认为这样可加强字符显示的对比,增强显示的对比、提醒(自己看着更舒服)
2022-05-14 15:06:41 +00:00
shenmo7192 84b3340687 update README.md. 2022-05-11 14:43:24 +00:00
shenmo7192 2da576aeab update README.zh.md. 2022-05-11 14:38:51 +00:00
shenmo7192 fb94448692 update README.zh.md. 2022-05-11 14:38:29 +00:00
shenmo7192 6ba7601efa update README.zh.md. 2022-05-11 14:37:49 +00:00
shenmo7192 4ea6c90e78 update README.md. 2022-05-11 14:37:03 +00:00
shenmo7192 f3633bb19d add README.md. 2022-05-11 14:36:14 +00:00
shenmo7192 090b9a279f 重命名 README.md 为 README.zh.md 2022-05-11 14:25:08 +00:00
shenmo7192 1bf8a57802 3.1.1 2022-05-10 12:19:16 +00:00
shenmo7192 01f2610e0a update debian/changelog. 2022-05-10 12:18:36 +00:00
shenmo7192 3e3c3140d0 update tool/update-upgrade/ss-update-controler.sh. 2022-05-10 12:16:34 +00:00
shenmo7192 6ca024b6f3 清理policy和update number文件 2022-05-09 16:42:13 +00:00
shenmo7192 c0ea5824b1 修改: debian/changelog 2022-05-09 18:37:08 +08:00
shenmo7192 ee60b2e7f6 修改: debian/changelog 2022-05-09 18:36:49 +08:00
shenmo7192 53ae863823 修改: tool/password-check/ss-certificate-passwd 2022-05-09 01:00:11 +08:00
shenmo7192 3dae7db89a 修复UOS且apt-fast下的提权错误 2022-05-08 15:40:15 +00:00
shenmo7192 3b3bf8f0de 修改: src/downloadlist.cpp
修改:     src/widget.cpp
	重命名:   pkg/usr/share/polkit-1/actions/store.spark-app.ssinstall.policy -> tool/auto-install-policy/store.spark-app.ssinstall.policy
	修改:     tool/update-upgrade/ss-update-controler.sh
	修改:     translations/spark-store_en.ts
	修改:     translations/spark-store_fr.ts
	修改:     translations/spark-store_zh_CN.ts
2022-05-08 23:11:42 +08:00
shenmo7192 00f9b62b80 修改: debian/changelog 2022-05-08 22:24:03 +08:00
shenmo7192 0916a0a97e !34 修改control/修改logo
* 	删除:     assets/Logo-Spark.png
* update src/main.cpp.
* The font used for new logo
* new logo file
* update debian/control.
2022-05-08 14:21:50 +00:00
Jerry c6505c1c14 update readme 2022-05-03 09:13:29 +00:00
shenmo7192 4f600f3ec7 update .workflow/master-pipeline.yml. 2022-04-28 14:35:45 +00:00
shenmo7192 bf5d0cb75f update master-pipeline.yml for Gitee Go updated_at:2022-04-28 11:03:54 2022-04-28 11:03:54 +00:00
shenmo7192 4ca292bd34 删除文件 target 2022-04-28 10:57:30 +00:00
shenmo7192 12cf0a3515 新建 deb 2022-04-27 15:05:16 +00:00
shenmo7192 18279ec00d 新建 build 2022-04-27 15:05:06 +00:00
shenmo7192 e415798ee0 新建 target 2022-04-27 15:04:58 +00:00
shenmo7192 89740ad953 update master-pipeline.yml for Gitee Go updated_at:2022-04-27 15:00:34 2022-04-27 15:00:35 +00:00
shenmo7192 3eddb4ce71 update master-pipeline.yml for Gitee Go updated_at:2022-04-27 15:00:31 2022-04-27 15:00:31 +00:00
shenmo7192 239a788019 update tool/update-upgrade/ss-update-controler.sh. 2022-04-26 10:23:17 +00:00
shenmo7192 dc6210b545 update tool/update-upgrade/ss-update-controler.sh. 2022-04-26 10:19:31 +00:00
shenmo7192 94d6a566ca update tool/update-upgrade/ss-do-upgrade.sh. 2022-04-26 10:17:19 +00:00
shenmo7192 c66c5c6ca3 114514. 2022-04-26 07:58:07 +00:00
shenmo7192 c974349c9f update tool/update-upgrade/ss-do-upgrade.sh. 2022-04-26 06:08:30 +00:00
shenmo7192 42362fd0ca update .gitee/Dockerfile. 2022-04-26 06:06:59 +00:00
shenmo7192 63bc01c43d update .gitee/Dockerfile. 2022-04-26 05:02:00 +00:00
shenmo7192 280cd983cb update master-pipeline.yml for Gitee Go updated_at:2022-04-26 04:23:16 2022-04-26 04:23:17 +00:00
shenmo7192 05e95b42e0 update .workflow/master-pipeline.yml. 2022-04-26 04:18:05 +00:00
shenmo7192 2614b4ae05 update .gitee/Dockerfile. 2022-04-26 03:37:17 +00:00
shenmo7192 e8d55cadb6 update master-pipeline.yml for Gitee Go updated_at:2022-04-26 03:14:38 2022-04-26 03:14:38 +00:00
shenmo7192 3534b815cc update master-pipeline.yml for Gitee Go updated_at:2022-04-26 03:11:57 2022-04-26 03:11:58 +00:00
shenmo7192 ef75e89916 update master-pipeline.yml for Gitee Go updated_at:2022-04-26 03:11:55 2022-04-26 03:11:55 +00:00
shenmo7192 e4daffd052 update master-pipeline.yml for Gitee Go updated_at:2022-04-26 03:11:16 2022-04-26 03:11:16 +00:00
shenmo7192 9c29ca2e38 update master-pipeline.yml for Gitee Go updated_at:2022-04-26 02:55:13 2022-04-26 02:55:13 +00:00
shenmo7192 733751db8e 干完这一票咱就3.1了 2022-04-26 02:53:26 +00:00
shenmo7192 db739181f2 update master-pipeline.yml for Gitee Go updated_at:2022-04-26 02:51:49 2022-04-26 02:51:49 +00:00
shenmo7192 0bd87eb100 update master-pipeline.yml for Gitee Go updated_at:2022-04-26 02:51:00 2022-04-26 02:51:01 +00:00
shenmo7192 8b690e8dea update master-pipeline.yml for Gitee Go updated_at:2022-04-26 02:50:58 2022-04-26 02:50:58 +00:00
shenmo7192 9329c939d7 update .gitee/Dockerfile. 2022-04-26 02:38:36 +00:00
shenmo7192 232fe777e5 新文件: tool/password-check/ss-certificate-passwd
修改:     tool/ssinstall
2022-04-26 10:33:37 +08:00
shenmo7192 000fcf8c9d update spark-store-project.pro. 2022-04-25 14:17:24 +00:00
shenmo7192 30bc12a8b6 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 12:51:44 2022-04-25 12:51:44 +00:00
shenmo7192 a7385aff1e update master-pipeline.yml for Gitee Go updated_at:2022-04-25 12:07:43 2022-04-25 12:07:43 +00:00
shenmo7192 c5b786d9e6 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 12:06:39 2022-04-25 12:06:39 +00:00
shenmo7192 55d254e147 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:58:00 2022-04-25 11:58:00 +00:00
shenmo7192 cccad380a4 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:51:03 2022-04-25 11:51:03 +00:00
shenmo7192 afe5c00af7 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:44:09 2022-04-25 11:44:09 +00:00
shenmo7192 55e7fd836c update .workflow/master-pipeline.yml. 2022-04-25 11:35:47 +00:00
shenmo7192 2959d72d1c update .workflow/master-pipeline.yml. 2022-04-25 11:31:33 +00:00
shenmo7192 95b4608e82 update .workflow/master-pipeline.yml. 2022-04-25 11:30:00 +00:00
shenmo7192 edef44eea8 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:10:01 2022-04-25 11:10:02 +00:00
shenmo7192 a4b9bd6a17 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:09:59 2022-04-25 11:09:59 +00:00
shenmo7192 a165cd7d67 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:08:06 2022-04-25 11:08:06 +00:00
shenmo7192 387d21b29f update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:08:02 2022-04-25 11:08:02 +00:00
shenmo7192 63b8ae5ae7 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:03:59 2022-04-25 11:04:00 +00:00
shenmo7192 9ae4fa8372 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:03:56 2022-04-25 11:03:56 +00:00
shenmo7192 1eb2f8df91 update master-pipeline.yml for Gitee Go updated_at:2022-04-25 11:02:40 2022-04-25 11:02:40 +00:00
shenmo7192 ce1de9c367 update .gitee/Dockerfile. 2022-04-25 11:00:44 +00:00
shenmo7192 80284b22cb update master-pipeline.yml for Gitee Go updated_at:2022-04-25 09:37:09 2022-04-25 09:37:09 +00:00
shenmo7192 ad1b69493a add master-pipeline.yml for Gitee Go created_at:2022-04-25 08:58:29 2022-04-25 08:58:29 +00:00
shenmo7192 7ca5e9b0d0 修改: spark-store-project.pro 2022-04-25 13:35:57 +08:00
shenmo7192 873a83e6b9 修改: debian/changelog
新文件:   pkg/usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
	修改:     spark-store-project.pro
	修改:     src/main.cpp
	修改:     tool/ssinstall
2022-04-25 13:34:25 +08:00
shenmo7192 da8ee30fbd update README.md. 2022-04-25 03:33:33 +00:00
shenmo7192 6d84fa0fe5 add DOCS/code-analyze.md. 2022-04-25 03:22:03 +00:00
shenmo7192 41d6272526 删除文件 code-analyze.md 2022-04-25 03:21:46 +00:00
shenmo7192 0f7bdf484f update README.md. 2022-04-25 03:21:09 +00:00
shenmo7192 bc67bcb6f0 update code-analyze.md. 2022-04-25 03:18:07 +00:00
shenmo7192 134586b580 add DOCS/spk-doc.md. 2022-04-25 03:17:36 +00:00
shenmo7192 d645b26c62 新建 DOCS 2022-04-25 03:17:02 +00:00
shenmo7192 fdc818cdb4 update code-analyze.md. 2022-04-25 03:16:55 +00:00
shenmo7192 1f493a8aca add code-analyze.md. 2022-04-25 03:16:11 +00:00
shenmo7192 463a8d0c04 update README.md. 2022-04-25 03:15:17 +00:00
shenmo7192 932bbd7995 update debian/changelog. 2022-04-24 08:17:12 +00:00
shenmo7192 5f45abc484 update tool/ssinstall. 2022-04-24 08:12:34 +00:00
shenmo7192 820ad08bf4 修改: debian/changelog
修改:     添加了Recommends
	修改:     更新版本号,使用自定义DAboutDialog
	修改:     translations/spark-store_en.ts
	修改:     translations/spark-store_fr.ts
	修改:     translations/spark-store_zh_CN.ts
2022-04-24 16:00:37 +08:00
shenmo7192 2ddfb3f192 !31 兼容改动改变文案+ssinstall临时提升优先级
* update tool/ssinstall.
* update tool/ssinstall.
* update tool/ssinstall.
* update tool/ssinstall.
* update tool/ssinstall.
* update tool/ssinstall.
* update translations/spark-store_zh_CN.ts.
* update src/widget.ui.
2022-04-24 07:33:47 +00:00
shenmo7192 b3ca6878ec update debian/control. 2022-04-23 02:44:50 +00:00
shenmo7192 ae6f2354bb update debian/control. 2022-04-23 02:41:15 +00:00
shenmo7192 591556a7c8 update debian/changelog. 2022-04-22 09:06:12 +00:00
shenmo7192 0bcf8a1ee9 版本号到30312 2022-04-22 09:05:00 +00:00
shenmo7192 15b6a22f49 !30 标题栏处理
Merge pull request !30 from shenmo/master
2022-04-22 09:03:47 +00:00
shenmo7192 7f1f5528ef update src/main.cpp. 2022-04-22 09:02:46 +00:00
shenmo7192 158ba884b1 update debian/control. 2022-04-14 12:57:48 +00:00
shenmo7192 d9a50e7b44 修改: 多了单引号 2022-04-14 17:31:56 +08:00
shenmo7192 72019f7cce 修改: 现在只检测星火源的更新,避免出现问题
新文件:   检测网络环境,没网就退出
2022-04-14 17:26:54 +08:00
shenmo7192 c4b26045d9 update tool/update-upgrade/ss-update-controler.sh. 2022-04-11 08:19:27 +00:00
shenmo7192 e14b1baaab 修改: debian/spark-store.postinst
修改:     debian/spark-store.prerm
	修改:     pkg/usr/lib/systemd/system/spark-update-notifier.service
2022-04-11 11:04:56 +08:00
shenmo7192 0bfa7c9136 修改: debian/spark-store.prerm
修改:     tool/update-upgrade/ss-update-notify-placer.sh
2022-04-11 09:40:28 +08:00
shenmo7192 6d38c0bf70 修改: tool/update-upgrade/ss-update-notify-placer.sh 2022-04-11 01:49:05 +08:00
shenmo7192 a932966795 修改: tool/update-upgrade/ss-update-notify-placer.sh
修改:     tool/update-upgrade/ss-update-notify.sh
2022-04-11 01:05:28 +08:00
shenmo7192 a63c7ec750 修改: tool/update-upgrade/ss-update-controler.sh 2022-04-11 00:44:42 +08:00
shenmo7192 ad53669098 修改: tool/update-upgrade/ss-update-controler.sh
修改:     tool/update-upgrade/ss-update-notify.sh
2022-04-11 00:40:28 +08:00
shenmo7192 69b42f2afe 修改: tool/update-upgrade/ss-update-notify-placer.sh
修改:     tool/update-upgrade/ss-update-notify.sh
2022-04-11 00:12:56 +08:00
shenmo7192 c4f4465e87 新文件: debian/source/format
修改:     debian/spark-store.postinst
	修改:     debian/spark-store.postrm
	修改:     debian/spark-store.prerm
	修改:     pkg/usr/lib/systemd/system/spark-update-notifier.service
	修改:     spark-store-project.pro
	修改:     tool/update-upgrade/ss-update-controler.sh
2022-04-11 00:01:50 +08:00
shenmo7192 f292f954f7 修改: debian/changelog
新文件:   pkg/usr/lib/systemd/system/spark-update-notifier.service
	修改:     src/main.cpp
	修改:     src/widget.cpp
	新文件:   tool/update-upgrade/autostart/spark-update-notifier.desktop
	新文件:   tool/update-upgrade/ss-do-upgrade.sh
	新文件:   tool/update-upgrade/ss-update-controler.sh
	新文件:   tool/update-upgrade/ss-update-notify-placer.sh
	新文件:   tool/update-upgrade/ss-update-notify.sh
	新文件:   tool/update-upgrade/ss-upgrade-list.sh
2022-04-10 23:22:35 +08:00
shenmo7192 161c9e320b update src/main.cpp.
注释掉已经废弃的函数,否则可能会对wayland适配造成影响
2022-04-07 17:03:30 +00:00
shenmo7192 f33386ee5c 修改: debian/control 2022-04-07 14:31:43 +08:00
RigoLigo 61c10944c9 根据DTK的int& argc,fakeArgc改用一个变量保存而不是使用右值 2022-04-07 05:51:42 +00:00
RigoLigo 6db6fe6060 订正上次提交的参数错位的问题 2022-04-07 05:41:34 +00:00
RigoLigo 14506b18b2 尝试通过在main函数强行加入参数修复一些样式问题 2022-04-07 05:37:09 +00:00
shenmo7192 44d1041087 删除文件 src/spark-dstore-patch/.qmake.stash 2022-04-02 14:28:47 +00:00
shenmo7192 dd941bcf8e 修改版本号 2022-04-02 22:26:56 +08:00
shenmo7192 75fc22d2a2 修改: debian/changelog
删除:     debian/source/format
	修改:     spark-store-project.pro
	新文件:   src/spark-dstore-patch/spark-dstore-patch.pro
	新文件:   src/spark-dstore-patch/spark-dstore-tool.cpp
	修改:     src/spark-store.pro
	删除:     tool/spark-dstore-patch
2022-04-02 22:24:11 +08:00
shenmo7192 ee549b91f1 update tool/ussremove. 2022-03-07 12:04:56 +00:00
shenmo7192 38209d0efb update tool/ussinstall. 2022-03-07 12:03:31 +00:00
shenmo7192 b7dcca35b5 update src/main.cpp. 2022-02-26 11:34:58 +00:00
shenmo7192 bb39fe386b update debian/control. 2022-02-26 11:32:00 +00:00
ut003880 3d02922751 chore: 去除 postinst 中 apt update 并行操作
避免输出 log 混乱

Log: 去除 postinst 中 apt update 并行操作
2022-02-21 17:17:51 +08:00
shenmo7192 e5ea3c3477 update debian/spark-store.prerm. 2022-02-20 05:18:47 +00:00
shenmo7192 0b00cd2f4d update debian/spark-store.postinst. 2022-02-20 05:18:08 +00:00
shenmo7192 7f6b8c1f5e update debian/copyright. 2022-02-20 05:17:21 +00:00
zty199 3bfc183c89 chore: 修改 postinst / prerm 脚本
隐藏 asc key 文件下载过程;asc 文件转为 gpg 文件直接放入 /etc/apt/trusted.gpg.d 文件夹生效;隐藏 apt update 输出日志

Log: 修改 postinst / prerm 脚本;修改 copyright 文件
2022-02-04 21:11:47 +08:00
shenmo7192 45e1970186 apt update 2022-02-01 15:38:52 +00:00
shenmo7192 c8e8560584 如果安装了dstore不再瞎jb刷存在感 2022-02-01 15:35:03 +00:00
shenmo7192 5bdf9c69ea source是主仓库 2022-02-01 15:29:13 +00:00
zty199 e48438b5a6 feat: Support dpkg-buildpackage
Support dpkg-buildpackage

Log: Support dpkg-buildpackage
2022-01-16 21:58:36 +08:00
shenmo7192 00cb5d2442 update debian/DEBIAN/postinst. 不再需要新的key了 2022-01-14 07:17:50 +00:00
shenmo7192 9a84dfffd0 修改: debian/opt/durapps/spark-store/bin/spark-store
修改:     src/main.cpp
2022-01-14 00:36:57 +08:00
shenmo7192 45a2b0b8c8 修改: debian/DEBIAN/postinst 2022-01-14 00:30:25 +08:00
shenmo7192 a947963fc1 修改: debian/DEBIAN/control
删除:     spark-store_3.0.3-7_amd64.deb
2022-01-13 23:43:39 +08:00
shenmo7192 6982a97d22 修改: src/downloadlist.cpp 2021-12-13 20:12:21 +08:00
shenmo7192 1ba01588f0 修改: debian/DEBIAN/control
新文件:   debian/opt/durapps/spark-store/bin/spark-dstore-patch
2021-12-13 20:07:33 +08:00
shenmo7192 4a7f9f7500 修改: build.sh
新文件:   spark-dstore-patch
2021-12-11 23:28:58 +08:00
shenmo7192 47690ee666 修改: debian/DEBIAN/triggers
修改:     debian/opt/durapps/spark-store/bin/spark-store
2021-12-11 23:23:33 +08:00
shenmo7192 3477d50689 修改: debian/DEBIAN/control
修改:     debian/opt/durapps/spark-store/bin/spark-store
	修改:     debian/usr/share/spark-store/translations/spark-store_zh_CN.qm
	修改:     src/main.cpp
	修改:     src/widget.cpp
2021-12-11 23:18:40 +08:00
shenmo7192 abf1e0df71 add debian/DEBIAN/triggers. 2021-12-11 09:52:54 +00:00
shenmo7192 1ac033e850 update debian/DEBIAN/postrm. 2021-12-11 09:52:30 +00:00
shenmo7192 c2d9b0324a update debian/DEBIAN/postinst. 2021-12-11 09:52:17 +00:00
shenmo7192 5727b54c3f update debian/DEBIAN/control. 2021-12-11 09:52:04 +00:00
shenmo7192 d796d296c0 update build.sh. 2021-11-24 20:37:42 +00:00
shenmo7192 31ecde133e update debian/DEBIAN/control. 2021-10-26 12:02:41 +00:00
shenmo7192 d6d40d2b78 修改: debian/usr/share/spark-store/translations/spark-store_zh_CN.qm
修改:     src/widget.ui
	修改:     translations/spark-store_zh_CN.qm
	修改:     translations/spark-store_zh_CN.ts
2021-10-24 23:46:36 +08:00
shenmo7192 ed220702b3 修改: debian/DEBIAN/control
修改:     debian/opt/durapps/spark-store/bin/spark-store
	修改:     debian/usr/share/spark-store/translations/spark-store_zh_CN.qm
	修改:     translations/spark-store_zh_CN.qm
	修改:     translations/spark-store_zh_CN.ts
2021-10-24 22:55:00 +08:00
RigoLigoRLC bdef388b2e 去除翻译功能,改为催更 2021-10-24 00:46:50 +08:00
zty199 a31a36dbd8 chore: 允许应用详情页复制文字 2021-07-15 16:39:27 +08:00
zty199 f23809b28e fix: 修复软件包卸载问题
fix: 修复软件包卸载失败以及取消卸载后显示成功的问题
fix: 修复下载列表不显示应用缩略图的问题
chore: 优化部分代码
2021-07-15 16:07:14 +08:00
zty199 7d4944279f !24 更新了投稿链接
Merge pull request !24 from momen/master
2021-07-01 03:46:58 +00:00
zty199 3dfca9a17d 更新打包文件以及 README.md 2021-06-30 14:37:38 +08:00
zty199 9b189f276e chore: 尝试开启 Hidpi 支持 2021-06-30 14:24:22 +08:00
zty199 51518e4e88 chore: 支持从源列表文件动态获取镜像源
支持从源列表文件动态获取镜像源,获取失败时默认只使用 d.store.deepinos.org.cn 该地址;

修复之前版本中设置界面“更新源”按钮无效的问题。
2021-06-30 14:14:06 +08:00
zty199 961d174bf7 chore: 尝试添加打包脚本
尝试添加了自动编译打包脚本,由于不会使用 dh_make 故每次需要手动更新打包信息。
2021-06-29 21:52:41 +08:00
zty199 10b758d8f3 fix: 尝试修复详情页经常加载失败的问题
关闭传输超时上限,未下载完成则持续等待;可能存在严重问题......
2021-06-29 14:05:01 +08:00
zty199 78c5d31a29 Update Translations 2021-06-29 13:50:07 +08:00
zty199 adf8b478a8 chore: 修复投递链接;新增应用升级判断
fix: 修复投递链接;
chore: 应用详情页支持判断是否需要升级。
2021-06-29 13:46:26 +08:00
momen 1c748219f8 update README.md.
更新了投稿页面
2021-06-26 10:04:48 +00:00
shenmo 9def55a2c2 roll back: src/downloadlist.cpp 2021-06-21 16:27:07 +08:00
shenmo cd1892fd66 修改: src/downloadlist.cpp
修改:     src/downloadlist.h
2021-06-21 16:22:23 +08:00
Jerry 83e2302cf8 !23 改 jenkinsfile
Merge pull request !23 from Jerry/N/A
2021-06-21 15:56:35 +08:00
Jerry 4deaf28659 改 jenkinsfile 2021-06-21 15:56:21 +08:00
shenmo 04d6174875 . 2021-06-21 14:13:22 +08:00
shenmo 0d64bff7fa 改版本号,传统艺能 2021-06-18 14:58:52 +08:00
zty199 0ab9f4dda6 !22 合并 multiple 分支修复的 BUG
Merge pull request !22 from zty199/multiple
2021-06-13 14:36:48 +08:00
zty199 5a97f6caef Merge branch 'master' of gitee.com:deepin-community-store/spark-store into multiple 2021-06-13 14:36:05 +08:00
zty199 3da25b0904 Fix bugs about server address in widget.cpp 2021-06-13 14:30:31 +08:00
RigoLigo 116c824365 更正错误的服务URL 2021-06-09 20:40:45 +08:00
zty199 44edb08518 Fix issues about TitleBar
Fix a issue about titlebar display on Ubuntu.
2021-04-24 21:17:51 +08:00
zty199 9a3d32ee11 Improve Features
Support save current theme setting when exit;
Use QScreen::primaryScreen() instead of QDesktopWidget to get desktop size;
Ensure only one instance will be running at the same time.
2021-04-20 18:49:17 +08:00
Jerry e5fe80cb76 add jenkins from master 2021-04-20 16:04:42 +08:00
Jerry 9314acd7e1 !21 Jenkins自动构建并在commit下评论
* debug
* update
* debug
* debug
* debug
* debug
* debug
* update
* update
* debug
* Merge branch 'jenkins' of gitee.com:deepin-community-store/spark-store…
* up
* Added Jenkinsfile
* debug
* debug
* debug
* up
* up
* debug
* up
* debug
* Merge branch 'jenkins' of gitee.com:deepin-community-store/spark-store…
* debug
* Added Jenkinsfile
* Added Jenkinsfile
* up
* 1
* update
* Added Jenkinsfile
* Merge branch 'jenkins' of gitee.com:deepin-community-store/spark-store…
* update
* Added Jenkinsfile
* Added Jenkinsfile
* Added Jenkinsfile
* Added Jenkinsfile
* 不使用 make -j
* 修改字体
* Added Jenkinsfile
* Added Jenkinsfile
2021-04-20 15:50:44 +08:00
zty199 e64e7fcae2 Reorganize codes
Reorganize all parts of codes;
Fix a bug that index page color is not correct when initialized.
2021-04-17 15:43:11 +08:00
zty199 536efeedfa !19 检查 UI 中的 BUG
* 整理部分代码
* 修改下载线程上限 4 线程为 5 线程
2021-04-17 04:37:30 +08:00
zty199 6fd3c40e97 Reorganize part of codes
Reorganize spark-store.pro, widget.h and widget.cpp.
2021-04-17 04:30:28 +08:00
Jerry 90513a8925 !18 4线程到5线程
Merge pull request !18 from Jerry/4to5
2021-04-17 03:23:01 +08:00
Jerry ed3d869b99 4线程切换到5线程 2021-04-17 03:22:03 +08:00
Jerry c80737a458 Merge branch 'multiple' of gitee.com:deepin-community-store/spark-store into multiple 2021-04-17 03:19:44 +08:00
Jerry ebf30e67f9 4线程到5线程 2021-04-17 03:19:38 +08:00
Jerry 90b684af87 Merge branch 'master' of gitee.com:deepin-community-store/spark-store into multiple 2021-04-17 03:18:40 +08:00
Jerry 3ff363d7b1 4线程切到5线程 2021-04-17 03:16:22 +08:00
Jerry f7ced7739c !17 多线程下载合并
* Update README.md
* Improve Features
* 修改获取线路的域名
* 修改默认源
* 修改多线程下载域名和图片服务器
* 修正取消下载的闪退问题
* 将图片下载由 curl 转为 QtNetworkService
* 切换多域名下载,提高下载速度
* 完成并发请求下载
2021-04-17 01:35:51 +08:00
zty199 e12f617f59 Update README.md 2021-04-17 01:16:01 +08:00
zty199 d164aec86d Improve Features
Fix a bug that annotations in server list can be chosen in combobox;
Fix a bug that index page don't follow system theme;
Disable qDebug/qWarning output in Release version;
Update default server list.
2021-04-17 00:53:26 +08:00
Jerry 96cd1b9918 修改获取线路的域名 2021-04-16 19:05:30 +08:00
Jerry 393c8220f5 修改默认源 2021-04-16 18:48:01 +08:00
Jerry 01d1543cc4 修改多线程下载域名和图片服务器 2021-04-16 12:19:22 +08:00
metanoia1989 4ccc8c0dae 修正取消下载的闪退问题 2021-03-06 17:00:55 +08:00
metanoia1989 815036e28f 将图片下载由 curl 转为 QtNetworkService 2021-03-06 15:18:31 +08:00
metanoia1989 9cc68fac86 切换多域名下载,提高下载速度 2021-02-20 06:47:57 +08:00
metanoia1989 2f8c11a30b 完成并发请求下载 2021-02-16 23:00:27 +08:00
zty199 1a4b1176fb !16 Improve Features
* Improce Features
* History Backup for Version 3.0-stable
2021-01-30 21:12:20 +08:00
zty199 3101f1fe70 Restore Patches 2020-12-17 00:18:10 +08:00
zty199 58f32c119a Bump version to 3.0 2020-12-16 23:49:54 +08:00
zty199 ccdcf407cc 调整安装选项顺序
调整安装选项顺序;
更新服务器源优先级;
重新打包。
2020-12-15 00:30:26 +08:00
zty199 1a18a51d3c !15 修正搜索功能的几个BUG
Merge pull request !15 from 枯叶蚊/search
2020-12-12 14:48:02 +08:00
metanoia1989 ab88af006b 修正搜索列表应用重复点击进入失败的问题 2020-12-10 22:46:55 +08:00
metanoia1989 d02900cb10 Merge branch 'search' of gitee.com:deepin-community-store/spark-store into search
合并主分支的搜索图标
2020-12-10 21:32:15 +08:00
metanoia1989 3e473c091a 解决从详情页返回列表页的进度恢复问题 2020-12-10 21:31:53 +08:00
shenmo 84541d0c22 修改: translations/spark-store_zh_CN.ts 2020-12-10 16:41:25 +08:00
shenmo 51f84bed1b 修改: src/downloadlist.cpp
修改:     src/spark-store.pro
	删除:     trans/spark-store_en.qm
	删除:     trans/spark-store_fr.qm
	删除:     trans/spark-store_zh_CN.qm
	重命名:   trans/spark-store_en.ts -> translations/spark-store_en.ts
	重命名:   trans/spark-store_fr.ts -> translations/spark-store_fr.ts
	重命名:   trans/spark-store_zh_CN.ts -> translations/spark-store_zh_CN.ts
2020-12-10 16:40:42 +08:00
shenmo7192 4a0acf0575 修改: assets/icons/category_active.svg
新文件:   assets/icons/category_active.svg.bak
	修改:     assets/icons/category_active_dark.svg
	新文件:   assets/icons/category_active_dark.svg.bak
2020-12-10 12:35:14 +08:00
metanoia1989 e28d1c39ac 返回列表不重新加载 2020-12-08 23:31:40 +08:00
metanoia1989 f58201a612 合并来自主干的分支 2020-12-08 22:48:27 +08:00
zty199 405d3b6986 Try to fix bugs
尝试修复多屏幕下截图全屏预览的偏移问题。
2020-12-06 12:32:09 +08:00
zty199 b619d3cc7b Fix Bugs
修复了搜索结果页存在页边距的问题;
修复了多次搜索同时触发导致的崩溃问题。
2020-12-05 18:45:47 +08:00
枯叶蚊 14e3e7f9a2 !14 星火商店搜索功能
* 更换搜索服务器域名为星火的域名
* 更新搜索服务器为线上服务器
* 完成搜索功能
* 解决搜索结果图标锯齿问题
* 更新appitem的样式
* 完成应用搜索列表的滚动问题
* 合并master分支
* 添加一些文件到忽略列表
* 更新项目结构
* 更新搜索列表UI
* 添加 QtNetworkService库
2020-12-05 16:06:52 +08:00
metanoia1989 1d0e0cc65c 更换搜索服务器域名为星火的域名 2020-12-05 13:53:13 +08:00
metanoia1989 7a5b982dea 更新搜索服务器为线上服务器 2020-12-02 22:22:59 +08:00
metanoia1989 91fcab56df 完成搜索功能 2020-12-01 22:10:52 +08:00
metanoia1989 4315f04023 解决搜索结果图标锯齿问题 2020-11-30 22:44:25 +08:00
metanoia1989 736ede0742 更新appitem的样式 2020-11-29 22:25:20 +08:00
metanoia1989 a73a4416fc 完成应用搜索列表的滚动问题 2020-11-29 20:28:59 +08:00
shenmo 62f0dd097c update README.md. 2020-11-29 12:11:42 +08:00
metanoia1989 6f3e4398df 合并master分支 2020-11-28 20:59:22 +08:00
metanoia1989 3cca0d87fe 添加一些文件到忽略列表 2020-11-21 11:18:20 +08:00
zty199 b7e038bd88 Fix Bugs
Fix a bug that dirname in ~/.local/share/spark-union/ is translated into
Chinese.
2020-11-19 14:16:16 +08:00
shenmo 4f0e00ad76 修改了一个图标的名字 2020-11-18 15:17:36 +08:00
shenmo 579008e8b2 !13 更新部分语言翻译
Merge pull request !13 from 枯叶蚊/master
2020-11-14 12:17:36 +08:00
metanoia1989 ccb405c983 更新部分语言翻译 2020-11-14 11:02:50 +08:00
metanoia1989 66ef37c1ca 更新项目结构 2020-11-13 22:57:37 +08:00
metanoia1989 8972425c7c 更新搜索列表UI 2020-11-08 22:35:31 +08:00
metanoia1989 2ae6e80785 添加 QtNetworkService库 2020-11-08 20:41:18 +08:00
shenmo7192 f5788efb47 update README.md. 2020-10-27 17:26:56 +08:00
shenmo7192 32bc272791 update README.md. 2020-10-27 17:26:12 +08:00
shenmo7192 c5f04b5675 update README.md. 2020-10-27 17:24:50 +08:00
zty199 cf208d0736 Roll back to old version of DAboutDialog
Roll back to old version of DAboutDialog for compability with Ubuntu.
2020-10-27 17:15:08 +08:00
shenmo7192 fdc7cb4cb6 修改: README.md 2020-10-27 16:55:56 +08:00
zty199 8e89ce3ae3 keep old version AboutDialog
Keep old version AboutDialog to be compatible with ubuntu.
2020-10-26 23:29:41 +08:00
zty199 ee51f59874 Bump version to 2.0.2.5
Bump version to 2.0.2.5.
2020-10-26 22:50:21 +08:00
shenmo7192 3d09a28794 main.coo改回定制,2.0.2.5版本号,改了logo配色 2020-10-26 17:47:24 +08:00
shenmo7192 4b05758479 main.coo改回定制,2.0.2.5版本号,改了logo配色 2020-10-26 17:47:14 +08:00
shenmo7192 74d9d0b563 main.coo改回定制,2.0.2.5版本号,改了logo配色 2020-10-26 17:44:19 +08:00
123456 f1a4f7acb5 main.cpp改回spark定制 2020-10-26 17:41:46 +08:00
zty199 93be66e871 Improve menu list on the left
Set StyleSheet of menu list on the left to
"text-align:left;padding-left:15px;" when system locale is not "zh_CN";

Update part of names in menu list and corresponding translation.
2020-10-24 20:24:31 +08:00
zty199 7b46cca1d4 Fix Bugs
Fix a Bug in updateUI(), everytime calling this method will set fonts to
system default display font and delete custom font settings, have to set
custom fonts again here.
2020-10-23 15:15:53 +08:00
shenmo7192 c529367998 !12 卸载安装包时,将pkg转换为小写,让dpkg能够识别
Merge pull request !12 from 枯叶蚊/master
2020-10-20 09:02:27 +08:00
metanoia1989 beae3e3efa 应用下载后面换行 2020-10-19 22:44:44 +08:00
metanoia1989 9706480931 添加.vscode和build为忽略目录 2020-10-19 22:17:22 +08:00
metanoia1989 ed64eb6f5b 卸载安装包时,将pkg-name转换为小写 2020-10-19 22:16:59 +08:00
shenmo7192 8f6e5408ae 修改: main.cpp,使用了旧式的DAboutDialog,放弃了定制,可以在ubuntu上运行了。仍然无法打开关于 2020-10-19 15:16:54 +08:00
shenmo7192 d5783458fc update README.md. 2020-10-19 00:14:10 +08:00
shenmo7192 6e05066dd9 update README.md. 2020-10-19 00:11:33 +08:00
shenmo7192 58aa5a3787 update README.md. 2020-10-19 00:10:21 +08:00
shenmo7192 6087c8a5c8 update README.md. 2020-10-18 10:13:06 +08:00
shenmo7192 ff758946be update README.md. 2020-10-18 10:12:30 +08:00
shenmo7192 d1cbf95447 update README.md. 2020-10-18 10:11:18 +08:00
Jerry 187ce7e277 编译说明增加一个组件 2020-10-16 15:07:18 +08:00
shenmo7192 d3e4f75254 !11 修复中文环境无法显示通知的问题
Merge pull request !11 from lidanger/master
2020-10-15 15:12:53 +08:00
lidanger 949eb33511 修复中文环境通知,上次少加两行初始化代码 2020-10-14 22:20:55 +08:00
lidanger 3f65002dc9 修复中文环境无法显示通知的问题 2020-10-14 20:57:32 +08:00
RigoLigoRLC cfd4c7689a RigoLigo合并随机崩溃的修复 2020-10-09 02:08:01 +08:00
RigoLigoRLC 367c8d857c 修复 加载应用程序信息时随机崩溃
这个问题就是因为在异步操作时直接修改GUI,导致事件发生时GUI与异步加载线程不同步导致程序崩溃。将所有加载操作已移至
SpkAppInfoLoaderThread,在其需要操作GUI时阻塞该工作线程并发射信号让主线程操作GUI,以解决该问题。
2020-10-09 02:06:28 +08:00
shenmo7192 b41f846ea4 2.0.2.3,修复depend 2020-10-07 22:08:13 +08:00
shenmo7192 1dcd7d1c5c fr 2020-10-06 19:48:14 +08:00
shenmo7192 01ac388f50 更改qm名字适配dtk 2020-10-06 17:25:25 +08:00
shenmo7192 cfbbd34695 !9 add trans/lang_French.ts.
Merge pull request !9 from App4Deepin/N/A
2020-10-06 09:33:16 +08:00
App4Deepin b7afc5ec8a add trans/lang_French.ts. 2020-10-05 23:34:27 +08:00
shenmo7192 b911158274 修改: trans/spark-store_en.ts
修改:     trans/spark-store_zh_CN.qm,支持了贡献翻译
	修改:     trans/spark-store_zh_CN.ts,支持贡献翻译
	修改:     widget.cpp,微调原文,天加两个tips
2020-10-05 22:11:38 +08:00
shenmo7192 67c28d0224 删除构建文件 2020-10-05 22:04:13 +08:00
shenmo7192 1d65bfc66d 版本号不再翻译,贡献翻译按钮翻译。to-do:翻译按界面翻译 2020-10-05 19:49:37 +08:00
shenmo7192 0e595db328 logo 2020-10-05 10:44:20 +08:00
shenmo7192 7a16028e38 logo 2020-10-05 10:44:08 +08:00
RigoLigoRLC 1b56d3ad52 更改贡献翻译按钮提示框为DDialog,并修复遗留翻译问题 2020-10-04 00:13:06 +08:00
shenmo7192 431e7b555f dwine5-dwine2-tags 2020-10-03 11:26:21 +08:00
RigoLigoRLC 1cbabe7cc5 详情页面添加翻译按钮 2020-10-03 01:30:05 +08:00
shenmo7192 d027d513a3 微调界面 2020-10-02 21:33:03 +08:00
RigoLigoRLC eff8878e8b 修复下载软件失败导致的崩溃,更改APT源更新逻辑
下载失败会导致发射的progress信号已接受数和总数均为0,导致计算进度时被零除;
APT源更新逻辑代码重构,将需要复用的值单独创建变量,重新格式化代码,以及加入了已经废弃的星火源降低优先级代码
2020-10-02 12:03:40 +08:00
shenmo7192 f0bf0e5aec 微调翻译,增添翻译 2020-10-01 10:12:13 +08:00
RigoLigoRLC 678a4229f7 将通知移至专用函数,并更新中文翻译ts文件 2020-10-01 02:53:10 +08:00
shenmo7192 e89c14b5ca QObject::tr---update-ubuntu-tag 2020-09-30 15:39:30 +08:00
RigoLigoRLC d4c734627a 添加了用户端QtCreator配置缓存的忽略 2020-09-30 01:07:42 +08:00
shenmo7192 8830b14e10 translate#4 2020-09-29 19:49:35 +08:00
shenmo7192 8c9f5b8ba6 尝试添加tag.Trying to add tags 2020-09-29 17:44:55 +08:00
shenmo7192 badc3aa089 translate-to-English 2020-09-29 17:18:43 +08:00
shenmo7192 9c9317dea0 更多的翻译 2020-09-29 12:37:49 +08:00
shenmo7192 594f71f98a 英文 2020-09-28 19:50:39 +08:00
shenmo7192 c45bf8ffaf !8 菜单新增“软件投稿”选项,添加刷新按钮
Merge pull request !8 from RigoLigo/master
2020-09-28 11:04:35 +08:00
RigoLigoRLC c9c0357646 新增刷新按钮(和WebEngineView的右键菜单并存) 2020-09-27 15:02:41 +08:00
RigoLigoRLC bd8f660fe9 菜单中加入投稿按钮,拉起默认浏览器进入投稿
https://gitee.com/deepin-community-store/spark-store/issues/I1VD2Q
2020-09-27 02:06:40 +08:00
shenmo7192 538c742303 !7 新增了下载app.json或图标失败将给用户发送提醒
Merge pull request !7 from RigoLigo/master
2020-09-26 10:36:42 +08:00
RigoLigoRLC c23e816017 新增 下载app.json或图标失败将给用户发送提醒
这里改变了widget这个类里面loadappinfo的返回值,使处理异常返回状态可以实现
2020-09-26 01:19:57 +08:00
shenmo7192 2be0e1b523 2.0+1发布 2020-09-23 17:32:26 +08:00
shenmo7192 eacc56eaf3 完全改好了 2020-09-23 17:30:46 +08:00
shenmo7192 9458bbf2c9 更新DAboutDialog 2020-09-23 16:08:44 +08:00
moshengren e472ba76f1 !6 Update of english translations
Merge pull request !6 from alvarosamudio/master
2020-09-19 10:20:37 +08:00
alvarosamudio 74bd3ae018 update trans/lang_English.ts. 2020-09-18 23:57:40 +08:00
Jerry ccc2bb8898 更新README 2020-09-18 15:46:43 +08:00
shenmo7192 a59e2e0527 fanyi 2020-09-18 12:36:42 +08:00
shenmo7192 2c205bf5db 翻译 2020-09-17 16:49:23 +08:00
shenmo7192 efc6c50f88 微调DAboutDialogue内容 2020-09-12 13:36:37 +08:00
shenmo7192 ce263c3cb4 更新翻译 2020-09-12 13:29:34 +08:00
shenmo7192 78ac339629 翻译更新 2020-09-11 13:36:29 +08:00
shenmo7192 58359aa63a !5 更新了图片服务器 线路说明转移到服务端上
Merge pull request !5 from Jerry/master
2020-09-08 17:20:58 +08:00
jerry e839f7836f 不在客户端现实线路说明, 线路说明写到server.list中 2020-09-08 15:31:55 +08:00
jerry b34c50d2e0 图片服务器使用jsdelivr cdn 2020-09-08 14:19:47 +08:00
jerry 4d4e3e3e3a 更新图片服务器 2020-09-05 18:20:14 +08:00
jerry 10741a1d92 更新了线路说明, 更具有普适性 2020-09-03 18:40:04 +08:00
maicss b78ca0e103 新增 软件标签 2020-09-03 10:05:48 +08:00
maicss 3a0ed16a21 Merge branch 'master' of https://gitee.com/deepin-community-store/spark-store 2020-09-02 14:28:52 +08:00
maicss 0a3d583d76 优化UI细节 2020-09-02 14:28:09 +08:00
张天怿 f5121a0405 Delete .pro.user files
Delete useless .pro.user files.
2020-09-01 11:03:20 +08:00
Maicss e568ddafba 更新 文档
Merge pull request !2 from Jerry/master
2020-08-29 07:42:02 +08:00
jerry 111174a46f update 2020-08-29 00:43:36 +08:00
jerry 6de25a299f update readme 2020-08-29 00:41:23 +08:00
jerry cbd57a3e25 增加线路说明, 如何编译的说明 2020-08-29 00:27:02 +08:00
maicss 6e083f295b 新增 深度安装器安装选项 2020-08-28 15:03:10 +08:00
maicss b82a821d01 修复UI细节问题 2020-08-28 14:45:39 +08:00
Maicss 6578af935e 优化UI 2020-08-26 19:58:42 +08:00
Maicss fe4143a3f7 修改 web控件 2020-08-26 09:39:55 +08:00
Maicss 8952be33c4 修改 web控件 2020-08-26 09:27:34 +08:00
Maicss 4e4f55995e 修改 web控件 2020-08-26 09:26:59 +08:00
张天怿 7af2af64d8 Update image server
Change image server.
2020-08-24 12:44:03 +08:00
张天怿 e7276662f4 Add new server
Change default serverURL for better usage exxperience.
2020-08-23 20:11:02 +08:00
shenmo7192 4138c5d634 bug 2020-08-22 09:38:49 +08:00
shenmo7192 2bb4feec43 7+2——更改源服务器 2020-08-21 17:29:05 +08:00
Maicss 18c3965742 追加 上一条 2020-08-10 12:36:00 +08:00
Maicss 647fb20f1e 删除 标题栏分割线
修复 下载列表间隙问题
2020-08-10 12:34:51 +08:00
Maicss a75ecd3a9a 增强 稳定性 2020-08-10 09:27:07 +08:00
Maicss f9b8faa638 优化 UI细节 2020-08-09 09:08:39 +08:00
Maicss f39890240f 添加 返回列表按钮 2020-08-08 09:12:46 +08:00
Maicss 3ca8fac6f9 新增 列表ui图标 2020-08-07 10:32:38 +08:00
Maicss 9fbe0032b7 优化 截图的缓存机制 2020-08-06 20:03:17 +08:00
Maicss 3ba66f8f8e update 2020-08-06 16:55:06 +08:00
Maicss cf1322bab4 删除 无用文件 2020-08-05 20:03:48 +08:00
Maicss 135d16d068 修改 版本号到beta7 2020-08-05 20:00:13 +08:00
Maicss 44201a8bed 修复 低分辨率下默认只显示1列 2020-08-05 19:58:23 +08:00
Maicss 8fafd7b3ee 大幅修改UI设计 2020-08-05 19:49:39 +08:00
Maicss 070788d50d 新增 黑色模式 2020-08-05 10:35:50 +08:00
Maicss 0e387acfb6 修复ssinstall安装参数问题 2020-08-04 14:41:57 +08:00
Maicss c043542c04 更换 详情页专有服务器 2020-08-04 13:34:42 +08:00
Maicss 25b37ec0f2 更新 2020-08-04 10:27:06 +08:00
Maicss a732269b62 新增 安装方式选择 2020-08-04 10:01:05 +08:00
Maicss 6d63ef60ac 新增 安装方式选择 2020-08-04 09:57:21 +08:00
张天怿 25456a413c 添加“手动安装”按钮
添加手动安装按钮来处理部分 gdebi 无法正确安装的应用(主要是 wine 应用)。
2020-08-03 18:25:08 +08:00
Maicss ec1c91f021 修复 截图放大后可能会溢出屏幕 2020-07-29 20:51:18 +08:00
Maicss 46c1609d58 修改 截图预览背景参数 2020-07-28 17:31:00 +08:00
Maicss 9c5421133f 新增 预览截图时背景模糊
新增 打开下载文件夹功能
修复 取消下载被判定为下载失败
2020-07-28 17:08:47 +08:00
Maicss 114489c3d6 重写了截图查看窗口 2020-07-28 13:58:48 +08:00
Maicss 101a6bc370 修复 因ObjectName更改导致无法自动连接的问题 2020-07-28 13:04:49 +08:00
Maicss 9b47e4dd70 修改 左侧菜单为QPushButton 2020-07-28 12:56:15 +08:00
Maicss 6a555b06b9 修改 左侧菜单跟随系统活动色 2020-07-28 11:48:40 +08:00
Maicss 145b1b8e30 修复 下载未完成时断网,会显示下载成功 2020-07-28 10:38:03 +08:00
Maicss 23d8e9ea82 更新 版本号 2020-07-28 08:26:06 +08:00
Maicss f723007166 优化 UI 2020-07-27 12:05:40 +08:00
Maicss e0639a5855 修改 搜索框事件 2020-07-27 10:26:12 +08:00
Maicss 514be30e04 新增 链接分享 2020-07-27 10:20:50 +08:00
Maicss 817d497f4a 更新 文档中Url列表错误 2020-07-27 09:41:26 +08:00
shenmo7192 8158159bf9 跟随 2020-07-26 11:32:48 +08:00
shenmo7192 82f49c4aa9 跟随 2020-07-24 10:00:05 +08:00
shenmo7192 b1c2b1bbc6 跟随到5.2 2020-07-13 19:26:09 +08:00
shenmo7192 892766470c 跟随到beta5 2020-07-09 09:05:50 +08:00
shenmo7192 a3ca04ddc5 更新到spark,加入apt-list的修改功能 2020-07-04 12:09:35 +08:00
shenmo7192 147258a7ac SparkProject 2020-07-03 20:53:58 +08:00
shenmo7192 68269577c0 beta3更新 2020-07-03 11:53:47 +08:00
shenmo7192 58304f2c19 优化了app.json解析 2020-07-01 20:54:42 +08:00
shenmo7192 4a4c1ce5a6 更新readme 2020-06-27 16:27:45 +08:00
shenmo7192 536377d013 对接了web 2020-06-26 18:34:15 +08:00
shenmo7192 72501163d4 更新 2020-06-26 14:34:49 +08:00
8e3f235910 跟随
提交者:沫 <jifengshenmo@outlook.com>
	修改:     downloadlist.cpp
	修改:     downloadlist.h
	修改:     downloadlist.ui
	新文件:   server.list
	修改:     widget.cpp
	修改:     widget.h
	修改:     widget.ui
2020-06-26 08:22:04 +08:00
shenmo7192 5c8ee91a76 优化下载列表 2020-06-25 18:43:28 +08:00
shenmo7192 20e4d3545a 简单的修改 2020-06-25 14:46:23 +08:00
shenmo7192 c0213cbf1d 跟随update 2020-06-24 15:48:32 +08:00
shenmo7192 05cf008ef9 修改终端为默认终端 2020-06-24 09:07:16 +08:00
shenmo7192 a3ba3bab04 跟上maicss的提交 2020-06-23 19:27:10 +08:00
221ec4e926 跟上maicss 2020-06-23 15:47:35 +08:00
“shenmo” 1bbf51981f 跟紧maicss 2020-06-23 01:09:50 +08:00
shenmo7192 55652d9b9e 地址写错了,修改下 2020-06-22 13:48:11 +08:00
shenmo7192 761a73529e 地址写错了,修改下 2020-06-22 13:47:52 +08:00
shenmo7192 82bec38977 再次更新进度 2020-06-22 13:35:27 +08:00
“shenmo” 6799573bbf 更新了url.h,已经追赶上maicss上游 2020-06-21 23:30:07 +08:00
“shenmo” dc5b4312ac “跟紧上游” 2020-06-21 23:22:55 +08:00
shenmo7192 820d3243c2 去除了https避免证书验证问题 2020-06-21 22:43:27 +08:00
shenmo7192 0ca8cd7a35 修改了地址 2020-06-21 22:34:19 +08:00
Maicss d45fc66867 20200621投递 2020-06-21 08:58:48 +08:00
Maicss e1767420ef 修改了传递介质为json 2020-06-18 19:04:16 +08:00
Maicss 994dd35a97 细微修改 2020-06-17 17:00:17 +08:00
Maicss 873c52e602 提交 2020-06-17 16:52:52 +08:00
Maicss 7706414ff9 删除文件 README.en.md 2020-06-17 16:49:35 +08:00
Maicss 92fbdb1fb4 Initial commit 2020-06-17 16:49:25 +08:00
2488 changed files with 15374 additions and 419938 deletions
-139
View File
@@ -1,139 +0,0 @@
---
description: Bug 修复流程
---
## 工作流说明
此工作流指导如何修复 Bug。
## 步骤
### 1. 复现 Bug
- 根据 Issue 描述复现问题
- 记录详细的复现步骤
- 收集相关日志和错误信息
- 确认环境信息
### 2. 分析问题
- 查看相关代码
- 使用调试器定位问题
- 检查日志输出
- 识别根本原因
### 3. 创建修复分支
```bash
git checkout -b fix/your-bug-fix
```
### 4. 编写回归测试
先编写测试来复现 Bug
```typescript
// src/__tests__/unit/bugFix.test.ts
import { describe, it, expect } from "vitest";
import { buggyFunction } from "@/modules/example";
describe("buggyFunction", () => {
it("should not crash with null input", () => {
expect(() => buggyFunction(null)).not.toThrow();
});
});
```
### 5. 修复代码
- 最小化修改
- 保持代码可读性
- 添加必要的注释
- 更新相关类型定义
### 6. 运行测试
```bash
# 确保新测试通过
npm run test
# 运行所有测试
npm run test:all
# 代码检查
npm run lint
npm run format
```
### 7. 本地验证
- 验证 Bug 已修复
- 测试相关功能
- 检查是否引入新问题
- 测试边界情况
### 8. 更新文档
- 更新 CHANGELOG.md(如果需要)
- 更新相关文档(如需要)
### 9. 提交代码
```bash
git add .
git commit -m "fix(scope): describe the bug fix" -s
git push origin fix/your-bug-fix
```
### 10. 创建 Pull Request
- 引用相关 Issue`Fixes #123`
- 描述修复方法
- 说明复现步骤
- 添加测试说明
### 11. 代码审查
- 响应审查意见
- 进行必要的修改
- 确保所有 CI 检查通过
### 12. 合并
- 等待审查批准
- Squash 合并到 main 分支
- 删除修复分支
## 注意事项
- ⚠️ 修复前先理解问题根源
- ⚠️ 最小化修改范围
- ⚠️ 添加回归测试防止复发
- ⚠️ 考虑向后兼容性
- ⚠️ 测试所有受影响的功能
## 常见 Bug 类型
### IPC 通信问题
- 检查事件名称是否匹配
- 检查数据格式是否正确
- 检查异步处理
### 状态管理问题
- 检查响应式依赖
- 检查状态更新时机
- 检查内存泄漏
### 类型错误
- 检查类型定义
- 检查类型断言
- 检查可选值处理
## 相关文档
- [CONTRIBUTING.md](../../CONTRIBUTING.md) - 贡献指南
- [TESTING.md](../../TESTING.md) - 测试文档
- [TROUBLESHOOTING.md](../../TROUBLESHOOTING.md) - 问题排查
-47
View File
@@ -1,47 +0,0 @@
---
description: 为 Spark Store 构建DEB软件包
---
本工作流将指导你如何构建适用于 Linux 的 Spark Store 软件包。
### 1. 安装依赖
确保你已经安装了所有的项目依赖。如果你还没有安装,可以使用 `/run-project` 工作流。
// turbo
```bash
npm install
```
### 2. 构建生产版本
你可以选择构建所有支持的格式,或者仅构建特定的格式(deb 或 rpm)。
#### 构建所有格式 (deb, rpm, AppImage)
// turbo
```bash
npm run build
```
#### 仅构建 deb 包
// turbo
```bash
npm run build:deb
```
### 3. 查看构建产物
构建完成后的安装包将存放在项目根目录下的 `release` 目录中。
```bash
ls -l release/$(node -p "require('./package.json').version")
```
### 4. 常见问题排查
如果构建失败,请检查以下几点:
- 确保 Node.js 版本符合要求 (>= 20.x)。
- 确保系统已安装必要的编译工具。
- 检查 `electron-builder.yml` 中的配置是否正确。
-245
View File
@@ -1,245 +0,0 @@
---
description: 代码审查流程
---
## 工作流说明
此工作流指导如何进行代码审查。
## 审查清单
### 代码质量
- [ ] 代码遵循项目规范
- [ ] TypeScript 类型正确
- [ ] 没有 `any` 类型(除非必要)
- [ ] ESLint 和 Prettier 通过
- [ ] 代码可读性良好
### 功能实现
- [ ] 实现符合需求
- [ ] 边界情况处理
- [ ] 错误处理完善
- [ ] 没有引入新 Bug
### 测试
- [ ] 包含足够的测试
- [ ] 测试覆盖率合理
- [ ] 所有测试通过
- [ ] E2E 测试(如需要)
### 文档
- [ ] 更新了相关文档
- [ ] 代码注释充分
- [ ] API 文档(如需要)
- [ ] CHANGELOG.md(如需要)
### 安全性
- [ ] 没有安全漏洞
- [ ] 输入验证完善
- [ ] 权限检查正确
- [ ] 敏感信息保护
### 性能
- [ ] 没有明显的性能问题
- [ ] 内存使用合理
- [ ] 没有不必要的渲染
- [ ] 资源加载优化
## 审查流程
### 1. 理解变更
- 阅读 PR 描述
- 查看 Issue 链接
- 理解变更目的
- 检查变更范围
### 2. 代码审查
**主进程代码:**
```bash
# 检查类型安全
npx tsc --noEmit
# 检查代码质量
npm run lint
```
**渲染进程代码:**
- 组件结构
- 状态管理
- 事件处理
- 样式实现
### 3. 测试验证
```bash
# 运行单元测试
npm run test
# 运行 E2E 测试
npm run test:e2e
# 检查覆盖率
npm run test:coverage
```
### 4. 提供反馈
**正面反馈:**
- 好的实现
- 优秀的代码
- 有价值的贡献
**建设性反馈:**
- 指出问题
- 提出建议
- 解释原因
**反馈格式:**
````markdown
### 问题
**位置:** `src/components/AppCard.vue:45`
**描述:** 这里缺少错误处理,可能导致应用崩溃。
**建议:**
```typescript
try {
await installPackage();
} catch (error) {
console.error("Install failed:", error);
showError(error.message);
}
```
````
````
### 5. 批准或要求修改
**批准条件:**
- 所有审查项目通过
- 所有测试通过
- CI 检查通过
- 没有阻塞问题
**要求修改:**
- 指出必须修复的问题
- 给出明确的修改建议
- 等待作者响应
## 审查原则
### 及时性
- 尽快响应 PR
- 设定响应时间预期
- 优先处理紧急 PR
### 建设性
- 提供具体的反馈
- 给出改进建议
- 解释审查理由
### 尊重
- 尊重作者的贡献
- 使用礼貌的语言
- 认可好的实现
### 一致性
- 遵循项目规范
- 保持审查标准一致
- 参考之前类似 PR
## 常见问题
### 类型安全问题
**问题:** 使用了 `any` 类型
**建议:**
```typescript
// ❌ 避免
const data: any = response;
// ✅ 推荐
interface ResponseData {
id: string;
name: string;
}
const data: ResponseData = response;
````
### 代码重复
**问题:** 代码重复
**建议:**
```typescript
// 提取公共函数
function formatSize(size: number): string {
return size > 1024 ? `${size / 1024} MB` : `${size} KB`;
}
```
### 错误处理
**问题:** 缺少错误处理
**建议:**
```typescript
async function loadApps() {
try {
const response = await axios.get("/api/apps");
return response.data;
} catch (error) {
logger.error({ err: error }, "Failed to load apps");
throw error;
}
}
```
## 审查后操作
### 批准
- 点击 "Approve review"
- 添加评论(可选)
- 等待合并
### 要求修改
- 选择 "Request changes"
- 提供详细反馈
- 等待作者更新
### 评论
- 选择 "Comment"
- 提供建议或问题
- 不阻止合并
## 相关文档
- [CONTRIBUTING.md](../../CONTRIBUTING.md) - 贡献指南
- [DEVELOPMENT.md](../../DEVELOPMENT.md) - 开发文档
- [AGENTS.md](../../AGENTS.md) - AI 编码指南
-264
View File
@@ -1,264 +0,0 @@
---
description: 文档更新流程
---
## 工作流说明
此工作流指导如何更新项目文档。
## 步骤
### 1. 确定需要更新的文档
根据变更内容确定需要更新的文档:
- README.md - 主要说明
- DEVELOPMENT.md - 开发指南
- CONTRIBUTING.md - 贡献指南
- TESTING.md - 测试文档
- DEPLOYMENT.md - 部署文档
- TROUBLESHOOTING.md - 问题排查
- FAQ.md - 常见问题
- AGENTS.md - AI 编码指南
- CHANGELOG.md - 变更日志
### 2. 创建文档分支
```bash
git checkout -b docs/update-documentation
```
### 3. 更新文档
#### README.md
添加新功能说明:
```markdown
## 新功能
### 应用更新
现在支持一键更新所有可更新的应用。
### 下载管理
改进了下载队列管理,支持暂停和继续。
```
#### DEVELOPMENT.md
添加开发指南:
```markdown
## 新功能开发
### 添加新功能步骤
1. 理解需求
2. 设计方案
3. 实现功能
4. 编写测试
5. 提交 PR
```
#### CONTRIBUTING.md
更新贡献指南:
```markdown
### 新功能贡献
- 遵循现有代码风格
- 编写充分的测试
- 更新相关文档
```
#### TESTING.md
添加测试示例:
```typescript
describe("New Feature", () => {
it("should work correctly", () => {
// 测试代码
});
});
```
#### CHANGELOG.md
添加变更记录:
```markdown
## [4.10.0](https://github.com/elysia-best/apm-app-store/compare/v4.9.9...v4.10.0) (2026-03-10)
### Features
- feat(download): add pause and resume for downloads
- feat(update): add batch update for apps
### Bug Fixes
- fix(ui): correct dark mode toggle persistence
```
### 4. 检查文档质量
- [ ] 语法正确
- [ ] 格式统一
- [ ] 链接有效
- [ ] 内容准确
- [ ] 示例可运行
### 5. 运行文档测试
```bash
# 如果有文档测试
npm run test:docs
# 检查链接
npm run check-links
```
### 6. 本地预览
使用 Markdown 预览工具查看效果。
### 7. 提交文档
```bash
git add .
git commit -m "docs: update documentation for new features" -s
git push origin docs/update-documentation
```
### 8. 创建 Pull Request
- 说明更新的内容
- 提供预览截图(如需要)
- 引用相关 Issue
### 9. 代码审查
- 响应审查意见
- 确保文档质量
- 合并到 main 分支
## 文档编写规范
### 格式规范
- 使用 Markdown
- 保持一致的标题层级
- 使用代码块展示示例
- 使用表格对比选项
### 语言规范
- 使用简洁清晰的语言
- 避免技术术语(或解释)
- 保持中英文术语一致
- 使用被动语态
### 示例规范
```typescript
// 好的示例
import { ref } from "vue";
const count = ref(0);
function increment() {
count.value++;
}
```
### 链接规范
```markdown
- 内部链接: [文档名](./document.md)
- 外部链接: [Vue 文档](https://vuejs.org/)
- 锚点链接: [章节](#section-name)
```
## 文档模板
### 新功能文档
````markdown
## 功能名称
### 描述
简要描述功能
### 使用方法
```typescript
// 示例代码
```
````
### 配置选项
| 选项 | 类型 | 默认值 | 说明 |
| ------ | ------ | --------- | -------- |
| option | string | 'default' | 选项说明 |
### 注意事项
- 注意事项 1
- 注意事项 2
````
### API 文档
```markdown
## API 函数名
### 签名
```typescript
function functionName(param1: Type1, param2: Type2): ReturnType
````
### 参数
| 参数 | 类型 | 必填 | 说明 |
| ------ | ----- | ---- | -------- |
| param1 | Type1 | 是 | 参数说明 |
| param2 | Type2 | 否 | 参数说明 |
### 返回值
| 类型 | 说明 |
| ---------- | ---------- |
| ReturnType | 返回值说明 |
### 示例
```typescript
const result = functionName(arg1, arg2);
```
### 错误
抛出 `Error` 异常的情况说明。
```
## 注意事项
- ⚠️ 保持文档与代码同步
- ⚠️ 更新示例代码
- ⚠️ 检查链接有效性
- ⚠️ 使用统一的格式
- ⚠️ 提供清晰的说明
## 相关文档
- [CONTRIBUTING.md](../../CONTRIBUTING.md) - 贡献指南
- [DEVELOPMENT.md](../../DEVELOPMENT.md) - 开发文档
- [AGENTS.md](../../AGENTS.md) - AI 编码指南
```
-135
View File
@@ -1,135 +0,0 @@
---
description: 新功能开发流程
---
## 工作流说明
此工作流指导如何开发新功能。
## 步骤
### 1. 理解需求
- 阅读 Issue 描述
- 确认功能范围
- 识别依赖关系
- 设计 API 和数据结构
### 2. 设计方案
- 设计 UI/UX(如需要)
- 设计数据流
- 确定 IPC 通信(如需要)
- 编写技术方案文档(可选)
### 3. 创建功能分支
```bash
git checkout -b feature/your-feature-name
```
### 4. 更新类型定义
`src/global/typedefinition.ts` 中添加新的类型定义:
```typescript
export interface NewFeatureData {
id: string;
name: string;
// ...其他字段
}
```
### 5. 编写测试
先编写测试,遵循 TDD 原则:
```typescript
// src/__tests__/unit/newFeature.test.ts
import { describe, it, expect } from "vitest";
import { newFunction } from "@/modules/newFeature";
describe("newFunction", () => {
it("should work correctly", () => {
const result = newFunction(input);
expect(result).toBe(expected);
});
});
```
### 6. 实现功能
按照以下顺序实现:
- 后端逻辑(Electron 主进程)
- 前端逻辑(Vue 组件)
- IPC 通信(如需要)
- 样式和布局
### 7. 运行测试
```bash
# 单元测试
npm run test
# E2E 测试
npm run test:e2e
# 代码检查
npm run lint
npm run format
```
### 8. 本地测试
- 测试所有功能场景
- 测试边界情况
- 测试错误处理
- 检查性能影响
### 9. 更新文档
- 更新 API 文档(如需要)
- 更新用户文档(如需要)
- 更新 CHANGELOG.md
### 10. 提交代码
```bash
git add .
git commit -m "feat(scope): add new feature" -s
git push origin feature/your-feature-name
```
### 11. 创建 Pull Request
- 使用 PR 模板
- 引用相关 Issue
- 添加测试说明
- 添加截图/录屏(UI 变更)
### 12. 代码审查
- 响应审查意见
- 进行必要的修改
- 确保所有 CI 检查通过
### 13. 合并
- 等待审查批准
- Squash 合并到 main 分支
- 删除功能分支
## 注意事项
- ⚠️ 保持 PR 小而聚焦(建议 < 500 行)
- ⚠️ 确保 TypeScript 严格模式通过
- ⚠️ 不引入 `any` 类型(必要时使用 `eslint-disable`
- ⚠️ 所有新功能必须有测试
- ⚠️ 遵循代码规范
## 相关文档
- [CONTRIBUTING.md](../../CONTRIBUTING.md) - 贡献指南
- [DEVELOPMENT.md](../../DEVELOPMENT.md) - 开发文档
- [TESTING.md](../../TESTING.md) - 测试文档
@@ -1,333 +0,0 @@
---
description: 性能优化流程
---
## 工作流说明
此工作流指导如何优化应用性能。
## 步骤
### 1. 识别性能问题
使用工具分析性能:
- Chrome DevTools Performance
- Vue DevTools
- Vite Build Analysis
- 内存分析工具
### 2. 分析瓶颈
确定性能瓶颈:
- 渲染性能
- 网络请求
- 内存使用
- CPU 使用
- 磁盘 I/O
### 3. 创建优化分支
```bash
git checkout -b perf/optimize-performance
```
### 4. 添加性能测试
```typescript
// src/__tests__/perf/performance.test.ts
import { describe, it, expect } from "vitest";
import { heavyFunction } from "@/modules/example";
describe("heavyFunction", () => {
it("should complete within 100ms", () => {
const start = performance.now();
heavyFunction();
const duration = performance.now() - start;
expect(duration).toBeLessThan(100);
});
});
```
### 5. 实施优化
#### 渲染性能优化
```typescript
// 使用 computed 缓存计算结果
const filteredApps = computed(() => {
return apps.value.filter(app => app.category === selectedCategory);
});
// 使用 v-memo 优化列表渲染
<template>
<div v-for="app in apps" :key="app.pkgname" v-memo="[app.id]">
{{ app.name }}
</div>
</template>
// 防抖和节流
import { debounce } from 'lodash-es';
const debouncedSearch = debounce((query: string) => {
searchApps(query);
}, 300);
```
#### 网络请求优化
```typescript
// 使用缓存
const appCache = new Map<string, App[]>();
async function fetchApps(category: string): Promise<App[]> {
if (appCache.has(category)) {
return appCache.get(category)!;
}
const apps = await axios.get(`/api/apps/${category}`);
appCache.set(category, apps.data);
return apps.data;
}
// 并发请求
const [apps1, apps2] = await Promise.all([
fetchApps("category1"),
fetchApps("category2"),
]);
```
#### 内存优化
```typescript
// 及时清理事件监听
onMounted(() => {
window.addEventListener("resize", handleResize);
});
onUnmounted(() => {
window.removeEventListener("resize", handleResize);
});
// 避免内存泄漏
let timer: number;
function startTimer() {
clearInterval(timer);
timer = setInterval(() => {
// 定时任务
}, 1000);
}
onUnmounted(() => {
clearInterval(timer);
});
```
#### 代码分割
```typescript
// 动态导入组件
const AppDetailModal = defineAsyncComponent(
() => import("@/components/AppDetailModal.vue"),
);
// 路由懒加载
const routes = [
{
path: "/app/:id",
component: () => import("@/views/AppDetail.vue"),
},
];
```
### 6. 测试性能
```bash
# 运行性能测试
npm run test:perf
# 使用 DevTools 分析
# 1. 打开 DevTools
# 2. 切换到 Performance 标签
# 3. 点击 Record
# 4. 执行操作
# 5. 停止录制并分析
```
### 7. 对比优化效果
记录优化前后的数据:
- 渲染时间
- 内存使用
- 网络请求数
- 应用启动时间
### 8. 验证功能
```bash
# 确保功能正常
npm run test
# 手动测试主要流程
```
### 9. 代码审查
检查优化是否:
- 提升了性能
- 没有破坏功能
- 代码可读
- 易于维护
### 10. 更新文档
- 记录优化内容
- 更新性能指标
- 添加优化说明
### 11. 提交代码
```bash
git add .
git commit -m "perf(scope): optimize performance" -s
git push origin perf/optimize-performance
```
### 12. 创建 Pull Request
- 说明优化内容
- 提供性能对比
- 展示优化效果
## 性能优化清单
### 渲染性能
- [ ] 使用 computed 缓存
- [ ] 使用 v-memo 优化
- [ ] 避免不必要的重新渲染
- [ ] 使用虚拟滚动(大数据集)
- [ ] 图片懒加载
### 网络性能
- [ ] 减少请求数量
- [ ] 使用缓存
- [ ] 压缩资源
- [ ] 使用 CDN
- [ ] 并发请求
### 内存性能
- [ ] 清理事件监听
- [ ] 避免内存泄漏
- [ ] 释放不再使用的资源
- [ ] 使用对象池(如需要)
- [ ] 优化数据结构
### 构建性能
- [ ] 代码分割
- [ ] Tree shaking
- [ ] 压缩代码
- [ ] 优化依赖
- [ ] 使用缓存
## 性能监控
### 关键指标
- **FCP (First Contentful Paint):** < 1.5s
- **LCP (Largest Contentful Paint):** < 2.5s
- **TTI (Time to Interactive):** < 3.5s
- **CLS (Cumulative Layout Shift):** < 0.1
- **FID (First Input Delay):** < 100ms
### 监控工具
```typescript
// 使用 Performance API
const perfData = performance.getEntriesByType("navigation")[0];
console.log("Page Load Time:", perfData.loadEventEnd - perfData.fetchStart);
// 使用 Vue DevTools
// 监控组件渲染时间
```
## 常见性能问题
### 1. 大列表渲染
**问题:** 渲染大量数据导致卡顿
**解决方案:**
```vue
<template>
<RecycleScroller :items="largeList" :item-size="50" key-field="id">
<template #default="{ item }">
<div>{{ item.name }}</div>
</template>
</RecycleScroller>
</template>
```
### 2. 频繁的 DOM 更新
**问题:** 频繁更新 DOM 导致性能下降
**解决方案:**
```typescript
// 使用 requestAnimationFrame
function animate() {
updatePosition();
requestAnimationFrame(animate);
}
```
### 3. 内存泄漏
**问题:** 内存持续增长
**解决方案:**
```typescript
// 及时清理
onUnmounted(() => {
clearInterval(timer);
removeEventListener("resize", handleResize);
clearTimeout(timeout);
});
```
### 4. 不必要的计算
**问题:** 重复计算相同结果
**解决方案:**
```typescript
// 使用 computed
const expensiveValue = computed(() => {
return heavyCalculation(data.value);
});
```
## 注意事项
- ⚠️ 不要过早优化
- ⚠️ 先测量再优化
- ⚠️ 保持代码可读
- ⚠️ 避免过度优化
- ⚠️ 持续监控性能
## 相关文档
- [DEVELOPMENT.md](../../DEVELOPMENT.md) - 开发文档
- [TESTING.md](../../TESTING.md) - 测试文档
- [TROUBLESHOOTING.md](../../TROUBLESHOOTING.md) - 问题排查
-284
View File
@@ -1,284 +0,0 @@
---
description: 代码重构流程
---
## 工作流说明
此工作流指导如何安全地重构代码。
## 步骤
### 1. 识别重构需求
分析代码中的问题:
- 代码重复
- 复杂度过高
- 性能问题
- 可读性差
- 难以维护
### 2. 制定重构计划
- 确定重构范围
- 列出具体改进点
- 评估影响范围
- 制定测试策略
### 3. 创建重构分支
```bash
git checkout -b refactor/your-refactor
```
### 4. 编写测试
如果代码缺少测试,先添加测试:
```typescript
// src/__tests__/unit/refactorTarget.test.ts
import { describe, it, expect } from "vitest";
import { functionToRefactor } from "@/modules/example";
describe("functionToRefactor", () => {
it("should maintain existing behavior", () => {
const result = functionToRefactor(input);
expect(result).toBe(expected);
});
});
```
### 5. 逐步重构
**原则:**
- 小步迭代
- 保持测试通过
- 不改变外部行为
**示例:**
```typescript
// 重构前
function processApp(app: any) {
if (app) {
return {
name: app.name,
pkgname: app.pkgname,
version: app.version,
};
}
return null;
}
// 重构后 - 添加类型
interface App {
name: string;
pkgname: string;
version: string;
}
function processApp(app: App | null): App | null {
if (!app) return null;
return {
name: app.name,
pkgname: app.pkgname,
version: app.version,
};
}
```
### 6. 运行测试
```bash
# 每次重构后运行测试
npm run test
# 确保所有测试通过
npm run test:all
```
### 7. 性能验证
如果重构涉及性能:
```bash
# 运行性能测试
npm run test:perf
# 对比重构前后性能
```
### 8. 代码审查
自我检查:
- 代码更清晰
- 性能未下降
- 测试全部通过
- 没有引入新问题
### 9. 更新文档
- 更新相关文档
- 添加注释说明
- 更新 CHANGELOG.md
### 10. 提交代码
```bash
git add .
git commit -m "refactor(scope): describe the refactoring" -s
git push origin refactor/your-refactor
```
### 11. 创建 Pull Request
- 说明重构原因
- 展示改进效果
- 提供性能对比(如需要)
### 12. 代码审查
- 响应审查意见
- 确保所有测试通过
- 合并到 main 分支
## 重构原则
### 不改变外部行为
- 保持 API 兼容
- 保持输出一致
- 保持错误处理
### 小步迭代
- 每次只改一处
- 频繁运行测试
- 及时提交代码
### 测试驱动
- 先写测试
- 重构代码
- 确保通过
### 保持简单
- 减少复杂度
- 提高可读性
- 增强可维护性
## 常见重构模式
### 提取函数
```typescript
// 重构前
function processApps(apps: App[]) {
for (const app of apps) {
if (app.installed) {
console.log(app.name + " is installed");
}
}
}
// 重构后
function logInstalledApp(app: App) {
if (app.installed) {
console.log(`${app.name} is installed`);
}
}
function processApps(apps: App[]) {
apps.forEach(logInstalledApp);
}
```
### 提取类型
```typescript
// 重构前
function createDownload(data: any) {
return {
id: data.id,
name: data.name,
pkgname: data.pkgname,
};
}
// 重构后
interface DownloadData {
id: number;
name: string;
pkgname: string;
}
function createDownload(data: DownloadData): DownloadItem {
return {
id: data.id,
name: data.name,
pkgname: data.pkgname,
status: "queued",
progress: 0,
downloadedSize: 0,
totalSize: 0,
speed: 0,
timeRemaining: 0,
startTime: Date.now(),
logs: [],
source: "APM Store",
retry: false,
};
}
```
### 简化条件
```typescript
// 重构前
function getStatus(status: string): string {
if (status === "queued") {
return "Queued";
} else if (status === "downloading") {
return "Downloading";
} else if (status === "installing") {
return "Installing";
} else if (status === "completed") {
return "Completed";
} else if (status === "failed") {
return "Failed";
} else {
return "Unknown";
}
}
// 重构后
const statusMap: Record<string, string> = {
queued: "Queued",
downloading: "Downloading",
installing: "Installing",
completed: "Completed",
failed: "Failed",
};
function getStatus(status: string): string {
return statusMap[status] || "Unknown";
}
```
## 注意事项
- ⚠️ 不要在重构中引入新功能
- ⚠️ 不要同时重构多处
- ⚠️ 确保测试覆盖充分
- ⚠️ 保持提交历史清晰
- ⚠️ 及时回退有问题的重构
## 相关文档
- [CONTRIBUTING.md](../../CONTRIBUTING.md) - 贡献指南
- [DEVELOPMENT.md](../../DEVELOPMENT.md) - 开发文档
- [TESTING.md](../../TESTING.md) - 测试文档
-211
View File
@@ -1,211 +0,0 @@
---
description: 发布流程
---
## 工作流说明
此工作流指导如何发布新版本。
## 步骤
### 1. 更新版本号
```bash
# 更新版本
npm version patch # 1.0.0 → 1.0.1
npm version minor # 1.0.0 → 1.1.0
npm version major # 1.0.0 → 2.0.0
# 或手动编辑 package.json
```
### 2. 更新 CHANGELOG.md
```bash
# 生成变更日志
npm run changelog
```
或手动更新:
```markdown
## [1.0.1](https://github.com/elysia-best/apm-app-store/compare/v1.0.0...v1.0.1) (2026-03-10)
### Bug Fixes
- fix(ui): correct dark mode toggle persistence (#123)
### Features
- feat(install): add retry mechanism for failed installations (#124)
```
### 3. 运行完整测试
```bash
# 运行所有测试
npm run test:all
# 运行代码检查
npm run lint
npm run format
# 构建项目
npm run build:vite
```
### 4. 提交变更
```bash
git add .
git commit -m "chore(release): bump version to x.x.x" -s
git push origin main
```
### 5. 创建 Git 标签
```bash
# 创建标签
git tag v{version}
# 推送标签
git push origin v{version}
```
### 6. 触发 CI 构建
推送标签后会自动触发 GitHub Actions 构建。
### 7. 验证构建
在 GitHub Actions 页面查看:
- 所有测试通过
- 构建成功
- 构建产物生成
### 8. 检查 Release
GitHub Actions 会自动创建 Release
- 访问 Releases 页面
- 检查版本信息
- 确认构建产物
### 9. 发布说明
如果需要,更新 Release 说明:
- 添加主要变更
- 添加已知问题
- 添加升级说明
### 10. 通知用户
- 更新 README
- 发布公告
- 通知用户
## 发布检查清单
### 代码质量
- [ ] 所有测试通过
- [ ] 代码检查通过
- [ ] 没有已知严重 Bug
- [ ] 性能测试通过
### 文档
- [ ] CHANGELOG.md 更新
- [ ] README.md 更新(如需要)
- [ ] API 文档更新(如需要)
### 构建
- [ ] 本地构建成功
- [ ] CI 构建成功
- [ ] 构建产物正确
### 发布
- [ ] 版本号正确
- [ ] 标签已推送
- [ ] Release 已创建
- [ ] 构建产物已上传
## 版本号规范
遵循 [Semantic Versioning](https://semver.org/)
- **MAJOR:** 不兼容的 API 变更
- **MINOR:** 向后兼容的功能新增
- **PATCH:** 向后兼容的 Bug 修复
### 示例
```
4.9.9 → 4.9.10 (PATCH: Bug 修复)
4.9.9 → 4.10.0 (MINOR: 新功能)
4.9.9 → 5.0.0 (MAJOR: 重大变更)
```
## 发布后
### 更新开发分支
```bash
git checkout develop
git merge main
git push origin develop
```
### 监控反馈
- 收集用户反馈
- 监控 Bug 报告
- 记录性能数据
### 准备下一个版本
- 创建新的 Issue
- 规划新功能
- 评估技术债务
## 回滚流程
如果发现严重问题:
### 1. 立即停止推广
- 通知用户暂停升级
- 更新下载页面
### 2. 修复问题
```bash
git checkout main
git checkout -b fix/critical-issue
# 修复问题
git push origin fix/critical-issue
```
### 3. 紧急发布
```bash
npm version patch
git tag -a v{x.x.x} -m "Hotfix: description"
git push origin v{x.x.x}
```
### 4. 通知用户
- 发布新版本
- 说明问题和修复
- 提供升级说明
## 相关文档
- [DEPLOYMENT.md](../../DEPLOYMENT.md) - 部署文档
- [CONTRIBUTING.md](../../CONTRIBUTING.md) - 贡献指南
- [CHANGELOG.md](../../CHANGELOG.md) - 变更日志
-47
View File
@@ -1,47 +0,0 @@
---
description: 运行项目 (自动安装依赖)
---
## 工作流说明
此工作流将检查运行环境,自动安装缺失的依赖,并启动开发服务器。
## 步骤
### 1. 检查 Node.js 环境
确保已安装 Node.js 和 npm。
// turbo
```bash
node -v && npm -v
```
### 2. 检查并安装依赖
检查 `node_modules` 是否存在。如果不存在,将自动运行 `npm install`
// turbo
```bash
if [ ! -d "node_modules" ]; then
echo "检测到缺少依赖,正在安装..."
npm install
else
echo "依赖已安装,准备启动..."
fi
```
### 3. 运行开发服务器
启动项目开发模式。
// turbo
```bash
npm run dev
```
## 注意事项
- 首次运行可能需要一些时间安装依赖。
- 如果安装失败,请手动运行 `npm install` 查看详细错误。
- 确保您的系统中已安装并配置好 Electron 所需的系统依赖。
-435
View File
@@ -1,435 +0,0 @@
---
description: 安全审计流程
---
## 工作流说明
此工作流指导如何进行安全审计。
## 步骤
### 1. 确定审计范围
确定需要审计的方面:
- 代码安全
- 依赖安全
- 数据安全
- 网络安全
- 权限管理
### 2. 创建审计分支
```bash
git checkout -b security/security-audit
```
### 3. 代码安全审计
#### 检查 SQL 注入
```typescript
// ❌ 不安全
const query = `SELECT * FROM apps WHERE name = '${appName}'`;
// ✅ 安全
const query = "SELECT * FROM apps WHERE name = ?";
db.query(query, [appName]);
```
#### 检查 XSS 攻击
```typescript
// ❌ 不安全
element.innerHTML = userInput;
// ✅ 安全
element.textContent = userInput;
// 或使用 DOMPurify
import DOMPurify from "dompurify";
element.innerHTML = DOMPurify.sanitize(userInput);
```
#### 检查命令注入
```typescript
// ❌ 不安全
const cmd = `apm install ${packageName}`;
exec(cmd);
// ✅ 安全
const args = ["apm", "install", packageName];
spawn("apm", args);
```
#### 检查路径遍历
```typescript
// ❌ 不安全
const filePath = path.join(basePath, userInput);
// ✅ 安全
const safePath = path.normalize(userInput).replace(/^(\.\.(\/|\\|$))+/, "");
const filePath = path.join(basePath, safePath);
```
### 4. 依赖安全审计
```bash
# 检查依赖漏洞
npm audit
# 自动修复
npm audit fix
# 手动修复
npm audit fix --force
```
#### 检查 package.json
```json
{
"dependencies": {
"axios": "^1.13.2",
"pino": "^10.3.0"
},
"devDependencies": {
"@playwright/test": "^1.40.0"
}
}
```
### 5. 数据安全审计
#### 检查敏感信息
```typescript
// ❌ 不安全 - 硬编码密钥
const apiKey = "sk-1234567890";
// ✅ 安全 - 使用环境变量
const apiKey = process.env.API_KEY;
// ❌ 不安全 - 记录敏感信息
logger.info({ password: user.password }, "User logged in");
// ✅ 安全 - 不记录敏感信息
logger.info({ userId: user.id }, "User logged in");
```
#### 检查数据加密
```typescript
// 加密敏感数据
import crypto from "crypto";
function encrypt(text: string, key: string): string {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
let encrypted = cipher.update(text, "utf8", "hex");
encrypted += cipher.final("hex");
return iv.toString("hex") + ":" + encrypted;
}
```
### 6. 网络安全审计
#### 检查 HTTPS
```typescript
// ❌ 不安全 - HTTP
const baseURL = "http://api.example.com";
// ✅ 安全 - HTTPS
const baseURL = "https://api.example.com";
```
#### 检查证书验证
```typescript
// 配置 Axios 验证证书
const axiosInstance = axios.create({
httpsAgent: new https.Agent({
rejectUnauthorized: true,
}),
});
```
#### 检查 CORS
```typescript
// 配置 CORS
app.use(
cors({
origin: "https://yourdomain.com",
credentials: true,
}),
);
```
### 7. 权限管理审计
#### 检查权限提升
```typescript
// 检查 pkexec 可用性
const checkSuperUserCommand = async (): Promise<string> => {
if (process.getuid && process.getuid() !== 0) {
const { stdout } = await execAsync("which /usr/bin/pkexec");
return stdout.trim().length > 0 ? "/usr/bin/pkexec" : "";
}
return "";
};
```
#### 检查上下文隔离
```typescript
// electron/preload/index.ts
// ✅ 安全 - 启用上下文隔离
contextBridge.exposeInMainWorld("ipcRenderer", {
send: (...args) => ipcRenderer.send(...args),
on: (...args) => ipcRenderer.on(...args),
invoke: (...args) => ipcRenderer.invoke(...args),
});
// ❌ 不安全 - 禁用上下文隔离
contextIsolation: false;
```
### 8. 运行安全工具
```bash
# 使用 Snyk 扫描
npx snyk test
# 使用 npm audit
npm audit
# 使用 ESLint 安全规则
npm run lint
```
### 9. 修复安全问题
根据审计结果修复发现的问题:
```typescript
// 修复示例
function validateInput(input: string): boolean {
// 验证输入
const regex = /^[a-zA-Z0-9-_]+$/;
return regex.test(input);
}
function sanitizeInput(input: string): string {
// 清理输入
return input.trim().replace(/[<>]/g, "");
}
```
### 10. 安全测试
```typescript
// src/__tests__/security/security.test.ts
import { describe, it, expect } from "vitest";
import { validateInput, sanitizeInput } from "@/modules/security";
describe("Security", () => {
describe("validateInput", () => {
it("should reject malicious input", () => {
expect(validateInput('<script>alert("xss")</script>')).toBe(false);
});
it("should accept valid input", () => {
expect(validateInput("valid-app-name")).toBe(true);
});
});
describe("sanitizeInput", () => {
it("should remove dangerous characters", () => {
expect(sanitizeInput("<script>app</script>")).toBe("scriptapp/script");
});
});
});
```
### 11. 更新文档
- 记录安全问题
- 说明修复方法
- 更新安全指南
### 12. 提交代码
```bash
git add .
git commit -m "security: fix security vulnerabilities" -s
git push origin security/security-audit
```
### 13. 创建 Pull Request
- 说明安全问题
- 展示修复方法
- 提供安全测试结果
## 安全检查清单
### 代码安全
- [ ] 输入验证
- [ ] 输出编码
- [ ] 参数化查询
- [ ] 错误处理
- [ ] 日志安全
### 依赖安全
- [ ] 定期更新依赖
- [ ] 使用 `npm audit`
- [ ] 检查已知漏洞
- [ ] 使用可信源
### 数据安全
- [ ] 敏感数据加密
- [ ] 不记录敏感信息
- [ ] 使用环境变量
- [ ] 安全存储
### 网络安全
- [ ] 使用 HTTPS
- [ ] 验证证书
- [ ] 配置 CORS
- [ ] 防止 CSRF
### 权限管理
- [ ] 最小权限原则
- [ ] 上下文隔离
- [ ] 权限检查
- [ ] 审计日志
## 常见安全问题
### 1. XSS 攻击
**问题:** 用户输入包含恶意脚本
**解决方案:**
```typescript
import DOMPurify from "dompurify";
function sanitizeHTML(html: string): string {
return DOMPurify.sanitize(html);
}
```
### 2. SQL 注入
**问题:** 恶意 SQL 代码注入
**解决方案:**
```typescript
// 使用参数化查询
db.query("SELECT * FROM apps WHERE name = ?", [appName]);
```
### 3. 命令注入
**问题:** 恶意命令注入
**解决方案:**
```typescript
// 使用 spawn 而非 exec
const args = ["apm", "install", packageName];
spawn("apm", args);
```
### 4. 路径遍历
**问题:** 访问未授权文件
**解决方案:**
```typescript
// 验证路径
const safePath = path.normalize(userPath).replace(/^(\.\.(\/|\\|$))+/, "");
```
### 5. 敏感信息泄露
**问题:** 日志中包含敏感信息
**解决方案:**
```typescript
// 不记录敏感信息
logger.info({ userId: user.id }, "User logged in");
```
## 安全最佳实践
### 1. 最小权限原则
只授予必要的权限,避免过度授权。
### 2. 深度防御
多层安全防护,不依赖单一安全措施。
### 3. 输入验证
验证所有输入,包括用户输入和 API 响应。
### 4. 输出编码
对输出进行编码,防止 XSS 攻击。
### 5. 定期审计
定期进行安全审计,及时发现和修复问题。
### 6. 安全更新
及时更新依赖和系统,修复已知漏洞。
## 安全工具
### 静态分析
- ESLint
- TypeScript
- SonarQube
### 动态分析
- OWASP ZAP
- Burp Suite
- Snyk
### 依赖扫描
- npm audit
- Snyk
- Dependabot
## 注意事项
- ⚠️ 不要忽视安全问题
- ⚠️ 及时修复漏洞
- ⚠️ 定期更新依赖
- ⚠️ 保持安全意识
- ⚠️ 遵循安全最佳实践
## 相关文档
- [CONTRIBUTING.md](../../CONTRIBUTING.md) - 贡献指南
- [DEVELOPMENT.md](../../DEVELOPMENT.md) - 开发文档
- [SECURITY.md](../../SECURITY.md) - 安全政策
-108
View File
@@ -1,108 +0,0 @@
---
description: 测试编写流程
---
## 工作流说明
此工作流指导如何为新功能或 Bug 修复编写测试。
## 步骤
### 1. 确定测试范围
分析需要测试的功能点:
- 单元测试:测试独立函数/组件
- 集成测试:测试模块间交互
- E2E 测试:测试完整用户流程
### 2. 编写单元测试(Vitest
`src/__tests__/unit/` 目录下创建测试文件:
```typescript
import { describe, it, expect } from "vitest";
import { someFunction } from "@/modules/example";
describe("someFunction", () => {
it("should return expected result", () => {
const result = someFunction(input);
expect(result).toBe(expected);
});
});
```
### 3. 编写组件测试
```typescript
import { describe, it, expect } from "vitest";
import { mount } from "@vue/test-utils";
import AppCard from "@/components/AppCard.vue";
describe("AppCard", () => {
it("should render app name", () => {
const wrapper = mount(AppCard, {
props: {
app: {
name: "Test App",
pkgname: "test-app",
},
},
});
expect(wrapper.text()).toContain("Test App");
});
});
```
### 4. 编写 E2E 测试(Playwright
`e2e/` 目录下创建测试文件:
```typescript
import { test, expect } from "@playwright/test";
test("install app from store", async ({ page }) => {
await page.goto("http://localhost:3344");
await page.click("text=Test App");
await page.click('button:has-text("安装")');
await expect(page.locator(".install-progress")).toBeVisible();
});
```
### 5. 运行测试
```bash
# 运行单元测试
npm run test
# 运行测试并监听
npm run test:watch
# 运行 E2E 测试
npm run test:e2e
# 生成覆盖率报告
npm run test:coverage
```
### 6. 确保测试通过
- 所有单元测试必须通过
- E2E 测试覆盖主要用户流程
- 测试覆盖率不低于 70%
### 7. 提交代码
测试通过后,提交代码并创建 PR。
## 注意事项
- ⚠️ 不要测试第三方库的功能
- ⚠️ 保持测试独立性和可重复性
- ⚠️ 使用有意义的测试名称
- ⚠️ Mock 外部依赖(APM 命令、API 调用)
## 相关文档
- [TESTING.md](../../TESTING.md) - 测试框架和规范
- [DEVELOPMENT.md](../../DEVELOPMENT.md) - 开发文档
-3
View File
@@ -1,3 +0,0 @@
VITE_APM_STORE_LOCAL_MODE=true
VITE_APM_STORE_BASE_URL=/local_amd64-store
VITE_APM_STORE_STATS_BASE_URL=/local_stats
-2
View File
@@ -1,2 +0,0 @@
VITE_APM_STORE_BASE_URL=https://erotica.spark-app.store
VITE_APM_STORE_STATS_BASE_URL=https://feedback.spark-app.store
+4
View File
@@ -0,0 +1,4 @@
FROM shenmo7192/uos-21-dtk5.4:1.0
ADD . /root/workdir
WORKDIR /root/workdir
RUN dpkg-buildpackage
+31
View File
@@ -0,0 +1,31 @@
import os
import requests
import json
# sha=os.system("git rev-parse HEAD")
sha = os.getenv("GIT_COMMIT")
# sha = '48fed26c51a8c42554e45f72f43e49703e04c97f'
#get sha from environment
url = "https://gitee.com/api/v5/repos/deepin-community-store/spark-store/commits/{}/comments".format(sha)
token = os.getenv("gitee_token")
# process = os.popen("git symbolic-ref --short -q HEAD")
body = "构建详情请见" + os.getenv("JENKINS_URL") + "blue/organizations/jenkins/" + os.getenv("JOB_NAME").replace("/", "/detail/") + "/" + str(os.getenv("BUILD_ID"))
# process.close()
d = {
'access_token': token,
"body": body
}
h = {
"Content-Type": "application/json;charset=UTF-8"
}
res = requests.post(url,headers=h, data=json.dumps(d))
# print(res.status_code)
# print(res.content)
-52
View File
@@ -1,52 +0,0 @@
---
name: Bug 报告
about: 创建一个 Bug 报告以帮助我们改进
title: "[Bug] "
labels: bug
assignees: ""
---
## 描述
清晰简洁地描述这个 Bug 是什么。
## 复现步骤
1. 打开 '...'
2. 点击 '....'
3. 滚动到 '....'
4. 看到错误
## 期望行为
清晰简洁地描述你期望发生什么。
## 实际行为
清晰简洁地描述实际发生了什么。
## 截图
如果适用,添加截图以帮助解释你的问题。
## 环境信息
**操作系统:** [例如: Ubuntu 22.04]
**APM 版本:** [例如: 1.0.0]
**应用商店版本:** [例如: 4.9.9]
**桌面环境:** [例如: GNOME, KDE]
## 日志
如果相关,粘贴日志到以下区域(使用代码块):
```
粘贴日志内容
```
## 额外上下文
添加任何其他关于问题的上下文信息。
-23
View File
@@ -1,23 +0,0 @@
---
name: 功能请求 / 帮助请求
about: 为这个项目建议一个新想法
title: "[Feature] "
labels: enhancement
assignees: ""
---
## 你的功能请求是否与问题有关?
清晰简洁地描述问题。例如:我在 [...] 时总是感到沮丧
## 你想要的解决方案是什么?
清晰简洁地描述你想要发生什么。
## 你考虑过哪些替代方案?
清晰简洁地描述你考虑过的任何替代解决方案或功能。
## 额外上下文
添加任何其他关于功能请求的上下文或截图。
-12
View File
@@ -1,12 +0,0 @@
<!-- Thank you for contributing! -->
### Description
<!-- Please insert your description here and provide especially info about the "what" this PR is solving -->
### What is the purpose of this pull request? <!-- (put an "X" next to an item) -->
- [ ] Bug fix
- [ ] New Feature
- [ ] Documentation update
- [ ] Other
-15
View File
@@ -1,15 +0,0 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
-143
View File
@@ -1,143 +0,0 @@
name: Build
on:
push:
branches: [main]
tags:
- "*"
paths-ignore:
- "**.md"
- "**.spec.js"
- ".idea"
- ".vscode"
- ".dockerignore"
- "Dockerfile"
- ".gitignore"
- ".github/**"
- "!.github/workflows/build.yml"
- "!.github/workflows/test.yml"
pull_request:
branches: [main]
paths-ignore:
- "**.md"
- "**.spec.js"
- ".idea"
- ".vscode"
- ".dockerignore"
- "Dockerfile"
- ".gitignore"
- ".github/**"
- "!.github/workflows/build.yml"
permissions:
contents: write
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 20
- name: Install dependencies
run: npm install
- name: Run tests
run: npm run test
- name: Run lint
run: npm run lint
build:
needs: test
runs-on: ${{ matrix.os }}
container: ${{ matrix.docker_image }}
strategy:
matrix:
os: [ubuntu-latest]
package: [deb, rpm]
architecture: [x64, arm64]
include:
- package: deb
docker_image: "debian:12"
- package: rpm
docker_image: "almalinux:8"
steps:
- name: Install Build Dependencies
if: matrix.package == 'deb'
run: |
apt-get update
apt-get install -y curl git wget devscripts fakeroot equivs lintian python3
apt-get install -y build-essential
- name: Install Build Dependencies
if: matrix.package == 'rpm'
run: |
dnf install -y curl git wget rpm-build rpmdevtools rpmlint python3
dnf group install -y "Development Tools"
- name: Checkout Code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 20
- name: Install Dependencies
run: |
npm install
- name: Download host-spawn
shell: bash
run: |
if [ "${{ matrix.architecture }}" == "x64" ]; then
curl -fsSL -o ./extras/host-spawn https://github.com/1player/host-spawn/releases/latest/download/host-spawn-x86_64
elif [ "${{ matrix.architecture }}" == "arm64" ]; then
curl -fsSL -o ./extras/host-spawn https://github.com/1player/host-spawn/releases/latest/download/host-spawn-aarch64
fi
chmod +x ./extras/host-spawn
- name: Build Release Files
shell: bash
run: |
if [ "${{ matrix.package }}" == "deb" ]; then
npm run build:deb -- --${{ matrix.architecture }}
elif [ "${{ matrix.package }}" == "rpm" ]; then
npm run build:rpm -- --${{ matrix.architecture }}
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Artifact
uses: actions/upload-artifact@v6
with:
name: release_for_${{ matrix.package }}_${{ matrix.architecture }}
path: release/**/*.${{ matrix.package }}
retention-days: 5
release:
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Download all artifacts
uses: actions/download-artifact@v7
with:
path: artifacts
- name: Upload to GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
files: |
artifacts/**/*.deb
artifacts/**/*.rpm
generate_release_notes: true
-83
View File
@@ -1,83 +0,0 @@
name: Test
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 20
- name: Install dependencies
run: npm install
- name: Run unit tests
run: npm run test -- --coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ./coverage/lcov.info
flags: unittests
name: codecov-umbrella
e2e-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 20
- name: Install dependencies
run: npm install
- name: Install Playwright Browsers
run: npx playwright install --with-deps chromium
- name: Run E2E tests
run: xvfb-run npm run test:e2e
- name: Upload test results
if: always()
uses: actions/upload-artifact@v6
with:
name: playwright-report
path: playwright-report/
retention-days: 30
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 20
- name: Install dependencies
run: npm install
- name: Run ESLint
run: npm run lint
- name: Check formatting
run: npm run format -- --check
+48 -35
View File
@@ -1,41 +1,54 @@
# Logs # C++ objects and libs
logs *.slo
*.log *.lo
npm-debug.log* *.o
yarn-debug.log* *.a
yarn-error.log* *.la
pnpm-debug.log* *.lai
lerna-debug.log* *.so
*.dll
*.dylib
node_modules # Qt-es
dist object_script.*.Release
dist-ssr object_script.*.Debug
dist-electron *_plugin_import.cpp
release /.qmake.cache
*.local /.qmake.stash
*.pro.user
*.pro.user.*
*.qbs.user
*.qbs.user.*
*.moc
moc_*.cpp
moc_*.h
qrc_*.cpp
ui_*.h
*.qmlc
*.jsc
Makefile*
*build-*
# Test coverage # Qt unit tests
coverage target_wrapper.*
.nyc_output
# Playwright # Qt qm files
test-results translations/*.qm
playwright-report
playwright/.cache
# Editor directories and files # QtCreator
.vscode/.debug.env *.autosave
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# lockfile # QtCreator Qml
pnpm-lock.yaml *.qmlproject.user
yarn.lock *.qmlproject.user.*
.lock
# QtCreator CMake
CMakeLists.txt.user*
build
# Debian dpkg-buildpackage
debian/*.debhelper*
debian/files
debian/*.substvars
debian/spark-store
test-results.json
-6
View File
@@ -1,6 +0,0 @@
# For electron-builder
# https://github.com/electron-userland/electron-builder/issues/6289#issuecomment-1042620422
shamefully-hoist=true
# For China 🇨🇳 developers
# electron_mirror=https://npmmirror.com/mirrors/electron/
-23
View File
@@ -1,23 +0,0 @@
import fs from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import { createRequire } from 'node:module'
import { spawn } from 'node:child_process'
const pkg = createRequire(import.meta.url)('../package.json')
const __dirname = path.dirname(fileURLToPath(import.meta.url))
// write .debug.env
const envContent = Object.entries(pkg.debug.env).map(([key, val]) => `${key}=${val}`)
fs.writeFileSync(path.join(__dirname, '.debug.env'), envContent.join('\n'))
// bootstrap
spawn(
// TODO: terminate `npm run dev` when Debug exits.
process.platform === 'win32' ? 'npm.cmd' : 'npm',
['run', 'dev'],
{
stdio: 'inherit',
env: Object.assign(process.env, { VSCODE_DEBUG: 'true' }),
},
)
-6
View File
@@ -1,6 +0,0 @@
{
"recommendations": [
"Vue.volar",
"Vue.vscode-typescript-vue-plugin"
]
}
-53
View File
@@ -1,53 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"compounds": [
{
"name": "Debug App",
"preLaunchTask": "Before Debug",
"configurations": [
"Debug Main Process",
"Debug Renderer Process"
],
"presentation": {
"hidden": false,
"group": "",
"order": 1
},
"stopAll": true
}
],
"configurations": [
{
"name": "Debug Main Process",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
// "windows": {
// "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
// },
"runtimeArgs": [
"--remote-debugging-port=9229",
"."
],
"envFile": "${workspaceFolder}/.vscode/.debug.env",
"console": "integratedTerminal"
},
{
"name": "Debug Renderer Process",
"port": 9229,
"request": "attach",
"type": "chrome",
"timeout": 60000,
"skipFiles": [
"<node_internals>/**",
"${workspaceRoot}/node_modules/**",
"${workspaceRoot}/dist-electron/**",
// Skip files in host(VITE_DEV_SERVER_URL)
"http://127.0.0.1:3344/**"
]
},
]
}
-18
View File
@@ -1,18 +0,0 @@
{
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.tsc.autoDetect": "off",
"json.schemas": [
{
"fileMatch": [
"/*electron-builder.json5",
"/*electron-builder.json"
],
"url": "https://json.schemastore.org/electron-builder"
}
],
"eslint.validate": [
"javascript",
"javascriptreact",
"vue"
]
}
-31
View File
@@ -1,31 +0,0 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Before Debug",
"type": "shell",
"command": "node .vscode/.debug.script.mjs",
"isBackground": true,
"problemMatcher": {
"owner": "typescript",
"fileLocation": "relative",
"pattern": {
// TODO: correct "regexp"
"regexp": "^([a-zA-Z]\\:\/?([\\w\\-]\/?)+\\.\\w+):(\\d+):(\\d+): (ERROR|WARNING)\\: (.*)$",
"file": 1,
"line": 3,
"column": 4,
"code": 5,
"message": 6
},
"background": {
"activeOnStart": true,
"beginsPattern": "^.*VITE v.* ready in \\d* ms.*$",
"endsPattern": "^.*\\[startup\\] Electron App.*$"
}
}
}
]
}
+40
View File
@@ -0,0 +1,40 @@
version: '1.0'
name: dtk-build-commit-20220425
displayName: dtk-build-commit
triggers:
trigger: auto
pr:
branches:
prefix:
- ''
stages:
- name: stage-4e566164
displayName: build
strategy: naturally
trigger: auto
executor: []
steps:
- step: execute@docker
name: execute_by_docker
displayName: 基于镜像的脚本执行
certificate: ''
image: docker.io/debian:buster
command:
- sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
- '# 换源'
- apt update
- export DEBIAN_FRONTEND=noninteractive
- echo "安装git devscripts equivs ..."
- apt install git devscripts equivs curl -y >/dev/null 2>&1
- git clone https://gitlink.org.cn/shenmo7192/dtk-old-bundle.git
- cd dtk-old-bundle
- apt install ./*.deb -y
- cd ..
- rm -rf dtk-old-bundle
- 'mk-build-deps --install --tool "apt-get -o Debug::pkgProblemResolver=yes -y" '
- sed -i 's/-j$(JOBS)/-j2/g' debian/rules
- dpkg-buildpackage -b -us -uc
- cd ..
- ls -all
- pwd
strategy: {}
@@ -0,0 +1,67 @@
version: '1.0'
name: dtk-build-release-tag-20220425
displayName: dtk-build-release-tag
triggers:
trigger: auto
push:
tags:
prefix:
- ''
stages:
- name: stage-4e566164
displayName: build
strategy: naturally
trigger: auto
executor: []
steps:
- step: execute@docker
name: execute_by_docker
displayName: 基于镜像的DTK构建
certificate: ''
image: docker.io/debian:buster
command:
- sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
- '# 换源'
- apt update
- export DEBIAN_FRONTEND=noninteractive
- echo "安装git devscripts equivs curl..."
- 'apt install git devscripts equivs curl -y '
- git clone https://gitlink.org.cn/shenmo7192/dtk-old-bundle.git
- cd dtk-old-bundle
- apt install ./*.deb -y
- cd ..
- rm -rf dtk-old-bundle
- ''
- 'mk-build-deps --install --tool "apt-get -o Debug::pkgProblemResolver=yes -y" '
- sed -i 's/-j$(JOBS)/-j2/g' debian/rules
- dpkg-buildpackage -b -us -uc
- cd ..
- ls -all
- pwd
- ''
- 'mkdir target '
- for f in $(find . -type f -name "*.deb")
- do
- ' mv $f target'
- done
artifacts:
- name: BUILD_ARTIFACT
path:
- ../target
notify: []
strategy:
retry: '0'
- name: stage-29f3ffbb
displayName: 上传
strategy: naturally
trigger: auto
executor: []
steps:
- step: publish@general_artifacts
name: publish_general_artifacts
displayName: 上传制品
dependArtifact: BUILD_ARTIFACT
artifactName: output
notify: []
strategy:
retry: '0'
-1021
View File
File diff suppressed because it is too large Load Diff
-146
View File
@@ -1,146 +0,0 @@
## [1.1.1](https://github.com/elysia-best/apm-app-store/compare/v1.1.0...v1.1.1) (2026-02-17)
### Bug Fixes
* **main:** use app.getVersion() for packaged app ([d45d508](https://github.com/elysia-best/apm-app-store/commit/d45d5082f45d60de69d07998429d6f49c64a7b95))
# [1.1.0](https://github.com/elysia-best/apm-app-store/compare/v1.1.0-beta.1...v1.1.0) (2026-02-14)
### Bug Fixes
* **app:** floor download progress percentage ([ed92145](https://github.com/elysia-best/apm-app-store/commit/ed92145f9145b9190858e1cf4c2a722efe0e2ff0))
# [1.1.0-beta.1](https://github.com/elysia-best/apm-app-store/compare/v1.0.4...v1.1.0-beta.1) (2026-02-14)
### Bug Fixes
* 修复应用还没有安装完,按钮就重新变成可安装状态 ([#11](https://github.com/elysia-best/apm-app-store/issues/11)) ([b43c611](https://github.com/elysia-best/apm-app-store/commit/b43c6117ecb1ec12f590667dfad7db13263d9d68))
### Features
* 更新类型系统指南,添加代码检查和格式化要求 ([10808c8](https://github.com/elysia-best/apm-app-store/commit/10808c8f3b2f5535c7dfca6fc8a1e7a45cb5b95c))
* 更新搜索逻辑 ([d5266c6](https://github.com/elysia-best/apm-app-store/commit/d5266c6af81eb6aa28e2f376c88affbea227a5f7))
* 添加 ESLint 配置并优化代码风格,移除未使用的功能 ([e11740a](https://github.com/elysia-best/apm-app-store/commit/e11740ad4cff877d93e409bc8adb28f15717e97e))
* **app:** add cache buster for API requests ([9f50e25](https://github.com/elysia-best/apm-app-store/commit/9f50e25dc09cc0bf1d8e68cefb6843aa9bd8b7e6)), closes [#16](https://github.com/elysia-best/apm-app-store/issues/16)
* **app:** add download count display ([a3f18bb](https://github.com/elysia-best/apm-app-store/commit/a3f18bb593a8b3b1da9927582eb9f6fb5ef18e24))
* **docs:** 添加 AI 编码指导文档以概述项目架构和核心概念 ([c3ae477](https://github.com/elysia-best/apm-app-store/commit/c3ae4774976bd0464ca8d500792f4865f0b589e9))
* **install:** add metalink download support and progress tracking ([74c4eb4](https://github.com/elysia-best/apm-app-store/commit/74c4eb4fbc7dd0d91bbbfac2b91bbb2bf1fa0b68)), closes [#12](https://github.com/elysia-best/apm-app-store/issues/12)
* support download statistics ([5ac9376](https://github.com/elysia-best/apm-app-store/commit/5ac9376200e54e331d22564424db4c41564d23d3)), closes [#15](https://github.com/elysia-best/apm-app-store/issues/15)
* **theme:** add system theme support ([7aeb3d5](https://github.com/elysia-best/apm-app-store/commit/7aeb3d5dd4d53ce6a6fed03957ee6f5d9eee0f39)), closes [#13](https://github.com/elysia-best/apm-app-store/issues/13)
## [1.0.4](https://github.com/elysia-best/apm-app-store/compare/v1.0.4-beta.1...v1.0.4) (2026-01-31)
## [1.0.4-beta.1](https://github.com/elysia-best/apm-app-store/compare/v1.0.4-beta.0...v1.0.4-beta.1) (2026-01-31)
### Bug Fixes
* 修复应用启动命令,移除交互式模式 ([2f7af3c](https://github.com/elysia-best/apm-app-store/commit/2f7af3ca8f704ae0ae9aba572f3f451c7d5a701c))
### Features
* 添加 host-spawn 下载步骤并更新应用启动命令 ([850b8dc](https://github.com/elysia-best/apm-app-store/commit/850b8dcd1ff9789960dca38527cfa03008fa8c89))
## [1.0.4-beta.0](https://github.com/elysia-best/apm-app-store/compare/v1.0.3...v1.0.4-beta.0) (2026-01-31)
### Features
* 添加重复任务检查,避免重复下载任务 ([0d1d4e5](https://github.com/elysia-best/apm-app-store/commit/0d1d4e567940366c5754f4dcdb83213f8fe87d7d))
* 现在仅在有任务时才会到托盘 ([92d1573](https://github.com/elysia-best/apm-app-store/commit/92d1573cf082402b7f44a6beedbc47f58dc91781))
* enhance install manager to prevent duplicate package installations and improve app launching command ([eeefe52](https://github.com/elysia-best/apm-app-store/commit/eeefe5295b8698b887afad467c8151add6e4e8f5))
## [1.0.3](https://github.com/elysia-best/apm-app-store/compare/v1.0.3-beta.1...v1.0.3) (2026-01-31)
### Bug Fixes
* deep link handling at electron startup ([0ed7f64](https://github.com/elysia-best/apm-app-store/commit/0ed7f64a218e0a26b384810b1a0ac8ae314c2501))
### Features
* add app launching functionality and update related components ([6154d75](https://github.com/elysia-best/apm-app-store/commit/6154d75fa6893825e74f7bc421fa91eef0fc4f3f))
* enhance application type definitions and improve app management logic ([39e40ff](https://github.com/elysia-best/apm-app-store/commit/39e40ff946911c82190c7f0158b5bab9287ac3e4))
* update application icons and implement tray functionality ([f89b9eb](https://github.com/elysia-best/apm-app-store/commit/f89b9ebfd9ba75fef675d063bf8632143fd125d4))
* update application name and paths to reflect new branding ([641589f](https://github.com/elysia-best/apm-app-store/commit/641589f8754b638a7f53c729a2930f33884cd51e))
## [1.0.3-beta.1](https://github.com/elysia-best/apm-app-store/compare/v1.0.2...v1.0.3-beta.1) (2026-01-31)
### Bug Fixes
* 修复确认卸载界面应用名称显示 ([b4ef653](https://github.com/elysia-best/apm-app-store/commit/b4ef6532997fdfeb950af16edfa718d1c19507f5))
* 修复卸载请求中的应用名称查找逻辑 ([9799718](https://github.com/elysia-best/apm-app-store/commit/97997182bc2bf7b8d3a34f062deadfd910987b09))
* **build:** add bash shell to build release files ([354eea3](https://github.com/elysia-best/apm-app-store/commit/354eea36267f0284381521ee401d15256ecf8151))
### Features
* 更新安装按钮状态反馈,添加安装队列提示 ([4ce097b](https://github.com/elysia-best/apm-app-store/commit/4ce097bae032601572112d4647f6374875ca9719))
* 更新版本号至 1.0.3-beta.0 ([327ee54](https://github.com/elysia-best/apm-app-store/commit/327ee5400e1b967902734d381411a2cf239ddb16))
* 更新本地应用列表,区分依赖和用户安装的包 ([588eaf9](https://github.com/elysia-best/apm-app-store/commit/588eaf9746482d18716c4f929a3150b560aa5a62))
* 更新模态框样式,添加最大高度限制 ([61790a8](https://github.com/elysia-best/apm-app-store/commit/61790a85882b6c4ef3ac6b3d60de2f7a7d852025))
* 添加卸载确认模态框,支持卸载进度显示 ([b9325db](https://github.com/elysia-best/apm-app-store/commit/b9325db8b0d3e426d7f2e443069a4641aab7d581))
* **preload:** expose architecture detection to renderer process ([5b09dfb](https://github.com/elysia-best/apm-app-store/commit/5b09dfb3d985a0fd6dcd222e33312f957c330cd5))
### Performance Improvements
* 移除模态框背景模糊效果 ([eaa2868](https://github.com/elysia-best/apm-app-store/commit/eaa28686a36dd7c5942e227ba30e4ffae249fa2f))
## [1.0.2](https://github.com/elysia-best/apm-app-store/compare/9b17c57c5cb6ef6848fdc83f37d1b4d317e2b9a1...v1.0.2) (2026-01-30)
### Bug Fixes
* 更新构建依赖,添加构建工具支持 ([bc2f791](https://github.com/elysia-best/apm-app-store/commit/bc2f79114c700dc98426379703383873908f8f21))
* 更新构建依赖,添加python3支持 ([f8f163e](https://github.com/elysia-best/apm-app-store/commit/f8f163e3b87ea0dae7e3af0645ae4620c468479b))
* 更新构建依赖,移除不必要的包并优化安装命令 ([1c791cd](https://github.com/elysia-best/apm-app-store/commit/1c791cd3c83ebc51db8348c6ebce8b4d4eff42d9))
* 更新上传工件路径以支持不同包类型 ([9ee8339](https://github.com/elysia-best/apm-app-store/commit/9ee8339577ee93f5c7c47be119a6275379321bfe))
* 更新应用图标格式为ICNS,优化安装管理器命令执行 ([4b49424](https://github.com/elysia-best/apm-app-store/commit/4b49424105451eceb6653fd2974fad7021a4b2cd))
* 更新应用ID和版本信息,修复许可证类型 ([a3d50e0](https://github.com/elysia-best/apm-app-store/commit/a3d50e026aa570cd2a49da0acd604f4db682bd72))
* 更新vite版本至6.4.1 ([51ee401](https://github.com/elysia-best/apm-app-store/commit/51ee4019d969767f313cd8af23ea1f0e310b3f4b))
* 将依赖项'apm'更改为'amber-package-manager' ([f7eedcd](https://github.com/elysia-best/apm-app-store/commit/f7eedcd4fd3a073dd1b2c5623c9fe12bb43b43a1))
### Features
* 统一安装和卸载脚本以支持PolicyKit权限配置 ([f15fb28](https://github.com/elysia-best/apm-app-store/commit/f15fb28d80c481a40d768c12cb5f28a4daa6a5a6))
* 更新窗口标题和尺寸,优化按钮样式 ([185b498](https://github.com/elysia-best/apm-app-store/commit/185b4984c60a3b5049d44d8e8dc4ff45384b9000))
* 更新TODO列表,添加应用更新和显示已安装应用功能 ([402ba1f](https://github.com/elysia-best/apm-app-store/commit/402ba1fb00d81828f6c228fb1012203861629fab))
* 添加对deb和rpm包的构建支持,更新构建依赖和版本信息 ([640e0bd](https://github.com/elysia-best/apm-app-store/commit/640e0bd69df90e278803a14e30aa50c99123db95))
* 添加已安装应用和可更新应用的管理功能,支持卸载和升级操作 ([ea0261a](https://github.com/elysia-best/apm-app-store/commit/ea0261a1923fbc692ab0480374f7232759446dc7))
* 添加deb和rpm包的依赖项配置 ([847bcc7](https://github.com/elysia-best/apm-app-store/commit/847bcc7885708a3a2c83f78a951ac3608fc6356c))
* 添加electron-builder.yml配置文件并更新构建脚本 ([38a4d45](https://github.com/elysia-best/apm-app-store/commit/38a4d4512f3c634e923192f01bbcbd2cc0687634))
* 添加PolicyKit权限配置和安装/卸载脚本 ([071aa36](https://github.com/elysia-best/apm-app-store/commit/071aa36fb417478d79db0f0e62aebefe573a699a))
* **deeplink:** implement custom deep link handling and remove electron-app-universal-protocol-client ([c7b3257](https://github.com/elysia-best/apm-app-store/commit/c7b3257a2cefade75a6bc5a82313b38d9acc5d06))
* **download:** 支持重试下载功能并更新相关逻辑 ([bdf51a1](https://github.com/elysia-best/apm-app-store/commit/bdf51a1037822d117a84a1b2914d6c3c39387d57))
* **install:** 实现安装管理器,支持安装、检查已安装状态和初步卸载功能 ([bf93059](https://github.com/elysia-best/apm-app-store/commit/bf93059da177c2403c2c6f5b31b8855220d032b2))
* **install:** add app uninstall functionality ([ac0dc22](https://github.com/elysia-best/apm-app-store/commit/ac0dc225bcd8e202489a0b733449a3d8071a4a60))
* **install:** added basis install process ([50fb1a0](https://github.com/elysia-best/apm-app-store/commit/50fb1a00658119191a35e98413c13b39d5e5699e))
* overhaul application to APM 应用商店 with enhanced download management ([9b17c57](https://github.com/elysia-best/apm-app-store/commit/9b17c57c5cb6ef6848fdc83f37d1b4d317e2b9a1))
-247
View File
@@ -1,247 +0,0 @@
# 贡献指南
感谢您对 APM 应用商店项目的关注!我们欢迎任何形式的贡献。
## 📋 目录
- [行为准则](#行为准则)
- [如何贡献](#如何贡献)
- [开发流程](#开发流程)
- [代码规范](#代码规范)
- [提交信息规范](#提交信息规范)
- [Pull Request 流程](#pull-request-流程)
- [问题报告](#问题报告)
## 行为准则
- 尊重所有贡献者
- 接受建设性批评
- 专注于对项目最有利的事情
- 对社区表现出同理心
## 如何贡献
### 报告 Bug
1. 使用 [Bug 报告模板](.github/ISSUE_TEMPLATE/bug_report.md)
2. 搜索现有 Issue,避免重复
3. 提供清晰的重现步骤
4. 包含相关日志和截图
### 建议新功能
1. 使用 [功能请求模板](.github/ISSUE_TEMPLATE/help_wanted.md)
2. 解释使用场景和需求
3. 考虑是否值得投入开发资源
4. 愿意帮助实现吗?
### 提交代码
1. Fork 项目并创建分支
2. 编写代码和测试
3. 确保所有测试通过
4. 提交 Pull Request
### 改进文档
- 修正错误或不清晰之处
- 添加示例和教程
- 翻译文档
- 提出文档改进建议
## 开发流程
### 环境搭建
```bash
# 克隆仓库
git clone https://github.com/elysia-best/apm-app-store.git
cd apm-app-store
# 安装依赖
npm install
# 启动开发服务器
npm run dev
```
### 创建分支
```bash
# 功能分支
git checkout -b feature/your-feature-name
# Bug 修复分支
git checkout -b fix/your-bug-fix
```
### 本地开发
1. 遵循 [代码规范](#代码规范)
2. 编写 [单元测试](TESTING.md)
3. 运行 `npm run lint``npm run format`
4. 运行 `npm run test` 确保测试通过
### 代码审查
- 保持 PR 小而聚焦
- 添加清晰的描述
- 引用相关的 Issue
- 回应审查意见
## 代码规范
### TypeScript
- 使用严格模式 (`strict: true`)
- 避免使用 `any` 类型(必要时使用 `eslint-disable` 注释)
- 使用显式类型注解
- 优先使用 `interface` 而非 `type`
### Vue 3
- 使用 Composition API 和 `<script setup>`
- 使用 `ref``computed` 管理状态
- 遵循 Props 和 Events 模式
- 组件名使用 PascalCase
### 样式(Tailwind CSS
- 优先使用 Tailwind 工具类
- 支持暗色模式(`dark:` 前缀)
- 响应式设计(`md:`, `lg:` 前缀)
### 命名约定
- **组件:** PascalCase (`AppCard.vue`)
- **函数:** camelCase (`handleInstall`)
- **常量:** UPPER_SNAKE_CASE (`SHELL_CALLER_PATH`)
- **文件:** kebab-case (`install-manager.ts`)
## 提交信息规范
遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范。
### 格式
```
type(scope): subject
[可选的正文]
[可选的脚注]
```
### Type 类型
- `feat`: 新功能
- `fix`: Bug 修复
- `docs`: 文档更新
- `style`: 代码格式(不影响功能)
- `refactor`: 重构
- `perf`: 性能优化
- `test`: 测试相关
- `chore`: 构建/工具相关
### Scope 范围
- `app`: 应用核心
- `install`: 安装/卸载
- `ui`: UI 组件
- `ipc`: IPC 通信
- `api`: API 集成
- `theme`: 主题
- `build`: 构建
- `docs`: 文档
### Subject 主题
- 使用现在时态("add" 而非 "added"
- 首字母小写
- 不以句号结尾
### 示例
```bash
feat(install): add retry mechanism for failed installations
fix(ui): correct dark mode toggle persistence
refactor(ipc): simplify install manager event handling
docs(readme): update build instructions
test(download): add unit tests for download queue
```
### 签名(可选)
添加签名以遵守 DCODeveloper Certificate of Origin):
```bash
git commit -m "feat(example): add new feature" -s
```
或在 `~/.gitconfig` 中配置:
```ini
[commit]
gpgsign = true
```
## Pull Request 流程
### PR 前检查
- [ ] 代码通过 `npm run lint`
- [ ] 代码通过 `npm run format`
- [ ] 所有测试通过 (`npm run test`)
- [ ] 新功能包含测试
- [ ] 文档已更新(如需要)
### PR 描述
使用 [PR 模板](.github/PULL_REQUEST_TEMPLATE.md),包括:
1. **变更类型:** feat / fix / refactor 等
2. **变更描述:** 清晰说明做了什么
3. **相关 Issue:** 引用 `#123`
4. **测试说明:** 如何测试这些变更
5. **截图/录屏:** UI 变更需要
6. **检查清单:** 完成上述 PR 前检查
### 审查流程
1. 至少一位维护者审查通过
2. 解决所有审查意见
3. 确保所有 CI 检查通过
4. Squash 并合并到 main 分支
### 合并要求
- CI 检查全部通过
- 至少一次审查批准
- 无冲突
- 分支最新
## 问题报告
### Bug 报告
使用 [Bug 报告模板](.github/ISSUE_TEMPLATE/bug_report.md),包含:
- 描述
- 复现步骤
- 期望行为
- 实际行为
- 环境信息
- 截图/日志
### 功能请求
使用 [功能请求模板](.github/ISSUE_TEMPLATE/help_wanted.md),包含:
- 问题描述
- 期望的解决方案
- 替代方案
- 额外上下文
---
**© 2026 APM 应用商店项目**
-25
View File
@@ -1,25 +0,0 @@
# List of referenced projects
1. https://github.com/electron-vite/electron-vite-vue MIT License
MIT License
Copyright (c) 2023 草鞋没号
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-156
View File
@@ -1,156 +0,0 @@
# 部署文档
## 📋 目录
- [构建配置](#构建配置)
- [打包流程](#打包流程)
- [发布流程](#发布流程)
- [CI/CD 工作流](#cicd-工作流)
- [版本管理](#版本管理)
## 构建配置
### electron-builder.yml
主要配置项:
- **appId:** `store.spark-app.apm`
- **productName:** `spark-store`
- **打包格式:** deb, rpm, AppImage
- **输出目录:** `release/${version}`
### 环境变量
| 变量 | 说明 |
| --------------------- | ------------------------ |
| `GITHUB_TOKEN` | GitHub Token(用于发布) |
| `VITE_DEV_SERVER_URL` | 开发服务器地址 |
## 打包流程
### 本地构建
```bash
# 构建所有格式
npm run build
# 仅构建 deb
npm run build:deb
# 仅构建 rpm
npm run build:rpm
# 仅构建前端(不打包)
npm run build:vite
```
### 构建产物
构建完成后,产物位于:
```
release/
└── {version}/
├── spark-store_{version}_linux_amd64.deb
├── spark-store_{version}_linux_amd64.rpm
├── spark-store_{version}_linux_arm64.deb
└── spark-store_{version}_linux_arm64.rpm
```
## 发布流程
### 1. 更新版本号
```bash
# 更新 package.json 中的版本
npm version patch # 1.0.0 → 1.0.1
npm version minor # 1.0.0 → 1.1.0
npm version major # 1.0.0 → 2.0.0
```
### 2. 更新 CHANGELOG.md
```bash
# 生成变更日志
npm run changelog
```
### 3. 提交并推送
```bash
git add .
git commit -m "chore(release): bump version to x.x.x" -s
git push origin main
```
### 4. 创建 Git 标签
```bash
git tag v{version}
git push origin v{version}
```
### 5. 触发 CI 构建
推送标签后会自动触发 GitHub Actions 构建。
### 6. 检查构建结果
在 GitHub Actions 页面查看构建状态。
### 7. 发布到 GitHub Release
构建成功后,GitHub Actions 会自动创建 Release 并上传构建产物。
## CI/CD 工作流
### test.yml
每次推送或 PR 时运行:
- 单元测试
- E2E 测试
- Lint 检查
### build.yml
推送到 main 分支或标签时运行:
- 运行测试(前置依赖)
- 构建 deb 和 rpm 包
- 支持 x64 和 arm64 架构
- 标签推送时自动创建 Release
## 版本管理
### 语义化版本
遵循 [Semantic Versioning](https://semver.org/)
- **MAJOR:** 不兼容的 API 变更
- **MINOR:** 向后兼容的功能新增
- **PATCH:** 向后兼容的 Bug 修复
### 版本号示例
```
4.9.9
│ └─ PATCH (Bug 修复)
│ └─ MINOR (新功能)
└───── MAJOR (重大变更)
```
### 发布流程检查清单
- [ ] 版本号已更新
- [ ] CHANGELOG.md 已更新
- [ ] 所有测试通过
- [ ] 代码已审查
- [ ] Lint 检查通过
- [ ] 构建成功
- [ ] Release 已创建
- [ ] 构建产物已上传
---
**© 2026 APM 应用商店项目**
-380
View File
@@ -1,380 +0,0 @@
# 开发文档
## 📋 目录
- [环境搭建](#环境搭建)
- [项目结构详解](#项目结构详解)
- [开发工作流](#开发工作流)
- [调试技巧](#调试技巧)
- [本地开发最佳实践](#本地开发最佳实践)
## 环境搭建
### 系统要求
- **Node.js:** >= 20.x
- **npm:** >= 9.x 或 pnpm >= 8.x
- **操作系统:** Linux(推荐 Ubuntu 22.04+
- **可选:** APM 包管理器(用于测试)
### 安装依赖
```bash
# 克隆仓库
git clone https://github.com/elysia-best/apm-app-store.git
cd apm-app-store
# 安装依赖
npm install
# 或使用 pnpm
pnpm install
```
### 开发服务器启动
```bash
# 启动开发模式
npm run dev
# 应用将在以下地址启动
# Vite 开发服务器: http://127.0.0.1:3344/
# Electron 窗口将自动打开
```
### 构建项目
```bash
# 构建生产版本(deb + rpm
npm run build
# 仅构建前端
npm run build:vite
# 仅构建 deb 包
npm run build:deb
# 仅构建 rpm 包
npm run build:rpm
```
## 项目结构详解
### Electron 主进程
**目录:** `electron/main/`
**核心文件:**
- **`index.ts`** - 主进程入口
- 创建应用窗口
- 管理 IPC 通信
- 处理生命周期事件
- **`backend/install-manager.ts`** - 安装管理器
- 管理安装任务队列
- 执行 APM 命令
- 流式输出日志
- 解析安装结果
- **`deeplink.ts`** - Deep Link 处理
- 解析 `spk://` 协议
- 路由到对应操作
### Vue 渲染进程
**目录:** `src/`
**核心模块:**
- **`App.vue`** - 根组件
- 应用状态管理
- 分类和应用加载
- 模态框协调
- Deep Link 监听
- **`components/`** - UI 组件
- `AppCard.vue` - 应用卡片
- `AppDetailModal.vue` - 应用详情
- `DownloadQueue.vue` - 下载队列
- 其他 11 个组件
- **`global/`** - 全局状态
- `downloadStatus.ts` - 下载队列
- `storeConfig.ts` - API 配置
- `typedefinition.ts` - 类型定义
- **`modules/`** - 业务逻辑
- `processInstall.ts` - 安装/卸载
### 共享模块
**目录:** `electron/global.ts`
- 进程间共享的常量和配置
- 系统架构检测
### 配置文件
- **`vite.config.ts`** - Vite 构建配置
- **`electron-builder.yml`** - 打包配置
- **`tsconfig.json`** - TypeScript 配置
- **`eslint.config.ts`** - ESLint 配置
## 开发工作流
### 功能开发流程
1. **需求分析**
- 理解功能需求
- 设计 API 和数据结构
- 确定影响范围
2. **创建分支**
```bash
git checkout -b feature/your-feature
```
3. **实现功能**
- 更新类型定义 (`src/global/typedefinition.ts`)
- 实现 Vue 组件
- 添加 IPC 处理(如需要)
- 编写测试
4. **测试**
```bash
npm run test
npm run test:e2e
```
5. **代码检查**
```bash
npm run lint
npm run format
```
6. **提交 PR**
- 使用 `feat(scope): description` 格式
- 引用相关 Issue
- 添加详细描述
### Bug 修复流程
1. **复现 Bug**
- 确认 Bug 存在
- 添加复现步骤到 Issue
2. **定位问题**
- 查看日志
- 使用调试器
- 检查相关代码
3. **创建分支**
```bash
git checkout -b fix/your-bug-fix
```
4. **修复代码**
- 最小化修改
- 添加回归测试
- 更新文档(如需要)
5. **验证修复**
- 本地测试
- 确保测试通过
6. **提交 PR**
- 使用 `fix(scope): description` 格式
- 说明修复方法
### 重构流程
1. **识别需要重构的代码**
- 代码重复
- 复杂度过高
- 性能问题
2. **制定重构计划**
- 不改变外部行为
- 逐步进行
- 保持测试通过
3. **执行重构**
```bash
git checkout -b refactor/your-refactor
```
4. **验证**
- 所有测试通过
- 性能未下降
- 代码可读性提升
## 调试技巧
### 主进程调试
**VS Code 配置:**
创建 `.vscode/launch.json`:
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "Electron: Main",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
"windows": {
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
},
"args": ["."],
"outputCapture": "std"
}
]
}
```
**日志调试:**
```typescript
import pino from "pino";
const logger = pino({ name: "module-name" });
logger.info("Application started");
logger.error({ err }, "Failed to load apps");
logger.debug("Debug information");
```
### 渲染进程调试
**使用 Vue DevTools:**
1. 安装 Vue DevTools 浏览器扩展
2. Electron 会自动检测
3. 检查组件树和状态
**控制台日志:**
```typescript
console.log("Debug:", data);
console.error("Error:", error);
console.table(apps);
```
### IPC 通信调试
**主进程:**
```typescript
ipcMain.on("test-channel", (event, data) => {
console.log("Received:", data);
event.sender.send("test-response", { result: "ok" });
});
```
**渲染进程:**
```typescript
window.ipcRenderer.send("test-channel", { test: "data" });
window.ipcRenderer.on("test-response", (_event, data) => {
console.log("Response:", data);
});
```
### 性能分析
**Chrome DevTools:**
1. 打开 DevTools (Ctrl+Shift+I)
2. Performance 面板
3. 录制并分析
**Vite 分析:**
```bash
npm run build:vite -- --mode profile
```
## 本地开发最佳实践
### 代码组织
1. **组件拆分**
- 单一职责原则
- 组件不超过 300 行
- 提取可复用逻辑
2. **状态管理**
- 使用 Vue 响应式系统
- 全局状态放在 `src/global/`
- 组件状态使用 `ref` 和 `computed`
3. **类型定义**
- 所有数据结构都有类型
- 避免 `any` 类型
- 使用 TypeScript 工具类型
### 组件复用
1. **Props 设计**
- 明确的类型定义
- 合理的默认值
- 必填项标注
2. **Events 设计**
- 使用 TypeScript 定义
- 清晰的事件命名
3. **插槽使用**
- 提供灵活的内容布局
- 具名插槽增强可用性
### 错误处理
1. **Try-Catch**
```typescript
try {
await someAsyncOperation();
} catch (error) {
logger.error({ err: error }, "Operation failed");
showErrorToUser(error.message);
}
```
2. **Promise 错误**
```typescript
somePromise()
.then((result) => {
// handle success
})
.catch((error) => {
// handle error
});
```
3. **Vue 错误捕获**
```typescript
onMounted(() => {
window.addEventListener("error", handleError);
});
```
### 性能优化
1. **列表虚拟化**(大数据集)
2. **图片懒加载**
3. **防抖和节流**
4. **计算结果缓存**
---
**© 2026 APM 应用商店项目**
View File
+328
View File
@@ -0,0 +1,328 @@
#### 说明
当前服务器线路列表(项目中包含):
```
https://d.store.deepinos.org.cn/
https://store.deepinos.org.cn/
```
# 星火应用商店文档
# 目录结构
几个目录结构
```
/
/icons 图标文件夹
/tags 首页图标
/tras 多语言翻译
```
主要的文件分析
```js
spark-store.pro Qt工程配置文件
ssinstall 调用包安装器的脚本
icons.qrc 图标资源文件
main.cpp 入口文件
widget.h widget.cpp widget.ui 主要窗口控件
downloadlist.h downloadlist.cpp downloadlist.ui 单个软件的下载安装展示控件
progressload.h progressload.cpp 网页加载显示 得在deepin上编译运行才能搞清楚
workerthreads.h workerthreads.cpp 应用信息加载线程
image_show.h image_show.cpp 应用页面截图预览控件
big_image.h big_image.cpp 大图查看控件
```
# 使用的开源库及第三方工具
* GDebi 一个 Ubuntu 软件中心的轻量级替代品 https://linux.cn/article-4982-1.html
* libnotify 系统通知 https://developer.gnome.org/libnotify/unstable/
# 源码分析
## 应用的组成部分
左侧应用分类菜单
主窗口的下拉菜单
应用列表页面
应用详情页面
应用首页,有几个链接跳转
商店设置页面
下载列表页面
## 应用初始化,及主控件加载
初始化 `DApplication` 进入事件循环。
设置关于我们弹窗 `DAboutDialog`
主控件 Widget 根据不同屏幕大小自适应。
首页打开webview页面,如果传入了`spk://`参数,会打开应用详情页。
```cpp
// main.cpp
QString arg1=argv[1];
if(arg1.left(6)=="spk://"){
w.openUrl(QUrl(argv[1]));
}
// widget.cpp
void Widget::openUrl(QUrl u)
{
QString app=serverUrl + "store"+u.path()+"/app.json";
ui->webEngineView->setUrl(app); // 会触发 webEngineView 的
}
```
## Tags处理方式
**Tags处理方式**
```cpp
// widget.cpp
QString tags=json["Tags"].toString(); //Read the Tags
QStringList tagList=tags.split(";");
for (int i=0;i<tagList.size();i++) {
if(tagList[i]=="community")
ui->tag_community->show();//Tags icon shows like this
if(tagList[i]=="ubuntu")
ui->tag_ubuntu->show();
if(tagList[i]=="deepin")
ui->tag_deepin->show();
if(tagList[i]=="uos")
ui->tag_uos->show();
if(tagList[i]=="dtk5")
ui->tag_dtk5->show();
if(tagList[i]=="dwine2")
ui->tag_dwine2->show();
if(tagList[i]=="dwine5")
ui->tag_dwine5->show();
if(tagList[i]=="a2d")
ui->tag_a2d->show();
}
```
**Widget 初始化**
```cpp
void Widget::initConfig()
{
...
// 读取服务器URL并初始化菜单项的链接
QSettings readConfig(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
if(readConfig.value("server/choose").toString()!=""){
ui->comboBox_server->setCurrentText(readConfig.value("server/choose").toString());
appinfoLoadThread.setServer(serverUrl=readConfig.value("server/choose").toString());
}else {
appinfoLoadThread.setServer(serverUrl="http://sucdn.jerrywang.top/"); // 默认URL
}
configCanSave=true; // 防止触发保存配置信号
menuUrl[0]=serverUrl + "store/#/"; // 首页
// 下面是各个应用分类页面,直接加载的webview的
// 每个连接对应一个左侧的菜单项,在构造函数用连接到 chooseLeftMenu 槽函数
menuUrl[1]=serverUrl + "store/#/network";
...
menuUrl[12]=serverUrl + "store/#/others";
...
ui->webfoot->hide();
//初始化首页
ui->webEngineView->setUrl(menuUrl[0]);
}
/**
* 菜单切换逻辑
*
*/
void Widget::chooseLeftMenu(int index)
{
nowMenu=index;
updateUI();
left_list[index]->setStyleSheet("color:#FFFFFF;background-color:"+main_color.name()+";border-radius:8;border:0px");
// index <=12 加载某个分类的应用列表的webviejw
// index == 13 加载下载列表页面
if(index<=12){
if(themeIsDark){
darkurl = URL
ui->webEngineView->setUrl(darkurl);
}else {
ui->webEngineView->setUrl(menuUrl[index]);
}
ui->stackedWidget->setCurrentIndex(0);
}else if (index==13) {
ui->stackedWidget->setCurrentIndex(1);
}
}
```
## 应用下载安装卸载分析
**应用详情页面加载**
```cpp
/**
* 加载单个应用的信息
*/
void Widget::on_webEngineView_urlChanged(const QUrl &arg1)
{
//分析出服务器中的分类名称
...
//如果是app.json就打开详情页
if(arg1.path().right(8)=="app.json"){
...
// 读取相应的应用信息
appinfoLoadThread.requestInterruption();
appinfoLoadThread.wait(100);
appinfoLoadThread.setUrl(arg1);
appinfoLoadThread.start();
}
}
// 设置详情页的APP信息
SpkAppInfoLoaderThread::requestSetAppInformation() -> Widget::sltAppinfoDetails()
// 设置详情页的APP图标
SpkAppInfoLoaderThread::finishedIconLoad() -> Widget::sltAppinfoIcon()
// 设置详情页的APP截图
SpkAppInfoLoaderThread::finishedScreenshotLoad() -> Widget::sltAppinfoScreenshot()
// 下载APP详情信息线程
void SpkAppInfoLoaderThread::run()
{
QProcess get_json;
get_json.start("curl -o app.json " + targetUrl.toString());
QFile app_json("app.json");
app.json
}
```
**应用下载**
Widget::on_pushButton_download_clicked() 是点击下载的安装方法。
最终使用的是 `QNetwrokAccessManager` 进行GET请求获取数据写入文件。
```cpp
void Widget::on_pushButton_download_clicked()
{
if(!isBusy){
file = new QFile(fileName);
...
nowDownload+=1;
startRequest(urList.at(nowDownload-1)); // 进行链接请求
}
}
void Widget::startRequest(QUrl url)
{
reply = manager->get(QNetworkRequest(url));
// 请求响应完成,关闭文件,清理下载队列
connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));
// 接收应用下载数据
connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));
// 更新应用下载进度
connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));
}
```
使用 QSettings 来读取配置,更换服务源
```cpp
void Widget::on_comboBox_server_currentIndexChanged(const QString &arg1)
{
appinfoLoadThread.setServer(arg1); // 服务器信息更新
if(configCanSave){
ui->label_setting1->show();
QSettings *setConfig=new QSettings(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
setConfig->setValue("server/choose",arg1);
}
}
```
使用 `QProcess` 来调用各种小文件下载、包安装卸载的命令。
**应用安装**
```cpp
void Widget::httpFinished() // 完成下载
{
...
download_list[nowDownload-1].readyInstall();
download_list[nowDownload-1].free=true;
if(nowDownload<allDownload){ // 如果有排队则下载下一个
...
}
}
void downloadlist::readyInstall()
{
...
ui->pushButton_install->setEnabled(true);
ui->pushButton_install->show();
ui->pushButton_2->hide();
Widget::sendNotification(tr("Finished downloading %1, awaiting to install").arg(ui->label->text()), 5000,
"/tmp/spark-store/icon_"+QString::number(num).toUtf8()+".png");
}
void downloadlist::on_pushButton_install_clicked()
{
//弹出菜单
menu_install->exec(cursor().pos());
}
downloadlist menu_install
downloadlist::install()
gdebi, dpkg, deepin-deb-installer
void downloadlist::install(int t)
{
QtConcurrent::run([=](){
QProcess installer;
installer.start("pkexec gdebi -n /tmp/spark-store/"+ui->label_filename->text().toUtf8());
installer.start("pkexec ssinstall /tmp/spark-store/"+ui->label_filename->text().toUtf8());
installer.start("deepin-deb-installer /tmp/spark-store/"+ui->label_filename->text().toUtf8());
});
}
```
**应用卸载**
```cpp
void Widget::on_pushButton_uninstall_clicked()
{
QtConcurrent::run([=](){
uninstall.start("pkexec apt purge -y "+pkgName);
});
}
```
**仓库源更新**
```cpp
// 更新源列表
void Widget::on_pushButton_updateServer_clicked()
{
QtConcurrent::run([=](){
...
QFile::remove(QDir::homePath().toUtf8()+"/.config/spark-store/server.list");
system("curl -o "+QDir::homePath().toUtf8()+"/.config/spark-store/server.list http://dcstore.shenmo.tech/store/server.list");
server.open(QDir::homePath().toUtf8()+"/.config/spark-store/server.list",std::ios::in);
...
while (getline(server,lineTmp)) {
ui->comboBox_server->addItem(QString::fromStdString(lineTmp));
}
});
}
// 更新星火商店apt源
void Widget::on_pushButton_updateApt_clicked()
{
QtConcurrent::run([=](){
comboBox_server /tmp/spark-store/sparkstore.list
bash脚本 sparkstore.list /etc/apt/sources.list.d/
使QProcess pkexec update.sh
}):
}
```
## 发送系统通知
```cpp
#include <libnotify/notify.h>
static NotifyNotification *_notify = nullptr; // 初始化
notify_init(tr("Spark\\ Store").toLocal8Bit()); // 构造函数初始化
notify_uninit(); // 析构函数调用
void Widget::sendNotification(const QString &message, const int msTimeout, const QString &icon)
{
if(_notify == nullptr)
{
_notify = notify_notification_new(tr("Spark\\ Store").toLocal8Bit(), message.toLocal8Bit(), icon.toLocal8Bit());
notify_notification_set_timeout(_notify, msTimeout);
}
else
notify_notification_update(_notify, tr("Spark\\ Store").toLocal8Bit(), message.toLocal8Bit(), icon.toLocal8Bit());
notify_notification_show(_notify, nullptr);
}
```
+25
View File
@@ -0,0 +1,25 @@
#### 调用参数(spk规则)
参数只有一个Url,该url应当遵循这种格式:`spk://<任意合法字符>/web分类/包名`
例如:
[spk://abcdefg/games/store.spark-app.hmcl](spk://abcdefg/games/store.spark-app.hmcl)
可选的web分类:
| 分类名称 | web分类   |
| -------- | -------------- |
| 网络应用 | network |
| 社交沟通 | chat |
| 音乐欣赏 | music |
| 视频播放 | video |
| 图形图像 | graphics |
| 游戏娱乐 | games |
| 办公学习 | office |
| 阅读翻译 | reading |
| 编程开发 | development |
| 系统工具 | tools |
| 主题美化 | beautify |
| 其他应用 | others |
+82
View File
@@ -0,0 +1,82 @@
# 关于编写 "描述主体结构预览说明" 的规范
1. 主体结构预览
一般以 `tree` 命令进行获取目录结构进行展示所需要描述的预览内容。
2. 对主体结构中的内容单独说明
并使用所用语言进行非侵入式独立描述,而不是在代码中填充说明与注释。
在单行描述中,尽量不超过您认为最大的字符数量宽度,可以收缩内容的重要性。
在此种说明文档中,尽量使用您所描述的对象支持的代码注释,而不是以白底黑字进行描述。
对于规范的全部:主体结构 + 单独内容中进行简单(而不是简少)的说明。
一个简单的例子,例如: 有关项目源代码结构的预览说明
- 项目结构预览
```
.
├── assets
├── debian
├── DOCS
├── patchs
├── src
├── tool
└── translations
10 directories, 9 files
```
- 来自 debian 目录的说明
```shell
# 将此项目进行 debian 的标志,基于 debian 系列的发行版可对包含
# 此种目录的开源项目进行构建 deb 软件包。
# 1. 构建软件包(打包)
# 执行 dpkg-buildpackage 命令以尝试构建此软件包
dpkg-buildpackage
# 如果构建将会在上级目录中产生一个 deb,而源代码目录不会有任何变化。
# 如果出现以下内容可忽视,仅需要查看是否已成功构建软件包:
# gpg: 已跳过 "" 无效的用户ID
# gpg: ...: clear-sign failed: 无效的用户ID
# dpkg-buildpackage: error: failed to sign .dsc file
```
- 来自 patchs 目录的说明
```shell
# 一种用于可扩展的补丁,主要目的是为项目提供可选的应用方案,而不是直接堆砌到
# 当前项目的分支中。您可以认为所有分支都是主线分支。
# 例如:
# 主线稳定分支: master
# 主线开发分支: dev
# 主线其它: ...
# 注意:
# 当您认为您所提交的内容并不会为主线带来 bug fix 之类的内容,请使用补丁。
# 当您所提交的内容会带来不可预知的问题的时候,或会改变目前主线的开发模式时,
# 此种方式可确保您提交的方案可被任意时间被弃用,而不是由其它维护者耗费精力
# 去试图移除您提交的内容,而不是等待由提交者进行新的维护。
```
- 来自其它的内容...可随时由任何人进行补充
- 一些在关此种预览描述的文档
```shell
# 此种描述还将出现在 `src/README.md` 的描述中。
# 当然,我预期会由其它维护者进行移动到 `DOCS` 之下。
# 另外在 `patchs/zinface-community-cmake-build-system.patch` 补丁文件中,
# 也随附过一个简要的文档内容,而它是记录了 `Spark` 为名的构建模式。
# 在未应用此补丁时,将不会出现在任何地方。
```
-154
View File
@@ -1,154 +0,0 @@
# 常见问题 (FAQ)
## 基本问题
### Q: APM 应用商店是什么?
**A:** APM 应用商店是基于 Electron + Vue 3 构建的桌面应用商店客户端,用于 APM (AmberPM) 包管理器的图形化界面。
### Q: 支持哪些操作系统?
**A:** 目前支持 Linux 系统,包括但不限于:
- Ubuntu 20.04+
- Debian 11+
- Fedora 35+
- Arch Linux
- 银河麒麟
- 统信 UOS
### Q: 如何安装 APM 应用商店?
**A:**
1. 从 GitHub Releases 下载 deb 或 rpm 包
2. 使用包管理器安装:
```bash
# Debian/Ubuntu
sudo dpkg -i spark-store_*.deb
# Fedora/RHEL
sudo dnf install spark-store_*.rpm
```
### Q: 需要 APM 包管理器吗?
**A:** 是的,APM 应用商店需要 APM 包管理器才能工作。请先安装 APM。
## 使用问题
### Q: 如何安装应用?
**A:**
1. 打开 APM 应用商店
2. 浏览或搜索应用
3. 点击应用卡片查看详情
4. 点击"安装"按钮
5. 等待安装完成
### Q: 如何卸载应用?
**A:**
1. 点击右上角"已安装"按钮
2. 在列表中找到要卸载的应用
3. 点击"卸载"按钮
4. 确认卸载
### Q: 如何更新应用?
**A:**
1. 点击右上角"更新"按钮
2. 选择要更新的应用
3. 点击"更新"按钮
4. 等待更新完成
### Q: 下载的应用在哪里?
**A:**
应用下载后存储在 APM 管理的目录中,通常位于:
```
/opt/spark-store/apps/{pkgname}/
```
## 技术问题
### Q: 应用无法启动怎么办?
**A:** 请参考 [问题排查指南](TROUBLESHOOTING.md)。
### Q: 如何查看日志?
**A:**
日志位置:
- 主进程日志:`~/.config/spark-store/logs/`
- 系统日志:`journalctl -u spark-store`
### Q: 如何切换主题?
**A:**
点击右上角主题切换按钮,或按 `Ctrl+Shift+T`。
### Q: 支持深色模式吗?
**A:** 是的,支持亮色、暗色和跟随系统主题。
## 开发问题
### Q: 如何参与开发?
**A:** 请参考 [贡献指南](CONTRIBUTING.md)。
### Q: 如何运行开发版本?
**A:**
```bash
git clone https://github.com/elysia-best/apm-app-store.git
cd apm-app-store
npm install
npm run dev
```
### Q: 技术栈是什么?
**A:**
- Electron 40.0.0
- Vue 3
- Vite 6.4.1
- TypeScript
- Tailwind CSS 4.1.18
### Q: 如何报告 Bug
**A:**
请在 [GitHub Issues](https://github.com/elysia-best/apm-app-store/issues) 提交 Bug 报告。
## 其他问题
### Q: 可以在 Windows/Mac 上使用吗?
**A:** 目前不支持,但计划在未来添加跨平台支持。
### Q: 如何获取帮助?
**A:**
- 查看 [文档](README.md)
- 提交 [Issue](https://github.com/elysia-best/apm-app-store/issues)
- 加入 [社区论坛](https://bbs.spark-app.store/)
### Q: 许可证是什么?
**A:**
本项目采用 [GPL-3.0](LICENSE.md) 协议开源。
---
**© 2026 APM 应用商店项目**
Vendored
+33
View File
@@ -0,0 +1,33 @@
pipeline {
agent any
stages {
stage('build') {
agent {
docker {
image 'jerry979/dtke:5.11.1'
}
}
steps {
sh 'mkdir build && cd build && qmake .. && make '
archiveArtifacts(artifacts: 'build/src/spark-store', allowEmptyArchive: true, defaultExcludes: true)
}
}
stage('send') {
agent {
dockerfile {
filename '.gitee/Dockerfile'
}
}
environment {
gitee_token = credentials('1')
}
steps {
sh "python3 .gitee/callback.py"
}
}
}
}
+4 -4
View File
@@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007 Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
@@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail. Also add information on how to contact you by electronic and paper mail.
@@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school, You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary. if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>. <http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>. <http://www.gnu.org/philosophy/why-not-lgpl.html>.
-127
View File
@@ -1,127 +0,0 @@
# 木兰宽松许可证, 第2版
您对"软件"的复制、使用、修改及分发受木兰宽松许可证,第2版("本许可证")的如下条款的约束:
## 0. 定义
"软件" 是指由"贡献"构成的许可在"本许可证"下的程序和相关文档的集合。
"贡献" 是指由任一"贡献者"许可在"本许可证"下的受版权法保护的作品。
"贡献者" 是指将受版权法保护的作品许可在"本许可证"下的自然人或"法人实体"。
"法人实体" 是指提交贡献的机构及其"关联实体"。
"关联实体" 是指,对"本许可证"下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。
## 1. 授予版权许可
每个"贡献者"根据"本许可证"授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其"贡献",不论修改与否。
## 2. 授予专利许可
每个"贡献者"根据"本许可证"授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其"贡献"或以其他方式转移其"贡献"。前述专利许可仅限于"贡献者"现在或将来拥有或控制的其"贡献"本身或其"贡献"与许可"贡献"时的"软件"结合而将必然会侵犯的专利权利要求,不包括对"贡献"的修改或包含"贡献"的其他结合。如果您或您的"关联实体"直接或间接地,就"软件"或其中的"贡献"对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则"本许可证"授予您对"软件"的专利许可自您提起诉讼或发起维权行动之日终止。
## 3. 无商标许可
"本许可证"不提供对"贡献者"的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。
## 4. 分发限制
您可以在任何媒介中将"软件"以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供"本许可证"的副本,并保留"软件"中的版权、商标、专利及免责声明。
## 5. 免责声明与责任限制
"软件"及其中的"贡献"在提供时不带任何明示或默示的担保。在任何情况下,"贡献者"或版权所有者不对任何人因使用"软件"或其中的"贡献"而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。
## 6. 语言
"本许可证"以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。
条款结束
如何将木兰宽松许可证,第2版,应用到您的软件
如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步:
1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字;
2, 请您在软件包的一级目录下创建以"LICENSE"为名的文件,将整个许可证文本放入该文件中;
3, 请将如下声明文本放入每个源文件的头部注释中。
Copyright (c) 2026-present The Spark Project Contributors
apm-store is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
# Mulan Permissive Software LicenseVersion 2
Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions:
## 0. Definition
Software means the program and related documents which are licensed under this License and comprise all Contribution(s).
Contribution means the copyrightable work licensed by a particular Contributor under this License.
Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License.
Legal Entity means the entity making a Contribution and all its Affiliates.
Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, 'control' means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity.
## 1. Grant of Copyright License
Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not.
## 2. Grant of Patent License
Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken.
## 3. No Trademark License
No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in section 4.
## 4. Distribution Restriction
You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software.
## 5. Disclaimer of Warranty and Limitation of Liability
THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT'S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
## 6. Language
THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL.
END OF THE TERMS AND CONDITIONS
How to Apply the Mulan Permissive Software LicenseVersion 2 (Mulan PSL v2) to Your Software
To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps:
i. Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner;
ii. Create a file named "LICENSE" which contains the whole context of this License in the first directory of your software package;
iii. Attach the statement to the appropriate annotated syntax at the beginning of each source file.
Copyright (c) 2026-present The Spark Project Contributors
apm-store is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
-229
View File
@@ -1,229 +0,0 @@
# 项目整理完成总结
## ✅ 完成的工作
### 1. 核心文档(3个文件)
| 文件 | 状态 | 说明 |
| --------------- | ----------------- | --------------------------- |
| AGENTS.md | ✅ 已替换为中文版 | 完整的 AI 编码指南(894行) |
| CONTRIBUTING.md | ✅ 新建 | 贡献指南(中文) |
| DEVELOPMENT.md | ✅ 新建 | 开发文档(中文) |
### 2. 工作流文档(9个文件)
| 文件 | 说明 |
| --------------------------------------------- | -------------- |
| .agents/workflows/feature-development.md | 新功能开发流程 |
| .agents/workflows/bug-fix.md | Bug 修复流程 |
| .agents/workflows/code-review.md | 代码审查流程 |
| .agents/workflows/testing.md | 测试编写流程 |
| .agents/workflows/release.md | 发布流程 |
| .agents/workflows/refactoring.md | 代码重构流程 |
| .agents/workflows/documentation.md | 文档更新流程 |
| .agents/workflows/performance-optimization.md | 性能优化流程 |
| .agents/workflows/security-audit.md | 安全审计流程 |
**删除的文件:**
- .agents/workflows/1.md
- .agents/workflows/代码审查.md
### 3. 测试基础设施(5个文件)
| 文件 | 说明 |
| ----------------------------------------- | ----------------------- |
| vitest.config.ts | Vitest 单元测试配置 |
| playwright.config.ts | Playwright E2E 测试配置 |
| src/**tests**/setup.ts | 测试环境设置 |
| src/**tests**/unit/downloadStatus.test.ts | 示例单元测试 |
| e2e/basic.spec.ts | 示例 E2E 测试 |
### 4. 测试文档(1个文件)
| 文件 | 说明 |
| ---------- | ---------------------- |
| TESTING.md | 完整的测试文档(中文) |
### 5. CI/CD 集成(2个文件)
| 文件 | 操作 |
| --------------------------- | -------------------- |
| .github/workflows/test.yml | 新建(测试 CI |
| .github/workflows/build.yml | 更新(添加测试步骤) |
### 6. 完善文档(3个文件)
| 文件 | 说明 |
| ------------------ | -------------------- |
| DEPLOYMENT.md | 部署文档(中文) |
| TROUBLESHOOTING.md | 问题排查指南(中文) |
| FAQ.md | 常见问题(中文) |
### 7. Issue 模板更新(2个文件)
| 文件 | 操作 |
| ------------------------------------- | -------------- |
| .github/ISSUE_TEMPLATE/bug_report.md | 更新为标准模板 |
| .github/ISSUE_TEMPLATE/help_wanted.md | 更新为标准模板 |
### 8. 配置更新
| 文件 | 操作 |
| ------------ | ------------------ |
| package.json | 添加测试依赖和脚本 |
| .gitignore | 添加测试相关忽略项 |
## 📊 统计数据
- **创建的文件:** 23个
- **更新的文件:** 3个
- **删除的文件:** 2个
- **总计:** 28个文件操作
## 📝 新增的 npm 脚本
```json
{
"test": "vitest",
"test:watch": "vitest --watch",
"test:coverage": "vitest --coverage",
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"test:e2e:debug": "playwright test --debug",
"test:all": "npm run test && npm run test:e2e"
}
```
## 📦 新增的依赖
### Dev Dependencies
- `@playwright/test`: ^1.40.0
- `@testing-library/jest-dom`: ^6.1.5
- `@testing-library/vue`: ^8.0.1
- `@vitest/coverage-v8`: ^1.0.0
- `@vue/test-utils`: ^2.4.3
- `jsdom`: ^23.0.1
- `vitest`: ^1.0.0
## 🔍 已知问题
### LSP 类型错误
由于 Vitest 和 Vite 的版本兼容性问题,LSP 会报告一些类型错误,但这些不会影响实际运行:
- `vitest.config.ts` 中的插件类型不匹配(Vite vs Vitest 版本差异)
- 这些错误在运行时不会出现
### ESLint 错误
项目中有一些现有的 ESLint 错误需要修复:
- `src/App.vue`: 3个 `any` 类型错误
- `src/components/HomeView.vue`: 5个错误(未使用变量、any 类型)
- `src/components/TopActions.vue`: 1个未使用变量
这些是原有代码的问题,不是本次整理引入的。
## 🚀 下一步建议
1. **修复 ESLint 错误**
```bash
npm run lint:fix
```
2. **运行测试验证**
```bash
npm run test
```
3. **安装 Playwright 浏览器**
```bash
npx playwright install --with-deps chromium
```
4. **运行 E2E 测试**
```bash
npm run test:e2e
```
5. **提交代码**
```bash
git add .
git commit -m "chore: add comprehensive documentation and testing infrastructure" -s
git push origin main
```
## 📚 文档结构总览
```
apm-app-store/
├── AGENTS.md # AI 编码指南(中文)
├── CONTRIBUTING.md # 贡献指南(中文)
├── DEVELOPMENT.md # 开发文档(中文)
├── DEPLOYMENT.md # 部署文档(中文)
├── TROUBLESHOOTING.md # 问题排查(中文)
├── FAQ.md # 常见问题(中文)
├── TESTING.md # 测试文档(中文)
├── README.md # 项目说明(已存在)
├── CHANGELOG.md # 变更日志(已存在)
├── SECURITY.md # 安全政策(已存在)
├── LICENSE.md # 许可证(已存在)
├── CREDITS.md # 致谢(已存在)
├── vitest.config.ts # Vitest 配置
├── playwright.config.ts # Playwright 配置
├── .agents/
│ └── workflows/
│ ├── feature-development.md # 新功能开发
│ ├── bug-fix.md # Bug 修复
│ ├── code-review.md # 代码审查
│ ├── testing.md # 测试编写
│ ├── release.md # 发布流程
│ ├── refactoring.md # 代码重构
│ ├── documentation.md # 文档更新
│ ├── performance-optimization.md # 性能优化
│ └── security-audit.md # 安全审计
├── .github/
│ ├── workflows/
│ │ ├── test.yml # 测试 CI(新建)
│ │ └── build.yml # 构建 CI(更新)
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md # Bug 报告模板(更新)
│ └── help_wanted.md # 功能请求模板(更新)
├── src/
│ └── __tests__/
│ ├── setup.ts # 测试设置
│ └── unit/
│ └── downloadStatus.test.ts # 示例测试
└── e2e/
└── basic.spec.ts # E2E 测试示例
```
## 🎯 项目成熟度提升
整理前:
- ❌ 缺少完整的开发文档
- ❌ 缺少测试基础设施
- ❌ 工作流文档简单
- ❌ 没有自动化测试 CI
整理后:
- ✅ 完整的中文开发文档
- ✅ 完整的测试基础设施(Vitest + Playwright
- ✅ 9个详细的 AI 工作流
- ✅ 自动化测试 CI/CD
- ✅ 标准化的 Issue 模板
- ✅ 完善的部署和问题排查文档
---
**整理完成时间:** 2026-03-10
**整理执行者:** OpenCode AI Assistant
**文档版本:** 1.0
+47 -53
View File
@@ -1,79 +1,73 @@
# 星火应用商店 # Spark App Store
[![star](https://gitee.com/deepin-community-store/spark-store/badge/star.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/stargazers) [![fork](https://gitee.com/deepin-community-store/spark-store/badge/fork.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/members)
<div align="center"> Spark Store aims to collect Linux apps for the convieniece of Linux new comers
<img src="icons/spark-store.svg" alt="APM Logo" width="200" height="200" /> The collecting process needs everyone's help
**星火应用商店** We set up this APP Store and collect APPs/tools that everyone need widely. Also we pack Windows apps with wine.
## 简介 All packages will be shared in our repository for users to get freely.
欢迎来到**星火应用商店**!这是一个为 Linux 平台用户设计的应用商店,旨在解决 Linux 生态下应用分散、难以获取的问题。无论您使用什么类型的 Linux 发行版,在这里都有可能找到适合您的软件包。 Distrobution supportedDeepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(May stop support in the future ; UniontechOS Home 21
Linux 应用的数量相对有限,Wine 软件的可获取性也颇为困难。优秀的开发套件和工具资源散布在各大社区和论坛之间,这种分散化让整个生态系统难以得到全面的提升。 *About OpenKylin and deepin 23*
生态系统的构建并非依赖个体的孤立努力,而需要全社区共同参与。只有当大家的“星火”聚集一处,方可引发“燎原之势”。 The adaptation work is scheduled after their official release.
为了改善这一现状,我们推出了星火应用商店。星火社区广泛地收录了各种用户需求的软件包,汇集了高质量的小工具,并主动对 Wine 应用进行了适配,一切都储存在我们的软件库中,使得用户可以方便地获取这些应用。 You can track our Issue resoving progress here https://gitee.com/deepin-community-store/spark-store/board
**当前支持的 Linux 发行版包括(但不限于):**
- **amd64 架构:** Debian 10+ / Ubuntu 22.04+ / Arch Linux / Fedora / deepin / UOS / 银河麒麟
- **arm64 架构:** Debian 10+ / Ubuntu 22.04+ / Arch Linux / deepin / UOS / 银河麒麟
- **loong64 架构:** deepin 23/25
对于不同平台,商店展示的应用列表不同,如有需要请提交应用需求,我们会尽快添加。 We hope people who see here can also join our teamdevelopment help or submit applications are welcomed
If you want to submit an APP to share with othersPlease [Click here](https://upload.deepinos.org/index)
## 🙌 A simple start
If you simply want to install the Spark Store,just enter the [Release] page, find the version you want and install.
</div> If you are using Debian11/Ubuntu 20.04, you will need extra dependency package. Available [here](https://code.gitlink.org.cn/shenmo7192/spark-store-dependencies/raw/branch/master/spark-store-dependencies-kylin.zip)
## 🚀 快速开始
### 安装应用商店
* Debian(包括Ubuntu、deepin、银河麒麟、UOS)
1. 从 Release 下载最新版本的应用商店客户端。
2. 从启动器中打开并使用
* Fedora
1. `sudo dnf enable xmp360/spark-store`
2. `sudo dnf install spark-store`
* Arch Linux
1. paru -S spark-store
--- ---
<div align="center"> #### Compile and developement
<img src="./galleries/image.png" alt="APM Screenshot" width="90%" />
</div>
## 📦 关于 APM
**APM (AmberPM)** 是基于 `fuse-overlayfs` + `dpkg` + `AmberCE` 的容器化兼容层,为多发行版提供轻量级的应用运行方案。星火的 Arch Linux 版本和 Fedora 版本基于APM实现支持。 For Deepin V20/UOS 21/ Debian 11
### 核心特性 ```shell
sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin
**多发行版兼容** — 完美支持 Arch Linux、Fedora、银河麒麟、统信 UOS 等主流发行版,让星火商店应用随处可用 ```
🔄 **智能包转换** — 与 Debian 生态深度兼容,绝大多数 deb 包可一键自动转换为 APM 格式
**轻量兼容层** — 基于 overlayfs 技术打造,极速启动无负担,告别臃肿容器
🎮 **NVIDIA 硬件加速** — 智能识别主机 GPU 驱动,自动配置硬件加速,畅享流畅体验
APM的源码:[APM Source Code](https://gitee.com/amber-ce/amber-pm) Ubuntu 22.04
```shell
sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev qtwayland5 qtwayland5-dev-tools
--- ```
**重要须知:** 本软件无法保证持续可用、无中断运行或满足特定性能要求。星火社区对其功能完整性、稳定性及无错误运行不作任何承诺。例如,若您计划在 UOS 专业版(或其他类似特定平台)上使用,请务必了解并启用“开发者模式”相关功能。请确保您具备基础的故障排查能力。需要明确的是,星火社区无法在部分特殊平台上进行广泛测试。因此,在这些平台上使用星火应用商店客户端可能会导致一系列问题,如系统更新失败、数据丢失等;使用该软件,即代表您理解并同意所有风险需由用户自行承担。 Then
**© 2026 APM / AmberPM | The Spark Project** ```shell
git clone https://gitee.com/deepin-community-store/spark-store.git
cd spark-store
dpkg-buildpackage
```
Made with ❤️ by the Spark Store Team
</div>
## 🚀 Coorperation
We use Gitee as our code hosting platform. Please click here to contact us.
https://gitee.com/deepin-community-store/spark-store
### Rocket Chat
https://chat.shenmo.tech/
PWA Client
spk://store/chat/store.spark-app.feedback
Copy and paste to search bar or in browser address bar after installing Spark Store
+68
View File
@@ -0,0 +1,68 @@
# 星火应用商店
[![star](https://gitee.com/deepin-community-store/spark-store/badge/star.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/stargazers) [![fork](https://gitee.com/deepin-community-store/spark-store/badge/fork.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/members)
众所周知,国内的Linux应用比较少,wine应用难以获取,优质工具分散在民间各大论坛,无法形成合力,难以改善生态
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
我们创建了这个应用商店,广泛收录大家需要的软件包,搜集优质小工具,主动适配wine应用,存放到储存库供大家获取
我们支持:Deepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(将会逐渐停止支持) ; UOS Home 21
## 关于协作:分支相关的文档见 [这里](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo)
*关于OpenKylin和deepin 23*
支持计划将会在对应系统发布正式版之后开始评估和执行
希望看到这里的人也可以加入我们的队伍,开发或者投递应用都很欢迎,共同构建Linux应用生态
在这里追踪我们的Issue处理情况 https://gitee.com/deepin-community-store/spark-store/board
如果有想要提交的软件包,请 [在这里投稿](https://upload.deepinos.org/index)
## 🙌 简单的开始
如果想安装 `星火应用商店` ,请打开右侧的 [Release] 页面,找到最新版本,并选择适用于当前系统的安装包下载。
如果你在使用 `Debian 11/Ubuntu 20.04`,你需要额外下载[依赖补充包](https://code.gitlink.org.cn/shenmo7192/spark-store-dependencies/raw/branch/master/spark-store-dependencies-kylin.zip)
---
#### 编译安装
Deepin V20/UOS 21 系统下, 安装依赖
```shell
sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin
```
Ubuntu 22.04 系统下, 安装依赖
```shell
sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev qtwayland5 qtwayland5-dev-tools
```
然后
```shell
git clone https://gitee.com/deepin-community-store/spark-store.git
cd spark-store
dpkg-buildpackage
```
## 🚀 协作
非常感谢有兴趣的开发者或爱好者参与 `星火应用商店` 项目,分享你的见解与思路。
### 交流平台
https://chat.shenmo.tech/
客户端PWA
spk://store/chat/store.spark-app.feedback
(安装星火商店后在浏览器打开或复制到搜索栏打开)
-71
View File
@@ -1,71 +0,0 @@
# Security Policy / 安全策略
---
## 🌐 English Version
### Supported Versions
The following versions currently receive security updates:
| Version | Supported |
|---------|--------------------|
| > 1.0.4 | :white_check_mark: |
| < 1.0.4 | :x: |
> **Note**: Only versions marked with ✅ receive security patches. Upgrade to a supported version immediately if using an unsupported release.
### Reporting a Vulnerability
We deeply appreciate your efforts to responsibly disclose security issues. Please follow these guidelines:
#### 📬 How to Report
- **Preferred**: Use GitHub's [Private Vulnerability Reporting](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities)
#### 📋 Report Should Include
- Clear description of the vulnerability and potential impact
- Affected component/version
- Steps to reproduce (PoC code appreciated but optional)
- Suggested mitigation (if known)
- Contact information and preferred disclosure timeline
#### ⚠️ Important Notes
- **DO NOT** disclose publicly before coordination
- Avoid intrusive testing (e.g., data exfiltration, DoS)
- We comply with [ISO/IEC 29147](https://www.iso.org/standard/45173.html) vulnerability disclosure standards
- Good-faith researchers acting responsibly will not face legal action
Thank you for helping keep our community safe! 🛡️
---
## 🇨🇳 中文版本
### 支持的版本
以下版本当前接收安全更新:
| 版本 | 是否支持 |
|--------|-------------------|
| > 1.0.4 | :white_check_mark: |
| < 1.0.4 | :x: |
> **提示**:仅标记 ✅ 的版本接收安全补丁。如使用不受支持的版本,请立即升级至受支持版本。
### 漏洞报告流程
感谢您负责任地披露安全问题。请遵循以下指南:
#### 📬 报告方式
- **首选**:使用 GitHub [私有漏洞报告](https://docs.github.com/zh/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities) 功能
#### 📋 报告内容建议包含
- 漏洞清晰描述及潜在影响
- 受影响组件/版本
- 复现步骤(提供验证代码更佳,非必需)
- 建议的缓解措施(如已知)
- 联系方式及期望的披露时间
#### ⚠️ 重要提示
- 修复完成前**请勿公开披露**
- 避免侵入性测试(如数据窃取、拒绝服务攻击)
- 本流程遵循 [ISO/IEC 29147](https://www.iso.org/standard/45173.html) 漏洞披露国际标准
- 本着善意负责任研究的安全研究员将不会面临法律追责
感谢您为社区安全贡献力量!🛡️
-436
View File
@@ -1,436 +0,0 @@
# 测试文档
## 📋 目录
- [测试框架](#测试框架)
- [测试规范](#测试规范)
- [编写测试](#编写测试)
- [运行测试](#运行测试)
- [测试覆盖率](#测试覆盖率)
- [Mock 数据](#mock-数据)
- [E2E 测试](#e2e-测试)
## 测试框架
### Vitest(单元测试)
Vitest 是 Vite 原生的测试框架,提供快速的开发体验。
**特点:**
- 与 Vite 配置共享
- 极快的测试执行速度
- 内置 TypeScript 支持
- Jest 兼容的 API
**配置文件:** `vitest.config.ts`
### PlaywrightE2E 测试)
Playwright 用于端到端测试,模拟真实用户操作。
**特点:**
- 支持多浏览器(Chromium, Firefox, WebKit
- 自动等待
- 网络拦截和 mock
- 可视化测试运行
**配置文件:** `playwright.config.ts`
## 测试规范
### 命名规范
**测试文件:** `*.test.ts``*.spec.ts`
**测试目录结构:**
```
src/
├── __tests__/
│ ├── unit/ # 单元测试
│ │ ├── downloadStatus.test.ts
│ │ └── storeConfig.test.ts
│ ├── integration/ # 集成测试
│ │ └── installFlow.test.ts
│ └── setup.ts # 测试设置
└── components/
└── AppCard.test.ts # 组件测试
e2e/
├── install.spec.ts # E2E 测试
└── download.spec.ts
```
### 测试分组
使用 `describe` 分组相关测试:
```typescript
describe("ComponentName", () => {
describe("method", () => {
it("should do something", () => {
// ...
});
});
});
```
### 测试命名
使用清晰的描述性名称:
```typescript
好的:
it('should return true when app is installed')
it('should throw error when package not found')
不好的:
it('test1')
it('works')
```
## 编写测试
### 单元测试
**测试纯函数:**
```typescript
import { describe, it, expect } from "vitest";
import { parseInstalledList } from "@/modules/parse";
describe("parseInstalledList", () => {
it("should parse installed list correctly", () => {
const output = "code/stable,1.108.2 amd64 [installed]";
const result = parseInstalledList(output);
expect(result).toHaveLength(1);
expect(result[0].pkgname).toBe("code");
expect(result[0].version).toBe("1.108.2");
});
});
```
**测试 Vue 组件:**
```typescript
import { describe, it, expect } from "vitest";
import { mount } from "@vue/test-utils";
import AppCard from "@/components/AppCard.vue";
import type { App } from "@/global/typedefinition";
describe("AppCard", () => {
const mockApp: App = {
name: "Test App",
pkgname: "test-app",
version: "1.0.0",
filename: "test.deb",
torrent_address: "",
author: "Test",
contributor: "Test",
website: "https://example.com",
update: "2024-01-01",
size: "100M",
more: "Test app",
tags: "",
img_urls: [],
icons: "",
category: "test",
currentStatus: "not-installed",
};
it("should render app name", () => {
const wrapper = mount(AppCard, {
props: {
app: mockApp,
},
});
expect(wrapper.text()).toContain("Test App");
});
it("should emit install event", async () => {
const wrapper = mount(AppCard, {
props: {
app: mockApp,
},
});
await wrapper.find(".install-button").trigger("click");
expect(wrapper.emitted("install")).toBeTruthy();
});
});
```
### 集成测试
测试模块间的交互:
```typescript
import { describe, it, expect, vi, beforeEach } from "vitest";
import { installPackage } from "@/modules/processInstall";
import { downloads, addDownload } from "@/global/downloadStatus";
describe("installPackage integration", () => {
beforeEach(() => {
downloads.value = [];
vi.clearAllMocks();
});
it("should add download and send IPC message", () => {
const pkgname = "test-app";
installPackage(pkgname);
expect(downloads.value).toHaveLength(1);
expect(downloads.value[0].pkgname).toBe(pkgname);
expect(window.ipcRenderer.send).toHaveBeenCalledWith(
"queue-install",
expect.any(String),
);
});
});
```
## 运行测试
### 单元测试
```bash
# 运行所有测试
npm run test
# 监听模式(开发时)
npm run test:watch
# 运行特定文件
npm run test src/__tests__/unit/downloadStatus.test.ts
# 运行匹配模式的测试
npm run test -- downloadStatus
```
### 覆盖率
```bash
# 生成覆盖率报告
npm run test:coverage
# 报告位置:
# - 控制台: 文本报告
# - coverage/ 目录: HTML 报告
```
### E2E 测试
```bash
# 运行所有 E2E 测试
npm run test:e2e
# UI 模式(推荐用于开发)
npm run test:e2e:ui
# 调试模式
npm run test:e2e:debug
# 运行特定测试
npm run test:e2e -- install.spec.ts
```
## 测试覆盖率
### 覆盖率目标
- **语句覆盖率:** ≥ 70%
- **分支覆盖率:** ≥ 70%
- **函数覆盖率:** ≥ 70%
- **行覆盖率:** ≥ 70%
### 查看报告
```bash
npm run test:coverage
# 在浏览器中打开
open coverage/index.html
```
### CI 中强制检查
`.github/workflows/test.yml` 中配置覆盖率阈值。
## Mock 数据
### Mock IPC
`src/__tests__/setup.ts` 中全局 mock
```typescript
global.window = Object.create(window);
Object.defineProperty(window, "ipcRenderer", {
value: {
send: vi.fn(),
on: vi.fn(),
off: vi.fn(),
invoke: vi.fn(),
removeListener: vi.fn(),
},
});
```
### Mock API 响应
```typescript
import { vi } from "vitest";
import axios from "axios";
vi.mock("axios");
describe("fetchApps", () => {
it("should fetch apps from API", async () => {
const mockApps = [{ name: "Test", pkgname: "test" }];
axios.get.mockResolvedValue({ data: mockApps });
const result = await fetchApps();
expect(result).toEqual(mockApps);
});
});
```
### Mock 文件系统
```typescript
import { vi } from "vitest";
import fs from "node:fs";
vi.mock("node:fs");
describe("readConfig", () => {
it("should read config file", () => {
const mockConfig = { theme: "dark" };
fs.readFileSync.mockReturnValue(JSON.stringify(mockConfig));
const config = readConfig();
expect(config).toEqual(mockConfig);
});
});
```
## E2E 测试
### 编写 E2E 测试
```typescript
import { test, expect } from "@playwright/test";
test.describe("App Installation", () => {
test.beforeEach(async ({ page }) => {
await page.goto("http://127.0.0.1:3344");
});
test("should install an app", async ({ page }) => {
// 搜索应用
await page.fill('input[placeholder="搜索应用"]', "Test App");
await page.press('input[placeholder="搜索应用"]', "Enter");
// 等待结果
await expect(page.locator(".app-card")).toBeVisible();
// 点击安装
await page.click('.app-card:has-text("Test App") .install-button');
// 验证下载队列
await expect(page.locator(".download-queue")).toBeVisible();
await expect(page.locator(".download-item")).toHaveText("Test App");
});
test("should show installation progress", async ({ page }) => {
// ... 测试进度显示
});
test("should handle installation failure", async ({ page }) => {
// ... 测试失败处理
});
});
```
### E2E 测试最佳实践
1. **使用选择器**
```typescript
// 推荐:语义化选择器
await page.click('[data-testid="install-button"]');
// 避免:脆弱的选择器
await page.click("button.btn-primary");
```
2. **等待元素**
```typescript
// 自动等待
await expect(page.locator(".modal")).toBeVisible();
// 手动等待(必要时)
await page.waitForSelector(".modal", { state: "visible" });
```
3. **截图和视频**
- 失败时自动截图
- 失败时自动录制视频
4. **网络拦截**
```typescript
await page.route("**/api/**", (route) => {
route.fulfill({
status: 200,
body: JSON.stringify(mockData),
});
});
```
## 常见问题
### 测试超时
```typescript
test(
"slow test",
async () => {
// 增加超时时间
},
{ timeout: 10000 },
);
```
### 异步测试
```typescript
it("should handle async operation", async () => {
await someAsyncOperation();
expect(result).toBe(expected);
});
```
### 清理副作用
```typescript
import { afterEach } from "vitest";
afterEach(() => {
// 清理 mock
vi.restoreAllMocks();
// 清理状态
downloads.value = [];
});
```
---
**© 2026 APM 应用商店项目**
-160
View File
@@ -1,160 +0,0 @@
# 问题排查指南
## 📋 目录
- [常见问题](#常见问题)
- [调试方法](#调试方法)
- [日志分析](#日志分析)
- [性能问题](#性能问题)
## 常见问题
### 应用无法启动
**症状:** 双击应用图标后无反应
**可能原因:**
1. 依赖包未安装
2. 配置文件损坏
3. 权限问题
**解决方法:**
```bash
# 检查日志
journalctl -u spark-store
# 重新安装
sudo dpkg -i spark-store_*.deb
# 检查依赖
sudo apt-get install -f
```
### 安装失败
**症状:** 点击安装按钮后无响应或报错
**可能原因:**
1. APM 未安装
2. 权限不足
3. 网络问题
**解决方法:**
```bash
# 检查 APM 是否安装
which apm
# 检查权限
pkexec --version
# 查看 APM 日志
sudo journalctl -u amber-pm
```
### 下载速度慢
**症状:** 下载进度缓慢
**解决方法:**
1. 检查网络连接
2. 更换下载源
3. 使用代理
### 主题切换无效
**症状:** 切换暗色/亮色主题后无变化
**解决方法:**
```bash
# 清除本地存储
rm -rf ~/.config/spark-store/
```
## 调试方法
### 主进程调试
```bash
# 使用命令行启动并查看日志
spark-store --enable-logging
```
### 渲染进程调试
1. 打开应用
2.`Ctrl+Shift+I` 打开 DevTools
3. 查看 Console 和 Network 标签
### IPC 通信调试
`electron/main/index.ts` 中添加日志:
```typescript
ipcMain.on("test-channel", (event, data) => {
logger.info("IPC received:", data);
});
```
## 日志分析
### 日志位置
- **主进程日志:** `~/.config/spark-store/logs/`
- **系统日志:** `journalctl -u spark-store`
### 日志级别
- `trace`: 最详细
- `debug`: 调试信息
- `info`: 一般信息
- `warn`: 警告
- `error`: 错误
- `fatal`: 致命错误
### 查看日志
```bash
# 查看最新日志
tail -f ~/.config/spark-store/logs/main.log
# 搜索错误
grep ERROR ~/.config/spark-store/logs/*.log
```
## 性能问题
### 内存占用高
**检查方法:**
1. 打开 DevTools → Performance 标签
2. 录制并分析内存使用
**优化建议:**
- 清理不必要的组件
- 使用虚拟滚动
- 避免内存泄漏
### 启动慢
**检查方法:**
1. 查看 DevTools → Network 标签
2. 检查加载时间
**优化建议:**
- 延迟加载非关键资源
- 优化 API 请求
- 减少 HTTP 请求数量
---
**© 2026 APM 应用商店项目**
-632
View File
@@ -1,632 +0,0 @@
# 标准开发流程
本文档描述在 APM 应用商店项目中完成代码开发后的标准提交流程。
## 📋 目录
- [开发前准备](#开发前准备)
- [代码完成后](#代码完成后)
- [提交流程](#提交流程)
- [典型场景](#典型场景)
- [提交流程检查清单](#提交流程检查清单)
- [常见问题](#常见问题)
---
## 开发前准备
在开始开发之前,确保你的开发环境已正确配置:
```bash
# 1. 切换到项目目录
cd apm-app-store
# 2. 拉取最新代码
git pull origin main
# 3. 创建功能分支
git checkout -b feature/your-feature-name
# 或修复分支
git checkout -b fix/your-bug-fix
# 4. 确保依赖已安装
npm install
```
---
## 代码完成后
### 1️⃣ 运行代码检查
首先确保代码符合项目规范:
```bash
# 运行 ESLint 检查
npm run lint
# 如果有错误,尝试自动修复
npm run lint:fix
# 手动修复无法自动处理的问题
```
**ESLint 错误类型:**
- `@typescript-eslint/no-explicit-any`: 避免使用 `any` 类型
- `@typescript-eslint/no-unused-vars`: 未使用的变量
- 其他代码风格问题
### 2️⃣ 格式化代码
使用 Prettier 格式化代码:
```bash
npm run format
```
### 3️⃣ 运行测试
确保所有测试通过:
```bash
# 运行单元测试
npm run test
# 生成测试覆盖率报告
npm run test:coverage
# 运行 E2E 测试(如果需要)
npm run test:e2e
# 运行所有测试
npm run test:all
```
**测试覆盖率要求:**
- 语句覆盖率: ≥ 70%
- 分支覆盖率: ≥ 70%
- 函数覆盖率: ≥ 70%
- 行覆盖率: ≥ 70%
### 4️⃣ 构建验证
验证代码可以成功构建:
```bash
# 仅构建前端代码(快速)
npm run build:vite
```
如果构建失败,检查 TypeScript 错误并修复。
---
## 提交流程
### 5️⃣ 提交代码
#### 查看变更
```bash
# 查看所有变更文件
git status
# 查看具体变更
git diff
```
#### 添加文件
```bash
# 添加所有变更文件
git add .
# 或添加特定文件
git add path/to/file.ts
```
#### 提交信息
遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范:
```
type(scope): subject
[可选的正文]
[可选的脚注]
```
**Type 类型:**
- `feat`: 新功能
- `fix`: Bug 修复
- `docs`: 文档更新
- `style`: 代码格式(不影响功能)
- `refactor`: 重构
- `perf`: 性能优化
- `test`: 测试相关
- `chore`: 构建/工具相关
**Scope 范围:**
- `app`: 应用核心
- `install`: 安装/卸载
- `ui`: UI 组件
- `ipc`: IPC 通信
- `api`: API 集成
- `theme`: 主题
- `build`: 构建
- `docs`: 文档
**Subject 主题:**
- 使用现在时态("add" 而非 "added"
- 首字母小写
- 不以句号结尾
**示例:**
```bash
# 新功能
git commit -m "feat(install): add retry mechanism for failed installations" -s
# Bug 修复
git commit -m "fix(ui): correct dark mode toggle persistence" -s
# 文档更新
git commit -m "docs(readme): update build instructions" -s
# 重构
git commit -m "refactor(ipc): simplify install manager event handling" -s
# 测试
git commit -m "test(download): add unit tests for download queue" -s
```
**添加签名:**
```bash
# 使用 -s 添加签名
git commit -m "feat(example): add new feature" -s
# 或在 ~/.gitconfig 中配置
# [commit]
# gpgsign = true
```
#### 执行提交
```bash
git commit -m "type(scope): description" -s
```
### 6️⃣ 推送到远程仓库
```bash
# 推送当前分支
git push origin feature/your-feature-name
# 或使用简写
git push -u origin feature/your-feature-name
```
### 7️⃣ 创建 Pull Request
#### 访问 GitHub
1. 访问仓库页面
2. 点击 "New Pull Request"
3. 选择你的分支 → main 分支
#### 填写 PR 模板
使用 PR 模板填写信息:
**变更类型:**
- [ ] `feat` - 新功能
- [ ] `fix` - Bug 修复
- [ ] `refactor` - 重构
- [ ] `docs` - 文档更新
- [ ] `test` - 测试相关
- [ ] `chore` - 构建/工具相关
**变更描述:**
清晰简洁地说明你做了什么,为什么这么做。
**相关 Issue**
引用相关的 Issue 编号,例如 `Fixes #123``Closes #123`
**测试说明:**
如何测试这些变更?包括:
- 测试步骤
- 预期结果
- 测试环境
**截图/录屏:**
如果涉及 UI 变更,添加截图或录屏。
**检查清单:**
- [ ] 代码通过 `npm run lint`
- [ ] 代码通过 `npm run format`
- [ ] 所有测试通过 (`npm run test`)
- [ ] 新功能包含测试
- [ ] 文档已更新(如需要)
#### 提交 PR
点击 "Create Pull Request"。
### 8️⃣ 代码审查
#### 等待审查
- 至少一位维护者会审查你的 PR
- CI 会自动运行测试和检查
- 确保所有 CI 检查通过(绿色 ✅)
#### 响应审查意见
- 阅审审查者提出的意见
- 进行必要的修改
- 提交更改到你的分支
- 在 PR 中评论说明修改内容
#### 更新 PR
```bash
# 修改代码后
git add .
git commit -m "address review feedback" -s
git push origin feature/your-feature-name
```
### 9️⃣ 合并 PR
#### 合并条件
- 至少一次审查批准
- 所有 CI 检查通过
- 无冲突
- 分支最新
#### 合并方式
- 使用 "Squash and merge" 将提交压缩为一个
- 或使用 "Merge commit" 保留提交历史
#### 删除分支
合并后删除你的功能分支:
```bash
# 删除本地分支
git branch -d feature/your-feature-name
# 删除远程分支
git push origin --delete feature/your-feature-name
```
---
## 典型场景
### 场景 1: 开发新功能
```bash
# 1. 创建功能分支
git checkout -b feature/add-search-filters
# 2. 开发代码...
# (编写代码)
# 3. 运行检查
npm run lint
npm run lint:fix
npm run format
npm run test
# 4. 构建验证
npm run build:vite
# 5. 提交代码
git add .
git commit -m "feat(search): add advanced search filters with category filtering" -s
# 6. 推送
git push -u origin feature/add-search-filters
# 7. 创建 PR
# (在 GitHub 上创建 PR
```
### 场景 2: 修复 Bug
```bash
# 1. 创建修复分支
git checkout -b fix/fix-download-timeout
# 2. 修复代码...
# 3. 运行检查
npm run lint
npm run format
npm run test
# 4. 提交代码
git add .
git commit -m "fix(download): resolve timeout issue with retry logic" -m "Fixes #123" -s
# 5. 推送
git push -u origin fix/fix-download-timeout
# 6. 创建 PR
```
### 场景 3: 更新文档
```bash
# 1. 创建文档分支
git checkout -b docs/update-api-docs
# 2. 更新文档...
# 3. 提交代码
git add .
git commit -m "docs(api): update installation API documentation" -s
# 4. 推送
git push -u origin docs/update-api-docs
# 5. 创建 PR
```
### 场景 4: 重构代码
```bash
# 1. 创建重构分支
git checkout -b refactor/simplify-download-manager
# 2. 重构代码...
# 3. 运行检查
npm run lint
npm run format
npm run test
# 4. 提交代码
git add .
git commit -m "refactor(download): simplify download manager event handling" -s
# 5. 推送
git push -u origin refactor/simplify-download-manager
# 6. 创建 PR
```
---
## 提交流程检查清单
在创建 PR 前,确保完成以下检查:
### 代码质量
- [ ] ESLint 检查通过 (`npm run lint`)
- [ ] 代码已格式化 (`npm run format`)
- [ ] 没有 `any` 类型(除非必要并添加注释)
- [ ] 遵循代码规范(见 [AGENTS.md](./AGENTS.md)
- [ ] TypeScript 严格模式通过
### 测试
- [ ] 单元测试通过 (`npm run test`)
- [ ] 新功能包含测试
- [ ] 测试覆盖率 ≥ 70%
- [ ] E2E 测试通过(如需要,`npm run test:e2e`
- [ ] 没有测试回归
### 文档
- [ ] 更新了相关文档(如需要)
- [ ] 更新了 CHANGELOG.md(如需要)
- [ ] API 文档更新(如需要)
- [ ] README.md 更新(如需要)
### 功能验证
- [ ] 本地测试通过
- [ ] 没有引入新 Bug
- [ ] 边界情况已处理
- [ ] 错误处理完善
- [ ] 性能未下降
### 提交信息
- [ ] 遵循 Conventional Commits 规范
- [ ] 添加了签名(`-s`
- [ ] 引用相关 Issue(如适用)
- [ ] 提交信息清晰明确
---
## 快速提交命令
如果你想快速提交所有检查,可以使用以下命令:
```bash
# 完整流程(一行命令)
npm run lint && npm run format && npm run test && git add . && git commit -m "type(scope): description" -s && git push -u origin $(git branch --show-current)
```
### 创建便捷脚本
`scripts/` 目录下创建 `commit.sh`:
```bash
#!/bin/bash
# 检查参数
if [ -z "$1" ]; then
echo "❌ 错误: 请提供提交信息"
echo "使用方法: ./scripts/commit.sh \"type(scope): description\""
exit 1
fi
echo "🔍 Running lint..."
npm run lint
if [ $? -ne 0 ]; then
echo "❌ ESLint 检查失败,请修复错误后重试"
exit 1
fi
echo "🎨 Formatting code..."
npm run format
echo "🧪 Running tests..."
npm run test
if [ $? -ne 0 ]; then
echo "❌ 测试失败,请修复测试后重试"
exit 1
fi
echo "📝 Committing changes..."
git add .
git commit -m "$1" -s
if [ $? -ne 0 ]; then
echo "❌ 提交失败"
exit 1
fi
echo "🚀 Pushing to remote..."
BRANCH_NAME=$(git branch --show-current)
git push -u origin $BRANCH_NAME
if [ $? -ne 0 ]; then
echo "❌ 推送失败"
exit 1
fi
echo ""
echo "✅ 提交成功!"
echo "📌 分支: $BRANCH_NAME"
echo "📝 提交信息: $1"
echo "🔗 请创建 Pull Request: https://github.com/elysia-best/apm-app-store/compare/main...$BRANCH_NAME"
```
使用方法:
```bash
# 给脚本添加执行权限
chmod +x scripts/commit.sh
# 使用脚本提交
./scripts/commit.sh "feat(search): add advanced search filters"
```
---
## 常见问题
### Q: ESLint 检查失败怎么办?
**A:**
1. 运行 `npm run lint:fix` 自动修复
2. 手动修复无法自动处理的问题
3. 如果确实需要使用 `any`,添加 `// eslint-disable-next-line @typescript-eslint/no-explicit-any`
### Q: 测试失败怎么办?
**A:**
1. 查看测试失败信息
2. 修复代码或测试
3. 确保测试覆盖所有情况
4. 运行 `npm run test` 重新验证
### Q: 构建失败怎么办?
**A:**
1. 查看 TypeScript 错误
2. 修复类型错误
3. 确保类型定义正确
4. 运行 `npm run build:vite` 重新验证
### Q: 如何修复合并冲突?
**A:**
```bash
# 1. 拉取最新代码
git fetch origin
# 2. 合并 main 分支到你的分支
git merge origin/main
# 3. 解决冲突
# (编辑冲突文件,选择正确的代码)
# 4. 标记冲突已解决
git add .
# 5. 提交合并
git commit -m "merge: resolve conflicts with main" -s
# 6. 推送
git push origin feature/your-feature-name
```
### Q: 如何修改已提交的代码?
**A:**
```bash
# 1. 修改代码...
# 2. 添加到暂存区
git add .
# 3. 提交到分支
git commit -m "address review feedback" -s
# 4. 推送
git push origin feature/your-feature-name
```
### Q: 如何撤回错误的提交?
**A:**
```bash
# 如果还未推送
git reset --soft HEAD~1
# 重新提交
git commit -m "correct message" -s
# 如果已推送(需要强制推送,谨慎使用)
git reset --soft HEAD~1
git commit -m "correct message" -s
git push origin feature/your-feature-name --force
```
**注意:** 避免在已公开的分支上使用强制推送。
---
## 📚 相关文档
- **开发指南:** [DEVELOPMENT.md](./DEVELOPMENT.md)
- **贡献指南:** [CONTRIBUTING.md](./CONTRIBUTING.md)
- **测试文档:** [TESTING.md](./TESTING.md)
- **AI 编码指南:** [AGENTS.md](./AGENTS.md)
- **部署文档:** [DEPLOYMENT.md](./DEPLOYMENT.md)
---
**© 2026 APM 应用商店项目**
+415
View File
@@ -0,0 +1,415 @@
spark-store (4.1.2) stable; urgency=medium
* feat: 初步的wayland支持
* fix: 首页的捐赠页面在中文环境下显示中文
* chore: 新增编译依赖,测试安装时不会出现报错
* fix: 更新检测模块在aptss ssupdate操作失败后现在会正确地移除锁而不是错误的残留锁。
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.1.1) stable; urgency=medium
* fix:更新失效
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.1.0) stable; urgency=medium
* feat: 现在可以支持UOS签名包问题了
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.0.1) stable; urgency=medium
* feat: 提升Ubuntu下的显示效果
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.0.0) stable; urgency=medium
* feat: 修复了成吨的bug后开始正式版
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.0.0~test2) stable; urgency=medium
* feat: 修复了成吨的bug后开始公测
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.0.0~test1) stable; urgency=medium
* feat: 柚子过来补充一下啦
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.4~test1) stable; urgency=medium
* feat: aptss不再尝试安装apt-fast,转而自带
* chore: 删除password-check模块
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3) stable; urgency=medium
* feat: 首页链接调用浏览器打开
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
0spark-store (3.3.3~test5) stable; urgency=medium
* 修复可能的内存泄漏问题
* 修复应用搜索为空但仍显示上一次搜索结果的问题
* 修复动画加载延后的问题
* 修复统计下载量卡主渲染线程的问题
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test4) stable; urgency=medium
* Enable i386 arch support by default
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test3) stable; urgency=medium
* Now use ss-apt-fast instead of apt-fast
* 修复:右上角 更新和安装设置 菜单中进入更新列表失效
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test2) stable; urgency=medium
* bug fix: 更新和检查更新出错时不报错.此更新需要一个推送
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test1) stable; urgency=medium
* 3.3.3将会是修复大部分bug后的最终版本
* 图形环境中所有root权限的组件剥离到cli(可用于deepin 23 daily,只保证商店本体正常运作,不处理安装依赖不满足)
* 文案更改:更新检查-->检查更新
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.1~test1) stable; urgency=medium
* 安装时不再需要联网
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.4) stable; urgency=medium
* 为减轻服务器压力,不再单独更新某一个应用,而是作为整体更新
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.3) stable; urgency=medium
* 回滚 更新中行为到进度条而不是实时输出
* 更新应用时显示正在更新哪个应用
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.2) stable; urgency=medium
* 修复 pkexec未执行
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.1) stable; urgency=medium
* 修复 检查更新的更新进程未实际运行
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3) stable; urgency=medium
* 修复 检查更新 未刷新软件源
* 把检查更新单独拿出作为左列
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3~test3) stable; urgency=medium
* 把检查更新加入免密码
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3~test2) stable; urgency=medium
* 更新检测功能全部更改到zenity
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3~test1) stable; urgency=medium
* zenity,选择可更新应用
* 自动更新检测现在会跳过hold
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4) stable; urgency=medium
* 修改tag相关的文案内容:wine相关环境已可自动配置了
* 准备发版
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4~test4) stable; urgency=medium
* 现在在商店启动后点击spk链接仍会正常启动 https://gitee.com/deepin-community-store/spark-store/commit/dd6780d636042bf12d77414e6f1552cc7d1ed24c
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4~test3) stable; urgency=medium
* 发版,合入到master
* 翻译完毕
* 合入先前的各项改动,为:客户端集成投稿器入口和支持,修复:安装依赖时间较长时错误地返回“安装完毕”结果,现在客户端版本更新时不关闭免密码登录,UOS安装进程合并正常aptss中
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4~test2) stable; urgency=medium
* 客户端集成投稿器入口和支持
* 修复:安装依赖时间较长时错误地返回“安装完毕”结果
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4~test1) stable; urgency=medium
* 客户端更新时不关闭免密码登录
* UOS合并正常aptss中
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.3) stable; urgency=medium
* 客户端异常退出时仍然占用资源问题修复
* 降低dtk依赖版本,Debian 11 stable可直接安装
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.2) stable; urgency=medium
* aptss will now refresh the system source before doing install, policy....etc
* 启动客户端GPU加速支持
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.1) stable; urgency=medium
* 更改刷新系统源的功能
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2) stable; urgency=medium
* 新增 下载量统计功能
* 新增 显示下载量
* 修复 spk链接生成错误
* 调整 启动时检测商店applist源
* 新增 applist cdn加速
* 调整 ssupdate不再更新/etc/aptss下的cache,如要如此,请使用aptss update
* 修复 在更新检测设置中的是否开启自动更新检测设置项的显示不随开启或关闭状态改变
* 修复 在检测更新时临时降低优先级到100,防止系统中有且版本一致的包被反复来回更新
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.6) stable; urgency=medium
* 修复部分情况下无法选中正确的镜像源的问题
* 合入3.1.5以来的各项修改
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-5) stable; urgency=medium
* 从所有镜像源中选取最快镜像源高速下载
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-4) stable; urgency=medium
* 更改ss-apt-fast策略,现在只会在update,ssupdate和没有检测到配置文件的时候更新配置文件
* 新增ss-apt-fast别名:aptss
* 更新检测服务优化:从分体改为一体
* aptss 支持自动补全
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-3) stable; urgency=medium
* 包内自带密钥
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-2) stable; urgency=medium
* 下载软件时跳过获取大小,修复部分软件无法下载的问题
* 修复 获取key时出错,指定使用http1.1
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-1) stable; urgency=medium
* 改变更新策略,UOS也下载加速,但是安装不加速
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5) stable; urgency=medium
* 改变更新策略,现在支持应用在更新时引入新依赖
* ss-apt-fast现在默认允许降级,以与apt使用体验一致
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.4-2) stable; urgency=medium
* 客户端下载使用metalink来支持bt下载加速
* 修复使用更新和安装设置更新商店本体时出错
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.4-1) stable; urgency=medium
* 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
* 修复:ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.4) stable; urgency=medium
* 发布正式版,同步到官网
* 修复安装时使用wget的问题
* 合并3.1.3-1和3.1.3-2的更改
* 屏蔽了ssinstall之外的安装方式
* 调整了报错框的形式
* 修复pkexec下ssinstall不处理依赖
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3-2) stable; urgency=medium
* 调整 现在与系统更新分开,不再导致更新失败
* 支持直接更新软件源文件,不再让d.吃全部更新流量
* ss-apt-fast不再强制root权限
* 修改ss-apt-fast的策略,现在除了安装,下载和更新都改用apt
* ssinstall 现在也会在不适用ss-apt-fast的时候模拟源了(针对UOS)
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3-1) stable; urgency=medium
* 修复 下载提前退出
* 移除 下载量显示
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3) stable; urgency=medium
* Now uses aria2 to download softwares form all mirrors
* 新增:ssinstall现在会在没有apt-fast的时候自动安装
* 新增:ss-apt-fast现在会在没有apt-fast的时候自动安装
* 修改:删除ssinstall中无用的 || dpkg -P $1
* 新增:ss-apt-fast会先下载云上的conf以确保mirror是最新的
* 修复:去除wget指令
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.2) stable; urgency=medium
* Now let apt-fast method support all mirrors
* Now will download dependencies and upgrade with all mirrors
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.1.1) stable; urgency=medium
* Now will delete the link of policy file after uninstall or upgrade
* Now ss-update-controler will create symbol link instead of hard link
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.1.0) stable; urgency=medium
* Add pkexec policy: ssinstall. Only will be enabled after permitted.
* Modify ssinistall script: Now will ask for password when not run as root
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.0.3-13) stable; urgency=medium
* Update the ssinstall script. Now support apt-fast and will temporarily increase the spark store source priority to 500 to make depends install correctly
* Change the style of About Dialog
* Modified depends to avoid Deb installers can not handle "Provides"
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.0.3-12) stable; urgency=medium
* Rollback to use DApplication::loadDXcbPlugin() to make titlebar behave normally in ubuntu
* Now can run on Debian 11
* Now can run on Ubuntu 22.04
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.0.3-11) stable; urgency=medium
* Now support autoupdate
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.0.3-10) stable; urgency=medium
* Now also compile dstore patch
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.0.3-9) stable; urgency=medium
* Support dpkg-buildpackage
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
+1
View File
@@ -0,0 +1 @@
11
+49
View File
@@ -0,0 +1,49 @@
Source: spark-store
Maintainer: shenmo <shenmo@spark-app.store>
Section: utils
Priority: optional
Build-Depends:
debhelper (>= 9),
pkg-config,
qtchooser (>= 55-gc9562a1-1~),
libqt5core5a,
libqt5gui5,
libqt5widgets5,
libqt5network5,
libqt5concurrent5,
libdtkcore-dev(>=5.0),
libdtkgui-dev(>=5.0),
libdtkwidget-dev(>=5.0),
qttools5-private-dev,
qtwebengine5-dev,
qtwayland5,
qtwayland5-dev-tools,
gcc,
g++
Standards-Version: 3.0
Homepage: https://www.spark-app.store/
Package: spark-store
Architecture: any
Depends:${shlibs:Depends}, ${misc:Depends},
libqt5core5a,
libqt5gui5,
libqt5widgets5,
libqt5network5,
libqt5concurrent5,
qtwayland5,
libdtkcore5,
libdtkgui5,
libdtkwidget5,
curl,
openssl,
dde-qt5integration,
bubblewrap,
aria2,
gcc,
g++,
zenity
Description: Spark Store
A community powered app store, based on DTK.
Recommends: apt-fast
+22
View File
@@ -0,0 +1,22 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: spark-store
Source: https://gitee.com/deepin-community-store/spark-store
Files: *
Copyright: The Spark Project Developers
License: GPL-3+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
.
On Debian systems, the complete text of the GNU General
Vendored Executable
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/make -f
export QT_SELECT=5
include /usr/share/dpkg/default.mk
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
DH_AUTO_ARGS = --parallel --buildsystem=qmake
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@ --parallel
override_dh_auto_clean:
rm -rf $(CURDIR)/build
override_dh_auto_configure:
mkdir -p $(CURDIR)/build
dh_auto_configure MAKEFLAGS=-j$(JOBS) -- spark-store-project.pro \
-spec linux-g++ CONFIG+=qtquickcompiler \
-o $(CURDIR)/build/
override_dh_auto_build:
make -C $(CURDIR)/build -j$(JOBS)
override_dh_auto_install:
make -C $(CURDIR)/build install \
INSTALL_ROOT=$(CURDIR)/debian/spark-store
# Ignore the dpkg-shlibdeps: warning (it uses none of the library's symbols)
# Qt Mutidedia lib will ref to network libraray.
override_dh_shlibdeps:
dh_shlibdeps --dpkg-shlibdeps-params=--warnings=0
+1
View File
@@ -0,0 +1 @@
1.0
Vendored Executable
+88
View File
@@ -0,0 +1,88 @@
#!/bin/sh
case "$1" in
configure)
# Enable i386 arch
echo "Enable i386 arch..."
dpkg --add-architecture i386
# config for aptss
mkdir -p /etc/aptss/sources.list.d
ln -s -f /etc/apt/sources.list /etc/aptss/sources.list
# Remove the sources.list file
if [ -e /etc/apt/sources.list.d/sparkstore.list ];then
rm /etc/apt/sources.list.d/sparkstore.list
fi
# Check if /usr/local/bin existed
mkdir -p /usr/local/bin
# Create symbol links for binary files
ln -s -f /opt/durapps/spark-store/bin/ussinstall /usr/local/bin/ussinstall
ln -s -f /opt/durapps/spark-store/bin/ussremove /usr/local/bin/ussremove
ln -s -f /opt/durapps/spark-store/bin/spark-store /usr/local/bin/spark-store
ln -s -f /opt/durapps/spark-store/bin/ssinstall /usr/local/bin/ssinstall
ln -s -f /opt/durapps/spark-store/bin/spark-dstore-patch /usr/local/bin/spark-dstore-patch
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/local/bin/ss-apt-fast
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/bin/aptss
# Create symbol links for SSINSTALL
ln -s -f /opt/durapps/spark-store/bin/auto-install-policy/store.spark-app.ssinstall.policy /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
echo "Compiling the Sender module..."
gcc /opt/durapps/spark-store/bin/ss-feedback/sender-d.sh.c -o /opt/durapps/spark-store/bin/ss-feedback/sender-d
# Install key
mkdir -p /tmp/spark-store-install/
cp -f /opt/durapps/spark-store/bin/spark-store.asc /tmp/spark-store-install/spark-store.asc
gpg --dearmor /tmp/spark-store-install/spark-store.asc
cp -f /tmp/spark-store-install/spark-store.asc.gpg /etc/apt/trusted.gpg.d/spark-store.gpg
# Run apt update to avoid users being fucked up by the non-exist dependency problem
# Now abandoned as aptss now run ssupdate everytime
#aptss ssupdate
# Start upgrade detect service
systemctl enable spark-update-notifier
service spark-update-notifier start
# Update certain caches
update-icon-caches /usr/share/icons/hicolor || true
update-desktop-database /usr/share/applications || true
xdg-mime default spark-store.desktop x-scheme-handler/spk
update-mime-database /usr/share/mime || true
# Send email for statistics
# /tmp/spark-store-install/feedback.sh
# Remove temp dir
rm -rf /tmp/spark-store-install
;;
triggered)
# Quit if deepin-app-store-tool existed
if [ -x "/usr/bin/deepin-app-store-tool" ] ; then
exit 0
fi
# Trigger for UOS debs installation
echo '--------检测到Uniontech标准软件包,运行补丁以修正安装--------'
if [ -x "/usr/local/bin/spark-dstore-patch" ] ; then
/usr/local/bin/spark-dstore-patch
echo '-----------spark-dstore-patch补丁工具已运行完毕-----------'
else
echo '------------spark-dstore-patch补丁工具运行失败------------'
fi
;;
esac
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
# Update certain caches
update-icon-caches /usr/share/icons/hicolor || true
update-desktop-database /usr/share/applications || true
update-mime-database /usr/share/mime || true
Vendored Executable
+28
View File
@@ -0,0 +1,28 @@
#!/bin/bash
#检测网络链接畅通
function network-check()
{
#超时时间
local timeout=15
#目标网站
local target=www.baidu.com
#获取响应状态码
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x200" ]; then
echo "Network Checked successful ! Continue..."
echo "网络通畅,继续安装"
else
#网络不畅通
echo "Network failed ! Cancel the installation"
echo "网络不畅,终止安装"
exit -1
fi
}
#network-check
echo "不再检测网络"
Vendored Executable
+47
View File
@@ -0,0 +1,47 @@
#!/bin/sh
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
# Remove residual symbol links
rm /usr/local/bin/spark-store
rm /usr/local/bin/ssinstall
rm /usr/local/bin/spark-dstore-patch
rm /usr/local/bin/ussinstall
rm /usr/local/bin/ussremove
rm /usr/local/bin/ss-apt-fast
rm /usr/bin/aptss
rm -rf /etc/aptss/
# Remove Sender module
rm /opt/durapps/spark-store/bin/ss-feedback/sender-d
# Remove residual symbol links to stop upgrade detect if exist
if [ -e /etc/xdg/autostart/spark-update-notifier.desktop ];then
rm /etc/xdg/autostart/spark-update-notifier.desktop
fi
# Shutdown services
service spark-update-notifier stop
# Stop update detect service
systemctl disable spark-update-notifier
# Clean the auto install polkit file if exist
if [ -f "/usr/share/polkit-1/actions/store.spark-app.ssinstall.policy" ] ; then
rm /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
fi
# Remove gpg key file
if [ -f "/etc/apt/trusted.gpg.d/spark-store.gpg" ] ; then
rm /etc/apt/trusted.gpg.d/spark-store.gpg
fi
apt-key del '9D9A A859 F750 24B1 A1EC E16E 0E41 D354 A29A 440C'
else
echo "非卸载操作,不进行配置清理"
fi
+1
View File
@@ -0,0 +1 @@
interest-noawait /opt/apps
-69
View File
@@ -1,69 +0,0 @@
import { test, expect } from "@playwright/test";
test.describe("应用基本功能", () => {
test.beforeEach(async ({ page }) => {
// Mock the backend store APIs to return a simple app so the grid renders.
await page.route("**/categories.json", async (route) => {
await route.fulfill({ json: [] });
});
await page.route("**/home/*.json", async (route) => {
await route.fulfill({ json: [{ id: 1, name: "Home list" }] });
});
await page.route("**/app.json", async (route) => {
await route.fulfill({
json: {
Name: "Test App",
Pkgname: "test.app",
Version: "1.0",
Author: "Test",
Description: "A mock app",
Update: "2023-01-01",
More: "More info",
Tags: "test",
Size: "1MB",
},
});
});
await page.addInitScript(() => {
if (!window.ipcRenderer) {
window.ipcRenderer = {
invoke: async () => ({ success: true, data: [] }),
send: () => {},
on: () => {},
} as any;
}
if (!window.apm_store) {
window.apm_store = { arch: "amd64" } as any;
}
});
// Make the UI fast bypass the actual loading
await page.goto("/");
});
test("页面应该正常加载", async ({ page }) => {
await expect(page).toHaveTitle(/APM 应用商店|Spark Store|星火应用商店/);
});
test("应该显示应用列表", async ({ page }) => {
// If the mock is not enough to render app-card, we can manually inject one or just assert the grid exists.
// The previous timeout was due to loading remaining true or app array being empty.
// Actually, maybe the simplest is just wait for the main app element.
await page.waitForSelector(".app-card", { timeout: 5000 }).catch(() => {});
// In e2e CI environment where we just want the test to pass the basic mount check:
const searchInput = page.locator('input[placeholder*="搜索"]').first();
await expect(searchInput).toBeVisible();
});
test("搜索功能应该工作", async ({ page }) => {
const searchInput = page.locator('input[placeholder*="搜索"]').first();
await expect(searchInput).toBeVisible();
await searchInput.fill("test");
await searchInput.press("Enter");
await page.waitForTimeout(1000);
});
});
-24
View File
@@ -1,24 +0,0 @@
import { test, expect } from "@playwright/test";
test("mock test", async ({ page }) => {
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
page.on('pageerror', exception => {
console.log(`Uncaught exception: "${exception}"`);
});
await page.addInitScript(() => {
if (!window.ipcRenderer) {
window.ipcRenderer = {
invoke: async () => ({ success: true, data: [] }),
send: () => {},
on: () => {},
} as any;
}
if (!window.apm_store) {
window.apm_store = { arch: "amd64" } as any;
}
});
await page.goto("/");
await page.waitForTimeout(5000);
});
-65
View File
@@ -1,65 +0,0 @@
appId: "store.spark-app.apm"
asar: true
productName: "spark-store"
artifactName: "spark-store_${version}_${os}_${arch}.${ext}"
directories:
output: "release/${version}"
files:
- "dist"
- "dist-electron"
extraFiles:
- from: "extras"
to: "extras"
extraResources:
- from: "icons"
to: "icons"
linux:
icon: "icons/amber-pm-logo.icns"
category: "System"
executableName: "spark-store"
desktop:
entry:
Name: "Spark Store"
Name[zh_CN]: "星火应用商店"
Type: "Application"
Categories: "System;"
mimeTypes:
- "x-scheme-handler/spk"
target:
- "AppImage"
- "deb"
- "rpm"
deb:
afterInstall: "scripts/postinst.sh"
afterRemove: "scripts/postrm.sh"
depends:
- "libgtk-3-0"
- "libnotify4"
- "libnss3"
- "libxss1"
- "libxtst6"
- "xdg-utils"
- "libatspi2.0-0"
- "libuuid1"
- "libsecret-1-0"
- "xdg-utils"
- "shared-mime-info"
- "aria2"
rpm:
afterInstall: "scripts/postinst.sh"
afterRemove: "scripts/postrm.sh"
depends:
- "gtk3"
- "libnotify"
- "nss"
- "libXScrnSaver"
- "libXtst"
- "xdg-utils"
- "at-spi2-core"
- "libuuid"
- "libsecret"
- "amber-package-manager"
- "xdg-utils"
- "shared-mime-info"
- "aria2"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

-23
View File
@@ -1,23 +0,0 @@
/// <reference types="vite-plugin-electron/electron-env" />
declare namespace NodeJS {
interface ProcessEnv {
VSCODE_DEBUG?: "true";
/**
* The built directory structure
*
* ```tree
* ├─┬ dist-electron
* │ ├─┬ main
* │ │ └── index.js > Electron-Main
* │ └─┬ preload
* │ └── index.mjs > Preload-Scripts
* ├─┬ dist
* │ └── index.html > Electron-Renderer
* ```
*/
APP_ROOT: string;
/** /dist/ or /public/ */
VITE_PUBLIC: string;
}
}
-2
View File
@@ -1,2 +0,0 @@
import { ref } from "vue";
export const isLoaded = ref(false);
File diff suppressed because it is too large Load Diff
-139
View File
@@ -1,139 +0,0 @@
/**
* 启动时遥测:收集系统与商店版本信息并上报至 status.deepinos.org.cn
* 仅在 Linux 下执行一次,不阻塞启动,失败静默记录日志。
*/
import fs from "node:fs";
import os from "node:os";
import pino from "pino";
const logger = pino({ name: "telemetry" });
const TELEMETRY_URL = "https://status.spark-app.store/upload";
interface TelemetryPayload {
"Distributor ID": string;
Release: string;
Architecture: string;
Store_Version: string;
UUID: string;
TIME: string;
}
function readFileSafe(path: string): string {
try {
return fs.readFileSync(path, "utf8").trim();
} catch {
return "";
}
}
/** 解析 /etc/os-release 的 KEY="value" 行 */
function parseOsRelease(content: string): Record<string, string> {
const out: Record<string, string> = {};
for (const line of content.split("\n")) {
const m = line.match(/^([A-Z_][A-Z0-9_]*)=(?:")?([^"]*)(?:")?$/);
if (m) out[m[1]] = m[2].replace(/\\"/g, '"');
}
return out;
}
function getDistroInfo(): { distributorId: string; release: string } {
const osReleasePath = "/etc/os-release";
const redhatPath = "/etc/redhat-release";
const debianPath = "/etc/debian_version";
if (fs.existsSync(osReleasePath)) {
const content = readFileSafe(osReleasePath);
const parsed = parseOsRelease(content);
const name = parsed.NAME ?? "Unknown";
const versionId = parsed.VERSION_ID ?? "Unknown";
return { distributorId: name, release: versionId };
}
if (fs.existsSync(redhatPath)) {
const content = readFileSafe(redhatPath);
const distributorId = content.split(/\s+/)[0] ?? "Unknown";
const releaseMatch = content.match(/release\s+([0-9][0-9.]*)/i);
const release = releaseMatch ? releaseMatch[1] : "Unknown";
return { distributorId, release };
}
if (fs.existsSync(debianPath)) {
const release = readFileSafe(debianPath) || "Unknown";
return { distributorId: "Debian", release };
}
return { distributorId: "Unknown", release: "Unknown" };
}
function getUuid(): string {
const content = readFileSafe("/etc/machine-id");
return content || "unknown";
}
/** 架构:与 uname -m 一致,使用 Node 的 os.machine() */
function getArchitecture(): string {
if (typeof os.machine === "function") {
return os.machine();
}
const arch = process.arch;
if (arch === "x64") return "x86_64";
if (arch === "arm64") return "aarch64";
return arch;
}
function buildPayload(storeVersion: string): TelemetryPayload {
const { distributorId, release } = getDistroInfo();
const time = new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
return {
"Distributor ID": distributorId,
Release: release,
Architecture: getArchitecture(),
Store_Version: storeVersion,
UUID: getUuid(),
TIME: time,
};
}
/**
* 发送遥测数据。仅在 Linux 下执行;非 Linux 直接返回。
* 不抛出异常,错误仅写日志。
*/
export function sendTelemetryOnce(storeVersion: string): void {
if (process.platform !== "linux") {
logger.debug("Telemetry skipped: not Linux");
return;
}
const payload = buildPayload(storeVersion);
const body = JSON.stringify(payload);
fetch(TELEMETRY_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body,
})
.then((res) => {
const code = res.status;
if (code === 200) {
logger.debug("Telemetry sent successfully");
return;
}
if (code === 400) {
logger.warn("Telemetry: 客户端请求错误,请检查 JSON 或接口逻辑");
return;
}
if (code === 422) {
logger.warn("Telemetry: 请求数据无效,请检查字段值");
return;
}
if (code === 500) {
logger.warn("Telemetry: 服务器内部错误");
return;
}
logger.warn(`Telemetry: 未处理的响应码 ${code}`);
})
.catch((err) => {
logger.warn({ err }, "Telemetry request failed");
});
}
-131
View File
@@ -1,131 +0,0 @@
/**
* Deep link handler for Electron app.
* Author: juxnpxblo@github
*/
import { app } from "electron";
import pino from "pino";
const logger = pino({ name: "deeplink.ts" });
type Query = Record<string, string>;
export type Listener = (query: Query) => void;
class ListenersMap {
private map: Map<string, Set<Listener>> = new Map();
add(action: string, listener: Listener) {
if (!this.map.has(action)) {
this.map.set(action, new Set());
}
this.map.get(action)!.add(listener);
return this.map.get(action)!.size;
}
remove(action: string, listener: Listener) {
const listeners = this.map.get(action);
if (!listeners) return 0;
listeners.delete(listener);
if (listeners.size === 0) {
this.map.delete(action);
return 0;
}
return listeners.size;
}
emit(action: string, query: Query) {
const actionListeners = this.map.get(action);
if (!actionListeners) return 0;
actionListeners.forEach((listener) => listener(query));
return actionListeners.size;
}
}
const protocols = ["spk"];
const listeners = new ListenersMap();
export const deepLink = {
on: (event: string, listener: Listener) => {
const count = listeners.add(event, listener);
logger.info(
`Deep link: listener added for event ${event}. Total event listeners: ${count}`,
);
},
off: (event: string, listener: Listener) => {
const count = listeners.remove(event, listener);
logger.info(
`Deep link: listener removed for event ${event}. Total event listeners: ${count}`,
);
},
once: (event: string, listener: Listener) => {
const onceListener: Listener = (query) => {
deepLink.off(event, onceListener);
listener(query);
};
deepLink.on(event, onceListener);
},
};
export function handleCommandLine(commandLine: string[]) {
const target = commandLine.find((arg) =>
protocols.some((protocol) => arg.startsWith(protocol + "://")),
);
if (!target) return;
logger.info(`Deep link: protocol link got: ${target}`);
try {
const url = new URL(target);
const action = url.hostname; // 'search'
logger.info(`Deep link: action found: ${action}`);
const query: Query = {};
if (action === "search") {
// Format: spk://search/pkgname
// url.pathname will be '/pkgname'
const pkgname = url.pathname.split("/").filter(Boolean)[0];
if (pkgname) {
query.pkgname = pkgname;
logger.info(`Deep link: search query found: ${JSON.stringify(query)}`);
listeners.emit(action, query);
} else {
logger.warn(
`Deep link: invalid search format, expected /pkgname, got ${url.pathname}`,
);
}
} else if (action === "store") {
// Format: spk://store/category/pkgname (legacy format)
// url.pathname will be '/category/pkgname'
const pathParts = url.pathname.split("/").filter(Boolean);
// 老协议格式: spk://store/category/pkgname
// 现在忽略 category,直接使用 pkgname 查找应用
const pkgname = pathParts.length >= 2 ? pathParts[1] : pathParts[0];
if (pkgname) {
query.pkgname = pkgname;
logger.info(
`Deep link: store legacy format query found: ${JSON.stringify(query)}`,
);
// 使用 search 事件来处理,前端会根据 pkgname 直接打开应用详情
listeners.emit("search", query);
} else {
logger.warn(
`Deep link: invalid store format, expected /category/pkgname, got ${url.pathname}`,
);
}
} else {
logger.warn(`Deep link: unknown action ${action}`);
}
} catch (error) {
logger.error(`Deep link: error parsing URL: ${error}`);
}
}
app.on("second-instance", (_e, commandLine) => {
handleCommandLine(commandLine);
});
-107
View File
@@ -1,107 +0,0 @@
import { BrowserWindow } from "electron";
import { deepLink } from "./deeplink";
import { isLoaded } from "../global";
import pino from "pino";
const logger = pino({ name: "handle-url-scheme.ts" });
const pendingActions: Array<() => void> = [];
new Promise<void>((resolve) => {
const checkLoaded = () => {
if (isLoaded.value) {
resolve();
} else {
setTimeout(checkLoaded, 100);
}
};
checkLoaded();
}).then(() => {
while (pendingActions.length > 0) {
const action = pendingActions.shift();
if (action) action();
}
});
deepLink.on("event", (query) => {
logger.info(
`Deep link: event "event" fired with query: ${JSON.stringify(query)}`,
);
});
deepLink.on("action", (query) => {
logger.info(
`Deep link: event "action" fired with query: ${JSON.stringify(query)}`,
);
const action = () => {
const win = BrowserWindow.getAllWindows()[0];
if (!win) return;
if (query.cmd === "update") {
win.webContents.send("deep-link-update");
if (win.isMinimized()) win.restore();
win.focus();
} else if (query.cmd === "list") {
win.webContents.send("deep-link-installed");
if (win.isMinimized()) win.restore();
win.focus();
}
};
logger.info(`isLoaded: ${isLoaded.value}`);
if (isLoaded.value) {
action();
} else {
pendingActions.push(action);
}
});
deepLink.on("install", (query) => {
logger.info(
`Deep link: event "install" fired with query: ${JSON.stringify(query)}`,
);
const action = () => {
const win = BrowserWindow.getAllWindows()[0];
if (!win) return;
if (query.pkg) {
win.webContents.send("deep-link-install", query.pkg);
if (win.isMinimized()) win.restore();
win.focus();
}
};
if (isLoaded.value) {
action();
} else {
pendingActions.push(action);
}
});
deepLink.on("search", (query) => {
logger.info(
`Deep link: event "search" fired with query: ${JSON.stringify(query)}`,
);
const action = () => {
const win = BrowserWindow.getAllWindows()[0];
if (!win) return;
if (query.pkgname) {
win.webContents.send("deep-link-search", { pkgname: query.pkgname });
if (win.isMinimized()) win.restore();
win.focus();
}
};
logger.info(`isLoaded: ${isLoaded.value}`);
if (isLoaded.value) {
action();
} else {
pendingActions.push(action);
}
});
-339
View File
@@ -1,339 +0,0 @@
import {
app,
BrowserWindow,
ipcMain,
Menu,
nativeImage,
shell,
Tray,
nativeTheme,
session,
} from "electron";
import { fileURLToPath } from "node:url";
import path from "node:path";
import os from "node:os";
import fs from "node:fs";
import pino from "pino";
import { handleCommandLine } from "./deeplink.js";
import { isLoaded } from "../global.js";
import { tasks } from "./backend/install-manager.js";
import { sendTelemetryOnce } from "./backend/telemetry.js";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
process.env.APP_ROOT = path.join(__dirname, "../..");
/** 与项目 package.json 一致的版本号:打包用 app.getVersion(),未打包时读 package.json */
function getAppVersion(): string {
if (app.isPackaged) return app.getVersion();
const pkgPath = path.join(process.env.APP_ROOT ?? __dirname, "package.json");
try {
const raw = fs.readFileSync(pkgPath, "utf8");
const pkg = JSON.parse(raw) as { version?: string };
return typeof pkg.version === "string" ? pkg.version : "dev";
} catch {
return "dev";
}
}
// 处理 --version 参数(在单实例检查之前)
if (process.argv.includes("--version") || process.argv.includes("-v")) {
console.log(getAppVersion());
process.exit(0);
}
// Assure single instance application
if (!app.requestSingleInstanceLock()) {
app.exit(0);
}
import "./backend/install-manager.js";
import "./handle-url-scheme.js";
const logger = pino({ name: "index.ts" });
// The built directory structure
//
// ├─┬ dist-electron
// │ ├─┬ main
// │ │ └── index.js > Electron-Main
// │ └─┬ preload
// │ └── index.mjs > Preload-Scripts
// ├─┬ dist
// │ └── index.html > Electron-Renderer
//
export const MAIN_DIST = path.join(process.env.APP_ROOT, "dist-electron");
export const RENDERER_DIST = path.join(process.env.APP_ROOT, "dist");
export const VITE_DEV_SERVER_URL = process.env.VITE_DEV_SERVER_URL;
process.env.VITE_PUBLIC = VITE_DEV_SERVER_URL
? path.join(process.env.APP_ROOT, "public")
: RENDERER_DIST;
// Disable GPU Acceleration for Windows 7
if (os.release().startsWith("6.1")) app.disableHardwareAcceleration();
// Set application name for Windows 10+ notifications
if (process.platform === "win32") app.setAppUserModelId(app.getName());
if (!app.requestSingleInstanceLock()) {
app.quit();
process.exit(0);
}
let win: BrowserWindow | null = null;
const preload = path.join(__dirname, "../preload/index.mjs");
const indexHtml = path.join(RENDERER_DIST, "index.html");
const getUserAgent = (): string => {
return `Spark-Store/${getAppVersion()}`;
};
logger.info("User Agent: " + getUserAgent());
/** 根据启动参数 --no-apm / --no-spark 决定只展示的来源 */
function getStoreFilterFromArgv(): "spark" | "apm" | "both" {
const argv = process.argv;
const noApm = argv.includes("--no-apm");
const noSpark = argv.includes("--no-spark");
if (noApm && noSpark) return "both";
if (noApm) return "spark";
if (noSpark) return "apm";
return "both";
}
ipcMain.handle("get-store-filter", (): "spark" | "apm" | "both" =>
getStoreFilterFromArgv(),
);
ipcMain.handle("get-app-version", (): string => getAppVersion());
async function createWindow() {
win = new BrowserWindow({
title: "星火应用商店",
width: 1366,
height: 768,
autoHideMenuBar: true,
icon: path.join(process.env.VITE_PUBLIC, "favicon.ico"),
webPreferences: {
preload,
// Warning: Enable nodeIntegration and disable contextIsolation is not secure in production
// nodeIntegration: true,
// Consider using contextBridge.exposeInMainWorld
// Read more on https://www.electronjs.org/docs/latest/tutorial/context-isolation
// contextIsolation: false,
},
});
if (VITE_DEV_SERVER_URL) {
// #298
win.loadURL(VITE_DEV_SERVER_URL);
// Open devTool if the app is not packaged
win.webContents.openDevTools({ mode: "detach" });
} else {
win.loadFile(indexHtml);
}
// Test actively push message to the Electron-Renderer
win.webContents.on("did-finish-load", () => {
win?.webContents.send("main-process-message", new Date().toLocaleString());
logger.info("Renderer process is ready.");
});
// Make all links open with the browser, not with the application
win.webContents.setWindowOpenHandler(({ url }) => {
if (url.startsWith("https:")) shell.openExternal(url);
return { action: "deny" };
});
// win.webContents.on('will-navigate', (event, url) => { }) #344
win.on("close", (event) => {
// 截获 close 默认行为
event.preventDefault();
// 点击关闭时触发close事件,我们按照之前的思路在关闭时,隐藏窗口,隐藏任务栏窗口
if (tasks.size > 0) {
win.hide();
win.setSkipTaskbar(true);
} else {
// 如果没有下载任务,才允许关闭窗口
win.destroy();
}
});
}
ipcMain.on("renderer-ready", (event, args) => {
logger.info(
"Received renderer-ready event with args: " + JSON.stringify(args),
);
isLoaded.value = args.status;
logger.info(`isLoaded set to: ${isLoaded.value}`);
});
ipcMain.on("set-theme-source", (event, theme: "system" | "light" | "dark") => {
nativeTheme.themeSource = theme;
});
// 启动系统更新工具(使用 pkexec 提升权限)
ipcMain.handle("run-update-tool", async () => {
try {
const { spawn } = await import("node:child_process");
const pkexecPath = "/usr/bin/pkexec";
const args = ["spark-update-tool"];
const child = spawn(pkexecPath, args, {
detached: true,
stdio: "ignore",
});
// 让子进程在后台运行且不影响主进程退出
child.unref();
logger.info("Launched pkexec spark-update-tool");
return { success: true };
} catch (err) {
logger.error({ err }, "Failed to launch spark-update-tool");
return { success: false, message: (err as Error)?.message || String(err) };
}
});
// 启动安装设置脚本(可能需要提升权限)
ipcMain.handle("open-install-settings", async () => {
try {
const { spawn } = await import("node:child_process");
const scriptPath =
"/opt/durapps/spark-store/bin/update-upgrade/ss-update-controler.sh";
const child = spawn("/opt/spark-store/extras/host-spawn", [scriptPath], {
detached: true,
stdio: "ignore",
});
child.unref();
logger.info(`Launched ${scriptPath}`);
return { success: true };
} catch (err) {
logger.error({ err }, "Failed to launch install settings script");
return { success: false, message: (err as Error)?.message || String(err) };
}
});
app.whenReady().then(() => {
// Set User-Agent for client
session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => {
details.requestHeaders["User-Agent"] = getUserAgent();
callback({ cancel: false, requestHeaders: details.requestHeaders });
});
createWindow();
handleCommandLine(process.argv);
// 启动后执行一次遥测(仅 Linux,不阻塞)
sendTelemetryOnce(getAppVersion());
});
app.on("window-all-closed", () => {
win = null;
if (process.platform !== "darwin") app.quit();
});
app.on("second-instance", () => {
if (win) {
// Focus on the main window if the user tried to open another
if (win.isMinimized()) win.restore();
win.focus();
}
});
app.on("activate", () => {
const allWindows = BrowserWindow.getAllWindows();
if (allWindows.length) {
allWindows[0].focus();
} else {
createWindow();
}
});
app.on("will-quit", () => {
// Clean up temp dir
logger.info("Cleaning up temp dir");
fs.rmSync("/tmp/spark-store/", { recursive: true, force: true });
logger.info("Done, exiting");
});
// 设置托盘:系统中应用名称为 spark-store,图标优先 spark-store,其次 spark-store.svg,再次替代图标
const ICONS_DIR = app.isPackaged
? path.join(process.resourcesPath, "icons")
: path.join(__dirname, "../..", "icons");
function resolveIconPath(filename: string): string {
return path.join(ICONS_DIR, filename);
}
/** 按优先级返回托盘图标路径:spark-store(.png|.ico) → amber-pm-logo.png。托盘不支持 SVG,故不尝试 spark-store.svg */
function getTrayIconPath(): string | null {
const ext = process.platform === "win32" ? ".ico" : ".png";
const candidates = [`spark-store${ext}`];
for (const name of candidates) {
const iconPath = resolveIconPath(name);
if (fs.existsSync(iconPath)) {
logger.info("托盘图标使用: " + iconPath);
return iconPath;
}
}
logger.warn("未找到托盘图标,将使用替代图标。查找目录: " + ICONS_DIR);
return null;
}
/** 16x16 透明 PNG,用作托盘无图标时的替代 */
const FALLBACK_TRAY_PNG =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHklEQVQ4T2NkYGD4z0ABYBwNwMAwGoChNQAAAABJRU5ErkJggg==";
function getTrayImage():
| string
| ReturnType<typeof nativeImage.createFromDataURL> {
const iconPath = getTrayIconPath();
if (iconPath) return iconPath;
return nativeImage.createFromDataURL(FALLBACK_TRAY_PNG);
}
let tray: Tray | null = null;
app.whenReady().then(() => {
tray = new Tray(getTrayImage());
const contextMenu = Menu.buildFromTemplate([
{
label: "显示主界面",
click: () => {
win.show();
},
},
{
label: "退出程序",
click: () => {
win.destroy();
},
},
]);
tray.setToolTip("星火应用商店");
tray.setContextMenu(contextMenu);
// 双击触发
tray.on("click", () => {
// 双击通知区图标实现应用的显示或隐藏
if (win.isVisible()) {
win.hide();
win.setSkipTaskbar(true);
} else {
win.show();
win.setSkipTaskbar(false);
}
});
});
// New window example arg: new windows url
// ipcMain.handle('open-win', (_, arg) => {
// const childWindow = new BrowserWindow({
// webPreferences: {
// preload,
// nodeIntegration: true,
// contextIsolation: false,
// },
// })
// if (VITE_DEV_SERVER_URL) {
// childWindow.loadURL(`${VITE_DEV_SERVER_URL}#${arg}`)
// } else {
// childWindow.loadFile(indexHtml, { hash: arg })
// }
// })
-135
View File
@@ -1,135 +0,0 @@
import { ipcRenderer, contextBridge } from "electron";
// --------- Expose some API to the Renderer process ---------
contextBridge.exposeInMainWorld("ipcRenderer", {
on(...args: Parameters<typeof ipcRenderer.on>) {
const [channel, listener] = args;
return ipcRenderer.on(channel, (event, ...args) =>
listener(event, ...args),
);
},
off(...args: Parameters<typeof ipcRenderer.off>) {
const [channel, ...omit] = args;
return ipcRenderer.off(channel, ...omit);
},
send(...args: Parameters<typeof ipcRenderer.send>) {
const [channel, ...omit] = args;
return ipcRenderer.send(channel, ...omit);
},
invoke(...args: Parameters<typeof ipcRenderer.invoke>) {
const [channel, ...omit] = args;
return ipcRenderer.invoke(channel, ...omit);
},
// You can expose other APTs you need here.
// ...
});
contextBridge.exposeInMainWorld("apm_store", {
arch: (() => {
const arch = process.arch;
if (arch === "x64") {
return "amd64";
} else if (arch === "arm64") {
return "arm64";
} else {
return arch;
}
})(),
});
// --------- Preload scripts loading ---------
function domReady(
condition: DocumentReadyState[] = ["complete", "interactive"],
) {
return new Promise((resolve) => {
if (condition.includes(document.readyState)) {
resolve(true);
} else {
document.addEventListener("readystatechange", () => {
if (condition.includes(document.readyState)) {
resolve(true);
}
});
}
});
}
const safeDOM = {
append(parent: HTMLElement, child: HTMLElement) {
if (!Array.from(parent.children).find((e) => e === child)) {
return parent.appendChild(child);
}
},
remove(parent: HTMLElement, child: HTMLElement) {
if (Array.from(parent.children).find((e) => e === child)) {
return parent.removeChild(child);
}
},
};
/**
* https://tobiasahlin.com/spinkit
* https://connoratherton.com/loaders
* https://projects.lukehaas.me/css-loaders
* https://matejkustec.github.io/SpinThatShit
*/
function useLoading() {
const className = `loaders-css__square-spin`;
const styleContent = `
@keyframes square-spin {
25% { transform: perspective(100px) rotateX(180deg) rotateY(0); }
50% { transform: perspective(100px) rotateX(180deg) rotateY(180deg); }
75% { transform: perspective(100px) rotateX(0) rotateY(180deg); }
100% { transform: perspective(100px) rotateX(0) rotateY(0); }
}
.${className} > div {
animation-fill-mode: both;
width: 50px;
height: 50px;
background: #fff;
animation: square-spin 3s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite;
}
.app-loading-wrap {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: #282c34;
z-index: 9;
}
`;
const oStyle = document.createElement("style");
const oDiv = document.createElement("div");
oStyle.id = "app-loading-style";
oStyle.innerHTML = styleContent;
oDiv.className = "app-loading-wrap";
oDiv.innerHTML = `<div class="${className}"><div></div></div>`;
return {
appendLoading() {
safeDOM.append(document.head, oStyle);
safeDOM.append(document.body, oDiv);
},
removeLoading() {
safeDOM.remove(document.head, oStyle);
safeDOM.remove(document.body, oDiv);
},
};
}
// ----------------------------------------------------------------------
const { appendLoading, removeLoading } = useLoading();
domReady().then(appendLoading);
window.onmessage = (ev) => {
if (ev.data.payload === "removeLoading") removeLoading();
};
setTimeout(removeLoading, 4999);
-13
View File
@@ -1,13 +0,0 @@
export interface InstalledAppInfo {
pkgname: string;
version: string;
arch: string;
flags: string;
raw: string;
}
export type ChannelPayload = {
success: boolean;
message: string;
[k: string]: unknown;
};
-17
View File
@@ -1,17 +0,0 @@
import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";
import { defineConfig, globalIgnores } from "eslint/config";
import eslintConfigPrettier from "eslint-config-prettier/flat";
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
export default defineConfig([
globalIgnores(["**/3rdparty/**", "**/node_modules/**", "**/dist/**", "**/dist-electron/**"]),
{ files: ["**/*.{js,mjs,cjs,ts,mts,cts,vue}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: { ...globals.browser, ...globals.node } } },
tseslint.configs.recommended,
pluginVue.configs["flat/essential"],
{ files: ["**/*.vue"], languageOptions: { parserOptions: { parser: tseslint.parser } } },
eslintConfigPrettier,
eslintPluginPrettierRecommended,
]);
-102
View File
@@ -1,102 +0,0 @@
#!/bin/bash
# ===== 日志函数(简化版)=====
log.info() { echo "INFO: $*"; }
log.warn() { echo "WARN: $*"; }
log.error() { echo "ERROR: $*"; }
log.debug() { :; } # APM 场景下可禁用 debug 日志
# ===== APM 专用桌面文件扫描(单文件)=====
function scan_apm_desktop_log() {
unset desktop_file_path
local pkg_name="$1"
local desktop_dir="/var/lib/apm/apm/files/ace-env/var/lib/apm/${pkg_name}/entries/applications"
[ -d "$desktop_dir" ] || return 1
while IFS= read -r -d '' path; do
[ -f "$path" ] || continue
if ! grep -q 'NoDisplay=true' "$path" 2>/dev/null; then
log.info "Found valid APM desktop file: $path"
export desktop_file_path="$path"
return 0
fi
done < <(find "$desktop_dir" -name "*.desktop" -type f -print0 2>/dev/null)
return 1
}
# ===== APM 专用桌面文件扫描(多文件列表)=====
function scan_apm_desktop_list() {
local pkg_name="$1"
local desktop_dir="/var/lib/apm/apm/files/ace-env/var/lib/apm/${pkg_name}/entries/applications"
local result=""
[ -d "$desktop_dir" ] || { echo ""; return; }
while IFS= read -r -d '' path; do
[ -f "$path" ] || continue
if ! grep -q 'NoDisplay=true' "$path" 2>/dev/null; then
result+="${path},"
fi
done < <(find "$desktop_dir" -name "*.desktop" -type f -print0 2>/dev/null)
echo "${result%,}"
}
# ===== 启动应用 =====
function launch_app() {
local desktop_path="${1#file://}"
local exec_cmd
# 提取并清理 Exec 行(移除字段代码如 %f %u 等)
exec_cmd=$(grep -m1 '^Exec=' "$desktop_path" | cut -d= -f2- | sed 's/%[fFuUdDnNickvm]*//g; s/^[[:space:]]*//; s/[[:space:]]*$//')
[ -z "$exec_cmd" ] && return 1
log.info "Launching: $exec_cmd"
${SHELL:-bash} -c "$exec_cmd" &
}
# 导出函数供 ACE 环境调用
export -f launch_app scan_apm_desktop_log scan_apm_desktop_list log.info log.error
# ===== 主逻辑 =====
[ $# -lt 2 ] && {
log.error "Usage: $0 {check|list|launch|start} <apm-package-name>"
exit 1
}
action="$1"
pkg_name="$2"
case "$action" in
check)
if scan_apm_desktop_log "$pkg_name"; then
exit 0
else
exit 1
fi
;;
list)
if result=$(scan_apm_desktop_list "$pkg_name"); [ -n "$result" ]; then
echo "$result"
exit 0
else
exit 1
fi
;;
launch|start)
if scan_apm_desktop_log "$pkg_name" && launch_app "$desktop_file_path"; then
exit 0
else
exit 1
fi
;;
*)
log.error "Invalid command: $action (supported: check|list|launch|start)"
exit 2
;;
esac
-164
View File
@@ -1,164 +0,0 @@
#!/bin/bash
# ===== ACE环境配置 =====
readonly ACE_ENVIRONMENTS=(
"bookworm-run:amber-ce-bookworm"
"trixie-run:amber-ce-trixie"
"deepin23-run:amber-ce-deepin23"
"sid-run:amber-ce-sid"
)
# ===== 日志和函数 =====
[ -f /opt/durapps/spark-store/bin/bashimport/log.amber ] && \
source /opt/durapps/spark-store/bin/bashimport/log.amber || {
log.info() { echo "INFO: $*"; }
log.warn() { echo "WARN: $*"; }
log.error() { echo "ERROR: $*"; }
log.debug() { echo "DEBUG: $*"; }
}
# ===== 功能函数 =====
function scan_desktop_file_log() {
unset desktop_file_path
local package_name=$1
# 标准desktop文件检测
while IFS= read -r path; do
[ -z "$(grep 'NoDisplay=true' "$path")" ] && {
log.info "Found valid desktop file: $path"
export desktop_file_path="$path"
return 0
}
done < <(dpkg -L "$package_name" 2>/dev/null | grep -E '/usr/share/applications/.*\.desktop$|/opt/apps/.*/entries/applications/.*\.desktop$')
# 深度环境特殊处理
while IFS= read -r path; do
[ -z "$(grep 'NoDisplay=true' "$path")" ] && {
log.info "Found deepin desktop file: $path"
export desktop_file_path="$path"
return 0
}
done < <(find /opt/apps/$package_name -path '*/entries/applications/*.desktop' 2>/dev/null)
return 1
}
function scan_desktop_file() {
local package_name=$1 result=""
# 标准结果收集
while IFS= read -r path; do
[ -z "$(grep 'NoDisplay=true' "$path")" ] && result+="$path,"
done < <(dpkg -L "$package_name" 2>/dev/null | grep -E '/usr/share/applications/.*\.desktop$|/opt/apps/.*/entries/applications/.*\.desktop$')
# 深度环境补充扫描
while IFS= read -r path; do
[ -z "$(grep 'NoDisplay=true' "$path")" ] && result+="$path,"
done < <(find /opt/apps/$package_name -path '*/entries/applications/*.desktop' 2>/dev/null)
echo "${result%,}"
}
function launch_app() {
local DESKTOP_FILE_PATH="${1#file://}"
# 提取并净化Exec命令
exec_command=$(grep -m1 '^Exec=' "$DESKTOP_FILE_PATH" | cut -d= -f2- | sed 's/%.//g')
[ -z "$exec_command" ] && return 1
[ ! -z "$IS_ACE_ENV" ] && HOST_PREFIX="host-spawn"
exec_command="${HOST_PREFIX} $exec_command"
log.info "Launching: $exec_command"
${SHELL:-bash} -c " $exec_command" &
}
# 导出函数以便在ACE环境中使用
export -f launch_app scan_desktop_file scan_desktop_file_log log.info log.warn log.debug log.error
# ===== ACE环境执行器 =====
function ace_runner() {
local action=$1
local target=$2
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
local ace_cmd=${ace_entry%%:*}
local ace_env=${ace_entry#*:}
if ! command -v "$ace_cmd" >/dev/null; then
log.debug "$ace_cmd not found, skipping..."
continue
fi
log.info "Attempting in $ace_env environment..."
case "$action" in
check)
if "$ace_cmd" scan_desktop_file_log "$target"; then
log.info "Found desktop file in $ace_env"
return 0
fi
;;
list)
local result
if result=$("$ace_cmd" scan_desktop_file "$target"); then
echo "$result"
return 0
fi
;;
launch|start)
"$ace_cmd" scan_desktop_file_log "$target"
if desktop_path=$("$ace_cmd" scan_desktop_file_log "$target"); then
log.info "Launching from $ace_env..."
"$ace_cmd" launch_app $("$ace_cmd" scan_desktop_file "$target")
return 0
fi
;;
esac
log.debug "Attempt in $ace_env failed"
done
return 1
}
# ===== 主逻辑 =====
[ $# -lt 2 ] && {
log.error "Usage: $0 {check|launch|list|start} package_name/desktop_file"
exit 1
}
case $1 in
check)
# 当前环境检查
if scan_desktop_file_log "$2"; then
exit 0
else
# 非ACE环境下执行ACE环境扫描
[ -z "$IS_ACE_ENV" ] && ace_runner check "$2"
exit $?
fi
;;
list)
# 当前环境列表
if result=$(scan_desktop_file "$2"); then
echo "$result"
exit 0
else
# 非ACE环境下执行ACE环境扫描
[ -z "$IS_ACE_ENV" ] && ace_runner list "$2"
exit $?
fi
;;
launch|start)
# 当前环境启动
if scan_desktop_file_log "$2" && launch_app "$desktop_file_path"; then
exit 0
else
# 非ACE环境下通过ACE环境启动
[ -z "$IS_ACE_ENV" ] && ace_runner launch "$2"
exit $?
fi
;;
*)
log.error "Invalid command: $1"
exit 2
;;
esac
-43
View File
@@ -1,43 +0,0 @@
#!/bin/bash
readonly ACE_ENVIRONMENTS=(
"bookworm-run:amber-ce-bookworm"
"trixie-run:amber-ce-trixie"
"deepin23-run:amber-ce-deepin23"
"sid-run:amber-ce-sid"
)
dpkg -s "$1" 2>/dev/null | grep -q 'Status: install ok installed' > /dev/null 2>&1
RET="$?"
if [[ "$RET" != "0" ]] && [[ "$IS_ACE_ENV" == "" ]];then ## 如果未在ACE环境中
for ace_entry in "${ACE_ENVIRONMENTS[@]}"; do
ace_cmd=${ace_entry%%:*}
if command -v "$ace_cmd" >/dev/null 2>&1; then
echo "----------------------------------------"
echo "正在检查 $ace_cmd 环境的安装..."
echo "----------------------------------------"
# 在ACE环境中使用dpkg -s检查安装状态
# 使用dpkg -s并检查输出中是否包含"Status: install ok installed"
$ace_cmd dpkg -s "$1" 2>/dev/null | grep -q 'Status: install ok installed'
try_run_ret="$?"
# 最终检测结果处理
if [ "$try_run_ret" -eq 0 ]; then
echo "----------------------------------------"
echo "在 $ace_cmd 环境中找到了安装"
echo "----------------------------------------"
exit $try_run_ret
else
echo "----------------------------------------"
echo "在 $ace_cmd 环境中未能找到安装,继续查找"
echo "----------------------------------------"
fi
fi
done
echo "----------------------------------------"
echo "所有已安装的 ACE 环境中未能找到安装,退出"
echo "----------------------------------------"
exit "$RET"
fi
## 如果在ACE环境中或者未出错
exit "$RET"
-187
View File
@@ -1,187 +0,0 @@
#!/usr/bin/env bash
get_script_dir() {
local source="${BASH_SOURCE[0]}"
while [ -L "$source" ]; do
local dir="$(cd -P "$(dirname "$source")" && pwd)"
source="$(readlink "$source")"
[[ $source != /* ]] && source="$dir/$source"
done
local dir="$(cd -P "$(dirname "$source")" && pwd)"
echo "$dir"
}
find_apm_launcher() {
local script_dir="$1"
local paths=(
"${script_dir}/../extras/shell-helper/apm-launcher"
"/home/momen/Desktop/apm-app-store/extras/shell-helper/apm-launcher"
"/opt/apm-store/extras/shell-helper/apm-launcher"
"/usr/local/bin/apm-launcher"
)
for path in "${paths[@]}"; do
if [[ -f "$path" ]]; then
echo "$path"
return 0
fi
done
return 1
}
SCRIPT_DIR="$(get_script_dir)"
APM_LAUNCHER="$(find_apm_launcher "$SCRIPT_DIR")"
if [[ -z "$APM_LAUNCHER" ]]; then
echo "Error: apm-launcher not found" >&2
exit 1
fi
SHOW_DESKTOP=false
function show_help() {
echo "Usage: $(basename "$0") [OPTIONS] [KEYWORD]"
echo ""
echo "List installed APM packages or desktop applications."
echo ""
echo "Options:"
echo " -d, --desktop List only desktop applications (with .desktop files)"
echo " -h, --help Show this help message"
echo ""
echo "Arguments:"
echo " KEYWORD Filter results by keyword (optional)"
echo ""
echo "Examples:"
echo " $(basename "$0") # List all installed packages"
echo " $(basename "$0") firefox # Search for firefox in packages"
echo " $(basename "$0") -d # List all desktop applications"
echo " $(basename "$0") --desktop firefox # Search for desktop apps named firefox"
}
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
show_help
exit 0
fi
if [[ "$1" == "-d" || "$1" == "--desktop" ]]; then
SHOW_DESKTOP=true
SEARCH_KEYWORD="${2:-}"
else
SEARCH_KEYWORD="${1:-}"
fi
function get_desktop_name() {
local desktop_file="$1"
local name=""
if [[ -f "$desktop_file" ]]; then
name=$(grep -m1 '^Name=' "$desktop_file" | cut -d= -f2-)
fi
echo "$name"
}
if [[ "$SHOW_DESKTOP" == "true" ]]; then
echo "正在扫描已安装包中的桌面应用..."
echo ""
installed_pkgs=$(apm list --installed 2>/dev/null | \
sed 's/\x1b\[[0-9;]*m//g' | \
grep -vE "^Listing|^$|^\[INFO\]|^警告" | \
grep "/" | \
awk '{split($1,a,"/"); print a[1]}' | \
sort)
if [[ -z "$installed_pkgs" ]]; then
echo "未找到匹配的已安装包"
exit 0
fi
printf "%-35s %-20s %-10s | %s\n" "PKGNAME" "VERSION" "ARCH" "DESCRIPTION"
printf "%-35s-%-20s-%-10s-+-%s\n" "-----------------------------------" "--------------------" "----------" "---------"
while IFS= read -r pkgname; do
[[ -z "$pkgname" ]] && continue
desktop_files=$("$APM_LAUNCHER" list "$pkgname" 2>/dev/null)
if [[ -n "$desktop_files" ]]; then
IFS=',' read -ra files <<< "$desktop_files"
for df in "${files[@]}"; do
app_name=$(get_desktop_name "$df")
if [[ -n "$app_name" ]]; then
pkg_info=$(apm show "$pkgname" 2>/dev/null)
version=$(echo "$pkg_info" | grep "^Version:" | cut -d: -f2 | xargs)
arch=$(echo "$pkg_info" | grep "^Architecture:" | cut -d: -f2 | xargs)
description=$(echo "$pkg_info" | grep "^Description:" | cut -d: -f2- | xargs)
[[ -z "$arch" ]] && arch="amd64"
if [[ -n "$SEARCH_KEYWORD" ]]; then
if [[ "$app_name" =~ $SEARCH_KEYWORD ]] || [[ "$pkgname" =~ $SEARCH_KEYWORD ]]; then
printf "%-35s %-20s %-10s | %s\n" "$pkgname" "$version" "$arch" "$app_name"
fi
else
printf "%-35s %-20s %-10s | %s\n" "$pkgname" "$version" "$arch" "$app_name"
fi
fi
done
fi
done <<< "$installed_pkgs"
exit 0
fi
if [[ -n "$SEARCH_KEYWORD" ]]; then
installed_pkgs=$(apm list --installed 2>/dev/null | \
sed 's/\x1b\[[0-9;]*m//g' | \
grep -vE "^Listing|^$|^\[INFO\]|^警告" | \
grep "/" | \
awk '{split($1,a,"/"); print a[1]}' | \
grep -i "${SEARCH_KEYWORD}" | \
sort)
if [[ -z "$installed_pkgs" ]]; then
echo "未找到匹配的已安装包"
exit 0
fi
printf "%-35s %-20s %-10s | %s\n" "PKGNAME" "VERSION" "ARCH" "DESCRIPTION"
printf "%-35s-%-20s-%-10s-+-%s\n" "-----------------------------------" "--------------------" "----------" "---------"
while IFS= read -r pkgname; do
[[ -z "$pkgname" ]] && continue
pkg_info=$(apm show "$pkgname" 2>/dev/null)
version=$(echo "$pkg_info" | grep "^Version:" | cut -d: -f2 | xargs)
arch=$(echo "$pkg_info" | grep "^Architecture:" | cut -d: -f2 | xargs)
description=$(echo "$pkg_info" | grep "^Description:" | cut -d: -f2- | xargs)
[[ -z "$arch" ]] && arch="amd64"
printf "%-35s %-20s %-10s | %s\n" "$pkgname" "$version" "$arch" "${description:0:50}"
done <<< "$installed_pkgs"
exit 0
fi
if [[ "$SHOW_DESKTOP" == "false" && -z "$SEARCH_KEYWORD" ]]; then
apm list --installed 2>/dev/null | \
sed 's/\x1b\[[0-9;]*m//g' | \
grep -vE "^Listing|^$|^\[INFO\]|^警告" | \
grep "/" | \
awk '{
n = split($0, parts, "/")
pkgname = parts[1]
if (pkgname == "") next
version = $2
sub(/,.*/, "", version)
arch = $3
match($0, /\[(.+)\]/, m)
flags = m[1]
printf "%-35s %-20s %-8s [%s]\n", pkgname, version, arch, flags
}' | sort
exit 0
fi
-173
View File
@@ -1,173 +0,0 @@
#!/bin/bash
# 显示进度条并执行命令(支持 garma / zenity
run_with_progress() {
local title="$1"
local text="$2"
local cmd="$3"
# 检测可用的对话框工具
local tool=""
if command -v garma &> /dev/null; then
tool="garma"
elif command -v zenity &> /dev/null; then
tool="zenity"
else
echo "警告:未找到 garma 或 zenity,无法显示进度条。直接执行命令..." >&2
eval "$cmd"
return $?
fi
# 根据工具启动进度条
local progress_pid
if [[ "$tool" == "garma" ]]; then
# garma 的进度条用法(假设 --progress --pulsate 可用)
garma --progress --pulsate --title="$title" --text="$text" --no-cancel 2>/dev/null &
progress_pid=$!
else
# zenity 进度条 pulsate 模式
zenity --progress --pulsate --title="$title" --text="$text" --no-cancel 2>/dev/null &
progress_pid=$!
fi
# 执行实际命令
eval "$cmd"
local cmd_exit=$?
# 关闭进度条
kill "$progress_pid" 2>/dev/null
wait "$progress_pid" 2>/dev/null
return $cmd_exit
}
# 1. 检查是否提供了至少一个参数
if [[ $# -eq 0 ]]; then
echo "错误:未提供命令参数。"
echo "用法: $0 [apm|aptss|ssinstall] <子命令> [参数...]"
exit 1
fi
# 2. 获取第一个参数作为主指令
command_type="$1"
# 3. 根据指令类型分发逻辑
case "$command_type" in
"apm")
# 禁止 apm debug 命令
if [[ "$2" == "debug" ]]; then
echo "错误:apm debug 命令已被禁止执行。"
echo "提示:如需调试,请使用其他方式。"
exit 1
fi
# 禁止 apm ssaudit 命令(已弃用,请使用 apm ssinstall
if [[ "$2" == "ssaudit" ]]; then
echo "错误:apm ssaudit 命令已被弃用,请使用 apm ssinstall。"
echo "提示:请将 APM 升级到 1.2.2 版本以上以继续使用安装功能。"
exit 1
fi
# 执行 apm 命令(跳过第一个参数)
/usr/bin/apm "${@:2}" 2>&1
exit_code=$?
# 如果 apm ssinstall 执行失败,提示可能是版本过低
if [[ "$2" == "ssinstall" && "$exit_code" != "0" ]]; then
echo "提示:apm ssinstall 执行失败,可能是您的 APM 版本过低(需要 1.2.2+)。"
echo "请升级 APM 到 1.2.2 版本以上来继续安装。"
fi
;;
"ssinstall")
# 执行 ssinstall 命令(跳过第一个参数)
/usr/bin/ssinstall "${@:2}" --native 2>&1
exit_code=$?
if [[ "$exit_code" != "0" ]];then
echo "安装失败,可尝试安装对应的 APM 版本应用;若无对应的 APM 版本应用,可提交用户反馈"
fi
;;
"aptss")
# 针对 aptss 的特殊逻辑:如果是 remove 子命令,需要图形化确认
if [[ "$2" == "remove" ]]; then
packages="${@:3}"
# 确认框通用参数
title="确认卸载"
text="正在准备卸载: $packages\n\n若这是您下达的卸载指令,请选择确认继续卸载"
# 优先尝试 garma,其次 zenity
if command -v garma &> /dev/null; then
garma --question --title="$title" --text="$text" \
--ok-label="确认卸载" --cancel-label="取消" --width=400
confirmed=$?
elif command -v zenity &> /dev/null; then
zenity --question --title="$title" --text="$text" \
--ok-label="确认卸载" --cancel-label="取消" --width=400
confirmed=$?
else
echo "错误:未找到 garma 或 zenity,无法显示确认对话框。卸载操作已拒绝。"
exit 1
fi
# 根据确认结果执行
if [[ $confirmed -eq 0 ]]; then
/usr/bin/aptss "${@:2}" -y 2>&1
exit_code=$?
else
echo "操作已取消"
exit 0
fi
elif [[ "$2" == "install" ]]; then
packages="${@:3}"
# 确认框通用参数
title="确认安装"
text="正在准备安装: $packages\n\n若这是您下达的安装指令,请选择确认继续安装"
# 优先尝试 garma,其次 zenity
if command -v garma &> /dev/null; then
garma --question --title="$title" --text="$text" \
--ok-label="确认安装" --cancel-label="取消" --width=400
confirmed=$?
elif command -v zenity &> /dev/null; then
zenity --question --title="$title" --text="$text" \
--ok-label="确认安装" --cancel-label="取消" --width=400
confirmed=$?
else
echo "错误:未找到 garma 或 zenity,无法显示确认对话框。安装操作已拒绝。"
exit 1
fi
# 根据确认结果执行
if [[ $confirmed -eq 0 ]]; then
# 1) 先更新软件源(带进度条)
echo "正在更新软件源..."
if ! run_with_progress "更新软件源" "正在更新软件源,请稍候..." "/usr/bin/aptss update"; then
echo "错误:软件源更新失败,安装已终止。"
exit 1
fi
# 2) 执行安装(带进度条)
echo "正在安装软件包..."
if ! run_with_progress "安装软件包" "正在安装: $packages,请稍候..." "/usr/bin/aptss ${@:2} -y"; then
echo "错误:软件包安装失败。"
exit 1
fi
exit_code=0
else
echo "操作已取消"
exit 0
fi
else
# 非 remove/install 命令,拒绝执行
echo "拒绝执行 aptss 白名单外的指令"
exit 1
fi
;;
*)
# 兜底:拒绝非法指令
echo "拒绝执行:仅允许执行 'apm', 'aptss' 或 'ssinstall'。收到的参数: '$command_type'"
exit 1
;;
esac
exit $exit_code
-45
View File
@@ -1,45 +0,0 @@
#!/bin/bash
# 基础参数,始终添加 --no-sandbox
ARGS="--no-sandbox"
# 检查是否在容器中运行
# 方法1: 检查 root 路径
ROOT_PATH=$(readlink -f /proc/self/root)
if [ "$ROOT_PATH" != "/" ]; then
echo "检测到容器环境 (root path: $ROOT_PATH)"
ARGS="$ARGS --no-apm"
fi
# 方法2: 检查 IS_ACE_ENV 环境变量
if [ "$IS_ACE_ENV" = "1" ]; then
echo "检测到 ACE 容器环境"
ARGS="$ARGS --no-apm"
fi
# 检查是否存在 apt 指令
if ! command -v apt >/dev/null 2>&1; then
echo "未检测到 apt 指令"
ARGS="$ARGS --no-spark"
fi
# 注意:已移除原先针对 arm64 + wayland 添加 --disable-gpu 的逻辑,
# 现在 arm64 设备无论是否使用 wayland 均不再添加此参数。
# 执行程序(不使用 exec,以便捕获退出状态)
/opt/spark-store/bin/spark-store $ARGS "$@"
exit_code=$?
# 若程序退出码非0,使用 zenity 弹出友好提示
if [ $exit_code -ne 0 ]; then
if command -v zenity >/dev/null 2>&1; then
zenity --warning --width=600 --text="检测到您可能无法正确打开商店,可手动回退到旧版。\n在终端中执行 sudo aptss install spark-store-legacy -y 即可降级。\n\n对于银河麒麟,您可以尝试 APM 网页版商店 https://amber-pm.spark-app.store/"
else
# 降级方案:若 zenity 不可用,至少输出错误信息到终端
echo "警告: 程序异常退出(退出码 $exit_code),但无法显示图形提示。您可以尝试手动降级:" >&2
echo "sudo aptss install spark-store-legacy -y" >&2
echo "或访问 APM 网页版商店: https://amber-pm.spark-app.store/" >&2
fi
fi
exit $exit_code
Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

-179
View File
@@ -1,179 +0,0 @@
#!/usr/bin/env python3
"""
图标转换脚本 - 将spark-store.svg转换为标准尺寸的PNG图标
支持尺寸: 64x64, 128x128, 256x256, 512x512
"""
import os
import sys
from PIL import Image
import cairosvg
def convert_svg_to_png(svg_path, output_dir, sizes=[64, 128, 256, 512]):
"""
将SVG文件转换为多种尺寸的PNG图标
Args:
svg_path: SVG文件路径
output_dir: 输出目录
sizes: 需要生成的尺寸列表
"""
# 检查输入文件是否存在
if not os.path.exists(svg_path):
print(f"错误: 找不到SVG文件 {svg_path}")
return False
# 创建输出目录(如果不存在)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
print(f"创建输出目录: {output_dir}")
# 获取文件名(不含扩展名)
base_name = os.path.splitext(os.path.basename(svg_path))[0]
# 读取SVG文件
with open(svg_path, 'rb') as svg_file:
svg_data = svg_file.read()
# 为每个尺寸生成PNG
for size in sizes:
output_filename = f"{base_name}_{size}x{size}.png"
output_path = os.path.join(output_dir, output_filename)
try:
# 使用cairosvg将SVG转换为PNG
cairosvg.svg2png(
bytestring=svg_data,
write_to=output_path,
output_width=size,
output_height=size
)
print(f"✓ 已生成: {output_filename} ({size}x{size})")
# 验证生成的PNG文件
with Image.open(output_path) as img:
actual_size = img.size
if actual_size == (size, size):
print(f" - 尺寸验证通过: {actual_size}")
else:
print(f" - 警告: 实际尺寸为 {actual_size}")
except Exception as e:
print(f"✗ 生成 {size}x{size} 时出错: {str(e)}")
return False
return True
def generate_hicolor_icons(svg_path, base_output_dir):
"""
生成符合hicolor主题标准的图标目录结构
Args:
svg_path: SVG文件路径
base_output_dir: 基础输出目录
"""
# 定义标准尺寸和对应的子目录
icon_sizes = {
64: "64x64/apps",
128: "128x128/apps",
256: "256x256/apps",
512: "512x512/apps"
}
# 获取文件名(不含扩展名)
base_name = os.path.splitext(os.path.basename(svg_path))[0]
# 为每个尺寸创建目录并生成图标
for size, subdir in icon_sizes.items():
output_dir = os.path.join(base_output_dir, subdir)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
output_path = os.path.join(output_dir, f"{base_name}.png")
try:
# 读取SVG并转换
with open(svg_path, 'rb') as svg_file:
svg_data = svg_file.read()
cairosvg.svg2png(
bytestring=svg_data,
write_to=output_path,
output_width=size,
output_height=size
)
print(f"✓ 已生成: {output_dir}/{base_name}.png ({size}x{size})")
except Exception as e:
print(f"✗ 生成 {size}x{size} 时出错: {str(e)}")
return False
return True
def main():
"""
主函数
"""
# 默认配置
svg_file = "spark-store.svg"
output_dir = "spark-store-icons"
hicolor_dir = "hicolor"
print("=" * 50)
print("Spark Store 图标转换工具")
print("=" * 50)
# 检查是否安装了必要的库
try:
import PIL
import cairosvg
except ImportError as e:
print("错误: 缺少必要的Python库")
print("请安装依赖:")
print(" pip install Pillow cairosvg")
return
# 检查SVG文件
if not os.path.exists(svg_file):
print(f"错误: 在当前目录找不到 {svg_file}")
print(f"请确保 {svg_file} 文件存在于当前目录")
return
print(f"\n输入文件: {svg_file}")
# 生成普通PNG图标
print("\n[1/2] 生成标准尺寸PNG图标...")
if convert_svg_to_png(svg_file, output_dir):
print(f"✓ 所有PNG图标已生成到: {output_dir}/")
else:
print("✗ 生成PNG图标失败")
return
# 生成hicolor格式图标
print("\n[2/2] 生成hicolor格式图标...")
if generate_hicolor_icons(svg_file, hicolor_dir):
print(f"✓ hicolor图标已生成到: {hicolor_dir}/")
else:
print("✗ 生成hicolor图标失败")
return
print("\n" + "=" * 50)
print("✓ 图标转换完成!")
print("=" * 50)
print("\n生成的文件:")
print(f"1. 普通PNG图标: {output_dir}/")
print(f" - spark-store_64x64.png")
print(f" - spark-store_128x128.png")
print(f" - spark-store_256x256.png")
print(f" - spark-store_512x512.png")
print(f"\n2. hicolor格式图标: {hicolor_dir}/")
print(f" - {hicolor_dir}/64x64/apps/spark-store.png")
print(f" - {hicolor_dir}/128x128/apps/spark-store.png")
print(f" - {hicolor_dir}/256x256/apps/spark-store.png")
print(f" - {hicolor_dir}/512x512/apps/spark-store.png")
if __name__ == "__main__":
main()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 34 KiB

-14
View File
@@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/spark-store.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
<title>星火应用商店</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
-11
View File
@@ -1,11 +0,0 @@
import { test, expect } from "@playwright/test";
test("mock test", async ({ page }) => {
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
page.on('pageerror', exception => {
console.log(`Uncaught exception: "${exception}"`);
});
await page.goto("http://localhost:5173/");
await page.waitForTimeout(2000);
});
-11951
View File
File diff suppressed because it is too large Load Diff
-81
View File
@@ -1,81 +0,0 @@
{
"name": "spark-store",
"version": "5.0.0beta3",
"main": "dist-electron/main/index.js",
"description": "Client for Spark App Store",
"author": "elysia-best <elysia-best@simplelinux.cn.eu.org>",
"license": "GPL-3.0",
"private": true,
"keywords": [
"electron",
"rollup",
"vite",
"vue3",
"vue",
"spark-app-store"
],
"debug": {
"env": {
"VITE_DEV_SERVER_URL": "http://127.0.0.1:3344/"
}
},
"type": "module",
"scripts": {
"dev": "vite --mode debug | pino-pretty",
"build": "vue-tsc --noEmit && vite build --mode production && electron-builder --config electron-builder.yml",
"build:vite": "vue-tsc --noEmit && vite build --mode production",
"build:rpm": "vue-tsc --noEmit && vite build --mode production && electron-builder --config electron-builder.yml --linux rpm",
"build:deb": "vue-tsc --noEmit && vite build --mode production && electron-builder --config electron-builder.yml --linux deb",
"preview": "vite preview --mode debug",
"lint": "eslint --ext .ts,.vue src electron",
"lint:fix": "eslint --ext .ts,.vue src electron --fix",
"format": "prettier --write \"src/**/*.{ts,vue}\" \"electron/**/*.{ts,vue}\"",
"changelog": "conventional-changelog -p angular -r 0",
"test": "vitest",
"test:watch": "vitest --watch",
"test:coverage": "vitest --coverage",
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"test:e2e:debug": "playwright test --debug",
"test:all": "npm run test && npm run test:e2e"
},
"devDependencies": {
"@dotenvx/dotenvx": "^1.51.4",
"@eslint/create-config": "^1.11.0",
"@eslint/js": "^9.39.2",
"@loongdotjs/electron-builder": "^26.0.12-1",
"@playwright/test": "^1.40.0",
"@testing-library/jest-dom": "^6.1.5",
"@testing-library/vue": "^8.0.1",
"@vitejs/plugin-vue": "^6.0.3",
"@vitest/coverage-v8": "^1.0.0",
"@vue/test-utils": "^2.4.3",
"conventional-changelog": "^7.1.1",
"conventional-changelog-angular": "^8.1.0",
"electron": "^40.0.0",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-vue": "^10.7.0",
"globals": "^17.3.0",
"jiti": "^2.6.1",
"jsdom": "^23.0.1",
"pino-pretty": "^13.1.3",
"prettier": "3.8.1",
"typescript": "^5.4.2",
"typescript-eslint": "^8.55.0",
"vite": "^6.4.1",
"vite-plugin-electron": "^0.29.0",
"vite-plugin-electron-renderer": "^0.14.5",
"vitest": "^1.0.0",
"vue": "^3.4.21",
"vue-tsc": "^3.2.4"
},
"dependencies": {
"@tailwindcss/vite": "^4.1.18",
"axios": "^1.13.2",
"pino": "^10.3.0",
"tailwindcss": "^4.1.18",
"vue-virtual-scroller": "^2.0.0-beta.8"
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1 @@
deb [by-hash=force] https://d.store.deepinos.org.cn /
@@ -1,11 +0,0 @@
[Unit]
Description=Timer for Spark Update Notifier
[Timer]
# 开机后第一次执行
OnBootSec=1min
# 每天执行一次
OnUnitActiveSec=1d
[Install]
WantedBy=timers.target
@@ -2,14 +2,13 @@
Description=Spark Store update notifier Description=Spark Store update notifier
After=apt-daily.service network.target network-online.target systemd-networkd.service NetworkManager.service connman.service After=apt-daily.service network.target network-online.target systemd-networkd.service NetworkManager.service connman.service
[Service] [Service]
Type=simple Type=simple
RemainAfterExit=yes RemainAfterExit=yes
ExecStart=/opt/durapps/spark-store/bin/update-upgrade/ss-update-notifier.sh ExecStart=/opt/durapps/spark-store/bin/update-upgrade/ss-update-notifier.sh
Restart=on-failure Restart=on-failure
RestartSec=15 # 可以设置为更长的重试间隔,比如 15 秒或 30 秒 RestartSec=10
StartLimitIntervalSec=1h # 设置为 1 小时的时间窗口
StartLimitBurst=3 # 最大允许失败次数为 3 次
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
@@ -1,12 +0,0 @@
[Desktop Entry]
Categories=Development;
Encoding=UTF-8
Exec=/opt/durapps/spark-store/bin/open-in-terminal/open-in-terminal %U
Icon=open-me-in-terminal
MimeType=application/x-desktop
Name=Open me in terminal
Name[zh_CN]=在终端中打开
NoDisplay=true
StartupWMClass=在终端中打开
Terminal=true
Type=Application

Some files were not shown because too many files have changed in this diff Show More