Merge pull request !252 from shenmo/dev
This commit is contained in:
shenmo 2024-01-11 15:29:23 +00:00 committed by Gitee
commit ef038f5763
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
27 changed files with 401 additions and 593 deletions

View File

@ -1,328 +0,0 @@
#### 说明
当前服务器线路列表(项目中包含):
```
https://d.store.deepinos.org.cn/
https://store.deepinos.org.cn/
```
# 星火应用商店文档
# 目录结构
几个目录结构
```
/
/icons 图标文件夹
/tags 首页图标
/tras 多语言翻译
```
主要的文件分析
```js
spark-store.pro Qt工程配置文件
ssinstall 调用包安装器的脚本
icons.qrc 图标资源文件
main.cpp 入口文件
widget.h widget.cpp widget.ui 主要窗口控件
downloadlist.h downloadlist.cpp downloadlist.ui 单个软件的下载安装展示控件
progressload.h progressload.cpp 网页加载显示? 得在deepin上编译运行才能搞清楚
workerthreads.h workerthreads.cpp 应用信息加载线程
image_show.h image_show.cpp 应用页面截图预览控件
big_image.h big_image.cpp 大图查看控件
```
# 使用的开源库及第三方工具
* GDebi 一个 Ubuntu 软件中心的轻量级替代品 https://linux.cn/article-4982-1.html
* libnotify 系统通知 https://developer.gnome.org/libnotify/unstable/
# 源码分析
## 应用的组成部分
左侧应用分类菜单
主窗口的下拉菜单
应用列表页面
应用详情页面
应用首页,有几个链接跳转
商店设置页面
下载列表页面
## 应用初始化,及主控件加载
初始化 `DApplication` 进入事件循环。
设置关于我们弹窗 `DAboutDialog`
主控件 Widget 根据不同屏幕大小自适应。
首页打开webview页面如果传入了`spk://`参数,会打开应用详情页。
```cpp
// main.cpp
QString arg1=argv[1];
if(arg1.left(6)=="spk://"){
w.openUrl(QUrl(argv[1]));
}
// widget.cpp
void Widget::openUrl(QUrl u)
{
QString app=serverUrl + "store"+u.path()+"/app.json";
ui->webEngineView->setUrl(app); // 会触发 webEngineView 的
}
```
## Tags处理方式
**Tags处理方式**
```cpp
// widget.cpp
QString tags=json["Tags"].toString(); //Read the Tags
QStringList tagList=tags.split(";");
for (int i=0;i<tagList.size();i++) {
if(tagList[i]=="community")
ui->tag_community->show();//Tags icon shows like this
if(tagList[i]=="ubuntu")
ui->tag_ubuntu->show();
if(tagList[i]=="deepin")
ui->tag_deepin->show();
if(tagList[i]=="uos")
ui->tag_uos->show();
if(tagList[i]=="dtk5")
ui->tag_dtk5->show();
if(tagList[i]=="dwine2")
ui->tag_dwine2->show();
if(tagList[i]=="dwine5")
ui->tag_dwine5->show();
if(tagList[i]=="a2d")
ui->tag_a2d->show();
}
```
**Widget 初始化**
```cpp
void Widget::initConfig()
{
...
// 读取服务器URL并初始化菜单项的链接
QSettings readConfig(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
if(readConfig.value("server/choose").toString()!=""){
ui->comboBox_server->setCurrentText(readConfig.value("server/choose").toString());
appinfoLoadThread.setServer(serverUrl=readConfig.value("server/choose").toString());
}else {
appinfoLoadThread.setServer(serverUrl="http://sucdn.jerrywang.top/"); // 默认URL
}
configCanSave=true; // 防止触发保存配置信号
menuUrl[0]=serverUrl + "store/#/"; // 首页
// 下面是各个应用分类页面直接加载的webview的
// 每个连接对应一个左侧的菜单项,在构造函数用连接到 chooseLeftMenu 槽函数
menuUrl[1]=serverUrl + "store/#/network";
...
menuUrl[12]=serverUrl + "store/#/others";
...
ui->webfoot->hide();
//初始化首页
ui->webEngineView->setUrl(menuUrl[0]);
}
/**
* 菜单切换逻辑
*
*/
void Widget::chooseLeftMenu(int index)
{
nowMenu=index;
updateUI();
left_list[index]->setStyleSheet("color:#FFFFFF;background-color:"+main_color.name()+";border-radius:8;border:0px");
// index <=12 加载某个分类的应用列表的webviejw
// index == 13 加载下载列表页面
if(index<=12){
if(themeIsDark){
darkurl = 夜间模式的URL
ui->webEngineView->setUrl(darkurl);
}else {
ui->webEngineView->setUrl(menuUrl[index]);
}
ui->stackedWidget->setCurrentIndex(0);
}else if (index==13) {
ui->stackedWidget->setCurrentIndex(1);
}
}
```
## 应用下载安装卸载分析
**应用详情页面加载**
```cpp
/**
* 加载单个应用的信息
*/
void Widget::on_webEngineView_urlChanged(const QUrl &arg1)
{
//分析出服务器中的分类名称
...
//如果是app.json就打开详情页
if(arg1.path().right(8)=="app.json"){
...
// 读取相应的应用信息
appinfoLoadThread.requestInterruption();
appinfoLoadThread.wait(100);
appinfoLoadThread.setUrl(arg1);
appinfoLoadThread.start();
}
}
// 设置详情页的APP信息
SpkAppInfoLoaderThread::requestSetAppInformation() -> Widget::sltAppinfoDetails()
// 设置详情页的APP图标
SpkAppInfoLoaderThread::finishedIconLoad() -> Widget::sltAppinfoIcon()
// 设置详情页的APP截图
SpkAppInfoLoaderThread::finishedScreenshotLoad() -> Widget::sltAppinfoScreenshot()
// 下载APP详情信息线程
void SpkAppInfoLoaderThread::run()
{
QProcess get_json;
get_json.start("curl -o app.json " + targetUrl.toString());
QFile app_json("app.json");
读取 app.json 里的信息,提取应用名、描述、图标、截图
处理完毕后发射相应的信号
}
```
**应用下载**
Widget::on_pushButton_download_clicked() 是点击下载的安装方法。
最终使用的是 `QNetwrokAccessManager` 进行GET请求获取数据写入文件。
```cpp
void Widget::on_pushButton_download_clicked()
{
if(!isBusy){
file = new QFile(fileName);
...
nowDownload+=1;
startRequest(urList.at(nowDownload-1)); // 进行链接请求
}
}
void Widget::startRequest(QUrl url)
{
reply = manager->get(QNetworkRequest(url));
// 请求响应完成,关闭文件,清理下载队列
connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));
// 接收应用下载数据
connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));
// 更新应用下载进度
connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));
}
```
使用 QSettings 来读取配置,更换服务源
```cpp
void Widget::on_comboBox_server_currentIndexChanged(const QString &arg1)
{
appinfoLoadThread.setServer(arg1); // 服务器信息更新
if(configCanSave){
ui->label_setting1->show();
QSettings *setConfig=new QSettings(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
setConfig->setValue("server/choose",arg1);
}
}
```
使用 `QProcess` 来调用各种小文件下载、包安装卸载的命令。
**应用安装**
```cpp
void Widget::httpFinished() // 完成下载
{
...清理资源
download_list[nowDownload-1].readyInstall();
download_list[nowDownload-1].free=true;
if(nowDownload<allDownload){ // 如果有排队则下载下一个
...队列的下一个下载请求
}
}
void downloadlist::readyInstall()
{
...将安装按钮设置为允许点击
ui->pushButton_install->setEnabled(true);
ui->pushButton_install->show();
ui->pushButton_2->hide();
Widget::sendNotification(tr("Finished downloading %1, awaiting to install").arg(ui->label->text()), 5000,
"/tmp/spark-store/icon_"+QString::number(num).toUtf8()+".png");
}
void downloadlist::on_pushButton_install_clicked()
{
//弹出菜单
menu_install->exec(cursor().pos());
}
在 downloadlist 构造函数里将三种安装方式的按钮按条件放入了 menu_install 菜单里
用户点击时downloadlist::install() 方法
三种安装方式为: gdebi, dpkg, deepin-deb-installer
void downloadlist::install(int t)
{
QtConcurrent::run([=](){
QProcess installer;
installer.start("pkexec gdebi -n /tmp/spark-store/"+ui->label_filename->text().toUtf8());
installer.start("pkexec ssinstall /tmp/spark-store/"+ui->label_filename->text().toUtf8());
installer.start("deepin-deb-installer /tmp/spark-store/"+ui->label_filename->text().toUtf8());
});
}
```
**应用卸载**
```cpp
void Widget::on_pushButton_uninstall_clicked()
{
QtConcurrent::run([=](){
uninstall.start("pkexec apt purge -y "+pkgName);
});
}
```
**仓库源更新**
```cpp
// 更新源列表
void Widget::on_pushButton_updateServer_clicked()
{
QtConcurrent::run([=](){
...
QFile::remove(QDir::homePath().toUtf8()+"/.config/spark-store/server.list");
system("curl -o "+QDir::homePath().toUtf8()+"/.config/spark-store/server.list http://dcstore.shenmo.tech/store/server.list");
server.open(QDir::homePath().toUtf8()+"/.config/spark-store/server.list",std::ios::in);
...
while (getline(server,lineTmp)) {
ui->comboBox_server->addItem(QString::fromStdString(lineTmp));
}
});
}
// 更新星火商店apt源
void Widget::on_pushButton_updateApt_clicked()
{
QtConcurrent::run([=](){
读取 comboBox_server 的内容,写入 /tmp/spark-store/sparkstore.list 文件
创建bash脚本内容为将 sparkstore.list 移动到 /etc/apt/sources.list.d/ 目录下
使用QProcess 执行命令 pkexec update.sh
}):
}
```
## 发送系统通知
```cpp
#include <libnotify/notify.h>
static NotifyNotification *_notify = nullptr; // 初始化
notify_init(tr("Spark\\ Store").toLocal8Bit()); // 构造函数初始化
notify_uninit(); // 析构函数调用
void Widget::sendNotification(const QString &message, const int msTimeout, const QString &icon)
{
if(_notify == nullptr)
{
_notify = notify_notification_new(tr("Spark\\ Store").toLocal8Bit(), message.toLocal8Bit(), icon.toLocal8Bit());
notify_notification_set_timeout(_notify, msTimeout);
}
else
notify_notification_update(_notify, tr("Spark\\ Store").toLocal8Bit(), message.toLocal8Bit(), icon.toLocal8Bit());
notify_notification_show(_notify, nullptr);
}
```

16
LICENSE
View File

@ -6,9 +6,13 @@
1. 对本仓库下的所有文件生效:本许可证适用于本仓库(或项目)下的所有文件。任何使用、修改或再发布本软件的个人或组织都必须遵守本许可证。 1. 对本仓库下的所有文件生效:本许可证适用于本仓库(或项目)下的所有文件。任何使用、修改或再发布本软件的个人或组织都必须遵守本许可证。
2. 版权声明和许可证文件:您不得移除、隐藏或更改本软件中包含的原作者的版权声明和许可证文件。保留原作者的权益信息对于维护开源软件生态系统至关重要。 2. 版权声明和许可证文件:您不得移除、隐藏或更改本软件中包含的原作者的版权声明和许可证文件。保留原作者的权益信息对于维护开源软件生态系统至关重要。
3. 版本标注:如果您对本软件做出修改并再发布,您必须在醒目位置标注此版本并非星火社区官方提供。这样可以避免误导使用者认为该软件为星火社区官方提供的版本。 3. 版本标注: 如果您对本软件做出修改并再发布,您必须在醒目位置标注此版本并非星火社区官方提供。这样可以避免误导使用者认为该软件为星火社区官方提供的版本。此软件仅授权用于个人非盈利用途,任何将其用于商业目的或在盈利性组织中使用的行为均需事先获得星火社区的书面许可。
4. 商标使用您不得在再发布版本中使用“星火应用商店”、“Spark Store”或星火应用商店的Logo等可能误导使用者此软件由星火社区官方提供的信息。 4. 商标使用您不得在再发布版本中使用“星火应用商店”、“Spark Store”或星火应用商店的Logo等可能误导使用者此软件由星火社区官方提供的信息。
5. 其他条款:除上述约定外,您应遵守 GPL v3 的所有其他条款和要求。 5. 服务条款:您使用星火商店软件的行为将被视为您同意星火在不侵犯您隐私的前提下搜集版本、日志等信息,以便于星火社区更好地为您提供服务。
6. 仓库版权条款:为了更好的提供持续性服务,星火仅对个人用户免费开放服务仓库,如您或您的组织需要提供商业服务或者您的组织为盈利性组织,请联系星火社区获取商业授权。
7. 禁止恶意行为和批量爬取: 用户或组织在使用本软件时,严禁进行任何形式的恶意行为,包括但不限于恶意攻击、滥用、破坏、批量爬取软件仓库等。恶意行为的定义由星火社区自行判断,违反者将被追究法律责任。
8. 分发与再分发权利: 星火社区保留对其制作的软件包的分发权利。未经明确授权,禁止任何个人或组织将星火社区软件包用于商业目的或在未获得星火社区许可的情况下进行再分发。此条款旨在确保开源精神的同时,维护星火社区的知识产权。
9. 其他条款:除上述约定外,若您使用了星火商店的主程序或其部分代码,您应遵守 GPL v3 的所有其他条款和要求。
GPLV3许可证的完整文本可以在以下链接找到https://www.gnu.org/licenses/gpl-3.0.html GPLV3许可证的完整文本可以在以下链接找到https://www.gnu.org/licenses/gpl-3.0.html
@ -22,8 +26,12 @@ This software is free software; you can modify and redistribute it under the ter
1. Applicability to all files in this repository: This license applies to all files in this repository (or project). Any individuals or organizations that use, modify, or redistribute this software must comply with this license. 1. Applicability to all files in this repository: This license applies to all files in this repository (or project). Any individuals or organizations that use, modify, or redistribute this software must comply with this license.
2. Copyright notice and license files: You must not remove, hide, or modify the copyright notice and license files of the original authors included in this software. Preserving the rights information of the original authors is essential for maintaining the open-source software ecosystem. 2. Copyright notice and license files: You must not remove, hide, or modify the copyright notice and license files of the original authors included in this software. Preserving the rights information of the original authors is essential for maintaining the open-source software ecosystem.
3. Version annotation: If you modify this software and redistribute it, you must prominently annotate that this version is not provided by the Spark community officially. This is to avoid misleading users into believing that the software is provided by the official Spark community. 3. Version annotation: If you modify and redistribute this software, you must mark in a prominent position that this version is not officially provided by the Spark community. This avoids misleading users into thinking that the software is an official version provided by the Spark community. This software is licensed for personal, non-profit use only, and any use of it for commercial purposes or in for-profit organizations requires the prior written permission of the Spark Community.
4. Trademark usage: You are not allowed to use terms such as "Spark App Store," "Spark Store," or the logo of Spark App Store in redistributed versions, as they may mislead users into believing that the software is provided by the official Spark community. 4. Trademark usage: You are not allowed to use terms such as "Spark App Store," "Spark Store," or the logo of Spark App Store in redistributed versions, as they may mislead users into believing that the software is provided by the official Spark community.
5. Additional terms: Apart from the above provisions, you must comply with all other terms and requirements of GPL v3. 5. Terms of Service: Your use of the software of Spark Store will be deemed as your consent to collect version, log and other information on the premise of not violating your privacy, so as to facilitate the Spark community to provide you with better services.
6. Warehouse copyright terms: In order to better provide continuous services, Spark is only free for individual users to open the service warehouse, if you or your organization needs to provide commercial services or your organization is a for-profit organization, please contact Spark community to obtain commercial authorization.
7. Prohibited malicious behavior and mass crawling: Users or organizations are strictly prohibited to engage in any form of malicious behavior when using the software, including but not limited to malicious attacks, abuse, destruction, and mass crawling of software warehouses. The definition of malicious behavior is judged by the Spark community, and violators will be held legally responsible.
8. Distribution and redistribution rights: Spark Community reserves the right to distribute the software packages it produces. Any person or organization is prohibited from using the Spark Community software package for commercial purposes or redistributing it without the express authorization of the Spark Community. This clause is intended to ensure the spirit of open source while safeguarding the intellectual property rights of the Spark community.
9. Other Terms: In addition to the above, if you use the Spark Store main program or part of its code, you are subject to all other terms and requirements of GPL v3.
You can find the full text of GPLV3 license at: https://www.gnu.org/licenses/gpl-3.0.html You can find the full text of GPLV3 license at: https://www.gnu.org/licenses/gpl-3.0.html

View File

@ -20,16 +20,17 @@ To improve this situation, we have launched this app store. We have broadly incl
**Important Notice:** This software does not provide any form of warranty. If you plan to use it on UOS Professional Edition, please make sure to understand and enable Developer Mode. Make sure you have basic troubleshooting capabilities. It should be clear that we have not conducted extensive testing on the UOS operating system. Therefore, using the Spark client may lead to a series of issues like failed system updates, data loss, etc., all risks to be borne by the user. **Important Notice:** This software does not provide any form of warranty. If you plan to use it on UOS Professional Edition, please make sure to understand and enable Developer Mode. Make sure you have basic troubleshooting capabilities. It should be clear that we have not conducted extensive testing on the UOS operating system. Therefore, using the Spark client may lead to a series of issues like failed system updates, data loss, etc., all risks to be borne by the user.
## Team Collaboration: For detailed documentation related to branch management, please see [this link](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo). ## Team Collaboration: For detailed documentation related to branch management, please see [this link](https://spark-store-project.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo).
We warmly welcome you to join our development team. Whether you want to participate in development or submit applications, you can find your place here to jointly promote the development of the Linux application ecosystem. We warmly welcome you to join our development team. Whether you want to participate in development or submit applications, you can find your place here to jointly promote the development of the Linux application ecosystem.
You can track our Issue handling status in real-time through the following link: [Gitee Issue Board](https://gitee.com/deepin-community-store/spark-store/board). You can track our Issue handling status in real-time through the following link: [Gitee Issue Board](https://gitee.com/spark-store-project/spark-store/board).
If you have a software package you'd like to submit, please [click here to submit](https://upload.deepinos.org/index). If you have a software package you'd like to submit, please [click here to submit](https://upload.deepinos.org/index).
## Contents ## Contents
- [Read the copyright](#read-the-copyright)
- [Determine your system architecture](#determine-your-system-architecture) - [Determine your system architecture](#determine-your-system-architecture)
- [System support and installation guide](#system-support-and-installation-guide) - [System support and installation guide](#system-support-and-installation-guide)
- [For Deepin / UOS Users](#for-deepin-users) - [For Deepin / UOS Users](#for-deepin-users)
@ -40,6 +41,26 @@ If you have a software package you'd like to submit, please [click here to submi
--- ---
## Read the copyright
Spark Opensource LICENSE
Copyright (C) 2023 The Spark Community
This software is free software; you can modify and redistribute it under the terms of the GNU General Public License version 3 (GPL v3). However, to protect the rights of the original authors and the interests of the community users, please adhere to the following terms:
1. Applicability to all files in this repository: This license applies to all files in this repository (or project). Any individuals or organizations that use, modify, or redistribute this software must comply with this license.
2. Copyright notice and license files: You must not remove, hide, or modify the copyright notice and license files of the original authors included in this software. Preserving the rights information of the original authors is essential for maintaining the open-source software ecosystem.
3. Version annotation: If you modify and redistribute this software, you must mark in a prominent position that this version is not officially provided by the Spark community. This avoids misleading users into thinking that the software is an official version provided by the Spark community. This software is licensed for personal, non-profit use only, and any use of it for commercial purposes or in for-profit organizations requires the prior written permission of the Spark Community.
4. Trademark usage: You are not allowed to use terms such as "Spark App Store," "Spark Store," or the logo of Spark App Store in redistributed versions, as they may mislead users into believing that the software is provided by the official Spark community.
5. Terms of Service: Your use of the software of Spark Store will be deemed as your consent to collect version, log and other information on the premise of not violating your privacy, so as to facilitate the Spark community to provide you with better services.
6. Warehouse copyright terms: In order to better provide continuous services, Spark is only free for individual users to open the service warehouse, if you or your organization needs to provide commercial services or your organization is a for-profit organization, please contact Spark community to obtain commercial authorization.
7. Prohibited malicious behavior and mass crawling: Users or organizations are strictly prohibited to engage in any form of malicious behavior when using the software, including but not limited to malicious attacks, abuse, destruction, and mass crawling of software warehouses. The definition of malicious behavior is judged by the Spark community, and violators will be held legally responsible.
8. Distribution and redistribution rights: Spark Community reserves the right to distribute the software packages it produces. Any person or organization is prohibited from using the Spark Community software package for commercial purposes or redistributing it without the express authorization of the Spark Community. This clause is intended to ensure the spirit of open source while safeguarding the intellectual property rights of the Spark community.
9. Other Terms: In addition to the above, if you use the Spark Store main program or part of its code, you are subject to all other terms and requirements of GPL v3.
You can find the full text of GPLV3 license at: https://www.gnu.org/licenses/gpl-3.0.html
## Determine your system architecture ## Determine your system architecture
Before installing any software, you need to know what architecture your computer runs on (such as x86_64/amd64 or aarch64/arm64). Before installing any software, you need to know what architecture your computer runs on (such as x86_64/amd64 or aarch64/arm64).
@ -68,7 +89,7 @@ You will see an output, and that's your system architecture.
> appstore://deepin-home-appstore-client?app_detail_info/spark-store > appstore://deepin-home-appstore-client?app_detail_info/spark-store
To use the latest version, please visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases) and download the latest version suitable for Deepin. Install to use. To use the latest version, please visit the [Spark App Store Release page](https://gitee.com/spark-store-project/spark-store/releases) and download the latest version suitable for Deepin. Install to use.
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install: Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
@ -88,7 +109,7 @@ You will see an output, and that's your system architecture.
2. **Download and Install** 2. **Download and Install**
Visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases), download the installation package that matches your computer's architecture, and install it. Visit the [Spark App Store Release page](https://gitee.com/spark-store-project/spark-store/releases), download the installation package that matches your computer's architecture, and install it.
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install: Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
@ -103,7 +124,7 @@ You will see an output, and that's your system architecture.
2. **Download and Install** 2. **Download and Install**
Visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases), download the installation package that matches your computer's architecture, and install it. Visit the [Spark App Store Release page](https://gitee.com/spark-store-project/spark-store/releases), download the installation package that matches your computer's architecture, and install it.
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install: Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
@ -123,7 +144,7 @@ You will see an output, and that's your system architecture.
2. **Download and Install** 2. **Download and Install**
Please visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases) and download. Install to use. Please visit the [Spark App Store Release page](https://gitee.com/spark-store-project/spark-store/releases) and download. Install to use.
#### For Debian 12+ Users #### For Debian 12+ Users
@ -131,7 +152,7 @@ You will see an output, and that's your system architecture.
2. **Download and Install** 2. **Download and Install**
Please visit the [Spark App Store Release page](https://gitee.com/deepin-community-store/spark-store/releases), download the installation package that matches your computer's architecture, and install it. Please visit the [Spark App Store Release page](https://gitee.com/spark-store-project/spark-store/releases), download the installation package that matches your computer's architecture, and install it.
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install: Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
@ -144,17 +165,18 @@ You will see an output, and that's your system architecture.
## Frequently Asked Questions (FAQ) ## Frequently Asked Questions (FAQ)
Please refer to the [Spark App Store FAQ and Support Guide](https://gitee.com/deepin-community-store/spark-store/blob/dev/FAQ.md). Please refer to the [Spark App Store FAQ and Support Guide](https://gitee.com/spark-store-project/spark-store/blob/dev/FAQ.md).
You can also check the [Chinese version](https://gitee.com/deepin-community-store/spark-store/blob/dev/FAQ.zh.md) here. You can also check the [Chinese version](https://gitee.com/spark-store-project/spark-store/blob/dev/FAQ.zh.md) here.
--- ---
## Contact and Feedback ## Contact and Feedback
- If you have any questions or suggestions, please submit them via email or on our [Gitee page](https://gitee.com/deepin-community-store/spark-store/issues). - If you have any questions or suggestions, please submit them via email or on our [Gitee page](https://gitee.com/spark-store-project/spark-store/issues).
- If you want to follow our development progress, you can go to the [Spark App Store Board](https://gitee.com/deepin-community-store/spark-store/board) for more information. - If you want to follow our development progress, you can go to the [Spark App Store Board](https://gitee.com/spark-store-project/spark-store/board) for more information.
- Our [Forum](https://www.deepinos.org/) - Our [Forum](https://www.deepinos.org/)
- Our [QQ Group](https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/) - Our [QQ Group](https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/)
- For commercial support, please visit [Flamescion Inc.](http://flamescion.cn/)
--- ---

View File

@ -24,19 +24,20 @@ Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。
## 关于团队协作:分支管理相关的详细文档可参见 [此链接](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo)。 ## 关于团队协作:分支管理相关的详细文档可参见 [此链接](https://spark-store-project.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo)。
我们热忱欢迎您加入我们的开发团队。无论您是想参与开发还是想提交应用都能在这里找到属于您的一席之地共同推动Linux应用生态的发展。 我们热忱欢迎您加入我们的开发团队。无论您是想参与开发还是想提交应用都能在这里找到属于您的一席之地共同推动Linux应用生态的发展。
您可以通过以下链接实时跟踪我们的Issue处理状态[Gitee Issue看板](https://gitee.com/deepin-community-store/spark-store/board)。 您可以通过以下链接实时跟踪我们的Issue处理状态[Gitee Issue看板](https://gitee.com/spark-store-project/spark-store/board)。
若您有软件包想要提交,敬请 [点击此处进行投稿](https://deepin-community-store.gitee.io/spark-wiki/#/Submit/Submit)。 若您有软件包想要提交,敬请 [点击此处进行投稿](https://spark-store-project.gitee.io/spark-wiki/#/Submit/Submit)。
## 目录 ## 目录
- [阅读版权声明](#阅读版权声明)
- [确定你的系统架构](#确定你的系统架构) - [确定你的系统架构](#确定你的系统架构)
- [系统支持与安装指引](#系统支持与安装指引) - [系统支持与安装指引](#系统支持与安装指引)
- [对于 Deepin / UOS 用户](#对于deepin用户) - [对于 Deepin / UOS 用户](#对于deepin用户)
@ -47,6 +48,25 @@ Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。
--- ---
## 阅读版权声明
星火开源软件协议Spark Opensource LICENSE
版权所有 (C) 2023 星火社区
根据 GNU 通用公共许可证第三版GPL v3本软件是自由软件您可以修改和再发布它。但是为了维护原作者的权益并保护社区用户的权益您还需要遵守以下条款
1. 对本仓库下的所有文件生效:本许可证适用于本仓库(或项目)下的所有文件。任何使用、修改或再发布本软件的个人或组织都必须遵守本许可证。
2. 版权声明和许可证文件:您不得移除、隐藏或更改本软件中包含的原作者的版权声明和许可证文件。保留原作者的权益信息对于维护开源软件生态系统至关重要。
3. 版本标注: 如果您对本软件做出修改并再发布,您必须在醒目位置标注此版本并非星火社区官方提供。这样可以避免误导使用者认为该软件为星火社区官方提供的版本。此软件仅授权用于个人非盈利用途,任何将其用于商业目的或在盈利性组织中使用的行为均需事先获得星火社区的书面许可。
4. 商标使用您不得在再发布版本中使用“星火应用商店”、“Spark Store”或星火应用商店的Logo等可能误导使用者此软件由星火社区官方提供的信息。
5. 服务条款:您使用星火商店软件的行为将被视为您同意星火在不侵犯您隐私的前提下搜集版本、日志等信息,以便于星火社区更好地为您提供服务。
6. 仓库版权条款:为了更好的提供持续性服务,星火仅对个人用户免费开放服务仓库,如您或您的组织需要提供商业服务或者您的组织为盈利性组织,请联系星火社区获取商业授权。
7. 禁止恶意行为和批量爬取: 用户或组织在使用本软件时,严禁进行任何形式的恶意行为,包括但不限于恶意攻击、滥用、破坏、批量爬取软件仓库等。恶意行为的定义由星火社区自行判断,违反者将被追究法律责任。
8. 分发与再分发权利: 星火社区保留对其制作的软件包的分发权利。未经明确授权,禁止任何个人或组织将星火社区软件包用于商业目的或在未获得星火社区许可的情况下进行再分发。此条款旨在确保开源精神的同时,维护星火社区的知识产权。
9. 其他条款:除上述约定外,若您使用了星火商店的主程序或其部分代码,您应遵守 GPL v3 的所有其他条款和要求。
GPLV3许可证的完整文本可以在以下链接找到https://www.gnu.org/licenses/gpl-3.0.html
## 确定你的系统架构 ## 确定你的系统架构
在安装任何软件之前你需要知道你的计算机运行的是哪种架构如x86_64/amd64或aarch64/arm64 在安装任何软件之前你需要知道你的计算机运行的是哪种架构如x86_64/amd64或aarch64/arm64
@ -78,7 +98,7 @@ Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。
> appstore://deepin-home-appstore-client?app_detail_info/spark-store > appstore://deepin-home-appstore-client?app_detail_info/spark-store
若要使用最新版本,请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases)并下载适用于Deepin的最新版本。安装后即可使用。 若要使用最新版本,请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases)并下载适用于Deepin的最新版本。安装后即可使用。
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装: 假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
@ -99,7 +119,7 @@ Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。
2. **下载并安装** 2. **下载并安装**
请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases),下载和您电脑相同架构的安装包并安装。 请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases),下载和您电脑相同架构的安装包并安装。
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装: 假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
@ -114,7 +134,7 @@ Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。
2. **下载并安装** 2. **下载并安装**
请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases),下载和您电脑相同架构的安装包并安装。 请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases),下载和您电脑相同架构的安装包并安装。
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装: 假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
@ -134,7 +154,7 @@ Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。
2. **下载并安装** 2. **下载并安装**
请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases)并下载,安装后即可使用。 请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases)并下载,安装后即可使用。
#### 对于 Debian 12+ 用户 #### 对于 Debian 12+ 用户
@ -144,7 +164,7 @@ Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。
2. **下载并安装** 2. **下载并安装**
请访问[星火应用商店的Release页面](https://gitee.com/deepin-community-store/spark-store/releases),下载和您电脑相同架构的安装包并安装。 请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases),下载和您电脑相同架构的安装包并安装。
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装: 假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
@ -156,18 +176,19 @@ Linux 应用的数量相对有限Wine 软件的可获得性也颇为困难。
## 常见问题FAQ ## 常见问题FAQ
请参见[星火应用商店FAQ与支持指南](https://gitee.com/deepin-community-store/spark-store/blob/dev/FAQ.md)。 请参见[星火应用商店FAQ与支持指南](https://gitee.com/spark-store-project/spark-store/blob/dev/FAQ.md)。
在这里可以查阅[中文版本](https://gitee.com/deepin-community-store/spark-store/blob/dev/FAQ.zh.md)。 在这里可以查阅[中文版本](https://gitee.com/spark-store-project/spark-store/blob/dev/FAQ.zh.md)。
--- ---
## 联系与反馈 ## 联系与反馈
- 如果您有任何问题或建议,请通过邮件或在[Gitee页面](https://gitee.com/deepin-community-store/spark-store/issues)上提交问题。 - 如果您有任何问题或建议,请通过邮件或在[Gitee页面](https://gitee.com/spark-store-project/spark-store/issues)上提交问题。
- 如果你想关注我们的开发进度,可以跳转[星火应用商店Board](https://gitee.com/deepin-community-store/spark-store/board)获取更多信息。 - 如果你想关注我们的开发进度,可以跳转[星火应用商店Board](https://gitee.com/spark-store-project/spark-store/board)获取更多信息。
- 我们的[论坛](https://www.deepinos.org/) - 我们的[论坛](https://www.deepinos.org/)
- 我们的[QQ群](https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/) - 我们的[QQ群](https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/)
- 商业支持请访问[火穗科技 Flamescion Inc.](http://flamescion.cn/)
--- ---

10
debian/changelog vendored
View File

@ -1,3 +1,13 @@
spark-store (4.2.10) stable; urgency=medium
* 修复:部分发行版上无法启动自动创建的桌面图标
* 修复:发行版统计信息
* 修复Gitee反馈链接错误
* 修复ACE下无法安装,支持ACE下软件更新
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
spark-store (4.2.9) stable; urgency=medium spark-store (4.2.9) stable; urgency=medium
* 修复:软件详情图片排序调整为服务器排序,而不是按加载顺序排序 * 修复:软件详情图片排序调整为服务器排序,而不是按加载顺序排序

1
debian/control vendored
View File

@ -27,6 +27,7 @@ Homepage: https://www.spark-app.store/
Package: spark-store Package: spark-store
Architecture: any Architecture: any
Provides: spark-store-console-in-container
Depends:${shlibs:Depends}, ${misc:Depends}, Depends:${shlibs:Depends}, ${misc:Depends},
libqt5core5a, libqt5core5a,
libqt5gui5, libqt5gui5,

2
debian/rules vendored
View File

@ -3,7 +3,7 @@
export QT_SELECT = qt5 export QT_SELECT = qt5
export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_BUILD_MAINT_OPTIONS = hardening=+all
include /usr/share/dpkg/default.mk include /usr/share/dpkg/default.mk
export DEB_VERSION = $(shell dpkg-parsechangelog -S Version)
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH) DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)

View File

@ -66,7 +66,7 @@ void DataCollectorAndUploader::collectData()
// Initialize a network request // Initialize a network request
QNetworkAccessManager *manager = new QNetworkAccessManager(this); QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QUrl url("http://zunyun01.store.deepinos.org.cn:12345"); QUrl url("https://status.deepinos.org.cn/upload");
QNetworkRequest request(url); QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

View File

@ -67,7 +67,7 @@ void crashHandler(int sig) {
} }
logFile << "Please send this log to the developer. QQ Group: 872690351\n"; logFile << "Please send this log to the developer. QQ Group: 872690351\n";
logFile << "Gitee: https://gitee.com/deepin-community-store/spark-store/issues\n"; logFile << "Gitee: https://gitee.com/spark-store-project/spark-store/issues\n";
logFile << "Gihub: https://github.com/spark-store-project/spark-store/issues\n"; logFile << "Gihub: https://github.com/spark-store-project/spark-store/issues\n";
logFile << "Build Date and Time: " << buildDateTime.toStdString() << "\n"; logFile << "Build Date and Time: " << buildDateTime.toStdString() << "\n";
gatherInfo(popen("cat ~/.config/spark-union/spark-store/config.ini", "r"), logFile, "User Config File"); gatherInfo(popen("cat ~/.config/spark-union/spark-store/config.ini", "r"), logFile, "User Config File");
@ -140,81 +140,73 @@ int main(int argc, char *argv[])
// Set display backend // Set display backend
Utils::setQPAPlatform(); Utils::setQPAPlatform();
// 龙芯机器配置,使得 DApplication 能正确加载 QTWEBENGINE // 龙芯机器配置,使得 DApplication 能正确加载 QtWebEngine
qputenv("DTK_FORCE_RASTER_WIDGETS", "FALSE"); qputenv("DTK_FORCE_RASTER_WIDGETS", "FALSE");
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-features=UseModernMediaControls");
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
// 浏览器开启 GPU 支持 // 浏览器开启 GPU 支持
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-features=UseModernMediaControls");
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
#ifdef __sw_64__ #ifdef __sw_64__
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--no-sandbox"); qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--no-sandbox");
#elif __aarch64__ #elif __aarch64__
QString env = QString::fromUtf8(qgetenv("QTWEBENGINE_CHROMIUM_FLAGS"));
env = env.trimmed();
/**
* NOTE: ARM CPU
* --disable-gpu
* --single-process QtWebEngine
*/
env += " --disable-gpu";
if (Utils::isPhytium()) {
env += " --single-process";
}
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", env.trimmed().toUtf8());
if (Utils::isWayland()) {
/**
* WARNING: DDM TreeLand
* QT_WAYLAND_SHELL_INTEGRATION
* By justforlxz
*/
if (!Utils::isTreeLand()) {
/**
* NOTE: CPU
* wayland QtWebEngine
*/
qputenv("QT_WAYLAND_SHELL_INTEGRATION", "kwayland-shell");
}
}
QSurfaceFormat format;
format.setRenderableType(QSurfaceFormat::OpenGLES);
QSurfaceFormat::setDefaultFormat(format);
/**
* NOTE: https://zhuanlan.zhihu.com/p/550285855
* X11 QtWebEngine 退 QWidget
*/
if (!Utils::isWayland()) { if (!Utils::isWayland()) {
QString env = QString::fromUtf8(qgetenv("QTWEBENGINE_CHROMIUM_FLAGS"));
env = env.trimmed();
/**
* NOTE: ARM CPU
* --disable-gpu X11
* --single-process X11 QtWebEngine
*/
env += " --disable-gpu";
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", env.trimmed().toUtf8());
QSurfaceFormat format;
format.setRenderableType(QSurfaceFormat::OpenGLES);
QSurfaceFormat::setDefaultFormat(format);
/**
* NOTE: https://zhuanlan.zhihu.com/p/550285855
* X11 QtWebEngine 退 QWidget
*/
qputenv("QMLSCENE_DEVICE", "softwarecontext"); qputenv("QMLSCENE_DEVICE", "softwarecontext");
DApplication::setAttribute(Qt::AA_UseSoftwareOpenGL); DApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
} }
#endif #endif
/** /**
* FIXME: CPU QtWebEngine * NOTE: https://zhuanlan.zhihu.com/p/550285855
* CPU wayland * wayland QtWebEngine 退 QWidget
*/ */
if (Utils::isWayland()) { if (Utils::isWayland()) {
QString env = QString::fromUtf8(qgetenv("QTWEBENGINE_CHROMIUM_FLAGS"));
env = env.trimmed();
/**
* NOTE: CPU
* --disable-gpu wayland
* --single-process wayland QtWebEngine
*/
env += " --disable-gpu";
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", env.trimmed().toUtf8());
/**
* NOTE: CPU
* wayland QtWebEngine
*/
qputenv("QT_WAYLAND_SHELL_INTEGRATION", "kwayland-shell");
QSurfaceFormat format;
format.setRenderableType(QSurfaceFormat::OpenGLES);
QSurfaceFormat::setDefaultFormat(format);
/**
* NOTE: https://zhuanlan.zhihu.com/p/550285855
* wayland QtWebEngine 退 QWidget
*/
qputenv("QMLSCENE_DEVICE", "softwarecontext"); qputenv("QMLSCENE_DEVICE", "softwarecontext");
DApplication::setAttribute(Qt::AA_UseSoftwareOpenGL); DApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
} }
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
{ // 开启 Hidpi 支持
// 开启 Hidpi 支持 qDebug() << "Enable HiDPI Support.";
qDebug() << "Enable HiDPI Support."; DApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); DApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
DApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
}
#endif #endif
// 强制使用 DTK 平台插件 // 强制使用 DTK 平台插件

View File

@ -13,6 +13,7 @@
#include <QFile> #include <QFile>
#include <DSysInfo> #include <DSysInfo>
#include <QAtomicInt>
AppIntoPage::AppIntoPage(QWidget *parent) AppIntoPage::AppIntoPage(QWidget *parent)
: QWidget(parent) : QWidget(parent)
@ -21,6 +22,7 @@ AppIntoPage::AppIntoPage(QWidget *parent)
{ {
initUI(); initUI();
initConnections(); initConnections();
m_userAgent = QString("Mozilla/5.0 Spark-Store/" + QString(APP_VERSION) + " (Linux; " + QSysInfo::prettyProductName().toUtf8() + ";)").toLatin1();
} }
AppIntoPage::~AppIntoPage() AppIntoPage::~AppIntoPage()
@ -53,37 +55,47 @@ void AppIntoPage::openUrl(const QUrl &url)
ui->label_2->setText(info["More"].toString()); ui->label_2->setText(info["More"].toString());
// 显示 tags // 显示 tags
QStringList taglist = info["Tags"].toString().split(";", QString::SkipEmptyParts); #if (DTK_VERSION >= DTK_VERSION_CHECK(5, 15, 0, 0))
QStringList taglist = info["Tags"].toString().split(";", Qt::SkipEmptyParts);
#else
QStringList taglist = info["Tags"].toString().split(";", QString::SkipEmptyParts);
#endif
setAppinfoTags(taglist); setAppinfoTags(taglist);
// 获取图标 // 获取图标和截图
QNetworkRequest request;
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QString pkgUrlBase = api->getImgServerUrl() + SparkAPI::getArchDir() + url.path(); QString pkgUrlBase = api->getImgServerUrl() + SparkAPI::getArchDir() + url.path();
qDebug() << "Icon URL: " << pkgUrlBase + "/icon.png"; // 创建网络请求管理器
request.setUrl(QUrl(pkgUrlBase + "/icon.png")); QNetworkAccessManager *iconManager = new QNetworkAccessManager(this);
request.setRawHeader("User-Agent", "Mozilla/5.0");
request.setRawHeader("Content-Type", "charset='utf-8'"); // 获取图标
manager->get(request); QNetworkRequest iconRequest;
QObject::connect(manager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply) iconRequest.setUrl(QUrl(pkgUrlBase + "/icon.png"));
{ iconRequest.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);
QByteArray jpegData = reply->readAll(); iconRequest.setHeader(QNetworkRequest::ContentTypeHeader, "charset='utf-8'");
iconpixmap.loadFromData(jpegData);
iconpixmap.scaled(210, 200, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); iconManager->get(iconRequest);
ui->icon->setPixmap(iconpixmap); QObject::connect(iconManager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply)
ui->icon->setScaledContents(true); {
QByteArray jpegData = reply->readAll();
iconpixmap.loadFromData(jpegData);
iconpixmap = iconpixmap.scaled(210, 200, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
ui->icon->setPixmap(iconpixmap);
ui->icon->setScaledContents(true);
iconManager->deleteLater();
reply->deleteLater();
});
manager->deleteLater(); });
// 获取截图
for (int i = 0; i < 5 /* 魔法数字,最多五个截图 */; i++) for (int i = 0; i < 5 /* 魔法数字,最多五个截图 */; i++)
{ {
QString imgUrl = pkgUrlBase + "/screen_" + QString::number(i + 1) + ".png"; QString imgUrl = pkgUrlBase + "/screen_" + QString::number(i + 1) + ".png";
QNetworkRequest request; QNetworkRequest request;
QNetworkAccessManager *manager = new QNetworkAccessManager(this); QNetworkAccessManager *manager = new QNetworkAccessManager(this);
request.setUrl(QUrl(imgUrl)); request.setUrl(QUrl(imgUrl));
request.setRawHeader("User-Agent", "Mozilla/5.0"); request.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);
request.setRawHeader("Content-Type", "charset='utf-8'"); request.setHeader(QNetworkRequest::ContentTypeHeader, "charset='utf-8'");
manager->get(request); manager->get(request);
QObject::connect(manager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply) QObject::connect(manager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply)
{ {
@ -105,6 +117,7 @@ void AppIntoPage::openUrl(const QUrl &url)
manager->deleteLater(); manager->deleteLater();
}); });
} }
// Check UOS // Check UOS
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat); QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);

View File

@ -49,6 +49,8 @@ private:
QJsonObject info; QJsonObject info;
QPixmap iconpixmap; QPixmap iconpixmap;
QUrl spk; QUrl spk;
QByteArray m_userAgent;
}; };
#endif // APPINTOPAGE_H #endif // APPINTOPAGE_H

View File

@ -72,8 +72,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>743</width> <width>688</width>
<height>950</height> <height>940</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_23"> <layout class="QVBoxLayout" name="verticalLayout_23">
@ -356,8 +356,7 @@
<item> <item>
<widget class="QLabel" name="label_10"> <widget class="QLabel" name="label_10">
<property name="text"> <property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don't make a profit from this, all developers and maintainers don't get paid, and we rely on the community's donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you'd like to get involved with us too, whether you're involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt; <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Our services and software are free for individuals and non-profit organizations to use, communicate and learn, but you must comply with local laws and regulations in the process of use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;We don't make a profit from the Community version store, we rely on donations from the community for most of our operating expenses, and we appreciate that this allows us to spend less energy worrying about money. However, in order to better provide continuous service, Spark is only free for individual users to open the service warehouse, if you or your organization needs to provide commercial services or your organization is a for-profit organization, please contact us to obtain commercial authorization. &lt;/p&gt;&lt;p&gt;When using the Software, users or organizations are strictly forbidden to engage in any form of malicious behavior, including but not limited to malicious attacks, abuse, destruction, bulk crawling of the software warehouse, etc. The definition of malicious behavior is judged by the Spark community, and violators will be held legally responsible. Spark Community reserves the right to distribute the software packages it produces. &lt;/p&gt;&lt;p&gt;Any person or organization is prohibited from using the Spark Community software package for commercial purposes or redistributing it without the express authorization of the Spark Community. This clause is intended to ensure the spirit of open source while safeguarding the intellectual property rights of the Spark community. In addition to the above, if you use the Spark Store main program or part of its code, you are subject to all other terms and requirements of the GPL v3.&lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you'd like to get involved with us too, whether you're involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>

View File

@ -1,14 +1,21 @@
#include "httprequest.h" #include "httprequest.h"
HttpRequest::HttpRequest() HttpRequest::HttpRequest(QObject *parent):QObject(parent)
{ {
QString headers = "Mozilla/5.0 Spark-Store/"+ QString(APP_VERSION)+" (Linux; "+QSysInfo::prettyProductName().toUtf8()+");";
QByteArray ba = headers.toLatin1();
rawHeaders = strdup(ba.data());
}
// 在析构函数中释放 rawHeaders 的内存
HttpRequest::~HttpRequest()
{
free(rawHeaders);
} }
void HttpRequest::getRequest(QNetworkRequest request) void HttpRequest::getRequest(QNetworkRequest request)
{ {
QNetworkAccessManager *naManager = new QNetworkAccessManager(this); QNetworkAccessManager *naManager = new QNetworkAccessManager(this);
request.setRawHeader("User-Agent", rawHeaders);
request.setRawHeader("User-Agent", "Mozilla/5.0");
request.setRawHeader("Content-Type", "charset='utf-8'"); request.setRawHeader("Content-Type", "charset='utf-8'");
request.setRawHeader("Content-Type", "application/json"); request.setRawHeader("Content-Type", "application/json");
@ -26,6 +33,7 @@ QString HttpRequest::postRequest(QString url, QString jsondata)
QNetworkAccessManager *naManager = new QNetworkAccessManager(this); QNetworkAccessManager *naManager = new QNetworkAccessManager(this);
QUrl strUrl = url.replace("+", "%2B"); QUrl strUrl = url.replace("+", "%2B");
request.setUrl(strUrl); request.setUrl(strUrl);
request.setRawHeader("User-Agent", rawHeaders);
request.setRawHeader("Content-Type", "charset='utf-8'"); request.setRawHeader("Content-Type", "charset='utf-8'");
request.setRawHeader("Content-Type", "application/json"); request.setRawHeader("Content-Type", "application/json");

View File

@ -10,8 +10,11 @@
class HttpRequest : public QObject class HttpRequest : public QObject
{ {
Q_OBJECT Q_OBJECT
private:
char* rawHeaders;
public: public:
HttpRequest(); HttpRequest(QObject *parent = nullptr);
~HttpRequest();
void getRequest(QNetworkRequest request); void getRequest(QNetworkRequest request);

View File

@ -73,6 +73,37 @@ bool Utils::isWayland()
return isWayland; return isWayland;
} }
/**
* @brief 使 TreeLand
* @return bool true: 使 TreeLand false: TreeLand
*/
bool Utils::isTreeLand()
{
bool isTreeLand = false;
if (qgetenv("DDE_CURRENT_COMPOSITER").toLower() == "treeland"
|| qgetenv("DESKTOP_SESSION").toLower() == "treeland") {
isTreeLand = true;
}
return isTreeLand;
}
bool Utils::isPhytium()
{
bool isPhytium = false;
QProcess process;
process.start("lscpu");
process.waitForFinished();
QString output = process.readAllStandardOutput();
if (output.contains(QLatin1String("Phytium")))
{
isPhytium = true;
}
return isPhytium;
}
/** /**
* @brief Utils::initConfig config.ini * @brief Utils::initConfig config.ini
*/ */

View File

@ -10,8 +10,10 @@ public:
static void sendNotification(const QString &icon, const QString &title, const QString &body); static void sendNotification(const QString &icon, const QString &title, const QString &body);
static bool isDDE(); static bool isDDE();
static bool isWayland(); static bool isWayland();
static bool isTreeLand();
static void initConfig(); static void initConfig();
static bool isUOS(); static bool isUOS();
static bool isPhytium();
static QString initUUID(); static QString initUUID();
static void setQPAPlatform(); static void setQPAPlatform();
static void checkUOSDeveloperMode(); static void checkUOSDeveloperMode();

View File

@ -175,7 +175,7 @@ void DownloadItem::slotAsyncInstall(int t)
switch (t) switch (t)
{ {
case 0: case 0:
installer.start("pkexec", QStringList() << "ssinstall" installer.start("pkexec", QStringList() << "/usr/local/bin/ssinstall"
<< "/tmp/spark-store/" + ui->label_filename->text().toUtf8() << "--delete-after-install"); << "/tmp/spark-store/" + ui->label_filename->text().toUtf8() << "--delete-after-install");
break; break;
case 1: case 1:

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
echo "----------------Running Spark DStore Patch----------------" echo "----------------Running Spark DStore Patch----------------"
#!/bin/bash
enumAppInfoList() { enumAppInfoList() {
@ -33,10 +33,12 @@ linkDir() {
fi fi
ensureTargetDir "$targetFile" ensureTargetDir "$targetFile"
sourceFile=$(realpath --relative-to="$(dirname $targetFile)" "$sourceFile" )
ln -s "$sourceFile" "$targetFile" ln -s "$sourceFile" "$targetFile"
done done
} }
linkApp() { linkApp() {
appID=$1 appID=$1
appEntriesDir="/opt/apps/$appID/entries" appEntriesDir="/opt/apps/$appID/entries"
@ -120,5 +122,4 @@ else
fi fi
echo "----------------Finished----------------"
echo "----------------Finished----------------"

View File

@ -38,6 +38,7 @@ function exec_create_desktop_file() {
for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
echo $desktop_file_path is checked and will be installed to desktop echo $desktop_file_path is checked and will be installed to desktop
chmod +x $desktop_file_path
sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/" sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/"
fi fi
done done
@ -106,8 +107,14 @@ DEBPATH=$(realpath "$1")
package_name=$(dpkg-deb -f "$DEBPATH" Package) package_name=$(dpkg-deb -f "$DEBPATH" Package)
echo "Package name is $package_name" echo "Package name is $package_name"
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH") try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?" try_run_ret="$?"
if [ "$try_run_ret" -ne 0 ]; then
aptss update
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?"
fi
if [ "$try_run_ret" -ne 0 ]; then if [ "$try_run_ret" -ne 0 ]; then
echo "OMG-IT-GOES-WRONG" echo "OMG-IT-GOES-WRONG"

View File

@ -30,7 +30,7 @@ function create_desktop_file() {
function exec_create_desktop_file() { function exec_create_desktop_file() {
local user=$(who | awk '{print $1}' | head -n 1) local user=$(who | awk '{print $1}' | head -n 1)
for desktop_file_path in $(dpkg -L "$package_name" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do for desktop_file_path in $(dpkg -L "$package_name" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do
if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ];then if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ];then
echo $desktop_file_path is checked and will be installed to desktop echo $desktop_file_path is checked and will be installed to desktop
sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/" sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/"
fi fi
@ -38,6 +38,7 @@ if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true
for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do
if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ];then if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] || [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ];then
echo $desktop_file_path is checked and will be installed to desktop echo $desktop_file_path is checked and will be installed to desktop
chmod +x $desktop_file_path
sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/" sudo -u "$user" cp "$desktop_file_path" "$(sudo -u "$user" xdg-user-dir DESKTOP)/"
fi fi
done done
@ -52,19 +53,19 @@ function zenity() {
} }
function hash_check() { function hash_check() {
if [ ! -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && \ if [ ! -e "/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages" ] && \
[ ! -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && \ [ ! -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && \
[ ! -e "/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ]; then [ ! -e "/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ]; then
echo "接收星火仓库软件信息中..." echo "接收星火仓库软件信息中..."
aptss ssupdate aptss ssupdate
fi fi
if [ -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then if [ -e "/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages" ]; then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置" echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名仓库配置"
elif [ -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then elif [ -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH星火域名单目录仓库配置" echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATHd域名单目录仓库配置"
else else
PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是SDU镜像仓库配置" echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是SDU镜像仓库配置"
@ -125,6 +126,12 @@ if [ ! -z "$IS_SHA512SUM_CHECKED" ]; then
try_run_ret="$?" try_run_ret="$?"
if [ "$try_run_ret" -ne 0 ]; then if [ "$try_run_ret" -ne 0 ]; then
aptss update
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
try_run_ret="$?"
fi
if [ "$try_run_ret" -ne 0 ]; then
echo "OMG-IT-GOES-WRONG" echo "OMG-IT-GOES-WRONG"
echo -e "${try_run_output}" echo -e "${try_run_output}"
exit "$try_run_ret" exit "$try_run_ret"

View File

@ -1,14 +1,17 @@
#!/bin/bash #!/bin/bash
case $1 in
ssupdate)
if [ "$(id -u)" != "0" ] ; then if [ "$(id -u)" != "0" ] ; then
pkexec "$0" "$@" pkexec "$0" "$@"
exit exit
fi fi
case $1 in
ssupdate)
aptss ssupdate 2>&1 | tee /tmp/spark-store-app-ssupdate-log.txt aptss ssupdate 2>&1 | tee /tmp/spark-store-app-ssupdate-log.txt
IS_SSUPDATE_ERROR=`cat /tmp/spark-store-app-ssupdate-log.txt | grep "E: "` IS_SSUPDATE_ERROR=`cat /tmp/spark-store-app-ssupdate-log.txt | grep "E: "`
echo "$IS_SSUPDATE_ERROR" > /tmp/spark-store-app-ssupdate-status.txt echo "$IS_SSUPDATE_ERROR" > /tmp/spark-store-app-ssupdate-status.txt
chmod 777 /tmp/spark-store-app-ssupdate-status.txt
chmod 777 /tmp/spark-store-app-ssupdate-log.txt
;; ;;
upgradable-list) upgradable-list)
@ -28,11 +31,21 @@ case $1 in
;; ;;
upgrade-app) upgrade-app)
if [ "$(id -u)" != "0" ] ; then
pkexec "$0" "$@"
exit
fi
aptss install "${@:2}" --only-upgrade 2>&1 | tee /tmp/spark-store-app-upgrade-log.txt aptss install "${@:2}" --only-upgrade 2>&1 | tee /tmp/spark-store-app-upgrade-log.txt
chmod 777 /tmp/spark-store-app-upgrade-log.txt
IS_UPGRADE_ERROR=`cat /tmp/spark-store-app-upgrade-log.txt | grep "Package manager quit with exit code."` IS_UPGRADE_ERROR=`cat /tmp/spark-store-app-upgrade-log.txt | grep "Package manager quit with exit code."`
echo "$IS_UPGRADE_ERROR" > /tmp/spark-store-app-upgrade-status.txt echo "$IS_UPGRADE_ERROR" > /tmp/spark-store-app-upgrade-status.txt
;; ;;
test-install-app) test-install-app)
if [ "$(id -u)" != "0" ] ; then
pkexec "$0" "$@"
exit
fi
try_run_output=$(aptss --dry-run install $2) try_run_output=$(aptss --dry-run install $2)
try_run_ret="$?" try_run_ret="$?"
@ -63,6 +76,7 @@ fi
;; ;;
clean-log) clean-log)
rm -f /tmp/spark-store-app-ssupdate-status.txt /tmp/spark-store-app-ssupdate-log.txt /tmp/spark-store-app-upgrade-log.txt /tmp/spark-store-app-upgrade-status.txt
rm -f /tmp/spark-store-app-ssupdate-status.txt /tmp/spark-store-app-ssupdate-log.txt /tmp/spark-store-app-upgrade-log.txt /tmp/spark-store-app-upgrade-status.txt
;; ;;
esac esac

View File

@ -49,17 +49,17 @@ touch /tmp/spark-store/upgradeStatus.txt
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh ssupdate | zenity --progress --auto-close --pulsate --no-cancel --text="${TRANSHELL_CONTENT_UPDATE_CHEKING_PLEASE_WAIT}" --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh ssupdate | zenity --progress --auto-close --pulsate --no-cancel --text="${TRANSHELL_CONTENT_UPDATE_CHEKING_PLEASE_WAIT}" --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
if [ -z `cat /tmp/spark-store-app-ssupdate-status.txt` ] ; then if [ -z `cat /tmp/spark-store-app-ssupdate-status.txt` ] ; then
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
else else
zenity --error --text "${TRANSHELL_CONTENT_CHECK_UPDATE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg zenity --error --text "${TRANSHELL_CONTENT_CHECK_UPDATE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
zenity --text-info --filename=/tmp/spark-store-app-ssupdate-log.txt --checkbox="${TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK}" --title="${TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg zenity --text-info --filename=/tmp/spark-store-app-ssupdate-log.txt --checkbox="${TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK}" --title="${TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
rm -f /tmp/spark-store/upgradeStatus.txt rm -f /tmp/spark-store/upgradeStatus.txt
exit exit
fi fi
# 获取可更新应用列表 # 获取可更新应用列表
PKG_LIST="$(pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)" PKG_LIST="$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)"
## 如果没更新,就弹出不需要更新 ## 如果没更新,就弹出不需要更新
if [ -z "$PKG_LIST" ] ; then if [ -z "$PKG_LIST" ] ; then
zenity --info --text "${TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg zenity --info --text "${TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
@ -110,7 +110,7 @@ done)
else else
### 更新用户选择的应用 ### 更新用户选择的应用
for PKG_UPGRADE in $PKG_UPGRADE_LIST;do for PKG_UPGRADE in $PKG_UPGRADE_LIST;do
$APP_UPGRADE=$(get_name_from_desktop_file $PKG_UPGRADE) APP_UPGRADE="$(get_name_from_desktop_file $PKG_UPGRADE)"
update_transhell update_transhell
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE -y | zenity --progress --auto-close --no-cancel --pulsate --text="${TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT}" --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE -y | zenity --progress --auto-close --no-cancel --pulsate --text="${TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT}" --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
done done

View File

@ -126,9 +126,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="174"/> <location filename="../src/pages/appintopage.cpp" line="190"/>
<location filename="../src/pages/appintopage.cpp" line="312"/> <location filename="../src/pages/appintopage.cpp" line="328"/>
<location filename="../src/pages/appintopage.cpp" line="482"/> <location filename="../src/pages/appintopage.cpp" line="498"/>
<source>Download and Install</source> <source>Download and Install</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -175,79 +175,79 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="51"/> <location filename="../src/pages/appintopage.cpp" line="56"/>
<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="113"/> <location filename="../src/pages/appintopage.cpp" line="129"/>
<source>Developer Mode Disabled</source> <source>Developer Mode Disabled</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="159"/> <location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="328"/> <location filename="../src/pages/appintopage.cpp" line="344"/>
<location filename="../src/pages/appintopage.cpp" line="455"/> <location filename="../src/pages/appintopage.cpp" line="471"/>
<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="166"/> <location filename="../src/pages/appintopage.cpp" line="182"/>
<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="317"/> <location filename="../src/pages/appintopage.cpp" line="333"/>
<location filename="../src/pages/appintopage.cpp" line="431"/> <location filename="../src/pages/appintopage.cpp" line="447"/>
<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="322"/> <location filename="../src/pages/appintopage.cpp" line="338"/>
<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="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<source>The current application does not support deepin, there may be problems</source> <source>The current application does not support deepin, there may be problems</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<source>The current application does not support UOS, there may be problems</source> <source>The current application does not support UOS, there may be problems</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<source>The current application does not support Ubuntu, there may be problems</source> <source>The current application does not support Ubuntu, there may be problems</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>The current application does not support current platform, there may be problems</source> <source>The current application does not support current platform, there may be problems</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<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="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<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="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<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>
@ -635,8 +635,7 @@
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.ui" line="359"/> <location filename="../src/pages/settingspage.ui" line="359"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt; <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Our services and software are free for individuals and non-profit organizations to use, communicate and learn, but you must comply with local laws and regulations in the process of use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from the Community version store, we rely on donations from the community for most of our operating expenses, and we appreciate that this allows us to spend less energy worrying about money. However, in order to better provide continuous service, Spark is only free for individual users to open the service warehouse, if you or your organization needs to provide commercial services or your organization is a for-profit organization, please contact us to obtain commercial authorization. &lt;/p&gt;&lt;p&gt;When using the Software, users or organizations are strictly forbidden to engage in any form of malicious behavior, including but not limited to malicious attacks, abuse, destruction, bulk crawling of the software warehouse, etc. The definition of malicious behavior is judged by the Spark community, and violators will be held legally responsible. Spark Community reserves the right to distribute the software packages it produces. &lt;/p&gt;&lt;p&gt;Any person or organization is prohibited from using the Spark Community software package for commercial purposes or redistributing it without the express authorization of the Spark Community. This clause is intended to ensure the spirit of open source while safeguarding the intellectual property rights of the Spark community. In addition to the above, if you use the Spark Store main program or part of its code, you are subject to all other terms and requirements of the GPL v3.&lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

View File

@ -126,9 +126,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="174"/> <location filename="../src/pages/appintopage.cpp" line="190"/>
<location filename="../src/pages/appintopage.cpp" line="312"/> <location filename="../src/pages/appintopage.cpp" line="328"/>
<location filename="../src/pages/appintopage.cpp" line="482"/> <location filename="../src/pages/appintopage.cpp" line="498"/>
<source>Download and Install</source> <source>Download and Install</source>
<translation>Descargar e instalar</translation> <translation>Descargar e instalar</translation>
</message> </message>
@ -175,79 +175,79 @@
<translation>Sitio web</translation> <translation>Sitio web</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="51"/> <location filename="../src/pages/appintopage.cpp" line="56"/>
<source>Click Open</source> <source>Click Open</source>
<translation>Haga clic en &quot;abrir&quot;</translation> <translation>Haga clic en &quot;abrir&quot;</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="113"/> <location filename="../src/pages/appintopage.cpp" line="129"/>
<source>Developer Mode Disabled</source> <source>Developer Mode Disabled</source>
<translation>Se ha desactivado el modo desarrollador</translation> <translation>Se ha desactivado el modo desarrollador</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="159"/> <location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="328"/> <location filename="../src/pages/appintopage.cpp" line="344"/>
<location filename="../src/pages/appintopage.cpp" line="455"/> <location filename="../src/pages/appintopage.cpp" line="471"/>
<source>Reinstall</source> <source>Reinstall</source>
<translation>Reinstalación</translation> <translation>Reinstalación</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="166"/> <location filename="../src/pages/appintopage.cpp" line="182"/>
<source>Upgrade</source> <source>Upgrade</source>
<translation>Actualización</translation> <translation>Actualización</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="317"/> <location filename="../src/pages/appintopage.cpp" line="333"/>
<location filename="../src/pages/appintopage.cpp" line="431"/> <location filename="../src/pages/appintopage.cpp" line="447"/>
<source>Install</source> <source>Install</source>
<translation>Instalación</translation> <translation>Instalación</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="322"/> <location filename="../src/pages/appintopage.cpp" line="338"/>
<source>Installing</source> <source>Installing</source>
<translation>Se está instalando</translation> <translation>Se está instalando</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>Warning</source> <source>Warning</source>
<translation>Aviso</translation> <translation>Aviso</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<source>The current application does not support deepin, there may be problems</source> <source>The current application does not support deepin, there may be problems</source>
<translation>La aplicación actual no admite deepin, puede haber problemas</translation> <translation>La aplicación actual no admite deepin, puede haber problemas</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<source>The current application does not support UOS, there may be problems</source> <source>The current application does not support UOS, there may be problems</source>
<translation>La aplicación actual no admite uos, puede haber problemas</translation> <translation>La aplicación actual no admite uos, puede haber problemas</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<source>The current application does not support Ubuntu, there may be problems</source> <source>The current application does not support Ubuntu, there may be problems</source>
<translation>La aplicación actual no admite ubuntu, puede haber problemas</translation> <translation>La aplicación actual no admite ubuntu, puede haber problemas</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>The current application does not support current platform, there may be problems</source> <source>The current application does not support current platform, there may be problems</source>
<translation>La aplicación actual no admite la Plataforma actual, puede haber problemas</translation> <translation>La aplicación actual no admite la Plataforma actual, puede haber problemas</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<source>Spark Store</source> <source>Spark Store</source>
<translation>SPARK Store</translation> <translation>SPARK Store</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<source>Uninstall succeeded</source> <source>Uninstall succeeded</source>
<translation>Desinstalación exitosa</translation> <translation>Desinstalación exitosa</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<source>The URL has been copied to the clipboard</source> <source>The URL has been copied to the clipboard</source>
<translation>La URL ha sido copiada al portapapeles</translation> <translation>La URL ha sido copiada al portapapeles</translation>
</message> </message>
@ -635,9 +635,8 @@
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.ui" line="359"/> <location filename="../src/pages/settingspage.ui" line="359"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt; <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Our services and software are free for individuals and non-profit organizations to use, communicate and learn, but you must comply with local laws and regulations in the process of use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from the Community version store, we rely on donations from the community for most of our operating expenses, and we appreciate that this allows us to spend less energy worrying about money. However, in order to better provide continuous service, Spark is only free for individual users to open the service warehouse, if you or your organization needs to provide commercial services or your organization is a for-profit organization, please contact us to obtain commercial authorization. &lt;/p&gt;&lt;p&gt;When using the Software, users or organizations are strictly forbidden to engage in any form of malicious behavior, including but not limited to malicious attacks, abuse, destruction, bulk crawling of the software warehouse, etc. The definition of malicious behavior is judged by the Spark community, and violators will be held legally responsible. Spark Community reserves the right to distribute the software packages it produces. &lt;/p&gt;&lt;p&gt;Any person or organization is prohibited from using the Spark Community software package for commercial purposes or redistributing it without the express authorization of the Spark Community. This clause is intended to ensure the spirit of open source while safeguarding the intellectual property rights of the Spark community. In addition to the above, if you use the Spark Store main program or part of its code, you are subject to all other terms and requirements of the GPL v3.&lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <translation type="unfinished"></translation>
<translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.cpp" line="217"/> <location filename="../src/pages/settingspage.cpp" line="217"/>

View File

@ -126,9 +126,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="174"/> <location filename="../src/pages/appintopage.cpp" line="190"/>
<location filename="../src/pages/appintopage.cpp" line="312"/> <location filename="../src/pages/appintopage.cpp" line="328"/>
<location filename="../src/pages/appintopage.cpp" line="482"/> <location filename="../src/pages/appintopage.cpp" line="498"/>
<source>Download and Install</source> <source>Download and Install</source>
<translation>Télécharger et installer</translation> <translation>Télécharger et installer</translation>
</message> </message>
@ -175,79 +175,79 @@
<translation>Site Web</translation> <translation>Site Web</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="51"/> <location filename="../src/pages/appintopage.cpp" line="56"/>
<source>Click Open</source> <source>Click Open</source>
<translation>Cliquez sur Ouvrir</translation> <translation>Cliquez sur Ouvrir</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="113"/> <location filename="../src/pages/appintopage.cpp" line="129"/>
<source>Developer Mode Disabled</source> <source>Developer Mode Disabled</source>
<translation>Mode développeur désactivé</translation> <translation>Mode développeur désactivé</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="159"/> <location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="328"/> <location filename="../src/pages/appintopage.cpp" line="344"/>
<location filename="../src/pages/appintopage.cpp" line="455"/> <location filename="../src/pages/appintopage.cpp" line="471"/>
<source>Reinstall</source> <source>Reinstall</source>
<translation>Réinstaller</translation> <translation>Réinstaller</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="166"/> <location filename="../src/pages/appintopage.cpp" line="182"/>
<source>Upgrade</source> <source>Upgrade</source>
<translation>Mise à niveau</translation> <translation>Mise à niveau</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="317"/> <location filename="../src/pages/appintopage.cpp" line="333"/>
<location filename="../src/pages/appintopage.cpp" line="431"/> <location filename="../src/pages/appintopage.cpp" line="447"/>
<source>Install</source> <source>Install</source>
<translation>Installation</translation> <translation>Installation</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="322"/> <location filename="../src/pages/appintopage.cpp" line="338"/>
<source>Installing</source> <source>Installing</source>
<translation>Installation en cours</translation> <translation>Installation en cours</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>Warning</source> <source>Warning</source>
<translation>Avertissement</translation> <translation>Avertissement</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<source>The current application does not support deepin, there may be problems</source> <source>The current application does not support deepin, there may be problems</source>
<translation>L&apos;application actuelle ne supporte pas deepin, il peut y avoir un problème</translation> <translation>L&apos;application actuelle ne supporte pas deepin, il peut y avoir un problème</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<source>The current application does not support UOS, there may be problems</source> <source>The current application does not support UOS, there may be problems</source>
<translation>L&apos;application actuelle ne prend pas en charge uos, il peut y avoir un problème</translation> <translation>L&apos;application actuelle ne prend pas en charge uos, il peut y avoir un problème</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<source>The current application does not support Ubuntu, there may be problems</source> <source>The current application does not support Ubuntu, there may be problems</source>
<translation>L&apos;application actuelle ne supporte pas Ubuntu, il peut y avoir un problème</translation> <translation>L&apos;application actuelle ne supporte pas Ubuntu, il peut y avoir un problème</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>The current application does not support current platform, there may be problems</source> <source>The current application does not support current platform, there may be problems</source>
<translation>L&apos;application actuelle ne prend pas en charge la plate - forme actuelle, il peut y avoir un problème</translation> <translation>L&apos;application actuelle ne prend pas en charge la plate - forme actuelle, il peut y avoir un problème</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<source>Spark Store</source> <source>Spark Store</source>
<translation>Le Spark store</translation> <translation>Le Spark store</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<source>Uninstall succeeded</source> <source>Uninstall succeeded</source>
<translation>Désinstallation réussie</translation> <translation>Désinstallation réussie</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<source>The URL has been copied to the clipboard</source> <source>The URL has been copied to the clipboard</source>
<translation>L&apos;URL a é copiée dans le presse - papiers</translation> <translation>L&apos;URL a é copiée dans le presse - papiers</translation>
</message> </message>
@ -635,9 +635,8 @@
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.ui" line="359"/> <location filename="../src/pages/settingspage.ui" line="359"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt; <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Our services and software are free for individuals and non-profit organizations to use, communicate and learn, but you must comply with local laws and regulations in the process of use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from the Community version store, we rely on donations from the community for most of our operating expenses, and we appreciate that this allows us to spend less energy worrying about money. However, in order to better provide continuous service, Spark is only free for individual users to open the service warehouse, if you or your organization needs to provide commercial services or your organization is a for-profit organization, please contact us to obtain commercial authorization. &lt;/p&gt;&lt;p&gt;When using the Software, users or organizations are strictly forbidden to engage in any form of malicious behavior, including but not limited to malicious attacks, abuse, destruction, bulk crawling of the software warehouse, etc. The definition of malicious behavior is judged by the Spark community, and violators will be held legally responsible. Spark Community reserves the right to distribute the software packages it produces. &lt;/p&gt;&lt;p&gt;Any person or organization is prohibited from using the Spark Community software package for commercial purposes or redistributing it without the express authorization of the Spark Community. This clause is intended to ensure the spirit of open source while safeguarding the intellectual property rights of the Spark community. In addition to the above, if you use the Spark Store main program or part of its code, you are subject to all other terms and requirements of the GPL v3.&lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <translation type="unfinished"></translation>
<translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.cpp" line="217"/> <location filename="../src/pages/settingspage.cpp" line="217"/>

View File

@ -121,9 +121,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="174"/> <location filename="../src/pages/appintopage.cpp" line="190"/>
<location filename="../src/pages/appintopage.cpp" line="312"/> <location filename="../src/pages/appintopage.cpp" line="328"/>
<location filename="../src/pages/appintopage.cpp" line="482"/> <location filename="../src/pages/appintopage.cpp" line="498"/>
<source>Download and Install</source> <source>Download and Install</source>
<translation></translation> <translation></translation>
</message> </message>
@ -175,79 +175,79 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="51"/> <location filename="../src/pages/appintopage.cpp" line="56"/>
<source>Click Open</source> <source>Click Open</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="113"/> <location filename="../src/pages/appintopage.cpp" line="129"/>
<source>Developer Mode Disabled</source> <source>Developer Mode Disabled</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="159"/> <location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="328"/> <location filename="../src/pages/appintopage.cpp" line="344"/>
<location filename="../src/pages/appintopage.cpp" line="455"/> <location filename="../src/pages/appintopage.cpp" line="471"/>
<source>Reinstall</source> <source>Reinstall</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="166"/> <location filename="../src/pages/appintopage.cpp" line="182"/>
<source>Upgrade</source> <source>Upgrade</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="317"/> <location filename="../src/pages/appintopage.cpp" line="333"/>
<location filename="../src/pages/appintopage.cpp" line="431"/> <location filename="../src/pages/appintopage.cpp" line="447"/>
<source>Install</source> <source>Install</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="322"/> <location filename="../src/pages/appintopage.cpp" line="338"/>
<source>Installing</source> <source>Installing</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>Warning</source> <source>Warning</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<source>The current application does not support deepin, there may be problems</source> <source>The current application does not support deepin, there may be problems</source>
<translation>deepin</translation> <translation>deepin</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<source>The current application does not support UOS, there may be problems</source> <source>The current application does not support UOS, there may be problems</source>
<translation>UOS</translation> <translation>UOS</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<source>The current application does not support Ubuntu, there may be problems</source> <source>The current application does not support Ubuntu, there may be problems</source>
<translation>Ubuntu</translation> <translation>Ubuntu</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>The current application does not support current platform, there may be problems</source> <source>The current application does not support current platform, there may be problems</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<source>Spark Store</source> <source>Spark Store</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<source>Uninstall succeeded</source> <source>Uninstall succeeded</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<source>The URL has been copied to the clipboard</source> <source>The URL has been copied to the clipboard</source>
<translation></translation> <translation></translation>
</message> </message>
@ -635,9 +635,8 @@
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.ui" line="359"/> <location filename="../src/pages/settingspage.ui" line="359"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt; <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Our services and software are free for individuals and non-profit organizations to use, communicate and learn, but you must comply with local laws and regulations in the process of use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from the Community version store, we rely on donations from the community for most of our operating expenses, and we appreciate that this allows us to spend less energy worrying about money. However, in order to better provide continuous service, Spark is only free for individual users to open the service warehouse, if you or your organization needs to provide commercial services or your organization is a for-profit organization, please contact us to obtain commercial authorization. &lt;/p&gt;&lt;p&gt;When using the Software, users or organizations are strictly forbidden to engage in any form of malicious behavior, including but not limited to malicious attacks, abuse, destruction, bulk crawling of the software warehouse, etc. The definition of malicious behavior is judged by the Spark community, and violators will be held legally responsible. Spark Community reserves the right to distribute the software packages it produces. &lt;/p&gt;&lt;p&gt;Any person or organization is prohibited from using the Spark Community software package for commercial purposes or redistributing it without the express authorization of the Spark Community. This clause is intended to ensure the spirit of open source while safeguarding the intellectual property rights of the Spark community. In addition to the above, if you use the Spark Store main program or part of its code, you are subject to all other terms and requirements of the GPL v3.&lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt;Spark&lt;/p&gt;&lt;p&gt;使SparkSpark Community&lt;/p&gt;&lt;p&gt;Spark CommunitySpark CommunitySpark使Spark StoreGPL v3&lt;span style=&quot; font - family:;&quot; &lt;span style=&quot; font - family:;color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/span&gt;&lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;&lt;/span&gt;Linux/deepinSpark&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt; &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;稿&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.cpp" line="217"/> <location filename="../src/pages/settingspage.cpp" line="217"/>

View File

@ -121,9 +121,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="174"/> <location filename="../src/pages/appintopage.cpp" line="190"/>
<location filename="../src/pages/appintopage.cpp" line="312"/> <location filename="../src/pages/appintopage.cpp" line="328"/>
<location filename="../src/pages/appintopage.cpp" line="482"/> <location filename="../src/pages/appintopage.cpp" line="498"/>
<source>Download and Install</source> <source>Download and Install</source>
<translation></translation> <translation></translation>
</message> </message>
@ -175,79 +175,79 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="51"/> <location filename="../src/pages/appintopage.cpp" line="56"/>
<source>Click Open</source> <source>Click Open</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="113"/> <location filename="../src/pages/appintopage.cpp" line="129"/>
<source>Developer Mode Disabled</source> <source>Developer Mode Disabled</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="159"/> <location filename="../src/pages/appintopage.cpp" line="175"/>
<location filename="../src/pages/appintopage.cpp" line="328"/> <location filename="../src/pages/appintopage.cpp" line="344"/>
<location filename="../src/pages/appintopage.cpp" line="455"/> <location filename="../src/pages/appintopage.cpp" line="471"/>
<source>Reinstall</source> <source>Reinstall</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="166"/> <location filename="../src/pages/appintopage.cpp" line="182"/>
<source>Upgrade</source> <source>Upgrade</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="317"/> <location filename="../src/pages/appintopage.cpp" line="333"/>
<location filename="../src/pages/appintopage.cpp" line="431"/> <location filename="../src/pages/appintopage.cpp" line="447"/>
<source>Install</source> <source>Install</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="322"/> <location filename="../src/pages/appintopage.cpp" line="338"/>
<source>Installing</source> <source>Installing</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>Warning</source> <source>Warning</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="410"/> <location filename="../src/pages/appintopage.cpp" line="426"/>
<source>The current application does not support deepin, there may be problems</source> <source>The current application does not support deepin, there may be problems</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="414"/> <location filename="../src/pages/appintopage.cpp" line="430"/>
<source>The current application does not support UOS, there may be problems</source> <source>The current application does not support UOS, there may be problems</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="418"/> <location filename="../src/pages/appintopage.cpp" line="434"/>
<source>The current application does not support Ubuntu, there may be problems</source> <source>The current application does not support Ubuntu, there may be problems</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="422"/> <location filename="../src/pages/appintopage.cpp" line="438"/>
<source>The current application does not support current platform, there may be problems</source> <source>The current application does not support current platform, there may be problems</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<source>Spark Store</source> <source>Spark Store</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="486"/> <location filename="../src/pages/appintopage.cpp" line="502"/>
<source>Uninstall succeeded</source> <source>Uninstall succeeded</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/pages/appintopage.cpp" line="499"/> <location filename="../src/pages/appintopage.cpp" line="515"/>
<source>The URL has been copied to the clipboard</source> <source>The URL has been copied to the clipboard</source>
<translation></translation> <translation></translation>
</message> </message>
@ -635,9 +635,8 @@
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.ui" line="359"/> <location filename="../src/pages/settingspage.ui" line="359"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt; <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Our services and software are free for individuals and non-profit organizations to use, communicate and learn, but you must comply with local laws and regulations in the process of use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from the Community version store, we rely on donations from the community for most of our operating expenses, and we appreciate that this allows us to spend less energy worrying about money. However, in order to better provide continuous service, Spark is only free for individual users to open the service warehouse, if you or your organization needs to provide commercial services or your organization is a for-profit organization, please contact us to obtain commercial authorization. &lt;/p&gt;&lt;p&gt;When using the Software, users or organizations are strictly forbidden to engage in any form of malicious behavior, including but not limited to malicious attacks, abuse, destruction, bulk crawling of the software warehouse, etc. The definition of malicious behavior is judged by the Spark community, and violators will be held legally responsible. Spark Community reserves the right to distribute the software packages it produces. &lt;/p&gt;&lt;p&gt;Any person or organization is prohibited from using the Spark Community software package for commercial purposes or redistributing it without the express authorization of the Spark Community. This clause is intended to ensure the spirit of open source while safeguarding the intellectual property rights of the Spark community. In addition to the above, if you use the Spark Store main program or part of its code, you are subject to all other terms and requirements of the GPL v3.&lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;Our contact method can be found at &lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;Here&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt;Spark&lt;/p&gt;&lt;p&gt;使SparkSpark Community&lt;/p&gt;&lt;p&gt;Spark CommunitySpark CommunitySpark使Spark StoreGPL v3&lt;span style=&quot; font - family:;&quot; &lt;span style=&quot; font - family:;color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/span&gt;&lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;&lt;/span&gt;Linux/deepin使Spark&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt; &lt;a href=&quot;mailto:jifengshenmo@outlook.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;jifengshenmo@outlook.com&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;稿&lt;p&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;a href=&quot;https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0082fa;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/pages/settingspage.cpp" line="217"/> <location filename="../src/pages/settingspage.cpp" line="217"/>