mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-10-26 20:22:20 +08:00
commit
36d273dd5e
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
参数只有一个Url,该url应当遵循这种格式:`spk://<任意合法字符>/web分类/包名`
|
参数只有一个Url,该url应当遵循这种格式:`spk://<任意合法字符>/web分类/包名`
|
||||||
|
|
||||||
|
目前第一字段不进行处理,以后可能会对此识别。在目前阶段,这个字段可以填写任意合法字符
|
||||||
|
|
||||||
例如:
|
例如:
|
||||||
|
|
||||||
[spk://abcdefg/games/store.spark-app.hmcl](spk://abcdefg/games/store.spark-app.hmcl)
|
[spk://abcdefg/games/store.spark-app.hmcl](spk://abcdefg/games/store.spark-app.hmcl)
|
||||||
@ -15,11 +17,11 @@
|
|||||||
| 社交沟通 | chat |
|
| 社交沟通 | chat |
|
||||||
| 音乐欣赏 | music |
|
| 音乐欣赏 | music |
|
||||||
| 视频播放 | video |
|
| 视频播放 | video |
|
||||||
| 图形图像 | graphics |
|
| 图形图像 | image_graphics |
|
||||||
| 游戏娱乐 | games |
|
| 游戏娱乐 | games |
|
||||||
| 办公学习 | office |
|
| 办公学习 | office |
|
||||||
| 阅读翻译 | reading |
|
| 阅读翻译 | reading |
|
||||||
| 编程开发 | development |
|
| 编程开发 | development |
|
||||||
| 系统工具 | tools |
|
| 系统工具 | tools |
|
||||||
| 主题美化 | beautify |
|
| 主题美化 | themes |
|
||||||
| 其他应用 | others |
|
| 其他应用 | others |
|
||||||
|
|||||||
192
debian/changelog
vendored
192
debian/changelog
vendored
@ -2,76 +2,148 @@ spark-store (4.1.2) stable; urgency=medium
|
|||||||
|
|
||||||
* feat: 初步的wayland支持
|
* feat: 初步的wayland支持
|
||||||
* fix: 首页的捐赠页面在中文环境下显示中文
|
* fix: 首页的捐赠页面在中文环境下显示中文
|
||||||
* chore: 新增编译依赖,测试安装时不会出现报错
|
|
||||||
* fix: 更新检测模块在aptss ssupdate操作失败后现在会正确地移除锁而不是错误的残留锁。
|
* fix: 更新检测模块在aptss ssupdate操作失败后现在会正确地移除锁而不是错误的残留锁。
|
||||||
|
* chore: ssinstall现在拒绝安装验证失败的包,审核操作现在需要改用ssaudit
|
||||||
|
* fix: Ubuntu下下载列表无法关闭
|
||||||
|
* fix: 修复进入详情页时焦点默认在分享链接按钮上的问题
|
||||||
|
* fix: 修复特定情况下的内存泄漏问题
|
||||||
|
* fix: 适配c11代码规范,消除qt编译警告
|
||||||
|
* fix: 默认服务器域名指向cdn域名
|
||||||
|
* fix: 消除内部函数的无用变量,限制作用域
|
||||||
|
* feat: aptss 除ssupdate外的操作时候如果检测到存在源文件存在则不再重复获取
|
||||||
|
* fix: 修复在apt list锁被锁定的时候异常弹出有更新可用
|
||||||
|
* chore: 去除安装依赖:g++
|
||||||
|
* fix: 修复下载列表中进度提示文字显示不完整的问题
|
||||||
|
* feat: ssinstall支持从单独文件夹中校验软件包
|
||||||
|
* feat: 支持分单文件夹下载。具体内容参见:https://gitee.com/deepin-community-store/repo_auto_update_script/blob/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list
|
||||||
|
* info: 非常感谢 @jwyh 对星火商店代码仓库设计了很多标准,参见 https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo?id=%e6%9b%b4%e6%96%b0%e6%97%a5%e5%bf%97%e8%a7%84%e5%88%99 ,不过shenmo是自由的
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
* chore: 添加 Application 类,继承 DApplication,将 main 函数中设置属性、关于信息等操作移至 Application 构造函数中进行
|
||||||
|
* chore: 添加 setOrganizationName 操作,设置组织名称为 spark-union,与 SWRT 保持一致
|
||||||
|
* chore: 设置组织名称后,QStandardPaths::AppConfigLocation 等路径相应改变,修改所有配置文件和缓存文件路径
|
||||||
|
* chore: 关于对话框设置父对象后,对话框背景色受主窗口样式表影响,移动部分控件样式表设置方式与位置
|
||||||
|
* chore: 去除 .pro 文件中无效的更新翻译文件脚本调用,整理 .pro 文件,添加编译时更新 ts 文件脚本调用
|
||||||
|
* chore: 继续修复偶现关闭客户端时崩溃问题(疑似 aria2c 进程未启动,pid 未初始化为随机值,执行 kill 操作时未判断导致)
|
||||||
|
* chore: 新增编译依赖,测试安装时不会出现报错
|
||||||
|
* chore: 暂时去除没有意义的 DBus 接口,使用 DGuiApplicationHelper::newProcessInstance 获取新进程的启动参数
|
||||||
|
* chore: 更新翻译文件,去除已经不存在的翻译
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
spark-store (4.1.2~test2) stable; urgency=medium
|
||||||
|
|
||||||
|
* feat: ssinstall支持从单独文件夹中校验软件包
|
||||||
|
* feat: 支持分单文件夹下载。具体内容参见:https://gitee.com/deepin-community-store/repo_auto_update_script/blob/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list
|
||||||
|
* info: 非常感谢 @jwyh 对星火商店代码仓库设计了很多标准,参见 https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo ,不过shenmo是自由的
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
spark-store (4.1.2~test1) stable; urgency=medium
|
||||||
|
|
||||||
|
* feat: 初步的wayland支持
|
||||||
|
* fix: 首页的捐赠页面在中文环境下显示中文
|
||||||
|
* fix: 更新检测模块在aptss ssupdate操作失败后现在会正确地移除锁而不是错误的残留锁。
|
||||||
|
* chore: ssinstall现在拒绝安装验证失败的包,审核操作现在需要改用ssaudit
|
||||||
|
* fix: Ubuntu下下载列表无法关闭
|
||||||
|
* fix: 修复进入详情页时焦点默认在分享链接按钮上的问题
|
||||||
|
* fix: 修复特定情况下的内存泄漏问题
|
||||||
|
* fix: 适配c11代码规范,消除qt编译警告
|
||||||
|
* fix: 默认服务器域名指向cdn域名
|
||||||
|
* fix: 消除内部函数的无用变量,限制作用域
|
||||||
|
* feat: aptss 除ssupdate外的操作时候如果检测到存在源文件存在则不再重复获取
|
||||||
|
* fix: 修复在apt list锁被锁定的时候异常弹出有更新可用
|
||||||
|
* chore: 去除安装依赖:g++
|
||||||
|
* fix: 修复下载列表中进度提示文字显示不完整的问题
|
||||||
|
|
||||||
|
|
||||||
|
* chore: 添加 Application 类,继承 DApplication,将 main 函数中设置属性、关于信息等操作移至 Application 构造函数中进行
|
||||||
|
* chore: 添加 setOrganizationName 操作,设置组织名称为 spark-union,与 SWRT 保持一致
|
||||||
|
* chore: 设置组织名称后,QStandardPaths::AppConfigLocation 等路径相应改变,修改所有配置文件和缓存文件路径
|
||||||
|
* chore: 关于对话框设置父对象后,对话框背景色受主窗口样式表影响,移动部分控件样式表设置方式与位置
|
||||||
|
* chore: 去除 .pro 文件中无效的更新翻译文件脚本调用,整理 .pro 文件,添加编译时更新 ts 文件脚本调用
|
||||||
|
* chore: 继续修复偶现关闭客户端时崩溃问题(疑似 aria2c 进程未启动,pid 未初始化为随机值,执行 kill 操作时未判断导致)
|
||||||
|
* chore: 新增编译依赖,测试安装时不会出现报错
|
||||||
|
* chore: 暂时去除没有意义的 DBus 接口,使用 DGuiApplicationHelper::newProcessInstance 获取新进程的启动参数
|
||||||
|
* chore: 更新翻译文件,去除已经不存在的翻译
|
||||||
|
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (4.1.1) stable; urgency=medium
|
spark-store (4.1.1) stable; urgency=medium
|
||||||
|
|
||||||
* fix:更新失效
|
* fix:更新失效
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (4.1.0) stable; urgency=medium
|
spark-store (4.1.0) stable; urgency=medium
|
||||||
|
|
||||||
* feat: 现在可以支持UOS签名包问题了
|
* feat: 现在可以支持UOS签名包问题了
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (4.0.1) stable; urgency=medium
|
spark-store (4.0.1) stable; urgency=medium
|
||||||
|
|
||||||
* feat: 提升Ubuntu下的显示效果
|
* feat: 提升Ubuntu下的显示效果
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (4.0.0) stable; urgency=medium
|
spark-store (4.0.0) stable; urgency=medium
|
||||||
|
|
||||||
* feat: 修复了成吨的bug后开始正式版
|
* feat: 修复了成吨的bug后开始正式版
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (4.0.0~test2) stable; urgency=medium
|
spark-store (4.0.0~test2) stable; urgency=medium
|
||||||
|
|
||||||
* feat: 修复了成吨的bug后开始公测
|
* feat: 修复了成吨的bug后开始公测
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (4.0.0~test1) stable; urgency=medium
|
spark-store (4.0.0~test1) stable; urgency=medium
|
||||||
|
|
||||||
* feat: 柚子过来补充一下啦
|
* feat: 柚子过来补充一下啦
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.4~test1) stable; urgency=medium
|
spark-store (3.4~test1) stable; urgency=medium
|
||||||
|
|
||||||
* feat: aptss不再尝试安装apt-fast,转而自带
|
* feat: aptss不再尝试安装apt-fast,转而自带
|
||||||
* chore: 删除password-check模块
|
* chore: 删除password-check模块
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3.3) stable; urgency=medium
|
spark-store (3.3.3) stable; urgency=medium
|
||||||
|
|
||||||
* feat: 首页链接调用浏览器打开
|
* feat: 首页链接调用浏览器打开
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
0spark-store (3.3.3~test5) stable; urgency=medium
|
|
||||||
|
spark-store (3.3.3~test5) stable; urgency=medium
|
||||||
|
|
||||||
* 修复可能的内存泄漏问题
|
* 修复可能的内存泄漏问题
|
||||||
* 修复应用搜索为空但仍显示上一次搜索结果的问题
|
* 修复应用搜索为空但仍显示上一次搜索结果的问题
|
||||||
* 修复动画加载延后的问题
|
* 修复动画加载延后的问题
|
||||||
* 修复统计下载量卡主渲染线程的问题
|
* 修复统计下载量卡主渲染线程的问题
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3.3~test4) stable; urgency=medium
|
spark-store (3.3.3~test4) stable; urgency=medium
|
||||||
|
|
||||||
* Enable i386 arch support by default
|
* Enable i386 arch support by default
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3.3~test3) stable; urgency=medium
|
spark-store (3.3.3~test3) stable; urgency=medium
|
||||||
|
|
||||||
@ -84,7 +156,8 @@ spark-store (3.3.3~test2) stable; urgency=medium
|
|||||||
|
|
||||||
* bug fix: 更新和检查更新出错时不报错.此更新需要一个推送
|
* bug fix: 更新和检查更新出错时不报错.此更新需要一个推送
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3.3~test1) stable; urgency=medium
|
spark-store (3.3.3~test1) stable; urgency=medium
|
||||||
|
|
||||||
@ -92,132 +165,137 @@ spark-store (3.3.3~test1) stable; urgency=medium
|
|||||||
* 图形环境中所有root权限的组件剥离到cli(可用于deepin 23 daily,只保证商店本体正常运作,不处理安装依赖不满足)
|
* 图形环境中所有root权限的组件剥离到cli(可用于deepin 23 daily,只保证商店本体正常运作,不处理安装依赖不满足)
|
||||||
* 文案更改:更新检查-->检查更新
|
* 文案更改:更新检查-->检查更新
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3.1~test1) stable; urgency=medium
|
spark-store (3.3.1~test1) stable; urgency=medium
|
||||||
|
|
||||||
* 安装时不再需要联网
|
* 安装时不再需要联网
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3.0.4) stable; urgency=medium
|
spark-store (3.3.0.4) stable; urgency=medium
|
||||||
|
|
||||||
* 为减轻服务器压力,不再单独更新某一个应用,而是作为整体更新
|
* 为减轻服务器压力,不再单独更新某一个应用,而是作为整体更新
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.3.0.3) stable; urgency=medium
|
spark-store (3.3.0.3) stable; urgency=medium
|
||||||
|
|
||||||
* 回滚 更新中行为到进度条而不是实时输出
|
* 回滚 更新中行为到进度条而不是实时输出
|
||||||
* 更新应用时显示正在更新哪个应用
|
* 更新应用时显示正在更新哪个应用
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.3.0.2) stable; urgency=medium
|
spark-store (3.3.0.2) stable; urgency=medium
|
||||||
|
|
||||||
* 修复 pkexec未执行
|
* 修复 pkexec未执行
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.3.0.1) stable; urgency=medium
|
spark-store (3.3.0.1) stable; urgency=medium
|
||||||
|
|
||||||
* 修复 检查更新的更新进程未实际运行
|
* 修复 检查更新的更新进程未实际运行
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.3) stable; urgency=medium
|
spark-store (3.3) stable; urgency=medium
|
||||||
|
|
||||||
* 修复 检查更新 未刷新软件源
|
* 修复 检查更新 未刷新软件源
|
||||||
* 把检查更新单独拿出作为左列
|
* 把检查更新单独拿出作为左列
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3~test3) stable; urgency=medium
|
spark-store (3.3~test3) stable; urgency=medium
|
||||||
|
|
||||||
* 把检查更新加入免密码
|
* 把检查更新加入免密码
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3~test2) stable; urgency=medium
|
spark-store (3.3~test2) stable; urgency=medium
|
||||||
|
|
||||||
* 更新检测功能全部更改到zenity
|
* 更新检测功能全部更改到zenity
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.3~test1) stable; urgency=medium
|
spark-store (3.3~test1) stable; urgency=medium
|
||||||
|
|
||||||
* zenity,选择可更新应用
|
* zenity,选择可更新应用
|
||||||
* 自动更新检测现在会跳过hold
|
* 自动更新检测现在会跳过hold
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.2.4) stable; urgency=medium
|
spark-store (3.2.4) stable; urgency=medium
|
||||||
|
|
||||||
* 修改tag相关的文案内容:wine相关环境已可自动配置了
|
* 修改tag相关的文案内容:wine相关环境已可自动配置了
|
||||||
* 准备发版
|
* 准备发版
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.2.4~test4) stable; urgency=medium
|
spark-store (3.2.4~test4) stable; urgency=medium
|
||||||
|
|
||||||
* 现在在商店启动后点击spk链接仍会正常启动 https://gitee.com/deepin-community-store/spark-store/commit/dd6780d636042bf12d77414e6f1552cc7d1ed24c
|
* 现在在商店启动后点击spk链接仍会正常启动 https://gitee.com/deepin-community-store/spark-store/commit/dd6780d636042bf12d77414e6f1552cc7d1ed24c
|
||||||
|
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.2.4~test3) stable; urgency=medium
|
spark-store (3.2.4~test3) stable; urgency=medium
|
||||||
|
|
||||||
* 发版,合入到master
|
* 发版,合入到master
|
||||||
* 翻译完毕
|
* 翻译完毕
|
||||||
* 合入先前的各项改动,为:客户端集成投稿器入口和支持,修复:安装依赖时间较长时错误地返回“安装完毕”结果,现在客户端版本更新时不关闭免密码登录,UOS安装进程合并正常aptss中
|
* 合入先前的各项改动,为:客户端集成投稿器入口和支持,修复:安装依赖时间较长时错误地返回“安装完毕”结果,现在客户端版本更新时不关闭免密码登录,UOS安装进程合并正常aptss中
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.2.4~test2) stable; urgency=medium
|
spark-store (3.2.4~test2) stable; urgency=medium
|
||||||
|
|
||||||
* 客户端集成投稿器入口和支持
|
* 客户端集成投稿器入口和支持
|
||||||
* 修复:安装依赖时间较长时错误地返回“安装完毕”结果
|
* 修复:安装依赖时间较长时错误地返回“安装完毕”结果
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.2.4~test1) stable; urgency=medium
|
spark-store (3.2.4~test1) stable; urgency=medium
|
||||||
|
|
||||||
* 客户端更新时不关闭免密码登录
|
* 客户端更新时不关闭免密码登录
|
||||||
* UOS合并正常aptss中
|
* UOS合并正常aptss中
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.2.3) stable; urgency=medium
|
spark-store (3.2.3) stable; urgency=medium
|
||||||
|
|
||||||
* 客户端异常退出时仍然占用资源问题修复
|
* 客户端异常退出时仍然占用资源问题修复
|
||||||
* 降低dtk依赖版本,Debian 11 stable可直接安装
|
* 降低dtk依赖版本,Debian 11 stable可直接安装
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.2.2) stable; urgency=medium
|
spark-store (3.2.2) stable; urgency=medium
|
||||||
|
|
||||||
* aptss will now refresh the system source before doing install, policy....etc
|
* aptss will now refresh the system source before doing install, policy....etc
|
||||||
* 启动客户端GPU加速支持
|
* 启动客户端GPU加速支持
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.2.1) stable; urgency=medium
|
spark-store (3.2.1) stable; urgency=medium
|
||||||
|
|
||||||
* 更改刷新系统源的功能
|
* 更改刷新系统源的功能
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.2) stable; urgency=medium
|
spark-store (3.2) stable; urgency=medium
|
||||||
|
|
||||||
@ -230,20 +308,22 @@ spark-store (3.2) stable; urgency=medium
|
|||||||
* 修复 在更新检测设置中的是否开启自动更新检测设置项的显示不随开启或关闭状态改变
|
* 修复 在更新检测设置中的是否开启自动更新检测设置项的显示不随开启或关闭状态改变
|
||||||
* 修复 在检测更新时临时降低优先级到100,防止系统中有且版本一致的包被反复来回更新
|
* 修复 在检测更新时临时降低优先级到100,防止系统中有且版本一致的包被反复来回更新
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.6) stable; urgency=medium
|
spark-store (3.1.6) stable; urgency=medium
|
||||||
|
|
||||||
* 修复部分情况下无法选中正确的镜像源的问题
|
* 修复部分情况下无法选中正确的镜像源的问题
|
||||||
* 合入3.1.5以来的各项修改
|
* 合入3.1.5以来的各项修改
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.5-5) stable; urgency=medium
|
spark-store (3.1.5-5) stable; urgency=medium
|
||||||
|
|
||||||
* 从所有镜像源中选取最快镜像源高速下载
|
* 从所有镜像源中选取最快镜像源高速下载
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.5-4) stable; urgency=medium
|
spark-store (3.1.5-4) stable; urgency=medium
|
||||||
@ -253,53 +333,54 @@ spark-store (3.1.5-4) stable; urgency=medium
|
|||||||
* 更新检测服务优化:从分体改为一体
|
* 更新检测服务优化:从分体改为一体
|
||||||
* aptss 支持自动补全
|
* aptss 支持自动补全
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.5-3) stable; urgency=medium
|
spark-store (3.1.5-3) stable; urgency=medium
|
||||||
|
|
||||||
* 包内自带密钥
|
* 包内自带密钥
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.1.5-2) stable; urgency=medium
|
spark-store (3.1.5-2) stable; urgency=medium
|
||||||
|
|
||||||
* 下载软件时跳过获取大小,修复部分软件无法下载的问题
|
* 下载软件时跳过获取大小,修复部分软件无法下载的问题
|
||||||
* 修复 获取key时出错,指定使用http1.1
|
* 修复 获取key时出错,指定使用http1.1
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.1.5-1) stable; urgency=medium
|
spark-store (3.1.5-1) stable; urgency=medium
|
||||||
|
|
||||||
* 改变更新策略,UOS也下载加速,但是安装不加速
|
* 改变更新策略,UOS也下载加速,但是安装不加速
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.1.5) stable; urgency=medium
|
spark-store (3.1.5) stable; urgency=medium
|
||||||
|
|
||||||
* 改变更新策略,现在支持应用在更新时引入新依赖
|
* 改变更新策略,现在支持应用在更新时引入新依赖
|
||||||
* ss-apt-fast现在默认允许降级,以与apt使用体验一致
|
* ss-apt-fast现在默认允许降级,以与apt使用体验一致
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.1.4-2) stable; urgency=medium
|
spark-store (3.1.4-2) stable; urgency=medium
|
||||||
|
|
||||||
* 客户端下载使用metalink来支持bt下载加速
|
* 客户端下载使用metalink来支持bt下载加速
|
||||||
* 修复使用更新和安装设置更新商店本体时出错
|
* 修复使用更新和安装设置更新商店本体时出错
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
|
||||||
|
|
||||||
spark-store (3.1.4-1) stable; urgency=medium
|
spark-store (3.1.4-1) stable; urgency=medium
|
||||||
|
|
||||||
* 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
|
* 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
|
||||||
* 修复:ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
|
* 修复:ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.4) stable; urgency=medium
|
spark-store (3.1.4) stable; urgency=medium
|
||||||
|
|
||||||
@ -312,6 +393,7 @@ spark-store (3.1.4) stable; urgency=medium
|
|||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.3-2) stable; urgency=medium
|
spark-store (3.1.3-2) stable; urgency=medium
|
||||||
|
|
||||||
* 调整 现在与系统更新分开,不再导致更新失败
|
* 调整 现在与系统更新分开,不再导致更新失败
|
||||||
@ -320,17 +402,17 @@ spark-store (3.1.3-2) stable; urgency=medium
|
|||||||
* 修改ss-apt-fast的策略,现在除了安装,下载和更新都改用apt
|
* 修改ss-apt-fast的策略,现在除了安装,下载和更新都改用apt
|
||||||
* ssinstall 现在也会在不适用ss-apt-fast的时候模拟源了(针对UOS)
|
* ssinstall 现在也会在不适用ss-apt-fast的时候模拟源了(针对UOS)
|
||||||
|
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.3-1) stable; urgency=medium
|
spark-store (3.1.3-1) stable; urgency=medium
|
||||||
|
|
||||||
* 修复 下载提前退出
|
* 修复 下载提前退出
|
||||||
* 移除 下载量显示
|
* 移除 下载量显示
|
||||||
|
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.3) stable; urgency=medium
|
spark-store (3.1.3) stable; urgency=medium
|
||||||
|
|
||||||
* Now uses aria2 to download softwares form all mirrors
|
* Now uses aria2 to download softwares form all mirrors
|
||||||
@ -342,6 +424,7 @@ spark-store (3.1.3) stable; urgency=medium
|
|||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.2) stable; urgency=medium
|
spark-store (3.1.2) stable; urgency=medium
|
||||||
|
|
||||||
* Now let apt-fast method support all mirrors
|
* Now let apt-fast method support all mirrors
|
||||||
@ -350,8 +433,6 @@ spark-store (3.1.2) stable; urgency=medium
|
|||||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.1) stable; urgency=medium
|
spark-store (3.1.1) stable; urgency=medium
|
||||||
|
|
||||||
* Now will delete the link of policy file after uninstall or upgrade
|
* Now will delete the link of policy file after uninstall or upgrade
|
||||||
@ -360,8 +441,6 @@ spark-store (3.1.1) stable; urgency=medium
|
|||||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.1.0) stable; urgency=medium
|
spark-store (3.1.0) stable; urgency=medium
|
||||||
|
|
||||||
* Add pkexec policy: ssinstall. Only will be enabled after permitted.
|
* Add pkexec policy: ssinstall. Only will be enabled after permitted.
|
||||||
@ -370,7 +449,6 @@ spark-store (3.1.0) stable; urgency=medium
|
|||||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.0.3-13) stable; urgency=medium
|
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
|
* Update the ssinstall script. Now support apt-fast and will temporarily increase the spark store source priority to 500 to make depends install correctly
|
||||||
@ -380,7 +458,6 @@ spark-store (3.0.3-13) stable; urgency=medium
|
|||||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.0.3-12) stable; urgency=medium
|
spark-store (3.0.3-12) stable; urgency=medium
|
||||||
|
|
||||||
* Rollback to use DApplication::loadDXcbPlugin() to make titlebar behave normally in ubuntu
|
* Rollback to use DApplication::loadDXcbPlugin() to make titlebar behave normally in ubuntu
|
||||||
@ -390,8 +467,6 @@ spark-store (3.0.3-12) stable; urgency=medium
|
|||||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.0.3-11) stable; urgency=medium
|
spark-store (3.0.3-11) stable; urgency=medium
|
||||||
|
|
||||||
* Now support autoupdate
|
* Now support autoupdate
|
||||||
@ -399,8 +474,6 @@ spark-store (3.0.3-11) stable; urgency=medium
|
|||||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spark-store (3.0.3-10) stable; urgency=medium
|
spark-store (3.0.3-10) stable; urgency=medium
|
||||||
|
|
||||||
* Now also compile dstore patch
|
* Now also compile dstore patch
|
||||||
@ -413,3 +486,4 @@ spark-store (3.0.3-9) stable; urgency=medium
|
|||||||
* Support dpkg-buildpackage
|
* Support dpkg-buildpackage
|
||||||
|
|
||||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|||||||
5
debian/control
vendored
5
debian/control
vendored
@ -20,10 +20,9 @@ Build-Depends:
|
|||||||
qtwayland5-dev-tools,
|
qtwayland5-dev-tools,
|
||||||
gcc,
|
gcc,
|
||||||
g++
|
g++
|
||||||
|
|
||||||
Standards-Version: 3.0
|
Standards-Version: 3.0
|
||||||
Homepage: https://www.spark-app.store/
|
Homepage: https://www.spark-app.store/
|
||||||
|
|
||||||
|
|
||||||
Package: spark-store
|
Package: spark-store
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends:${shlibs:Depends}, ${misc:Depends},
|
Depends:${shlibs:Depends}, ${misc:Depends},
|
||||||
@ -42,8 +41,6 @@ Depends:${shlibs:Depends}, ${misc:Depends},
|
|||||||
bubblewrap,
|
bubblewrap,
|
||||||
aria2,
|
aria2,
|
||||||
gcc,
|
gcc,
|
||||||
g++,
|
|
||||||
zenity
|
zenity
|
||||||
Description: Spark Store
|
Description: Spark Store
|
||||||
A community powered app store, based on DTK.
|
A community powered app store, based on DTK.
|
||||||
Recommends: apt-fast
|
|
||||||
|
|||||||
1
debian/spark-store.postinst
vendored
1
debian/spark-store.postinst
vendored
@ -25,6 +25,7 @@ case "$1" in
|
|||||||
ln -s -f /opt/durapps/spark-store/bin/ussremove /usr/local/bin/ussremove
|
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/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/ssinstall /usr/local/bin/ssinstall
|
||||||
|
ln -s -f /opt/durapps/spark-store/bin/ssaudit /usr/local/bin/ssaudit
|
||||||
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/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/local/bin/ss-apt-fast
|
||||||
|
|
||||||
|
|||||||
1
debian/spark-store.prerm
vendored
1
debian/spark-store.prerm
vendored
@ -4,6 +4,7 @@ if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
|
|||||||
# Remove residual symbol links
|
# Remove residual symbol links
|
||||||
rm /usr/local/bin/spark-store
|
rm /usr/local/bin/spark-store
|
||||||
rm /usr/local/bin/ssinstall
|
rm /usr/local/bin/ssinstall
|
||||||
|
rm /usr/local/bin/ssaudit
|
||||||
rm /usr/local/bin/spark-dstore-patch
|
rm /usr/local/bin/spark-dstore-patch
|
||||||
rm /usr/local/bin/ussinstall
|
rm /usr/local/bin/ussinstall
|
||||||
rm /usr/local/bin/ussremove
|
rm /usr/local/bin/ussremove
|
||||||
|
|||||||
@ -14,13 +14,11 @@ SUBDIRS += \
|
|||||||
src/spark-dstore-patch \
|
src/spark-dstore-patch \
|
||||||
src/spark-store.pro
|
src/spark-store.pro
|
||||||
|
|
||||||
#TRANSLATIONS += \
|
|
||||||
# translations/spark-store_fr.ts \
|
|
||||||
# translations/spark-store_en.ts \
|
|
||||||
# translations/spark-store_zh_CN.ts
|
|
||||||
|
|
||||||
# Update translation files
|
# Update translation files
|
||||||
CONFIG(release, debug|release): system(bash $${PWD}/translate_generation.sh)
|
CONFIG(release, debug|release) {
|
||||||
|
system(bash $${PWD}/translate_update.sh)
|
||||||
|
system(bash $${PWD}/translate_generation.sh)
|
||||||
|
}
|
||||||
|
|
||||||
# Rules for deployment
|
# Rules for deployment
|
||||||
tool.files += tool/*
|
tool.files += tool/*
|
||||||
@ -64,4 +62,4 @@ INSTALLS += \
|
|||||||
service \
|
service \
|
||||||
bash_completion \
|
bash_completion \
|
||||||
polkit-1
|
polkit-1
|
||||||
# 暂时不添加
|
# 暂时不添加
|
||||||
|
|||||||
103
src/application.cpp
Normal file
103
src/application.cpp
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
#include "application.h"
|
||||||
|
|
||||||
|
#include <DPlatformWindowHandle>
|
||||||
|
#include <DLog>
|
||||||
|
#include <DGuiApplicationHelper>
|
||||||
|
#include <DAboutDialog>
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QStandardPaths>
|
||||||
|
|
||||||
|
DCORE_USE_NAMESPACE
|
||||||
|
|
||||||
|
Application::Application(int &argc, char **argv)
|
||||||
|
: DApplication(argc, argv)
|
||||||
|
{
|
||||||
|
// Wayland 环境下使用,防止子控件 Native 化
|
||||||
|
if (!DPlatformWindowHandle::pluginVersion().isEmpty()) {
|
||||||
|
setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
|
||||||
|
}
|
||||||
|
setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||||
|
|
||||||
|
loadTranslator(); // 载入翻译
|
||||||
|
|
||||||
|
setOrganizationName("spark-union");
|
||||||
|
setApplicationName("spark-store"); // 影响 ~/.config/spark-union ~/.local/share/spark-union 下文件夹名称
|
||||||
|
setApplicationDisplayName(QObject::tr("Spark Store")); // 设置窗口显示标题 (Wayland 下会显示 Qt 原生标题栏)
|
||||||
|
setProductName(QObject::tr("Spark Store"));
|
||||||
|
setProductIcon(QIcon::fromTheme("spark-store"));
|
||||||
|
setApplicationHomePage("https://gitee.com/deepin-community-store");
|
||||||
|
setApplicationDescription(
|
||||||
|
QObject::tr(
|
||||||
|
"<span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/>"
|
||||||
|
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
|
||||||
|
"<span style=' font-size:12pt;'>Spark developers</span>"));
|
||||||
|
setApplicationLicense(" <a href='https://gitee.com/deepin-community-store/spark-store/blob/Flamescion/LICENSE'>GPLv3</a> ");
|
||||||
|
|
||||||
|
// 检查 ~/.config/spark-union/spark-store 文件夹是否存在
|
||||||
|
checkAppConfigLocation();
|
||||||
|
|
||||||
|
// 初始化日志模块 (默认日志位置 ~/.cache/spark-union/spark-store)
|
||||||
|
DLogManager::registerConsoleAppender();
|
||||||
|
DLogManager::registerFileAppender();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::handleAboutAction()
|
||||||
|
{
|
||||||
|
if (aboutDialog()) {
|
||||||
|
DApplication::handleAboutAction();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
initAboutDialog();
|
||||||
|
DApplication::handleAboutAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::checkAppConfigLocation()
|
||||||
|
{
|
||||||
|
QDir dir(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation));
|
||||||
|
if (!dir.exists()) {
|
||||||
|
qWarning() << "AppConfigLocation not existed, creating...";
|
||||||
|
dir.mkpath(dir.absolutePath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::setVersionAndBuildDateTime(const QString &version, const QString &buildDateTime)
|
||||||
|
{
|
||||||
|
m_version = version;
|
||||||
|
m_buildDateTime = buildDateTime;
|
||||||
|
|
||||||
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
|
if (config.value("build/version").toString() != m_version) {
|
||||||
|
qDebug() << "Spark Store has been updated!";
|
||||||
|
|
||||||
|
config.setValue("build/version", m_version);
|
||||||
|
config.setValue("build/time", m_buildDateTime);
|
||||||
|
config.sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
setApplicationVersion(DApplication::buildVersion(config.value("build/version").toString() + "-" + "Flamescion" + "-" + config.value("build/time").toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::initAboutDialog()
|
||||||
|
{
|
||||||
|
// 自定义 DAboutDialog
|
||||||
|
DAboutDialog *dialog = new DAboutDialog(activeWindow());
|
||||||
|
dialog->setProductName(productName());
|
||||||
|
dialog->setProductIcon(productIcon());
|
||||||
|
dialog->setVersion(translate("DAboutDialog", "Version: %1").arg(applicationVersion()));
|
||||||
|
// 根据 shenmo 要求,不显示组织 Logo
|
||||||
|
// dialog->setCompanyLogo(QPixmap(":/icon/Logo-Spark.png"));
|
||||||
|
dialog->setCompanyLogo(QPixmap());
|
||||||
|
dialog->setWebsiteName(QObject::tr("Spark Project"));
|
||||||
|
dialog->setWebsiteLink(applicationHomePage());
|
||||||
|
dialog->setDescription(applicationDescription());
|
||||||
|
dialog->setLicense(translate("DAboutDialog", "%1 is released under %2").arg(productName()).arg(applicationLicense()));
|
||||||
|
|
||||||
|
setAboutDialog(dialog);
|
||||||
|
connect(aboutDialog(), &DAboutDialog::destroyed, this, [=] {
|
||||||
|
setAboutDialog(nullptr);
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog->hide();
|
||||||
|
}
|
||||||
28
src/application.h
Normal file
28
src/application.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef APPLICATION_H
|
||||||
|
#define APPLICATION_H
|
||||||
|
|
||||||
|
#include <DApplication>
|
||||||
|
|
||||||
|
DWIDGET_USE_NAMESPACE
|
||||||
|
|
||||||
|
class Application : public DApplication
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
Application(int &argc, char **argv);
|
||||||
|
void handleAboutAction() override;
|
||||||
|
|
||||||
|
static void checkAppConfigLocation();
|
||||||
|
|
||||||
|
void setVersionAndBuildDateTime(const QString &version, const QString &buildDateTime);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void initAboutDialog();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_version;
|
||||||
|
QString m_buildDateTime;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // APPLICATION_H
|
||||||
@ -1,64 +1,65 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>icon/logo.svg</file>
|
<file>icon/Logo-Spark.png</file>
|
||||||
<file>tags/a2d-small.png</file>
|
<file>icon/dark/back.svg</file>
|
||||||
<file>tags/a2d.png</file>
|
<file>icon/dark/box.svg</file>
|
||||||
<file>tags/community-small.png</file>
|
<file>icon/dark/calendar.svg</file>
|
||||||
<file>tags/community.png</file>
|
<file>icon/dark/download.svg</file>
|
||||||
<file>tags/community.svg</file>
|
<file>icon/dark/folder.svg</file>
|
||||||
<file>tags/deepin-small.png</file>
|
<file>icon/dark/globe.svg</file>
|
||||||
<file>tags/deepin.svg</file>
|
<file>icon/dark/leftbutton_0.svg</file>
|
||||||
<file>tags/dtk-small.png</file>
|
<file>icon/dark/leftbutton_1.svg</file>
|
||||||
<file>tags/dwine2-small.png</file>
|
<file>icon/dark/leftbutton_2.svg</file>
|
||||||
<file>tags/dwine5-small.png</file>
|
<file>icon/dark/leftbutton_3.svg</file>
|
||||||
<file>tags/dwine5.svg</file>
|
<file>icon/dark/leftbutton_4.svg</file>
|
||||||
<file>tags/logo_icon.svg</file>
|
<file>icon/dark/leftbutton_5.svg</file>
|
||||||
<file>tags/ubuntu-small.png</file>
|
<file>icon/dark/leftbutton_6.svg</file>
|
||||||
<file>tags/ubuntu.png</file>
|
<file>icon/dark/leftbutton_7.svg</file>
|
||||||
<file>tags/uos-authorize.svg</file>
|
<file>icon/dark/leftbutton_8.svg</file>
|
||||||
<file>tags/uos-small.png</file>
|
<file>icon/dark/leftbutton_9.svg</file>
|
||||||
<file>tags/uos.svg</file>
|
<file>icon/dark/leftbutton_10.svg</file>
|
||||||
<file>icon/light/back.svg</file>
|
<file>icon/dark/leftbutton_11.svg</file>
|
||||||
<file>icon/light/download.svg</file>
|
<file>icon/dark/leftbutton_12.svg</file>
|
||||||
<file>icon/light/leftbutton_0.svg</file>
|
<file>icon/dark/text.svg</file>
|
||||||
<file>icon/light/leftbutton_1.svg</file>
|
<file>icon/dark/update.svg</file>
|
||||||
<file>icon/light/leftbutton_2.svg</file>
|
<file>icon/light/back.svg</file>
|
||||||
<file>icon/light/leftbutton_3.svg</file>
|
<file>icon/light/download.svg</file>
|
||||||
<file>icon/light/leftbutton_4.svg</file>
|
<file>icon/light/leftbutton_0.svg</file>
|
||||||
<file>icon/light/leftbutton_5.svg</file>
|
<file>icon/light/leftbutton_1.svg</file>
|
||||||
<file>icon/light/leftbutton_6.svg</file>
|
<file>icon/light/leftbutton_2.svg</file>
|
||||||
<file>icon/light/leftbutton_7.svg</file>
|
<file>icon/light/leftbutton_3.svg</file>
|
||||||
<file>icon/light/leftbutton_8.svg</file>
|
<file>icon/light/leftbutton_4.svg</file>
|
||||||
<file>icon/light/leftbutton_9.svg</file>
|
<file>icon/light/leftbutton_5.svg</file>
|
||||||
<file>icon/light/leftbutton_10.svg</file>
|
<file>icon/light/leftbutton_6.svg</file>
|
||||||
<file>icon/light/leftbutton_11.svg</file>
|
<file>icon/light/leftbutton_7.svg</file>
|
||||||
<file>icon/light/leftbutton_12.svg</file>
|
<file>icon/light/leftbutton_8.svg</file>
|
||||||
<file>icon/light/box.svg</file>
|
<file>icon/light/leftbutton_9.svg</file>
|
||||||
<file>icon/light/calendar.svg</file>
|
<file>icon/light/leftbutton_10.svg</file>
|
||||||
<file>icon/light/globe.svg</file>
|
<file>icon/light/leftbutton_11.svg</file>
|
||||||
<file>icon/light/folder.svg</file>
|
<file>icon/light/leftbutton_12.svg</file>
|
||||||
<file>icon/light/text.svg</file>
|
<file>icon/light/box.svg</file>
|
||||||
<file>icon/dark/back.svg</file>
|
<file>icon/light/calendar.svg</file>
|
||||||
<file>icon/dark/box.svg</file>
|
<file>icon/light/globe.svg</file>
|
||||||
<file>icon/dark/calendar.svg</file>
|
<file>icon/light/folder.svg</file>
|
||||||
<file>icon/dark/download.svg</file>
|
<file>icon/light/text.svg</file>
|
||||||
<file>icon/dark/folder.svg</file>
|
<file>icon/light/update.svg</file>
|
||||||
<file>icon/dark/globe.svg</file>
|
<file>icon/logo.svg</file>
|
||||||
<file>icon/dark/leftbutton_0.svg</file>
|
<file>tags/a2d-small.png</file>
|
||||||
<file>icon/dark/leftbutton_1.svg</file>
|
<file>tags/a2d.png</file>
|
||||||
<file>icon/dark/leftbutton_2.svg</file>
|
<file>tags/community-small.png</file>
|
||||||
<file>icon/dark/leftbutton_3.svg</file>
|
<file>tags/community.png</file>
|
||||||
<file>icon/dark/leftbutton_4.svg</file>
|
<file>tags/community.svg</file>
|
||||||
<file>icon/dark/leftbutton_5.svg</file>
|
<file>tags/deepin-small.png</file>
|
||||||
<file>icon/dark/leftbutton_6.svg</file>
|
<file>tags/deepin.svg</file>
|
||||||
<file>icon/dark/leftbutton_7.svg</file>
|
<file>tags/dtk-small.png</file>
|
||||||
<file>icon/dark/leftbutton_8.svg</file>
|
<file>tags/dwine2-small.png</file>
|
||||||
<file>icon/dark/leftbutton_9.svg</file>
|
<file>tags/dwine5-small.png</file>
|
||||||
<file>icon/dark/leftbutton_10.svg</file>
|
<file>tags/dwine5.svg</file>
|
||||||
<file>icon/dark/leftbutton_11.svg</file>
|
<file>tags/logo_icon.svg</file>
|
||||||
<file>icon/dark/leftbutton_12.svg</file>
|
<file>tags/ubuntu-small.png</file>
|
||||||
<file>icon/dark/text.svg</file>
|
<file>tags/ubuntu.png</file>
|
||||||
<file>icon/light/update.svg</file>
|
<file>tags/uos-authorize.svg</file>
|
||||||
<file>icon/dark/update.svg</file>
|
<file>tags/uos-small.png</file>
|
||||||
</qresource>
|
<file>tags/uos.svg</file>
|
||||||
</RCC>
|
</qresource>
|
||||||
|
</RCC>
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 11 KiB |
@ -1,9 +1,11 @@
|
|||||||
#include "downloadworker.h"
|
#include "downloadworker.h"
|
||||||
|
|
||||||
#include <QEventLoop>
|
#include <QEventLoop>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QtConcurrent>
|
#include <QtConcurrent>
|
||||||
|
#include <QStandardPaths>
|
||||||
|
|
||||||
DownloadController::DownloadController(QObject *parent)
|
DownloadController::DownloadController(QObject *parent)
|
||||||
{
|
{
|
||||||
@ -48,7 +50,7 @@ bool checkMeatlink(QString metaUrl)
|
|||||||
|
|
||||||
void gennerateDomain(QVector<QString> &domains)
|
void gennerateDomain(QVector<QString> &domains)
|
||||||
{
|
{
|
||||||
QFile serverList(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
|
QFile serverList(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/server.list");
|
||||||
if (serverList.open(QFile::ReadOnly))
|
if (serverList.open(QFile::ReadOnly))
|
||||||
{
|
{
|
||||||
QStringList list = QString(serverList.readAll()).trimmed().split("\n");
|
QStringList list = QString(serverList.readAll()).trimmed().split("\n");
|
||||||
@ -87,14 +89,17 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QtConcurrent::run([=]()
|
QtConcurrent::run([=]()
|
||||||
{
|
{
|
||||||
QString metaUrl = url + ".metalink";
|
QString metaUrl = url + ".metalink";
|
||||||
qDebug() << "metalink" << metaUrl;
|
qDebug() << "metalink" << metaUrl;
|
||||||
bool useMetalink = false;
|
bool useMetalink = false;
|
||||||
if (checkMeatlink(metaUrl)){
|
if (checkMeatlink(metaUrl))
|
||||||
|
{
|
||||||
useMetalink = true;
|
useMetalink = true;
|
||||||
qDebug() << "useMetalink:" << useMetalink;
|
qDebug() << "useMetalink:" << useMetalink;
|
||||||
}else{
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
gennerateDomain(domains);
|
gennerateDomain(domains);
|
||||||
// qDebug() << domains << domains.size();
|
// qDebug() << domains << domains.size();
|
||||||
}
|
}
|
||||||
@ -111,10 +116,12 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
QString aria2ConnectionMax = "--max-concurrent-downloads=16";
|
QString aria2ConnectionMax = "--max-concurrent-downloads=16";
|
||||||
QString aria2DNSCommand = "--async-dns-server=119.29.29.29,223.5.5.5";
|
QString aria2DNSCommand = "--async-dns-server=119.29.29.29,223.5.5.5";
|
||||||
|
|
||||||
if (useMetalink){
|
if (useMetalink)
|
||||||
|
{
|
||||||
command.append(metaUrl.toUtf8());
|
command.append(metaUrl.toUtf8());
|
||||||
}
|
}
|
||||||
else{
|
else
|
||||||
|
{
|
||||||
for (int i = 0; i < domains.size(); i++)
|
for (int i = 0; i < domains.size(); i++)
|
||||||
{
|
{
|
||||||
command.append(replaceDomain(url, domains.at(i)).replace("+","%2B").toUtf8()); //对+进行转译,避免oss出错
|
command.append(replaceDomain(url, domains.at(i)).replace("+","%2B").toUtf8()); //对+进行转译,避免oss出错
|
||||||
@ -133,7 +140,8 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
command.append(aria2ConnectionPerServer.toUtf8());
|
command.append(aria2ConnectionPerServer.toUtf8());
|
||||||
command.append(aria2ConnectionMax.toUtf8());
|
command.append(aria2ConnectionMax.toUtf8());
|
||||||
command.append(aria2DNSCommand.toUtf8());
|
command.append(aria2DNSCommand.toUtf8());
|
||||||
if (useMetalink){
|
if (useMetalink)
|
||||||
|
{
|
||||||
command.append(aria2NoSeeds.toUtf8());
|
command.append(aria2NoSeeds.toUtf8());
|
||||||
}
|
}
|
||||||
qDebug() << command;
|
qDebug() << command;
|
||||||
@ -144,8 +152,7 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
cmd->start();
|
cmd->start();
|
||||||
cmd->waitForStarted(); //等待启动完成
|
cmd->waitForStarted(); //等待启动完成
|
||||||
|
|
||||||
QObject::connect(cmd, &QProcess::readyReadStandardOutput,
|
QObject::connect(cmd, &QProcess::readyReadStandardOutput, [&]()
|
||||||
[&]()
|
|
||||||
{
|
{
|
||||||
//通过读取输出计算下载速度
|
//通过读取输出计算下载速度
|
||||||
QString message = cmd->readAllStandardOutput().data();
|
QString message = cmd->readAllStandardOutput().data();
|
||||||
@ -188,8 +195,7 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
emit downloadProcess(speedInfo, downloadSizeRecord, fileSize);
|
emit downloadProcess(speedInfo, downloadSizeRecord, fileSize);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
QObject::connect(cmd, &QProcess::readyReadStandardError,
|
QObject::connect(cmd, &QProcess::readyReadStandardError, [&]()
|
||||||
[&]()
|
|
||||||
{
|
{
|
||||||
emit errorOccur(cmd->readAllStandardError().data());
|
emit errorOccur(cmd->readAllStandardError().data());
|
||||||
return;
|
return;
|
||||||
@ -209,7 +215,7 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
* HD 70642 is a star with an exoplanetary companion in the southern constellation of Puppis.
|
* HD 70642 is a star with an exoplanetary companion in the southern constellation of Puppis.
|
||||||
*/
|
*/
|
||||||
QProcess mailProcess;
|
QProcess mailProcess;
|
||||||
mailProcess.start(SenderdPath.toUtf8() + " " + metaUrl.toUtf8() + " " + "HD70642");
|
mailProcess.start(SenderdPath.toUtf8(), QStringList() << metaUrl << "HD70642");
|
||||||
mailProcess.waitForStarted();
|
mailProcess.waitForStarted();
|
||||||
mailProcess.waitForFinished(3000);
|
mailProcess.waitForFinished(3000);
|
||||||
mailProcess.deleteLater();
|
mailProcess.deleteLater();
|
||||||
@ -222,15 +228,22 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
*/
|
*/
|
||||||
void DownloadController::stopDownload()
|
void DownloadController::stopDownload()
|
||||||
{
|
{
|
||||||
|
if (pidNumber < 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 实现下载进程退出
|
// 实现下载进程退出
|
||||||
QString killCmd = QString("kill -9 %1").arg(pidNumber);
|
QString killCmd = QString("kill -9 %1").arg(pidNumber);
|
||||||
system(killCmd.toUtf8());
|
system(killCmd.toUtf8());
|
||||||
qDebug() << "kill aria2!";
|
qDebug() << "kill aria2!";
|
||||||
|
pidNumber = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 DownloadController::getFileSize(const QString &url)
|
qint64 DownloadController::getFileSize(const QString &url)
|
||||||
{
|
{
|
||||||
// 已经无需使用 qtnetwork 再获取 filesize,完全交给 aria2 来计算进度。 为保证兼容性,故保留此函数。
|
// 已经无需使用 qtnetwork 再获取 filesize,完全交给 aria2 来计算进度。 为保证兼容性,故保留此函数。
|
||||||
|
qDebug() << "Begin download:" << url;
|
||||||
qint64 fileSize = 10000;
|
qint64 fileSize = 10000;
|
||||||
return fileSize;
|
return fileSize;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,7 +21,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int threadNum;
|
int threadNum;
|
||||||
int pidNumber;
|
int pidNumber = -1;
|
||||||
QString filename;
|
QString filename;
|
||||||
qint64 fileSize;
|
qint64 fileSize;
|
||||||
QVector<QPair<qint64, qint64>> ranges;
|
QVector<QPair<qint64, qint64>> ranges;
|
||||||
|
|||||||
@ -1,39 +1,45 @@
|
|||||||
#include "sparkapi.h"
|
#include "sparkapi.h"
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QStandardPaths>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
QString SparkAPI::serverUrl = "";
|
QString SparkAPI::serverUrl = "";
|
||||||
|
|
||||||
SparkAPI::SparkAPI(QObject *parent) : QObject(parent)
|
SparkAPI::SparkAPI(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
if (!readConfig.value("server/choose").toString().isEmpty() && readConfig.value("server/updated").toString() == "TRUE")
|
if (!config.value("server/choose").toString().isEmpty() && config.value("server/updated").toBool())
|
||||||
{
|
{
|
||||||
SparkAPI::setServerUrl(readConfig.value("server/choose").toString());
|
SparkAPI::setServerUrl(config.value("server/choose").toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparkAPI::get(QUrl url)
|
void SparkAPI::get(QUrl url)
|
||||||
{
|
{
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
HttpRequest *httprequest = new HttpRequest;
|
HttpRequest *httprequest = new HttpRequest;
|
||||||
request.setUrl(QUrl(url.toString().replace("+", "%2B")));
|
request.setUrl(QUrl(url.toString().replace("+", "%2B")));
|
||||||
connect(httprequest, &HttpRequest::finished, [=](QString data)
|
connect(httprequest, &HttpRequest::finished, [=](QString data)
|
||||||
{
|
{
|
||||||
QByteArray arr = data.toUtf8();
|
QByteArray arr = data.toUtf8();
|
||||||
//解析Json
|
// 解析 Json
|
||||||
QJsonParseError error;
|
QJsonParseError error;
|
||||||
if(QJsonDocument::fromJson(arr,&error).isArray())
|
if(QJsonDocument::fromJson(arr,&error).isArray())
|
||||||
{
|
{
|
||||||
auto doc = QJsonDocument::fromJson(arr,&error).array();
|
auto doc = QJsonDocument::fromJson(arr,&error).array();
|
||||||
emit finished(doc);
|
emit finished(doc);
|
||||||
}else {
|
} else {
|
||||||
auto doc = QJsonDocument::fromJson(arr,&error).object();
|
auto doc = QJsonDocument::fromJson(arr,&error).object();
|
||||||
emit finishedObject(doc);
|
emit finishedObject(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
httprequest->deleteLater();
|
||||||
|
});
|
||||||
|
|
||||||
httprequest->deleteLater(); });
|
|
||||||
httprequest->getRequest(request);
|
httprequest->getRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparkAPI::getRAW(QUrl url)
|
void SparkAPI::getRAW(QUrl url)
|
||||||
{
|
{
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
@ -45,30 +51,37 @@ void SparkAPI::getRAW(QUrl url)
|
|||||||
httprequest->deleteLater(); });
|
httprequest->deleteLater(); });
|
||||||
httprequest->getRequest(request);
|
httprequest->getRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparkAPI::getAppList(QString type)
|
void SparkAPI::getAppList(QString type)
|
||||||
{
|
{
|
||||||
get(QUrl(getServerUrl() + "store/" + type + "/applist.json"));
|
get(QUrl(getServerUrl() + "store/" + type + "/applist.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparkAPI::getSearchList(QString keyword)
|
void SparkAPI::getSearchList(QString keyword)
|
||||||
{
|
{
|
||||||
get(QUrl("https://search.deepinos.org.cn/appinfo/search?keyword=" + keyword));
|
get(QUrl("https://search.deepinos.org.cn/appinfo/search?keyword=" + keyword));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparkAPI::getAppInfo(QUrl spk)
|
void SparkAPI::getAppInfo(QUrl spk)
|
||||||
{
|
{
|
||||||
get(QUrl(getServerUrl() + "store" + spk.path().replace("+", "%2B") + "/app.json"));
|
get(QUrl(getServerUrl() + "store" + spk.path().replace("+", "%2B") + "/app.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparkAPI::getAppDownloadTimes(QUrl spk)
|
void SparkAPI::getAppDownloadTimes(QUrl spk)
|
||||||
{
|
{
|
||||||
getRAW(QUrl(getServerUrl() + "store" + spk.path().replace("+", "%2B") + "/download-times.txt"));
|
getRAW(QUrl(getServerUrl() + "store" + spk.path().replace("+", "%2B") + "/download-times.txt"));
|
||||||
}
|
}
|
||||||
|
|
||||||
QString SparkAPI::getServerUrl()
|
QString SparkAPI::getServerUrl()
|
||||||
{
|
{
|
||||||
return SparkAPI::serverUrl;
|
return SparkAPI::serverUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString SparkAPI::getImgServerUrl()
|
QString SparkAPI::getImgServerUrl()
|
||||||
{
|
{
|
||||||
return SparkAPI::serverUrl;
|
return SparkAPI::serverUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparkAPI::setServerUrl(QString url)
|
void SparkAPI::setServerUrl(QString url)
|
||||||
{
|
{
|
||||||
SparkAPI::serverUrl = url;
|
SparkAPI::serverUrl = url;
|
||||||
|
|||||||
@ -1,16 +1,21 @@
|
|||||||
#ifndef SPARKAPI_H
|
#ifndef SPARKAPI_H
|
||||||
#define SPARKAPI_H
|
#define SPARKAPI_H
|
||||||
|
|
||||||
|
#include "utils/httprequest.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QJsonParseError>
|
#include <QJsonParseError>
|
||||||
#include "utils/httprequest.h"
|
|
||||||
#include <QSettings>
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
|
||||||
class SparkAPI : public QObject
|
class SparkAPI : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
explicit SparkAPI(QObject *parent = nullptr);
|
||||||
|
|
||||||
static QString getServerUrl();
|
static QString getServerUrl();
|
||||||
static QString getImgServerUrl();
|
static QString getImgServerUrl();
|
||||||
static void setServerUrl(QString url);
|
static void setServerUrl(QString url);
|
||||||
@ -20,17 +25,14 @@ public:
|
|||||||
void getRAW(QUrl url);
|
void getRAW(QUrl url);
|
||||||
void getAppList(QString type);
|
void getAppList(QString type);
|
||||||
void getAppInfo(QUrl spk);
|
void getAppInfo(QUrl spk);
|
||||||
explicit SparkAPI(QObject *parent = nullptr);
|
|
||||||
|
|
||||||
private:
|
|
||||||
static QString serverUrl;
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void finished(QJsonArray);
|
void finished(QJsonArray);
|
||||||
void finishedRAW(QString);
|
void finishedRAW(QString);
|
||||||
void finishedObject(QJsonObject);
|
void finishedObject(QJsonObject);
|
||||||
|
|
||||||
public slots:
|
private:
|
||||||
|
static QString serverUrl;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SPARKAPI_H
|
#endif // SPARKAPI_H
|
||||||
|
|||||||
167
src/main.cpp
167
src/main.cpp
@ -1,52 +1,58 @@
|
|||||||
|
#include "application.h"
|
||||||
#include "mainwindow-dtk.h"
|
#include "mainwindow-dtk.h"
|
||||||
|
|
||||||
#include <DApplication>
|
|
||||||
#include <DLog>
|
|
||||||
#include <DPlatformWindowHandle>
|
|
||||||
#include <DApplicationSettings>
|
|
||||||
#include <DAboutDialog>
|
|
||||||
#include <QLabel>
|
|
||||||
#include <DWidgetUtil>
|
|
||||||
#include <DSysInfo>
|
#include <DSysInfo>
|
||||||
|
#include <DApplicationSettings>
|
||||||
|
#include <DWidgetUtil>
|
||||||
|
|
||||||
|
#include <QStandardPaths>
|
||||||
|
|
||||||
DCORE_USE_NAMESPACE
|
DCORE_USE_NAMESPACE
|
||||||
DWIDGET_USE_NAMESPACE
|
DWIDGET_USE_NAMESPACE
|
||||||
|
|
||||||
|
#define UOSCheckFile "/var/lib/deepin/developer-mode/enabled"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
// Get build time
|
// Get build time
|
||||||
static const QString version = "Version 4.1.2";
|
static const QString version = "4.1.2";
|
||||||
static const QDate buildDate = QLocale(QLocale::English).toDate(QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy");
|
static const QDate buildDate = QLocale(QLocale::English).toDate(QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy");
|
||||||
static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss");
|
static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss");
|
||||||
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
|
static const QString buildDateTime = buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString("hh:mm:ss");
|
||||||
QSettings *setConfig = new QSettings(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
|
|
||||||
|
|
||||||
// 设置桌面环境环境变量
|
// 设置桌面环境环境变量
|
||||||
bool isDeepinOS = true;
|
bool isDeepinOS = true;
|
||||||
if (!QString(qgetenv("XDG_CURRENT_DESKTOP")).toLower().startsWith("deepin"))
|
if (!QString(qgetenv("XDG_CURRENT_DESKTOP")).toLower().startsWith("deepin"))
|
||||||
{
|
{
|
||||||
setenv("XDG_CURRENT_DESKTOP", "Deepin", 1);
|
qputenv("XDG_CURRENT_DESKTOP", "Deepin");
|
||||||
isDeepinOS = false;
|
isDeepinOS = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isWayland = false;
|
bool isWayland = false;
|
||||||
auto e = QProcessEnvironment::systemEnvironment();
|
auto e = QProcessEnvironment::systemEnvironment();
|
||||||
QString XDG_SESSION_TYPE = e.value(QStringLiteral("XDG_SESSION_TYPE"));
|
QString XDG_SESSION_TYPE = e.value(QStringLiteral("XDG_SESSION_TYPE"));
|
||||||
QString WAYLAND_DISPLAY = e.value(QStringLiteral("WAYLAND_DISPLAY"));
|
QString WAYLAND_DISPLAY = e.value(QStringLiteral("WAYLAND_DISPLAY"));
|
||||||
|
|
||||||
if (XDG_SESSION_TYPE == QLatin1String("wayland") || WAYLAND_DISPLAY.contains(QLatin1String("wayland"), Qt::CaseInsensitive))
|
if (XDG_SESSION_TYPE == QLatin1String("wayland") || WAYLAND_DISPLAY.contains(QLatin1String("wayland"), Qt::CaseInsensitive))
|
||||||
{
|
{
|
||||||
isWayland = true;
|
isWayland = true;
|
||||||
}
|
}
|
||||||
setConfig->setValue("build/isWayland", isWayland);
|
|
||||||
setConfig->setValue("build/isDeepinOS", isDeepinOS);
|
|
||||||
|
|
||||||
|
// NOTE: 提前设置组织名称和应用名称,避免配置文件位置错误
|
||||||
|
DApplication::setOrganizationName("spark-union");
|
||||||
|
DApplication::setApplicationName("spark-store");
|
||||||
|
Application::checkAppConfigLocation(); // 检查 ~/.config/spark-union/spark-store 文件夹是否存在
|
||||||
|
|
||||||
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
|
config.setValue("build/isWayland", isWayland);
|
||||||
|
config.setValue("build/isDeepinOS", isDeepinOS);
|
||||||
// Check config file, if there is no wayland config, then set it to default, which means use wayland if possible.
|
// Check config file, if there is no wayland config, then set it to default, which means use wayland if possible.
|
||||||
if (!readConfig.contains("build/useWayland"))
|
if (!config.contains("build/useWayland"))
|
||||||
{
|
{
|
||||||
setConfig->setValue("build/useWayland", true);
|
config.setValue("build/useWayland", true);
|
||||||
}
|
}
|
||||||
|
config.sync(); // 写入更改至 config.ini,并同步最新内容
|
||||||
|
|
||||||
bool useWayland = readConfig.value("build/useWayland").toBool();
|
bool useWayland = config.value("build/useWayland").toBool();
|
||||||
qDebug() << "System Wayland enabled:" << isWayland << ". Spark Wayland enabled:" << useWayland;
|
qDebug() << "System Wayland enabled:" << isWayland << ". Spark Wayland enabled:" << useWayland;
|
||||||
|
|
||||||
// Set display backend
|
// Set display backend
|
||||||
@ -62,107 +68,78 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
qputenv("QT_QPA_PLATFORM", "dxcb");
|
qputenv("QT_QPA_PLATFORM", "dxcb");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check UOS developer mode.
|
||||||
|
QFile UOSDevelopFile(UOSCheckFile);
|
||||||
|
if (isDeepinOS && UOSDevelopFile.exists() && UOSDevelopFile.open(QFile::ReadOnly | QFile::Text))
|
||||||
|
{
|
||||||
|
config.setValue("UOS/isUOS", true);
|
||||||
|
QString lineData = UOSDevelopFile.readLine();
|
||||||
|
bool devmode = lineData.trimmed().toInt();
|
||||||
|
qDebug() << "UOS Developer Mode Status:" << devmode;
|
||||||
|
config.setValue("UOS/EnableDeveloperMode", devmode);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (config.contains("UOS/isUOS"))
|
||||||
|
{
|
||||||
|
config.remove("UOS/isUOS");
|
||||||
|
config.remove("UOS/EnableDeveloperMode");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UOSDevelopFile.close();
|
||||||
|
config.sync(); // 写入更改至 config.ini,并同步最新内容
|
||||||
|
|
||||||
|
// 龙芯机器配置,使得 DApplication 能正确加载 QTWEBENGINE
|
||||||
|
qputenv("DTK_FORCE_RASTER_WIDGETS", "FALSE");
|
||||||
|
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-features=UseModernMediaControls");
|
||||||
|
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
|
||||||
|
// 浏览器开启 GPU 支持
|
||||||
|
#ifdef __sw_64__
|
||||||
|
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode --no-sandbox");
|
||||||
|
#else
|
||||||
|
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode");
|
||||||
|
#endif
|
||||||
|
|
||||||
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持
|
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持
|
||||||
|
|
||||||
// 浏览器开启 GPU 支持
|
// 强制使用 DTK 平台插件
|
||||||
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode");
|
|
||||||
|
|
||||||
QVector<char *> fakeArgs(argc + 2);
|
QVector<char *> fakeArgs(argc + 2);
|
||||||
fakeArgs[0] = argv[0];
|
fakeArgs[0] = argv[0];
|
||||||
QString fakeArgs1 = "-platformtheme";
|
fakeArgs[1] = const_cast<char *>("-platformtheme");
|
||||||
QByteArray fakeArgsTemp = fakeArgs1.toLatin1(); // must
|
fakeArgs[2] = const_cast<char *>("deepin");
|
||||||
fakeArgs[1] = fakeArgsTemp.data();
|
|
||||||
fakeArgs1 = "deepin";
|
|
||||||
fakeArgsTemp = fakeArgs1.toLatin1(); // must
|
|
||||||
fakeArgs[2] = fakeArgsTemp.data();
|
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++)
|
for (int i = 1; i < argc; i++)
|
||||||
|
{
|
||||||
fakeArgs[i + 2] = argv[i];
|
fakeArgs[i + 2] = argv[i];
|
||||||
int fakeArgc = argc + 2; // DApplication的argc要用引用,避免c++编译器优化
|
|
||||||
DApplication a(fakeArgc, fakeArgs.data());
|
|
||||||
|
|
||||||
// 初始化日志模块 (默认日志位置 ~/.cache/deepin/spark-store)
|
|
||||||
DLogManager::registerConsoleAppender();
|
|
||||||
DLogManager::registerFileAppender();
|
|
||||||
|
|
||||||
// Wayland 环境下使用,防止子控件 Native 化
|
|
||||||
if (!DPlatformWindowHandle::pluginVersion().isEmpty())
|
|
||||||
{
|
|
||||||
a.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
|
|
||||||
}
|
}
|
||||||
a.setAttribute(Qt::AA_UseHighDpiPixmaps);
|
int fakeArgc = argc + 2; // QCoreApplication 的 argc 要用引用,避免 c++ 编译器优化
|
||||||
a.setApplicationDisplayName("Spark Store");
|
Application a(fakeArgc, fakeArgs.data());
|
||||||
|
// 设置版本和构建时间
|
||||||
|
a.setVersionAndBuildDateTime(version, buildDateTime);
|
||||||
|
|
||||||
a.loadTranslator(); // 载入翻译
|
|
||||||
|
|
||||||
if (readConfig.value("build/version").toString() != version)
|
|
||||||
{
|
|
||||||
qDebug() << "Spark Store has been updated!";
|
|
||||||
setConfig->setValue("build/version", version);
|
|
||||||
setConfig->setValue("build/time", buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString());
|
|
||||||
}
|
|
||||||
setConfig->deleteLater();
|
|
||||||
|
|
||||||
// Customized DAboutDialog
|
|
||||||
|
|
||||||
DAboutDialog dialog;
|
|
||||||
a.setAboutDialog(&dialog);
|
|
||||||
dialog.setLicense(QObject::tr("We publish this program under GPL V3"));
|
|
||||||
dialog.setVersion(DApplication::buildVersion(readConfig.value("build/version").toString() + "-" + "Flamescion" + "-" + readConfig.value("build/time").toString()));
|
|
||||||
dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo
|
|
||||||
dialog.setProductName(QLabel::tr("Spark Store"));
|
|
||||||
dialog.setDescription(
|
|
||||||
QObject::tr(
|
|
||||||
"<span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/>"
|
|
||||||
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
|
|
||||||
"<span style=' font-size:12pt;'>Spark developers</span>"));
|
|
||||||
|
|
||||||
dialog.setProductName(QLabel::tr("Spark Store"));
|
|
||||||
dialog.setCompanyLogo(QPixmap(":/spark-store.png"));
|
|
||||||
dialog.setWebsiteName(QObject::tr("The Spark Project"));
|
|
||||||
dialog.setWebsiteLink("https://gitee.com/deepin-community-store");
|
|
||||||
|
|
||||||
a.setOrganizationName("spark-union");
|
|
||||||
a.setProductName(QObject::tr("Spark Store"));
|
|
||||||
a.setApplicationName("Spark Store"); // 不用翻译,影响 ~/.local/share/spark-union 下文件夹名称
|
|
||||||
a.setApplicationDisplayName(QObject::tr("Spark Store")); // 设置窗口显示标题 (Wayland 下会显示 Qt 原生标题栏)
|
|
||||||
a.setWindowIcon(QIcon::fromTheme("spark-store"));
|
|
||||||
a.setApplicationDescription(
|
|
||||||
QObject::tr(
|
|
||||||
"<span style='font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/>"
|
|
||||||
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
|
|
||||||
"<span style='font-size:12pt;'>Spark developers</span><br/><br/>"
|
|
||||||
"Published under GPL V3"));
|
|
||||||
// 限制单实例运行
|
// 限制单实例运行
|
||||||
if (!a.setSingleInstance("spark-store"))
|
if (!a.setSingleInstance("spark-store"))
|
||||||
{
|
{
|
||||||
qDebug() << "The application is already running!";
|
qWarning() << "Another instance has already started, activating...";
|
||||||
QDBusInterface iface("com.gitee.spark.store",
|
|
||||||
"/com/gitee/spark/store",
|
|
||||||
"com.gitee.spark.store",
|
|
||||||
QDBusConnection::sessionBus());
|
|
||||||
|
|
||||||
QString arg1 = argv[1];
|
|
||||||
|
|
||||||
iface.asyncCall("activeWindow", arg1);
|
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::LightType); // 固定主题为浅色主题
|
DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::LightType); // 固定主题为浅色主题
|
||||||
DApplicationSettings settings; // 定义 DApplicationSettings,自动保存主题设置
|
DApplicationSettings settings; // 定义 DApplicationSettings,自动保存主题设置
|
||||||
|
|
||||||
MainWindow w;
|
MainWindow w;
|
||||||
// 让打开时界面显示在正中
|
// 让打开时界面显示在正中
|
||||||
Dtk::Widget::moveToCenter(&w);
|
Dtk::Widget::moveToCenter(&w);
|
||||||
|
|
||||||
QString arg1 = argv[1];
|
if (argc > 1)
|
||||||
if (arg1.startsWith("spk://"))
|
|
||||||
{
|
{
|
||||||
w.openUrl(QUrl(argv[1]));
|
QString arg1 = argv[1];
|
||||||
|
if (arg1.trimmed().startsWith("spk://"))
|
||||||
|
{
|
||||||
|
w.openUrl(QUrl(argv[1]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
w.show();
|
w.show();
|
||||||
w.setWindowTitle("Spark Store");
|
|
||||||
|
|
||||||
return a.exec();
|
return a.exec();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,16 +13,24 @@
|
|||||||
#define WaylandSearchCenter 1
|
#define WaylandSearchCenter 1
|
||||||
#define OtherSearchCenter 2
|
#define OtherSearchCenter 2
|
||||||
#define RightSearchSpace 1
|
#define RightSearchSpace 1
|
||||||
|
#define UploadServerUrl "https://upload.deepinos.org/"
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
: BaseWidgetOpacity(parent), ui(new Ui::MainWindow)
|
: BaseWidgetOpacity(parent), ui(new Ui::MainWindow)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
setWindowTitle(QObject::tr("Spark Store"));
|
||||||
initConfig();
|
initConfig();
|
||||||
moveToCenter(this); // 让窗口居中显示
|
|
||||||
|
|
||||||
WidgetAnimation::widgetOpacity(this, true);
|
// FIXME: wayland 不支持直接设置窗口透明度,需要调用 wayland 相关库(考虑抄控制中心“窗口移动时启用透明特效”代码?)
|
||||||
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
|
bool isWayland = config.value("build/isWayland").toBool();
|
||||||
|
if (!isWayland)
|
||||||
|
{
|
||||||
|
WidgetAnimation::widgetOpacity(this, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
searchEdit = new DSearchEdit(ui->titlebar);
|
||||||
downloadlistwidget = new DownloadListWidget;
|
downloadlistwidget = new DownloadListWidget;
|
||||||
downloadButton = new ProgressButton(ui->titlebar);
|
downloadButton = new ProgressButton(ui->titlebar);
|
||||||
backButtom = new QPushButton(ui->titlebar);
|
backButtom = new QPushButton(ui->titlebar);
|
||||||
@ -46,13 +54,13 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
|
|
||||||
ui->titlebar->setMenu(menu);
|
ui->titlebar->setMenu(menu);
|
||||||
connect(actionSubmission, &QAction::triggered, this, [=]
|
connect(actionSubmission, &QAction::triggered, this, [=]
|
||||||
{ QDesktopServices::openUrl(QUrl("https://upload.deepinos.org/")); });
|
{ QDesktopServices::openUrl(QUrl(UploadServerUrl)); });
|
||||||
connect(setting, &QAction::triggered, this, [=]
|
connect(setting, &QAction::triggered, this, [=]
|
||||||
{
|
{
|
||||||
switchPage(AppPageSettings);
|
switchPage(AppPageSettings);
|
||||||
ui->settingspage->updateUI(); });
|
ui->settingspage->updateUI(); });
|
||||||
connect(upgrade, &QAction::triggered, this, [=]
|
connect(upgrade, &QAction::triggered, this, [=]
|
||||||
{ QProcess::startDetached("/opt/durapps/spark-store/bin/update-upgrade/ss-update-controler.sh"); });
|
{ QProcess::startDetached("/opt/durapps/spark-store/bin/update-upgrade/ss-update-controler.sh", QStringList()); });
|
||||||
// 投稿器
|
// 投稿器
|
||||||
connect(actionSubmissionWithClient, &QAction::triggered, this, [=]
|
connect(actionSubmissionWithClient, &QAction::triggered, this, [=]
|
||||||
{
|
{
|
||||||
@ -61,7 +69,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
if (actionSubmissionClientStatus.exists())
|
if (actionSubmissionClientStatus.exists())
|
||||||
{
|
{
|
||||||
qDebug() << "投稿器存在";
|
qDebug() << "投稿器存在";
|
||||||
QProcess::startDetached("/opt/spark-store-submitter/bin/spark-store-submitter");
|
QProcess::startDetached("/opt/spark-store-submitter/bin/spark-store-submitter", QStringList());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -75,9 +83,6 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
if (themeType == DGuiApplicationHelper::DarkType) {
|
if (themeType == DGuiApplicationHelper::DarkType) {
|
||||||
//深色模式
|
//深色模式
|
||||||
setMaskColor(QColor("#2a2b2b"));
|
setMaskColor(QColor("#2a2b2b"));
|
||||||
this->setStyleSheet("#mainpage{background-color: transparent;border-radius:14px;}\
|
|
||||||
QLabel#cardtitle,QLabel#title,QLabel#title_1,QLabel#title_2,QLabel#title_3 {color:#FFFFFF}\
|
|
||||||
");
|
|
||||||
backButtom->setIcon(QIcon(":/icon/dark/back.svg"));
|
backButtom->setIcon(QIcon(":/icon/dark/back.svg"));
|
||||||
downloadButton->setIcon(":/icon/dark/download.svg");
|
downloadButton->setIcon(":/icon/dark/download.svg");
|
||||||
downloadButton->setBackgroundColor(QColor("#444444"));
|
downloadButton->setBackgroundColor(QColor("#444444"));
|
||||||
@ -98,9 +103,6 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
} else {
|
} else {
|
||||||
//亮色模式
|
//亮色模式
|
||||||
setMaskColor(QColor("#f3f7f8"));
|
setMaskColor(QColor("#f3f7f8"));
|
||||||
this->setStyleSheet("#mainpage{background-color: transparent;border-radius:14px;}\
|
|
||||||
QLabel#cardtitle,QLabel#title,QLabel#title_1,QLabel#title_2,QLabel#title_3 {color:#000000}\
|
|
||||||
");
|
|
||||||
backButtom->setIcon(QIcon(":/icon/light/back.svg"));
|
backButtom->setIcon(QIcon(":/icon/light/back.svg"));
|
||||||
downloadButton->setBackgroundColor(QColor("#e3e4e4"));
|
downloadButton->setBackgroundColor(QColor("#e3e4e4"));
|
||||||
downloadButton->setColor(QColor("#66CCFF"));
|
downloadButton->setColor(QColor("#66CCFF"));
|
||||||
@ -153,18 +155,17 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
backButtom->hide();
|
backButtom->hide();
|
||||||
ui->titlebar->setIcon(QIcon::fromTheme(":/icon/logo.svg"));
|
ui->titlebar->setIcon(QIcon::fromTheme(":/icon/logo.svg"));
|
||||||
|
|
||||||
// Check wayland configs
|
|
||||||
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
|
|
||||||
|
|
||||||
QWidget *w_titlebar = new QWidget(ui->titlebar);
|
QWidget *w_titlebar = new QWidget(ui->titlebar);
|
||||||
QHBoxLayout *ly_titlebar = new QHBoxLayout(w_titlebar);
|
QHBoxLayout *ly_titlebar = new QHBoxLayout(w_titlebar);
|
||||||
QLabel *title = new QLabel(this);
|
QLabel *title = new QLabel(ui->titlebar);
|
||||||
title->setText(tr("Spark Store"));
|
title->setText(tr("Spark Store"));
|
||||||
searchEdit->setPlaceholderText(tr("Search or enter spk://"));
|
searchEdit->setPlaceholderText(tr("Search or enter spk://"));
|
||||||
ly_titlebar->addWidget(title);
|
ly_titlebar->addWidget(title);
|
||||||
ly_titlebar->addWidget(backButtom);
|
ly_titlebar->addWidget(backButtom);
|
||||||
|
|
||||||
if (!readConfig.value("build/isDeepinOS").toBool() && readConfig.value("build/useWayland").toBool())
|
// Check wayland configs
|
||||||
|
// QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
|
if (!config.value("build/isDeepinOS").toBool() && config.value("build/useWayland").toBool())
|
||||||
{
|
{
|
||||||
// Wayland 搜索栏居中
|
// Wayland 搜索栏居中
|
||||||
ly_titlebar->addStretch(WaylandSearchCenter);
|
ly_titlebar->addStretch(WaylandSearchCenter);
|
||||||
@ -219,14 +220,17 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
{ openUrl(spk); });
|
{ openUrl(spk); });
|
||||||
emit DGuiApplicationHelper::instance()->themeTypeChanged(DGuiApplicationHelper::instance()->themeType());
|
emit DGuiApplicationHelper::instance()->themeTypeChanged(DGuiApplicationHelper::instance()->themeType());
|
||||||
|
|
||||||
initDbus();
|
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::newProcessInstance, this, &MainWindow::onNewProcessInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
{
|
{
|
||||||
delete searchEdit;
|
|
||||||
delete downloadlistwidget;
|
|
||||||
delete ui;
|
delete ui;
|
||||||
|
|
||||||
|
if (downloadlistwidget)
|
||||||
|
{
|
||||||
|
downloadlistwidget->deleteLater();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::initDbus()
|
void MainWindow::initDbus()
|
||||||
@ -240,13 +244,23 @@ void MainWindow::initDbus()
|
|||||||
|
|
||||||
void MainWindow::onGetUrl(const QString &url)
|
void MainWindow::onGetUrl(const QString &url)
|
||||||
{
|
{
|
||||||
if (url.left(6) == "spk://")
|
if (url.trimmed().startsWith("spk://"))
|
||||||
{
|
{
|
||||||
openUrl(QUrl(url));
|
openUrl(QUrl(url));
|
||||||
}
|
}
|
||||||
activateWindow();
|
activateWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::onNewProcessInstance(qint64 pid, const QStringList &arguments)
|
||||||
|
{
|
||||||
|
Q_UNUSED(pid)
|
||||||
|
|
||||||
|
if (arguments.size() > 1)
|
||||||
|
{
|
||||||
|
onGetUrl(arguments.value(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::openUrl(QUrl url)
|
void MainWindow::openUrl(QUrl url)
|
||||||
{
|
{
|
||||||
if (url.toString().startsWith("spk://"))
|
if (url.toString().startsWith("spk://"))
|
||||||
@ -279,6 +293,7 @@ void MainWindow::switchPage(int now) // 临时方案,回家后修改
|
|||||||
backButtom->hide();
|
backButtom->hide();
|
||||||
}
|
}
|
||||||
ui->stackedWidget->setCurrentIndex(now);
|
ui->stackedWidget->setCurrentIndex(now);
|
||||||
|
ui->stackedWidget->currentWidget()->setFocus();
|
||||||
pageHistory << now;
|
pageHistory << now;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,15 +322,36 @@ void MainWindow::updateUi(int now)
|
|||||||
|
|
||||||
void MainWindow::on_pushButton_14_clicked()
|
void MainWindow::on_pushButton_14_clicked()
|
||||||
{
|
{
|
||||||
QFile upgradeStatus("/tmp/spark-store/upgradeStatus.txt");
|
// Check UOS
|
||||||
if (!upgradeStatus.exists())
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
|
if (config.contains("UOS/EnableDeveloperMode") && !config.value("UOS/EnableDeveloperMode").toBool())
|
||||||
{
|
{
|
||||||
|
qDebug() << "UOS Developer Mode has not been enabled!";
|
||||||
QtConcurrent::run([=]
|
QtConcurrent::run([=]
|
||||||
{
|
{
|
||||||
auto upgradeP = new QProcess();
|
auto upgradeP = new QProcess();
|
||||||
upgradeP->startDetached("/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh");
|
upgradeP->startDetached("zenity", QStringList() << "--info"
|
||||||
|
<< "--text"
|
||||||
|
<< "UOS开发者模式未开启,相关功能被禁用"
|
||||||
|
<< "--title"
|
||||||
|
<< "功能禁用提示"
|
||||||
|
);
|
||||||
|
upgradeP->waitForStarted();
|
||||||
|
upgradeP->waitForFinished(30);
|
||||||
|
upgradeP->deleteLater(); });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QFile upgradeStatus("/tmp/spark-store/upgradeStatus.txt");
|
||||||
|
if (!upgradeStatus.exists())
|
||||||
|
{
|
||||||
|
QtConcurrent::run([=]
|
||||||
|
{
|
||||||
|
auto upgradeP = new QProcess();
|
||||||
|
upgradeP->startDetached("/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh", QStringList());
|
||||||
upgradeP->waitForStarted();
|
upgradeP->waitForStarted();
|
||||||
upgradeP->waitForFinished(-1);
|
upgradeP->waitForFinished(-1);
|
||||||
upgradeP->deleteLater(); });
|
upgradeP->deleteLater(); });
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,20 +39,20 @@ private:
|
|||||||
void switchPage(int now);
|
void switchPage(int now);
|
||||||
void updateUi(int now);
|
void updateUi(int now);
|
||||||
|
|
||||||
private:
|
|
||||||
QList<int> pageHistory;
|
|
||||||
|
|
||||||
DownloadListWidget *downloadlistwidget;
|
|
||||||
ProgressButton *downloadButton;
|
|
||||||
QPushButton *backButtom;
|
|
||||||
DSearchEdit *searchEdit = new DSearchEdit;
|
|
||||||
Ui::MainWindow *ui;
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
//接受来自dbus的url
|
//接受来自dbus的url
|
||||||
void onGetUrl(const QString &url);
|
void onGetUrl(const QString &url);
|
||||||
|
void onNewProcessInstance(qint64 pid, const QStringList &arguments);
|
||||||
void on_pushButton_14_clicked();
|
void on_pushButton_14_clicked();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QList<int> pageHistory;
|
||||||
|
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
DownloadListWidget *downloadlistwidget;
|
||||||
|
ProgressButton *downloadButton;
|
||||||
|
QPushButton *backButtom;
|
||||||
|
DSearchEdit *searchEdit;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOWDTK_H
|
#endif // MAINWINDOWDTK_H
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1190</width>
|
<width>1190</width>
|
||||||
<height>651</height>
|
<height>656</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -34,6 +34,12 @@
|
|||||||
<property name="autoFillBackground">
|
<property name="autoFillBackground">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">.QWidget#mainpage {
|
||||||
|
background: transparent;
|
||||||
|
border-radius: 14px;
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
|
|||||||
@ -32,7 +32,7 @@ void AppIntoPage::clear()
|
|||||||
ui->author->clear();
|
ui->author->clear();
|
||||||
ui->label_2->clear();
|
ui->label_2->clear();
|
||||||
ui->downloadButton->hide();
|
ui->downloadButton->hide();
|
||||||
ui->downloadButton->setEnabled(true);
|
ui->downloadButton->setEnabled(false);
|
||||||
ui->pushButton_3->hide();
|
ui->pushButton_3->hide();
|
||||||
int n = ui->listWidget->count();
|
int n = ui->listWidget->count();
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
@ -63,9 +63,8 @@ void AppIntoPage::openUrl(QUrl url)
|
|||||||
info = appinfo;
|
info = appinfo;
|
||||||
// qDebug()<<url;
|
// qDebug()<<url;
|
||||||
//获取图标
|
//获取图标
|
||||||
QNetworkAccessManager *naManager;
|
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
naManager=new QNetworkAccessManager(this);
|
QNetworkAccessManager *naManager = new QNetworkAccessManager(this);
|
||||||
qDebug()<<api->getImgServerUrl()+"store"+url.path().replace("+","%2B") + "/icon.png";
|
qDebug()<<api->getImgServerUrl()+"store"+url.path().replace("+","%2B") + "/icon.png";
|
||||||
request.setUrl(QUrl(api->getImgServerUrl()+"store"+url.path().replace("+","%2B") + "/icon.png"));
|
request.setUrl(QUrl(api->getImgServerUrl()+"store"+url.path().replace("+","%2B") + "/icon.png"));
|
||||||
request.setRawHeader("User-Agent", "Mozilla/5.0");
|
request.setRawHeader("User-Agent", "Mozilla/5.0");
|
||||||
@ -89,89 +88,105 @@ void AppIntoPage::openUrl(QUrl url)
|
|||||||
ui->d_contributor->setText(info["Contributor"].toString());
|
ui->d_contributor->setText(info["Contributor"].toString());
|
||||||
ui->label_2->setText(info["More"].toString());
|
ui->label_2->setText(info["More"].toString());
|
||||||
|
|
||||||
QProcess isInstall;
|
|
||||||
bool isInstalled;
|
// Check UOS
|
||||||
bool isUpdated;
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
QString packagename = info["Pkgname"].toString();
|
if (config.contains("UOS/EnableDeveloperMode") && !config.value("UOS/EnableDeveloperMode").toBool()){
|
||||||
isInstall.start("dpkg -s " + info["Pkgname"].toString());
|
qDebug() << "UOS Developer Mode has not been enabled!";
|
||||||
qDebug()<<info["Pkgname"].toString();
|
ui->downloadButton->setText(tr("Developer Mode Disabled"));
|
||||||
isInstall.waitForFinished(180*1000); // 默认超时 3 分钟
|
ui->downloadButton->setEnabled(false);
|
||||||
int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
|
ui->downloadButton->show();
|
||||||
if(error == 0)
|
}
|
||||||
|
else // 非 UOS 或 UOS 已经开启开发者模式
|
||||||
{
|
{
|
||||||
isInstalled = true;
|
QProcess isInstall;
|
||||||
|
bool isInstalled;
|
||||||
|
bool isUpdated;
|
||||||
|
QString packagename = info["Pkgname"].toString();
|
||||||
|
isInstall.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString());
|
||||||
|
qDebug() << info["Pkgname"].toString();
|
||||||
|
isInstall.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||||
|
int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
|
||||||
|
if (error == 0)
|
||||||
|
{
|
||||||
|
isInstalled = true;
|
||||||
|
|
||||||
QProcess isUpdate;
|
QProcess isUpdate;
|
||||||
isUpdate.start("dpkg-query --showformat='${Version}' --show " + info["Pkgname"].toString());
|
isUpdate.start("dpkg-query", QStringList() << "--showformat='${Version}'"
|
||||||
isUpdate.waitForFinished(180*1000); // 默认超时 3 分钟
|
<< "--show" << info["Pkgname"].toString());
|
||||||
QString localVersion = isUpdate.readAllStandardOutput();
|
isUpdate.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||||
localVersion.replace("'", "");
|
QString localVersion = isUpdate.readAllStandardOutput();
|
||||||
|
localVersion.replace("'", "");
|
||||||
|
|
||||||
isUpdate.start("dpkg --compare-versions " + localVersion + " ge " + info["Version"].toString());
|
isUpdate.start("dpkg", QStringList() << "--compare-versions" << localVersion << "ge" << info["Version"].toString());
|
||||||
isUpdate.waitForFinished(180*1000); // 默认超时 3 分钟
|
isUpdate.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||||
if(!isUpdate.exitCode())
|
if (!isUpdate.exitCode())
|
||||||
|
{
|
||||||
|
isUpdated = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isUpdated = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isInstalled = false;
|
||||||
|
isUpdated = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject::connect(naManager, &QNetworkAccessManager::finished, [=]()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (isInstalled)
|
||||||
|
{
|
||||||
|
if (isUpdated)
|
||||||
{
|
{
|
||||||
isUpdated = true;
|
ui->downloadButton->setText(tr("Reinstall"));
|
||||||
|
ui->downloadButton->setEnabled(true);
|
||||||
|
ui->downloadButton->show();
|
||||||
|
ui->pushButton_3->show();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
isUpdated = false;
|
ui->downloadButton->setText(tr("Upgrade"));
|
||||||
|
ui->downloadButton->setEnabled(true);
|
||||||
|
ui->downloadButton->show();
|
||||||
|
ui->pushButton_3->show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
isInstalled = false;
|
ui->downloadButton->setText(tr("Download"));
|
||||||
isUpdated = false;
|
ui->downloadButton->setEnabled(true);
|
||||||
}
|
isDownloading(SparkAPI::getServerUrl() + "store" + spk.path() + "/" + info["Filename"].toString());
|
||||||
|
ui->downloadButton->show();
|
||||||
if(isInstalled)
|
} });
|
||||||
{
|
|
||||||
if(isUpdated)
|
|
||||||
{
|
|
||||||
ui->downloadButton->setText(tr("Reinstall"));
|
|
||||||
ui->downloadButton->setEnabled(true);
|
|
||||||
ui->downloadButton->show();
|
|
||||||
ui->pushButton_3->show();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ui->downloadButton->setText(tr("Upgrade"));
|
|
||||||
ui->downloadButton->setEnabled(true);
|
|
||||||
ui->downloadButton->show();
|
|
||||||
ui->pushButton_3->show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ui->downloadButton->setText(tr("Download"));
|
|
||||||
isDownloading(SparkAPI::getServerUrl()+"store"+spk.path()+"/"+info["Filename"].toString());
|
|
||||||
ui->downloadButton->setEnabled(true);
|
|
||||||
ui->downloadButton->show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList taglist = info["Tags"].toString().split(";");
|
QStringList taglist = info["Tags"].toString().split(";");
|
||||||
QString tmp=info["img_urls"].toString();
|
QString tmp=info["img_urls"].toString();
|
||||||
qDebug()<<tmp;
|
qDebug() << tmp;
|
||||||
if(tmp.left(2)=="[\"")
|
if (tmp.left(2) == "[\"")
|
||||||
{
|
{
|
||||||
tmp.remove(0,2);
|
tmp.remove(0, 2);
|
||||||
}
|
}
|
||||||
if(tmp.right(2)=="\"]")
|
if (tmp.right(2) == "\"]")
|
||||||
{
|
{
|
||||||
tmp.remove(tmp.size()-2,tmp.size());
|
tmp.remove(tmp.size() - 2, tmp.size());
|
||||||
}
|
}
|
||||||
QStringList imglist = tmp.split("\",\"");
|
QStringList imglist = tmp.split("\",\"");
|
||||||
qDebug()<<imglist;
|
qDebug() << imglist;
|
||||||
for(int i=0;i < imglist.size();i++)
|
for (int i = 0; i < imglist.size(); i++)
|
||||||
{
|
{
|
||||||
QNetworkAccessManager *naManager;
|
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
naManager=new QNetworkAccessManager(this);
|
QNetworkAccessManager *iconNaManager = new QNetworkAccessManager(this);
|
||||||
request.setUrl(QUrl(imglist[i].replace("+","%2B")));
|
request.setUrl(QUrl(imglist[i].replace("+", "%2B")));
|
||||||
request.setRawHeader("User-Agent", "Mozilla/5.0");
|
request.setRawHeader("User-Agent", "Mozilla/5.0");
|
||||||
request.setRawHeader("Content-Type", "charset='utf-8'");
|
request.setRawHeader("Content-Type", "charset='utf-8'");
|
||||||
naManager->get(request);
|
iconNaManager->get(request);
|
||||||
QObject::connect(naManager,&QNetworkAccessManager::finished,[=](QNetworkReply *reply){
|
QObject::connect(iconNaManager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply)
|
||||||
|
{
|
||||||
QByteArray jpegData = reply->readAll();
|
QByteArray jpegData = reply->readAll();
|
||||||
QPixmap pixmap;
|
QPixmap pixmap;
|
||||||
pixmap.loadFromData(jpegData);
|
pixmap.loadFromData(jpegData);
|
||||||
@ -272,7 +287,8 @@ void AppIntoPage::setTheme(bool dark)
|
|||||||
{
|
{
|
||||||
if (dark)
|
if (dark)
|
||||||
{
|
{
|
||||||
QString frameStyleSheet = "#frame,#frame_2,#frame_3,#frame_4{background-color: #252525;border-radius:14px;border:1px solid rgb(64, 64, 64);}";
|
QString frameStyleSheet ="#frame,#frame_2,#frame_3,#frame_4 {background-color: #252525; border-radius: 14px; border: 1px solid rgb(64, 64, 64);}\
|
||||||
|
QLabel#cardtitle,QLabel#title,QLabel#title_1,QLabel#title_2,QLabel#title_3 {color: #FFFFFF}";
|
||||||
ui->frame->setStyleSheet(frameStyleSheet);
|
ui->frame->setStyleSheet(frameStyleSheet);
|
||||||
ui->frame_2->setStyleSheet(frameStyleSheet);
|
ui->frame_2->setStyleSheet(frameStyleSheet);
|
||||||
ui->frame_3->setStyleSheet(frameStyleSheet);
|
ui->frame_3->setStyleSheet(frameStyleSheet);
|
||||||
@ -284,11 +300,10 @@ void AppIntoPage::setTheme(bool dark)
|
|||||||
ui->icon_4->setPixmap(QPixmap(":/icon/dark/text.svg"));
|
ui->icon_4->setPixmap(QPixmap(":/icon/dark/text.svg"));
|
||||||
ui->icon_5->setPixmap(QPixmap(":/icon/dark/folder.svg"));
|
ui->icon_5->setPixmap(QPixmap(":/icon/dark/folder.svg"));
|
||||||
ui->icon_6->setPixmap(QPixmap(":/icon/dark/globe.svg"));
|
ui->icon_6->setPixmap(QPixmap(":/icon/dark/globe.svg"));
|
||||||
}
|
}else {
|
||||||
else
|
//亮色模式
|
||||||
{
|
QString frameStyleSheet ="#frame,#frame_2,#frame_3,#frame_4 {background-color: #fbfbfb; border-radius: 14px; border: 1px solid rgb(229,229,229);}\
|
||||||
// 亮色模式
|
QLabel#cardtitle,QLabel#title,QLabel#title_1,QLabel#title_2,QLabel#title_3 {color: #000000}";
|
||||||
QString frameStyleSheet = "#frame,#frame_2,#frame_3,#frame_4{background-color: #fbfbfb;border-radius:14px;border:1px solid rgb(229,229,229);}";
|
|
||||||
ui->frame->setStyleSheet(frameStyleSheet);
|
ui->frame->setStyleSheet(frameStyleSheet);
|
||||||
ui->frame_2->setStyleSheet(frameStyleSheet);
|
ui->frame_2->setStyleSheet(frameStyleSheet);
|
||||||
ui->frame_3->setStyleSheet(frameStyleSheet);
|
ui->frame_3->setStyleSheet(frameStyleSheet);
|
||||||
@ -336,29 +351,30 @@ void AppIntoPage::on_downloadButton_clicked()
|
|||||||
void AppIntoPage::on_pushButton_3_clicked()
|
void AppIntoPage::on_pushButton_3_clicked()
|
||||||
{
|
{
|
||||||
QtConcurrent::run([=]()
|
QtConcurrent::run([=]()
|
||||||
{
|
{
|
||||||
ui->downloadButton->setEnabled(false);
|
ui->downloadButton->setEnabled(false);
|
||||||
ui->pushButton_3->setEnabled(false);
|
ui->pushButton_3->setEnabled(false);
|
||||||
|
|
||||||
QProcess uninstall;
|
QProcess uninstall;
|
||||||
uninstall.start("pkexec", QStringList() << "apt" << "purge" << "-y" << info["Pkgname"].toString().toLower());
|
uninstall.start("pkexec", QStringList() << "apt" << "purge" << "-y" << info["Pkgname"].toString().toLower());
|
||||||
uninstall.waitForFinished(-1);
|
uninstall.waitForFinished(-1);
|
||||||
|
|
||||||
QProcess check;
|
QProcess check;
|
||||||
check.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString().toLower());
|
check.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString().toLower());
|
||||||
check.waitForFinished(10*1000);
|
check.waitForFinished(10*1000);
|
||||||
|
|
||||||
if (check.readAllStandardOutput().isEmpty())
|
if (check.readAllStandardOutput().isEmpty())
|
||||||
{
|
{
|
||||||
ui->downloadButton->setText(tr("Install"));
|
ui->downloadButton->setText(tr("Download"));
|
||||||
ui->pushButton_3->hide();
|
ui->pushButton_3->hide();
|
||||||
|
|
||||||
updatesEnabled();
|
updatesEnabled();
|
||||||
Utils::sendNotification("spark-store",tr("Spark Store"),tr("Uninstall succeeded"));
|
Utils::sendNotification("spark-store",tr("Spark Store"),tr("Uninstall succeeded"));
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->downloadButton->setEnabled(true);
|
ui->downloadButton->setEnabled(true);
|
||||||
ui->pushButton_3->setEnabled(true); });
|
ui->pushButton_3->setEnabled(true);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppIntoPage::on_shareButton_clicked()
|
void AppIntoPage::on_shareButton_clicked()
|
||||||
@ -372,11 +388,11 @@ void AppIntoPage::on_shareButton_clicked()
|
|||||||
void AppIntoPage::on_updateButton_clicked()
|
void AppIntoPage::on_updateButton_clicked()
|
||||||
{
|
{
|
||||||
QString feedbackSpk = "spk://store/chat/store.spark-app.feedback";
|
QString feedbackSpk = "spk://store/chat/store.spark-app.feedback";
|
||||||
QFile actionSubmissionClientStatus("/opt/durapps/store.spark-app.feedback");
|
QFileInfo actionSubmissionClientStatus("/opt/durapps/store.spark-app.feedback");
|
||||||
if (actionSubmissionClientStatus.exists())
|
if (actionSubmissionClientStatus.exists() && actionSubmissionClientStatus.isDir())
|
||||||
{
|
{
|
||||||
qDebug() << "反馈器存在";
|
qDebug() << "反馈器存在";
|
||||||
QProcess::startDetached("sh /opt/durapps/store.spark-app.feedback/launch.sh");
|
QProcess::startDetached("sh", QStringList() << "/opt/durapps/store.spark-app.feedback/launch.sh");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -53,6 +53,7 @@ void AppListPage::getAppList(QString type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ui->webEngineView->setUrl(url);
|
ui->webEngineView->setUrl(url);
|
||||||
|
delete api;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppListPage::getSearchList(QString keyword)
|
void AppListPage::getSearchList(QString keyword)
|
||||||
@ -72,6 +73,7 @@ void AppListPage::getSearchList(QString keyword)
|
|||||||
}
|
}
|
||||||
url = api->getServerUrl() + "store/#/flamescion/search?keywords=" + keyword + "&" + theme;
|
url = api->getServerUrl() + "store/#/flamescion/search?keywords=" + keyword + "&" + theme;
|
||||||
ui->webEngineView->setUrl(url);
|
ui->webEngineView->setUrl(url);
|
||||||
|
delete api;
|
||||||
}
|
}
|
||||||
|
|
||||||
AppListPage::~AppListPage()
|
AppListPage::~AppListPage()
|
||||||
|
|||||||
@ -1,10 +1,24 @@
|
|||||||
#include "settingspage.h"
|
#include "settingspage.h"
|
||||||
#include "ui_settingspage.h"
|
#include "ui_settingspage.h"
|
||||||
|
#include "../backend/sparkapi.h"
|
||||||
|
#include "utils/utils.h"
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QtConcurrent>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#define TMP_PATH "/tmp/spark-store"
|
||||||
|
#define DEFAULT_SERVER_URL "https://cdn.d.store.deepinos.org.cn/"
|
||||||
|
#define DEFAULT_CHECK_DOMAIN "deepinos"
|
||||||
|
|
||||||
bool SettingsPage::isdownload = false;
|
bool SettingsPage::isdownload = false;
|
||||||
SettingsPage::SettingsPage(QWidget *parent) : QWidget(parent),
|
|
||||||
ui(new Ui::SettingsPage)
|
SettingsPage::SettingsPage(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
, ui(new Ui::SettingsPage)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
configCanSave = false;
|
configCanSave = false;
|
||||||
initConfig();
|
initConfig();
|
||||||
}
|
}
|
||||||
@ -25,22 +39,28 @@ void SettingsPage::setTheme(bool dark)
|
|||||||
void SettingsPage::readServerList()
|
void SettingsPage::readServerList()
|
||||||
{
|
{
|
||||||
// 读取服务器列表并初始化
|
// 读取服务器列表并初始化
|
||||||
QFile file(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
|
QFile file(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/server.list");
|
||||||
|
|
||||||
// 判断文件是否存在
|
// 判断文件是否存在
|
||||||
if (!file.exists())
|
if (!file.exists())
|
||||||
{
|
{
|
||||||
ui->comboBox_server->addItem("https://d.store.deepinos.org.cn/");
|
ui->comboBox_server->addItem(DEFAULT_SERVER_URL);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||||
{
|
{
|
||||||
qDebug() << "无法读取server.list";
|
qWarning() << "无法读取 server.list";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建QTextStream对象
|
// 创建 QTextStream 对象
|
||||||
QTextStream textStream(&file);
|
QTextStream textStream(&file);
|
||||||
|
if (!textStream.readAll().contains(DEFAULT_CHECK_DOMAIN)) // 校验配置文件有效性
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
textStream.seek(0); // 回到开头
|
||||||
QString lineData = textStream.readLine(); // 读取文件的第一行
|
QString lineData = textStream.readLine(); // 读取文件的第一行
|
||||||
ui->comboBox_server->addItem(lineData);
|
ui->comboBox_server->addItem(lineData);
|
||||||
while (!lineData.isNull())
|
while (!lineData.isNull())
|
||||||
@ -71,12 +91,12 @@ void SettingsPage::initConfig()
|
|||||||
readServerList();
|
readServerList();
|
||||||
|
|
||||||
// 读取服务器URL并初始化菜单项的链接
|
// 读取服务器URL并初始化菜单项的链接
|
||||||
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
if (!readConfig.value("server/choose").toString().isEmpty() && readConfig.value("server/updated").toString() == "TRUE")
|
if (!config.value("server/choose").toString().isEmpty() && config.value("server/updated").toBool())
|
||||||
{
|
{
|
||||||
qDebug() << readConfig.value("server/choose").toString();
|
qDebug() << config.value("server/choose").toString();
|
||||||
ui->comboBox_server->setCurrentText(readConfig.value("server/choose").toString());
|
ui->comboBox_server->setCurrentText(config.value("server/choose").toString());
|
||||||
SparkAPI::setServerUrl(readConfig.value("server/choose").toString());
|
SparkAPI::setServerUrl(config.value("server/choose").toString());
|
||||||
}
|
}
|
||||||
configCanSave = true; // 防止触发保存配置信号
|
configCanSave = true; // 防止触发保存配置信号
|
||||||
}
|
}
|
||||||
@ -91,11 +111,23 @@ void SettingsPage::on_pushButton_updateServer_clicked()
|
|||||||
QtConcurrent::run([=]()
|
QtConcurrent::run([=]()
|
||||||
{
|
{
|
||||||
ui->pushButton_updateServer->setEnabled(false);
|
ui->pushButton_updateServer->setEnabled(false);
|
||||||
|
|
||||||
|
|
||||||
|
QFile::remove(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/server.list");
|
||||||
|
auto updateSuccess = system("curl -o " + QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation).toUtf8() + "/server.list https://d.store.deepinos.org.cn/store/server-and-mirror.list");
|
||||||
|
qDebug() << "Update serverlist status:" << updateSuccess;
|
||||||
|
if (updateSuccess != 0) // 更新失败不换服务器配置
|
||||||
|
{
|
||||||
|
QFile file(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/server.list");
|
||||||
|
if (file.exists())
|
||||||
|
{
|
||||||
|
file.remove();
|
||||||
|
}
|
||||||
|
// FIXME: 向用户提示更新失败
|
||||||
|
ui->pushButton_updateServer->setEnabled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ui->comboBox_server->clear();
|
ui->comboBox_server->clear();
|
||||||
|
|
||||||
QFile::remove(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
|
|
||||||
system("curl -o " + QDir::homePath().toUtf8() + "/.config/spark-store/server.list https://d.store.deepinos.org.cn/store/server-and-mirror.list");
|
|
||||||
|
|
||||||
ui->pushButton_updateServer->setEnabled(true);
|
ui->pushButton_updateServer->setEnabled(true);
|
||||||
readServerList();
|
readServerList();
|
||||||
ui->comboBox_server->setCurrentIndex(0); });
|
ui->comboBox_server->setCurrentIndex(0); });
|
||||||
@ -105,14 +137,14 @@ void SettingsPage::on_comboBox_server_currentIndexChanged(const QString &arg1)
|
|||||||
{
|
{
|
||||||
SparkAPI::setServerUrl(arg1); // 服务器信息更新
|
SparkAPI::setServerUrl(arg1); // 服务器信息更新
|
||||||
qDebug() << arg1;
|
qDebug() << arg1;
|
||||||
const QString updatedInfo = "TRUE";
|
bool updatedInfo = true;
|
||||||
if (configCanSave)
|
if(configCanSave)
|
||||||
{
|
{
|
||||||
// ui->label_setting1->show();
|
// ui->label_setting1->show();
|
||||||
QSettings *setConfig = new QSettings(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
setConfig->setValue("server/choose", arg1);
|
config.setValue("server/choose", arg1);
|
||||||
setConfig->setValue("server/updated", updatedInfo);
|
config.setValue("server/updated", updatedInfo);
|
||||||
setConfig->deleteLater();
|
config.sync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +215,8 @@ void SettingsPage::on_pushButton_updateApt_clicked()
|
|||||||
emit openUrl(QUrl("spk://store/tools/spark-store"));
|
emit openUrl(QUrl("spk://store/tools/spark-store"));
|
||||||
ui->label_aptserver->setText(tr(""));
|
ui->label_aptserver->setText(tr(""));
|
||||||
|
|
||||||
ui->pushButton_updateApt->setEnabled(true); });
|
ui->pushButton_updateApt->setEnabled(true);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsPage::on_pushButton_clear_clicked()
|
void SettingsPage::on_pushButton_clear_clicked()
|
||||||
@ -192,7 +225,7 @@ void SettingsPage::on_pushButton_clear_clicked()
|
|||||||
{
|
{
|
||||||
ui->pushButton_clear->setEnabled(false);
|
ui->pushButton_clear->setEnabled(false);
|
||||||
|
|
||||||
QDir tmpdir("/tmp/spark-store");
|
QDir tmpdir(QString::fromUtf8(TMP_PATH));
|
||||||
tmpdir.setFilter(QDir::Files);
|
tmpdir.setFilter(QDir::Files);
|
||||||
int quantity = int(tmpdir.count());
|
int quantity = int(tmpdir.count());
|
||||||
for(int i = 0; i < quantity; i++)
|
for(int i = 0; i < quantity; i++)
|
||||||
@ -207,13 +240,15 @@ void SettingsPage::on_pushButton_clear_clicked()
|
|||||||
void SettingsPage::on_pushButton_clearWebCache_clicked()
|
void SettingsPage::on_pushButton_clearWebCache_clicked()
|
||||||
{
|
{
|
||||||
QtConcurrent::run([=]()
|
QtConcurrent::run([=]()
|
||||||
{
|
{
|
||||||
QString dataLocal = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
|
QString localDataLocation = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/QtWebEngine";
|
||||||
qDebug() << dataLocal;
|
qDebug() << localDataLocation;
|
||||||
QDir dataDir(dataLocal);
|
QDir dataDir(localDataLocation);
|
||||||
dataDir.removeRecursively();
|
dataDir.removeRecursively();
|
||||||
dataLocal = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
|
|
||||||
qDebug() << dataLocal;
|
QString cacheLocation = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/QtWebEngine";
|
||||||
QDir cacheDir(dataLocal);
|
qDebug() << cacheLocation;
|
||||||
cacheDir.removeRecursively(); });
|
QDir cacheDir(cacheLocation);
|
||||||
|
cacheDir.removeRecursively();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,14 +2,7 @@
|
|||||||
#define SETTINGSPAGE_H
|
#define SETTINGSPAGE_H
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QFile>
|
#include <QUrl>
|
||||||
#include <QDir>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QSettings>
|
|
||||||
#include <QtConcurrent>
|
|
||||||
#include "../backend/sparkapi.h"
|
|
||||||
#include "utils/utils.h"
|
|
||||||
#define TMP_PATH "/tmp/spark-store"
|
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class SettingsPage;
|
class SettingsPage;
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------
|
#-------------------------------------------------
|
||||||
|
|
||||||
QT += core gui network concurrent webenginewidgets dbus svg
|
QT += core gui concurrent dbus network svg webenginewidgets
|
||||||
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
@ -22,78 +22,75 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
|||||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
DEFINES += QT_APP_DEBUG
|
# Disable qWarning / qDebug output in Release
|
||||||
|
# CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
|
||||||
|
|
||||||
CONFIG += c++11 link_pkgconfig
|
CONFIG += c++11 link_pkgconfig
|
||||||
PKGCONFIG += dtkcore dtkgui dtkwidget
|
PKGCONFIG += dtkcore dtkgui dtkwidget
|
||||||
|
|
||||||
# Disable qWarning / qDebug output in Release
|
|
||||||
CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
|
|
||||||
|
|
||||||
# Update translation files
|
|
||||||
CONFIG(release, debug|release): system(bash $${PWD}/translate_generation.sh)
|
|
||||||
|
|
||||||
TRANSLATIONS += \
|
|
||||||
../translations/spark-store_en.ts \
|
|
||||||
../translations/spark-store_fr.ts \
|
|
||||||
../translations/spark-store_zh_CN.ts
|
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
dbus/dbussparkstoreservice.cpp \
|
backend/downloadworker.cpp \
|
||||||
main.cpp \
|
backend/image_show.cpp \
|
||||||
mainwindow-dtk.cpp \
|
|
||||||
backend/sparkapi.cpp \
|
backend/sparkapi.cpp \
|
||||||
|
dbus/dbussparkstoreservice.cpp \
|
||||||
|
pages/appintopage.cpp \
|
||||||
|
pages/applistpage.cpp \
|
||||||
pages/settingspage.cpp \
|
pages/settingspage.cpp \
|
||||||
|
utils/httprequest.cpp \
|
||||||
utils/utils.cpp \
|
utils/utils.cpp \
|
||||||
utils/widgetanimation.cpp \
|
utils/widgetanimation.cpp \
|
||||||
widgets/common/progressbutton.cpp \
|
widgets/base/basewidgetopacity.cpp \
|
||||||
widgets/common/webenginepage.cpp \
|
|
||||||
widgets/common/webengineview.cpp \
|
|
||||||
widgets/downloadlistwidget.cpp \
|
|
||||||
widgets/common/downloaditem.cpp \
|
widgets/common/downloaditem.cpp \
|
||||||
|
widgets/common/progressbutton.cpp \
|
||||||
widgets/common/smoothlistwidget.cpp \
|
widgets/common/smoothlistwidget.cpp \
|
||||||
widgets/common/smoothscrollbar.cpp \
|
widgets/common/smoothscrollbar.cpp \
|
||||||
utils/httprequest.cpp \
|
widgets/common/webenginepage.cpp \
|
||||||
pages/applistpage.cpp \
|
widgets/common/webengineview.cpp \
|
||||||
backend/downloadworker.cpp \
|
|
||||||
pages/appintopage.cpp \
|
|
||||||
widgets/big_image.cpp \
|
widgets/big_image.cpp \
|
||||||
backend/image_show.cpp \
|
widgets/downloadlistwidget.cpp \
|
||||||
widgets/base/basewidgetopacity.cpp
|
application.cpp \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow-dtk.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
dbus/dbussparkstoreservice.h \
|
backend/downloadworker.h \
|
||||||
mainwindow-dtk.h \
|
backend/image_show.h \
|
||||||
backend/sparkapi.h \
|
backend/sparkapi.h \
|
||||||
|
dbus/dbussparkstoreservice.h \
|
||||||
|
pages/appintopage.h \
|
||||||
|
pages/applistpage.h \
|
||||||
pages/settingspage.h \
|
pages/settingspage.h \
|
||||||
|
utils/httprequest.h \
|
||||||
utils/utils.h \
|
utils/utils.h \
|
||||||
utils/widgetanimation.h \
|
utils/widgetanimation.h \
|
||||||
widgets/common/progressbutton.h \
|
widgets/base/basewidgetopacity.h \
|
||||||
widgets/common/webenginepage.h \
|
|
||||||
widgets/common/webengineview.h \
|
|
||||||
widgets/downloadlistwidget.h \
|
|
||||||
widgets/common/downloaditem.h \
|
widgets/common/downloaditem.h \
|
||||||
|
widgets/common/progressbutton.h \
|
||||||
widgets/common/smoothlistwidget.h \
|
widgets/common/smoothlistwidget.h \
|
||||||
widgets/common/smoothscrollbar.h \
|
widgets/common/smoothscrollbar.h \
|
||||||
utils/httprequest.h \
|
widgets/common/webenginepage.h \
|
||||||
pages/applistpage.h \
|
widgets/common/webengineview.h \
|
||||||
backend/downloadworker.h \
|
|
||||||
pages/appintopage.h \
|
|
||||||
widgets/big_image.h \
|
widgets/big_image.h \
|
||||||
backend/image_show.h \
|
widgets/downloadlistwidget.h \
|
||||||
widgets/base/basewidgetopacity.h
|
application.h \
|
||||||
|
mainwindow-dtk.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
mainwindow-dtk.ui \
|
pages/appintopage.ui \
|
||||||
pages/settingspage.ui \
|
|
||||||
widgets/downloadlistwidget.ui \
|
|
||||||
widgets/common/downloaditem.ui \
|
|
||||||
pages/applistpage.ui \
|
pages/applistpage.ui \
|
||||||
pages/appintopage.ui
|
pages/settingspage.ui \
|
||||||
|
widgets/common/downloaditem.ui \
|
||||||
|
widgets/downloadlistwidget.ui \
|
||||||
|
mainwindow-dtk.ui
|
||||||
|
|
||||||
RESOURCES += \
|
RESOURCES += \
|
||||||
assets/assets.qrc
|
assets/assets.qrc
|
||||||
|
|
||||||
|
TRANSLATIONS += \
|
||||||
|
../translations/spark-store_en.ts \
|
||||||
|
../translations/spark-store_fr.ts \
|
||||||
|
../translations/spark-store_zh_CN.ts
|
||||||
|
|
||||||
# Default rules for deployment.
|
# Default rules for deployment.
|
||||||
qnx: target.path = /tmp/$${TARGET}/bin
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
else: unix:!android: target.path = /opt/durapps/$${TARGET}/bin
|
else: unix:!android: target.path = /opt/durapps/$${TARGET}/bin
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
#include "basewidgetopacity.h"
|
#include "basewidgetopacity.h"
|
||||||
|
|
||||||
#include <QCloseEvent>
|
#include <QCloseEvent>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QStandardPaths>
|
||||||
#include <QPropertyAnimation>
|
#include <QPropertyAnimation>
|
||||||
|
|
||||||
BaseWidgetOpacity::BaseWidgetOpacity(QWidget *parent) : DBlurEffectWidget(parent)
|
BaseWidgetOpacity::BaseWidgetOpacity(QWidget *parent) : DBlurEffectWidget(parent)
|
||||||
@ -12,6 +14,14 @@ BaseWidgetOpacity::BaseWidgetOpacity(QWidget *parent) : DBlurEffectWidget(parent
|
|||||||
/// @param event
|
/// @param event
|
||||||
void BaseWidgetOpacity::closeEvent(QCloseEvent *event)
|
void BaseWidgetOpacity::closeEvent(QCloseEvent *event)
|
||||||
{
|
{
|
||||||
|
// FIXME: wayland 不支持直接设置窗口透明度,需要调用 wayland 相关库(考虑抄控制中心“窗口移动时启用透明特效”代码?)
|
||||||
|
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||||
|
bool isWayland = config.value("build/isWayland").toBool();
|
||||||
|
if(isWayland)
|
||||||
|
{
|
||||||
|
return DBlurEffectWidget::closeEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
if (!closeWindowAnimation)
|
if (!closeWindowAnimation)
|
||||||
{
|
{
|
||||||
closeWindowAnimation = true;
|
closeWindowAnimation = true;
|
||||||
|
|||||||
@ -22,6 +22,9 @@ DownloadItem::DownloadItem(QWidget *parent) : QWidget(parent),
|
|||||||
ui->pushButton_3->hide();
|
ui->pushButton_3->hide();
|
||||||
ui->widget_spinner->start();
|
ui->widget_spinner->start();
|
||||||
ui->widget_spinner->hide();
|
ui->widget_spinner->hide();
|
||||||
|
|
||||||
|
ui->label->setElideMode(Qt::TextElideMode::ElideRight);
|
||||||
|
ui->label_2->setElideMode(Qt::TextElideMode::ElideRight);
|
||||||
}
|
}
|
||||||
|
|
||||||
DownloadItem::~DownloadItem()
|
DownloadItem::~DownloadItem()
|
||||||
@ -33,10 +36,12 @@ void DownloadItem::setValue(qint64 value)
|
|||||||
{
|
{
|
||||||
ui->progressBar->setValue(qint32(value));
|
ui->progressBar->setValue(qint32(value));
|
||||||
ui->label_2->setText(QString::number(double(value) / 100) + "% (" + speed + ")");
|
ui->label_2->setText(QString::number(double(value) / 100) + "% (" + speed + ")");
|
||||||
|
ui->label_2->setToolTip(QString::number(double(value) / 100) + "% (" + speed + ")");
|
||||||
if (ui->label_2->text().left(4) == "100%")
|
if (ui->label_2->text().left(4) == "100%")
|
||||||
{
|
{
|
||||||
download = 1;
|
download = 1;
|
||||||
ui->label_2->setText(tr("Download Complete."));
|
ui->label_2->setText(tr("Download Complete."));
|
||||||
|
ui->label_2->setToolTip(tr("Download Complete."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,6 +53,7 @@ void DownloadItem::setMax(qint64 max)
|
|||||||
void DownloadItem::setName(QString name)
|
void DownloadItem::setName(QString name)
|
||||||
{
|
{
|
||||||
ui->label->setText(name);
|
ui->label->setText(name);
|
||||||
|
ui->label->setToolTip(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DownloadItem::getName()
|
QString DownloadItem::getName()
|
||||||
@ -96,6 +102,7 @@ void DownloadItem::install(int t)
|
|||||||
ui->widget_spinner->show();
|
ui->widget_spinner->show();
|
||||||
qDebug() << "/tmp/spark-store/" + ui->label_filename->text().toUtf8();
|
qDebug() << "/tmp/spark-store/" + ui->label_filename->text().toUtf8();
|
||||||
ui->label_2->setText(tr("Installing"));
|
ui->label_2->setText(tr("Installing"));
|
||||||
|
ui->label_2->setToolTip(tr("Installing"));
|
||||||
|
|
||||||
QtConcurrent::run([=]()
|
QtConcurrent::run([=]()
|
||||||
{
|
{
|
||||||
@ -119,7 +126,7 @@ void DownloadItem::install(int t)
|
|||||||
out = installer.readAllStandardOutput();
|
out = installer.readAllStandardOutput();
|
||||||
|
|
||||||
QStringList everyOut = out.split("\n");
|
QStringList everyOut = out.split("\n");
|
||||||
for(int i=0;i<everyOut.size();i++)
|
for (int i = 0; i < everyOut.size(); i++)
|
||||||
{
|
{
|
||||||
if(everyOut[i].left(2) == "E:")
|
if(everyOut[i].left(2) == "E:")
|
||||||
{
|
{
|
||||||
@ -132,14 +139,15 @@ void DownloadItem::install(int t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QProcess isInstall;
|
QProcess isInstall;
|
||||||
isInstall.start("dpkg -s " + pkgName);
|
isInstall.start("dpkg", QStringList() << "-s" << pkgName);
|
||||||
isInstall.waitForFinished(180*1000); // 默认超时 3 分钟
|
isInstall.waitForFinished(180*1000); // 默认超时 3 分钟
|
||||||
int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
|
int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
|
||||||
if(error == 0)
|
if (error == 0 && !haveError)
|
||||||
{
|
{
|
||||||
ui->pushButton_install->hide();
|
ui->pushButton_install->hide();
|
||||||
Utils::sendNotification("spark-store",tr("Spark Store"),ui->label->text() + " " + tr("Installation complete."));
|
Utils::sendNotification("spark-store",tr("Spark Store"),ui->label->text() + " " + tr("Installation complete."));
|
||||||
ui->label_2->setText(tr("Finish"));
|
ui->label_2->setText(tr("Finish"));
|
||||||
|
ui->label_2->setToolTip(tr("Finish"));
|
||||||
download = 3;
|
download = 3;
|
||||||
ui->pushButton_3->show();
|
ui->pushButton_3->show();
|
||||||
}
|
}
|
||||||
@ -150,13 +158,15 @@ void DownloadItem::install(int t)
|
|||||||
download = 1;
|
download = 1;
|
||||||
Utils::sendNotification("spark-store",tr("Spark Store"),tr("Error happened in dpkg progress , you can try it again."));
|
Utils::sendNotification("spark-store",tr("Spark Store"),tr("Error happened in dpkg progress , you can try it again."));
|
||||||
ui->label_2->setText(tr("Error happened in dpkg progress , you can try it again"));
|
ui->label_2->setText(tr("Error happened in dpkg progress , you can try it again"));
|
||||||
|
ui->label_2->setToolTip(tr("Error happened in dpkg progress , you can try it again"));
|
||||||
ui->pushButton_3->show();
|
ui->pushButton_3->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(notRoot)
|
if (notRoot)
|
||||||
{
|
{
|
||||||
Utils::sendNotification("spark-store",tr("Spark Store"),tr("dpkg progress had been aborted,you can retry installation."));
|
Utils::sendNotification("spark-store",tr("Spark Store"),tr("dpkg progress had been aborted,you can retry installation."));
|
||||||
ui->label_2->setText(tr("dpkg progress had been aborted,you can retry installation"));
|
ui->label_2->setText(tr("dpkg progress had been aborted,you can retry installation"));
|
||||||
|
ui->label_2->setToolTip(tr("dpkg progress had been aborted,you can retry installation"));
|
||||||
ui->pushButton_install->show();
|
ui->pushButton_install->show();
|
||||||
ui->pushButton_3->hide();
|
ui->pushButton_3->hide();
|
||||||
}
|
}
|
||||||
@ -177,6 +187,7 @@ void DownloadItem::on_pushButton_install_clicked()
|
|||||||
void DownloadItem::on_pushButton_2_clicked()
|
void DownloadItem::on_pushButton_2_clicked()
|
||||||
{
|
{
|
||||||
ui->label_2->setText(tr("Download canceled"));
|
ui->label_2->setText(tr("Download canceled"));
|
||||||
|
ui->label_2->setToolTip(tr("Download canceled"));
|
||||||
download = 2;
|
download = 2;
|
||||||
ui->pushButton_2->setEnabled(false);
|
ui->pushButton_2->setEnabled(false);
|
||||||
ui->progressBar->hide();
|
ui->progressBar->hide();
|
||||||
|
|||||||
@ -7,13 +7,25 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>666</width>
|
<width>666</width>
|
||||||
<height>54</height>
|
<height>56</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>56</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>16777215</width>
|
<width>16777215</width>
|
||||||
<height>54</height>
|
<height>56</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -40,10 +52,22 @@
|
|||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>48</width>
|
||||||
|
<height>48</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>48</width>
|
<width>48</width>
|
||||||
<height>16777215</height>
|
<height>48</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -52,6 +76,9 @@
|
|||||||
<property name="scaledContents">
|
<property name="scaledContents">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -70,6 +97,31 @@
|
|||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="DLabel" name="label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>48</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>48</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_filename">
|
<widget class="QLabel" name="label_filename">
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
@ -83,33 +135,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>80</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>16777215</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>13</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Name</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_2">
|
<spacer name="horizontalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
@ -153,11 +178,14 @@
|
|||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
<property name="rightMargin">
|
<property name="rightMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="bottomMargin">
|
<property name="bottomMargin">
|
||||||
<number>0</number>
|
<number>8</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QProgressBar" name="progressBar">
|
<widget class="QProgressBar" name="progressBar">
|
||||||
@ -188,7 +216,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="DLabel" name="label_2">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<pointsize>9</pointsize>
|
<pointsize>9</pointsize>
|
||||||
@ -297,6 +325,11 @@
|
|||||||
<header location="global">dspinner.h</header>
|
<header location="global">dspinner.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>DLabel</class>
|
||||||
|
<extends>QLabel</extends>
|
||||||
|
<header>dlabel.h</header>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|||||||
@ -16,7 +16,6 @@ void SmoothListWidget::wheelEvent(QWheelEvent *e)
|
|||||||
}
|
}
|
||||||
void SmoothListWidget::onSliderChanged(int p)
|
void SmoothListWidget::onSliderChanged(int p)
|
||||||
{
|
{
|
||||||
int startRow = count();
|
|
||||||
if (p == vScrollBar->maximum())
|
if (p == vScrollBar->maximum())
|
||||||
{
|
{
|
||||||
emit reachedBottom(); // 1
|
emit reachedBottom(); // 1
|
||||||
|
|||||||
@ -7,7 +7,7 @@ DownloadListWidget::DownloadListWidget(QWidget *parent) : DBlurEffectWidget(pare
|
|||||||
ui(new Ui::DownloadListWidget)
|
ui(new Ui::DownloadListWidget)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
setWindowTitle("Download list");
|
setWindowTitle(QObject::tr("Download list"));
|
||||||
installEventFilter(this);
|
installEventFilter(this);
|
||||||
this->setAttribute(Qt::WA_Hover, true);
|
this->setAttribute(Qt::WA_Hover, true);
|
||||||
setFocus();
|
setFocus();
|
||||||
@ -55,7 +55,6 @@ DownloadListWidget::~DownloadListWidget()
|
|||||||
if (downloadController)
|
if (downloadController)
|
||||||
{
|
{
|
||||||
downloadController->stopDownload();
|
downloadController->stopDownload();
|
||||||
downloadController->deleteLater();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delete ui;
|
delete ui;
|
||||||
@ -92,7 +91,7 @@ void DownloadListWidget::addItem(QString name, QString fileName, QString pkgName
|
|||||||
di->pkgName = pkgName;
|
di->pkgName = pkgName;
|
||||||
di->seticon(icon);
|
di->seticon(icon);
|
||||||
QListWidgetItem *pItem = new QListWidgetItem();
|
QListWidgetItem *pItem = new QListWidgetItem();
|
||||||
pItem->setSizeHint(QSize(240, 50));
|
pItem->setSizeHint(QSize(240, 56)); // ui 中单个 downloaditem 高度固定 56px(上下 margin 8px,图片固定 48x48)
|
||||||
ui->listWidget->addItem(pItem);
|
ui->listWidget->addItem(pItem);
|
||||||
ui->listWidget->setItemWidget(pItem, di);
|
ui->listWidget->setItemWidget(pItem, di);
|
||||||
if (!isBusy)
|
if (!isBusy)
|
||||||
|
|||||||
@ -85,7 +85,7 @@ QListWidget::item::selected
|
|||||||
}</string>
|
}</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="frameShape">
|
<property name="frameShape">
|
||||||
<enum>QFrame::StyledPanel</enum>
|
<enum>QFrame::NoFrame</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="verticalScrollBarPolicy">
|
<property name="verticalScrollBarPolicy">
|
||||||
<enum>Qt::ScrollBarAsNeeded</enum>
|
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||||
@ -99,9 +99,15 @@ QListWidget::item::selected
|
|||||||
<property name="autoScrollMargin">
|
<property name="autoScrollMargin">
|
||||||
<number>10</number>
|
<number>10</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
<property name="resizeMode">
|
<property name="resizeMode">
|
||||||
<enum>QListView::Fixed</enum>
|
<enum>QListView::Fixed</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="spacing">
|
||||||
|
<number>4</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
|||||||
15
tool/aptss
15
tool/aptss
@ -18,8 +18,10 @@ fi
|
|||||||
|
|
||||||
if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] ; then
|
if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] ; then
|
||||||
|
|
||||||
|
if [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ];then
|
||||||
sudo bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
echo "接收星火仓库软件信息中..."
|
||||||
|
aptss ssupdate
|
||||||
|
fi
|
||||||
|
|
||||||
###执行
|
###执行
|
||||||
bwrap --dev-bind / / \
|
bwrap --dev-bind / / \
|
||||||
@ -38,13 +40,18 @@ bwrap --dev-bind / / \
|
|||||||
|
|
||||||
|
|
||||||
elif [ "$1" = "policy" ] || [ "$1" = "search" ];then
|
elif [ "$1" = "policy" ] || [ "$1" = "search" ];then
|
||||||
sudo bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
|
||||||
|
|
||||||
|
if [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ];then
|
||||||
|
echo "接收星火仓库软件信息中..."
|
||||||
|
aptss ssupdate
|
||||||
|
fi
|
||||||
|
|
||||||
###执行
|
###执行
|
||||||
bwrap --dev-bind / / \
|
bwrap --dev-bind / / \
|
||||||
--bind '/tmp/aptss-conf/apt-fast.conf' /etc/apt-fast.conf \
|
--bind '/tmp/aptss-conf/apt-fast.conf' /etc/apt-fast.conf \
|
||||||
--bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list \
|
--bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list \
|
||||||
apt "$@" --allow-downgrades
|
apt "$@"
|
||||||
|
|
||||||
elif [ "$1" = "ssupdate" ];then
|
elif [ "$1" = "ssupdate" ];then
|
||||||
|
|
||||||
|
|||||||
33
tool/ssaudit
Executable file
33
tool/ssaudit
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Spark Store Audit script.星火商店审核脚本"
|
||||||
|
|
||||||
|
|
||||||
|
#################检测文件是否存在
|
||||||
|
if [ $# -eq 0 ];then
|
||||||
|
echo "没有接收到参数,退出"
|
||||||
|
echo "用法:$0 deb路径"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$1" ]
|
||||||
|
then
|
||||||
|
echo "文件不存在"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$(id -u)" != "0" ];then
|
||||||
|
#############################无root权限时
|
||||||
|
echo "请使用root启动ssaudit"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
|
||||||
|
DEBPATH=`realpath $1`
|
||||||
|
|
||||||
|
echo ----------------------------------------------------------------------------------
|
||||||
|
dpkg -i "$DEBPATH" || aptss install -yf
|
||||||
|
|
||||||
|
|
||||||
@ -52,16 +52,28 @@ fi
|
|||||||
|
|
||||||
DEBPATH=`realpath $1`
|
DEBPATH=`realpath $1`
|
||||||
|
|
||||||
if [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ];then
|
if [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ];then
|
||||||
echo "接收星火仓库软件信息中..."
|
echo "接收星火仓库软件信息中..."
|
||||||
aptss ssupdate
|
aptss ssupdate
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
### 选择包信息位置
|
||||||
|
|
||||||
|
if [ -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ];then
|
||||||
|
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages"
|
||||||
|
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是单目录仓库配置"
|
||||||
|
else
|
||||||
|
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_Packages"
|
||||||
|
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是根目录仓库配置"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "正在计算hash并与星火仓库匹配..."
|
echo "正在计算hash并与星火仓库匹配..."
|
||||||
|
|
||||||
DEB_MD5SUM=`md5sum "$DEBPATH" | cut -c -32`
|
DEB_MD5SUM=`md5sum "$DEBPATH" | cut -c -32`
|
||||||
|
|
||||||
IS_MD5SUM_CHECKD=`cat /var/lib/apt/lists/d.store.deepinos.org.cn_Packages | grep $DEB_MD5SUM`
|
IS_MD5SUM_CHECKD=`cat $PACKAGES_DATA_PATH | grep $DEB_MD5SUM`
|
||||||
if [ ! -z "$IS_MD5SUM_CHECKD" ];then
|
if [ ! -z "$IS_MD5SUM_CHECKD" ];then
|
||||||
|
|
||||||
echo "校验成功,开始安装"
|
echo "校验成功,开始安装"
|
||||||
@ -71,13 +83,13 @@ dpkg -i "$DEBPATH" || aptss install -yf
|
|||||||
else
|
else
|
||||||
|
|
||||||
|
|
||||||
zenity --info --icon-name=spark-store --height 270 --width 500 --text "软件包校验失败!这不应该发生!\n可能是因为软件包已损坏,星火仓库未同步,或者最坏的情况:恶意软件尝试利用自动安装来入侵系统!\n如果你不清楚发生了什么,请在接下来的认证窗口中选择取消认证\n执行 sudo aptss ssupdate 后再尝试安装。\n如果问题仍然存在,请在应用信息界面点击 应用反馈 来提交反馈给我们!\n\n如果你是审核人员,这是正常现象,在审核通过前星火仓库不会保存相关信息。请在接下来的弹窗中进行认证即可"
|
zenity --info --icon-name=spark-store --height 270 --width 500 --text "软件包校验失败!这不应该发生!\n可能是因为软件包已损坏,星火仓库未同步,或者最坏的情况:恶意软件尝试利用自动安装来入侵系统!\n如果你不清楚发生了什么,请在接下来的认证窗口中选择取消认证\n执行 sudo aptss ssupdate 后再尝试安装。\n如果问题仍然存在,请在应用信息界面点击 应用反馈 来提交反馈给我们!\n\n 如果你是审核人员,请使用 ssaudit来替代ssinstall进行审核工作,因为现在ssinstall已经被用于免密安装。\n如果你正在尝试安装已经下架的星火应用,也可用ssaudit来替代ssinstall"
|
||||||
|
|
||||||
echo "软件包校验失败!这不应该发生!"
|
echo "软件包校验失败!这不应该发生!"
|
||||||
echo "执行 sudo aptss ssupdate 后再尝试安装。"
|
echo "执行 sudo aptss ssupdate 后再尝试安装。"
|
||||||
echo "如果问题仍然存在,请在应用信息界面点击 应用反馈 来提交反馈给我们!"
|
echo "如果问题仍然存在,请在应用信息界面点击 应用反馈 来提交反馈给我们!"
|
||||||
echo "如果你是审核人员,这是正常现象,在审核通过前星火仓库不会保存相关信息。请在接下来的弹窗中进行认证即可"
|
echo "如果你是审核人员,请使用 ssaudit来替代ssinstall进行审核工作,因为现在ssinstall已经被用于免密安装"
|
||||||
|
echo "如果你正在尝试安装已经下架的星火应用,也可用ssaudit来替代ssinstall"
|
||||||
|
|
||||||
pkexec_as_current_user bash -c "dpkg -i "$DEBPATH" || aptss install -yf "
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -47,7 +47,19 @@ fi
|
|||||||
# 每日更新星火源文件
|
# 每日更新星火源文件
|
||||||
curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list"
|
curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list"
|
||||||
|
|
||||||
updatetext=`aptss ssupdate`
|
|
||||||
|
|
||||||
|
updatetext=`aptss ssupdate 2>&1`
|
||||||
|
|
||||||
|
until [ "`echo $updatetext | grep E: `" = "" ];do
|
||||||
|
echo "更新出现异常状况,等待十五秒"
|
||||||
|
sleep 15
|
||||||
|
updatetext=`aptss ssupdate 2>&1`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
isupdate=`echo ${updatetext: -5}`
|
isupdate=`echo ${updatetext: -5}`
|
||||||
if [ "$isupdate" = "date." ] ; then
|
if [ "$isupdate" = "date." ] ; then
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@ -1,10 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# this file is used to auto-generate .qm file from .ts file.
|
# this file is used to auto-generate .qm file from .ts file.
|
||||||
|
|
||||||
ts_list=(`ls ./translations/*.ts`)
|
cd $(dirname $0)
|
||||||
|
|
||||||
for ts in "${ts_list[@]}"
|
lrelease ./src/spark-store.pro
|
||||||
do
|
|
||||||
printf "\nprocess ${ts}\n"
|
|
||||||
lrelease "${ts}"
|
|
||||||
done
|
|
||||||
|
|||||||
6
translate_update.sh
Executable file
6
translate_update.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# this file is used to auto-update .ts file.
|
||||||
|
|
||||||
|
cd $(dirname $0)
|
||||||
|
|
||||||
|
lupdate ./src/spark-store.pro -no-obsolete
|
||||||
@ -10,8 +10,9 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="147"/>
|
<location filename="../src/pages/appintopage.cpp" line="160"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="209"/>
|
<location filename="../src/pages/appintopage.cpp" line="226"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="368"/>
|
||||||
<source>Download</source>
|
<source>Download</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -174,47 +175,51 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="89"/>
|
<location filename="../src/pages/appintopage.cpp" line="87"/>
|
||||||
<source>Click Open</source>
|
<source>Click Open</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="132"/>
|
<location filename="../src/pages/appintopage.cpp" line="96"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="224"/>
|
<source>Developer Mode Disabled</source>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="316"/>
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="145"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="242"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="339"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="139"/>
|
<location filename="../src/pages/appintopage.cpp" line="152"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="214"/>
|
<location filename="../src/pages/appintopage.cpp" line="231"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="308"/>
|
<location filename="../src/pages/appintopage.cpp" line="327"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="341"/>
|
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="219"/>
|
<location filename="../src/pages/appintopage.cpp" line="236"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="345"/>
|
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="356"/>
|
<location filename="../src/pages/appintopage.cpp" line="383"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="345"/>
|
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="356"/>
|
<location filename="../src/pages/appintopage.cpp" line="383"/>
|
||||||
<source>The URL has been copied to the clipboard</source>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -232,102 +237,121 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>DAboutDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/application.cpp" line="88"/>
|
||||||
|
<source>Version: %1</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/application.cpp" line="95"/>
|
||||||
|
<source>%1 is released under %2</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>DownloadItem</name>
|
<name>DownloadItem</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="20"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="32"/>
|
||||||
<source>Form</source>
|
<source>Form</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="50"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="74"/>
|
||||||
<source>icon</source>
|
<source>icon</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="82"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="134"/>
|
||||||
<source>TextLabel</source>
|
<source>TextLabel</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="106"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="121"/>
|
||||||
<source>Name</source>
|
<source>Name</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="198"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="226"/>
|
||||||
<source>Waiting to download</source>
|
<source>Waiting to download</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="249"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="277"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="268"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="296"/>
|
||||||
<source>Cancel</source>
|
<source>Cancel</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="287"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="315"/>
|
||||||
<source>Info</source>
|
<source>Info</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="40"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="43"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="44"/>
|
||||||
<source>Download Complete.</source>
|
<source>Download Complete.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="148"/>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
|
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="167"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="99"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="104"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="105"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="148"/>
|
||||||
<source>Installation complete.</source>
|
<source>Installation complete.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="143"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="149"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="150"/>
|
||||||
<source>Finish</source>
|
<source>Finish</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="150"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="157"/>
|
||||||
<source>Retry</source>
|
<source>Retry</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
|
||||||
<source>Error happened in dpkg progress , you can try it again.</source>
|
<source>Error happened in dpkg progress , you can try it again.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="153"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="160"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="161"/>
|
||||||
<source>Error happened in dpkg progress , you can try it again</source>
|
<source>Error happened in dpkg progress , you can try it again</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="167"/>
|
||||||
<source>dpkg progress had been aborted,you can retry installation.</source>
|
<source>dpkg progress had been aborted,you can retry installation.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="160"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="168"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="169"/>
|
||||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="181"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="189"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="190"/>
|
||||||
<source>Download canceled</source>
|
<source>Download canceled</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -345,7 +369,7 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/downloadlistwidget.ui" line="110"/>
|
<location filename="../src/widgets/downloadlistwidget.ui" line="116"/>
|
||||||
<source>Open download directory</source>
|
<source>Open download directory</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -358,141 +382,128 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="160"/>
|
<location filename="../src/mainwindow-dtk.ui" line="166"/>
|
||||||
<source>Home</source>
|
<source>Home</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="197"/>
|
<location filename="../src/mainwindow-dtk.ui" line="203"/>
|
||||||
<source>Network</source>
|
<source>Network</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="225"/>
|
<location filename="../src/mainwindow-dtk.ui" line="231"/>
|
||||||
<source>Chat</source>
|
<source>Chat</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="253"/>
|
<location filename="../src/mainwindow-dtk.ui" line="259"/>
|
||||||
<source>Music</source>
|
<source>Music</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="281"/>
|
<location filename="../src/mainwindow-dtk.ui" line="287"/>
|
||||||
<source>Video</source>
|
<source>Video</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="309"/>
|
<location filename="../src/mainwindow-dtk.ui" line="315"/>
|
||||||
<source>Picture</source>
|
<source>Picture</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="337"/>
|
<location filename="../src/mainwindow-dtk.ui" line="343"/>
|
||||||
<source>Game</source>
|
<source>Game</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="365"/>
|
<location filename="../src/mainwindow-dtk.ui" line="371"/>
|
||||||
<source>Office</source>
|
<source>Office</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="393"/>
|
<location filename="../src/mainwindow-dtk.ui" line="399"/>
|
||||||
<source>Reading</source>
|
<source>Reading</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="421"/>
|
<location filename="../src/mainwindow-dtk.ui" line="427"/>
|
||||||
<source>Development</source>
|
<source>Development</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="449"/>
|
<location filename="../src/mainwindow-dtk.ui" line="455"/>
|
||||||
<source>Tool</source>
|
<source>Tool</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="477"/>
|
<location filename="../src/mainwindow-dtk.ui" line="483"/>
|
||||||
<source>Theme</source>
|
<source>Theme</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="505"/>
|
<location filename="../src/mainwindow-dtk.ui" line="511"/>
|
||||||
<source>Other</source>
|
<source>Other</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="533"/>
|
<location filename="../src/mainwindow-dtk.ui" line="539"/>
|
||||||
<source>APP Upgrade</source>
|
<source>APP Upgrade</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="34"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="45"/>
|
||||||
<source>Submit App</source>
|
<source>Submit App</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="35"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="46"/>
|
||||||
<source>Submit App with client(Recommanded)</source>
|
<source>Submit App with client(Recommanded)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="36"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="47"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="37"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="48"/>
|
||||||
<source>APP Upgrade and Install Settings</source>
|
<source>APP Upgrade and Install Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="158"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="161"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="159"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="162"/>
|
||||||
<source>Search or enter spk://</source>
|
<source>Search or enter spk://</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
|
||||||
<name>QLabel</name>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/main.cpp" line="64"/>
|
|
||||||
<location filename="../src/main.cpp" line="73"/>
|
|
||||||
<source>Spark Store</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/main.cpp" line="61"/>
|
<location filename="../src/application.cpp" line="26"/>
|
||||||
<source>We publish this program under GPL V3</source>
|
<location filename="../src/application.cpp" line="27"/>
|
||||||
<translation type="unfinished"></translation>
|
<location filename="../src/mainwindow-dtk.cpp" line="22"/>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/main.cpp" line="66"/>
|
|
||||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/main.cpp" line="75"/>
|
|
||||||
<source>The Spark Project</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/main.cpp" line="79"/>
|
|
||||||
<location filename="../src/main.cpp" line="81"/>
|
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/main.cpp" line="84"/>
|
<location filename="../src/application.cpp" line="31"/>
|
||||||
<source><span style='font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style='font-size:12pt;'>Spark developers</span><br/><br/>Published under GPL V3</source>
|
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/application.cpp" line="92"/>
|
||||||
|
<source>Spark Project</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/widgets/downloadlistwidget.cpp" line="10"/>
|
||||||
|
<source>Download list</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
@ -584,30 +595,19 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/settingspage.cpp" line="181"/>
|
<location filename="../src/pages/settingspage.cpp" line="213"/>
|
||||||
<source>Updating, please wait...</source>
|
<source>Updating, please wait...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/settingspage.cpp" line="204"/>
|
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/settingspage.cpp" line="204"/>
|
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||||
<source>Temporary cache was cleaned</source>
|
<source>Temporary cache was cleaned</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
|
||||||
<name>Widget</name>
|
|
||||||
<message>
|
|
||||||
<source>Share</source>
|
|
||||||
<translation type="obsolete">Spk share link</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>0B</source>
|
|
||||||
<translation type="obsolete">0B</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
</TS>
|
</TS>
|
||||||
|
|||||||
@ -10,8 +10,9 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="147"/>
|
<location filename="../src/pages/appintopage.cpp" line="160"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="209"/>
|
<location filename="../src/pages/appintopage.cpp" line="226"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="368"/>
|
||||||
<source>Download</source>
|
<source>Download</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -174,47 +175,51 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="89"/>
|
<location filename="../src/pages/appintopage.cpp" line="87"/>
|
||||||
<source>Click Open</source>
|
<source>Click Open</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="132"/>
|
<location filename="../src/pages/appintopage.cpp" line="96"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="224"/>
|
<source>Developer Mode Disabled</source>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="316"/>
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="145"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="242"/>
|
||||||
|
<location filename="../src/pages/appintopage.cpp" line="339"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="139"/>
|
<location filename="../src/pages/appintopage.cpp" line="152"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="214"/>
|
<location filename="../src/pages/appintopage.cpp" line="231"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="308"/>
|
<location filename="../src/pages/appintopage.cpp" line="327"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="341"/>
|
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="219"/>
|
<location filename="../src/pages/appintopage.cpp" line="236"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="345"/>
|
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="356"/>
|
<location filename="../src/pages/appintopage.cpp" line="383"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="345"/>
|
<location filename="../src/pages/appintopage.cpp" line="372"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/appintopage.cpp" line="356"/>
|
<location filename="../src/pages/appintopage.cpp" line="383"/>
|
||||||
<source>The URL has been copied to the clipboard</source>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -232,102 +237,121 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>DAboutDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/application.cpp" line="88"/>
|
||||||
|
<source>Version: %1</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/application.cpp" line="95"/>
|
||||||
|
<source>%1 is released under %2</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>DownloadItem</name>
|
<name>DownloadItem</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="20"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="32"/>
|
||||||
<source>Form</source>
|
<source>Form</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="50"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="74"/>
|
||||||
<source>icon</source>
|
<source>icon</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="82"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="134"/>
|
||||||
<source>TextLabel</source>
|
<source>TextLabel</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="106"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="121"/>
|
||||||
<source>Name</source>
|
<source>Name</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="198"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="226"/>
|
||||||
<source>Waiting to download</source>
|
<source>Waiting to download</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="249"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="277"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="268"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="296"/>
|
||||||
<source>Cancel</source>
|
<source>Cancel</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.ui" line="287"/>
|
<location filename="../src/widgets/common/downloaditem.ui" line="315"/>
|
||||||
<source>Info</source>
|
<source>Info</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="40"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="43"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="44"/>
|
||||||
<source>Download Complete.</source>
|
<source>Download Complete.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="148"/>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
|
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="167"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="99"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="104"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="105"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="148"/>
|
||||||
<source>Installation complete.</source>
|
<source>Installation complete.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="143"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="149"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="150"/>
|
||||||
<source>Finish</source>
|
<source>Finish</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="150"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="157"/>
|
||||||
<source>Retry</source>
|
<source>Retry</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
|
||||||
<source>Error happened in dpkg progress , you can try it again.</source>
|
<source>Error happened in dpkg progress , you can try it again.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="153"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="160"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="161"/>
|
||||||
<source>Error happened in dpkg progress , you can try it again</source>
|
<source>Error happened in dpkg progress , you can try it again</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="167"/>
|
||||||
<source>dpkg progress had been aborted,you can retry installation.</source>
|
<source>dpkg progress had been aborted,you can retry installation.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="160"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="168"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="169"/>
|
||||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/common/downloaditem.cpp" line="181"/>
|
<location filename="../src/widgets/common/downloaditem.cpp" line="189"/>
|
||||||
|
<location filename="../src/widgets/common/downloaditem.cpp" line="190"/>
|
||||||
<source>Download canceled</source>
|
<source>Download canceled</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -345,7 +369,7 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widgets/downloadlistwidget.ui" line="110"/>
|
<location filename="../src/widgets/downloadlistwidget.ui" line="116"/>
|
||||||
<source>Open download directory</source>
|
<source>Open download directory</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@ -358,152 +382,128 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="160"/>
|
<location filename="../src/mainwindow-dtk.ui" line="166"/>
|
||||||
<source>Home</source>
|
<source>Home</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="197"/>
|
<location filename="../src/mainwindow-dtk.ui" line="203"/>
|
||||||
<source>Network</source>
|
<source>Network</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="225"/>
|
<location filename="../src/mainwindow-dtk.ui" line="231"/>
|
||||||
<source>Chat</source>
|
<source>Chat</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="253"/>
|
<location filename="../src/mainwindow-dtk.ui" line="259"/>
|
||||||
<source>Music</source>
|
<source>Music</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="281"/>
|
<location filename="../src/mainwindow-dtk.ui" line="287"/>
|
||||||
<source>Video</source>
|
<source>Video</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="309"/>
|
<location filename="../src/mainwindow-dtk.ui" line="315"/>
|
||||||
<source>Picture</source>
|
<source>Picture</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="337"/>
|
<location filename="../src/mainwindow-dtk.ui" line="343"/>
|
||||||
<source>Game</source>
|
<source>Game</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="365"/>
|
<location filename="../src/mainwindow-dtk.ui" line="371"/>
|
||||||
<source>Office</source>
|
<source>Office</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="393"/>
|
<location filename="../src/mainwindow-dtk.ui" line="399"/>
|
||||||
<source>Reading</source>
|
<source>Reading</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="421"/>
|
<location filename="../src/mainwindow-dtk.ui" line="427"/>
|
||||||
<source>Development</source>
|
<source>Development</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="449"/>
|
<location filename="../src/mainwindow-dtk.ui" line="455"/>
|
||||||
<source>Tool</source>
|
<source>Tool</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="477"/>
|
<location filename="../src/mainwindow-dtk.ui" line="483"/>
|
||||||
<source>Theme</source>
|
<source>Theme</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="505"/>
|
<location filename="../src/mainwindow-dtk.ui" line="511"/>
|
||||||
<source>Other</source>
|
<source>Other</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.ui" line="533"/>
|
<location filename="../src/mainwindow-dtk.ui" line="539"/>
|
||||||
<source>APP Upgrade</source>
|
<source>APP Upgrade</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="34"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="45"/>
|
||||||
<source>Submit App</source>
|
<source>Submit App</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="35"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="46"/>
|
||||||
<source>Submit App with client(Recommanded)</source>
|
<source>Submit App with client(Recommanded)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="36"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="47"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="37"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="48"/>
|
||||||
<source>APP Upgrade and Install Settings</source>
|
<source>APP Upgrade and Install Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="158"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="161"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="159"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="162"/>
|
||||||
<source>Search or enter spk://</source>
|
<source>Search or enter spk://</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
|
||||||
<name>QLabel</name>
|
|
||||||
<message>
|
|
||||||
<source>Spark应用商店</source>
|
|
||||||
<translation type="vanished">Spark Store</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>社区驱动的一款为第三方应用商店,为改变而生
|
|
||||||
本程序按GPL第三版开源</source>
|
|
||||||
<translation type="vanished">Un app store tier alimenté par la communauté Deepin
|
|
||||||
Spark Store est publié sous licence GPL V3
|
|
||||||
Nous sommes nés pour le changement.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/main.cpp" line="64"/>
|
|
||||||
<location filename="../src/main.cpp" line="73"/>
|
|
||||||
<source>Spark Store</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/main.cpp" line="61"/>
|
<location filename="../src/application.cpp" line="26"/>
|
||||||
<source>We publish this program under GPL V3</source>
|
<location filename="../src/application.cpp" line="27"/>
|
||||||
<translation type="unfinished"></translation>
|
<location filename="../src/mainwindow-dtk.cpp" line="22"/>
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/main.cpp" line="66"/>
|
|
||||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/main.cpp" line="75"/>
|
|
||||||
<source>The Spark Project</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../src/main.cpp" line="79"/>
|
|
||||||
<location filename="../src/main.cpp" line="81"/>
|
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/main.cpp" line="84"/>
|
<location filename="../src/application.cpp" line="31"/>
|
||||||
<source><span style='font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style='font-size:12pt;'>Spark developers</span><br/><br/>Published under GPL V3</source>
|
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/application.cpp" line="92"/>
|
||||||
|
<source>Spark Project</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/widgets/downloadlistwidget.cpp" line="10"/>
|
||||||
|
<source>Download list</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
@ -595,212 +595,19 @@ Nous sommes nés pour le changement.</translation>
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/settingspage.cpp" line="181"/>
|
<location filename="../src/pages/settingspage.cpp" line="213"/>
|
||||||
<source>Updating, please wait...</source>
|
<source>Updating, please wait...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/settingspage.cpp" line="204"/>
|
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/pages/settingspage.cpp" line="204"/>
|
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||||
<source>Temporary cache was cleaned</source>
|
<source>Temporary cache was cleaned</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
|
||||||
<name>Widget</name>
|
|
||||||
<message>
|
|
||||||
<source>视频播放</source>
|
|
||||||
<translatorcomment>Lecteurs vidéo et créateurs vidéo</translatorcomment>
|
|
||||||
<translation type="vanished">Vidéo</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>下载列表</source>
|
|
||||||
<translation type="vanished">Liste de téléchargement</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>系统工具</source>
|
|
||||||
<translation type="vanished">Outils</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>主题美化</source>
|
|
||||||
<translatorcomment>Thème des icônes et autres </translatorcomment>
|
|
||||||
<translation type="vanished">Thèmes</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>音乐欣赏</source>
|
|
||||||
<translation type="vanished">Musique</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>编程开发</source>
|
|
||||||
<translation type="vanished">Développement</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>办公学习</source>
|
|
||||||
<translation type="vanished">Bureau</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>阅读翻译</source>
|
|
||||||
<translation type="vanished">Traduire</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>其他应用</source>
|
|
||||||
<translation type="vanished">Autres</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>商店首页</source>
|
|
||||||
<translation type="vanished">Accueil</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>图形图像</source>
|
|
||||||
<translation type="vanished">Images</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>游戏娱乐</source>
|
|
||||||
<translation type="vanished">Jeux</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>社交沟通</source>
|
|
||||||
<translation type="vanished">Chat</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>网络应用</source>
|
|
||||||
<translation type="vanished">Réseau</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>当前下载列表为空</source>
|
|
||||||
<translation type="vanished">La liste de téléchargement est vide</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>打开文件夹</source>
|
|
||||||
<translation type="vanished">Ouvrir dans le gestionnaire de fichiers</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>安装</source>
|
|
||||||
<translation type="vanished">Installer</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>卸载</source>
|
|
||||||
<translation type="vanished">Supprimer</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>官网</source>
|
|
||||||
<translation type="vanished">Site</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>软件名</source>
|
|
||||||
<translation type="vanished">Nom</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>图标</source>
|
|
||||||
<translation type="vanished">Icon</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>分享</source>
|
|
||||||
<translation type="vanished">Partager</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>详细介绍</source>
|
|
||||||
<translation type="vanished">Détails</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source><html><head/><body><p>由社区爱好者开发的软件商店</p></body></html></source>
|
|
||||||
<translation type="vanished"><html><head/><body><p>magasin de logiciels développé par des passionnés de la communauté</p></body></html></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>软件截图</source>
|
|
||||||
<translation type="vanished">Captures d'écran</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>线路设置</source>
|
|
||||||
<translation type="vanished">Line Settings</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>线路选择:</source>
|
|
||||||
<translation type="vanished">Choisissez: </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>刷新</source>
|
|
||||||
<translation type="vanished">Mise à jour</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source> 重启商店后生效</source>
|
|
||||||
<translation type="vanished">Redémarrez pour prendre effet</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source><html><head/><body><p>源服务器的作用是保证软件更新,并且支持使用apt工具获取软件。通常我们更建议你使用第一个线路作为更新源,一般是最稳定的。</p></body></html></source>
|
|
||||||
<translation type="vanished"><html><head/><body><p>Le rôle du serveur source est de s'assurer que le logiciel est mis à jour et prend en charge l'utilisation de l'outil apt pour obtenir le logiciel. Nous préférons généralement que vous utilisiez la première ligne comme source de mise à jour, qui est généralement la plus stable. </p></body></html></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>更新源</source>
|
|
||||||
<translation type="vanished">Mettre à jour la source APT</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>更新源服务器:</source>
|
|
||||||
<translation type="vanished">Source APT: </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>服务器</source>
|
|
||||||
<translation type="vanished">serveur</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>缓存目录</source>
|
|
||||||
<translation type="vanished">Temp</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>清空</source>
|
|
||||||
<translation type="vanished">Nettoyer</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>因为这个目录位于/tmp下,所以即使你不手动清空的话,其也将在系统重启时自动清空。</source>
|
|
||||||
<translation type="vanished">Étant donné que ce répertoire se trouve sous /tmp, même si vous ne l'effacez pas manuellement, il sera effacé automatiquement au redémarrage du système.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>目录大小:</source>
|
|
||||||
<translation type="vanished">Taille: </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>0B</source>
|
|
||||||
<translation type="obsolete">0B</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>目录位置:/tmp/spark-store</source>
|
|
||||||
<translation type="vanished">Emplacement:/tmp/spark-store</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>关于我们</source>
|
|
||||||
<translation type="vanished">À propos de nous</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source><html><head/><body><p>我们并不是官方团队,和你一样,我们也只是众多Linux/deepin系统爱好者和用户之中的一员,我们开发并且运营这个“Spark应用商店”,是为了让社区的朋友们一起分享好用的软件,或者一起参与开发,让大家都用到最新的,最优秀的软件。</p><p>我们并没有因此盈利,所有开发和维护人员都不会获得报酬,我们的主要支出大部分依赖于社区对我们的捐助,很感谢大家,这部分捐助让我们并不需要耗费太多精力去担心资金问题。</p><p>我们的服务和开发的软件都是免费供给大家使用,交流,学习的,但是在您的使用过程中一定要遵守当地的法律法规,否则出现任何问题和我们无关。</p><p>如果商店中任何一部分有侵犯您权益的行为,请告知我们&lt;jifengshenmo@outlook.com&gt;,我们会第一时间删除侵权内容。</p><p>如果你也想参与我们,不管是参与开发,设计,投递还是投稿作品,我们都欢迎你的加入。</p><p>QQ群:872690351<br/></p></body></html></source>
|
|
||||||
<translation type="vanished"><html><head/><body><p>Nous ne sommes pas l'équipe officielle, tout comme vous, nous ne sommes qu'un des nombreux passionnés et utilisateurs de systèmes Linux / deepin, nous développons et gérons le "Spark Store"! ", est de rassembler la communauté pour partager des logiciels utiles, ou pour participer au développement ensemble, afin que nous utilisions tous les derniers et meilleurs logiciels. </p><p> Nous n'en tirons aucun profit, tous les développeurs et mainteneurs ne sont pas payés, et nous comptons sur les dons de la communauté pour la plupart de nos dépenses, dont nous sommes reconnaissants et qui nous permettent de ne pas dépenser trop d'énergie se soucier du financement. </p><p>Notre service et nos logiciels sont gratuits pour tout le monde à utiliser, à communiquer et à apprendre, mais vous devez vous conformer aux lois et réglementations locales dans le processus de votre utilisation, sinon tout problème n'a rien à voir avec nous. </p><p>Si une partie du magasin enfreint vos droits, veuillez nous en informer &lt;jifengshenmo@outlook.com&gt; nous retirerons le contenu en infraction dès que possible. </p><p>Si vous souhaitez également vous impliquer avec nous, que vous soyez impliqué dans le développement, la conception, le pitching ou la soumission de travaux, nous vous invitons à nous rejoindre. </p><p>QQ group:872690351<br/></p></body></html></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
<context>
|
|
||||||
<name>downloadlist</name>
|
|
||||||
<message>
|
|
||||||
<source>名称</source>
|
|
||||||
<translation type="vanished">Nom</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>等待开始下载</source>
|
|
||||||
<translatorcomment>Attendez pour téléchargerd</translatorcomment>
|
|
||||||
<translation type="vanished">Attendez pour télécharger</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>安装</source>
|
|
||||||
<translation type="vanished">Installer</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>取消</source>
|
|
||||||
<translation type="vanished">Annuler</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>详情</source>
|
|
||||||
<translation type="vanished">Détail</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
|
||||||
</TS>
|
</TS>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user