mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-12-15 05:12:04 +08:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c228706144 | |||
| c030bf9e6e | |||
| 9ac0c67a25 | |||
| fd4b52e384 | |||
| db79a59fb6 | |||
| 6891fc5b87 | |||
| 62f52451b7 |
13
.github/workflows/program-builder.yml
vendored
13
.github/workflows/program-builder.yml
vendored
@@ -1,13 +0,0 @@
|
||||
name: Building Program
|
||||
run-name: Building ${{ GITHUB.REPOSITORY }}
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
tags:
|
||||
- "*"
|
||||
|
||||
jobs:
|
||||
call:
|
||||
uses: GXDE-OS/GXDE/.github/workflows/building-deb.yml@master
|
||||
secrets: inherit
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -53,4 +53,3 @@ debian/*.substvars
|
||||
debian/spark-store
|
||||
|
||||
.vscode/*
|
||||
src/spark-store
|
||||
|
||||
@@ -2,7 +2,7 @@ version: '1.0'
|
||||
name: dtk-build-release-tag-20220425
|
||||
displayName: dtk-build-release-tag
|
||||
triggers:
|
||||
trigger: manual
|
||||
trigger: auto
|
||||
push:
|
||||
tags:
|
||||
prefix:
|
||||
@@ -18,28 +18,22 @@ stages:
|
||||
name: execute_by_docker
|
||||
displayName: 基于镜像的DTK构建
|
||||
certificate: ''
|
||||
image: docker.jianmuhub.com/library/debian:buster
|
||||
image: docker.io/debian:buster
|
||||
command:
|
||||
- sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
|
||||
- '# 换源'
|
||||
- apt update
|
||||
- export DEBIAN_FRONTEND=noninteractive
|
||||
- echo "安装依赖..."
|
||||
- 'apt install libgsettings-qt-dev -y '
|
||||
- 'apt install debhelper git curl fakeroot qtbase5-dev zlib1g-dev qt5-default -y '
|
||||
- echo "安装git devscripts equivs curl..."
|
||||
- 'apt install git devscripts equivs curl -y '
|
||||
- git clone https://gitlink.org.cn/shenmo7192/dtk-old-bundle.git
|
||||
- cd dtk-old-bundle
|
||||
- apt install ./*.deb -y
|
||||
- cd ..
|
||||
- rm -rf dtk-old-bundle
|
||||
- ''
|
||||
- '#mk-build-deps --install --tool "apt-get -o Debug::pkgProblemResolver=yes -y" '
|
||||
- apt build-dep . -y
|
||||
- strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
|
||||
- uname -a
|
||||
- sed -i 's/dh \$@ --parallel/dh \$@/' debian/rules
|
||||
- '# Gitee的配置太低了'
|
||||
- dpkg-buildpackage -b -us -uc
|
||||
- 'mk-build-deps --install --tool "apt-get -o Debug::pkgProblemResolver=yes -y" '
|
||||
- dpkg-buildpackage -j2 -b -us -uc
|
||||
- cd ..
|
||||
- ls -all
|
||||
- pwd
|
||||
|
||||
@@ -25,12 +25,10 @@ stages:
|
||||
- apt update
|
||||
- export DEBIAN_FRONTEND=noninteractive
|
||||
- echo "安装wget qemu-user-static"
|
||||
- apt install git wget qemu-user-static xz-utils binfmt-support -y
|
||||
- apt install wget qemu-user-static xz-utils -y
|
||||
- mkdir ../spark-store-git
|
||||
- mv * ../spark-store-git
|
||||
- git clone https://gitlink.org.cn/shenmo7192/debian-container-aarch64.git
|
||||
- mv debian-container-aarch64/DEBIANARM.tar.xz .
|
||||
- rm -rf debian-container-aarch64
|
||||
- wget https://code.gitlink.org.cn/shenmo7192/debian-container-aarch64/raw/branch/master/DEBIANARM.tar.xz
|
||||
- tar -xf DEBIANARM.tar.xz
|
||||
- mkdir -p DEBIAN/root/build-spark
|
||||
- mv ../spark-store-git DEBIAN/root/build-spark/spark-store
|
||||
|
||||
328
DOCS/code-analyze.md
Normal file
328
DOCS/code-analyze.md
Normal file
@@ -0,0 +1,328 @@
|
||||
|
||||
#### 说明
|
||||
|
||||
当前服务器线路列表(项目中包含):
|
||||
|
||||
```
|
||||
https://d.store.deepinos.org.cn/
|
||||
https://store.deepinos.org.cn/
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 星火应用商店文档
|
||||
|
||||
# 目录结构
|
||||
几个目录结构
|
||||
```
|
||||
/
|
||||
/icons 图标文件夹
|
||||
/tags 首页图标
|
||||
/tras 多语言翻译
|
||||
```
|
||||
|
||||
主要的文件分析
|
||||
```js
|
||||
spark-store.pro Qt工程配置文件
|
||||
ssinstall 调用包安装器的脚本
|
||||
icons.qrc 图标资源文件
|
||||
main.cpp 入口文件
|
||||
widget.h widget.cpp widget.ui 主要窗口控件
|
||||
downloadlist.h downloadlist.cpp downloadlist.ui 单个软件的下载安装展示控件
|
||||
progressload.h progressload.cpp 网页加载显示? 得在deepin上编译运行才能搞清楚
|
||||
workerthreads.h workerthreads.cpp 应用信息加载线程
|
||||
image_show.h image_show.cpp 应用页面截图预览控件
|
||||
big_image.h big_image.cpp 大图查看控件
|
||||
```
|
||||
|
||||
# 使用的开源库及第三方工具
|
||||
* GDebi 一个 Ubuntu 软件中心的轻量级替代品 https://linux.cn/article-4982-1.html
|
||||
* libnotify 系统通知 https://developer.gnome.org/libnotify/unstable/
|
||||
|
||||
|
||||
# 源码分析
|
||||
## 应用的组成部分
|
||||
左侧应用分类菜单
|
||||
主窗口的下拉菜单
|
||||
应用列表页面
|
||||
应用详情页面
|
||||
应用首页,有几个链接跳转
|
||||
商店设置页面
|
||||
下载列表页面
|
||||
|
||||
## 应用初始化,及主控件加载
|
||||
初始化 `DApplication` 进入事件循环。
|
||||
设置关于我们弹窗 `DAboutDialog`。
|
||||
主控件 Widget 根据不同屏幕大小自适应。
|
||||
首页打开webview页面,如果传入了`spk://`参数,会打开应用详情页。
|
||||
```cpp
|
||||
// main.cpp
|
||||
QString arg1=argv[1];
|
||||
if(arg1.left(6)=="spk://"){
|
||||
w.openUrl(QUrl(argv[1]));
|
||||
}
|
||||
|
||||
// widget.cpp
|
||||
void Widget::openUrl(QUrl u)
|
||||
{
|
||||
QString app=serverUrl + "store"+u.path()+"/app.json";
|
||||
ui->webEngineView->setUrl(app); // 会触发 webEngineView 的
|
||||
}
|
||||
|
||||
```
|
||||
## Tags处理方式
|
||||
|
||||
**Tags处理方式**
|
||||
```cpp
|
||||
// widget.cpp
|
||||
QString tags=json["Tags"].toString(); //Read the Tags
|
||||
QStringList tagList=tags.split(";");
|
||||
for (int i=0;i<tagList.size();i++) {
|
||||
if(tagList[i]=="community")
|
||||
ui->tag_community->show();//Tags icon shows like this
|
||||
if(tagList[i]=="ubuntu")
|
||||
ui->tag_ubuntu->show();
|
||||
if(tagList[i]=="deepin")
|
||||
ui->tag_deepin->show();
|
||||
if(tagList[i]=="uos")
|
||||
ui->tag_uos->show();
|
||||
if(tagList[i]=="dtk5")
|
||||
ui->tag_dtk5->show();
|
||||
if(tagList[i]=="dwine2")
|
||||
ui->tag_dwine2->show();
|
||||
if(tagList[i]=="dwine5")
|
||||
ui->tag_dwine5->show();
|
||||
if(tagList[i]=="a2d")
|
||||
ui->tag_a2d->show();
|
||||
}
|
||||
```
|
||||
|
||||
**Widget 初始化**
|
||||
```cpp
|
||||
void Widget::initConfig()
|
||||
{
|
||||
...
|
||||
// 读取服务器URL并初始化菜单项的链接
|
||||
QSettings readConfig(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
|
||||
if(readConfig.value("server/choose").toString()!=""){
|
||||
ui->comboBox_server->setCurrentText(readConfig.value("server/choose").toString());
|
||||
appinfoLoadThread.setServer(serverUrl=readConfig.value("server/choose").toString());
|
||||
}else {
|
||||
appinfoLoadThread.setServer(serverUrl="http://sucdn.jerrywang.top/"); // 默认URL
|
||||
}
|
||||
configCanSave=true; // 防止触发保存配置信号
|
||||
menuUrl[0]=serverUrl + "store/#/"; // 首页
|
||||
// 下面是各个应用分类页面,直接加载的webview的
|
||||
// 每个连接对应一个左侧的菜单项,在构造函数用连接到 chooseLeftMenu 槽函数
|
||||
menuUrl[1]=serverUrl + "store/#/network";
|
||||
...
|
||||
menuUrl[12]=serverUrl + "store/#/others";
|
||||
...
|
||||
ui->webfoot->hide();
|
||||
|
||||
//初始化首页
|
||||
ui->webEngineView->setUrl(menuUrl[0]);
|
||||
}
|
||||
/**
|
||||
* 菜单切换逻辑
|
||||
*
|
||||
*/
|
||||
void Widget::chooseLeftMenu(int index)
|
||||
{
|
||||
nowMenu=index;
|
||||
updateUI();
|
||||
left_list[index]->setStyleSheet("color:#FFFFFF;background-color:"+main_color.name()+";border-radius:8;border:0px");
|
||||
// index <=12 加载某个分类的应用列表的webviejw
|
||||
// index == 13 加载下载列表页面
|
||||
if(index<=12){
|
||||
if(themeIsDark){
|
||||
darkurl = 夜间模式的URL
|
||||
ui->webEngineView->setUrl(darkurl);
|
||||
}else {
|
||||
ui->webEngineView->setUrl(menuUrl[index]);
|
||||
}
|
||||
ui->stackedWidget->setCurrentIndex(0);
|
||||
}else if (index==13) {
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 应用下载安装卸载分析
|
||||
**应用详情页面加载**
|
||||
```cpp
|
||||
/**
|
||||
* 加载单个应用的信息
|
||||
*/
|
||||
void Widget::on_webEngineView_urlChanged(const QUrl &arg1)
|
||||
{
|
||||
//分析出服务器中的分类名称
|
||||
...
|
||||
//如果是app.json就打开详情页
|
||||
if(arg1.path().right(8)=="app.json"){
|
||||
...
|
||||
// 读取相应的应用信息
|
||||
appinfoLoadThread.requestInterruption();
|
||||
appinfoLoadThread.wait(100);
|
||||
appinfoLoadThread.setUrl(arg1);
|
||||
appinfoLoadThread.start();
|
||||
}
|
||||
}
|
||||
// 设置详情页的APP信息
|
||||
SpkAppInfoLoaderThread::requestSetAppInformation() -> Widget::sltAppinfoDetails()
|
||||
// 设置详情页的APP图标
|
||||
SpkAppInfoLoaderThread::finishedIconLoad() -> Widget::sltAppinfoIcon()
|
||||
// 设置详情页的APP截图
|
||||
SpkAppInfoLoaderThread::finishedScreenshotLoad() -> Widget::sltAppinfoScreenshot()
|
||||
|
||||
// 下载APP详情信息线程
|
||||
void SpkAppInfoLoaderThread::run()
|
||||
{
|
||||
QProcess get_json;
|
||||
get_json.start("curl -o app.json " + targetUrl.toString());
|
||||
QFile app_json("app.json");
|
||||
读取 app.json 里的信息,提取应用名、描述、图标、截图
|
||||
处理完毕后发射相应的信号
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
**应用下载**
|
||||
Widget::on_pushButton_download_clicked() 是点击下载的安装方法。
|
||||
最终使用的是 `QNetwrokAccessManager` 进行GET请求获取数据写入文件。
|
||||
```cpp
|
||||
void Widget::on_pushButton_download_clicked()
|
||||
{
|
||||
if(!isBusy){
|
||||
file = new QFile(fileName);
|
||||
...
|
||||
nowDownload+=1;
|
||||
startRequest(urList.at(nowDownload-1)); // 进行链接请求
|
||||
}
|
||||
}
|
||||
void Widget::startRequest(QUrl url)
|
||||
{
|
||||
reply = manager->get(QNetworkRequest(url));
|
||||
// 请求响应完成,关闭文件,清理下载队列
|
||||
connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));
|
||||
// 接收应用下载数据
|
||||
connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));
|
||||
// 更新应用下载进度
|
||||
connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));
|
||||
}
|
||||
```
|
||||
|
||||
使用 QSettings 来读取配置,更换服务源
|
||||
```cpp
|
||||
void Widget::on_comboBox_server_currentIndexChanged(const QString &arg1)
|
||||
{
|
||||
appinfoLoadThread.setServer(arg1); // 服务器信息更新
|
||||
if(configCanSave){
|
||||
ui->label_setting1->show();
|
||||
QSettings *setConfig=new QSettings(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
|
||||
setConfig->setValue("server/choose",arg1);
|
||||
}
|
||||
}
|
||||
```
|
||||
使用 `QProcess` 来调用各种小文件下载、包安装卸载的命令。
|
||||
|
||||
**应用安装**
|
||||
```cpp
|
||||
void Widget::httpFinished() // 完成下载
|
||||
{
|
||||
...清理资源
|
||||
download_list[nowDownload-1].readyInstall();
|
||||
download_list[nowDownload-1].free=true;
|
||||
if(nowDownload<allDownload){ // 如果有排队则下载下一个
|
||||
...队列的下一个下载请求
|
||||
}
|
||||
}
|
||||
void downloadlist::readyInstall()
|
||||
{
|
||||
...将安装按钮设置为允许点击
|
||||
ui->pushButton_install->setEnabled(true);
|
||||
ui->pushButton_install->show();
|
||||
ui->pushButton_2->hide();
|
||||
Widget::sendNotification(tr("Finished downloading %1, awaiting to install").arg(ui->label->text()), 5000,
|
||||
"/tmp/spark-store/icon_"+QString::number(num).toUtf8()+".png");
|
||||
}
|
||||
void downloadlist::on_pushButton_install_clicked()
|
||||
{
|
||||
//弹出菜单
|
||||
menu_install->exec(cursor().pos());
|
||||
}
|
||||
在 downloadlist 构造函数里将三种安装方式的按钮按条件放入了 menu_install 菜单里
|
||||
用户点击时,downloadlist::install() 方法
|
||||
三种安装方式为: gdebi, dpkg, deepin-deb-installer
|
||||
void downloadlist::install(int t)
|
||||
{
|
||||
QtConcurrent::run([=](){
|
||||
QProcess installer;
|
||||
installer.start("pkexec gdebi -n /tmp/spark-store/"+ui->label_filename->text().toUtf8());
|
||||
installer.start("pkexec ssinstall /tmp/spark-store/"+ui->label_filename->text().toUtf8());
|
||||
installer.start("deepin-deb-installer /tmp/spark-store/"+ui->label_filename->text().toUtf8());
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
**应用卸载**
|
||||
```cpp
|
||||
void Widget::on_pushButton_uninstall_clicked()
|
||||
{
|
||||
QtConcurrent::run([=](){
|
||||
uninstall.start("pkexec apt purge -y "+pkgName);
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
**仓库源更新**
|
||||
```cpp
|
||||
// 更新源列表
|
||||
void Widget::on_pushButton_updateServer_clicked()
|
||||
{
|
||||
QtConcurrent::run([=](){
|
||||
...
|
||||
QFile::remove(QDir::homePath().toUtf8()+"/.config/spark-store/server.list");
|
||||
system("curl -o "+QDir::homePath().toUtf8()+"/.config/spark-store/server.list http://dcstore.shenmo.tech/store/server.list");
|
||||
server.open(QDir::homePath().toUtf8()+"/.config/spark-store/server.list",std::ios::in);
|
||||
...
|
||||
while (getline(server,lineTmp)) {
|
||||
ui->comboBox_server->addItem(QString::fromStdString(lineTmp));
|
||||
}
|
||||
});
|
||||
}
|
||||
// 更新星火商店apt源
|
||||
void Widget::on_pushButton_updateApt_clicked()
|
||||
{
|
||||
QtConcurrent::run([=](){
|
||||
读取 comboBox_server 的内容,写入 /tmp/spark-store/sparkstore.list 文件
|
||||
创建bash脚本,内容为将 sparkstore.list 移动到 /etc/apt/sources.list.d/ 目录下
|
||||
使用QProcess 执行命令 pkexec update.sh
|
||||
}):
|
||||
}
|
||||
```
|
||||
|
||||
## 发送系统通知
|
||||
```cpp
|
||||
#include <libnotify/notify.h>
|
||||
|
||||
static NotifyNotification *_notify = nullptr; // 初始化
|
||||
notify_init(tr("Spark\\ Store").toLocal8Bit()); // 构造函数初始化
|
||||
notify_uninit(); // 析构函数调用
|
||||
|
||||
void Widget::sendNotification(const QString &message, const int msTimeout, const QString &icon)
|
||||
{
|
||||
if(_notify == nullptr)
|
||||
{
|
||||
_notify = notify_notification_new(tr("Spark\\ Store").toLocal8Bit(), message.toLocal8Bit(), icon.toLocal8Bit());
|
||||
notify_notification_set_timeout(_notify, msTimeout);
|
||||
}
|
||||
else
|
||||
notify_notification_update(_notify, tr("Spark\\ Store").toLocal8Bit(), message.toLocal8Bit(), icon.toLocal8Bit());
|
||||
|
||||
notify_notification_show(_notify, nullptr);
|
||||
}
|
||||
```
|
||||
@@ -1,48 +0,0 @@
|
||||
# 基本格式
|
||||
0. 应用信息
|
||||
|
||||
例子:https://cdn.d.store.deepinos.org.cn/store/tools/spark-store/app.json
|
||||
|
||||
```json
|
||||
{
|
||||
"Name": "星火应用商店",
|
||||
"Version": "4.2.7.1",
|
||||
"Filename": "spark-store_4.2.7.1_amd64.deb",
|
||||
"Torrent_address": "spark-store_4.2.7.1_amd64.deb.torrent",
|
||||
"Pkgname": "spark-store",
|
||||
"Author": "shenmo <shenmo@spark-app.store>",
|
||||
"Contributor": "shenmo <jifengshenmo@outlook.com>",
|
||||
"Website": "https://www.spark-app.store/",
|
||||
"Update": "2023-09-01 23:22:23",
|
||||
"Size": "590.5 KB",
|
||||
"More": "* 修复:aptss加锁失败现在会正常报错\n * 新增:在aptss的特定操作时添加了提示\n * 新增:在aptss提示加粗\n * 调整:ssinstall验证支持使用cdn.d.获取",
|
||||
"Tags": "community;ubuntu;deepin;uos;dtk5",
|
||||
"img_urls": "[\"https://examine-spark.oss-cn-shanghai.aliyuncs.com/images/2023/09/01/411c32fd691544bb985ecba87d151ea0.png\",\"https://examine-spark.oss-cn-shanghai.aliyuncs.com/images/2023/09/01/f44b3c2242c045e28f1161980d805e0d.png\",\"https://examine-spark.oss-cn-shanghai.aliyuncs.com/images/2023/09/01/00263ba857894667bd99240558bec69c.png\",\"https://examine-spark.oss-cn-shanghai.aliyuncs.com/images/2023/09/01/6fd248ad9eea4ef18c9c4acc2a9d372d.png\"]",
|
||||
"icons": "https://examine-spark.oss-cn-shanghai.aliyuncs.com/icons/2023/09/01/a88dd18cc1734396a02e7e3c6be59718.png"
|
||||
}
|
||||
```
|
||||
|
||||
*注意:img_urls和icons的信息不保证有效!大部分是有效的,少部分app.json可能缺失此项目!*
|
||||
|
||||
**对于icon和截图的获取需求请参考第三点**
|
||||
|
||||
1. 对于某分类下的所有应用信息
|
||||
`{SOURCE_URL}/{ARCH}/{CATOGARY}/applist.json`
|
||||
说明:SOURCE_URL:线路链接,目前推荐 https://cdn.d.store.deepinos.org.cn,你也可以使用其他的星火线路
|
||||
ARCH:架构文件夹 x86是store或amd64-store,arm是aarch64-store。特别的,如果你使用非https://cdn.d.store.deepinos.org.cn的线路,你可能会发现amd64-store会返回404,因为不是所有的服务器都支持软连接
|
||||
CATOGARY:分类目录。参考 https://gitee.com/deepin-community-store/spark-store/blob/dev/DOCS/spk-doc.md 中 store 直达的对应关系
|
||||
|
||||
例子:https://cdn.d.store.deepinos.org.cn/aarch64-store/tools/applist.json
|
||||
|
||||
2. 对于单个应用的应用信息
|
||||
`{SOURCE_URL}/{ARCH}/{CATOGARY}/{Package Name}/app.json`
|
||||
Package Name是包名。可从上级的applist.json读取
|
||||
|
||||
例子:https://cdn.d.store.deepinos.org.cn/store/tools/spark-store/app.json
|
||||
|
||||
3. 对应用截图和icon的获取
|
||||
|
||||
`{SOURCE_URL}/{ARCH}/{CATOGARY}/{Package Name}/icon.png`
|
||||
`{SOURCE_URL}/{ARCH}/{CATOGARY}/{Package Name}/screen_n.png`(n=1-5)(至少为1,不是所有的都有到5. 404是正常的)
|
||||
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
#### 调用参数(spk规则)
|
||||
|
||||
* store直达
|
||||
|
||||
该url应当遵循这种格式:`spk://store/web分类/包名`
|
||||
|
||||
参数只有一个Url,该url应当遵循这种格式:`spk://<任意合法字符>/web分类/包名`
|
||||
|
||||
目前第一字段不进行处理,以后可能会对此识别。在目前阶段,这个字段可以填写任意合法字符
|
||||
|
||||
例如:
|
||||
|
||||
[spk://store/games/store.spark-app.hmcl](spk://store/games/store.spark-app.hmcl)
|
||||
[spk://abcdefg/games/store.spark-app.hmcl](spk://abcdefg/games/store.spark-app.hmcl)
|
||||
|
||||
|
||||
可选的web分类:
|
||||
@@ -27,8 +25,3 @@
|
||||
| 工具 | tools |
|
||||
| 主题 | themes |
|
||||
| 其他 | others |
|
||||
|
||||
|
||||
* search搜索
|
||||
|
||||
spk://search/pkgname
|
||||
|
||||
41
EULA
41
EULA
@@ -1,41 +0,0 @@
|
||||
星火开源软件协议(Spark Opensource LICENSE)
|
||||
|
||||
版权所有 (C) 2023 星火社区
|
||||
|
||||
根据 GNU 通用公共许可证第三版(GPL v3),本软件是自由软件,您可以修改和再发布它。但是,为了维护原作者的权益并保护社区用户的权益,请遵守以下条款:
|
||||
|
||||
1. 对本仓库下的所有文件生效:本许可证适用于本仓库(或项目)下的所有文件。任何使用、修改或再发布本软件的个人或组织都必须遵守本许可证。
|
||||
2. 版权声明和许可证文件:您不得移除、隐藏或更改本软件中包含的原作者的版权声明和许可证文件。保留原作者的权益信息对于维护开源软件生态系统至关重要。
|
||||
3. 版本标注: 如果您对本软件做出修改并再发布,您必须在醒目位置标注此版本并非星火社区官方提供。这样可以避免误导使用者认为该软件为星火社区官方提供的版本。此软件仅授权用于个人非盈利用途,任何将其用于商业目的或在盈利性组织中使用的行为均需事先获得星火社区的书面许可。
|
||||
4. 商标使用:您不得在再发布版本中使用“星火应用商店”、“Spark Store”或星火应用商店的Logo等可能误导使用者此软件由星火社区官方提供的信息。
|
||||
5. 服务条款:您使用星火商店软件的行为将被视为您同意星火在不侵犯您隐私的前提下搜集版本、日志等信息,以便于星火社区更好地为您提供服务。
|
||||
6. 仓库版权条款:为了更好的提供持续性服务,星火仅对个人用户免费开放服务仓库,如您或您的组织需要提供商业服务或者您的组织为盈利性组织,请联系星火社区获取商业授权。
|
||||
7. 禁止恶意行为和批量爬取: 用户或组织在使用本软件时,严禁进行任何形式的恶意行为,包括但不限于恶意攻击、滥用、破坏、批量爬取软件仓库等。恶意行为的定义由星火社区自行判断,违反者将被追究法律责任。
|
||||
8. 分发与再分发权利: 星火社区保留对其制作的软件包的分发权利。未经明确授权,禁止任何个人或组织将星火社区软件包用于商业目的或在未获得星火社区许可的情况下进行再分发。此条款旨在确保开源精神的同时,维护星火社区的知识产权。
|
||||
9. 商业应用限制:您不得使用本软件的代码开发商业应用,也不得在商业应用中使用本软件的代码,除非获得星火社区和火穗(沈阳)计算机软件开发有限公司的书面许可。
|
||||
10. 其他条款:除上述约定外,若您使用了星火商店的主程序或其部分代码,您应遵守 GPL v3 的所有其他条款和要求。若本协议条款的内容与GPL V3中的内容不同的,以本协议条款为准
|
||||
11. 其他约定:本许可以简体中文版本为最准确释义
|
||||
|
||||
GPLV3许可证的完整文本可以在以下链接找到:https://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
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. Business Application Restriction: You are not permitted to utilize the code of this software for developing commercial applications, nor are you allowed to integrate the code of this software into commercial applications without obtaining written consent from both the Spark Community and Flamescion (Shenyang) Computer Software Development Co., Ltd.
|
||||
10. Other Terms: In addition to the above provisions, if you use the main program or any part of the code of Spark Store, you must comply with all other terms and requirements of GPL v3. In case of any inconsistency between the terms of this agreement and those of GPL v3, the terms of this agreement shall prevail.
|
||||
11. Additional Agreements: This license shall be interpreted most accurately in its Simplified Chinese version.
|
||||
|
||||
You can find the full text of GPLV3 license at: https://www.gnu.org/licenses/gpl-3.0.html
|
||||
91
FAQ.md
91
FAQ.md
@@ -1,91 +0,0 @@
|
||||
# FAQ
|
||||
## Spark App Store FAQ and Support Guide
|
||||
|
||||
### Introduction
|
||||
The Spark App Store is an application store aimed at Linux users and supports multiple Linux distributions. Below are some commonly asked questions and solutions. Please note that this document is primarily intended for ordinary users who are not familiar with Linux and the APT package management system.
|
||||
|
||||
---
|
||||
|
||||
### Communication and Feedback
|
||||
**Q: Where can I join the community group?**
|
||||
**A:** You can click [here](https://www.deepinos.org/) to enter the main communication platform of the Spark Store.
|
||||
> ⚠️ If the above link doesn't work, you can also join our QQ groups as an alternative. The group numbers are 872690351 and 865927727. We also offer forums for communication.
|
||||
|
||||
#### Differences Between arm64 and amd64
|
||||
|
||||
arm64
|
||||
|
||||
* Full Name: Advanced RISC Machine 64-bit
|
||||
* Main Use: Primarily used in mobile devices, embedded systems, and some new servers and desktop computers.
|
||||
* Advantages: Low power consumption, high efficiency, suitable for battery-driven and heat-sensitive devices.
|
||||
* Main Manufacturers: Apple, Qualcomm, HiSilicon, Phytium, etc.
|
||||
|
||||
amd64
|
||||
|
||||
* Full Name: AMD 64-bit, also known as x86_64
|
||||
* Main Use: Primarily used in desktop computers, laptops, and servers.
|
||||
* Advantages: High performance, suitable for computation-intensive applications.
|
||||
* Main Manufacturers: Intel and AMD.
|
||||
* The main differences between the two are in the instruction sets and application scenarios. amd64 is usually used for high-performance computers and servers, while arm64 is more commonly used in power-sensitive settings.
|
||||
|
||||
#### How to Check:
|
||||
|
||||
Linux:
|
||||
|
||||
- Open the terminal.
|
||||
- Type `uname -m` or `arch` and press Enter.
|
||||
- You will see your processor architecture (possibly x86_64, aarch64, etc.).
|
||||
|
||||
---
|
||||
|
||||
### Domestic Architecture Support
|
||||
**Q: I use a domestic chip architecture, how can I get applications?**
|
||||
**A:** Currently, Spark Store supports **arm** architecture for domestic chips. You can download deb packages suitable for arm64 architecture.
|
||||
> ⚠️ Please note that this is experimental support. If you encounter any issues, please provide feedback via Spark's communication platform, QQ group, or forums.
|
||||
|
||||
---
|
||||
|
||||
### Dependency Issues
|
||||
**Q: I get errors when installing dependencies**
|
||||
**A:** If you are using UOS or deepin, please do not install the dependency packages. For Kali Linux/Kdeneon etc., temporary support is not available, please compile and install yourself.
|
||||
> 💡 If errors occur, try running `sudo apt update` before attempting the installation again. If the issue persists, refer to the first question and seek help on the community platform.
|
||||
|
||||
---
|
||||
|
||||
### Submission and App Updates
|
||||
**Q: Where can I submit applications?**
|
||||
**A:** You can find the "Submit Application" option in the upper-right corner menu of the app store interface.
|
||||
|
||||
---
|
||||
|
||||
### Support for Non-deepin/UOS Users
|
||||
**Q: I'm not a deepin/UOS user; can I use the Spark App Store?**
|
||||
**A:** Yes, you can directly install if you're using Ubuntu 22.04. For Ubuntu 20.04/Debian10/Debian11, please install the dependencies first.
|
||||
|
||||
---
|
||||
|
||||
### Installation Methods
|
||||
**Q: Can I use dpkg -i for installation?**
|
||||
**A:** No! Use `sudo apt install ./xxxx.deb` to install, or use graphical installers like gdebi.
|
||||
> ⚠️ Using dpkg directly will not handle software dependencies, which is a common mistake.
|
||||
|
||||
---
|
||||
|
||||
### System Updates
|
||||
**Q: Will the Spark Store affect normal system updates?**
|
||||
**A:** No, the Spark Store has separated its application sources from system sources and will not affect regular system updates.
|
||||
|
||||
---
|
||||
|
||||
### Reporting Issues and Removing Apps
|
||||
**Q: Some apps are outdated or inactive, and I want them removed**
|
||||
**A:** You can report issues [here](https://gitee.com/deepin-community-store/software_-issue).
|
||||
|
||||
---
|
||||
|
||||
### Installing Spark App Store
|
||||
If you wish to install the Spark App Store, please visit the [Release page](https://gitee.com/deepin-community-store/spark-store/releases), find the latest version, and choose the package suitable for your current system.
|
||||
|
||||
> ⚠️ Special Note: If you are using Debian10/Debian11 or Ubuntu 20.04, you may need to download additional dependency packages. After downloading, unzip multiple times until you see the software user guide. For operating systems later than Ubuntu 22.04, you do not need to install dependency packages. Just follow the steps above to install the main program directly.
|
||||
|
||||
---
|
||||
90
FAQ.zh.md
90
FAQ.zh.md
@@ -1,90 +0,0 @@
|
||||
# FAQ
|
||||
## 星火应用商店FAQ与支持指南
|
||||
|
||||
### 简介
|
||||
星火应用商店是一个面向 Linux 用户的应用商店,支持多种不同的 Linux 发行版。以下是一些常见问题及解决方案。请注意,该文档主要面向对 Linux 和 APT 软件包管理系统不熟悉的普通用户。
|
||||
|
||||
---
|
||||
|
||||
### 交流与反馈
|
||||
**Q: 在哪进交流群?**
|
||||
**A:** 你可以点击[这里](https://www.deepinos.org/)进入星火商店的主交流平台。
|
||||
> ⚠️ 如果上面的链接无法使用,你还可以加入我们的 QQ 群作为备选方案,群号是 872690351 和 865927727。我们还提供论坛作为交流平台。
|
||||
|
||||
arm64与amd64的区别
|
||||
|
||||
arm64
|
||||
|
||||
* 全称: Advanced RISC Machine 64-bit
|
||||
* 主要用途: 主要应用于移动设备、嵌入式系统以及一些新型的服务器和桌面计算机。
|
||||
* 优势: 低功耗、高效率,适合用在电池驱动和热敏感的设备。
|
||||
* 主要生产商: 苹果、高通、海思、飞腾等。
|
||||
|
||||
amd64
|
||||
|
||||
* 全称: AMD 64-bit, 也被称为 x86_64
|
||||
* 主要用途: 主要应用于桌面计算机、笔记本以及服务器。
|
||||
* 优势: 高性能,适用于计算密集型应用。
|
||||
* 主要生产商: Intel和AMD。
|
||||
* 两者最主要的不同在于指令集和应用场景。amd64通常用于高性能需求的计算机和服务器,而arm64则更多应用于功耗要求更严格的场合。
|
||||
|
||||
查看方法:
|
||||
|
||||
Linux:
|
||||
|
||||
- 打开终端。
|
||||
- 输入 uname -m 或 arch 并按回车。
|
||||
- 你将看到你的处理器架构(可能是 x86_64, aarch64 等)。
|
||||
---
|
||||
|
||||
### 国产架构支持
|
||||
**Q: 我是国产架构,怎么获取应用?**
|
||||
**A:** 目前,星火商店支持**arm**架构的国产芯片。你可以下载适用于 arm64 架构的deb包(软件安装包)。
|
||||
> ⚠️ 请注意,这是实验性的支持。如果遇到问题,请在星火交流平台、QQ群或论坛向我们反馈。
|
||||
|
||||
---
|
||||
|
||||
### 安装依赖问题
|
||||
**Q: 安装依赖包出现错误**
|
||||
**A:** 如果你使用UOS或deepin,请不要安装依赖包。对于Kali Linux/Kdeneon等,暂时不支持,请自行编译安装。
|
||||
> 💡 出现错误时,尝试运行 `sudo apt update` 后再尝试安装。如果问题仍然存在,请参考第一条,进入交流平台寻求帮助。
|
||||
|
||||
---
|
||||
|
||||
### 投稿与应用更新
|
||||
**Q: 在哪里投稿?**
|
||||
**A:** 你可以在应用商店界面的右上角菜单找到“投递应用”的选项。
|
||||
|
||||
---
|
||||
|
||||
### 非deepin/UOS用户支持
|
||||
**Q: 我不是deepin/UOS用户,可以使用星火应用商店吗?**
|
||||
**A:** 可以,如果你是使用 Ubuntu 22.04,请直接安装。对于 Ubuntu 20.04/Debian10/Debian11,请先安装依赖包。
|
||||
|
||||
---
|
||||
|
||||
### 安装方法
|
||||
**Q: 我可以用dpkg -i安装吗?**
|
||||
**A:** 不可以!使用 `sudo apt install ./xxxx.deb` 来安装,或者使用gdebi等图形化的安装器。
|
||||
> ⚠️ 直接使用dpkg是不会处理软件依赖的,这是一个常见的错误。
|
||||
|
||||
---
|
||||
|
||||
### 系统更新
|
||||
**Q: 星火商店会影响系统正常更新吗?**
|
||||
**A:** 不会,星火商店已经将应用源与系统源分开,不会影响系统的正常更新。
|
||||
|
||||
---
|
||||
|
||||
### 报告问题和应用下架
|
||||
**Q: 有些应用已经过时或者失效了,我想让他下架**
|
||||
**A:** 你可以前往 [这里](https://gitee.com/deepin-community-store/software_-issue) 报告问题。
|
||||
|
||||
---
|
||||
|
||||
### 安装星火应用商店
|
||||
如果你想安装星火应用商店,请打开[Release页面](https://gitee.com/deepin-community-store/spark-store/releases),找到最新版本,并选择适用于当前系统的安装包下载。
|
||||
|
||||
> ⚠️ 特别提示: 如果你在使用 Debian10/Debian11 或 Ubuntu 20.04,你可能额外下载依赖补充包。您需要在下载完依赖包后,解压多次一直到看到内部的软件使用说明,对于 Ubuntu22.04 以后的操作系统版本,您无需安装依赖包,您需要按照上面的操作直接安装本体程序。
|
||||
|
||||
---
|
||||
683
LICENSE
683
LICENSE
@@ -1,674 +1,29 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
星火开源软件协议(Spark Opensource LICENSE)
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
版权所有 (C) 2023 星火社区
|
||||
|
||||
Preamble
|
||||
根据 GNU 通用公共许可证第三版(GPL v3),本软件是自由软件,您可以修改和再发布它。但是,为了维护原作者的权益并保护社区用户的权益,请遵守以下条款:
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
1. 对本仓库下的所有文件生效:本许可证适用于本仓库(或项目)下的所有文件。任何使用、修改或再发布本软件的个人或组织都必须遵守本许可证。
|
||||
2. 版权声明和许可证文件:您不得移除、隐藏或更改本软件中包含的原作者的版权声明和许可证文件。保留原作者的权益信息对于维护开源软件生态系统至关重要。
|
||||
3. 版本标注:如果您对本软件做出修改并再发布,您必须在醒目位置标注此版本并非星火社区官方提供。这样可以避免误导使用者认为该软件为星火社区官方提供的版本。
|
||||
4. 商标使用:您不得在再发布版本中使用“星火应用商店”、“Spark Store”或星火应用商店的Logo等可能误导使用者此软件由星火社区官方提供的信息。
|
||||
5. 其他条款:除上述约定外,您应遵守 GPL v3 的所有其他条款和要求。
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
GPLV3许可证的完整文本可以在以下链接找到:https://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
---------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
Spark Opensource LICENSE
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
Copyright (C) 2023 The Spark Community
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
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:
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
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 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.
|
||||
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.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
You can find the full text of GPLV3 license at: https://www.gnu.org/licenses/gpl-3.0.html
|
||||
674
LICENSE-GPL3
Normal file
674
LICENSE-GPL3
Normal file
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
180
README.md
180
README.md
@@ -1,167 +1,83 @@
|
||||
# Spark App Store
|
||||
[](https://gitee.com/spark-store-project/spark-store/stargazers) [](https://gitee.com/spark-store-project/spark-store/members)
|
||||
# Spark App Store
|
||||
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](https://gitee.com/deepin-community-store/spark-store/members)
|
||||
|
||||
## Introduction
|
||||
|
||||
Welcome to the Spark App Store! This is an app store designed for Linux users, aiming to solve the problem of dispersed and difficult-to-obtain applications in the Linux ecosystem. No matter what type of Linux distribution you are using, you may find suitable software packages here.
|
||||
## You are informed that the aarch64 support is EXPERIMENTAL and there is NO GUARANTEE that this branch will be supported in the future
|
||||
|
||||
The number of Linux applications is relatively limited, and the availability of Wine software is also quite challenging. Excellent development and tool resources are scattered across various communities and forums, making it difficult for the entire ecosystem to improve comprehensively.
|
||||
Spark Store aims to collect Linux apps for the convieniece of Linux new comers
|
||||
|
||||
The construction of the ecosystem is not dependent on the isolated efforts of individuals but requires the participation of the entire community. Only when everyone's "sparks" gather together can they ignite a "prairie fire."
|
||||
The collecting process needs everyone's help
|
||||
|
||||
To improve this situation, we have launched this app store. We have broadly included various user-demand software packages, gathered high-quality tools, and actively adapted Wine applications, all stored in our software library for easy user access.
|
||||
We set up this APP Store and collect APPs/tools that everyone need widely. Also we pack Windows apps with wine.
|
||||
|
||||
**Currently supported Linux distributions include:**
|
||||
All packages will be shared in our repository for users to get freely.
|
||||
|
||||
- **amd64 architecture:** deepin 20 / deepin 23 / Ubuntu 20.04 / Ubuntu 22.04 / UOS Home Edition 20
|
||||
- **arm64 architecture:** UOS Professional Edition 1060 / Ubuntu 22.04 / deepin 23
|
||||
- **loong64 architecture:** deepin 23
|
||||
Distrobution supported:Deepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(May stop support in the future) ; UniontechOS Home 21
|
||||
|
||||
> Special Note: We also support all versions of Ubuntu operating systems higher than Ubuntu 22.04, such as Ubuntu 22.10, 23.04, 23.10, etc.
|
||||
*About OpenKylin and deepin 23*
|
||||
|
||||
**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.
|
||||
The adaptation work is scheduled after their official release.
|
||||
|
||||
## Team Collaboration: For detailed documentation related to branch management, please see [this link](https://wiki.spark-app.store/#/Dev/Spark-Store-Git-Repo).
|
||||
You can track our Issue resoving progress here https://gitee.com/deepin-community-store/spark-store/board
|
||||
|
||||
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/spark-store-project/spark-store/board).
|
||||
We hope people who see here can also join our team,development help or submit applications are welcomed
|
||||
|
||||
If you have a software package you'd like to submit, please [click here to submit](https://upload.deepinos.org.cn/index).
|
||||
If you want to submit an APP to share with others,Please [Click here](https://upload.deepinos.org/index)
|
||||
|
||||
## Contents
|
||||
|
||||
- [Read the copyright](#read-the-copyright)
|
||||
- [Determine your system architecture](#determine-your-system-architecture)
|
||||
- [System support and installation guide](#system-support-and-installation-guide)
|
||||
- [For Deepin / UOS Users](#for-deepin-users)
|
||||
- [For Ubuntu Users](#for-ubuntu-users)
|
||||
- [For Debian Users](#for-debian-users)
|
||||
- [Frequently Asked Questions (FAQ)](#frequently-asked-questions-faq)
|
||||
- [Contact and Feedback](#contact-and-feedback)
|
||||
## 🙌 A simple start
|
||||
|
||||
If you simply want to install the Spark Store,just enter the [Release] page, find the version you want and install.
|
||||
|
||||
If you are using Debian11/Ubuntu 20.04, you will need extra dependency package. Available [here](https://zunyun01.store.deepinos.org.cn/spark-store-dependencies-kylin.zip)
|
||||
|
||||
---
|
||||
|
||||
## Read [the copyright](LICENSE)
|
||||
#### Compile and developement
|
||||
|
||||
|
||||
For Deepin V20/UOS 21/ Debian 11
|
||||
|
||||
## Determine your system architecture
|
||||
```shell
|
||||
sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin libqt5svg5*
|
||||
|
||||
Before installing any software, you need to know what architecture your computer runs on (such as x86_64/amd64 or aarch64/arm64).
|
||||
```
|
||||
|
||||
**How to check:**
|
||||
Ubuntu 22.04
|
||||
```shell
|
||||
sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev qtwayland5 qtwayland5-dev-tools libqt5svg5*
|
||||
|
||||
1. Open a Linux terminal.
|
||||
2. Type `uname -m` or `arch` and press Enter.
|
||||
```
|
||||
|
||||
You will see an output, and that's your system architecture.
|
||||
Then
|
||||
|
||||
- If you see `x86_64`, your system is AMD64 architecture.
|
||||
- If you see `aarch64`, your system is ARM64 architecture.
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
dpkg-buildpackage -j
|
||||
```
|
||||
|
||||
---
|
||||
Or:
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
./build_and_install.sh
|
||||
```
|
||||
## EULA
|
||||
|
||||
## System support and installation guide
|
||||
This is our [EULA](https://genshin-impact.fandom.com/wiki/Eula)
|
||||
|
||||
### For Deepin Users
|
||||
|
||||
#### For Deepin Users
|
||||
## 🚀 Coorperation
|
||||
|
||||
1. **Download and Install**
|
||||
We use Gitee as our code hosting platform. Please click here to contact us.
|
||||
|
||||
You can directly search for Spark App Store in the Deepin Store to install, or copy this link to open and install in your browser:
|
||||
https://gitee.com/deepin-community-store/spark-store
|
||||
|
||||
> appstore://deepin-home-appstore-client?app_detail_info/spark-store
|
||||
### Forum
|
||||
|
||||
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.
|
||||
https://www.deepinos.org/
|
||||
|
||||
Assuming you've downloaded to the `Downloads` folder in your user directory, we recommend you use the APT tool to install:
|
||||
#### QQ Group
|
||||
|
||||
```shell
|
||||
cd ~/Downloads
|
||||
sudo apt install ./spark-store*.deb
|
||||
```
|
||||
|
||||
### For Ubuntu Users
|
||||
|
||||
#### For Ubuntu 20.04 Users
|
||||
|
||||
1. **Download Dependencies**
|
||||
* Please visit the [Spark App Store Dependency Download page](https://gitee.com/spark-store-project/spark-store-dependencies/releases) and download the latest dependency package.
|
||||
* Unzip the dependency package multiple times until you see multiple installation packages ending with `.deb`.
|
||||
* Follow the instructions in the dependency package to install all the dependencies at once.
|
||||
|
||||
2. **Download and Install**
|
||||
|
||||
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:
|
||||
|
||||
```shell
|
||||
cd ~/Downloads
|
||||
sudo apt install ./spark-store*.deb
|
||||
```
|
||||
|
||||
#### For Ubuntu 22.04 and Higher Version Users
|
||||
|
||||
1. **No Need to Install Dependencies**
|
||||
|
||||
2. **Download and Install**
|
||||
|
||||
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:
|
||||
|
||||
```shell
|
||||
cd ~/Downloads
|
||||
sudo apt install ./spark-store*.deb
|
||||
```
|
||||
|
||||
### For Debian Users
|
||||
|
||||
#### For Debian 11 Users
|
||||
|
||||
1. **Download Dependencies**
|
||||
* Please visit the [Spark App Store Dependency Download page](https://gitee.com/spark-store-project/spark-store-dependencies/releases) and download the latest dependency package.
|
||||
* Unzip the dependency package multiple times until you see multiple installation packages ending with `.deb`.
|
||||
* Follow the instructions in the dependency package to install all the dependencies at once.
|
||||
|
||||
2. **Download and Install**
|
||||
|
||||
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
|
||||
|
||||
1. **No Need to Install Dependencies**
|
||||
|
||||
2. **Download and Install**
|
||||
|
||||
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:
|
||||
|
||||
```shell
|
||||
cd ~/Downloads
|
||||
sudo apt install ./spark-store*.deb
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Frequently Asked Questions (FAQ)
|
||||
|
||||
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/spark-store-project/spark-store/blob/dev/FAQ.zh.md) here.
|
||||
|
||||
---
|
||||
|
||||
## Contact and Feedback
|
||||
|
||||
- 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/spark-store-project/spark-store/board) for more information.
|
||||
- Our [Forum](https://bbs.spark-app.store/)
|
||||
- Our [QQ Group](https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/)
|
||||
- For commercial support, please leave your issue~
|
||||
|
||||
---
|
||||
https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/
|
||||
211
README.zh.md
211
README.zh.md
@@ -1,188 +1,79 @@
|
||||
# 星火应用商店
|
||||
[](https://gitee.com/spark-store-project/spark-store/stargazers) [](https://gitee.com/spark-store-project/spark-store/members)
|
||||
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](https://gitee.com/deepin-community-store/spark-store/members)
|
||||
|
||||
|
||||
## 请注意,aarch64的支持是实验性的,并未确认持续支持!
|
||||
|
||||
## 简介
|
||||
众所周知,国内的Linux应用比较少,wine应用难以获取,优质工具分散在民间各大论坛,无法形成合力,难以改善生态
|
||||
|
||||
欢迎来到星火应用商店!这是一个为Linux用户设计的应用商店,旨在解决Linux生态下应用分散、难以获取的问题。无论你是使用什么类型的Linux发行版,这里都有可能找到适合你的软件包。
|
||||
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
|
||||
|
||||
我们创建了这个应用商店,广泛收录大家需要的软件包,搜集优质小工具,主动适配wine应用,存放到储存库供大家获取
|
||||
我们支持:Deepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(将会逐渐停止支持) ; UOS Home 21
|
||||
|
||||
## 关于协作:分支相关的文档见 [这里](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo)
|
||||
|
||||
*关于OpenKylin和deepin 23*
|
||||
|
||||
支持计划将会在对应系统发布正式版之后开始评估和执行
|
||||
|
||||
希望看到这里的人也可以加入我们的队伍,开发或者投递应用都很欢迎,共同构建Linux应用生态
|
||||
|
||||
在这里追踪我们的Issue处理情况 https://gitee.com/deepin-community-store/spark-store/board
|
||||
|
||||
如果有想要提交的软件包,请 [在这里投稿](https://upload.deepinos.org/index)
|
||||
|
||||
|
||||
Linux 应用的数量相对有限,Wine 软件的可获得性也颇为困难。优秀的开发和工具资源散布在各大社区和论坛之间,这种分散化让整个生态系统难以得到全面的提升。
|
||||
## 🙌 简单的开始
|
||||
|
||||
生态系统的构建并非依赖个体的孤立努力,而需要全社区共同参与。只有当大家的“星火”聚集一处,方可引发“燎原之势”。
|
||||
如果想安装 `星火应用商店` ,请打开右侧的 [Release] 页面,找到最新版本,并选择适用于当前系统的安装包下载。
|
||||
|
||||
为了改善这一现状,我们推出了这个应用商店。我们广泛地收录了各种用户需求的软件包,汇集了高质量的小工具,并主动对 Wine 应用进行了适配,一切都储存在我们的软件库中,使得用户可以方便地获取这些应用。
|
||||
|
||||
**当前支持的Linux发行版包括:**
|
||||
|
||||
- **amd64架构:** deepin 20 / deepin 23 / Ubuntu 20.04 / Ubuntu 22.04 / UOS家庭版20
|
||||
- **arm64架构:** UOS专业版1060 / Ubuntu 22.04 / deepin 23
|
||||
- **loong64架构:** deepin 23
|
||||
|
||||
> 特别说明:我们还支持所有版本高于Ubuntu 22.04的Ubuntu操作系统,例如Ubuntu 22.10、23.04、23.10等。
|
||||
|
||||
**重要须知:** 本软件不提供任何形式的保证。若您计划在UOS专业版上使用,请务必了解并启用开发者模式。请确保您具备基础的故障排查能力。需要明确的是,我们没有在UOS操作系统上进行广泛的测试。因此,使用星火客户端可能会导致一系列问题,如系统更新失败、数据丢失等,所有风险需由用户自行承担。
|
||||
|
||||
|
||||
|
||||
## 关于团队协作
|
||||
|
||||
组织仓库链接:
|
||||
https://gitee.com/spark-store-project/spark-store
|
||||
|
||||
https://gitcode.com/spark-store-project/spark-store
|
||||
|
||||
https://github.com/spark-store-project/spark-store
|
||||
|
||||
分支管理相关的详细文档可参见 [此链接](https://wiki.spark-app.store/#/Dev/Spark-Store-Git-Repo)。
|
||||
|
||||
我们热忱欢迎您加入我们的开发团队。无论您是想参与开发,还是想提交应用,都能在这里找到属于您的一席之地,共同推动Linux应用生态的发展。
|
||||
|
||||
您可以通过以下链接,实时跟踪我们的Issue处理状态:[Gitee Issue看板](https://gitee.com/spark-store-project/spark-store/board)。
|
||||
|
||||
若您有软件包想要提交,敬请 [点击此处进行投稿](https://wiki.spark-app.store/#/Submit/Submit)。
|
||||
|
||||
|
||||
|
||||
|
||||
## 目录
|
||||
|
||||
- [阅读版权声明](#阅读版权声明)
|
||||
- [确定你的系统架构](#确定你的系统架构)
|
||||
- [系统支持与安装指引](#系统支持与安装指引)
|
||||
- [对于 Deepin / UOS 用户](#对于deepin用户)
|
||||
- [对于 Ubuntu 用户](#对于ubuntu用户)
|
||||
- [对于 Debian 用户](#对于debian用户)
|
||||
- [常见问题(FAQ)](#常见问题faq)
|
||||
- [联系与反馈](#联系与反馈)
|
||||
如果你在使用 `Debian 11/Ubuntu 20.04`,你需要额外下载[依赖补充包](https://zunyun01.store.deepinos.org.cn/spark-store-dependencies-kylin.zip)
|
||||
|
||||
---
|
||||
|
||||
## 阅读[版权声明](LICENSE)
|
||||
#### 编译安装
|
||||
|
||||
|
||||
## 确定你的系统架构
|
||||
Deepin V20/UOS 21 系统下, 安装依赖
|
||||
|
||||
在安装任何软件之前,你需要知道你的计算机运行的是哪种架构(如x86_64/amd64或aarch64/arm64)。
|
||||
```shell
|
||||
sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin libqt5svg5*
|
||||
|
||||
**如何检查:**
|
||||
```
|
||||
|
||||
1. 打开Linux终端。
|
||||
2. 输入 `uname -m` 或 `arch` 并按回车。
|
||||
Ubuntu 22.04 系统下, 安装依赖
|
||||
```shell
|
||||
sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev qtwayland5 qtwayland5-dev-tools libqt5svg5*
|
||||
|
||||
你会看到一个输出,这就是你的系统架构。
|
||||
```
|
||||
|
||||
- 如果看到 `x86_64`,你的系统是AMD64架构。
|
||||
- 如果看到 `aarch64`,你的系统是ARM64架构。
|
||||
然后
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
dpkg-buildpackage -j
|
||||
```
|
||||
|
||||
---
|
||||
或者: 编译并安装
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
./build_and_install.sh
|
||||
```
|
||||
|
||||
## 系统支持与安装指引
|
||||
## EULA
|
||||
|
||||
根据你的Linux发行版和系统架构,以下是安装星火应用商店的详细步骤。
|
||||
|
||||
### 对于 Deepin 用户
|
||||
|
||||
#### 对于 Deepin 用户
|
||||
|
||||
1. **下载并安装**
|
||||
|
||||
您可直接在深度商店搜索 星火应用商店 安装,或复制此链接到浏览器打开安装
|
||||
|
||||
> appstore://deepin-home-appstore-client?app_detail_info/spark-store
|
||||
这里是我们的[EULA](https://mzh.moegirl.org.cn/%E4%BC%98%E8%8F%88%C2%B7%E5%8A%B3%E4%BC%A6%E6%96%AF)
|
||||
|
||||
|
||||
若要使用最新版本,请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases)或[Gitcode的Release页面](https://gitcode.com/spark-store-project/spark-store/releases)并下载适用于Deepin的最新版本。安装后即可使用。
|
||||
## 🚀 协作
|
||||
|
||||
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
|
||||
非常感谢有兴趣的开发者或爱好者参与 `星火应用商店` 项目,分享你的见解与思路。
|
||||
|
||||
```shell
|
||||
cd ~/Downloads
|
||||
sudo apt install ./spark-store*.deb
|
||||
```
|
||||
### 论坛
|
||||
|
||||
### 对于 Ubuntu 用户
|
||||
https://www.deepinos.org/
|
||||
|
||||
#### 对于 Ubuntu 20.04 用户
|
||||
#### QQ群:
|
||||
|
||||
1. **下载依赖包**
|
||||
* 请访问[星火应用商店依赖包下载页面](https://gitee.com/spark-store-project/spark-store-dependencies/releases), 下载最新的依赖包。
|
||||
* 请多次解压依赖包,直到你可以看到诸多以 deb 结尾的安装包。
|
||||
* 依据依赖包内的说明,一次性安装所有的依赖包。
|
||||
|
||||
|
||||
2. **下载并安装**
|
||||
|
||||
请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases)或[Gitcode的Release页面](https://gitcode.com/spark-store-project/spark-store/releases),下载和您电脑相同架构的安装包并安装。
|
||||
|
||||
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
|
||||
|
||||
```shell
|
||||
cd ~/Downloads
|
||||
sudo apt install ./spark-store*.deb
|
||||
```
|
||||
|
||||
#### 对于 Ubuntu 22.04 及更高版本的 Ubuntu 用户
|
||||
1. **无需安装依赖包**
|
||||
|
||||
|
||||
2. **下载并安装**
|
||||
|
||||
请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases)或[Gitcode的Release页面](https://gitcode.com/spark-store-project/spark-store/releases),下载和您电脑相同架构的安装包并安装。
|
||||
|
||||
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
|
||||
|
||||
```shell
|
||||
cd ~/Downloads
|
||||
sudo apt install ./spark-store*.deb
|
||||
```
|
||||
|
||||
### 对于 Debian 用户
|
||||
|
||||
#### 对于 Debian 11 用户
|
||||
|
||||
1. **下载依赖包**
|
||||
* 请访问[星火应用商店依赖包下载页面](https://gitee.com/spark-store-project/spark-store-dependencies/releases), 下载最新的依赖包。
|
||||
* 请多次解压依赖包,直到你可以看到诸多以 deb 结尾的安装包。
|
||||
* 依据依赖包内的说明,一次性安装所有的依赖包。
|
||||
|
||||
2. **下载并安装**
|
||||
|
||||
请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases)或[Gitcode的Release页面](https://gitcode.com/spark-store-project/spark-store/releases)并下载,安装后即可使用。
|
||||
|
||||
|
||||
#### 对于 Debian 12+ 用户
|
||||
|
||||
1. **无需安装依赖包**
|
||||
|
||||
|
||||
2. **下载并安装**
|
||||
|
||||
请访问[星火应用商店的Release页面](https://gitee.com/spark-store-project/spark-store/releases)或[Gitcode的Release页面](https://gitcode.com/spark-store-project/spark-store/releases),下载和您电脑相同架构的安装包并安装。
|
||||
|
||||
假设您下载到用户目录下的 Downloads 文件夹, 我们推荐您使用 APT 工具安装:
|
||||
|
||||
```shell
|
||||
cd ~/Downloads
|
||||
sudo apt install ./spark-store*.deb
|
||||
```
|
||||
---
|
||||
|
||||
## 常见问题(FAQ)
|
||||
|
||||
请参见[星火应用商店FAQ与支持指南](https://gitee.com/spark-store-project/spark-store/blob/dev/FAQ.md)。
|
||||
|
||||
在这里可以查阅[中文版本](https://gitee.com/spark-store-project/spark-store/blob/dev/FAQ.zh.md)。
|
||||
|
||||
---
|
||||
|
||||
## 联系与反馈
|
||||
|
||||
- 如果您有任何问题或建议,请通过邮件或在[Gitee页面](https://gitee.com/spark-store-project/spark-store/issues)上提交问题。
|
||||
- 如果你想关注我们的开发进度,可以跳转[星火应用商店Board](https://gitee.com/spark-store-project/spark-store/board)获取更多信息。
|
||||
- 我们的[论坛](https://bbs.spark-app.store/)
|
||||
- 我们的QQ群 872690351
|
||||
- 商业支持请留言咨询~
|
||||
|
||||
---
|
||||
https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/
|
||||
|
||||
502
debian/changelog
vendored
502
debian/changelog
vendored
@@ -1,294 +1,56 @@
|
||||
spark-store (4.3.3.1) UNRELEASED; urgency=medium
|
||||
|
||||
* 修复点击更新需要输入密码的问题
|
||||
* 修复安装速度下降的问题
|
||||
* 修复闪退问题
|
||||
* 修复错误地展示已安装
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Tue, 24 Sep 2024 11:27:08 +0800
|
||||
|
||||
spark-store (4.3.2.0) UNRELEASED; urgency=medium
|
||||
|
||||
* 后续更新请从4.3.2.0版本号开始,4.3.2版本仅用于GXDE测试
|
||||
* 支持dummyapps 安装包安装
|
||||
* 支持紧凑模式
|
||||
* 修复部分情况下升级安装失败的问题
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Tue, 24 Sep 2024 11:27:08 +0800
|
||||
|
||||
spark-store (4.3.2) UNRELEASED; urgency=medium
|
||||
|
||||
* ssinstall支持安装conflict包
|
||||
* 支持紧凑模式
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Tue, 24 Sep 2024 11:27:08 +0800
|
||||
|
||||
spark-store (4.3.1) UNRELEASED; urgency=medium
|
||||
|
||||
* 修复自提权更新问题
|
||||
* 提升aptss稳定性
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Tue, 24 Sep 2024 11:27:08 +0800
|
||||
|
||||
spark-store (4.3.0-fix5) stable; urgency=medium
|
||||
|
||||
* 支持GXDE,重启空链接清理
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
|
||||
|
||||
spark-store (4.3.0-fix4) stable; urgency=medium
|
||||
|
||||
* 修复:安装失败时仍然锁定
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
spark-store (4.3.0-fix3) stable; urgency=medium
|
||||
|
||||
* 修复:创建快捷方式失效
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
|
||||
spark-store (4.3.0-fix2) stable; urgency=medium
|
||||
|
||||
* aptss配置调整
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
|
||||
spark-store (4.3.0-fix1) stable; urgency=medium
|
||||
|
||||
* 上游改为d.spark-app.store
|
||||
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
spark-store (4.3) stable; urgency=medium
|
||||
|
||||
* 修复客户端不支持301跳转的问题
|
||||
* 修复UOS下错误地提示开发者模式未启动
|
||||
* 现在会记住上次的窗口大小
|
||||
* 删除无用依赖,修复Debian 13依赖问题
|
||||
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
spark-store (4.2.14) stable; urgency=medium
|
||||
|
||||
|
||||
* 上游改为d.spark-app.store
|
||||
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
spark-store (4.3.0) stable; urgency=medium
|
||||
|
||||
* 修复部分客户端启动白屏
|
||||
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
spark-store (4.3) stable; urgency=medium
|
||||
|
||||
* 修复客户端不支持301跳转的问题
|
||||
* 修复UOS下错误地提示开发者模式未启动
|
||||
* 现在会记住上次的窗口大小
|
||||
* 删除无用依赖,修复Debian 13依赖问题
|
||||
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
spark-store (4.2.13) stable; urgency=medium
|
||||
|
||||
* 未经测试文案修改
|
||||
* 龙芯平台并入主线
|
||||
* 修复:更新过程中中断无法再次启动更新检查
|
||||
* 调整:提高超时时长,适应较差的网络环境
|
||||
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
spark-store (4.2.12.1) stable; urgency=medium
|
||||
|
||||
* 修复:龙芯自动--no-sandbox
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
spark-store (4.2.12) stable; urgency=medium
|
||||
|
||||
* 修复:飞腾部分设备上白屏的问题
|
||||
* 修复:下载开始时长时等待(降低链接超时时长)
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
spark-store (4.2.11) stable; urgency=medium
|
||||
|
||||
* 修复:判断是否安装状态错误
|
||||
* 修改:部分组件重构提升清晰度
|
||||
* 修复:v23下部分应用图标失效
|
||||
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
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
|
||||
|
||||
* 修复:软件详情图片排序调整为服务器排序,而不是按加载顺序排序
|
||||
* 修复: build error on Deepin V23
|
||||
* 修复:容器内无限等待
|
||||
* 新增:高分屏截图支持
|
||||
* 新增:更新界面支持显示软件名称
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
spark-store (4.2.8.1) stable; urgency=medium
|
||||
|
||||
* 修复:A2D应用释放无效的Desktop到桌面上
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
spark-store (4.2.8) stable; urgency=medium
|
||||
|
||||
* 修复:在aptss上锁时支持等待释放锁而不是直接报错退出
|
||||
* 调整:下载安装按钮文案修改
|
||||
* 优化 KDE 深色模式支持实现方式
|
||||
* 新增:ssinstall现在会自动创建desktop文件
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
spark-store (4.2.7.3) stable; urgency=medium
|
||||
|
||||
* 修复:aptss现在会正确地透传错误码而不是exit 0
|
||||
* 修复:下载时如果卡0%(无法下载metalink),会在超时后报错中断而不是一直傻等
|
||||
* 修复:排队下载时CPU占满单核的bug https://gitee.com/deepin-community-store/spark-store/issues/I7B91V
|
||||
* 修复:在终端中打开的icon过大导致无法投稿到UOS
|
||||
* 修复:v23下编译出错
|
||||
* 薪怎:支持崩溃日志收集系统
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
|
||||
spark-store (4.2.7.2) stable; urgency=medium
|
||||
|
||||
* 新增:内置在终端打开功能
|
||||
* 调整:散列验证更改为使用sha512
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
|
||||
spark-store (4.2.7.1) stable; urgency=medium
|
||||
|
||||
* 修复:aptss加锁失败现在会正常报错
|
||||
* 新增:在aptss的特定操作时添加了提示
|
||||
* 新增:在aptss提示加粗
|
||||
* 调整:ssinstall验证支持使用cdn.d.获取
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
spark-store (4.2.7) stable; urgency=medium
|
||||
|
||||
* 修复:更新星火商店后禁止更新提醒的配置失效
|
||||
* 新增:支持在设置中关闭平台不兼容提示
|
||||
* 调整:更改了下载量统计的方式,减少漏数
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
spark-store (4.2.6.6) stable; urgency=medium
|
||||
|
||||
* 调整:文案修改:安装失败后引导查看详情而不是重新安装
|
||||
* 修复:dpkg阻塞出现漏掉的安装失败,现在在安装后检测是否安装
|
||||
* 修复:UOS专业版上安装成功仍然显示失败的问题:方式:忽略E:等消息,仅检查脚本报错
|
||||
* 调整:卸载应用时采用autopurge以一并卸载依赖
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
spark-store (4.2.6.5) stable; urgency=medium
|
||||
|
||||
* 调整:ssaudit安装结束时会提示安装结束
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
spark-store (4.2.6.4) stable; urgency=medium
|
||||
|
||||
* 修复:关于页面的入口过时
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.6.3) stable; urgency=medium
|
||||
|
||||
* 修复:部分下载统计线路失效
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
|
||||
spark-store (4.2.6.2) stable; urgency=medium
|
||||
|
||||
* 新增:支持arm架构搜索
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.6.1) stable; urgency=medium
|
||||
|
||||
* 修复:mint下更新检测不正常
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.6) stable; urgency=medium
|
||||
|
||||
* 修复:截图加载失败时点击闪退
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.5.1) stable; urgency=medium
|
||||
|
||||
* 调整:重写了spark-dstore-patch,速度提升,尤其对机械硬盘下
|
||||
* 调整:优化了aptss源文件同步策略
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.5) stable; urgency=medium
|
||||
|
||||
* 修复:ssinstall在文件不存在时仍然报安装成功
|
||||
* 修复:删除不再需要的依赖:libc6-dev
|
||||
* 在aarch64架构安装时也启用32位支持
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
spark-store (4.2.4) stable; urgency=medium
|
||||
|
||||
* 修复:ssinstall校验失败的时候仍然提示安装成功
|
||||
* 新增:ssinstall可以自动刷新ssupdate以防止仓库更新中导致的安装校验失败
|
||||
* 修复:在不受支持的平台安装应用时弹出提示不正确
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
spark-store (4.2.3.3) stable; urgency=medium
|
||||
|
||||
* aptss 不再使用bwrap,去除依赖,支持容器中启动
|
||||
* aptss 支持非root模式启动
|
||||
* aptss 添加transhell支持
|
||||
@@ -299,30 +61,27 @@ spark-store (4.2.3.3) stable; urgency=medium
|
||||
* 4.3 roadmap 实现,在浏览不支持的应用时会出现提示
|
||||
* 4.3 roadmap 实现,在下载文件夹没有读写权限时会出现提示
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.3.2~Reason10) stable; urgency=medium
|
||||
|
||||
* 完成除web外大部分功能适配
|
||||
* 修复依赖不完整的问题
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.3.2~Reason9) stable; urgency=medium
|
||||
|
||||
* sender-d.sh
|
||||
* ssinstall和ssaudit的安装测试转到upgrade-worker
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.3.2~Reason8) stable; urgency=medium
|
||||
|
||||
* sender-d改用cpp重写,在aarch64上稳定运行
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.3.2~Reason7) stable; urgency=medium
|
||||
@@ -331,44 +90,36 @@ spark-store (4.2.3.2~Reason7) stable; urgency=medium
|
||||
* ssinstall在发现无法安装后尝试先进行下aptss update
|
||||
* 修复:安装商店后首次启动无法安装任何软件
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
|
||||
|
||||
spark-store (4.2.3.2~Reason5) stable; urgency=medium
|
||||
|
||||
* aptss 不再使用bwrap,去除依赖,支持容器中启动
|
||||
* aptss 支持非root模式启动
|
||||
* aptss 添加transhell支持
|
||||
* 关于界面自动获取分支名称
|
||||
* 现在安装成功则自动删除安装包
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
-- shenmo <shenmo@spark-app.store>
|
||||
spark-store (4.2.3.2~Reason3) stable; urgency=medium
|
||||
|
||||
* 现在可在x86上编译,使用同一套代码
|
||||
* 暂时在aarch64上使用旧web----等待柚子
|
||||
* 空间,疾疫,现在是静谧
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||
|
||||
|
||||
spark-store (4.2.3.2~only-for-test1) stable; urgency=medium
|
||||
|
||||
* 注意!!!!!! 此版本仅为启动测试,还需要进一步完善——hardcode需要改善——关于web界面的调用方式需要在柚子做好之后修改成新的
|
||||
* fix: hardcode
|
||||
* fix: sender-d
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (4.2.3.1) stable; urgency=medium
|
||||
* 修复: ssinstall验证签名出错
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (4.2.3) stable; urgency=medium
|
||||
* 修复: 编译依赖不全
|
||||
* 修复: prerm导致的dpkg崩溃
|
||||
@@ -378,14 +129,12 @@ spark-store (4.2.3) stable; urgency=medium
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (4.2.3~test4) stable; urgency=medium
|
||||
|
||||
* 修复: aptss 无法安装
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (4.2.3~test3) stable; urgency=medium
|
||||
|
||||
* 调整:打包时从 debian/changelog 自动获取构建版本号并写入关于窗口保证与deb一致
|
||||
@@ -397,7 +146,6 @@ spark-store (4.2.3~test3) stable; urgency=medium
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (4.2.3~test2) stable; urgency=medium
|
||||
|
||||
* 调整:开启安装包加固
|
||||
@@ -748,5 +496,221 @@ spark-store (3.2.4~test2) stable; urgency=medium
|
||||
spark-store (3.2.4~test1) stable; urgency=medium
|
||||
|
||||
* 客户端更新时不关闭免密码登录
|
||||
* U
|
||||
|
||||
* UOS合并正常aptss中
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.2.3) stable; urgency=medium
|
||||
|
||||
* 客户端异常退出时仍然占用资源问题修复
|
||||
* 降低dtk依赖版本,Debian 11 stable可直接安装
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.2.2) stable; urgency=medium
|
||||
|
||||
* aptss will now refresh the system source before doing install, policy....etc
|
||||
* 启动客户端GPU加速支持
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.2.1) stable; urgency=medium
|
||||
|
||||
* 更改刷新系统源的功能
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.2) stable; urgency=medium
|
||||
|
||||
* 新增 下载量统计功能
|
||||
* 新增 显示下载量
|
||||
* 修复 spk链接生成错误
|
||||
* 调整 启动时检测商店applist源
|
||||
* 新增 applist cdn加速
|
||||
* 调整 ssupdate不再更新/etc/aptss下的cache,如要如此,请使用aptss update
|
||||
* 修复 在更新检测设置中的是否开启自动更新检测设置项的显示不随开启或关闭状态改变
|
||||
* 修复 在检测更新时临时降低优先级到100,防止系统中有且版本一致的包被反复来回更新
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.6) stable; urgency=medium
|
||||
|
||||
* 修复部分情况下无法选中正确的镜像源的问题
|
||||
* 合入3.1.5以来的各项修改
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.5-5) stable; urgency=medium
|
||||
|
||||
* 从所有镜像源中选取最快镜像源高速下载
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.5-4) stable; urgency=medium
|
||||
|
||||
* 更改ss-apt-fast策略,现在只会在update,ssupdate和没有检测到配置文件的时候更新配置文件
|
||||
* 新增ss-apt-fast别名:aptss
|
||||
* 更新检测服务优化:从分体改为一体
|
||||
* aptss 支持自动补全
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.5-3) stable; urgency=medium
|
||||
|
||||
* 包内自带密钥
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.5-2) stable; urgency=medium
|
||||
|
||||
* 下载软件时跳过获取大小,修复部分软件无法下载的问题
|
||||
* 修复 获取key时出错,指定使用http1.1
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.5-1) stable; urgency=medium
|
||||
|
||||
* 改变更新策略,UOS也下载加速,但是安装不加速
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.5) stable; urgency=medium
|
||||
|
||||
* 改变更新策略,现在支持应用在更新时引入新依赖
|
||||
* ss-apt-fast现在默认允许降级,以与apt使用体验一致
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.4-2) stable; urgency=medium
|
||||
|
||||
* 客户端下载使用metalink来支持bt下载加速
|
||||
* 修复使用更新和安装设置更新商店本体时出错
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.4-1) stable; urgency=medium
|
||||
|
||||
* 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
|
||||
* 修复:ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.4) stable; urgency=medium
|
||||
|
||||
* 发布正式版,同步到官网
|
||||
* 修复安装时使用wget的问题
|
||||
* 合并3.1.3-1和3.1.3-2的更改
|
||||
* 屏蔽了ssinstall之外的安装方式
|
||||
* 调整了报错框的形式
|
||||
* 修复pkexec下ssinstall不处理依赖
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.3-2) stable; urgency=medium
|
||||
|
||||
* 调整 现在与系统更新分开,不再导致更新失败
|
||||
* 支持直接更新软件源文件,不再让d.吃全部更新流量
|
||||
* ss-apt-fast不再强制root权限
|
||||
* 修改ss-apt-fast的策略,现在除了安装,下载和更新都改用apt
|
||||
* ssinstall 现在也会在不适用ss-apt-fast的时候模拟源了(针对UOS)
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.3-1) stable; urgency=medium
|
||||
|
||||
* 修复 下载提前退出
|
||||
* 移除 下载量显示
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.3) stable; urgency=medium
|
||||
|
||||
* Now uses aria2 to download softwares form all mirrors
|
||||
* 新增:ssinstall现在会在没有apt-fast的时候自动安装
|
||||
* 新增:ss-apt-fast现在会在没有apt-fast的时候自动安装
|
||||
* 修改:删除ssinstall中无用的 || dpkg -P $1
|
||||
* 新增:ss-apt-fast会先下载云上的conf以确保mirror是最新的
|
||||
* 修复:去除wget指令
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.2) stable; urgency=medium
|
||||
|
||||
* Now let apt-fast method support all mirrors
|
||||
* Now will download dependencies and upgrade with all mirrors
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.1) stable; urgency=medium
|
||||
|
||||
* Now will delete the link of policy file after uninstall or upgrade
|
||||
* Now ss-update-controler will create symbol link instead of hard link
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.1.0) stable; urgency=medium
|
||||
|
||||
* Add pkexec policy: ssinstall. Only will be enabled after permitted.
|
||||
* Modify ssinistall script: Now will ask for password when not run as root
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.0.3-13) stable; urgency=medium
|
||||
|
||||
* Update the ssinstall script. Now support apt-fast and will temporarily increase the spark store source priority to 500 to make depends install correctly
|
||||
* Change the style of About Dialog
|
||||
* Modified depends to avoid Deb installers can not handle "Provides"
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.0.3-12) stable; urgency=medium
|
||||
|
||||
* Rollback to use DApplication::loadDXcbPlugin() to make titlebar behave normally in ubuntu
|
||||
* Now can run on Debian 11
|
||||
* Now can run on Ubuntu 22.04
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.0.3-11) stable; urgency=medium
|
||||
|
||||
* Now support autoupdate
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.0.3-10) stable; urgency=medium
|
||||
|
||||
* Now also compile dstore patch
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
spark-store (3.0.3-9) stable; urgency=medium
|
||||
|
||||
* Support dpkg-buildpackage
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||
|
||||
|
||||
42
debian/control
vendored
42
debian/control
vendored
@@ -5,31 +5,45 @@ Priority: optional
|
||||
Build-Depends:
|
||||
debhelper (>= 9),
|
||||
pkg-config,
|
||||
qtchooser (>= 55-gc9562a1-1~) | qt5-default,
|
||||
qtbase5-dev,
|
||||
qtchooser (>= 55-gc9562a1-1~),
|
||||
libqt5core5a,
|
||||
libqt5gui5,
|
||||
libqt5widgets5,
|
||||
libqt5network5,
|
||||
libqt5concurrent5,
|
||||
libdtkcore-dev(>=5.0),
|
||||
libdtkgui-dev(>=5.0),
|
||||
libdtkwidget-dev(>=5.0),
|
||||
libqt5svg5-dev,
|
||||
qttools5-dev-tools,
|
||||
qttools5-private-dev,
|
||||
qtwebengine5-dev,
|
||||
libdtkcore-dev (>= 5.0),
|
||||
libdtkgui-dev (>= 5.0),
|
||||
libdtkwidget-dev (>= 5.0)
|
||||
Standards-Version: 4.1.7
|
||||
qtwayland5,
|
||||
qtwayland5-dev-tools,
|
||||
gcc,
|
||||
g++
|
||||
Standards-Version: 4.0.0
|
||||
Homepage: https://www.spark-app.store/
|
||||
|
||||
Package: spark-store
|
||||
Architecture: any
|
||||
Provides: spark-store-console-in-container
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends},
|
||||
dde-qt5integration,
|
||||
Depends:${shlibs:Depends}, ${misc:Depends},
|
||||
libqt5core5a,
|
||||
libqt5gui5,
|
||||
libqt5widgets5,
|
||||
libqt5network5,
|
||||
libqt5concurrent5,
|
||||
qtwayland5,
|
||||
libdtkcore5,
|
||||
libdtkgui5,
|
||||
libdtkwidget5,
|
||||
curl,
|
||||
openssl,
|
||||
dde-qt5integration,
|
||||
aria2,
|
||||
gnupg,
|
||||
zenity,
|
||||
policykit-1 | pkexec,
|
||||
policykit-1,
|
||||
libnotify-bin,
|
||||
qtwayland5,
|
||||
desktop-file-utils,
|
||||
dpkg-dev
|
||||
desktop-file-utils
|
||||
Description: Spark Store
|
||||
A community powered app store, based on DTK.
|
||||
|
||||
17
debian/rules
vendored
17
debian/rules
vendored
@@ -7,9 +7,6 @@ include /usr/share/dpkg/default.mk
|
||||
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
|
||||
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
|
||||
|
||||
# Use realtime timestamp instead of the latest entry in debian/changelog
|
||||
SOURCE_DATE_EPOCH := $(shell date +%s)
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE = 1
|
||||
|
||||
@@ -17,23 +14,25 @@ SOURCE_DATE_EPOCH := $(shell date +%s)
|
||||
dh $@ --parallel
|
||||
|
||||
override_dh_auto_clean:
|
||||
rm -rf $(CURDIR)/build-$(DEB_HOST_MULTIARCH)
|
||||
rm -rf $(CURDIR)/build
|
||||
|
||||
override_dh_auto_configure:
|
||||
mkdir -p $(CURDIR)/build-$(DEB_HOST_MULTIARCH)
|
||||
mkdir -p $(CURDIR)/build
|
||||
|
||||
qmake BUILD_VERSION=$(DEB_VERSION_UPSTREAM) spark-store-project.pro \
|
||||
-spec linux-g++ CONFIG+=force_debug_info \
|
||||
-o $(CURDIR)/build-$(DEB_HOST_MULTIARCH)/
|
||||
-spec linux-g++ CONFIG+=qtquickcompiler \
|
||||
-o $(CURDIR)/build/
|
||||
|
||||
override_dh_auto_build:
|
||||
make -C $(CURDIR)/build-$(DEB_HOST_MULTIARCH) -j$(JOBS)
|
||||
make MAKEFLAGS="$(MAKEFLAGS)" -C $(CURDIR)/build
|
||||
|
||||
override_dh_auto_install:
|
||||
make -C $(CURDIR)/build-$(DEB_HOST_MULTIARCH) install \
|
||||
make -C $(CURDIR)/build install \
|
||||
INSTALL_ROOT=$(CURDIR)/debian/spark-store
|
||||
|
||||
|
||||
# Ignore the dpkg-shlibdeps: warning (it uses none of the library's symbols)
|
||||
# Qt Mutidedia lib will ref to network libraray.
|
||||
override_dh_shlibdeps:
|
||||
dh_shlibdeps --dpkg-shlibdeps-params=--warnings=0
|
||||
|
||||
|
||||
2
debian/source/format
vendored
2
debian/source/format
vendored
@@ -1 +1 @@
|
||||
3.0 (native)
|
||||
1.0
|
||||
56
debian/spark-store.postinst
vendored
56
debian/spark-store.postinst
vendored
@@ -4,60 +4,57 @@ case "$1" in
|
||||
configure)
|
||||
|
||||
case `arch` in
|
||||
x86_64)
|
||||
echo "Enabling i386 arch..."
|
||||
dpkg --add-architecture i386
|
||||
;;
|
||||
|
||||
aarch64)
|
||||
echo "Will not enable armhf since 4271"
|
||||
;;
|
||||
loongarch64)
|
||||
echo "Nope we DO NOT WANT ABI1 now"
|
||||
dpkg --remove-architecture loongarch64
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown architecture, skip enable 32-bit arch"
|
||||
;;
|
||||
x86_64)
|
||||
echo "Enabling i386 arch..."
|
||||
dpkg --add-architecture i386
|
||||
;;
|
||||
aarch64)
|
||||
echo "Enabling armhf arch..."
|
||||
dpkg --add-architecture armhf
|
||||
;;
|
||||
*)
|
||||
echo "Unknown architecture, skip enable 32-bit arch"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
mkdir -p /var/lib/aptss/lists
|
||||
|
||||
|
||||
# Remove the sources.list file
|
||||
rm -f /etc/apt/sources.list.d/sparkstore.list
|
||||
|
||||
# Check if /usr/local/bin existed
|
||||
mkdir -p /usr/local/bin
|
||||
## I hate /usr/local/bin. We will abandon them later
|
||||
|
||||
# Create symbol links for binary files
|
||||
ln -s -f /opt/durapps/spark-store/bin/spark-store /usr/local/bin/spark-store
|
||||
ln -s -f /opt/durapps/spark-store/bin/ssinstall /usr/local/bin/ssinstall
|
||||
ln -s -f /opt/durapps/spark-store/bin/ssaudit /usr/local/bin/ssaudit
|
||||
ln -s -f /opt/durapps/spark-store/bin/ssinstall /usr/bin/ssinstall
|
||||
ln -s -f /opt/durapps/spark-store/bin/ssaudit /usr/bin/ssaudit
|
||||
ln -s -f /opt/durapps/spark-store/bin/spark-dstore-patch /usr/local/bin/spark-dstore-patch
|
||||
ln -s -f /opt/durapps/spark-store/bin/spark-dstore-patch /usr/bin/spark-dstore-patch
|
||||
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/local/bin/ss-apt-fast
|
||||
|
||||
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/bin/aptss
|
||||
|
||||
# Create symbol links for SSINSTALL
|
||||
ln -s -f /opt/durapps/spark-store/bin/auto-install-policy/store.spark-app.ssinstall.policy /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
|
||||
|
||||
|
||||
|
||||
# Install key
|
||||
mkdir -p /tmp/spark-store-install/
|
||||
cp -f /opt/durapps/spark-store/bin/spark-store.asc /tmp/spark-store-install/spark-store.asc
|
||||
gpg --dearmor /tmp/spark-store-install/spark-store.asc
|
||||
cp -f /tmp/spark-store-install/spark-store.asc.gpg /etc/apt/trusted.gpg.d/spark-store.gpg
|
||||
|
||||
|
||||
# Run apt update to avoid users being fucked up by the non-exist dependency problem
|
||||
# Now abandoned as aptss now run ssupdate everytime
|
||||
#aptss ssupdate
|
||||
|
||||
# Start upgrade detect service
|
||||
systemctl daemon-reload
|
||||
systemctl enable spark-update-notifier
|
||||
systemctl start spark-update-notifier
|
||||
|
||||
|
||||
# Update certain caches
|
||||
update-icon-caches /usr/share/icons/hicolor || true
|
||||
update-desktop-database /usr/share/applications || true
|
||||
@@ -72,7 +69,18 @@ case "$1" in
|
||||
;;
|
||||
|
||||
triggered)
|
||||
spark-dstore-patch
|
||||
# Quit if deepin-app-store-tool existed
|
||||
if [ -x "/usr/bin/deepin-app-store-tool" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Trigger for UOS debs installation
|
||||
echo '--------检测到Uniontech标准软件包,运行补丁以修正安装--------'
|
||||
if [ -x "/usr/local/bin/spark-dstore-patch" ] ; then
|
||||
/usr/local/bin/spark-dstore-patch
|
||||
echo '-----------spark-dstore-patch补丁工具已运行完毕-----------'
|
||||
else
|
||||
echo '------------spark-dstore-patch补丁工具运行失败------------'
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
0
debian/spark-store.postrm
vendored
Executable file → Normal file
0
debian/spark-store.postrm
vendored
Executable file → Normal file
55
debian/spark-store.prerm
vendored
55
debian/spark-store.prerm
vendored
@@ -1,64 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
function notify-send()
|
||||
{
|
||||
# Detect the user using such display
|
||||
#Detect the user using such display
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
|
||||
# Detect the id of the user
|
||||
#Detect the id of the user
|
||||
local uid=$(id -u $user)
|
||||
|
||||
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "$@"
|
||||
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "$@"
|
||||
}
|
||||
|
||||
if [ "$1" = "remove" -o "$1" = "purge" ] ; then
|
||||
echo "$1"
|
||||
echo "卸载操作,进行配置清理"
|
||||
|
||||
if [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then
|
||||
# Remove residual symbol links
|
||||
unlink /usr/local/bin/spark-store
|
||||
unlink /usr/local/bin/ssinstall
|
||||
unlink /usr/local/bin/ssaudit
|
||||
unlink /usr/bin/ssinstall
|
||||
unlink /usr/bin/ssaudit
|
||||
unlink /usr/local/bin/spark-dstore-patch
|
||||
unlink /usr/bin/spark-dstore-patch
|
||||
unlink /usr/local/bin/ss-apt-fast
|
||||
unlink /usr/bin/aptss
|
||||
rm -f /usr/local/bin/spark-store
|
||||
rm -f /usr/local/bin/ssinstall
|
||||
rm -f /usr/local/bin/ssaudit
|
||||
rm -f /usr/local/bin/spark-dstore-patch
|
||||
rm -f /usr/local/bin/ss-apt-fast
|
||||
rm -f /usr/bin/aptss
|
||||
|
||||
rm -rf /etc/aptss/
|
||||
rm -rf /var/lib/aptss/
|
||||
|
||||
|
||||
|
||||
# Remove residual symbol links to stop upgrade detect
|
||||
rm -f /etc/xdg/autostart/spark-update-notifier.desktop
|
||||
# Remove config files
|
||||
for username in `ls /home`
|
||||
do
|
||||
echo /home/$username
|
||||
if [ -d /home/$username/.config/spark-union/spark-store ]
|
||||
then
|
||||
rm -rf /home/$username/.config/spark-union/spark-store
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
# Shutdown services
|
||||
systemctl stop spark-update-notifier
|
||||
# Stop update detect service
|
||||
systemctl disable spark-update-notifier
|
||||
|
||||
|
||||
# Clean the auto install polkit file if exist
|
||||
rm -f /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
|
||||
|
||||
# Remove gpg key file
|
||||
rm -f /etc/apt/trusted.gpg.d/spark-store.gpg
|
||||
apt-key del '9D9A A859 F750 24B1 A1EC E16E 0E41 D354 A29A 440C'
|
||||
else
|
||||
echo "非卸载操作,不进行配置清理"
|
||||
|
||||
if [ ! -z "`pidof spark-store`" ] ; then
|
||||
echo "关闭已有 spark-store.."
|
||||
notify-send "正在升级星火商店" "请在升级结束后重启星火商店" -i spark-store
|
||||
killall spark-store
|
||||
if [ ! -z "`pidof spark-store`" ];then
|
||||
echo "关闭已有 spark-store.."
|
||||
notify-send "正在升级星火商店" "请在升级结束后重启星火商店" -i spark-store
|
||||
killall spark-store
|
||||
else
|
||||
echo "继续安装 spark-store.."
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
1
debian/spark-store.triggers
vendored
1
debian/spark-store.triggers
vendored
@@ -1,2 +1 @@
|
||||
interest-noawait /opt/apps
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
1
pkg/etc/aptss/sources.list.d/sparkstore.list
Normal file
1
pkg/etc/aptss/sources.list.d/sparkstore.list
Normal file
@@ -0,0 +1 @@
|
||||
deb [by-hash=force] https://d.store.deepinos.org.cn /
|
||||
@@ -1,11 +0,0 @@
|
||||
[Unit]
|
||||
Description=Timer for Spark Update Notifier
|
||||
|
||||
[Timer]
|
||||
# 开机后第一次执行
|
||||
OnBootSec=1min
|
||||
# 每天执行一次
|
||||
OnUnitActiveSec=1d
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
@@ -1,12 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Categories=Development;
|
||||
Encoding=UTF-8
|
||||
Exec=/opt/durapps/spark-store/bin/open-in-terminal/open-in-terminal %U
|
||||
Icon=open-me-in-terminal
|
||||
MimeType=application/x-desktop
|
||||
Name=Open me in terminal
|
||||
Name[zh_CN]=在终端中打开
|
||||
NoDisplay=true
|
||||
StartupWMClass=在终端中打开
|
||||
Terminal=true
|
||||
Type=Application
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/bin/bash
|
||||
TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER="INFO:Running in non-root mode! If error occurs, please try to excute me as root."
|
||||
TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER="W:Running in non-root mode! If error occurs, please try to excute me as root."
|
||||
TRANSHELL_CONTENT_INFO_SOURCES_LIST_D_IS_EMPTY="INFO:sources.list.d directory is empty,will not try to sync"
|
||||
TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST="Getting server and mirror lists..."
|
||||
TRANSHELL_CONTENT_PLEASE_USE_APTSS_INSTEAD_OF_APT="Please note: Although the error message suggests using \"apt\" (such as \"apt install --fix-broken\"), please use \"aptss\" instead of \"apt\" when troubleshooting errors (for example, change to \"aptss install --fix-broken\")."
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/bin/bash
|
||||
TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER="信息:正在使用非root权限模式启动!若出现问题,请尝试使用root权限执行指令"
|
||||
TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER="警告:正在使用非root权限模式启动!若出现问题,请尝试使用root权限执行指令"
|
||||
TRANSHELL_CONTENT_INFO_SOURCES_LIST_D_IS_EMPTY="信息:sources.list.d文件夹是空的,将不会尝试同步"
|
||||
TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST="从服务器获取配置和镜像列表..."
|
||||
TRANSHELL_CONTENT_PLEASE_USE_APTSS_INSTEAD_OF_APT="注意:尽管报错信息中提示使用apt(如apt install --fix-broken),请在排查错误的时候使用aptss而不是apt(对于例子,改为使用 aptss install --fix-broken)."
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 89 KiB |
@@ -4,15 +4,15 @@
|
||||
<policyconfig>
|
||||
<vendor>Spark Store</vendor>
|
||||
<icon_name>x-package-repository</icon_name>
|
||||
<action id="store.spark-app.ss-do-upgrade">
|
||||
<description>运行ss-do-upgrade需要权限</description>
|
||||
<message>要使用ss-do-upgrade需要权限</message>
|
||||
<action id="store.spark-app.ss-do-upgrade-worker">
|
||||
<description>运行ss-do-upgrade-worker需要权限</description>
|
||||
<message>要使用ss-do-upgrade-worker需要权限</message>
|
||||
<defaults>
|
||||
<allow_any>yes</allow_any>
|
||||
<allow_inactive>yes</allow_inactive>
|
||||
<allow_active>yes</allow_active>
|
||||
</defaults>
|
||||
<annotate key="org.freedesktop.policykit.exec.path">/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.path">/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
</policyconfig>
|
||||
@@ -7,7 +7,8 @@
|
||||
TARGET = spark-store
|
||||
TEMPLATE = subdirs
|
||||
|
||||
CONFIG += ordered
|
||||
#CONFIG += ordered
|
||||
CONFIG += wayland-compositor
|
||||
|
||||
SUBDIRS += \
|
||||
src/spark-store.pro
|
||||
@@ -40,17 +41,16 @@ qm.path = /usr/share/spark-store/translations
|
||||
bash_completion.files += pkg/usr/share/bash-completion/completions/aptss
|
||||
bash_completion.path = /usr/share/bash-completion/completions
|
||||
|
||||
desktop.files += pkg/usr/share/applications/*.desktop
|
||||
desktop.files += pkg/usr/share/applications/spark-store.desktop
|
||||
desktop.path = /usr/share/applications
|
||||
|
||||
service.files += pkg/usr/lib/systemd/system/spark-update-notifier.service
|
||||
service.path = /usr/lib/systemd/system/
|
||||
|
||||
polkit-1.files += pkg/usr/share/polkit-1/actions/*
|
||||
polkit-1.files +=pkg/usr/share/polkit-1/actions/store.spark-app.ss-do-upgrade-worker.policy
|
||||
polkit-1.path = /usr/share/polkit-1/actions/
|
||||
|
||||
icon.files += pkg/usr/share/icons/hicolor/scalable/apps/*.svg
|
||||
icon.files += pkg/usr/share/icons/hicolor/scalable/apps/*.png
|
||||
icon.files += pkg/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||
icon.path = /usr/share/icons/hicolor/scalable/apps
|
||||
|
||||
ssinstall-transhell.files += pkg/usr/share/ssinstall/transhell
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
#include "mainwindow-dtk.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QJsonArray>
|
||||
#include <DPlatformWindowHandle>
|
||||
#include <DLog>
|
||||
#include <DGuiApplicationHelper>
|
||||
@@ -14,7 +12,6 @@
|
||||
|
||||
#include <QSettings>
|
||||
#include <QStandardPaths>
|
||||
#include <QTranslator>
|
||||
|
||||
DCORE_USE_NAMESPACE
|
||||
|
||||
@@ -36,13 +33,13 @@ Application::Application(int &argc, char **argv)
|
||||
setApplicationDisplayName(QObject::tr("Spark Store")); // 设置窗口显示标题 (Wayland 下会显示 Qt 原生标题栏)
|
||||
setProductName(QObject::tr("Spark Store"));
|
||||
setProductIcon(QIcon::fromTheme("spark-store"));
|
||||
setApplicationHomePage("https://gitee.com/spark-store-project");
|
||||
setApplicationHomePage("https://gitee.com/deepin-community-store");
|
||||
setApplicationDescription(
|
||||
QObject::tr(
|
||||
"<span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/>"
|
||||
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
|
||||
"<span style=' font-size:12pt;'>Spark developers</span>"));
|
||||
setApplicationLicense(" <a href='https://gitee.com/spark-store-project/spark-store/blob/Flamescion/LICENSE'>Spark Opensource License</a> ");
|
||||
setApplicationLicense(" <a href='https://gitee.com/deepin-community-store/spark-store/blob/Flamescion/LICENSE'>GPLv3</a> ");
|
||||
|
||||
// 检查 ~/.config/spark-union/spark-store 文件夹是否存在
|
||||
checkAppConfigLocation();
|
||||
@@ -94,7 +91,7 @@ void Application::setBuildDateTime(const QString &buildDateTime)
|
||||
qDebug() << "Spark Store has been updated!";
|
||||
|
||||
config.setValue("build/version", QString(APP_VERSION));
|
||||
config.setValue("build/branch", QString(APP_BRANCH));
|
||||
config.setValue("build/branch",QString(APP_BRANCH));
|
||||
config.setValue("build/time", buildDateTime);
|
||||
config.sync();
|
||||
}
|
||||
@@ -140,9 +137,9 @@ void Application::initAboutDialog()
|
||||
dialog->setProductName(productName());
|
||||
dialog->setProductIcon(productIcon());
|
||||
dialog->setVersion(translate("DAboutDialog", "Version: %1").arg(applicationVersion()));
|
||||
if (runtimeDtkVersion() >= DTK_VERSION_CHECK(5, 6, 4, 0)) {
|
||||
dialog->setVersion(applicationVersion());
|
||||
}
|
||||
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
|
||||
dialog->setVersion(applicationVersion());
|
||||
#endif
|
||||
// 根据 shenmo 要求,不显示组织 Logo
|
||||
// dialog->setCompanyLogo(QPixmap(":/icon/Logo-Spark.png"));
|
||||
dialog->setCompanyLogo(QPixmap());
|
||||
@@ -159,17 +156,6 @@ void Application::initAboutDialog()
|
||||
dialog->hide();
|
||||
}
|
||||
|
||||
void Application::loadTranslator()
|
||||
{
|
||||
DApplication::loadTranslator();
|
||||
|
||||
if (QLocale::system().language() == QLocale::Chinese) {
|
||||
QTranslator *webengineTranslator = new QTranslator(this);
|
||||
webengineTranslator->load(QLocale(QLocale::Chinese), "qtwebengine", "_", ":/translations");
|
||||
installTranslator(webengineTranslator);
|
||||
}
|
||||
}
|
||||
|
||||
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
|
||||
/**
|
||||
* @brief Application::initFeatureDisplayDialog 初始化版本特性对话框
|
||||
|
||||
@@ -30,8 +30,6 @@ private:
|
||||
void initFeatureDisplayDialog();
|
||||
#endif
|
||||
|
||||
void loadTranslator();
|
||||
|
||||
private:
|
||||
QJsonObject m_featuresJsonObj;
|
||||
|
||||
|
||||
@@ -62,6 +62,5 @@
|
||||
<file>tags/uos-authorize.svg</file>
|
||||
<file>tags/uos-small.png</file>
|
||||
<file>tags/uos.svg</file>
|
||||
<file>translations/qtwebengine_zh.qm</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@@ -1,249 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
inkscape:export-ydpi="127"
|
||||
inkscape:export-xdpi="127"
|
||||
inkscape:export-filename="/home/zhangtianyi/Desktop/deepin-community-store.png"
|
||||
width="200mm"
|
||||
height="200mm"
|
||||
viewBox="0 0 200 200"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.3 (0e150ed, 2023-07-21)"
|
||||
sodipodi:docname="logo-no-border.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient1200">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0.1299435"
|
||||
offset="0"
|
||||
id="stop1196" />
|
||||
<stop
|
||||
style="stop-color:#dadada;stop-opacity:0.81960785"
|
||||
offset="1"
|
||||
id="stop1198" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1138"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop1134"
|
||||
offset="0"
|
||||
style="stop-color:#99e7ea;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop1136"
|
||||
offset="1"
|
||||
style="stop-color:#007ffc;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient1128">
|
||||
<stop
|
||||
style="stop-color:#99e7ea;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop1124" />
|
||||
<stop
|
||||
style="stop-color:#007ffc;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop1126" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
effect="bspline"
|
||||
id="path-effect960"
|
||||
is_visible="true"
|
||||
weight="33.333333"
|
||||
steps="2"
|
||||
helper_size="0"
|
||||
apply_no_weight="true"
|
||||
apply_with_weight="true"
|
||||
only_selected="false" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1128"
|
||||
id="radialGradient1130"
|
||||
cx="100.35268"
|
||||
cy="199.86011"
|
||||
fx="100.35268"
|
||||
fy="199.86011"
|
||||
r="90.135414"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1138"
|
||||
id="radialGradient1132"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
cx="100.35268"
|
||||
cy="199.86011"
|
||||
fx="100.35268"
|
||||
fy="199.86011"
|
||||
r="90.135414" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1200"
|
||||
id="radialGradient1202"
|
||||
cx="100.35268"
|
||||
cy="199.86011"
|
||||
fx="100.35268"
|
||||
fy="199.86011"
|
||||
r="90.135414"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter1448">
|
||||
<feFlood
|
||||
flood-opacity="0.372549"
|
||||
flood-color="rgb(145,145,145)"
|
||||
result="flood"
|
||||
id="feFlood1438" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="in"
|
||||
result="composite1"
|
||||
id="feComposite1440" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="5.2918"
|
||||
result="blur"
|
||||
id="feGaussianBlur1442" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset"
|
||||
id="feOffset1444" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="offset"
|
||||
operator="over"
|
||||
result="composite2"
|
||||
id="feComposite1446" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter2201"
|
||||
x="-0.06449152"
|
||||
y="-0.061604632"
|
||||
width="1.128983"
|
||||
height="1.1232093">
|
||||
<feFlood
|
||||
flood-opacity="0.372549"
|
||||
flood-color="rgb(145,145,145)"
|
||||
result="flood"
|
||||
id="feFlood2191" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="in"
|
||||
result="composite1"
|
||||
id="feComposite2193" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="3.76995"
|
||||
result="blur"
|
||||
id="feGaussianBlur2195" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset"
|
||||
id="feOffset2197" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="offset"
|
||||
operator="over"
|
||||
result="composite2"
|
||||
id="feComposite2199" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:cx="476.28692"
|
||||
inkscape:cy="375.77675"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="974"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-97)" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Layer 2">
|
||||
<path
|
||||
style="fill:#ffc344;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 94.205599,38.155907 c 0,0 11.145081,-0.157476 22.599701,6.928753 11.45465,7.086223 18.11074,13.857508 20.27783,18.266716 2.16708,4.409209 9.28755,12.125332 9.13277,26.297795 -0.15488,14.172409 -3.40543,23.620739 -8.97797,31.494299 -5.57254,7.87359 -15.63405,13.85751 -27.70786,14.17247 -12.073829,0.31494 -19.813453,-7.55863 -22.444927,-11.96786 -2.631469,-4.4092 -3.715019,-13.85751 -0.464377,-20.62877 3.250645,-6.771296 8.358796,-6.771296 10.061513,-6.141389 1.702724,0.629897 2.167092,1.574691 3.095852,3.306872 0.928749,1.732187 1.547929,1.417257 2.941089,0.472427 1.39311,-0.944834 1.85748,-2.047138 1.54792,-3.464372 -0.30958,-1.417247 -2.16711,-3.149427 -3.71505,-3.621847 -1.547909,-0.47241 -3.715016,-1.88966 -6.810869,-1.41721 -3.095848,0.47238 -9.132757,2.04711 -14.240906,8.975819 -5.108153,6.92875 -4.488988,17.63684 -1.393134,22.67593 3.095849,5.0391 8.977962,14.48739 21.980539,17.79431 13.00259,3.30693 34.05435,-6.45633 41.32959,-21.57361 7.27524,-15.1173 7.43004,-22.203505 7.12048,-34.64374 C 148.22821,72.642208 137.23793,54.060548 125.00933,47.289265 112.78073,40.517979 103.64797,36.581186 94.205599,38.155907 Z"
|
||||
id="path1002"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#f06767;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 100.67541,101.06311 c 0,0 -3.06474,-2.895088 -5.801108,2.22698 -2.736373,5.12205 -4.049827,9.68737 -1.313459,15.25486 2.736367,5.56745 8.428007,8.90792 17.184447,8.79659 8.75636,-0.11148 15.21419,-2.22699 19.0451,-8.5739 3.83094,-6.34692 6.7862,-11.02357 7.11457,-13.36191 0.32839,-2.33835 2.07965,0.33404 1.53239,2.33834 -0.54728,2.00426 -0.43783,5.9015 1.09454,5.12204 1.53237,-0.77942 2.73637,-2.00427 2.95526,-1.44753 0.21893,0.55673 -1.75127,4.00859 -2.68162,5.73449 -0.93039,1.7259 -3.83094,5.90153 -5.5275,7.51607 -1.69652,1.61458 -4.04981,3.89724 -6.84092,5.56747 -2.79109,1.67024 -7.11454,3.61887 -9.52255,4.06427 -2.40801,0.44539 -7.22403,1.39184 -9.96042,1.2805 -2.73635,-0.11137 -6.23892,-0.61243 -10.124558,-2.56104 -3.885645,-1.94859 -8.099657,-4.95505 -9.741479,-7.96148 -1.641825,-3.00643 -4.159283,-5.73449 -3.61201,-13.30623 0.547277,-7.57175 3.010008,-11.46899 4.870741,-13.250551 1.860731,-1.781588 4.597103,-2.561035 6.403105,-2.171298 1.806004,0.38971 2.955282,1.447544 3.393102,2.226958 0.43781,0.779437 1.149279,2.226981 1.532369,2.505371 z"
|
||||
id="path1012"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#3f62eb;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 132.18114,140.09049 c 0,0 13.13457,-7.6831 19.26404,-19.82016 6.12948,-12.13707 8.7564,-19.93152 7.99021,-31.84589 -0.76619,-11.914358 -2.62692,-6.012854 -0.54728,-11.134928 2.07964,-5.122074 -1.31345,-15.254857 0.10943,-15.922949 1.42292,-0.668097 4.48765,4.453971 5.3633,8.573903 0.87562,4.119922 4.70654,16.813721 1.64181,32.959364 -3.06472,16.14564 -10.28872,22.60391 -15.10475,26.94655 -4.81603,4.34261 -15.7615,11.91437 -17.40332,11.80302 -1.64183,-0.11148 -1.86073,-0.11148 -1.31348,-1.55891 z"
|
||||
id="path1014"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#fce102;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 104.83471,117.2363 c 0,0 7.00512,1.5589 12.36838,-1.78156 5.3633,-3.3405 9.5226,-8.79661 10.17931,-10.91225 0.65672,-2.11564 0.76619,1.89294 1.53236,-0.11125 0.76618,-2.00432 3.83093,-6.012871 2.29855,-15.366212 -1.53237,-9.35333 -1.64182,-9.798747 -4.48762,-14.809463 -2.84586,-5.010719 -9.63207,-11.91437 -13.79134,-14.141359 -4.15927,-2.226986 -9.96037,-5.567464 -17.950594,-5.344766 -7.990202,0.222699 -5.363286,-0.334048 -13.025124,1.002146 -7.661836,1.336187 -14.557491,5.010717 -16.856041,7.015006 -2.298552,2.004286 -8.428023,7.460405 -10.61712,10.46684 -2.189098,3.00643 -8.209113,9.798741 -11.383303,19.263442 -3.174189,9.464656 -4.487646,10.466796 -4.706555,16.702366 -0.21891,6.23557 0.547274,7.90578 -0.766185,8.46256 -1.31346,0.55673 -1.094547,-4.67668 -0.985094,-8.35123 0.109463,-3.6745 0.109463,-13.250536 4.925468,-23.940057 4.816015,-10.689538 13.353489,-19.597489 18.169503,-22.826622 4.816009,-3.229128 10.398208,-7.571752 19.045135,-9.687392 8.646933,-2.115635 17.293863,-1.781586 22.65716,-0.779443 5.3633,1.002145 13.68187,4.453974 18.1695,7.905802 4.48766,3.45183 9.41314,7.683099 13.13459,14.586765 3.72146,6.903648 4.70654,15.700251 4.59709,19.374771 -0.10943,3.674531 -1.97019,12.137076 -4.81601,16.256986 -2.84583,4.11993 -6.67674,9.0193 -10.61711,10.80089 -3.94039,1.78157 -8.75642,2.33833 -12.69675,0.55674 -3.94039,-1.78161 -3.72147,-2.44969 -4.3782,-4.34263 z"
|
||||
id="path1016"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#5ed938;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 104.83471,117.2363 c 0,0 5.54674,1.56707 10.22918,-0.55878 4.68248,-2.12587 6.4239,-4.17301 7.54615,-5.3934 1.12223,-1.22042 3.25064,-3.50376 3.83112,-4.56669 0.58046,-1.06292 1.19962,-1.69282 1.19962,-2.08649 0,-0.39369 -1.08353,-1.33853 -0.0386,-3.62186 1.04482,-2.283321 1.97361,-7.519246 1.50922,-9.881306 -0.46438,-2.362073 -1.54792,-15.471616 -10.83547,-24.211303 -9.28753,-8.739678 -18.497709,-9.763242 -18.497709,-9.763242 0,0 14.705309,4.645415 21.593569,18.739134 6.88828,14.093741 4.64376,23.148323 0.23218,28.659827 -4.41158,5.51151 -10.68068,6.14141 -12.38342,4.72415 -1.70268,-1.41725 -5.2113,6.47164 -4.38574,7.95996 z"
|
||||
id="path1018"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#8fdbe9;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 86.930353,66.680267 c 0,0 -9.906718,-0.07875 -17.414156,4.881616 -7.507436,4.960371 -11.14506,8.975903 -13.23476,12.125332 -2.089697,3.149446 -4.488981,7.479909 -4.179395,7.401179 0.309585,-0.0788 9.055364,-12.2828 15.866229,-15.432236 6.81087,-3.149436 13.621741,-7.558644 22.986687,-4.330482 9.364952,3.228184 13.776542,7.716118 15.788842,6.613829 2.0123,-1.1023 2.3993,-2.440824 1.23835,-3.936804 -1.16094,-1.495979 -9.364961,-8.818417 -21.051797,-7.322434 z"
|
||||
id="path1020"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#fd7aff;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 72.107699,130.12526 c 0.65673,0.33404 5.58219,8.90795 9.522571,10.35548 3.940372,1.44755 6.567286,1.55888 7.005104,2.227 0.437821,0.66809 0.328367,4.00858 3.830921,5.45614 3.502555,1.44753 19.920785,6.01284 24.627325,6.45824 4.70658,0.4454 0.76621,3.22911 3.61202,4.23125 2.84584,1.00217 14.99532,1.5589 17.95061,0.33405 2.95527,-1.22483 2.95527,1.1135 -2.1891,3.1178 -5.14437,2.00427 -18.71677,6.79231 -27.58261,5.67882 -8.86586,-1.1135 -19.373526,-3.00644 -25.284086,-7.23772 -5.910565,-4.23126 -8.42802,-6.1242 -6.238924,-6.45824 2.189096,-0.33407 7.990199,5.9015 10.507662,6.56959 2.517463,0.66809 4.597103,0.66809 3.064735,-0.8908 -1.532366,-1.55888 -11.492755,-8.46253 -12.477849,-8.1285 -0.985092,0.33405 -3.064737,0.55674 -4.816012,-1.78159 -1.751278,-2.33832 -10.945484,-15.25485 -10.39821,-22.1585 0.547273,-6.90365 2.298552,-5.12208 4.378195,-2.56103 2.079641,2.56103 4.487648,4.78801 4.487648,4.78801 z"
|
||||
id="path1022"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 13 KiB |
Binary file not shown.
@@ -1,305 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="zh_CN" sourcelanguage="es">
|
||||
<context>
|
||||
<name>QWebEnginePage</name>
|
||||
<message>
|
||||
<source>Cut</source>
|
||||
<translation>剪切</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back</source>
|
||||
<translation>后退</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy</source>
|
||||
<translation>复制</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Redo</source>
|
||||
<translation>恢复</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stop</source>
|
||||
<translation>停止</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Undo</source>
|
||||
<translation>撤销</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Back</source>
|
||||
<translation>&后退</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Paste</source>
|
||||
<translation>粘贴</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Image URL</source>
|
||||
<translation>复制图片地址</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Link in This Window</source>
|
||||
<translation>在当前窗口中打开链接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle Mute</source>
|
||||
<translation>切换静音</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inspect Element</source>
|
||||
<translation>检查元素</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle Media Controls</source>
|
||||
<translation>切换媒体控制</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Reload</source>
|
||||
<translation>重新加载</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Link URL</source>
|
||||
<translation>复制链接地址</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Exit Full Screen Mode</source>
|
||||
<translation>退出全屏模式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Paste and Match Style</source>
|
||||
<translation>Pegar y coincidir estilo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Follow Link</source>
|
||||
<translation>Seguir vínculo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Link in New Tab</source>
|
||||
<translation>在新标签页中打开链接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Reload and Bypass Cache</source>
|
||||
<translation>重新加载且绕过缓存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select folder to upload</source>
|
||||
<translation>Seleccionar una carpeta para subir</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save Image</source>
|
||||
<translation>保存图片</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save Media</source>
|
||||
<translation>保存媒体</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle Looping</source>
|
||||
<translation>切换循环播放</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close Page</source>
|
||||
<translation>关闭页面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle Play/Pause</source>
|
||||
<translation>切换播放/暂停</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Image</source>
|
||||
<translation>复制图片</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Reload</source>
|
||||
<translation>&重新加载</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select All</source>
|
||||
<translation>全选</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save Link</source>
|
||||
<translation>Guardar enlace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Media URL</source>
|
||||
<translation>复制媒体地址</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Forward</source>
|
||||
<translation>前进</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Forward</source>
|
||||
<translation>&前进</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Link in New Window</source>
|
||||
<translation>在新窗口中打开链接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to leave this page?</source>
|
||||
<translation>您确定要离开当前页面吗?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QQuickWebEngineView</name>
|
||||
<message>
|
||||
<source>Back</source>
|
||||
<translation>后退</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy</source>
|
||||
<translation>复制</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Image URL</source>
|
||||
<translation>复制图片地址</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle Mute</source>
|
||||
<translation>切换静音</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inspect Element</source>
|
||||
<translation>检查元素</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle Media Controls</source>
|
||||
<translation>切换媒体控制</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Reload</source>
|
||||
<translation>重新加载</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Link URL</source>
|
||||
<translation>复制链接地址</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Exit Full Screen Mode</source>
|
||||
<translation>退出全屏模式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Follow Link</source>
|
||||
<translation>跳转链接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save Image</source>
|
||||
<translation>保存图片</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save Media</source>
|
||||
<translation>保存媒体</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle Looping</source>
|
||||
<translation>切换循环播放</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle Play/Pause</source>
|
||||
<translation>切换播放/暂停</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Image</source>
|
||||
<translation>复制图片</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save Link</source>
|
||||
<translation>保存链接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy Media URL</source>
|
||||
<translation>复制媒体地址</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Forward</source>
|
||||
<translation>前进</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtWebEngineCore</name>
|
||||
<message>
|
||||
<source>Javascript Alert - %1</source>
|
||||
<translation>Javascript 警告 - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Javascript Confirm - %1</source>
|
||||
<translation>Javascript 确认 - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Javascript Prompt - %1</source>
|
||||
<translation>Javascript 提示 - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to leave this page?</source>
|
||||
<translation>您确定要离开当前页面吗?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtWebEnginePlugin</name>
|
||||
<message>
|
||||
<source>Cannot create a separate instance of WebEngineDownloadItem</source>
|
||||
<translation>无法创建一个 WebEngineDownloadItem 的独立实例</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create separate instance of WebEngineLoadRequest</source>
|
||||
<translation>无法创建一个 WebEngineLoadRequest 的独立实例</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create a separate instance of WebEngineSettings</source>
|
||||
<translation>无法创建一个 WebEngineSettings 的独立实例</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create separate instance of WebEngineNavigationRequest</source>
|
||||
<translation>无法创建一个 WebEngineNavigationRequest 的独立实例</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create separate instance of WebEngineNewViewRequest</source>
|
||||
<translation>无法创建一个 WebEngineNewViewRequest 的独立实例</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create separate instance of WebEngineCertificateError</source>
|
||||
<translation>无法创建一个 WebEngineCertificateError 的独立实例</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create a separate instance of FullScreenRequest</source>
|
||||
<translation>无法创建一个 FullScreenRequest 的独立实例</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create a separate instance of NavigationHistory</source>
|
||||
<translation>无法创建一个 NavigationHistory 的独立实例</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtWebEngineExperimentalPlugin</name>
|
||||
<message>
|
||||
<source>Cannot create a separate instance of WebEngineViewExperimental</source>
|
||||
<translation>无法创建一个 WebEngineViewExperimental 的独立实例</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot create a separate instance of WebEngineViewport</source>
|
||||
<translation>无法创建一个 WebEngineViewport 的独立实例</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UIDelegatesManager</name>
|
||||
<message>
|
||||
<source>Enter username and password for "%1" at %2://%3</source>
|
||||
<translation>为在 %2://%3 的“%1”输入用户名和密码</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connect to proxy "%1" using:</source>
|
||||
<translation>使用“%1”连接代理:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtWebEngineTestSupportPlugin</name>
|
||||
<message>
|
||||
<source>Cannot create a separate instance of WebEngineErrorPage</source>
|
||||
<translation>无法创建一个 WebEngineErrorPage 的独立实例</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
@@ -1,85 +0,0 @@
|
||||
#include "DataCollectorAndUploader.h"
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkRequest>
|
||||
#include <QStandardPaths>
|
||||
#include <QNetworkReply>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QSettings>
|
||||
#include <QProcess>
|
||||
#include <QDebug>
|
||||
|
||||
DataCollectorAndUploader::DataCollectorAndUploader(QObject *parent) : QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
void DataCollectorAndUploader::collectAndUploadData()
|
||||
{
|
||||
collectData();
|
||||
}
|
||||
|
||||
void DataCollectorAndUploader::collectData()
|
||||
{
|
||||
QString distributor_id;
|
||||
QString release;
|
||||
QString architecture;
|
||||
|
||||
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
QString version = config.value("build/version").toString();
|
||||
QString uuid = config.value("info/uuid").toString();
|
||||
|
||||
|
||||
// Execute lsb_release --all and capture the output
|
||||
QProcess lsbProcess;
|
||||
lsbProcess.start("lsb_release", QStringList() << "--all");
|
||||
lsbProcess.waitForFinished();
|
||||
QString lsbOutput = lsbProcess.readAllStandardOutput();
|
||||
|
||||
QStringList lines = lsbOutput.split('\n');
|
||||
for (const QString &line : lines) {
|
||||
if (line.contains("Distributor ID:")) {
|
||||
distributor_id = line.split(":").last().trimmed();
|
||||
} else if (line.contains("Release:")) {
|
||||
release = line.split(":").last().trimmed();
|
||||
}
|
||||
}
|
||||
|
||||
// Execute uname -m to get the architecture
|
||||
QProcess unameProcess;
|
||||
unameProcess.start("uname", QStringList() << "-m");
|
||||
unameProcess.waitForFinished();
|
||||
architecture = unameProcess.readAllStandardOutput().trimmed();
|
||||
|
||||
// Create a JSON object
|
||||
QJsonObject json;
|
||||
json.insert("Distributor ID", distributor_id);
|
||||
json.insert("Release", release);
|
||||
json.insert("Architecture", architecture);
|
||||
json.insert("Store_Version", version);
|
||||
json.insert("UUID", uuid);
|
||||
|
||||
|
||||
|
||||
// Convert to byte array
|
||||
QJsonDocument doc(json);
|
||||
QByteArray jsonData = doc.toJson();
|
||||
|
||||
// Initialize a network request
|
||||
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||||
QUrl url("https://status.deepinos.org.cn/upload");
|
||||
|
||||
QNetworkRequest request(url);
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||
|
||||
// Send the POST request
|
||||
QNetworkReply *reply = manager->post(request, jsonData);
|
||||
|
||||
connect(reply, &QNetworkReply::finished, [=]() {
|
||||
if (reply->error() == QNetworkReply::NoError) {
|
||||
emit uploadSuccessful();
|
||||
} else {
|
||||
emit uploadFailed(reply->errorString());
|
||||
}
|
||||
reply->deleteLater();
|
||||
});
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
#ifndef DATACOLLECTORANDUPLOADER_H
|
||||
#define DATACOLLECTORANDUPLOADER_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class DataCollectorAndUploader : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit DataCollectorAndUploader(QObject *parent = nullptr);
|
||||
void collectAndUploadData();
|
||||
|
||||
signals:
|
||||
void uploadSuccessful();
|
||||
void uploadFailed(QString errorString);
|
||||
|
||||
private:
|
||||
void collectData();
|
||||
};
|
||||
|
||||
#endif // DATACOLLECTORANDUPLOADER_H
|
||||
@@ -1,147 +0,0 @@
|
||||
#include "ThemeChecker.h"
|
||||
|
||||
#include <QDBusConnection>
|
||||
#include <QDebug>
|
||||
|
||||
Q_GLOBAL_STATIC(ThemeChecker, m_instance)
|
||||
|
||||
constexpr char kFreedesktopPortalServiceName[] = "org.freedesktop.portal.Desktop";
|
||||
constexpr char kFreedesktopPortalServicePath[] = "/org/freedesktop/portal/desktop";
|
||||
constexpr char kFreedesktopPortalSettingsInterface[] = "org.freedesktop.portal.Settings";
|
||||
|
||||
ThemeChecker::ThemeChecker(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_paletteType(Dtk::Gui::DGuiApplicationHelper::instance()->paletteType())
|
||||
{
|
||||
m_interface = new QDBusInterface(kFreedesktopPortalServiceName,
|
||||
kFreedesktopPortalServicePath,
|
||||
kFreedesktopPortalSettingsInterface,
|
||||
QDBusConnection::sessionBus(),
|
||||
this);
|
||||
|
||||
initThemeType();
|
||||
initConnections();
|
||||
}
|
||||
|
||||
ThemeChecker *ThemeChecker::instance()
|
||||
{
|
||||
return m_instance;
|
||||
}
|
||||
|
||||
bool ThemeChecker::useDarkTheme()
|
||||
{
|
||||
if (m_paletteType == Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
|
||||
return m_themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
|
||||
} else {
|
||||
return m_paletteType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
|
||||
}
|
||||
}
|
||||
|
||||
void ThemeChecker::initThemeType()
|
||||
{
|
||||
QVariantList args { "org.freedesktop.appearance", "color-scheme" };
|
||||
QDBusMessage msg = m_interface->callWithArgumentList(QDBus::Block, "Read", args);
|
||||
if (msg.type() != QDBusMessage::MessageType::ReplyMessage || msg.arguments().size() < 1) {
|
||||
qWarning().noquote() << "Init color-scheme from D-Bus failed:" << msg.errorName() << msg.errorMessage();
|
||||
m_themeType = Dtk::Gui::DGuiApplicationHelper::toColorType(Dtk::Gui::DGuiApplicationHelper::fetchPalette(Dtk::Gui::DGuiApplicationHelper::instance()->applicationTheme()));
|
||||
return;
|
||||
}
|
||||
|
||||
quint32 colorScheme = qvariant_cast<QDBusVariant>(qvariant_cast<QDBusVariant>(msg.arguments().first()).variant()).variant().toUInt();
|
||||
switch (colorScheme) {
|
||||
case 1:
|
||||
m_themeType = Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
|
||||
break;
|
||||
case 2:
|
||||
m_themeType = Dtk::Gui::DGuiApplicationHelper::ColorType::LightType;
|
||||
break;
|
||||
default:
|
||||
qInfo().noquote() << QString("color-scheme: %1, fetching themeType according to QPalette::Window").arg(colorScheme);
|
||||
m_themeType = Dtk::Gui::DGuiApplicationHelper::toColorType(Dtk::Gui::DGuiApplicationHelper::fetchPalette(Dtk::Gui::DGuiApplicationHelper::instance()->applicationTheme()));
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_paletteType == Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
|
||||
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(m_themeType));
|
||||
}
|
||||
}
|
||||
|
||||
void ThemeChecker::initConnections()
|
||||
{
|
||||
QDBusConnection::sessionBus().connect(kFreedesktopPortalServiceName,
|
||||
kFreedesktopPortalServicePath,
|
||||
kFreedesktopPortalSettingsInterface,
|
||||
"SettingChanged",
|
||||
this,
|
||||
SLOT(slotSettingChanged(const QString &, const QString &, const QDBusVariant &)));
|
||||
|
||||
connect(Dtk::Gui::DGuiApplicationHelper::instance()->applicationTheme(), &Dtk::Gui::DPlatformTheme::themeNameChanged, this, &ThemeChecker::slotThemeNameChanged);
|
||||
connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::paletteTypeChanged, this, &ThemeChecker::slotPaletteTypeChanged);
|
||||
}
|
||||
|
||||
void ThemeChecker::slotSettingChanged(const QString &_namespace, const QString &key, const QDBusVariant &variant)
|
||||
{
|
||||
if (_namespace != "org.freedesktop.appearance" || key != "color-scheme") {
|
||||
return;
|
||||
}
|
||||
|
||||
Dtk::Gui::DGuiApplicationHelper::ColorType colorType = Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType;
|
||||
|
||||
quint32 colorScheme = variant.variant().toUInt();
|
||||
switch (colorScheme) {
|
||||
case 1:
|
||||
colorType = Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
|
||||
break;
|
||||
case 2:
|
||||
colorType = Dtk::Gui::DGuiApplicationHelper::ColorType::LightType;
|
||||
break;
|
||||
default:
|
||||
qInfo().noquote() << QString("color-scheme: %1, fetching themeType according to QPalette::Window").arg(colorScheme);
|
||||
colorType = Dtk::Gui::DGuiApplicationHelper::toColorType(Dtk::Gui::DGuiApplicationHelper::fetchPalette(Dtk::Gui::DGuiApplicationHelper::instance()->applicationTheme()));
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_paletteType != Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
|
||||
m_themeType = colorType;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_themeType != colorType) {
|
||||
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(colorType));
|
||||
emit themeChanged(colorType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType);
|
||||
m_themeType = colorType;
|
||||
}
|
||||
}
|
||||
|
||||
void ThemeChecker::slotThemeNameChanged(const QByteArray &theme)
|
||||
{
|
||||
Dtk::Gui::DGuiApplicationHelper::ColorType themeType = Dtk::Gui::DGuiApplicationHelper::ColorType::LightType;
|
||||
if (theme.endsWith("dark")) {
|
||||
themeType = Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType;
|
||||
}
|
||||
|
||||
if (m_paletteType != Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
|
||||
m_themeType = themeType;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_themeType != themeType) {
|
||||
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(themeType));
|
||||
emit themeChanged(themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType);
|
||||
m_themeType = themeType;
|
||||
}
|
||||
}
|
||||
|
||||
void ThemeChecker::slotPaletteTypeChanged(Dtk::Gui::DGuiApplicationHelper::ColorType paletteType)
|
||||
{
|
||||
m_paletteType = paletteType;
|
||||
|
||||
if (m_paletteType != Dtk::Gui::DGuiApplicationHelper::ColorType::UnknownType) {
|
||||
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(m_paletteType));
|
||||
emit themeChanged(m_paletteType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType);
|
||||
return;
|
||||
}
|
||||
|
||||
Dtk::Gui::DGuiApplicationHelper::instance()->setApplicationPalette(Dtk::Gui::DGuiApplicationHelper::standardPalette(m_themeType));
|
||||
emit themeChanged(m_themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType);
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
#ifndef THEMECHECKER_H
|
||||
#define THEMECHECKER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QDBusVariant>
|
||||
#include <QDBusInterface>
|
||||
|
||||
#include <DPlatformTheme>
|
||||
#include <DGuiApplicationHelper>
|
||||
|
||||
class ThemeChecker : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ThemeChecker(QObject *parent = nullptr);
|
||||
static ThemeChecker *instance();
|
||||
|
||||
bool useDarkTheme();
|
||||
|
||||
private:
|
||||
void initThemeType();
|
||||
void initConnections();
|
||||
|
||||
signals:
|
||||
void themeChanged(bool isDark);
|
||||
|
||||
private slots:
|
||||
void slotSettingChanged(const QString &_namespace, const QString &key, const QDBusVariant &variant);
|
||||
void slotThemeNameChanged(const QByteArray &theme);
|
||||
void slotPaletteTypeChanged(Dtk::Gui::DGuiApplicationHelper::ColorType paletteType);
|
||||
|
||||
private:
|
||||
QDBusInterface *m_interface = nullptr;
|
||||
|
||||
Dtk::Gui::DGuiApplicationHelper::ColorType m_paletteType;
|
||||
Dtk::Gui::DGuiApplicationHelper::ColorType m_themeType;
|
||||
};
|
||||
|
||||
#endif // THEMECHECKER_H
|
||||
@@ -5,16 +5,13 @@
|
||||
#include <QtConcurrent>
|
||||
#include <QStandardPaths>
|
||||
|
||||
#define DEFAULTURL "d.store.deepinos.org.cn"
|
||||
#define MAXWAITTIME 200000
|
||||
|
||||
DownloadController::DownloadController(QObject *parent)
|
||||
{
|
||||
Q_UNUSED(parent)
|
||||
|
||||
// 初始化默认域名
|
||||
domains.clear();
|
||||
domains.append(DEFAULTURL);
|
||||
domains.append("d.store.deepinos.org.cn");
|
||||
|
||||
/*
|
||||
domains = {
|
||||
@@ -40,8 +37,7 @@ bool checkMeatlink(QString metaUrl)
|
||||
{
|
||||
metaStatus.remove();
|
||||
}
|
||||
QString cmd = QString("curl -I -s --connect-timeout 5 %1 -w %{http_code} |tail -n1 > /tmp/spark-store/metaStatus.txt").arg(metaUrl);
|
||||
system(cmd.toUtf8().data());
|
||||
system("curl -I -s --connect-timeout 5 " + metaUrl.toUtf8() + " -w %{http_code} |tail -n1 > /tmp/spark-store/metaStatus.txt");
|
||||
if (metaStatus.open(QFile::ReadOnly) && QString(metaStatus.readAll()).toUtf8() == "200")
|
||||
{
|
||||
metaStatus.remove();
|
||||
@@ -72,13 +68,9 @@ void gennerateDomain(QVector<QString> &domains)
|
||||
}
|
||||
if (domains.size() == 0)
|
||||
{
|
||||
domains.append(DEFAULTURL);
|
||||
domains.append("d.store.deepinos.org.cn");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
domains.append(DEFAULTURL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,38 +102,34 @@ void DownloadController::startDownload(const QString &url)
|
||||
// qDebug() << domains << domains.size();
|
||||
}
|
||||
|
||||
QString aria2Command = "-d"; //下载目录
|
||||
QString aria2Urls = ""; //下载地址
|
||||
QString aria2Verbose = "--summary-interval=1"; //显示下载速度
|
||||
QString aria2SizePerThreads = "--min-split-size=1M"; //最小分片大小
|
||||
QString aria2NoConfig = "--no-conf"; //不使用配置文件
|
||||
QString aria2NoSeeds = "--seed-time=0"; //不做种
|
||||
QString aria2Command = "-d";
|
||||
QString aria2Urls = "";
|
||||
QString aria2Verbose = "--summary-interval=1";
|
||||
QString aria2SizePerThreads = "--min-split-size=1M";
|
||||
QString aria2NoConfig = "--no-conf";
|
||||
QString aria2NoSeeds = "--seed-time=0";
|
||||
QStringList command;
|
||||
QString downloadDir = "/tmp/spark-store/"; //下载目录
|
||||
QString aria2ConnectionPerServer = "--max-connection-per-server=1"; //每个服务器最大连接数
|
||||
QString aria2ConnectionMax = "--max-concurrent-downloads=16"; //最大同时下载数
|
||||
QString aria2ConnectionTimeout = "--connect-timeout=5"; // 5 秒服务器连接超时
|
||||
QString aria2MaxRetry = "--max-tries=1"; //设置最大重试次数
|
||||
QString downloadDir = "/tmp/spark-store/";
|
||||
QString aria2ConnectionPerServer = "--max-connection-per-server=1";
|
||||
QString aria2ConnectionMax = "--max-concurrent-downloads=16";
|
||||
QString aria2DNSCommand = "--async-dns-server=119.29.29.29,223.5.5.5";
|
||||
|
||||
|
||||
if (useMetalink) //如果是metalink
|
||||
if (useMetalink)
|
||||
{
|
||||
command.append(metaUrl.toUtf8());
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < domains.size(); i++) //遍历域名
|
||||
for (int i = 0; i < domains.size(); i++)
|
||||
{
|
||||
command.append(replaceDomain(url, domains.at(i)).replace("+","%2B").toUtf8()); //对+进行转译,避免oss出错
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
qint64 downloadSizeRecord = 0; //下载大小记录
|
||||
qint8 failDownloadTimes = 0; // 记录重试次数
|
||||
const qint8 maxRetryTimes = 3; //最大重试次数
|
||||
QString speedInfo = ""; //显示下载速度
|
||||
QString percentInfo = ""; //显示下载进度
|
||||
qint64 downloadSizeRecord = 0;
|
||||
QString speedInfo = "";
|
||||
QString percentInfo = "";
|
||||
command.append(aria2Command.toUtf8());
|
||||
command.append(downloadDir.toUtf8());
|
||||
command.append(aria2Verbose.toUtf8());
|
||||
@@ -149,9 +137,7 @@ void DownloadController::startDownload(const QString &url)
|
||||
command.append(aria2SizePerThreads.toUtf8());
|
||||
command.append(aria2ConnectionPerServer.toUtf8());
|
||||
command.append(aria2ConnectionMax.toUtf8());
|
||||
command.append(aria2ConnectionTimeout.toUtf8());
|
||||
command.append(aria2MaxRetry.toUtf8());
|
||||
|
||||
command.append(aria2DNSCommand.toUtf8());
|
||||
if (useMetalink)
|
||||
{
|
||||
command.append(aria2NoSeeds.toUtf8());
|
||||
@@ -166,30 +152,11 @@ void DownloadController::startDownload(const QString &url)
|
||||
cmd.start();
|
||||
cmd.waitForStarted(-1); //等待启动完成
|
||||
|
||||
// Timer
|
||||
QTimer *timeoutTimer = new QTimer(this);
|
||||
timeoutTimer->setSingleShot(true); // 单次触发
|
||||
connect(timeoutTimer, &QTimer::timeout, [&]() {
|
||||
if (failDownloadTimes < maxRetryTimes) {
|
||||
qDebug() << "Download timeout, restarting...";
|
||||
// 重新启动下载任务的代码
|
||||
restartDownload(cmd, command); // 调用重新启动下载任务的函数
|
||||
failDownloadTimes += 1;
|
||||
timeoutTimer->start(MAXWAITTIME); // 重新启动定时器
|
||||
} else{
|
||||
emit errorOccur(tr("Download Failed, please retry :(")); // 下载失败
|
||||
downloadSuccess = false;
|
||||
cmd.close();
|
||||
cmd.terminate(); // 终止当前的下载进程
|
||||
cmd.waitForFinished(); // 等待进程结束
|
||||
}
|
||||
});
|
||||
|
||||
connect(&cmd, &QProcess::readyReadStandardOutput, [&]()
|
||||
{
|
||||
timeoutTimer->start(MAXWAITTIME); // 重置超时计时器,15秒超时
|
||||
//通过读取输出计算下载速度
|
||||
QString message = cmd.readAllStandardOutput().data();
|
||||
// qDebug() << message;
|
||||
message = message.replace(" ", "");
|
||||
QStringList list;
|
||||
qint64 downloadSize = 0;
|
||||
@@ -212,10 +179,10 @@ void DownloadController::startDownload(const QString &url)
|
||||
speedInfo = message.mid(speedPlace1 + 3, speedPlace2 - speedPlace1 - 3);
|
||||
speedInfo += "/s";
|
||||
}
|
||||
// qDebug() << percentInfo << speedInfo;
|
||||
if (downloadSize >= downloadSizeRecord)
|
||||
{
|
||||
downloadSizeRecord = downloadSize;
|
||||
timeoutTimer->stop(); // 如果有进度,停止超时计时器
|
||||
}
|
||||
if (percentInfo == "OK")
|
||||
{
|
||||
@@ -277,15 +244,6 @@ void DownloadController::stopDownload()
|
||||
pidNumber = -1;
|
||||
}
|
||||
|
||||
void DownloadController::restartDownload(QProcess &cmd, const QStringList &command)
|
||||
{
|
||||
cmd.terminate(); // 终止当前的下载进程
|
||||
cmd.waitForFinished(); // 等待进程结束
|
||||
cmd.setArguments(command); // 重新设置参数
|
||||
cmd.start(); // 重新启动下载
|
||||
cmd.waitForStarted(-1); // 等待启动完成
|
||||
}
|
||||
|
||||
qint64 DownloadController::getFileSize(const QString &url)
|
||||
{
|
||||
// 已经无需使用 qtnetwork 再获取 filesize,完全交给 aria2 来计算进度。 为保证兼容性,故保留此函数。
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include <QObject>
|
||||
#include <QVector>
|
||||
#include <QProcess>
|
||||
|
||||
class DownloadController : public QObject
|
||||
{
|
||||
@@ -15,7 +14,6 @@ public:
|
||||
void setFilename(QString filename);
|
||||
void startDownload(const QString &url);
|
||||
void stopDownload();
|
||||
void restartDownload(QProcess &cmd, const QStringList &command);
|
||||
qint64 getFileSize(const QString& url);
|
||||
QString replaceDomain(const QString& url, const QString domain);
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@ QString SparkAPI::serverUrl = "";
|
||||
|
||||
#elif __aarch64__
|
||||
QString SparkAPI::serverUrlDir = "aarch64-store";
|
||||
#elif __loongarch__
|
||||
QString SparkAPI::serverUrlDir = "loong64-store";
|
||||
#endif
|
||||
|
||||
SparkAPI::SparkAPI(QObject *parent) : QObject(parent)
|
||||
@@ -28,7 +26,6 @@ void SparkAPI::get(QUrl url)
|
||||
QNetworkRequest request;
|
||||
HttpRequest *httprequest = new HttpRequest;
|
||||
request.setUrl(QUrl(url.toString().replace("+", "%2B")));
|
||||
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
connect(httprequest, &HttpRequest::finished, [=](QString data)
|
||||
{
|
||||
QByteArray arr = data.toUtf8();
|
||||
@@ -54,7 +51,6 @@ void SparkAPI::getRAW(QUrl url)
|
||||
QNetworkRequest request;
|
||||
HttpRequest *httprequest = new HttpRequest;
|
||||
request.setUrl(QUrl(url.toString().replace("+", "%2B")));
|
||||
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
connect(httprequest, &HttpRequest::finished, [=](QString data)
|
||||
{
|
||||
emit finishedRAW(data);
|
||||
|
||||
187
src/main.cpp
187
src/main.cpp
@@ -2,17 +2,9 @@
|
||||
#include "mainwindow-dtk.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
#include <signal.h>
|
||||
#include <execinfo.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <fstream>
|
||||
#include <execinfo.h>
|
||||
|
||||
#include <DSysInfo>
|
||||
#include <DApplicationSettings>
|
||||
#include <DWidgetUtil>
|
||||
|
||||
#include <QDate>
|
||||
#include <QProcessEnvironment>
|
||||
@@ -21,101 +13,15 @@
|
||||
#include <QStandardPaths>
|
||||
#include <QSurfaceFormat>
|
||||
|
||||
#include <backend/DataCollectorAndUploader.h>
|
||||
|
||||
DCORE_USE_NAMESPACE
|
||||
DWIDGET_USE_NAMESPACE
|
||||
|
||||
static QString buildDateTime;
|
||||
|
||||
|
||||
void gatherInfo(FILE *fp, std::ofstream& logFile, const char* description) {
|
||||
if (fp) {
|
||||
char buffer[512];
|
||||
logFile << description << ":\n";
|
||||
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
|
||||
buffer[strcspn(buffer, "\n")] = 0;
|
||||
logFile << buffer << "\n";
|
||||
}
|
||||
pclose(fp);
|
||||
} else {
|
||||
logFile << "Failed to gather " << description << " info.\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void crashHandler(int sig) {
|
||||
void *array[50];
|
||||
size_t size = backtrace(array, 50);
|
||||
if (size == 0) {
|
||||
perror("backtrace");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
time_t t = time(NULL);
|
||||
struct tm tm = *localtime(&t);
|
||||
char filename[128];
|
||||
snprintf(filename, sizeof(filename), "/tmp/spark_store_crash_log_%04d%02d%02d_%02d%02d%02d.txt",
|
||||
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||
|
||||
std::ofstream logFile(filename, std::ios::out);
|
||||
|
||||
if (!logFile.is_open()) {
|
||||
perror("ofstream");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
logFile << "Please send this log to the developer. QQ Group: 872690351\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 << "Build Date and Time: " << buildDateTime.toStdString() << "\n";
|
||||
gatherInfo(popen("cat ~/.config/spark-union/spark-store/config.ini", "r"), logFile, "User Config File");
|
||||
|
||||
// Collecting System Information
|
||||
gatherInfo(popen("LANG=en_US.UTF-8 uname -m", "r"), logFile, "CPU Architecture");
|
||||
gatherInfo(popen("LANG=en_US.UTF-8 lsb_release -a", "r"), logFile, "Distribution info");
|
||||
gatherInfo(popen("LANG=en_US.UTF-8 lscpu", "r"), logFile, "All CPU Info");
|
||||
gatherInfo(popen("LANG=en_US.UTF-8 free -h | grep Mem | awk '{print $2}'", "r"), logFile, "Memory Size");
|
||||
|
||||
|
||||
|
||||
logFile << "Error: signal " << sig << ":\n";
|
||||
for (size_t i = 0; i < size; i++) {
|
||||
char **strings = backtrace_symbols(&array[i], 1);
|
||||
if (strings != NULL && strings[0] != NULL) {
|
||||
logFile << strings[0] << "\n";
|
||||
} else {
|
||||
logFile << "Failed to get symbol.\n";
|
||||
}
|
||||
free(strings);
|
||||
}
|
||||
|
||||
logFile.close();
|
||||
|
||||
char openCmd[256];
|
||||
snprintf(openCmd, sizeof(openCmd), "xdg-open %s", filename);
|
||||
if (system(openCmd) == -1) {
|
||||
perror("system");
|
||||
}
|
||||
|
||||
fprintf(stderr, "Error: signal %d:\n", sig);
|
||||
backtrace_symbols_fd(array, size, STDERR_FILENO);
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// 崩溃处理
|
||||
signal(SIGSEGV, crashHandler); // 注册SIGSEGV处理函数
|
||||
|
||||
|
||||
// Get build time
|
||||
static const QDate buildDate = QLocale(QLocale::English).toDate(QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy");
|
||||
static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss");
|
||||
buildDateTime = buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString("hh:mm:ss");
|
||||
|
||||
static const QString buildDateTime = buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString("hh:mm:ss");
|
||||
|
||||
// NOTE: 提前设置组织名称和应用名称,避免配置文件位置错误
|
||||
DApplication::setOrganizationName("spark-union");
|
||||
@@ -125,51 +31,84 @@ int main(int argc, char *argv[])
|
||||
// 初始化 config.ini 配置文件
|
||||
Utils::initConfig();
|
||||
|
||||
// 回传版本信息,不涉及个人隐私
|
||||
DataCollectorAndUploader uploader;
|
||||
QObject::connect(&uploader, &DataCollectorAndUploader::uploadSuccessful, [](){
|
||||
qDebug() << "Data uploaded successfully";
|
||||
});
|
||||
QObject::connect(&uploader, &DataCollectorAndUploader::uploadFailed, [](QString error){
|
||||
qDebug() << "Upload failed with error: " << error;
|
||||
});
|
||||
|
||||
uploader.collectAndUploadData();
|
||||
|
||||
// Set display backend
|
||||
Utils::setQPAPlatform();
|
||||
|
||||
// 龙芯机器配置,使得 DApplication 能正确加载 QtWebEngine
|
||||
// 龙芯机器配置,使得 DApplication 能正确加载 QTWEBENGINE
|
||||
qputenv("DTK_FORCE_RASTER_WIDGETS", "FALSE");
|
||||
|
||||
// 浏览器开启 GPU 支持
|
||||
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-features=UseModernMediaControls");
|
||||
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
|
||||
// 全平台软件渲染Webkit
|
||||
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-gpu");
|
||||
|
||||
|
||||
// 浏览器开启 GPU 支持
|
||||
#ifdef __sw_64__
|
||||
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--no-sandbox");
|
||||
#elif __aarch64__
|
||||
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");
|
||||
DApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __loongarch__
|
||||
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--no-sandbox");
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* NOTE: https://zhuanlan.zhihu.com/p/550285855
|
||||
* 避免 wayland 环境下从 QtWebEngine 后退回到 QWidget 时黑屏闪烁
|
||||
* FIXME: 对于麒麟 CPU 设备,调用 QtWebEngine 会导致客户端崩溃;
|
||||
* 暂时不对 CPU 进行判断,对 wayland 环境下统一处理
|
||||
*/
|
||||
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");
|
||||
DApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
||||
// 开启 Hidpi 支持
|
||||
qDebug() << "Enable HiDPI Support.";
|
||||
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
DApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||
{
|
||||
// 开启 Hidpi 支持
|
||||
qDebug() << "Enable HiDPI Support.";
|
||||
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
DApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||
}
|
||||
#endif
|
||||
|
||||
// 强制使用 DTK 平台插件
|
||||
@@ -197,6 +136,8 @@ int main(int argc, char *argv[])
|
||||
|
||||
MainWindow w;
|
||||
a.setMainWindow(&w); // 设置应用程序主窗口,用于初始化关于对话框
|
||||
// 让打开时界面显示在正中
|
||||
Dtk::Widget::moveToCenter(&w);
|
||||
|
||||
if (argc > 1)
|
||||
{
|
||||
|
||||
206
src/mainwindow-dtk.cpp
Executable file → Normal file
206
src/mainwindow-dtk.cpp
Executable file → Normal file
@@ -16,13 +16,14 @@
|
||||
#include <QtConcurrent>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <backend/ThemeChecker.h>
|
||||
|
||||
#define AppPageApplist 0
|
||||
#define AppPageSearchlist 1
|
||||
#define AppPageAppdetail 2
|
||||
#define AppPageSettings 3
|
||||
#define UploadServerUrl "https://upload.deepinos.org.cn/"
|
||||
#define WaylandSearchCenter 1
|
||||
#define OtherSearchCenter 2
|
||||
#define RightSearchSpace 1
|
||||
#define UploadServerUrl "https://upload.deepinos.org/"
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: BaseWidgetOpacity(parent)
|
||||
@@ -38,6 +39,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
initTmpDir();
|
||||
|
||||
ui->appintopage->setDownloadWidget(downloadlistwidget);
|
||||
|
||||
emit DGuiApplicationHelper::instance()->themeTypeChanged(DGuiApplicationHelper::instance()->themeType());
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
@@ -45,11 +48,6 @@ MainWindow::~MainWindow()
|
||||
delete ui;
|
||||
|
||||
downloadlistwidget->deleteLater();
|
||||
|
||||
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
config.setValue("window/width", width());
|
||||
config.setValue("window/height", height());
|
||||
config.sync();
|
||||
}
|
||||
|
||||
void MainWindow::initDbus()
|
||||
@@ -123,29 +121,8 @@ void MainWindow::closeEvent(QCloseEvent *event)
|
||||
BaseWidgetOpacity::closeEvent(event);
|
||||
}
|
||||
|
||||
void MainWindow::changeEvent(QEvent *event)
|
||||
{
|
||||
if (event->type() != QEvent::StyleChange) {
|
||||
return BaseWidgetOpacity::changeEvent(event);
|
||||
}
|
||||
|
||||
BaseWidgetOpacity::changeEvent(event);
|
||||
downloadButton->setFixedSize(searchEdit->sizeHint().height(), searchEdit->sizeHint().height());
|
||||
}
|
||||
|
||||
void MainWindow::initUI()
|
||||
{
|
||||
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
QSize size;
|
||||
size.rwidth() = config.value("window/width").toInt();
|
||||
size.rheight() = config.value("window/height").toInt();
|
||||
if (!size.isEmpty()) {
|
||||
resize(size);
|
||||
}
|
||||
|
||||
// 让打开时界面显示在正中
|
||||
moveToCenter(this);
|
||||
|
||||
setWindowTitle(QObject::tr("Spark Store"));
|
||||
setMaskAlpha(250);
|
||||
|
||||
@@ -156,59 +133,52 @@ void MainWindow::initUI()
|
||||
updateUi(0);
|
||||
|
||||
initTrayIcon();
|
||||
|
||||
refreshTheme(ThemeChecker::instance()->useDarkTheme());
|
||||
}
|
||||
|
||||
void MainWindow::initTitleBar()
|
||||
{
|
||||
ui->titlebar->setIcon(QIcon::fromTheme("spark-store"));
|
||||
ui->titlebar->setBackgroundTransparent(true);
|
||||
// ui->titlebar->setSwitchThemeMenuVisible(false); // 去除 dtk 标题栏主题切换菜单
|
||||
|
||||
// 初始化标题栏控件
|
||||
DLabel *titleLabel = new DLabel(ui->titlebar);
|
||||
titleLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
titleLabel->setText(tr("Spark Store"));
|
||||
DLabel *title = new DLabel(ui->titlebar);
|
||||
title->setText(tr("Spark Store"));
|
||||
|
||||
backButton = new DPushButton(ui->titlebar);
|
||||
|
||||
searchEdit = new DSearchEdit(ui->titlebar);
|
||||
searchEdit->setPlaceholderText(tr("Search or enter spk://"));
|
||||
searchEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||
searchEdit->lineEdit()->setFixedWidth(350);
|
||||
|
||||
downloadButton = new ProgressButton(ui->titlebar);
|
||||
downloadButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||
downloadButton->setDownloadListWidget(downloadlistwidget);
|
||||
downloadButton->setFocusPolicy(Qt::FocusPolicy::ClickFocus);
|
||||
downloadButton->setFixedSize(searchEdit->sizeHint().height(), searchEdit->sizeHint().height());
|
||||
downloadlistwidget->setFocusProxy(downloadButton);
|
||||
|
||||
QWidget *customWidget = new QWidget(ui->titlebar);
|
||||
customWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||
ui->titlebar->setCustomWidget(customWidget);
|
||||
|
||||
QHBoxLayout *customWidgetLayout = new QHBoxLayout(customWidget);
|
||||
customWidgetLayout->setContentsMargins(8, 0, 0, 0);
|
||||
customWidgetLayout->setSpacing(0);
|
||||
customWidgetLayout->addWidget(titleLabel, 0, Qt::AlignLeft);
|
||||
customWidgetLayout->addSpacing(8);
|
||||
customWidgetLayout->addWidget(backButton, 0, Qt::AlignLeft);
|
||||
QWidget *centralWidget = new QWidget(customWidget);
|
||||
centralWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||
customWidgetLayout->addWidget(centralWidget, 1, Qt::AlignHCenter);
|
||||
|
||||
QHBoxLayout *centralLayout = new QHBoxLayout(centralWidget);
|
||||
centralLayout->setContentsMargins(20, 0, 10, 0);
|
||||
centralLayout->setSpacing(0);
|
||||
|
||||
centralLayout->addWidget(searchEdit, 0, Qt::AlignHCenter);
|
||||
centralLayout->addSpacing(10);
|
||||
centralLayout->addWidget(downloadButton, 0, Qt::AlignHCenter);
|
||||
QWidget *w_titlebar = new QWidget(ui->titlebar);
|
||||
QHBoxLayout *ly_titlebar = new QHBoxLayout(w_titlebar);
|
||||
ly_titlebar->addWidget(title);
|
||||
ly_titlebar->addWidget(backButton);
|
||||
// Check wayland configs
|
||||
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
if (!config.value("runtime/isDDE").toBool() && config.value("runtime/useWayland").toBool())
|
||||
{
|
||||
// Wayland 搜索栏居中
|
||||
ly_titlebar->addStretch(WaylandSearchCenter);
|
||||
}
|
||||
else
|
||||
{
|
||||
// dwayland dxcb 搜索栏顶部右侧居中
|
||||
ly_titlebar->addStretch(OtherSearchCenter);
|
||||
}
|
||||
ly_titlebar->addWidget(searchEdit);
|
||||
ly_titlebar->addWidget(downloadButton);
|
||||
ly_titlebar->addStretch(RightSearchSpace);
|
||||
ui->titlebar->setCustomWidget(w_titlebar);
|
||||
|
||||
initTitleBarMenu();
|
||||
|
||||
backButton->setDisabled(true);
|
||||
backButton->hide();
|
||||
downloadlistwidget->hide();
|
||||
}
|
||||
|
||||
@@ -297,61 +267,57 @@ void MainWindow::initTrayIcon()
|
||||
trayIcon->show();
|
||||
}
|
||||
|
||||
void MainWindow::refreshTheme(bool isDarkMode)
|
||||
{
|
||||
// 使用isDarkMode变量来判断是否是深色模式
|
||||
if (isDarkMode) {
|
||||
//深色模式
|
||||
setMaskColor(QColor("#2a2b2b"));
|
||||
backButton->setIcon(QIcon(":/icon/dark/back.svg"));
|
||||
downloadButton->setIcon(":/icon/dark/download.svg");
|
||||
downloadButton->setBackgroundColor(QColor("#444444"));
|
||||
downloadButton->setColor(QColor("#66CCFF"));
|
||||
ui->pushButton_14->setIcon(QIcon(":/icon/dark/update.svg"));
|
||||
for (int i = 0; i < ui->buttonGroup->buttons().size(); i++) {
|
||||
ui->buttonGroup->buttons()[i]->setIcon(QIcon(":/icon/dark/leftbutton_" + QString::number(i) + ".svg"));
|
||||
if (QLocale::system().name() == "zh_CN") {
|
||||
ui->buttonGroup->buttons()[i]->setStyleSheet("QPushButton{background-color:transparent;}\
|
||||
QPushButton:hover{background-color:#7a7a7a;border:0px;border-radius:8px;}\
|
||||
QPushButton:checked{background-color:#6e6e6e;border:0px;border-radius:8px;}");
|
||||
} else {
|
||||
ui->buttonGroup->buttons()[i]->setStyleSheet("QPushButton{background-color:transparent;text-align: left; padding-left: 15px;}\
|
||||
QPushButton:hover{background-color:#7a7a7a;border:0px;border-radius:8px;text-align: left; padding-left: 15px;}\
|
||||
QPushButton:checked{background-color:#6e6e6e;border:0px;border-radius:8px;text-align: left; padding-left: 15px;}");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//亮色模式
|
||||
setMaskColor(QColor("#f3f7f8"));
|
||||
backButton->setIcon(QIcon(":/icon/light/back.svg"));
|
||||
downloadButton->setBackgroundColor(QColor("#e3e4e4"));
|
||||
downloadButton->setColor(QColor("#66CCFF"));
|
||||
downloadButton->setIcon(":/icon/light/download.svg");
|
||||
ui->pushButton_14->setIcon(QIcon(":/icon/light/update.svg"));
|
||||
for (int i = 0; i < ui->buttonGroup->buttons().size(); i++) {
|
||||
ui->buttonGroup->buttons()[i]->setIcon(QIcon(":/icon/light/leftbutton_" + QString::number(i) + ".svg"));
|
||||
if (QLocale::system().name() == "zh_CN") {
|
||||
ui->buttonGroup->buttons()[i]->setStyleSheet("QPushButton{background-color:transparent;}\
|
||||
QPushButton:hover{background-color:#eAeAeA;border:0px;border-radius:8px;}\
|
||||
QPushButton:checked{background-color:#dddddd;border:0px;border-radius:8px;}");
|
||||
} else {
|
||||
ui->buttonGroup->buttons()[i]->setStyleSheet("QPushButton{background-color:transparent;text-align: left; padding-left: 15px;}\
|
||||
QPushButton:hover{background-color:#eAeAeA;border:0px;border-radius:8px;text-align: left; padding-left: 15px;}\
|
||||
QPushButton:checked{background-color:#dddddd;border:0px;border-radius:8px;text-align: left; padding-left: 15px;}");
|
||||
}
|
||||
}
|
||||
}
|
||||
ui->pushButton_14->setStyleSheet(ui->pushButton_4->styleSheet());
|
||||
ui->applistpage->setTheme(isDarkMode);
|
||||
ui->applistpage_1->setTheme(isDarkMode);
|
||||
ui->appintopage->setTheme(isDarkMode);
|
||||
ui->settingspage->setTheme(isDarkMode);
|
||||
}
|
||||
|
||||
void MainWindow::initConnections()
|
||||
{
|
||||
// 主题切换
|
||||
connect(ThemeChecker::instance(), &ThemeChecker::themeChanged, this, &MainWindow::refreshTheme);
|
||||
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [=](DGuiApplicationHelper::ColorType themeType)
|
||||
{
|
||||
if (themeType == DGuiApplicationHelper::DarkType) {
|
||||
//深色模式
|
||||
setMaskColor(QColor("#2a2b2b"));
|
||||
backButton->setIcon(QIcon(":/icon/dark/back.svg"));
|
||||
downloadButton->setIcon(":/icon/dark/download.svg");
|
||||
downloadButton->setBackgroundColor(QColor("#444444"));
|
||||
downloadButton->setColor(QColor("#66CCFF"));
|
||||
ui->pushButton_14->setIcon(QIcon(":/icon/dark/update.svg"));
|
||||
for (int i = 0; i < ui->buttonGroup->buttons().size(); i++) {
|
||||
ui->buttonGroup->buttons()[i]->setIcon(QIcon(":/icon/dark/leftbutton_" + QString::number(i) + ".svg"));
|
||||
if (QLocale::system().name() == "zh_CN") {
|
||||
ui->buttonGroup->buttons()[i]->setStyleSheet("QPushButton{background-color:transparent;}\
|
||||
QPushButton:hover{background-color:#7a7a7a;border:0px;border-radius:8px;}\
|
||||
QPushButton:checked{background-color:#6e6e6e;border:0px;border-radius:8px;}");
|
||||
} else {
|
||||
ui->buttonGroup->buttons()[i]->setStyleSheet("QPushButton{background-color:transparent;text-align: left; padding-left: 15px;}\
|
||||
QPushButton:hover{background-color:#7a7a7a;border:0px;border-radius:8px;text-align: left; padding-left: 15px;}\
|
||||
QPushButton:checked{background-color:#6e6e6e;border:0px;border-radius:8px;text-align: left; padding-left: 15px;}");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//亮色模式
|
||||
setMaskColor(QColor("#f3f7f8"));
|
||||
backButton->setIcon(QIcon(":/icon/light/back.svg"));
|
||||
downloadButton->setBackgroundColor(QColor("#e3e4e4"));
|
||||
downloadButton->setColor(QColor("#66CCFF"));
|
||||
downloadButton->setIcon(":/icon/light/download.svg");
|
||||
ui->pushButton_14->setIcon(QIcon(":/icon/light/update.svg"));
|
||||
for (int i = 0; i < ui->buttonGroup->buttons().size(); i++) {
|
||||
ui->buttonGroup->buttons()[i]->setIcon(QIcon(":/icon/light/leftbutton_" + QString::number(i) + ".svg"));
|
||||
if (QLocale::system().name() == "zh_CN") {
|
||||
ui->buttonGroup->buttons()[i]->setStyleSheet("QPushButton{background-color:transparent;}\
|
||||
QPushButton:hover{background-color:#eAeAeA;border:0px;border-radius:8px;}\
|
||||
QPushButton:checked{background-color:#dddddd;border:0px;border-radius:8px;}");
|
||||
} else {
|
||||
ui->buttonGroup->buttons()[i]->setStyleSheet("QPushButton{background-color:transparent;text-align: left; padding-left: 15px;}\
|
||||
QPushButton:hover{background-color:#eAeAeA;border:0px;border-radius:8px;text-align: left; padding-left: 15px;}\
|
||||
QPushButton:checked{background-color:#dddddd;border:0px;border-radius:8px;text-align: left; padding-left: 15px;}");
|
||||
}
|
||||
}
|
||||
}
|
||||
ui->pushButton_14->setStyleSheet(ui->pushButton_4->styleSheet());
|
||||
ui->applistpage->setTheme(themeType == DGuiApplicationHelper::DarkType);
|
||||
ui->applistpage_1->setTheme(themeType == DGuiApplicationHelper::DarkType);
|
||||
ui->appintopage->setTheme(themeType == DGuiApplicationHelper::DarkType);
|
||||
ui->settingspage->setTheme(themeType == DGuiApplicationHelper::DarkType); });
|
||||
|
||||
// appintopage按下下载按钮时标题栏下载列表按钮抖动
|
||||
connect(ui->appintopage, &AppIntoPage::clickedDownloadBtn, [=]()
|
||||
@@ -364,9 +330,9 @@ void MainWindow::initConnections()
|
||||
ui->stackedWidget->setCurrentIndex(pageHistory.at(pageHistory.count() - 2));
|
||||
pageHistory.removeLast();
|
||||
if (pageHistory.count() > 1) {
|
||||
backButton->setEnabled(true);
|
||||
backButton->show();
|
||||
} else {
|
||||
backButton->setDisabled(true);
|
||||
backButton->hide();
|
||||
} });
|
||||
|
||||
// 搜索事件
|
||||
@@ -457,11 +423,11 @@ void MainWindow::switchPage(int now) // 临时方案,回家后修改
|
||||
qDebug() << pageHistory.count();
|
||||
if (pageHistory.count() >= 1)
|
||||
{
|
||||
backButton->setEnabled(true);
|
||||
backButton->show();
|
||||
}
|
||||
else
|
||||
{
|
||||
backButton->setDisabled(true);
|
||||
backButton->hide();
|
||||
}
|
||||
ui->stackedWidget->setCurrentIndex(now);
|
||||
ui->stackedWidget->currentWidget()->setFocus();
|
||||
@@ -522,13 +488,9 @@ void MainWindow::notify(QObject *receiver, QEvent *event)
|
||||
|
||||
void MainWindow::on_pushButton_14_clicked()
|
||||
{
|
||||
/**
|
||||
* NOTE: No need to judget developmode status
|
||||
*/
|
||||
// Check UOS
|
||||
// QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
// if (config.contains("UOS/EnableDeveloperMode") && !config.value("UOS/EnableDeveloperMode").toBool())
|
||||
if (false)
|
||||
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
if (config.contains("UOS/EnableDeveloperMode") && !config.value("UOS/EnableDeveloperMode").toBool())
|
||||
{
|
||||
qDebug() << "UOS Developer Mode has not been enabled!";
|
||||
QtConcurrent::run([=]
|
||||
|
||||
2
src/mainwindow-dtk.h
Executable file → Normal file
2
src/mainwindow-dtk.h
Executable file → Normal file
@@ -30,11 +30,9 @@ public:
|
||||
void openUrl(const QString &url);
|
||||
|
||||
bool isCloseWindowAnimation();
|
||||
Q_INVOKABLE void refreshTheme(bool isDarkMode);
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
void changeEvent(QEvent *event) override;
|
||||
|
||||
private:
|
||||
void initUI();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,14 +6,12 @@
|
||||
#include "backend/image_show.h"
|
||||
#include "application.h"
|
||||
#include "utils/utils.h"
|
||||
#include "pages/settingspage.h"
|
||||
|
||||
#include <QtConcurrent>
|
||||
#include <QClipboard>
|
||||
#include <QFile>
|
||||
|
||||
#include <DSysInfo>
|
||||
#include <QAtomicInt>
|
||||
|
||||
AppIntoPage::AppIntoPage(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
@@ -22,7 +20,6 @@ AppIntoPage::AppIntoPage(QWidget *parent)
|
||||
{
|
||||
initUI();
|
||||
initConnections();
|
||||
m_userAgent = QString("Mozilla/5.0 Spark-Store/" + QString(APP_VERSION) + " (Linux; " + QSysInfo::prettyProductName().toUtf8() + ";)").toLatin1();
|
||||
}
|
||||
|
||||
AppIntoPage::~AppIntoPage()
|
||||
@@ -55,39 +52,29 @@ void AppIntoPage::openUrl(const QUrl &url)
|
||||
ui->label_2->setText(info["More"].toString());
|
||||
|
||||
// 显示 tags
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||
QStringList taglist = info["Tags"].toString().split(";", Qt::SkipEmptyParts);
|
||||
#else
|
||||
QStringList taglist = info["Tags"].toString().split(";", QString::SkipEmptyParts);
|
||||
#endif
|
||||
|
||||
QStringList taglist = info["Tags"].toString().split(";", QString::SkipEmptyParts);
|
||||
setAppinfoTags(taglist);
|
||||
|
||||
// 获取图标和截图
|
||||
QString pkgUrlBase = api->getImgServerUrl() + SparkAPI::getArchDir() + url.path();
|
||||
// 创建网络请求管理器
|
||||
QNetworkAccessManager *iconManager = new QNetworkAccessManager(this);
|
||||
|
||||
// 获取图标
|
||||
QNetworkRequest iconRequest;
|
||||
iconRequest.setUrl(QUrl(pkgUrlBase + "/icon.png"));
|
||||
iconRequest.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);
|
||||
iconRequest.setHeader(QNetworkRequest::ContentTypeHeader, "charset='utf-8'");
|
||||
iconRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
QNetworkRequest request;
|
||||
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||||
QString pkgUrlBase = api->getImgServerUrl() + SparkAPI::getArchDir() + url.path();
|
||||
qDebug() << "Icon URL: " << pkgUrlBase + "/icon.png";
|
||||
request.setUrl(QUrl(pkgUrlBase + "/icon.png"));
|
||||
request.setRawHeader("User-Agent", "Mozilla/5.0");
|
||||
request.setRawHeader("Content-Type", "charset='utf-8'");
|
||||
manager->get(request);
|
||||
QObject::connect(manager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply)
|
||||
{
|
||||
QByteArray jpegData = reply->readAll();
|
||||
iconpixmap.loadFromData(jpegData);
|
||||
iconpixmap.scaled(210, 200, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||
ui->icon->setPixmap(iconpixmap);
|
||||
ui->icon->setScaledContents(true);
|
||||
|
||||
iconManager->get(iconRequest);
|
||||
QObject::connect(iconManager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply)
|
||||
{
|
||||
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++)
|
||||
{
|
||||
@@ -95,9 +82,8 @@ void AppIntoPage::openUrl(const QUrl &url)
|
||||
QNetworkRequest request;
|
||||
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||||
request.setUrl(QUrl(imgUrl));
|
||||
request.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "charset='utf-8'");
|
||||
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
request.setRawHeader("User-Agent", "Mozilla/5.0");
|
||||
request.setRawHeader("Content-Type", "charset='utf-8'");
|
||||
manager->get(request);
|
||||
QObject::connect(manager, &QNetworkAccessManager::finished, [=](QNetworkReply *reply)
|
||||
{
|
||||
@@ -111,23 +97,18 @@ void AppIntoPage::openUrl(const QUrl &url)
|
||||
// img->setScaledContents(true);
|
||||
QListWidgetItem *pItem = new QListWidgetItem();
|
||||
pItem->setSizeHint(QSize(280, 200));
|
||||
ui->listWidget->insertItem(i, pItem);
|
||||
ui->listWidget->addItem(pItem);
|
||||
ui->listWidget->setItemWidget(pItem, img);
|
||||
qDebug() << imgUrl;
|
||||
}
|
||||
|
||||
manager->deleteLater();
|
||||
manager->deleteLater();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* NOTE: No need to judget developmode status
|
||||
*/
|
||||
// Check UOS
|
||||
// QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
// if (config.contains("UOS/EnableDeveloperMode") && !config.value("UOS/EnableDeveloperMode").toBool()){
|
||||
if (false) {
|
||||
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
if (config.contains("UOS/EnableDeveloperMode") && !config.value("UOS/EnableDeveloperMode").toBool()){
|
||||
qDebug() << "UOS Developer Mode has not been enabled!";
|
||||
ui->downloadButton->setText(tr("Developer Mode Disabled"));
|
||||
ui->downloadButton->setEnabled(false);
|
||||
@@ -139,15 +120,11 @@ void AppIntoPage::openUrl(const QUrl &url)
|
||||
bool isInstalled;
|
||||
bool isUpdated;
|
||||
QString packagename = info["Pkgname"].toString();
|
||||
isInstall.start("/opt/durapps/spark-store/bin/store-helper/check-is-installed", QStringList() << info["Pkgname"].toString());
|
||||
isInstall.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString());
|
||||
qDebug() << info["Pkgname"].toString();
|
||||
isInstall.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||
|
||||
int exitCode = isInstall.exitCode();
|
||||
QProcess::ExitStatus exitStatus = isInstall.exitStatus();
|
||||
isInstall.close();
|
||||
|
||||
if (exitCode == 0 && exitStatus == QProcess::NormalExit)
|
||||
int error = QString::fromStdString(isInstall.readAllStandardError().toStdString()).length();
|
||||
if (error == 0)
|
||||
{
|
||||
isInstalled = true;
|
||||
|
||||
@@ -160,7 +137,7 @@ void AppIntoPage::openUrl(const QUrl &url)
|
||||
|
||||
isUpdate.start("dpkg", QStringList() << "--compare-versions" << localVersion << "ge" << info["Version"].toString());
|
||||
isUpdate.waitForFinished(180 * 1000); // 默认超时 3 分钟
|
||||
if (isUpdate.exitCode() == 0 && isUpdate.exitStatus() == QProcess::NormalExit)
|
||||
if (!isUpdate.exitCode())
|
||||
{
|
||||
isUpdated = true;
|
||||
}
|
||||
@@ -168,7 +145,6 @@ void AppIntoPage::openUrl(const QUrl &url)
|
||||
{
|
||||
isUpdated = false;
|
||||
}
|
||||
isUpdate.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -195,7 +171,7 @@ void AppIntoPage::openUrl(const QUrl &url)
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->downloadButton->setText(tr("Download and Install"));
|
||||
ui->downloadButton->setText(tr("Download"));
|
||||
ui->downloadButton->setEnabled(true);
|
||||
ui->downloadButton->show();
|
||||
}
|
||||
@@ -287,10 +263,8 @@ void AppIntoPage::setDownloadWidget(DownloadListWidget *w)
|
||||
}
|
||||
|
||||
dw = w;
|
||||
connect(w, &DownloadListWidget::downloadFinished, this, [=]() {
|
||||
isDownloading(SparkAPI::getServerUrl() + SparkAPI::getArchDir() + spk.path() + "/" + info["Filename"].toString());
|
||||
},
|
||||
Qt::QueuedConnection);
|
||||
connect(w, &DownloadListWidget::downloadFinished, [=]()
|
||||
{ isDownloading(SparkAPI::getServerUrl() + SparkAPI::getArchDir() + spk.path() + "/" + info["Filename"].toString()); });
|
||||
}
|
||||
|
||||
void AppIntoPage::initUI()
|
||||
@@ -335,7 +309,7 @@ void AppIntoPage::isDownloading(const QUrl &url)
|
||||
if (item->download == 2)
|
||||
{
|
||||
ui->downloadButton->setEnabled(true);
|
||||
ui->downloadButton->setText(tr("Download and Install"));
|
||||
ui->downloadButton->setText(tr("Download"));
|
||||
}
|
||||
if (item->download == 1)
|
||||
{
|
||||
@@ -350,27 +324,10 @@ void AppIntoPage::isDownloading(const QUrl &url)
|
||||
}
|
||||
if (item->download == 3)
|
||||
{
|
||||
QString packageName = info["Pkgname"].toString();
|
||||
QProcess process;
|
||||
process.start("/opt/durapps/spark-store/bin/store-helper/check-is-installed", {packageName});
|
||||
process.waitForFinished(-1);
|
||||
|
||||
int exitCode = process.exitCode();
|
||||
QProcess::ExitStatus exitStatus = process.exitStatus();
|
||||
process.close();
|
||||
|
||||
if (exitCode == 0 && exitStatus == QProcess::NormalExit)
|
||||
{
|
||||
ui->downloadButton->setEnabled(true);
|
||||
ui->downloadButton->setText(tr("Reinstall"));
|
||||
ui->downloadButton->show();
|
||||
ui->pushButton_3->show();
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->downloadButton->setEnabled(true);
|
||||
ui->downloadButton->setText(tr("Download and Install"));
|
||||
}
|
||||
ui->downloadButton->setEnabled(true);
|
||||
ui->downloadButton->setText(tr("Reinstall"));
|
||||
ui->downloadButton->show();
|
||||
ui->pushButton_3->show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -423,10 +380,6 @@ void AppIntoPage::setAppinfoTags(const QStringList &tagList)
|
||||
|
||||
void AppIntoPage::notifyUserUnsupportedTags(bool ubuntuSupport, bool deepinSupport, bool uosSupport)
|
||||
{
|
||||
if (!SettingsPage::needUncompatibleNotification) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool isDeepin = Dtk::Core::DSysInfo::productType() == Dtk::Core::DSysInfo::Deepin;
|
||||
bool isUOS = Dtk::Core::DSysInfo::productType() == Dtk::Core::DSysInfo::Uos;
|
||||
bool checkdeepin = (isDeepin && !deepinSupport);
|
||||
@@ -440,38 +393,29 @@ void AppIntoPage::notifyUserUnsupportedTags(bool ubuntuSupport, bool deepinSuppo
|
||||
{
|
||||
qDebug() << "打开 /etc/lsb-release 失败";
|
||||
}
|
||||
else {
|
||||
QString lsbInfo = lsb.readAll(); // 因为使用 readAll 读取后会默认跳转到文件末尾导致读出的数据为空,所以用单独一个 string 存储
|
||||
if (lsbInfo.contains("Ubuntu"))
|
||||
{
|
||||
isUbuntu = true;
|
||||
lsb.close();
|
||||
}
|
||||
else if (lsbInfo.contains("GXDE"))
|
||||
{
|
||||
// GXDE 使用 Ubuntu 的 tag
|
||||
isUbuntu = true;
|
||||
lsb.close();
|
||||
}
|
||||
else if (lsb.readAll().contains("Ubuntu"))
|
||||
{
|
||||
isUbuntu = true;
|
||||
lsb.close();
|
||||
}
|
||||
}
|
||||
bool checkubuntu = (isUbuntu && !ubuntuSupport);
|
||||
|
||||
if (checkdeepin)
|
||||
{
|
||||
Utils::sendNotification("spark-store", tr("Warning"), tr("The current application does not support or tested on deepin, there may be problems"));
|
||||
Utils::sendNotification("spark-store", tr("Warning"), tr("The current application does not support deepin, there may be problems"));
|
||||
}
|
||||
else if (checkuos)
|
||||
{
|
||||
Utils::sendNotification("spark-store", tr("Warning"), tr("The current application does not support or tested on UOS, there may be problems"));
|
||||
Utils::sendNotification("spark-store", tr("Warning"), tr("The current application does not support UOS, there may be problems"));
|
||||
}
|
||||
else if (checkubuntu)
|
||||
{
|
||||
Utils::sendNotification("spark-store", tr("Warning"), tr("The current application does not support or tested on Ubuntu, there may be problems"));
|
||||
Utils::sendNotification("spark-store", tr("Warning"), tr("The current application does not support Ubuntu, there may be problems"));
|
||||
}
|
||||
else if (!isUbuntu && !isDeepin && !isUOS)
|
||||
{
|
||||
Utils::sendNotification("spark-store", tr("Warning"), tr("The current application does not support or tested on current platform, there may be problems"));
|
||||
Utils::sendNotification("spark-store", tr("Warning"), tr("The current application does not support current platform, there may be problems"));
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -488,10 +432,7 @@ void AppIntoPage::on_downloadButton_clicked()
|
||||
return;
|
||||
}
|
||||
|
||||
connect(item, &DownloadItem::finished, this, [=]() {
|
||||
isDownloading(downloadUrl);
|
||||
},
|
||||
Qt::QueuedConnection);
|
||||
connect(item, &DownloadItem::finished, [=]() { isDownloading(downloadUrl); });
|
||||
|
||||
item->install(0);
|
||||
isDownloading(downloadUrl);
|
||||
@@ -512,10 +453,7 @@ void AppIntoPage::on_downloadButton_clicked()
|
||||
item->reinstall = true;
|
||||
}
|
||||
ui->downloadButton->setEnabled(false);
|
||||
connect(item, &DownloadItem::finished, this, [=]() {
|
||||
isDownloading(downloadUrl);
|
||||
},
|
||||
Qt::QueuedConnection);
|
||||
connect(item, &DownloadItem::finished, [=]() { isDownloading(downloadUrl); });
|
||||
|
||||
isDownloading(downloadUrl);
|
||||
}
|
||||
@@ -528,26 +466,24 @@ void AppIntoPage::on_pushButton_3_clicked()
|
||||
ui->pushButton_3->setEnabled(false);
|
||||
|
||||
QProcess uninstall;
|
||||
uninstall.start("pkexec", QStringList() << "apt" << "autopurge" << "-y" << info["Pkgname"].toString().toLower());
|
||||
uninstall.start("pkexec", QStringList() << "apt" << "purge" << "-y" << info["Pkgname"].toString().toLower());
|
||||
uninstall.waitForFinished(-1);
|
||||
uninstall.close();
|
||||
|
||||
QProcess check;
|
||||
check.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString().toLower());
|
||||
check.waitForFinished(-1);
|
||||
check.waitForFinished(10*1000);
|
||||
|
||||
if (check.exitCode() != 0 || check.exitStatus() != QProcess::NormalExit)
|
||||
if (check.readAllStandardOutput().isEmpty())
|
||||
{
|
||||
ui->downloadButton->setText(tr("Download and Install"));
|
||||
ui->downloadButton->setText(tr("Download"));
|
||||
ui->pushButton_3->hide();
|
||||
|
||||
updatesEnabled();
|
||||
Utils::sendNotification("spark-store",tr("Spark Store"),tr("Uninstall succeeded"));
|
||||
}
|
||||
|
||||
ui->downloadButton->setEnabled(true);
|
||||
ui->pushButton_3->setEnabled(true);
|
||||
|
||||
check.close();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -49,8 +49,6 @@ private:
|
||||
QJsonObject info;
|
||||
QPixmap iconpixmap;
|
||||
QUrl spk;
|
||||
|
||||
QByteArray m_userAgent;
|
||||
};
|
||||
|
||||
#endif // APPINTOPAGE_H
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Download and Install</string>
|
||||
<string>Download</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -1,105 +1,108 @@
|
||||
#include "applistpage.h"
|
||||
#include "ui_applistpage.h"
|
||||
|
||||
#define BUILD_URL(theme, arch) \
|
||||
api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/" + (type.isEmpty() ? "?" : "applist?type=" + type + "&") + theme + "&arch=" + arch
|
||||
|
||||
AppListPage::AppListPage(QWidget *parent) : QWidget(parent),
|
||||
ui(new Ui::AppListPage)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->webEngineView->page()->setBackgroundColor(Qt::transparent);
|
||||
}
|
||||
void AppListPage::setTheme(bool dark)
|
||||
{
|
||||
isDark = dark;
|
||||
if (dark)
|
||||
{
|
||||
this->setStyleSheet("#frame{background-color: #252525;border-radius:14px;border:1px solid rgb(64, 64, 64);}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 亮色模式
|
||||
this->setStyleSheet("#frame{background-color: #ffffff;border-radius:14px;border:1px solid rgb(229,229,229);}");
|
||||
}
|
||||
if (isSearch)
|
||||
{
|
||||
getSearchList(nowType);
|
||||
}
|
||||
else
|
||||
{
|
||||
getAppList(nowType);
|
||||
}
|
||||
}
|
||||
void AppListPage::getAppList(QString type)
|
||||
{
|
||||
isSearch = false;
|
||||
nowType = type;
|
||||
SparkAPI *api = new SparkAPI(this);
|
||||
QString url;
|
||||
QString theme;
|
||||
if (isDark)
|
||||
{
|
||||
theme = "theme=dark";
|
||||
}
|
||||
else
|
||||
{
|
||||
theme = "theme=light";
|
||||
}
|
||||
|
||||
#ifdef __aarch64__
|
||||
url = BUILD_URL(theme, "aarch64");
|
||||
#elif __loongarch__
|
||||
url = BUILD_URL(theme, "loong64");
|
||||
#else
|
||||
url = BUILD_URL(theme, "x86");
|
||||
#endif
|
||||
|
||||
ui->webEngineView->setUrl(url);
|
||||
delete api;
|
||||
}
|
||||
|
||||
void AppListPage::getSearchList(const QString &keyword)
|
||||
{
|
||||
isSearch = true;
|
||||
nowType = keyword;
|
||||
SparkAPI *api = new SparkAPI(this);
|
||||
QString url;
|
||||
QString theme;
|
||||
if (isDark)
|
||||
{
|
||||
theme = "theme=dark";
|
||||
}
|
||||
else
|
||||
{
|
||||
theme = "theme=light";
|
||||
}
|
||||
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/search?keywords=" + QUrl::toPercentEncoding(keyword) + "&" + theme + "&" + "arch=x86";
|
||||
#ifdef __aarch64__
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/search?keywords=" + QUrl::toPercentEncoding(keyword) + "&" + theme + "&" + "arch=aarch64";
|
||||
#elif __loongarch__
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/search?keywords=" + QUrl::toPercentEncoding(keyword) + "&" + theme + "&" + "arch=loong64";
|
||||
#endif
|
||||
ui->webEngineView->setUrl(url);
|
||||
delete api;
|
||||
}
|
||||
|
||||
AppListPage::~AppListPage()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void AppListPage::on_webEngineView_urlChanged(const QUrl &arg1)
|
||||
{
|
||||
if (arg1.path().right(8) == "app.json")
|
||||
{
|
||||
QString url = arg1.toString();
|
||||
url = url.mid(url.indexOf("/" + SparkAPI::getArchDir() + "/"));
|
||||
url = "spk:/" + url;
|
||||
url = url.mid(0, url.indexOf("/app.json"));
|
||||
qDebug() << "程序跳转链接地址:" << url;
|
||||
ui->webEngineView->back();
|
||||
emit clicked(url);
|
||||
}
|
||||
}
|
||||
#include "applistpage.h"
|
||||
#include "ui_applistpage.h"
|
||||
|
||||
|
||||
|
||||
AppListPage::AppListPage(QWidget *parent) : QWidget(parent),
|
||||
ui(new Ui::AppListPage)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->webEngineView->page()->setBackgroundColor(Qt::transparent);
|
||||
}
|
||||
void AppListPage::setTheme(bool dark)
|
||||
{
|
||||
isDark = dark;
|
||||
if (dark)
|
||||
{
|
||||
this->setStyleSheet("#frame{background-color: #252525;border-radius:14px;border:1px solid rgb(64, 64, 64);}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 亮色模式
|
||||
this->setStyleSheet("#frame{background-color: #ffffff;border-radius:14px;border:1px solid rgb(229,229,229);}");
|
||||
}
|
||||
if (isSearch)
|
||||
{
|
||||
getSearchList(nowType);
|
||||
}
|
||||
else
|
||||
{
|
||||
getAppList(nowType);
|
||||
}
|
||||
}
|
||||
void AppListPage::getAppList(QString type)
|
||||
{
|
||||
isSearch = false;
|
||||
nowType = type;
|
||||
SparkAPI *api = new SparkAPI(this);
|
||||
QString url;
|
||||
QString theme;
|
||||
if (isDark)
|
||||
{
|
||||
theme = "theme=dark";
|
||||
}
|
||||
else
|
||||
{
|
||||
theme = "theme=light";
|
||||
}
|
||||
if (type == "")
|
||||
{
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/?" + theme + "&" + "arch=x86";
|
||||
#ifdef __aarch64__
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/?" + theme + "&" + "arch=aarch64";
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/applist?type=" + type + "&" + theme + "&" + "arch=x86";
|
||||
#ifdef __aarch64__
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/applist?type=" + type + "&" + theme + "&" + "arch=aarch64";
|
||||
#endif
|
||||
}
|
||||
|
||||
ui->webEngineView->setUrl(url);
|
||||
delete api;
|
||||
}
|
||||
|
||||
void AppListPage::getSearchList(const QString &keyword)
|
||||
{
|
||||
isSearch = true;
|
||||
nowType = keyword;
|
||||
SparkAPI *api = new SparkAPI(this);
|
||||
QString url;
|
||||
QString theme;
|
||||
if (isDark)
|
||||
{
|
||||
theme = "theme=dark";
|
||||
}
|
||||
else
|
||||
{
|
||||
theme = "theme=light";
|
||||
}
|
||||
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/search?keywords=" + QUrl::toPercentEncoding(keyword) + "&" + theme + "&" + "arch=x86";
|
||||
#ifdef __aarch64__
|
||||
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/search?keywords=" + QUrl::toPercentEncoding(keyword) + "&" + theme + "&" + "arch=aarch64";
|
||||
#endif
|
||||
ui->webEngineView->setUrl(url);
|
||||
delete api;
|
||||
}
|
||||
|
||||
AppListPage::~AppListPage()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void AppListPage::on_webEngineView_urlChanged(const QUrl &arg1)
|
||||
{
|
||||
if (arg1.path().right(8) == "app.json")
|
||||
{
|
||||
QString url = arg1.toString();
|
||||
url = url.mid(url.indexOf("/" + SparkAPI::getArchDir() + "/"));
|
||||
url = "spk:/" + url;
|
||||
url = url.mid(0, url.indexOf("/app.json"));
|
||||
qDebug() << "程序跳转链接地址:" << url;
|
||||
ui->webEngineView->back();
|
||||
emit clicked(url);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,9 +9,8 @@
|
||||
|
||||
#define TMP_PATH "/tmp/spark-store"
|
||||
#define DEFAULT_SERVER_URL "https://cdn.d.store.deepinos.org.cn/"
|
||||
#define DEFAULT_CHECK_DOMAIN "deepinos"
|
||||
|
||||
|
||||
bool SettingsPage::needUncompatibleNotification = true;
|
||||
bool SettingsPage::isdownload = false;
|
||||
|
||||
SettingsPage::SettingsPage(QWidget *parent)
|
||||
@@ -57,7 +56,10 @@ void SettingsPage::readServerList()
|
||||
|
||||
// 创建 QTextStream 对象
|
||||
QTextStream textStream(&file);
|
||||
|
||||
if (!textStream.readAll().contains(DEFAULT_CHECK_DOMAIN)) // 校验配置文件有效性
|
||||
{
|
||||
return;
|
||||
}
|
||||
textStream.seek(0); // 回到开头
|
||||
QString lineData = textStream.readLine(); // 读取文件的第一行
|
||||
ui->comboBox_server->addItem(lineData);
|
||||
@@ -97,9 +99,6 @@ void SettingsPage::initConfig()
|
||||
SparkAPI::setServerUrl(config.value("server/choose").toString());
|
||||
}
|
||||
configCanSave = true; // 防止触发保存配置信号
|
||||
|
||||
needUncompatibleNotification = config.value("other/uncompatibleNotification", needUncompatibleNotification).toBool();
|
||||
ui->checkBox->setChecked(needUncompatibleNotification);
|
||||
}
|
||||
|
||||
SettingsPage::~SettingsPage()
|
||||
@@ -253,11 +252,3 @@ void SettingsPage::on_pushButton_clearWebCache_clicked()
|
||||
cacheDir.removeRecursively();
|
||||
});
|
||||
}
|
||||
|
||||
void SettingsPage::on_checkBox_clicked(bool checked)
|
||||
{
|
||||
needUncompatibleNotification = checked;
|
||||
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
|
||||
config.setValue("other/uncompatibleNotification", needUncompatibleNotification);
|
||||
config.sync();
|
||||
}
|
||||
|
||||
@@ -30,11 +30,6 @@ private slots:
|
||||
|
||||
void on_pushButton_clearWebCache_clicked();
|
||||
|
||||
void on_checkBox_clicked(bool checked);
|
||||
|
||||
public:
|
||||
static bool needUncompatibleNotification;
|
||||
|
||||
private:
|
||||
static bool isdownload;
|
||||
bool configCanSave;
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<widget class="QScrollArea" name="scrollArea_2">
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
@@ -67,21 +67,21 @@
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>688</width>
|
||||
<height>940</height>
|
||||
<width>743</width>
|
||||
<height>839</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_23">
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<widget class="QWidget" name="widget_6" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_22">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
@@ -93,10 +93,10 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_2" native="true">
|
||||
<widget class="QWidget" name="widget_7" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
@@ -132,7 +132,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_setting">
|
||||
<widget class="QLabel" name="label_setting1">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>160</width>
|
||||
@@ -145,7 +145,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -161,10 +161,10 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_3" native="true">
|
||||
<widget class="QWidget" name="widget_8" native="true">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="3">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -177,7 +177,7 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="4">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">color:#808080</string>
|
||||
</property>
|
||||
@@ -190,7 +190,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Spark Store Update</string>
|
||||
</property>
|
||||
@@ -217,44 +217,10 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_7" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Other Settings</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_8" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<property name="text">
|
||||
<string>Enable notification for apps not compatible with current system</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_4" native="true">
|
||||
<widget class="QWidget" name="widget_9" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_26">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
@@ -266,10 +232,10 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_5" native="true">
|
||||
<widget class="QWidget" name="widget_10" native="true">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="2" column="0" colspan="5">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<widget class="QLabel" name="label_12">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">color:#808080</string>
|
||||
</property>
|
||||
@@ -286,14 +252,14 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string>Location:/tmp/spark-store</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -313,7 +279,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<widget class="QLabel" name="label_13">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
@@ -339,10 +305,10 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_6" native="true">
|
||||
<widget class="QWidget" name="widget_2" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_25">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_9">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>18</pointsize>
|
||||
@@ -354,9 +320,10 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_10">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>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. </p><p>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. </p><p>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. </p><p>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.</p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p><p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></string>
|
||||
<string><html><head/><body><p>We are <span style=" font-weight:600;">NOT</span> the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &quot;Spark Store&quot;! &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. </p><p>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. </p><p>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. </p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p>
|
||||
<p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
@@ -370,7 +337,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<spacer name="verticalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
|
||||
@@ -34,8 +34,6 @@ CONFIG += c++11 link_pkgconfig
|
||||
PKGCONFIG += dtkcore dtkgui dtkwidget
|
||||
|
||||
SOURCES += \
|
||||
backend/DataCollectorAndUploader.cpp \
|
||||
backend/ThemeChecker.cpp \
|
||||
backend/downloadworker.cpp \
|
||||
backend/image_show.cpp \
|
||||
backend/sparkapi.cpp \
|
||||
@@ -60,8 +58,6 @@ SOURCES += \
|
||||
mainwindow-dtk.cpp
|
||||
|
||||
HEADERS += \
|
||||
backend/DataCollectorAndUploader.h \
|
||||
backend/ThemeChecker.h \
|
||||
backend/downloadworker.h \
|
||||
backend/image_show.h \
|
||||
backend/sparkapi.h \
|
||||
@@ -97,7 +93,6 @@ RESOURCES += \
|
||||
|
||||
TRANSLATIONS += \
|
||||
../translations/spark-store_en.ts \
|
||||
../translations/spark-store_es.ts \
|
||||
../translations/spark-store_fr.ts \
|
||||
../translations/spark-store_zh_CN.ts \
|
||||
../translations/spark-store_zh_TW.ts
|
||||
|
||||
@@ -1,21 +1,14 @@
|
||||
#include "httprequest.h"
|
||||
|
||||
HttpRequest::HttpRequest(QObject *parent):QObject(parent)
|
||||
HttpRequest::HttpRequest()
|
||||
{
|
||||
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)
|
||||
{
|
||||
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", "application/json");
|
||||
|
||||
@@ -33,7 +26,6 @@ QString HttpRequest::postRequest(QString url, QString jsondata)
|
||||
QNetworkAccessManager *naManager = new QNetworkAccessManager(this);
|
||||
QUrl strUrl = url.replace("+", "%2B");
|
||||
request.setUrl(strUrl);
|
||||
request.setRawHeader("User-Agent", rawHeaders);
|
||||
request.setRawHeader("Content-Type", "charset='utf-8'");
|
||||
request.setRawHeader("Content-Type", "application/json");
|
||||
|
||||
|
||||
@@ -10,11 +10,8 @@
|
||||
class HttpRequest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
char* rawHeaders;
|
||||
public:
|
||||
HttpRequest(QObject *parent = nullptr);
|
||||
~HttpRequest();
|
||||
HttpRequest();
|
||||
|
||||
void getRequest(QNetworkRequest request);
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include <QSettings>
|
||||
#include <QStandardPaths>
|
||||
#include <QFile>
|
||||
#include <QUuid>
|
||||
#include <QJsonDocument>
|
||||
|
||||
#define UOSDeveloperModeFile "/var/lib/deepin/developer-mode/enabled"
|
||||
@@ -73,36 +72,6 @@ bool Utils::isWayland()
|
||||
return isWayland;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 判断是否使用 TreeLand 混合器
|
||||
* @return bool true: 使用 TreeLand 混合器 false: 非 TreeLand 混合器
|
||||
*/
|
||||
bool Utils::isTreeLand()
|
||||
{
|
||||
bool isTreeLand = false;
|
||||
if (qgetenv("DDE_CURRENT_COMPOSITOR").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 配置文件,去除废弃字段
|
||||
*/
|
||||
@@ -127,11 +96,6 @@ void Utils::initConfig()
|
||||
{
|
||||
config.setValue("runtime/useWayland", useWayland);
|
||||
}
|
||||
|
||||
// check uuid
|
||||
if (!config.contains("info/uuid")){
|
||||
config.setValue("info/uuid", initUUID());
|
||||
}
|
||||
config.sync(); // 写入更改至 config.ini,并同步最新内容
|
||||
|
||||
checkUOSDeveloperMode(); // Check UOS developer mode
|
||||
@@ -162,14 +126,6 @@ bool Utils::isUOS()
|
||||
return isUOS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Utils::initUUID 生成 UUID
|
||||
*/
|
||||
QString Utils::initUUID(){
|
||||
QUuid uuid = QUuid::createUuid();
|
||||
return uuid.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Utils::setQPAPlatform Set display backend
|
||||
*/
|
||||
@@ -184,18 +140,14 @@ void Utils::setQPAPlatform()
|
||||
|
||||
qDebug() << "System Wayland enabled:" << isWayland << "Spark Wayland enabled:" << useWayland;
|
||||
|
||||
/**
|
||||
* NOTE: https://github.com/linuxdeepin/developer-center/issues/7217#issuecomment-1922653903
|
||||
* DDE Wayland has been deprecated, so using wayland plugin only
|
||||
*/
|
||||
if (isWayland && useWayland /*&& !(Dtk::Core::DSysInfo::isDeepin() || isDDE)*/)
|
||||
if (isWayland && useWayland && !(Dtk::Core::DSysInfo::isDeepin() || isDDE))
|
||||
{
|
||||
qputenv("QT_QPA_PLATFORM", "wayland");
|
||||
}
|
||||
// else if (isWayland && useWayland && (Dtk::Core::DSysInfo::isDeepin() && isDDE))
|
||||
// {
|
||||
// qputenv("QT_QPA_PLATFORM", "dwayland");
|
||||
// }
|
||||
else if (isWayland && useWayland && (Dtk::Core::DSysInfo::isDeepin() && isDDE))
|
||||
{
|
||||
qputenv("QT_QPA_PLATFORM", "dwayland");
|
||||
}
|
||||
else
|
||||
{
|
||||
qputenv("QT_QPA_PLATFORM", "dxcb");
|
||||
|
||||
@@ -10,11 +10,8 @@ public:
|
||||
static void sendNotification(const QString &icon, const QString &title, const QString &body);
|
||||
static bool isDDE();
|
||||
static bool isWayland();
|
||||
static bool isTreeLand();
|
||||
static void initConfig();
|
||||
static bool isUOS();
|
||||
static bool isPhytium();
|
||||
static QString initUUID();
|
||||
static void setQPAPlatform();
|
||||
static void checkUOSDeveloperMode();
|
||||
static QJsonObject parseFeatureJsonFile();
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
#include "big_image.h"
|
||||
#include "qapplication.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QScreen>
|
||||
#include <QtConcurrent>
|
||||
|
||||
big_image::big_image(DBlurEffectWidget *parent) : DBlurEffectWidget(parent),
|
||||
@@ -19,16 +17,13 @@ big_image::big_image(DBlurEffectWidget *parent) : DBlurEffectWidget(parent),
|
||||
layout->addWidget(m_image);
|
||||
layout->setMargin(0);
|
||||
|
||||
// Make sure the image has a parent so that it will be freed.
|
||||
m_image->setParent(this);
|
||||
// m_image->setParent(this);
|
||||
// m_image->setMaximumSize(1360,768);
|
||||
m_image->setAlignment(Qt::AlignCenter);
|
||||
}
|
||||
|
||||
void big_image::setimage(QPixmap image)
|
||||
{
|
||||
QScreen *screen = QApplication::primaryScreen();
|
||||
image.setDevicePixelRatio(screen->devicePixelRatio());
|
||||
m_image->setPixmap(image);
|
||||
}
|
||||
|
||||
|
||||
@@ -175,7 +175,7 @@ void DownloadItem::slotAsyncInstall(int t)
|
||||
switch (t)
|
||||
{
|
||||
case 0:
|
||||
installer.start("pkexec", QStringList() << "/usr/local/bin/ssinstall"
|
||||
installer.start("pkexec", QStringList() << "ssinstall"
|
||||
<< "/tmp/spark-store/" + ui->label_filename->text().toUtf8() << "--delete-after-install");
|
||||
break;
|
||||
case 1:
|
||||
@@ -198,7 +198,7 @@ void DownloadItem::slotAsyncInstall(int t)
|
||||
for (int i = 0; i < everyOut.size(); i++)
|
||||
{
|
||||
tempOutput = everyOut[i];
|
||||
if (tempOutput.contains("OMG-IT-GOES-WRONG"))
|
||||
if (everyOut[i].left(2) == "E:" || tempOutput.contains("错误") || tempOutput.contains("exit code") || tempOutput.contains("OMG-IT-GOES-WRONG"))
|
||||
{
|
||||
haveError = true;
|
||||
}
|
||||
@@ -226,17 +226,17 @@ void DownloadItem::slotAsyncInstall(int t)
|
||||
ui->pushButton_install->show();
|
||||
ui->pushButton_install->setText(tr("Retry"));
|
||||
download = 1;
|
||||
Utils::sendNotification("spark-store", tr("Spark Store"), tr("Error happened in dpkg progress , please check the install info or try to reinstall."));
|
||||
ui->label_2->setText(tr("Error happened in dpkg progress , please check the install info or try to reinstall."));
|
||||
ui->label_2->setToolTip(tr("Error happened in dpkg progress , please check the install info or try to reinstall."));
|
||||
Utils::sendNotification("spark-store", tr("Spark Store"), tr("Error happened in dpkg progress , you can try it again."));
|
||||
ui->label_2->setText(tr("Error happened in dpkg progress , you can try it again"));
|
||||
ui->label_2->setToolTip(tr("Error happened in dpkg progress , you can try it again"));
|
||||
ui->pushButton_3->show();
|
||||
}
|
||||
|
||||
if (notRoot)
|
||||
{
|
||||
Utils::sendNotification("spark-store", tr("Spark Store"), tr("dpkg progress had been aborted, please check the install info or try to reinstall."));
|
||||
ui->label_2->setText(tr("dpkg progress had been aborted, please check the install info or try to reinstall."));
|
||||
ui->label_2->setToolTip(tr("dpkg progress had been aborted, please check the install info or try to reinstall."));
|
||||
Utils::sendNotification("spark-store", tr("Spark Store"), tr("dpkg progress had been aborted,you can retry installation."));
|
||||
ui->label_2->setText(tr("dpkg progress had been aborted,you can retry installation"));
|
||||
ui->label_2->setToolTip(tr("dpkg progress had been aborted,you can retry installation"));
|
||||
ui->pushButton_install->show();
|
||||
ui->pushButton_3->hide();
|
||||
}
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
ProgressButton::ProgressButton(QWidget *parent)
|
||||
: QWidget{parent}
|
||||
{
|
||||
// this->setWindowFlags(Qt::FramelessWindowHint);
|
||||
// this->setAttribute(Qt::WA_TranslucentBackground, true);
|
||||
setMinimumSize(36, 36);
|
||||
|
||||
svgPath = "";
|
||||
backColor = Qt::transparent;
|
||||
|
||||
@@ -33,7 +37,7 @@ void ProgressButton::setProgress(int progress)
|
||||
buttonState = state::closeProgress;
|
||||
update();
|
||||
WaterDrop *waterDrop = new WaterDrop(parentWidget());
|
||||
waterDrop->move(QRectF(geometry()).center());
|
||||
waterDrop->move(geometry().center());
|
||||
waterDrop->show();
|
||||
}
|
||||
repaint();
|
||||
@@ -73,9 +77,12 @@ void ProgressButton::mousePressEvent(QMouseEvent *event)
|
||||
|
||||
void ProgressButton::mouseReleaseEvent(QMouseEvent *event)
|
||||
{
|
||||
if (buttonState == state::hover
|
||||
|| buttonState == state::normal
|
||||
|| buttonState == state::closeProgress)
|
||||
if (buttonState == state::hover || buttonState == state::normal)
|
||||
{
|
||||
widthChangeValue = (this->width() - 6) / 2;
|
||||
update();
|
||||
}
|
||||
else if (buttonState == state::closeProgress)
|
||||
{
|
||||
update();
|
||||
}
|
||||
@@ -124,15 +131,19 @@ void ProgressButton::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||
QRectF rect = this->rect();
|
||||
QRect rect = event->rect();
|
||||
|
||||
if (buttonState == state::normal || buttonState == state::hover)
|
||||
{
|
||||
qreal radius = rect.height() / 2;
|
||||
int radius = (rect.height() - 6) / 2;
|
||||
painter.translate(rect.center());
|
||||
painter.setPen(Qt::transparent);
|
||||
painter.setBrush(QColor(buttonState == state::normal ? color : color.darker()));
|
||||
// painter.drawEllipse(QPoint(0, 0), radius, radius);
|
||||
|
||||
// radiu -= 3;
|
||||
painter.setBrush(backColor);
|
||||
painter.drawEllipse(QPointF(0, 0), radius, radius);
|
||||
painter.drawEllipse(QPoint(0, 0), radius, radius);
|
||||
|
||||
QSvgRenderer m_svgRender;
|
||||
m_svgRender.load(svgPath);
|
||||
@@ -140,34 +151,42 @@ void ProgressButton::paintEvent(QPaintEvent *event)
|
||||
}
|
||||
else if (buttonState == state::openProgress)
|
||||
{
|
||||
qreal radius = rect.height() / 2 - 1;
|
||||
painter.translate(rect.center());
|
||||
painter.setPen(QPen(backColor.darker(), 2));
|
||||
int radius = (rect.height() - 6) / 2 - 3;
|
||||
painter.setBrush(backColor);
|
||||
painter.drawEllipse(QPointF(0, 0), radius, radius);
|
||||
painter.setPen(QPen(backColor, 3));
|
||||
painter.drawEllipse(QPoint(0, 0), radius, radius);
|
||||
|
||||
QRectF rectF = QRectF(-radius, -radius, radius * 2, radius * 2);
|
||||
painter.setPen(QPen(color.darker(100), 2));
|
||||
qreal angle = progress * 360 / 100 * 1.0;
|
||||
painter.drawArc(rectF, 90 * 16, -qIntCast(angle * 16));
|
||||
painter.setPen(QPen(backColor, 3));
|
||||
|
||||
QSvgRenderer m_svgRender;
|
||||
m_svgRender.load(svgPath);
|
||||
m_svgRender.render(&painter, QRectF(-radius / 2, -radius / 2, radius, radius));
|
||||
|
||||
QRect rect = QRect(-radius, -radius,
|
||||
radius * 2, radius * 2);
|
||||
|
||||
painter.setPen(QPen(color.darker(100), 3));
|
||||
qreal angle = progress * 360 / 100 * 1.0;
|
||||
painter.drawArc(rect.adjusted(-3, -3, 3, 3), 90 * 16, -qIntCast(angle * 16));
|
||||
}
|
||||
else if (buttonState == state::closeProgress)
|
||||
{
|
||||
qreal radius = rect.height() / 2 - 1;
|
||||
auto radius = (rect.height() - 6) / 2;
|
||||
painter.translate(rect.center());
|
||||
painter.setPen(QPen(color.darker(100), 2));
|
||||
painter.setBrush(backColor);
|
||||
painter.drawEllipse(QPointF(0, 0), radius, radius);
|
||||
painter.setPen(Qt::transparent);
|
||||
painter.setBrush(QColor(0, 0, 0, 63));
|
||||
painter.drawEllipse(QPoint(0, 0), radius, radius);
|
||||
|
||||
painter.setPen(QPen(color, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
|
||||
painter.drawLine(QPointF(-radius / 3, 0),
|
||||
QPointF(-radius / 5, radius / 3));
|
||||
painter.drawLine(QPointF(-radius / 5, radius / 3),
|
||||
QPointF(radius / 4, -radius / 4));
|
||||
radius -= 3;
|
||||
painter.setBrush(backColor);
|
||||
painter.drawEllipse(QPoint(0, 0), radius, radius);
|
||||
|
||||
painter.setPen(QPen(color, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
|
||||
painter.drawLine(QPoint(-radius / 3, 0),
|
||||
QPoint(-radius / 5, radius / 3));
|
||||
painter.drawLine(QPoint(-radius / 5, radius / 3),
|
||||
QPoint(radius / 4, -radius / 4));
|
||||
}
|
||||
QWidget::paintEvent(event);
|
||||
}
|
||||
@@ -176,7 +195,7 @@ void ProgressButton::operationProcessing()
|
||||
{
|
||||
}
|
||||
|
||||
const int RADIUS = 30;
|
||||
const int RADIUS = 60;
|
||||
WaterDrop::WaterDrop(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_waterDropAnimation(new QVariantAnimation(this))
|
||||
@@ -191,20 +210,20 @@ WaterDrop::WaterDrop(QWidget *parent)
|
||||
}
|
||||
|
||||
// 把鼠标点击的点转换为圆心点坐标
|
||||
void WaterDrop::move(const QPointF &point)
|
||||
void WaterDrop::move(const QPoint &point)
|
||||
{
|
||||
QPointF translatePoint = point - QRectF(rect()).center();
|
||||
QWidget::move(qRound(translatePoint.x()), qRound(translatePoint.y()));
|
||||
QPoint translatePoint = point - QPoint(RADIUS, RADIUS);
|
||||
QWidget::move(translatePoint);
|
||||
}
|
||||
|
||||
void WaterDrop::show()
|
||||
{
|
||||
m_waterDropAnimation->setStartValue(0);
|
||||
m_waterDropAnimation->setEndValue(RADIUS - 2);
|
||||
m_waterDropAnimation->setEndValue(RADIUS);
|
||||
m_waterDropAnimation->setDuration(350);
|
||||
|
||||
connect(m_waterDropAnimation, &QVariantAnimation::valueChanged, this, &WaterDrop::onRadiusChanged);
|
||||
connect(m_waterDropAnimation, &QVariantAnimation::finished, this, &WaterDrop::deleteLater);
|
||||
connect(m_waterDropAnimation, &QVariantAnimation::finished, this, &WaterDrop::close);
|
||||
m_waterDropAnimation->start(QVariantAnimation::DeleteWhenStopped);
|
||||
QWidget::show();
|
||||
}
|
||||
@@ -213,9 +232,10 @@ void WaterDrop::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
QPen pen(QBrush(QColor("#ffff80")), 4.0);
|
||||
QPen pen(QBrush(QColor("#ffff80")), 5.0);
|
||||
pen.setWidth(5);
|
||||
painter.setPen(pen);
|
||||
painter.drawEllipse(QRectF(rect()).center(), m_animationRadius, m_animationRadius);
|
||||
painter.drawEllipse(event->rect().center(), m_animationRadius, m_animationRadius);
|
||||
|
||||
QWidget::paintEvent(event);
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ private:
|
||||
QColor backColor;
|
||||
QColor color;
|
||||
QString svgPath;
|
||||
int widthChangeValue{0};
|
||||
int progress{0};//处理百分比
|
||||
|
||||
bool m_mouseMoved = false;
|
||||
@@ -65,7 +66,7 @@ class WaterDrop : public QWidget
|
||||
public:
|
||||
explicit WaterDrop(QWidget *parent = nullptr);
|
||||
void show();
|
||||
void move(const QPointF &point);
|
||||
void move(const QPoint &point);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event);
|
||||
|
||||
@@ -7,7 +7,20 @@
|
||||
WebEnginePage::WebEnginePage(QObject *parent)
|
||||
: QWebEnginePage(parent)
|
||||
{
|
||||
initHttpAcceptLanguage();
|
||||
QLocale ql;
|
||||
switch (ql.language())
|
||||
{
|
||||
case QLocale::Chinese:
|
||||
{
|
||||
// 系统语言是中文,获取网页为中文 @momen @uniartisan
|
||||
QWebEngineProfile *profile = QWebEngineProfile::defaultProfile();
|
||||
qDebug() << profile->httpAcceptLanguage();
|
||||
profile->setHttpAcceptLanguage("zh-CN,zh;q=0.8,en;q=0.6");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
WebEnginePage::~WebEnginePage()
|
||||
@@ -34,18 +47,6 @@ QWebEnginePage *WebEnginePage::createWindow(QWebEnginePage::WebWindowType type)
|
||||
return page;
|
||||
}
|
||||
|
||||
void WebEnginePage::initHttpAcceptLanguage()
|
||||
{
|
||||
switch (QLocale::system().language()) {
|
||||
case QLocale::Chinese: {
|
||||
// 系统语言是中文,获取网页为中文 @momen @uniartisan
|
||||
profile()->setHttpAcceptLanguage("zh-CN,zh;q=0.8,en;q=0.6");
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void WebEnginePage::slotUrlChanged(const QUrl &url)
|
||||
{
|
||||
if (m_currentUrl == url)
|
||||
|
||||
@@ -16,9 +16,6 @@ public:
|
||||
protected:
|
||||
QWebEnginePage *createWindow(WebWindowType type) override;
|
||||
|
||||
private:
|
||||
void initHttpAcceptLanguage();
|
||||
|
||||
private slots:
|
||||
void slotUrlChanged(const QUrl &url);
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#include "webengineview.h"
|
||||
#include "webenginepage.h"
|
||||
|
||||
#include <QDesktopServices>
|
||||
|
||||
WebEngineView::WebEngineView(QWidget *parent)
|
||||
: QWebEngineView(parent)
|
||||
{
|
||||
|
||||
@@ -169,7 +169,6 @@ void DownloadListWidget::httpFinished() // 完成下载
|
||||
{
|
||||
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1) // 安装当前应用,堵塞安装,后面的下载suspend
|
||||
{
|
||||
QThread::msleep(500); // 休眠500ms,减少CPU负担
|
||||
continue;
|
||||
}
|
||||
downloaditemlist[nowDownload - 1]->free = true;
|
||||
@@ -180,15 +179,17 @@ void DownloadListWidget::httpFinished() // 完成下载
|
||||
// 如果有排队则下载下一个
|
||||
qDebug() << "Download: 切换下一个下载...";
|
||||
nowDownload += 1;
|
||||
while (nowDownload <= allDownload && downloaditemlist[nowDownload - 1]->close)
|
||||
while (downloaditemlist[nowDownload - 1]->close)
|
||||
{
|
||||
nowDownload += 1;
|
||||
if (nowDownload >= allDownload)
|
||||
{
|
||||
nowDownload = allDownload;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (nowDownload <= allDownload)
|
||||
{
|
||||
QString fileName = downloaditemlist[nowDownload - 1]->getName();
|
||||
startRequest(urList.at(nowDownload - 1), fileName);
|
||||
}
|
||||
QString fileName = downloaditemlist[nowDownload - 1]->getName();
|
||||
startRequest(urList.at(nowDownload - 1), fileName);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -235,23 +236,19 @@ void DownloadListWidget::on_pushButton_clicked()
|
||||
void DownloadListWidget::slotInstallFinished(bool success)
|
||||
{
|
||||
// NOTE: 仅在安装成功后判断是否需要退出后台
|
||||
if (!success) {
|
||||
qDebug() << "Download: install failed";
|
||||
return;
|
||||
}
|
||||
if (success) {
|
||||
toDownload -= 1; // 安装完以后减少待安装数目
|
||||
qDebug() << "Download: 还没有下载的数目:" << toDownload;
|
||||
|
||||
if (toDownload > 0) {
|
||||
toDownload -= 1;
|
||||
qDebug() << "Download: toDownload" << toDownload;
|
||||
}
|
||||
|
||||
if (toDownload == 0) {
|
||||
Application *app = qobject_cast<Application *>(qApp);
|
||||
MainWindow *mainWindow = app->mainWindow();
|
||||
if (mainWindow->isCloseWindowAnimation() == true)
|
||||
if (toDownload == 0)
|
||||
{
|
||||
qDebug() << "Download: 后台安装结束,退出程序";
|
||||
qApp->quit();
|
||||
Application *app = qobject_cast<Application *>(qApp);
|
||||
MainWindow *mainWindow = app->mainWindow();
|
||||
if (mainWindow->isCloseWindowAnimation() == true)
|
||||
{
|
||||
qDebug() << "Download: 后台安装结束,退出程序";
|
||||
qApp->quit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
169
tool/apt-fast-conf/apt-fast.conf
Normal file
169
tool/apt-fast-conf/apt-fast.conf
Normal file
@@ -0,0 +1,169 @@
|
||||
###################################################################
|
||||
# CONFIGURATION OPTIONS
|
||||
###################################################################
|
||||
# Every item has a default value besides MIRRORS (which is unset).
|
||||
|
||||
# Use aptitude, apt-get, or apt?
|
||||
# Note that apt-get is used as a fallback for outputting the
|
||||
# package URI list for e.g. aptitude, which can't do this
|
||||
# Optionally add the FULLPATH to apt-get or apt-rpm or aptitude
|
||||
# e.g. /usr/bin/aptitude
|
||||
#
|
||||
# Default: apt-get
|
||||
#
|
||||
_APTMGR=apt-get
|
||||
|
||||
if [ -x "$(command -v apt)" ]; then
|
||||
_APTMGR=apt
|
||||
fi
|
||||
|
||||
|
||||
if grep -Eqi "linuxmint" /etc/os-release;then
|
||||
_APTMGR=apt-get
|
||||
fi
|
||||
|
||||
if [ -x "$(command -v oyo)" ]; then
|
||||
_APTMGR=/usr/bin/apt
|
||||
fi
|
||||
|
||||
####
|
||||
#
|
||||
# UOS sources auth config
|
||||
#
|
||||
#
|
||||
if grep -Eqi "UnionTech" /etc/issue || grep -Eq "UnionTech" /etc/*-release;then
|
||||
AUTH_UOS_USER="uos-https://license.chinauos.com-apt"
|
||||
AUTH_UOS_PASSWD="`cat /etc/apt/auth.conf.d/uos.conf | grep home-packages.chinauos.com`"
|
||||
AUTH_UOS_PASSWD=`echo ${AUTH_UOS_PASSWD#*password }`
|
||||
|
||||
fi
|
||||
##### UOS自动读取账号密码以实现使用aptss来加速下载
|
||||
|
||||
# Enable DOWNLOADBEFORE to suppress apt-fast confirmation dialog and download
|
||||
# packages directly.
|
||||
#
|
||||
# Default: dialog enabled
|
||||
#
|
||||
DOWNLOADBEFORE=true
|
||||
|
||||
|
||||
# Choose mirror list to speed up downloads from same archive. To select some
|
||||
# mirrors take a look at your distribution's archive mirror lists.
|
||||
# Debian: http://www.debian.org/mirror/list
|
||||
# Ubuntu: https://launchpad.net/ubuntu/+archivemirrors
|
||||
#
|
||||
# It is required to add mirrors in the sources.list to this array as well, so
|
||||
# apt-fast can destinguish between different distributions.
|
||||
#
|
||||
# Examples:
|
||||
#
|
||||
# Different distributions (as in operating systems):
|
||||
#
|
||||
# sources.list:
|
||||
# deb http://deb.debian.org/debian/ unstable main non-free contrib
|
||||
# deb http://de.archive.ubuntu.com/ubuntu/ bionic main universe
|
||||
#
|
||||
# apt-fast.conf:
|
||||
# MIRRORS=( 'http://deb.debian.org/debian','http://ftp.debian.org/debian,http://ftp2.de.debian.org/debian,http://ftp.de.debian.org/debian,ftp://ftp.uni-kl.de/debian'
|
||||
# 'http://archive.ubuntu.com/ubuntu,http://de.archive.ubuntu.com/ubuntu,http://ftp.halifax.rwth-aachen.de/ubuntu,http://ftp.uni-kl.de/pub/linux/ubuntu,http://mirror.informatik.uni-mannheim.de/pub/linux/distributions/ubuntu/' )
|
||||
#
|
||||
#
|
||||
# Single distribution:
|
||||
#
|
||||
# sources.list:
|
||||
# deb http://fr.archive.ubuntu.com/ubuntu/ bionic main
|
||||
# deb http://fr.archive.ubuntu.com/ubuntu/ artful main
|
||||
#
|
||||
# apt-fast.conf:
|
||||
# MIRRORS=( 'http://fr.archive.ubuntu.com/ubuntu,http://bouyguestelecom.ubuntu.lafibre.info/ubuntu,http://mirror.ovh.net/ubuntu,http://ubuntu-archive.mirrors.proxad.net/ubuntu' )
|
||||
#
|
||||
# Default: disabled
|
||||
#
|
||||
MIRRORS=( 'https://d.store.deepinos.org.cn/,https://zunyun01.store.deepinos.org.cn/,https://mirrors.sdu.edu.cn/spark-store-repository/,http://cdn.dl.uniartisan.com:9000/deepinos/,https://d1.store.deepinos.org.cn/,https://d2.store.deepinos.org.cn/,https://d3.store.deepinos.org.cn/,https://d4.store.deepinos.org.cn/,https://d5.store.deepinos.org.cn/' )
|
||||
|
||||
|
||||
# Maximum number of connections
|
||||
# You can use this value in _DOWNLOADER command. Escape with ${}: ${_MAXNUM}
|
||||
#
|
||||
# Default: 5
|
||||
#
|
||||
_MAXNUM=16
|
||||
|
||||
|
||||
# Maximum number of connections per server
|
||||
# Default: 10
|
||||
#
|
||||
_MAXCONPERSRV=1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Split size i.e. size of each piece
|
||||
# Possible Values: 1M-1024M
|
||||
#
|
||||
_MINSPLITSZ=1M
|
||||
|
||||
|
||||
# Piece selection algorithm to use
|
||||
# Available values are: default, inorder, geom
|
||||
# default: selects piece so that it reduces the number of establishing connection, reasonable for most cases
|
||||
# inorder: selects pieces in sequential order starting from first piece
|
||||
# geom: selects piece which has minimum index like inorder, but it exponentially increasingly keeps space from previously selected pieces
|
||||
#
|
||||
_PIECEALGO=default
|
||||
|
||||
|
||||
|
||||
# Downloadmanager listfile
|
||||
# You can use this value in _DOWNLOADER command. Escape with ${}: ${DLLIST}
|
||||
#
|
||||
# Default: /tmp/apt-fast.list
|
||||
#
|
||||
DLLIST='/tmp/apt-fast.list'
|
||||
|
||||
|
||||
# Download command to use. Temporary download list is designed for aria2. But
|
||||
# you can choose another download command or download manager. It has to
|
||||
# support following input file syntax (\t is tab character):
|
||||
#
|
||||
# # Comment
|
||||
# MIRROR1\tMIRROR2\tMIRROR3...
|
||||
# out=FILENAME1
|
||||
# MIRROR1\tMIRROR2\tMIRROR3...
|
||||
# out=FILENAME2
|
||||
# ...
|
||||
#
|
||||
# Examples:
|
||||
# aria2c with a proxy (set username, proxy, ip and password!)
|
||||
# _DOWNLOADER='aria2c --no-conf -c -j ${_MAXNUM} -x ${_MAXCONPERSRV} -s ${_SPLITCON} --min-split-size=${_MINSPLITSZ} --stream-piece-selector=${_PIECEALGO} --http-proxy=http://username:password@proxy_ip:proxy_port -i ${DLLIST}'
|
||||
#
|
||||
# Default: _DOWNLOADER='aria2c --no-conf -c -j ${_MAXNUM} -x ${_MAXCONPERSRV} -s ${_SPLITCON} --min-split-size=${_MINSPLITSZ} --stream-piece-selector=${_PIECEALGO} -i ${DLLIST} --connect-timeout=600 --timeout=600 -m0'
|
||||
#
|
||||
_DOWNLOADER='aria2c --no-conf -c -j ${_MAXNUM} -x ${_MAXCONPERSRV} --min-split-size=${_MINSPLITSZ} --stream-piece-selector=${_PIECEALGO} -i ${DLLIST} --connect-timeout=600 --timeout=600 -m0 --http-user ${AUTH_UOS_USER} --http-passwd ${AUTH_UOS_PASSWD}'
|
||||
|
||||
|
||||
# Download temp folder for Downloadmanager
|
||||
# example /tmp/apt-fast. Standard is /var/cache/apt-fast
|
||||
#
|
||||
# Default: /var/cache/apt/apt-fast
|
||||
#
|
||||
DLDIR='/var/cache/apt/apt-fast'
|
||||
|
||||
|
||||
# APT archives cache directory
|
||||
#
|
||||
# Default /var/cache/apt/archives
|
||||
# (APT configuration items Dir::Cache and Dir::Cache::archives)
|
||||
#
|
||||
APTCACHE='/var/cache/apt/archives'
|
||||
|
||||
|
||||
# apt-fast colors
|
||||
# Colors are disabled when not using a terminal.
|
||||
#
|
||||
# Default colors are:
|
||||
# cGreen='\e[0;32m'
|
||||
# cRed='\e[0;31m'
|
||||
# cBlue='\e[0;34m'
|
||||
# endColor='\e[0m'
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
#
|
||||
# apt-fast v1.9
|
||||
# Use this just like aptitude or apt-get for faster package downloading.
|
||||
#
|
||||
@@ -52,7 +52,7 @@ for argument in "$@"; do
|
||||
option="source"
|
||||
root=0
|
||||
;;
|
||||
changelog|search|policy|show)
|
||||
changelog)
|
||||
root=0
|
||||
;;
|
||||
esac
|
||||
@@ -114,11 +114,7 @@ fi
|
||||
# permissions.
|
||||
# We need lock for non-root commands too, because we only have one download
|
||||
# list file.
|
||||
if [ "$IS_ACE_ENV" != "" ];then
|
||||
LCK_FILE="/tmp/apt-fast-in-container.lock"
|
||||
else
|
||||
LCK_FILE="/tmp/apt-fast.lock"
|
||||
fi
|
||||
LCK_FILE="/tmp/apt-fast"
|
||||
LCK_FD=99
|
||||
|
||||
# Set default package manager, APT cache, temporary download dir,
|
||||
@@ -134,11 +130,7 @@ else
|
||||
fi
|
||||
# Currently not needed.
|
||||
eval "$(apt-config shell LISTDIR Dir::State::lists/d)"
|
||||
if [ "$IS_ACE_ENV" != "" ];then
|
||||
DLLIST="/tmp/apt-fast-in-container.list"
|
||||
else
|
||||
DLLIST="/tmp/apt-fast.list"
|
||||
fi
|
||||
_MAXNUM=5
|
||||
_MAXCONPERSRV=10
|
||||
_SPLITCON=8
|
||||
@@ -166,7 +158,7 @@ DOWNLOADBEFORE=
|
||||
VERBOSE_OUTPUT=
|
||||
|
||||
# Download command.
|
||||
_DOWNLOADER='aria2c --no-conf -c -j ${_MAXNUM} -x ${_MAXCONPERSRV} -s ${_SPLITCON} -i ${DLLIST} --min-split-size=${_MINSPLITSZ} --stream-piece-selector=${_PIECEALGO} --connect-timeout=60 --timeout=600 -m0'
|
||||
_DOWNLOADER='aria2c --no-conf -c -j ${_MAXNUM} -x ${_MAXCONPERSRV} -s ${_SPLITCON} -i ${DLLIST} --min-split-size=${_MINSPLITSZ} --stream-piece-selector=${_PIECEALGO} --connect-timeout=600 --timeout=600 -m0'
|
||||
|
||||
# Load config file.
|
||||
CONFFILE="/tmp/aptss-conf/apt-fast.conf"
|
||||
@@ -215,15 +207,17 @@ fi
|
||||
|
||||
msg_already_running()
|
||||
{
|
||||
msg "Other aptss is running. Waited $timer senconds..." "normal"
|
||||
msg "有其他的aptss正在运行。已经等待了$timer秒" "normal"
|
||||
msg "apt-fast already running!" "warning"
|
||||
msg "apt-fast 已经在运行了" "warning"
|
||||
msg "Verify that all apt-fast processes are finished then remove $LCK_FILE.lock and try again." "hint"
|
||||
msg "请确认所有的apt-fast进程已经结束,然后删除 $LCK_FILE.lock 后重试." "hint"
|
||||
}
|
||||
|
||||
# Check if a lock file exists.
|
||||
#if [ -f "$LCK_FILE.lock" ]; then
|
||||
# msg_already_running
|
||||
# exit 1
|
||||
#fi
|
||||
if [ -f "$LCK_FILE.lock" ]; then
|
||||
msg_already_running
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# create the lock file and lock it, die on failure
|
||||
@@ -231,17 +225,10 @@ _create_lock()
|
||||
{
|
||||
eval "exec $LCK_FD>\"$LCK_FILE.lock\""
|
||||
|
||||
# trap "cleanup_aptfast; exit_cleanup_state" EXIT
|
||||
# This will hide the exit code
|
||||
trap "cleanup_aptfast" EXIT
|
||||
trap "cleanup_aptfast; exit_cleanup_state" EXIT
|
||||
trap "cleanup_aptfast; exit 1" INT TERM
|
||||
timer=0
|
||||
until $(flock -xn $LCK_FD);do
|
||||
msg_already_running
|
||||
sleep 1
|
||||
let timer+=1
|
||||
done
|
||||
unset timer
|
||||
|
||||
flock -n $LCK_FD || { msg_already_running; exit 1; }
|
||||
}
|
||||
|
||||
# unlock and remove the lock file
|
||||
@@ -289,7 +276,6 @@ urldecode()
|
||||
}
|
||||
|
||||
# Check if mirrors are available. And if so add all mirrors to download list.
|
||||
############ SPARK ADJUST: Now we ignore the first config for business request
|
||||
get_mirrors(){
|
||||
# Check all mirror lists.
|
||||
for mirrorstr in "${MIRRORS[@]}"; do
|
||||
@@ -302,7 +288,7 @@ get_mirrors(){
|
||||
if [[ "$1" == "$mirror"* ]]; then
|
||||
filepath=${1#${mirror}}
|
||||
# Build list for aria download list.
|
||||
list="${mirrors[*]:1}"
|
||||
list="${mirrors[*]}"
|
||||
echo -e "${list// /${filepath}\\t}$filepath\n"
|
||||
return 0
|
||||
fi
|
||||
@@ -311,14 +297,12 @@ get_mirrors(){
|
||||
# No other mirrors found.
|
||||
echo "$1"
|
||||
}
|
||||
##########SPARK ADJUST: END
|
||||
|
||||
# Globals to save package name, version, size and overall size.
|
||||
DOWNLOAD_DISPLAY=
|
||||
DOWNLOAD_SIZE=0
|
||||
|
||||
# Get the package URLs.
|
||||
get_uris(){
|
||||
|
||||
if [ ! -d "$(dirname "$DLLIST")" ]
|
||||
then
|
||||
if ! mkdir -p -- "$(dirname "$DLLIST")"
|
||||
@@ -465,7 +449,6 @@ display_downloadfile(){
|
||||
}
|
||||
|
||||
# Create and insert a PID number to lockfile.
|
||||
|
||||
_create_lock
|
||||
|
||||
# Make sure aria2c (in general first parameter from _DOWNLOADER) is available.
|
||||
@@ -565,6 +548,7 @@ if [ "$option" == "install" ]; then
|
||||
REMOVE_WORKING_MESSAGE=y
|
||||
|
||||
get_uris "$@"
|
||||
|
||||
[ -t 1 ] && [ -n "$REMOVE_WORKING_MESSAGE" ] && tput cuu 1 && tput el && tput cuu 1
|
||||
# Test /tmp/apt-fast.list file exists and not just the apt-fast comment line.
|
||||
# Then download all files from the list.
|
||||
@@ -600,18 +584,9 @@ if [ "$option" == "install" ]; then
|
||||
|
||||
eval "${_DOWNLOADER}" # execute downloadhelper command
|
||||
if [ "$(find "$DLDIR" -printf . | wc -c)" -gt 1 ]; then
|
||||
|
||||
# Delete incomplete/corrupted downloaded files, if any: Not recursive, as we don't expect any dirs to exist within $DLDIR.
|
||||
|
||||
# When Aria2c downloads a file and detects it is corrupted, its filename won't be renamed back to its actual name,
|
||||
# preserving .aria2 file extension, which also indicates when a file hasn't been completely downloaded.
|
||||
for x in *.aria2; do
|
||||
rm -f "$x" "${x%.aria2}"
|
||||
done
|
||||
|
||||
# Move all packages to the apt install directory by force to ensure
|
||||
# already existing debs which may be incomplete are replaced
|
||||
find . -type f \( -name '*.deb' -o -name '*.ddeb' \) -execdir mv -ft "$APTCACHE" {} \+
|
||||
find . -type f -name "*.deb" -execdir mv -ft "$APTCACHE" {} \+
|
||||
fi
|
||||
cd - &>/dev/null || msg "Failed to change back directory" "warning"
|
||||
fi
|
||||
|
||||
66
tool/aptss
66
tool/aptss
@@ -1,7 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
SPARK_DOWNLOAD_SERVER_URL="https://d.spark-app.store/"
|
||||
SPARK_DOWNLOAD_SERVER_URL_NO_PROTOCOL="d.spark-app.store"
|
||||
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
|
||||
load_transhell
|
||||
|
||||
@@ -14,10 +12,6 @@ case `arch` in
|
||||
STORE_URL="aarch64-store"
|
||||
STORE_LIST_URL="-aarch64"
|
||||
;;
|
||||
loongarch64)
|
||||
STORE_URL="loong64-store"
|
||||
STORE_LIST_URL="-loong64"
|
||||
;;
|
||||
esac
|
||||
SS_APT_FAST="/opt/durapps/spark-store/bin/apt-fast/ss-apt-fast"
|
||||
|
||||
@@ -30,7 +24,7 @@ is_empty_dir(){
|
||||
|
||||
if [ "$(id -u)" != "0" ];then
|
||||
#############################无root权限时
|
||||
echo -e "\e[1;32m${TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER}\e[0m"
|
||||
echo "${TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER}"
|
||||
|
||||
else
|
||||
|
||||
@@ -44,24 +38,24 @@ fi
|
||||
if [ ! -e "/tmp/aptss-conf/apt-fast.conf" ];then
|
||||
###刷新apt-fast配置
|
||||
mkdir -p /tmp/aptss-conf/
|
||||
echo -e "\e[1;32m${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}\e[0m"
|
||||
echo "${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}"
|
||||
echo
|
||||
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "${SPARK_DOWNLOAD_SERVER_URL}/apt-fast.conf"
|
||||
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
|
||||
chmod -R 755 /tmp/aptss-conf
|
||||
|
||||
fi
|
||||
|
||||
|
||||
if [ ! -e "/var/lib/aptss/lists/${SPARK_DOWNLOAD_SERVER_URL_NO_PROTOCOL}_${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
|
||||
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/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ];then
|
||||
|
||||
mkdir -p /tmp/aptss-conf/
|
||||
echo -e "\e[1;32m${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}\e[0m"
|
||||
echo "${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}"
|
||||
echo
|
||||
curl --silent -o /tmp/aptss-conf/apt-fast.conf "${SPARK_DOWNLOAD_SERVER_URL}/apt-fast.conf"
|
||||
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
|
||||
chmod -R 755 /tmp/aptss-conf
|
||||
|
||||
curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "${SPARK_DOWNLOAD_SERVER_URL}/sparkstore${STORE_LIST_URL}.list"
|
||||
/usr/bin/apt update -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore${STORE_LIST_URL}.list"
|
||||
apt update -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
|
||||
#只更新星火源
|
||||
|
||||
@@ -72,50 +66,58 @@ fi
|
||||
|
||||
|
||||
|
||||
if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] || [ "$1" = "dist-upgrade" ]; then
|
||||
if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] ; then
|
||||
|
||||
|
||||
|
||||
###执行
|
||||
|
||||
${SS_APT_FAST} "$@" --allow-downgrades -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
ret="$?"
|
||||
if [ "$ret" -ne 0 ];then
|
||||
echo -e "\e[1;33m$TRANSHELL_CONTENT_PLEASE_USE_APTSS_INSTEAD_OF_APT\e[0m"
|
||||
exit $ret
|
||||
fi
|
||||
${SS_APT_FAST} "$@" --allow-downgrades -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
|
||||
|
||||
elif [ "$1" = "download" ];then
|
||||
|
||||
###执行
|
||||
|
||||
${SS_APT_FAST} "$@" --allow-downgrades -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
|
||||
|
||||
elif [ "$1" = "policy" ] || [ "$1" = "search" ];then
|
||||
|
||||
|
||||
|
||||
###执行
|
||||
apt "$@" -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
|
||||
elif [ "$1" = "ssupdate" ];then
|
||||
|
||||
mkdir -p /tmp/aptss-conf/
|
||||
echo -e "\e[1;32m${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}\e[0m"
|
||||
echo "${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}"
|
||||
echo
|
||||
curl --silent -o /tmp/aptss-conf/apt-fast.conf "${SPARK_DOWNLOAD_SERVER_URL}/apt-fast.conf"
|
||||
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
|
||||
chmod -R 755 /tmp/aptss-conf
|
||||
|
||||
curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "${SPARK_DOWNLOAD_SERVER_URL}/sparkstore${STORE_LIST_URL}.list"
|
||||
curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore${STORE_LIST_URL}.list"
|
||||
|
||||
|
||||
/usr/bin/apt update -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" -o Dir::Etc::sourcelist="/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list"
|
||||
apt update -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" -o Dir::Etc::sourcelist="/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list"
|
||||
|
||||
#只更新星火源
|
||||
|
||||
elif [ "$1" = "update" ];then
|
||||
curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore${STORE_LIST_URL}.list"
|
||||
|
||||
|
||||
echo -e "\e[1;32m${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}\e[0m"
|
||||
echo
|
||||
curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "${SPARK_DOWNLOAD_SERVER_URL}/sparkstore${STORE_LIST_URL}.list"
|
||||
mkdir -p /tmp/aptss-conf/
|
||||
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "${SPARK_DOWNLOAD_SERVER_URL}/apt-fast.conf"
|
||||
echo "${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}"
|
||||
echo
|
||||
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
|
||||
chmod -R 755 /tmp/aptss-conf
|
||||
### 额外一份拿来给aptss自动补全用
|
||||
|
||||
${SS_APT_FAST} "$@" -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
apt "$@" -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
|
||||
else
|
||||
${SS_APT_FAST} "$@" -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
apt "$@" -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
|
||||
fi
|
||||
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
#!/bin/bash
|
||||
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
|
||||
load_transhell
|
||||
# 检查是否传入了路径参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "${TRANSHELL_CONTENT_PLEASE_PROVIDE_FILE_PATH}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DESKTOP_FILE_PATH=$1
|
||||
|
||||
if [[ $DESKTOP_FILE_PATH == file://* ]]; then
|
||||
# 如果是,移除 'file://' 部分并输出结果
|
||||
DESKTOP_FILE_PATH="${DESKTOP_FILE_PATH#file://}"
|
||||
fi
|
||||
|
||||
# 获取文件内容中第一个 Exec= 后的命令
|
||||
exec_command=$(grep -m 1 -oP "(?<=Exec=).*" "$DESKTOP_FILE_PATH")
|
||||
|
||||
# 删除 exec_command 中最后的 % 及其后面的内容
|
||||
exec_command="${exec_command%\%*}"
|
||||
|
||||
# 打印提取的命令
|
||||
echo "$exec_command"
|
||||
|
||||
# 在默认终端执行命令
|
||||
eval "$exec_command"
|
||||
|
||||
echo --------------------------------------
|
||||
echo "${TRANSHELL_CONTENT_ABOVE_IS_TERMINAL_OUTPUT}"
|
||||
echo "${TRANSHELL_CONTENT_PRESS_ENTER_TO_FINISH}"
|
||||
read
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
TRANSHELL_CONTENT_PLEASE_PROVIDE_FILE_PATH="Please provide a file path as an argument"
|
||||
TRANSHELL_CONTENT_ABOVE_IS_TERMINAL_OUTPUT="The above is the output executed in the terminal. Please copy and paste it when providing feedback."
|
||||
TRANSHELL_CONTENT_PRESS_ENTER_TO_FINISH="Press Enter to finish"
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
TRANSHELL_CONTENT_PLEASE_PROVIDE_FILE_PATH="请传入文件路径作为参数"
|
||||
TRANSHELL_CONTENT_ABOVE_IS_TERMINAL_OUTPUT="以上是在终端中执行的输出,请在反馈问题的时候完整复制并贴上"
|
||||
TRANSHELL_CONTENT_PRESS_ENTER_TO_FINISH="按回车结束"
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
|
||||
echo "----------------Running Spark DStore Patch----------------"
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
enumAppInfoList() {
|
||||
appInfoList=()
|
||||
apps="/opt/apps"
|
||||
list=$(ls $apps 2>/dev/null)
|
||||
list=$(ls $apps)
|
||||
for appID in $list; do
|
||||
appInfoList+=("$appID")
|
||||
done
|
||||
@@ -26,17 +26,17 @@ linkDir() {
|
||||
targetDir=$(dirname "$target")
|
||||
find "$source" -type f | while read sourceFile; do
|
||||
targetFile="$targetDir/${sourceFile#$sourceDir/}"
|
||||
|
||||
if [ -L "$targetFile" ] && [ "$(readlink "$targetFile")" = "$sourceFile" ]; then
|
||||
continue
|
||||
else
|
||||
rm -f "$targetFile"
|
||||
fi
|
||||
|
||||
ensureTargetDir "$targetFile"
|
||||
sourceFile=$(realpath --relative-to="$(dirname $targetFile)" "$sourceFile" )
|
||||
if [ ! -e ${targetFile} ];then
|
||||
ln -sv "$sourceFile" "$targetFile"
|
||||
fi
|
||||
ln -s "$sourceFile" "$targetFile"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
linkApp() {
|
||||
appID=$1
|
||||
appEntriesDir="/opt/apps/$appID/entries"
|
||||
@@ -63,66 +63,62 @@ linkApp() {
|
||||
done
|
||||
}
|
||||
|
||||
function exec_uos_package_link(){
|
||||
|
||||
# execute linkApp function for each app and print output
|
||||
for app in $(enumAppInfoList); do
|
||||
linkApp "$app" &
|
||||
|
||||
if [ "$1" = "--debug" ]; then
|
||||
echo "Linking for $app"
|
||||
fi
|
||||
# remove broken links in /usr/share
|
||||
done
|
||||
wait
|
||||
}
|
||||
|
||||
function exec_v23_icon_link(){
|
||||
# Fix v23 broken icon
|
||||
if [ ! -d "/usr/share/icons/hicolor/scalable/apps" ];then
|
||||
mkdir -p /usr/share/icons/hicolor/scalable/apps
|
||||
if [ "$1" = "--debug" ]; then
|
||||
echo "Cleaning links and updating databases and caches..."
|
||||
fi
|
||||
|
||||
for icon_root_icon_path in $(ls /usr/share/icons/*.png /usr/share/icons/*.svg 2>/dev/null)
|
||||
do
|
||||
target_icon_path=/usr/share/icons/hicolor/scalable/apps/$(basename ${icon_root_icon_path})
|
||||
if [ ! -e ${target_icon_path} ];then
|
||||
ln -sv $(realpath --relative-to=/usr/share/icons/hicolor/scalable/apps ${icon_root_icon_path}) /usr/share/icons/hicolor/scalable/apps
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function exec_link_clean(){
|
||||
# remove broken links in /usr/share
|
||||
|
||||
find /usr/share/applications -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/icons -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/mime/packages -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/glib-2.0 -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/dbus-1/services -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/fcitx -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/help -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/locale -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`/fcitx -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/lib/mozilla/plugins -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/polkit-1/actions -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /usr/share/fonts -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
find /etc/fonts/conf.d -xtype l -exec echo '{} is invalid now and going to be cleaned' \; -exec unlink {} \; 2>/dev/null &
|
||||
|
||||
|
||||
}
|
||||
function exec_uos_package_update(){
|
||||
if [ "$1" = "--debug" ]; then
|
||||
find /usr/share/applications -xtype l -delete &
|
||||
find /usr/share/icons -xtype l -delete &
|
||||
find /usr/share/mime/packages -xtype l -delete &
|
||||
find /usr/share/glib-2.0 -xtype l -delete &
|
||||
find /usr/share/dbus-1/services -xtype l -delete &
|
||||
find /usr/share/fcitx -xtype l -delete &
|
||||
find /usr/share/help -xtype l -delete &
|
||||
find /usr/share/locale -xtype l -delete &
|
||||
find /usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`/fcitx -xtype l -delete &
|
||||
find /usr/lib/mozilla/plugins -xtype l -delete &
|
||||
find /usr/share/polkit-1/actions -xtype l -delete &
|
||||
find /usr/share/fonts -xtype l -delete &
|
||||
find /etc/fonts/conf.d -xtype l -delete &
|
||||
update-icon-caches /usr/share/icons/* &
|
||||
update-desktop-database -q &
|
||||
update-mime-database -V /usr/share/mime &
|
||||
glib-compile-schemas /usr/share/glib-2.0/schemas/ &
|
||||
wait
|
||||
else
|
||||
find /usr/share/applications -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/icons -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/mime/packages -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/glib-2.0 -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/dbus-1/services -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/fcitx -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/help -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/locale -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`/fcitx -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/lib/mozilla/plugins -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/polkit-1/actions -xtype l -delete > /dev/null 2>&1 &
|
||||
find /usr/share/fonts -xtype l -delete > /dev/null 2>&1 &
|
||||
find /etc/fonts/conf.d -xtype l -delete > /dev/null 2>&1 &
|
||||
update-icon-caches /usr/share/icons/* > /dev/null 2>&1 &
|
||||
update-desktop-database -q > /dev/null 2>&1 &
|
||||
update-mime-database -V /usr/share/mime > /dev/null 2>&1 &
|
||||
glib-compile-schemas /usr/share/glib-2.0/schemas/ > /dev/null 2>&1 &
|
||||
|
||||
}
|
||||
|
||||
#########################################################################################
|
||||
echo "----------------Running Spark DStore Patch----------------"
|
||||
if [ ! -e /usr/bin/deepin-app-store-tool ];then
|
||||
# execute linkApp function for each app and print output
|
||||
exec_uos_package_link
|
||||
|
||||
fi
|
||||
#exec_v23_icon_link
|
||||
exec_link_clean
|
||||
wait
|
||||
exec_uos_package_update
|
||||
|
||||
|
||||
|
||||
echo "----------------Finished----------------"
|
||||
|
||||
@@ -1,17 +1,82 @@
|
||||
#!/bin/bash
|
||||
|
||||
HERE=$(dirname $0)
|
||||
#用法:sender.sh 下载链接 HD70642
|
||||
|
||||
case `uname -m` in
|
||||
case `arch` in
|
||||
x86_64)
|
||||
sender_appendix="amd64"
|
||||
STORE_URL="store"
|
||||
;;
|
||||
aarch64)
|
||||
sender_appendix="arm64"
|
||||
STORE_URL="aarch64-store"
|
||||
;;
|
||||
loongarch64)
|
||||
sender_appendix="loong64"
|
||||
;;
|
||||
esac
|
||||
|
||||
${HERE}/sender-d-${sender_appendix} $@
|
||||
if [ -z $1 ] || [ "$2" != "HD70642" ];then
|
||||
echo "Segment fault"
|
||||
# 假的段错误
|
||||
exit -1
|
||||
fi
|
||||
|
||||
mkdir -p /tmp/spark-store/mail-send-content
|
||||
cd /tmp/spark-store/mail-send-content
|
||||
|
||||
APP_LOCATION=${1#*/$STORE_URL/}
|
||||
APP_LOCATION=${APP_LOCATION%/*}
|
||||
echo $APP_LOCATION
|
||||
|
||||
APP_METALINK_FILE_NAME=${1##*/}
|
||||
#echo $APP_METALINK_FILE_NAME
|
||||
|
||||
|
||||
PIDS=$(pidof "spark-store")
|
||||
# 检查 metalink以防止未下载时刷分
|
||||
|
||||
if [ ! -f /tmp/spark-store/$APP_METALINK_FILE_NAME ] || [ "$PIDS" = "" ];then
|
||||
sleep 1
|
||||
echo "发送!成功"
|
||||
exit
|
||||
# 其实是发送不成功的意思lolol
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
MAIL_INFO_0=sparkstorefeedback@163.com:YWYGLQNOPLWNNJJY
|
||||
MAIL_INFO_1=ss_feedback@163.com:CCPFYUYHTLBVFTSM
|
||||
MAIL_INFO_2=spark_store_good@163.com:FIGNKXCLBGCYUDUF
|
||||
MAIL_INFO_3=wudibaolongzsoy@163.com:IOGHUIEDXXMGWJTI
|
||||
MAIL_INFO_4=suasnjaksf@163.com:KWUBIOYTGYIPVALZ
|
||||
#
|
||||
MAIL_INFO_5=asdasdasdasd0827@163.com:TSSLXXCEAAATCZJJ
|
||||
MAIL_INFO_6=hjkhuiasndkj@163.com:XJZDDLHZYACGJVWM
|
||||
MAIL_INFO_7=xncniasudhqi@163.com:OZPUJHBMGLDWEGEI
|
||||
MAIL_INFO_8=ajhdiahiudqahwui@163.com:HFAJCJOCWIDZHGIG
|
||||
MAIL_INFO_9=xcvuyefbewr@163.com:LVXGTJVORDEDYWQI
|
||||
|
||||
|
||||
MAIL_INFO_RANDOM=MAIL_INFO_$(($RANDOM % 10))
|
||||
|
||||
MAIL_INFO_RANDOM=`echo ${!MAIL_INFO_RANDOM}`
|
||||
# 把对应变量赋值过来
|
||||
|
||||
MAIL_ADDRESS_FROM_INFO_RANDOM=`echo $MAIL_INFO_RANDOM | sed "{s/:.*//}" `
|
||||
|
||||
|
||||
|
||||
cat << EOF > ./data.txt
|
||||
------------------------------------
|
||||
From:$MAIL_ADDRESS_FROM_INFO_RANDOM
|
||||
To:$MAIL_ADDRESS_FROM_INFO_RANDOM
|
||||
Subject: Download count command
|
||||
check=i love amber forever
|
||||
command:download_count
|
||||
APP_LOCATION=$STORE_URL/$APP_LOCATION
|
||||
------------------------------------
|
||||
|
||||
EOF
|
||||
|
||||
curl -s --url "smtp://smtp.163.com" --mail-from "$MAIL_ADDRESS_FROM_INFO_RANDOM" --mail-rcpt "$MAIL_ADDRESS_FROM_INFO_RANDOM" --upload-file ./data.txt --user "$MAIL_INFO_RANDOM"
|
||||
|
||||
rm /tmp/spark-store/mail-send-content/data.txt
|
||||
|
||||
echo "Finished"
|
||||
|
||||
166
tool/ssaudit
166
tool/ssaudit
@@ -1,149 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
|
||||
load_transhell_debug
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
case $(arch) in
|
||||
x86_64)
|
||||
STORE_URL="store"
|
||||
;;
|
||||
aarch64)
|
||||
STORE_URL="aarch64-store"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Spark Store Install script. 星火商店审核脚本"
|
||||
|
||||
function pkexec_as_current_user() {
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
local uid=$(id -u "$user")
|
||||
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus pkexec "$@"
|
||||
}
|
||||
function create_desktop_file() {
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
if [ -e $(sudo -u "$user" xdg-user-dir)/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
|
||||
echo "It is configured that do not create desktop file. Give up"
|
||||
else
|
||||
exec_create_desktop_file
|
||||
fi
|
||||
}
|
||||
function exec_create_desktop_file() {
|
||||
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
|
||||
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
|
||||
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)/"
|
||||
fi
|
||||
done
|
||||
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
|
||||
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)/"
|
||||
fi
|
||||
done
|
||||
echo "Spark Store Audit script.星火商店审核脚本"
|
||||
|
||||
|
||||
}
|
||||
|
||||
function zenity() {
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
local uid=$(id -u "$user")
|
||||
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus zenity "$@"
|
||||
}
|
||||
|
||||
function hash_check() {
|
||||
if [ ! -e "/var/lib/aptss/lists/cdn.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
|
||||
echo "接收星火仓库软件信息中..."
|
||||
aptss ssupdate
|
||||
fi
|
||||
|
||||
if [ -e "/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages" ]; then
|
||||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/cdn.d.store.deepinos.org.cn_${STORE_URL}_Packages"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是星火域名单目录仓库配置"
|
||||
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"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是星火域名单目录仓库配置"
|
||||
else
|
||||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是SDU镜像仓库配置"
|
||||
fi
|
||||
|
||||
echo "正在运行包验证..."
|
||||
echo "Running Spark Package Verify..."
|
||||
|
||||
DEB_SHA512SUM=$(sha512sum "$1" | cut -d ' ' -f 1)
|
||||
IS_SHA512SUM_CHECKED=$(cat "$PACKAGES_DATA_PATH" | grep "$DEB_SHA512SUM")
|
||||
}
|
||||
|
||||
|
||||
|
||||
####################################
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "没有接收到参数,退出"
|
||||
echo "用法:$0 deb路径"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit
|
||||
#################检测文件是否存在
|
||||
if [ $# -eq 0 ];then
|
||||
echo "没有接收到参数,退出"
|
||||
echo "用法:$0 deb路径"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! -f "$1" ]; then
|
||||
echo "${TRANSHELL_CONTENT_FILE_NOT_EXIST}"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
if [ ! -f "$1" ]
|
||||
then
|
||||
echo "文件不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
echo "${TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT}"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
if [ "$(id -u)" != "0" ];then
|
||||
#############################无root权限时
|
||||
echo "请使用root启动ssaudit"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DEBPATH=$(realpath "$1")
|
||||
###
|
||||
|
||||
|
||||
DEBPATH=`realpath $1`
|
||||
echo ------------------------------------------------------------
|
||||
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
|
||||
try_run_ret="$?"
|
||||
|
||||
package_name=$(dpkg-deb -f "$DEBPATH" Package)
|
||||
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_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
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
echo -e "${try_run_output}"
|
||||
exit "$try_run_ret"
|
||||
fi
|
||||
|
||||
if [ "$try_run_ret" -ne 0 ]; then
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
echo -e "${try_run_output}"
|
||||
exit "$try_run_ret"
|
||||
fi
|
||||
|
||||
dpkg -i "$DEBPATH" || aptss install "$DEBPATH" -yf
|
||||
dpkg -i "$DEBPATH" || aptss install -yf
|
||||
install_ret="$?"
|
||||
|
||||
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ]; then
|
||||
if dpkg -s "$package_name" >/dev/null 2>&1; then
|
||||
echo "软件包已安装:$package_name"
|
||||
create_desktop_file
|
||||
rm "$DEBPATH"
|
||||
echo "${TRANSHELL_CONTENT_DEB_IS_DELETED}"
|
||||
else
|
||||
echo "软件包未安装:$package_name"
|
||||
echo "安装异常!抛出错误"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
fi
|
||||
else
|
||||
echo "${TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB}"
|
||||
if dpkg -s "$package_name" >/dev/null 2>&1; then
|
||||
echo "软件包已安装:$package_name"
|
||||
create_desktop_file
|
||||
else
|
||||
echo "软件包未安装:$package_name"
|
||||
echo "安装异常!抛出错误"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$install_ret" -ne 0 ]
|
||||
then
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit "$install_ret"
|
||||
fi
|
||||
|
||||
263
tool/ssinstall
263
tool/ssinstall
@@ -2,194 +2,145 @@
|
||||
|
||||
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
|
||||
load_transhell_debug
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
trap 'unlock_file $DEBPATH' EXIT
|
||||
case $(arch) in
|
||||
case `arch` in
|
||||
x86_64)
|
||||
STORE_URL="store"
|
||||
;;
|
||||
aarch64)
|
||||
STORE_URL="aarch64-store"
|
||||
;;
|
||||
loongarch64)
|
||||
STORE_URL="loong64-store"
|
||||
STORE_LIST_URL="-loong64"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Spark Store Install script. 星火商店安装脚本"
|
||||
|
||||
|
||||
|
||||
echo "Spark Store Install script.星火商店安装脚本"
|
||||
|
||||
function pkexec_as_current_user() {
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
local uid=$(id -u "$user")
|
||||
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus pkexec "$@"
|
||||
|
||||
#Detect the user using such display
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
#Detect the id of the user
|
||||
local uid=$(id -u $user)
|
||||
|
||||
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus pkexec "$@"
|
||||
}
|
||||
function create_desktop_file() {
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
if [ -e $(sudo -u "$user" xdg-user-dir)/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
|
||||
echo "It is configured that do not create desktop file. Give up"
|
||||
else
|
||||
exec_create_desktop_file
|
||||
fi
|
||||
|
||||
function zenity()
|
||||
{
|
||||
|
||||
|
||||
#Detect the user using such display
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
|
||||
#Detect the id of the user
|
||||
local uid=$(id -u $user)
|
||||
|
||||
|
||||
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus zenity "$@"
|
||||
}
|
||||
function exec_create_desktop_file() {
|
||||
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
|
||||
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
|
||||
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)/"
|
||||
fi
|
||||
done
|
||||
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
|
||||
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)/"
|
||||
fi
|
||||
done
|
||||
|
||||
function hash_check()
|
||||
{
|
||||
if [ ! -e "/var/lib/aptss/lists/zunyun01.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
|
||||
echo "接收星火仓库软件信息中..."
|
||||
aptss ssupdate
|
||||
fi
|
||||
|
||||
### 选择包信息位置
|
||||
|
||||
if [ -e "/var/lib/aptss/lists/zunyun01.store.deepinos.org.cn_${STORE_URL}_Packages" ];then
|
||||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/zunyun01.store.deepinos.org.cn_${STORE_URL}_Packages"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是星火域名单目录仓库配置"
|
||||
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"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是星火域名单目录仓库配置"
|
||||
else
|
||||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是SDU镜像仓库配置"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
echo "正在计算hash并与星火仓库匹配..."
|
||||
|
||||
DEB_MD5SUM=`md5sum "$1" | cut -c -32`
|
||||
|
||||
IS_MD5SUM_CHECKD=`cat $PACKAGES_DATA_PATH | grep $DEB_MD5SUM`
|
||||
|
||||
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
|
||||
function zenity() {
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
local uid=$(id -u "$user")
|
||||
sudo -u "$user" DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$uid"/bus zenity "$@"
|
||||
}
|
||||
#################检测文件是否存在
|
||||
if [ $# -eq 0 ];then
|
||||
echo "没有接收到参数,退出"
|
||||
echo "用法:$0 deb路径"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit
|
||||
fi
|
||||
|
||||
function hash_check() {
|
||||
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/mirrors.sdu.edu.cn_spark-store_${STORE_URL}_Packages" ]; then
|
||||
echo "接收星火仓库软件信息中..."
|
||||
aptss ssupdate
|
||||
fi
|
||||
|
||||
if [ -e "/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages" ]; then
|
||||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是星火域名仓库配置"
|
||||
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"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是d域名单目录仓库配置"
|
||||
else
|
||||
PACKAGES_DATA_PATH="/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
|
||||
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH,是SDU镜像仓库配置"
|
||||
fi
|
||||
|
||||
echo "正在运行包验证..."
|
||||
echo "Running Spark Package Verify..."
|
||||
|
||||
DEB_SHA512SUM=$(sha512sum "$1" | cut -d ' ' -f 1)
|
||||
unset IS_SHA512SUM_CHECKED
|
||||
IS_SHA512SUM_CHECKED=$(cat "$PACKAGES_DATA_PATH" | grep "$DEB_SHA512SUM")
|
||||
}
|
||||
|
||||
function lock_file(){
|
||||
chattr +i "$1"
|
||||
}
|
||||
|
||||
function unlock_file(){
|
||||
chattr -i "$1"
|
||||
}
|
||||
|
||||
####################################
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "没有接收到参数,退出"
|
||||
echo "用法:$0 deb路径"
|
||||
if [ ! -f "$1" ]
|
||||
then
|
||||
echo "${TRANSHELL_CONTENT_FILE_NOT_EXIST}"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
echo "${TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT}"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
if [ "$(id -u)" != "0" ];then
|
||||
#############################无root权限时
|
||||
echo "${TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT}"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$1" ]; then
|
||||
echo "${TRANSHELL_CONTENT_FILE_NOT_EXIST},Trying to redownload"
|
||||
FILEPATH=$(dirname "$1")
|
||||
FILENAME=$(basename "$1")
|
||||
PACKAGE_NAME=$(echo "$FILENAME" | sed -r 's/^([^_]+)_.*$/\1/')
|
||||
VERSION=$(echo "$FILENAME" | sed -r 's/^[^_]+_([^_]+)_.*$/\1/')
|
||||
pushd ${FILEPATH}
|
||||
aptss download ${PACKAGE_NAME}=${VERSION}
|
||||
popd
|
||||
if [ ! -f "$1" ]; then
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
else
|
||||
DEBPATH=$(realpath "$1")
|
||||
fi
|
||||
else
|
||||
DEBPATH=$(realpath "$1")
|
||||
fi
|
||||
###
|
||||
|
||||
lock_file "$DEBPATH"
|
||||
|
||||
DEBPATH=`realpath $1`
|
||||
|
||||
hash_check "$DEBPATH"
|
||||
|
||||
if [ -z "$IS_SHA512SUM_CHECKED" ]; then
|
||||
echo "尝试更新仓库信息重新校验"
|
||||
aptss ssupdate
|
||||
hash_check "$DEBPATH"
|
||||
if [ -z "$IS_SHA512SUM_CHECKED" ]; then
|
||||
echo -e "$TRANSHELL_CONTENT_HASH_CHECK_FAILED"
|
||||
zenity --info --icon-name=spark-store --height 270 --width 500 --text "$TRANSHELL_CONTENT_HASH_CHECK_FAILED"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$IS_MD5SUM_CHECKD" ];then
|
||||
echo "尝试更新仓库信息重新校验"
|
||||
aptss ssupdate
|
||||
hash_check "$DEBPATH"
|
||||
fi
|
||||
|
||||
if [ ! -z "$IS_SHA512SUM_CHECKED" ]; then
|
||||
echo "校验成功,开始安装"
|
||||
echo "----------------------------------------------------------------------------------"
|
||||
package_name=$(dpkg-deb -f "$DEBPATH" Package)
|
||||
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_ret="$?"
|
||||
if [ ! -z "$IS_MD5SUM_CHECKD" ];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 -e "${try_run_output}"
|
||||
exit "$try_run_ret"
|
||||
fi
|
||||
echo "校验成功,开始安装"
|
||||
echo ----------------------------------------------------------------------------------
|
||||
|
||||
dpkg -i "$DEBPATH" || aptss install "$DEBPATH" -yf
|
||||
try_run_output=$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh test-install-app "$DEBPATH")
|
||||
try_run_ret="$?"
|
||||
|
||||
unlock_file "$DEBPATH"
|
||||
if [ "$try_run_ret" -ne 0 ]
|
||||
then
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
echo -e "${try_run_output}"
|
||||
exit "$try_run_ret"
|
||||
fi
|
||||
|
||||
|
||||
dpkg -i "$DEBPATH" || aptss install -yf
|
||||
|
||||
#### --delete
|
||||
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ];then
|
||||
rm "$DEBPATH"
|
||||
echo "${TRANSHELL_CONTENT_DEB_IS_DELETED}"
|
||||
else
|
||||
echo "${TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB}"
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
|
||||
zenity --info --icon-name=spark-store --height 270 --width 500 --text "${TRANSHELL_CONTENT_HASH_CHECK_FAILED}"
|
||||
|
||||
echo -e ${TRANSHELL_CONTENT_HASH_CHECK_FAILED}
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
|
||||
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ]; then
|
||||
if dpkg -s "$package_name" >/dev/null 2>&1; then
|
||||
echo "软件包已安装:$package_name"
|
||||
create_desktop_file
|
||||
rm "$DEBPATH"
|
||||
echo "${TRANSHELL_CONTENT_DEB_IS_DELETED}"
|
||||
else
|
||||
echo "软件包未安装:$package_name"
|
||||
echo "安装异常!抛出错误"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
fi
|
||||
else
|
||||
echo "${TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB}"
|
||||
if dpkg -s "$package_name" >/dev/null 2>&1; then
|
||||
echo "软件包已安装:$package_name"
|
||||
create_desktop_file
|
||||
else
|
||||
echo "软件包未安装:$package_name"
|
||||
echo "安装异常!抛出错误"
|
||||
echo "OMG-IT-GOES-WRONG"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/bin/bash
|
||||
dpkg -l | grep "^ii $1 " > /dev/null
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/bin/bash
|
||||
# We use sudo twice to avoid ACE bug here
|
||||
# https://gitee.com/amber-ce/amber-ce-bookworm/commit/43e1a1599ede474b37e41aa10c53fd8afc4d35a1
|
||||
|
||||
#!/bin/bash
|
||||
# We use sudo twice to avoid ACE bug here
|
||||
# https://gitee.com/amber-ce/amber-ce-bookworm/commit/43e1a1599ede474b37e41aa10c53fd8afc4d35a1
|
||||
|
||||
function zenity_prompt() {
|
||||
if [[ -e /usr/bin/garma ]]; then
|
||||
garma "$@"
|
||||
else
|
||||
$(command -v zenity) "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查sudo是否需要密码
|
||||
if sudo -n true 2>/dev/null; then
|
||||
echo "sudo 无需密码,继续执行"
|
||||
else
|
||||
# 循环输入密码直到成功或用户取消
|
||||
while true; do
|
||||
# 使用zenity弹出密码输入框
|
||||
PASSWORD=$(zenity_prompt --password --title="需要sudo权限")
|
||||
|
||||
# 检查用户是否取消输入
|
||||
if [ -z "$PASSWORD" ]; then
|
||||
zenity_prompt --error --text="操作已取消"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 尝试使用输入的密码执行sudo命令
|
||||
echo "$PASSWORD" | sudo -S -v 2>/dev/null
|
||||
|
||||
# 检查sudo是否成功
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "密码正确,继续执行"
|
||||
break
|
||||
else
|
||||
zenity_prompt --error --text="密码错误,请重新输入"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# 使用sudo命令执行目标程序
|
||||
echo "$PASSWORD" | sudo sudo -S "$@"
|
||||
@@ -1,141 +0,0 @@
|
||||
#!/bin/bash
|
||||
# ===== Log =====
|
||||
# log.info xxx
|
||||
# log.warn xxx
|
||||
# log.info xxx
|
||||
# log.debug xxx
|
||||
# 带颜色的echo
|
||||
function log.color_output() {
|
||||
local color=$1
|
||||
shift 1
|
||||
|
||||
echo >&2 -e "\033[${color}m$@\033[0m"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Log is named without prefix "utils." for convenience
|
||||
# Usage: log.log <level> ...content
|
||||
function log.log() {
|
||||
if [[ $# < 2 ]]; then
|
||||
return -1
|
||||
fi
|
||||
|
||||
local level=$1
|
||||
shift 1
|
||||
|
||||
case $level in
|
||||
error) log.color_output "0;31" "[ERROR] $@" ;;
|
||||
warn) log.color_output "1;33" "[WARN] $@" ;;
|
||||
info) log.color_output "1;37" "[INFO] $@" ;;
|
||||
debug) log.color_output "1;30" "[DEBUG] $@" ;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
function log.error() { log.log "error" "$@"; }
|
||||
function log.warn() { log.log "warn" $@; }
|
||||
function log.info() { log.log "info" $@; }
|
||||
function log.debug() { log.log "debug" $@; }
|
||||
|
||||
|
||||
function scan_desktop_file_log(){
|
||||
unset desktop_file_path
|
||||
for desktop_file_path in $(dpkg -L "$1" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do
|
||||
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
|
||||
log.info "$desktop_file_path is found."
|
||||
fi
|
||||
done
|
||||
for desktop_file_path in $(dpkg -L "$1" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do
|
||||
if [ "$(cat $desktop_file_path | grep NoDisplay=true)" = "" ];then
|
||||
log.info "$desktop_file_path is found."
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
}
|
||||
|
||||
function scan_desktop_file(){
|
||||
unset desktop_file_path
|
||||
local result=""
|
||||
for desktop_file_path in $(dpkg -L "$1" | grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do
|
||||
if [ "$(grep NoDisplay=true $desktop_file_path)" = "" ]; then
|
||||
result+="$desktop_file_path,"
|
||||
fi
|
||||
done
|
||||
for desktop_file_path in $(dpkg -L "$1" | grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do
|
||||
if [ "$(grep NoDisplay=true $desktop_file_path)" = "" ]; then
|
||||
result+="$desktop_file_path,"
|
||||
fi
|
||||
done
|
||||
# 去掉最后一个逗号
|
||||
if [ -n "$result" ]; then
|
||||
result=${result%,}
|
||||
fi
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
function launch_app(){
|
||||
|
||||
# 检查是否传入了路径参数
|
||||
if [ -z "$1" ]; then
|
||||
log.error "请传入文件路径作为参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DESKTOP_FILE_PATH=$1
|
||||
|
||||
if [[ $DESKTOP_FILE_PATH == file://* ]]; then
|
||||
# 如果是,移除 'file://' 部分并输出结果
|
||||
DESKTOP_FILE_PATH="${DESKTOP_FILE_PATH#file://}"
|
||||
fi
|
||||
|
||||
# 获取文件内容中第一个 Exec= 后的命令
|
||||
exec_command=$(grep -m 1 -oP "(?<=Exec=).*" "$DESKTOP_FILE_PATH")
|
||||
|
||||
# 删除 exec_command 中最后的 % 及其后面的内容
|
||||
exec_command="${exec_command%\%*}"
|
||||
|
||||
# 打印提取的命令
|
||||
log.info "Command is $exec_command"
|
||||
|
||||
# 在默认终端执行命令
|
||||
eval "$exec_command"
|
||||
}
|
||||
|
||||
if [ "$#" -lt 2 ];then
|
||||
log.info "Usage: $0 check/launch/list/start packagename/desktop-file"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
|
||||
if [ "$1" = "check" ];then
|
||||
|
||||
scan_desktop_file_log "$2"
|
||||
if [ "$desktop_file_path" = "" ];then
|
||||
log.error "No desktop file found. exit -1"
|
||||
exit -1
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
|
||||
elif [ "$1" = "list" ];then
|
||||
scan_desktop_file "$2"
|
||||
if [ "$desktop_file_path" = "" ];then
|
||||
exit -1
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
elif [ "$1" = "launch" ];then
|
||||
scan_desktop_file_log "$2"
|
||||
if [ "$desktop_file_path" = "" ];then
|
||||
log.error "No desktop file found. exit -1"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
|
||||
launch_app "${desktop_file_path}"
|
||||
|
||||
elif [ "$1" = "start" ];then
|
||||
launch_app "${desktop_file_path}"
|
||||
fi
|
||||
@@ -1,17 +1,14 @@
|
||||
#!/bin/bash
|
||||
export LANGUAGE=en_US
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
case $1 in
|
||||
ssupdate)
|
||||
if [ "$(id -u)" != "0" ] ; then
|
||||
pkexec "$0" "$@"
|
||||
exit
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
ssupdate)
|
||||
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: "`
|
||||
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)
|
||||
@@ -31,21 +28,11 @@ fi
|
||||
;;
|
||||
|
||||
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
|
||||
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."`
|
||||
echo "$IS_UPGRADE_ERROR" > /tmp/spark-store-app-upgrade-status.txt
|
||||
;;
|
||||
test-install-app)
|
||||
if [ "$(id -u)" != "0" ] ; then
|
||||
pkexec "$0" "$@"
|
||||
exit
|
||||
fi
|
||||
|
||||
try_run_output=$(aptss --dry-run install $2)
|
||||
try_run_ret="$?"
|
||||
@@ -76,7 +63,6 @@ fi
|
||||
;;
|
||||
|
||||
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
|
||||
|
||||
@@ -1,73 +1,26 @@
|
||||
#!/bin/bash
|
||||
if [ "$(id -u)" != "0" ] ; then
|
||||
if [ "$IS_ACE_ENV" = "1" ];then
|
||||
/opt/durapps/spark-store/bin/store-helper/pass-auth.sh "$0" "$@"
|
||||
else
|
||||
pkexec "$0" "$@"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
trap "rm -f /tmp/spark-store/upgradeStatus.txt" EXIT
|
||||
|
||||
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
|
||||
load_transhell_debug
|
||||
|
||||
function get_name_from_desktop_file() {
|
||||
local app_name_in_desktop
|
||||
local name_orig
|
||||
local name_i18n
|
||||
local package_name
|
||||
package_name=$1
|
||||
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
|
||||
continue
|
||||
else
|
||||
name_orig=$(grep -m 1 '^Name=' "$desktop_file_path" | cut -d '=' -f 2)
|
||||
name_i18n=$(grep -m 1 "^Name\[${LANGUAGE}\]\=" "$desktop_file_path" | cut -d '=' -f 2)
|
||||
if [ -z "$name_i18n" ] ;then
|
||||
app_name_in_desktop=$name_orig
|
||||
else
|
||||
app_name_in_desktop=$name_i18n
|
||||
fi
|
||||
|
||||
fi
|
||||
done
|
||||
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
|
||||
continue
|
||||
else
|
||||
name_orig=$(grep -m 1 '^Name=' "$desktop_file_path" | cut -d '=' -f 2)
|
||||
name_i18n=$(grep -m 1 "^Name\[${LANGUAGE}\]\=" "$desktop_file_path" | cut -d '=' -f 2)
|
||||
if [ -z "$name_i18n" ] ;then
|
||||
app_name_in_desktop=$name_orig
|
||||
else
|
||||
app_name_in_desktop=$name_i18n
|
||||
fi
|
||||
|
||||
fi
|
||||
done
|
||||
if [ -z "$app_name_in_desktop" ] ;then
|
||||
app_name_in_desktop=${package_name}
|
||||
fi
|
||||
echo ${app_name_in_desktop}
|
||||
|
||||
}
|
||||
touch /tmp/spark-store/upgradeStatus.txt
|
||||
|
||||
# 执行 apt update
|
||||
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
|
||||
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
|
||||
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
|
||||
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 --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
|
||||
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
|
||||
pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh clean-log
|
||||
rm -f /tmp/spark-store/upgradeStatus.txt
|
||||
exit
|
||||
fi
|
||||
|
||||
# 获取可更新应用列表
|
||||
PKG_LIST="$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)"
|
||||
PKG_LIST="$(pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)"
|
||||
## 如果没更新,就弹出不需要更新
|
||||
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
|
||||
@@ -77,7 +30,7 @@ else
|
||||
IFS_OLD="$IFS"
|
||||
IFS=$'\n'
|
||||
|
||||
PKG_UPGRADE_LIST=$(for line in $PKG_LIST ; do
|
||||
PKG_UPGRADE_LIST=`for line in $PKG_LIST ; do
|
||||
PKG_NAME=$(echo $line | awk -F ' ' '{print $1}')
|
||||
PKG_NEW_VER=$(echo $line | awk -F ' ' '{print $2}')
|
||||
PKG_CUR_VER=$(echo $line | awk -F ' ' '{print $3}')
|
||||
@@ -86,23 +39,20 @@ else
|
||||
if [ $? -eq 0 ] ; then
|
||||
continue
|
||||
fi
|
||||
APP_NAME=$(get_name_from_desktop_file $PKG_NAME)
|
||||
#### 检测是否是 hold 状态
|
||||
PKG_STA=$(dpkg-query -W -f='${db:Status-Want}' $PKG_NAME)
|
||||
if [ "$PKG_STA" != "hold" ] ; then
|
||||
echo "true"
|
||||
echo "$APP_NAME"
|
||||
echo "$PKG_NAME"
|
||||
echo "$PKG_NEW_VER"
|
||||
echo "$PKG_CUR_VER"
|
||||
echo "$PKG_NAME"
|
||||
else
|
||||
echo "false"
|
||||
echo "$APP_NAME${TRANSHELL_CONTENT_CAN_NOT_UPGRADE_FOR_BEING_HOLD}"
|
||||
echo "$PKG_NAME${TRANSHELL_CONTENT_CAN_NOT_UPGRADE_FOR_BEING_HOLD}"
|
||||
echo "$PKG_NEW_VER"
|
||||
echo "$PKG_CUR_VER"
|
||||
echo "$PKG_NAME"
|
||||
fi
|
||||
done)
|
||||
done`
|
||||
|
||||
### 还原分隔符
|
||||
IFS="$IFS_OLD"
|
||||
@@ -111,14 +61,13 @@ done)
|
||||
if [ -z "$PKG_UPGRADE_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
|
||||
else
|
||||
PKG_UPGRADE_LIST=$(echo "$PKG_UPGRADE_LIST" | zenity --list --text="${TRANSHELL_CONTENT_CHOOSE_APP_TO_UPGRADE}" --column="${TRANSHELL_CONTENT_CHOOSE}" --column="${TRANSHELL_CONTENT_APP_NAME}" --column="${TRANSHELL_CONTENT_NEW_VERSION}" --column="${TRANSHELL_CONTENT_UPGRADE_FROM}" --column="${TRANSHELL_CONTENT_PKG_NAME}" --separator=" " --checklist --multiple --print-column=5 --height 350 --width 650 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg)
|
||||
PKG_UPGRADE_LIST=$(echo "$PKG_UPGRADE_LIST" | zenity --list --text="${TRANSHELL_CONTENT_CHOOSE_APP_TO_UPGRADE}" --column="${TRANSHELL_CONTENT_CHOOSE}" --column="${TRANSHELL_CONTENT_PKG_NAME}" --column="${TRANSHELL_CONTENT_NEW_VERSION}" --column="${TRANSHELL_CONTENT_UPGRADE_FROM}" --separator=" " --checklist --multiple --print-column=2 --height 350 --width 550 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg)
|
||||
## 如果没有选择,则直接退出
|
||||
if [ -z "$PKG_UPGRADE_LIST" ] ; then
|
||||
zenity --info --text "${TRANSHELL_CONTENT_NO_APP_IS_CHOSEN}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||
else
|
||||
### 更新用户选择的应用
|
||||
for PKG_UPGRADE in $PKG_UPGRADE_LIST;do
|
||||
APP_UPGRADE="$(get_name_from_desktop_file $PKG_UPGRADE)"
|
||||
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
|
||||
done
|
||||
|
||||
@@ -8,50 +8,36 @@ endloop=0
|
||||
#####################检测是否启动过了更新检测工具
|
||||
while [ $endloop -eq 0 ] ;do
|
||||
|
||||
if [ ! -e $HOME/.config/spark-union/spark-store/ssshell-config-do-not-show-upgrade-notify ];then
|
||||
if [ -e /etc/systemd/system/multi-user.target.wants/spark-update-notifier.service ];then
|
||||
text_update_open="${TRANSHELL_CONTENT_CLOSE}"
|
||||
#已经开启了就显示关闭
|
||||
else
|
||||
text_update_open="${TRANSHELL_CONTENT_OPEN}"
|
||||
fi
|
||||
|
||||
if [ ! -e $HOME/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
|
||||
CONTENT_SET_CREATE_DESKTOP="${TRANSHELL_CONTENT_CLOSE_CREATE_DESKTOP}"
|
||||
#已经开启了就显示关闭
|
||||
else
|
||||
CONTENT_SET_CREATE_DESKTOP="${TRANSHELL_CONTENT_OPEN_CREATE_DESKTOP}"
|
||||
fi
|
||||
|
||||
update_transhell
|
||||
|
||||
option=$(zenity --list --text="${TRANSHELL_CONTENT_WELCOME_AND_CHOOSE_ONE_TO_RUN}" --column 数字 --column=${TRANSHELL_CONTENT_OPTIONS} --print-column=2 --height 350 --width 760 0 "${TRANSHELL_CONTENT_OPEN_OR_CLOSE_UPGRADE_CHECK}" 1 "${CONTENT_SET_CREATE_DESKTOP}" 2 "${TRANSHELL_CONTENT_CHECK_FOR_UPDATE}" 3 "${TRANSHELL_CONTENT_EXIT}" --hide-column=1 --print-column=1)
|
||||
option=`zenity --list --text="${TRANSHELL_CONTENT_WELCOME_AND_CHOOSE_ONE_TO_RUN}" --column 数字 --column=${TRANSHELL_CONTENT_OPTIONS} --print-column=2 --height 350 --width 760 0 "${TRANSHELL_CONTENT_OPEN_OR_CLOSE_UPGRADE_CHECK}" 1 "${TRANSHELL_CONTENT_CHECK_FOR_UPDATE}" 2 "${TRANSHELL_CONTENT_EXIT}" --hide-column=1 --print-column=1`
|
||||
|
||||
case $option in
|
||||
0)
|
||||
if [ ! -e $HOME/.config/spark-union/spark-store/ssshell-config-do-not-show-upgrade-notify ];then
|
||||
mkdir -p $HOME/.config/spark-union/spark-store/
|
||||
touch $HOME/.config/spark-union/spark-store/ssshell-config-do-not-show-upgrade-notify
|
||||
if [ -e /etc/systemd/system/multi-user.target.wants/spark-update-notifier.service ];then
|
||||
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_CLOSING_UPGRADE_CHECK}" --timeout=2
|
||||
pkexec systemctl disable spark-update-notifier
|
||||
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_CLOSED}" --timeout=2
|
||||
else
|
||||
rm -f $HOME/.config/spark-union/spark-store/ssshell-config-do-not-show-upgrade-notify
|
||||
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_OPENING_UPGRADE_CHECK}" --timeout=2
|
||||
pkexec systemctl enable spark-update-notifier
|
||||
pkexec service spark-update-notifier start
|
||||
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_OPENED}" --timeout=2
|
||||
fi
|
||||
;;
|
||||
|
||||
1)
|
||||
if [ ! -e $HOME/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop ];then
|
||||
mkdir -p $HOME/.config/spark-union/spark-store/
|
||||
touch $HOME/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop
|
||||
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_CLOSED}" --timeout=2
|
||||
else
|
||||
rm -f $HOME/.config/spark-union/spark-store/ssshell-config-do-not-create-desktop
|
||||
zenity --info --icon-name=spark-store --height 150 --width 200 --text "${TRANSHELL_CONTENT_OPENED}" --timeout=2
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh
|
||||
;;
|
||||
|
||||
3)
|
||||
2)
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
LANGUAGE=en_US
|
||||
|
||||
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
|
||||
load_transhell_debug
|
||||
@@ -20,8 +20,6 @@ function notify-send() {
|
||||
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${uid}/bus notify-send "$@"
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 检测网络链接畅通
|
||||
function network-check()
|
||||
{
|
||||
@@ -55,23 +53,26 @@ fi
|
||||
|
||||
aptss update
|
||||
|
||||
updatetext=`LANGUAGE=en_US aptss ssupdate 2>&1`
|
||||
updatetext=`aptss ssupdate 2>&1`
|
||||
|
||||
until [ "`echo $updatetext | grep E: `" = "" ];do
|
||||
echo "${TRANSHELL_CONTENT_UPDATE_ERROR_AND_WAIT_15_SEC}"
|
||||
sleep 15
|
||||
updatetext=`LANGUAGE=en_US aptss ssupdate 2>&1`
|
||||
updatetext=`aptss ssupdate 2>&1`
|
||||
|
||||
|
||||
|
||||
done
|
||||
|
||||
update_app_number=$(env LANGUAGE=en_US /usr/bin/apt -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf list --upgradable -o Dir::Etc::sourcelist="/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="/dev/null" -o APT::Get::List-Cleanup="0" 2>/dev/null | grep -c upgradable)
|
||||
|
||||
if [ "$update_app_number" -le 0 ] ; then
|
||||
isupdate=`echo ${updatetext: -5}`
|
||||
if [ "$isupdate" = "date." ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
## 从这里开始,只有检测到了更新才会进行
|
||||
update_app_number=`echo ${updatetext%package*} #从右向左截取第一个 src 后的字符串`
|
||||
update_app_number=`echo ${update_app_number##*information...}`
|
||||
|
||||
# 获取用户选择的要更新的应用
|
||||
PKG_LIST="$(/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgradable-list)"
|
||||
# 指定分隔符为 \n
|
||||
@@ -105,16 +106,4 @@ fi
|
||||
update_transhell
|
||||
|
||||
## 如果都是hold或者版本一致的那就直接退出,否则把剩余的给提醒了
|
||||
|
||||
##TODO:除了apt-mark hold之外额外有一个禁止检查列表
|
||||
|
||||
## 如果不想提示就不提示
|
||||
|
||||
user=$(who | awk '{print $1}' | head -n 1)
|
||||
if [ -e "/home/$user/.config/spark-union/spark-store/ssshell-config-do-not-show-upgrade-notify" ];then
|
||||
echo "他不想站在世界之巅,好吧"
|
||||
echo "Okay he don't want to be at the top of the world, okay"
|
||||
exit
|
||||
else
|
||||
notify-send -a spark-store "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_NOTIFY}" "${TRANSHELL_CONTENT_THERE_ARE_APPS_TO_UPGRADE}"
|
||||
fi
|
||||
|
||||
@@ -4,15 +4,14 @@ TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL="Spark Store APP Upgrade module"
|
||||
TRANSHELL_CONTENT_CHECK_UPDATE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK="Error occured in checking for update! Press Confirm to get the error log (Can be useful when feedback)"
|
||||
TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK="I already copied the log in the text box and I will attach it when feeding back. You can find feedback entry in the settings which is located in the top right of the store."
|
||||
TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS="Feedback entry in the settings which is located in the top right of the store"
|
||||
TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE="All APPs are up to date."
|
||||
TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE="All APPs are up to date.\nBut you are not at the top of the world"
|
||||
TRANSHELL_CONTENT_CAN_NOT_UPGRADE_FOR_BEING_HOLD="(Unable to upgrade: Being marked as hold)"
|
||||
TRANSHELL_CONTENT_CHOOSE_APP_TO_UPGRADE="Choose the app you want to upgrade"
|
||||
TRANSHELL_CONTENT_CHOOSE="Choose"
|
||||
TRANSHELL_CONTENT_APP_NAME="APP name"
|
||||
TRANSHELL_CONTENT_PKG_NAME="Package Name"
|
||||
TRANSHELL_CONTENT_PKG_NAME="Pkg name"
|
||||
TRANSHELL_CONTENT_NEW_VERSION="New version"
|
||||
TRANSHELL_CONTENT_UPGRADE_FROM="Upgrade from"
|
||||
TRANSHELL_CONTENT_NO_APP_IS_CHOSEN="No app is chosen"
|
||||
TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT="Upgrading $APP_UPGRADE , please wait..."
|
||||
TRANSHELL_CONTENT_NO_APP_IS_CHOSEN="No app is chosen\nBut you are not at the top of the world"
|
||||
TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT="Upgrading $PKG_UPGRADE , please wait..."
|
||||
TRANSHELL_CONTENT_CHOSEN_APP_UPGRADE_FINISHED="The chosen app is upgraded"
|
||||
TRANSHELL_CONTENT_APP_UGRADE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK="Error occured when upgrading! Press Confirm to get the error log (Can be useful when feedback)"
|
||||
|
||||
@@ -4,15 +4,14 @@ TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL="星火商店更新模块"
|
||||
TRANSHELL_CONTENT_CHECK_UPDATE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK="检查更新进程出现错误!按确定查看报错,可用于反馈"
|
||||
TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK="我已复制了此文本框中的日志,且将会在反馈时附上。反馈渠道可以在右上角菜单的设置中找到"
|
||||
TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS="反馈渠道在商店右上角的设置里"
|
||||
TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE="没有软件需要更新"
|
||||
TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE="没有软件需要更新\n但是你并没有站在世界之巅"
|
||||
TRANSHELL_CONTENT_CAN_NOT_UPGRADE_FOR_BEING_HOLD="(无法更新:已被标记为保留)"
|
||||
TRANSHELL_CONTENT_CHOOSE_APP_TO_UPGRADE="选择你想更新的应用"
|
||||
TRANSHELL_CONTENT_CHOOSE="选择"
|
||||
TRANSHELL_CONTENT_APP_NAME="应用名"
|
||||
TRANSHELL_CONTENT_PKG_NAME="包名"
|
||||
TRANSHELL_CONTENT_NEW_VERSION="新版本"
|
||||
TRANSHELL_CONTENT_UPGRADE_FROM="从该版本更新"
|
||||
TRANSHELL_CONTENT_NO_APP_IS_CHOSEN="没有选中任何软件"
|
||||
TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT="正在更新 $APP_UPGRADE ,请稍候..."
|
||||
TRANSHELL_CONTENT_NO_APP_IS_CHOSEN="没有选中任何软件\n但是你并没有站在世界之巅"
|
||||
TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT="正在更新 $PKG_UPGRADE ,请稍候..."
|
||||
TRANSHELL_CONTENT_CHOSEN_APP_UPGRADE_FINISHED="选中的软件已经更新完毕"
|
||||
TRANSHELL_CONTENT_APP_UGRADE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK="更新出现错误!按确定查看报错,可用于反馈"
|
||||
|
||||
@@ -4,15 +4,14 @@ TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL="星火商店更新模塊"
|
||||
TRANSHELL_CONTENT_CHECK_UPDATE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK="檢查更新行程出現錯誤! 按確定查看報錯,可用於回報"
|
||||
TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK="我已複製了此文字方塊中的日誌,且將會在回報時附上。 迴響通路可以在右上角選單的設定中找到 "
|
||||
TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS="回報入口在商店右上角的設定裏"
|
||||
TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE="沒有軟體需要更新"
|
||||
TRANSHELL_CONTENT_NO_NEED_TO_UPGRADE="沒有軟體需要更新\n但是你並沒有站在世界之巔"
|
||||
TRANSHELL_CONTENT_CAN_NOT_UPGRADE_FOR_BEING_HOLD="(无法更新:已被标记为保留)"
|
||||
TRANSHELL_CONTENT_CHOOSE_APP_TO_UPGRADE="选择你想更新的应用"
|
||||
TRANSHELL_CONTENT_CHOOSE="选择"
|
||||
TRANSHELL_CONTENT_APP_NAME="应用名"
|
||||
TRANSHELL_CONTENT_PKG_NAME="包名"
|
||||
TRANSHELL_CONTENT_NEW_VERSION="新版本"
|
||||
TRANSHELL_CONTENT_UPGRADE_FROM="从该版本更新"
|
||||
TRANSHELL_CONTENT_NO_APP_IS_CHOSEN="没有选中任何軟體"
|
||||
TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT="正在更新 $APP_UPGRADE ,请稍候..."
|
||||
TRANSHELL_CONTENT_NO_APP_IS_CHOSEN="没有选中任何軟體\n但是你並沒有站在世界之巔"
|
||||
TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT="正在更新 $PKG_UPGRADE ,请稍候..."
|
||||
TRANSHELL_CONTENT_CHOSEN_APP_UPGRADE_FINISHED="选中的軟體已经更新完毕"
|
||||
TRANSHELL_CONTENT_APP_UGRADE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK="更新出现错误!按确定查看报错,可用于反馈"
|
||||
|
||||
@@ -10,5 +10,3 @@ TRANSHELL_CONTENT_CLOSING_UPGRADE_CHECK="执行关闭自动更新检测,请授
|
||||
TRANSHELL_CONTENT_CLOSED="已关闭"
|
||||
TRANSHELL_CONTENT_OPENING_UPGRADE_CHECK="执行启动自动更新检测,请授权"
|
||||
TRANSHELL_CONTENT_OPENED="已开启"
|
||||
TRANSHELL_CONTENT_CLOSE_CREATE_DESKTOP="关闭自动创建桌面启动器"
|
||||
TRANSHELL_CONTENT_OPEN_CREATE_DESKTOP="开启自动创建桌面启动器"
|
||||
@@ -1,14 +1,12 @@
|
||||
#!/bin/bash
|
||||
TRANSHELL_CONTENT_CLOSE="Disable"
|
||||
TRANSHELL_CONTENT_OPEN="Enable"
|
||||
TRANSHELL_CONTENT_CLOSE="Close"
|
||||
TRANSHELL_CONTENT_OPEN="Open"
|
||||
TRANSHELL_CONTENT_WELCOME_AND_CHOOSE_ONE_TO_RUN="Welcome to Spark Store APP Upgrade Settings\nPlease choose one option to run"
|
||||
TRANSHELL_CONTENT_OPTIONS="Options"
|
||||
TRANSHELL_CONTENT_OPEN_OR_CLOSE_UPGRADE_CHECK="$text_update_open Spark Store APP upgrade check. (Will notify APP upgrade at start up if opened.)"
|
||||
TRANSHELL_CONTENT_CHECK_FOR_UPDATE="Check Upgradable app list."
|
||||
TRANSHELL_CONTENT_EXIT="Exit"
|
||||
TRANSHELL_CONTENT_CLOSING_UPGRADE_CHECK="Please authorize to close APP upgrade check"
|
||||
TRANSHELL_CONTENT_CLOSED="Disabled"
|
||||
TRANSHELL_CONTENT_CLOSED="Closed"
|
||||
TRANSHELL_CONTENT_OPENING_UPGRADE_CHECK="Please authorize to open APP upgrade check"
|
||||
TRANSHELL_CONTENT_OPENED="Enabled"
|
||||
TRANSHELL_CONTENT_CLOSE_CREATE_DESKTOP="Disable auto create desktop shortcut"
|
||||
TRANSHELL_CONTENT_OPEN_CREATE_DESKTOP="Enable auto create desktop shortcut"
|
||||
TRANSHELL_CONTENT_OPENED="Opened"
|
||||
|
||||
@@ -10,5 +10,3 @@ TRANSHELL_CONTENT_CLOSING_UPGRADE_CHECK="执行关闭自动更新检测,请授
|
||||
TRANSHELL_CONTENT_CLOSED="已关闭"
|
||||
TRANSHELL_CONTENT_OPENING_UPGRADE_CHECK="执行启动自动更新检测,请授权"
|
||||
TRANSHELL_CONTENT_OPENED="已开启"
|
||||
TRANSHELL_CONTENT_CLOSE_CREATE_DESKTOP="关闭自动创建桌面启动器"
|
||||
TRANSHELL_CONTENT_OPEN_CREATE_DESKTOP="开启自动创建桌面启动器"
|
||||
|
||||
@@ -8,6 +8,14 @@
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="174"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="312"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="478"/>
|
||||
<source>Download</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="290"/>
|
||||
<source>Uninstall</source>
|
||||
@@ -124,15 +132,6 @@
|
||||
<source>Screen capture</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="336"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="370"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="533"/>
|
||||
<source>Download and Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="429"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="432"/>
|
||||
@@ -176,79 +175,79 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="53"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="50"/>
|
||||
<source>Click Open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="132"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="113"/>
|
||||
<source>Developer Mode Disabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="363"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="505"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="159"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="328"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="451"/>
|
||||
<source>Reinstall</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="166"/>
|
||||
<source>Upgrade</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="341"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="481"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="317"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="427"/>
|
||||
<source>Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="346"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="322"/>
|
||||
<source>Installing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="406"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="410"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="414"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="418"/>
|
||||
<source>Warning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||
<location filename="../src/pages/appintopage.cpp" line="406"/>
|
||||
<source>The current application does not support deepin, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||
<location filename="../src/pages/appintopage.cpp" line="410"/>
|
||||
<source>The current application does not support UOS, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||
<location filename="../src/pages/appintopage.cpp" line="414"/>
|
||||
<source>The current application does not support Ubuntu, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||
<location filename="../src/pages/appintopage.cpp" line="418"/>
|
||||
<source>The current application does not support current platform, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="482"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="495"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="482"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="495"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -269,24 +268,16 @@
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="142"/>
|
||||
<location filename="../src/application.cpp" line="139"/>
|
||||
<source>Version: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="152"/>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadController</name>
|
||||
<message>
|
||||
<location filename="../src/backend/downloadworker.cpp" line="180"/>
|
||||
<source>Download Failed, please retry :(</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadItem</name>
|
||||
<message>
|
||||
@@ -366,16 +357,24 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<source>Error happened in dpkg progress , you can try it again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="230"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="231"/>
|
||||
<source>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<source>Error happened in dpkg progress , you can try it again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<source>dpkg progress had been aborted,you can retry installation.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -411,103 +410,103 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="116"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="166"/>
|
||||
<source>Home</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="153"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="203"/>
|
||||
<source>Network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="181"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="231"/>
|
||||
<source>Chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="209"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="259"/>
|
||||
<source>Music</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="237"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="287"/>
|
||||
<source>Video</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="265"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="315"/>
|
||||
<source>Picture</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="293"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="343"/>
|
||||
<source>Game</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="321"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="371"/>
|
||||
<source>Office</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="349"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="399"/>
|
||||
<source>Reading</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="377"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="427"/>
|
||||
<source>Development</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="405"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="455"/>
|
||||
<source>Tool</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="433"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="483"/>
|
||||
<source>Theme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="461"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="511"/>
|
||||
<source>Other</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="489"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="539"/>
|
||||
<source>APP Upgrade</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="217"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
|
||||
<source>Submit App</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="218"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="220"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="271"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="176"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -515,19 +514,19 @@
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="36"/>
|
||||
<location filename="../src/application.cpp" line="37"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="149"/>
|
||||
<location filename="../src/application.cpp" line="33"/>
|
||||
<location filename="../src/application.cpp" line="34"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="41"/>
|
||||
<location filename="../src/application.cpp" line="38"/>
|
||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<location filename="../src/application.cpp" line="146"/>
|
||||
<source>Spark Project</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -537,7 +536,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="274"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -586,71 +585,62 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="230"/>
|
||||
<source>Other Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="240"/>
|
||||
<source>Enable notification for apps not compatible with current system</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="264"/>
|
||||
<source>Temp</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="243"/>
|
||||
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="284"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="250"/>
|
||||
<source>0B</source>
|
||||
<translation type="unfinished">0B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="291"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="257"/>
|
||||
<source>Location:/tmp/spark-store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="311"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<source>Clean</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="324"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="290"/>
|
||||
<source>Size:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="331"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="297"/>
|
||||
<source>Clear Web Cache</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="352"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="318"/>
|
||||
<source>About us</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="359"/>
|
||||
<source><html><head/><body><p>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. </p><p>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. </p><p>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. </p><p>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.</p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p><p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<location filename="../src/pages/settingspage.ui" line="325"/>
|
||||
<source><html><head/><body><p>We are <span style=" font-weight:600;">NOT</span> the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &quot;Spark Store&quot;! &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. </p><p>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. </p><p>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. </p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p>
|
||||
<p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="214"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="213"/>
|
||||
<source>Updating, please wait...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||
<source>Temporary cache was cleaned</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -658,12 +648,12 @@
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="275"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
|
||||
<source>About</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="276"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
|
||||
<source>Exit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
@@ -1,671 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="es">
|
||||
<context>
|
||||
<name>AppIntoPage</name>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Tipo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="290"/>
|
||||
<source>Uninstall</source>
|
||||
<translation>Desinstalar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="346"/>
|
||||
<source>0</source>
|
||||
<translation>0</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="356"/>
|
||||
<source>Download Times</source>
|
||||
<translation>Número de descargas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="410"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="413"/>
|
||||
<source><html><head/><body><p>This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology</p></body></html></source>
|
||||
<translation><html><head/><body><p>Esta aplicación fue desarrollada por usuarios de la comunidad y la Etiquetamos en honor a aquellos que contribuyeron a la ecología de linux.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="416"/>
|
||||
<source><html><head/><body><p><img src=":/tags/community-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/community-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="435"/>
|
||||
<source><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="448"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="451"/>
|
||||
<source><html><head/><body><p>Capable to UOS home 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capaz de UOS home 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="454"/>
|
||||
<source><html><head/><body><p><img src=":/tags/uos-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/uos-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="467"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="470"/>
|
||||
<source><html><head/><body><p>A deepin-wine2 app. Spark Store will automatically configure the wine kit for you.</p></body></html></source>
|
||||
<translation><html><head/><body><p>A deepin-wine2 app. La tienda Spark le configurará automáticamente un traje de vino.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="473"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="486"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="489"/>
|
||||
<source><html><head/><body><p>This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment</p></body></html></source>
|
||||
<translation><html><head/><body><p>Esta es una aplicación dtk5, lo que significa que funcionará mejor en un entorno de escritorio profundo.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="492"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dtk-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/dtk-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="505"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="508"/>
|
||||
<source><html><head/><body><p>Capable to deepin 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capaz de deepin 20</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="511"/>
|
||||
<source><html><head/><body><p><img src=":/tags/deepin-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/deepin-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="524"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="527"/>
|
||||
<source><html><head/><body><p>An Appimage to deb app.</p></body></html></source>
|
||||
<translation><html><head/><body><p>Appimage de la aplicación deb.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="530"/>
|
||||
<source><html><head/><body><p><img src=":/tags/a2d-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/a2d-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="549"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine5-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/dwine5-small.png"/></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="602"/>
|
||||
<source>Share</source>
|
||||
<translation>Comunión</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="609"/>
|
||||
<source>APP Feedback</source>
|
||||
<translation>Comentarios de la app</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="765"/>
|
||||
<source>Introduction</source>
|
||||
<translation>Introducción</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1068"/>
|
||||
<source>Description</source>
|
||||
<translation>Descripción</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="903"/>
|
||||
<source>Screen capture</source>
|
||||
<translation>Captura de pantalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="336"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="370"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="533"/>
|
||||
<source>Download and Install</source>
|
||||
<translation>Descargar e instalar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="429"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="432"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capaz de Ubuntu 22.04</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="543"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="546"/>
|
||||
<source><html><head/><body><p>A Wine app.Spark Store will automatically configure the wine kit for you</p></body></html></source>
|
||||
<translation><html><head/><body><p>La aplicación wine. Spark Store configurará automáticamente el kit Wine para usted</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1161"/>
|
||||
<source>Update</source>
|
||||
<translation>Modernizar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1190"/>
|
||||
<source>Contributor</source>
|
||||
<translation>Contribuyentes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1197"/>
|
||||
<source>Pkgname</source>
|
||||
<translation>Nombre del embalaje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1303"/>
|
||||
<source>Author</source>
|
||||
<translation>Autor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1339"/>
|
||||
<source>Size</source>
|
||||
<translation>Tamaño</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1375"/>
|
||||
<source>Website</source>
|
||||
<translation>Sitio web</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="53"/>
|
||||
<source>Click Open</source>
|
||||
<translation>Haga clic en "abrir"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="132"/>
|
||||
<source>Developer Mode Disabled</source>
|
||||
<translation>Se ha desactivado el modo desarrollador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="363"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="505"/>
|
||||
<source>Reinstall</source>
|
||||
<translation>Reinstalación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
||||
<source>Upgrade</source>
|
||||
<translation>Actualización</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="341"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="481"/>
|
||||
<source>Install</source>
|
||||
<translation>Instalación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="346"/>
|
||||
<source>Installing</source>
|
||||
<translation>Se está instalando</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<source>Warning</source>
|
||||
<translation>Aviso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>SPARK Store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>Desinstalación exitosa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>La URL ha sido copiada al portapapeles</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AppListPage</name>
|
||||
<message>
|
||||
<location filename="../src/pages/applistpage.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Tipo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/applistpage.ui" line="60"/>
|
||||
<source>about:blank</source>
|
||||
<translation>Sobre: en blanco</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="142"/>
|
||||
<source>Version: %1</source>
|
||||
<translation>Versión %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="152"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation>%1 publicado bajo %2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadController</name>
|
||||
<message>
|
||||
<location filename="../src/backend/downloadworker.cpp" line="180"/>
|
||||
<source>Download Failed, please retry :(</source>
|
||||
<translation>Descarga fall, por favor vuelva a intentarlo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadItem</name>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="32"/>
|
||||
<source>Form</source>
|
||||
<translation>Tipo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="74"/>
|
||||
<source>icon</source>
|
||||
<translation>ídolo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="134"/>
|
||||
<source>TextLabel</source>
|
||||
<translation>Etiquetas de texto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="121"/>
|
||||
<source>Name</source>
|
||||
<translation>Nombre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="226"/>
|
||||
<source>Waiting to download</source>
|
||||
<translation>Esperando descargar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="277"/>
|
||||
<source>Install</source>
|
||||
<translation>Instalación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="296"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Cancelación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="315"/>
|
||||
<source>Info</source>
|
||||
<translation>Información</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="43"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="44"/>
|
||||
<source>Download Complete.</source>
|
||||
<translation>Descarga completada.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>SPARK Store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="125"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="126"/>
|
||||
<source>Installing</source>
|
||||
<translation>Se está instalando</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<source>Installation complete.</source>
|
||||
<translation>La instalación está completa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="219"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="220"/>
|
||||
<source>Finish</source>
|
||||
<translation>Completado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<source>Retry</source>
|
||||
<translation>Reinterpretar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="230"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="231"/>
|
||||
<source>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation>Se produjo un error durante el proceso dpkg, verifique la información de instalación o intente reinstalar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<translation>El proceso de DPKG ha sido interrumpido, compruebe la información de instalación o intente reinstalar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="145"/>
|
||||
<source>Download canceled</source>
|
||||
<translation>Descarga cancelada</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadListWidget</name>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Tipo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.ui" line="41"/>
|
||||
<source>The list is currently empty. Go and download some softwares!</source>
|
||||
<translation>La lista está actualmente vacía. ¡Ve a descargar un poco de software!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.ui" line="116"/>
|
||||
<source>Open download directory</source>
|
||||
<translation>Abrir el catálogo de descargas</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="14"/>
|
||||
<source>MainWindow</source>
|
||||
<translation>Ventana principal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="116"/>
|
||||
<source>Home</source>
|
||||
<translation>Casa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="153"/>
|
||||
<source>Network</source>
|
||||
<translation>Red</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="181"/>
|
||||
<source>Chat</source>
|
||||
<translation>Charla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="209"/>
|
||||
<source>Music</source>
|
||||
<translation>Música</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="237"/>
|
||||
<source>Video</source>
|
||||
<translation>Vídeo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="265"/>
|
||||
<source>Picture</source>
|
||||
<translation>Foto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="293"/>
|
||||
<source>Game</source>
|
||||
<translation>Juego</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="321"/>
|
||||
<source>Office</source>
|
||||
<translation>Oficina</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="349"/>
|
||||
<source>Reading</source>
|
||||
<translation>Leer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="377"/>
|
||||
<source>Development</source>
|
||||
<translation>Desarrollo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="405"/>
|
||||
<source>Tool</source>
|
||||
<translation>Herramientas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="433"/>
|
||||
<source>Theme</source>
|
||||
<translation>Tema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="461"/>
|
||||
<source>Other</source>
|
||||
<translation>Además</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="489"/>
|
||||
<source>APP Upgrade</source>
|
||||
<translation>Actualización de app</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="217"/>
|
||||
<source>Submit App</source>
|
||||
<translation>Presentación de la aplicación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="218"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation>Enviar la aplicación al cliente (recomendación)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
|
||||
<source>Settings</source>
|
||||
<translation>Configuración</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="220"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation>Actualización e instalación de app</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="271"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>SPARK Store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="176"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation>Buscar o introducir spk: /%</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="36"/>
|
||||
<location filename="../src/application.cpp" line="37"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="149"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>SPARK Store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="41"/>
|
||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||
<translation><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>Spark Project</source>
|
||||
<translation>Proyecto spark</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="18"/>
|
||||
<source>Download list</source>
|
||||
<translation>Descargar lista</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="274"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation>Mostrar la ventana principal</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Tipo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="91"/>
|
||||
<source>Line Settings</source>
|
||||
<translation>Configuración de la línea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="107"/>
|
||||
<source>Choose Line:</source>
|
||||
<translation>Selección de líneas:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="130"/>
|
||||
<source>Refresh</source>
|
||||
<translation>Refrescar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="143"/>
|
||||
<source>Take effect immediately</source>
|
||||
<translation>Entrada en vigor inmediata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="185"/>
|
||||
<source><html><head/><body><p>Check update for Spark Store. </p></body></html></source>
|
||||
<translation><html><head/><body><p>Revisa las actualizaciones de la Spark Store. </p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="202"/>
|
||||
<source>Update</source>
|
||||
<translation>Modernizar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="195"/>
|
||||
<source>Spark Store Update</source>
|
||||
<translation>Actualización de la tienda spark</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="230"/>
|
||||
<source>Other Settings</source>
|
||||
<translation>Otras configuraciones</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="240"/>
|
||||
<source>Enable notification for apps not compatible with current system</source>
|
||||
<translation>Habilitar notificaciones para aplicaciones incompatibles con el sistema actual</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="264"/>
|
||||
<source>Temp</source>
|
||||
<translation>Empleados temporales</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
|
||||
<translation>Debido a que el diccionario se encuentra en / tmp, se limpia automáticamente cuando el sistema se reinicia.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="284"/>
|
||||
<source>0B</source>
|
||||
<translation>0B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="291"/>
|
||||
<source>Location:/tmp/spark-store</source>
|
||||
<translation>Ubicación: / TMP / Spark Storage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="311"/>
|
||||
<source>Clean</source>
|
||||
<translation>Limpio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="324"/>
|
||||
<source>Size:</source>
|
||||
<translation>Tamaño:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="331"/>
|
||||
<source>Clear Web Cache</source>
|
||||
<translation>Borrar la caché web</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="352"/>
|
||||
<source>About us</source>
|
||||
<translation>Sobre nosotros</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="359"/>
|
||||
<source><html><head/><body><p>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. </p><p>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. </p><p>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. </p><p>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.</p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p><p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="214"/>
|
||||
<source>Updating, please wait...</source>
|
||||
<translation>Se está actualizando, por favor Espere...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>SPARK Store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<source>Temporary cache was cleaned</source>
|
||||
<translation>Se ha limpiado la caché temporal</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="275"/>
|
||||
<source>About</source>
|
||||
<translation>Sobre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="276"/>
|
||||
<source>Exit</source>
|
||||
<translation>Exportaciones</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
@@ -6,251 +6,250 @@
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Type</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="174"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="312"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="478"/>
|
||||
<source>Download</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="290"/>
|
||||
<source>Uninstall</source>
|
||||
<translation>Désinstaller</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="346"/>
|
||||
<source>0</source>
|
||||
<translation>0</translation>
|
||||
<translation type="unfinished">0B {0?}</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="356"/>
|
||||
<source>Download Times</source>
|
||||
<translation>Nombre de téléchargements</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="410"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="413"/>
|
||||
<source><html><head/><body><p>This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology</p></body></html></source>
|
||||
<translation><html><head/><body><p>Cette application a été développée par des utilisateurs de la communauté et nous avons donné ce label à ceux qui ont contribué à l'écologie de Linux</p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="416"/>
|
||||
<source><html><head/><body><p><img src=":/tags/community-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/community-small.png"/></p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="435"/>
|
||||
<source><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="448"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="451"/>
|
||||
<source><html><head/><body><p>Capable to UOS home 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capable de la home UOS 20</p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="454"/>
|
||||
<source><html><head/><body><p><img src=":/tags/uos-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/uos-small.png"/></p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="467"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="470"/>
|
||||
<source><html><head/><body><p>A deepin-wine2 app. Spark Store will automatically configure the wine kit for you.</p></body></html></source>
|
||||
<translation><html><head/><body><p>Une application deepin-wine2. Le Spark Store configure automatiquement votre pack de vins.</p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="473"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/dwine2-small.png"/></p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="486"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="489"/>
|
||||
<source><html><head/><body><p>This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment</p></body></html></source>
|
||||
<translation><html><head/><body><p>C'est une application dtk5, ce qui signifie qu'elle fonctionnera mieux dans un environnement de bureau profond.</p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="492"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dtk-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/dtk-small.png"/></p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="505"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="508"/>
|
||||
<source><html><head/><body><p>Capable to deepin 20</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capable de la deepin 20</p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="511"/>
|
||||
<source><html><head/><body><p><img src=":/tags/deepin-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/deepin-small.png"/></p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="524"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="527"/>
|
||||
<source><html><head/><body><p>An Appimage to deb app.</p></body></html></source>
|
||||
<translation><html><head/><body><p>Appimage pour l'application DEB</p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="530"/>
|
||||
<source><html><head/><body><p><img src=":/tags/a2d-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/a2d-small.png"/></p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="549"/>
|
||||
<source><html><head/><body><p><img src=":/tags/dwine5-small.png"/></p></body></html></source>
|
||||
<translation><html><head/><body><p><img src=":/tags/dwine5-small.png"/></p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="602"/>
|
||||
<source>Share</source>
|
||||
<translation>Au total</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="609"/>
|
||||
<source>APP Feedback</source>
|
||||
<translation>App feedback</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="765"/>
|
||||
<source>Introduction</source>
|
||||
<translation>Présentation</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1068"/>
|
||||
<source>Description</source>
|
||||
<translation>Description</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="903"/>
|
||||
<source>Screen capture</source>
|
||||
<translation>Captures d'écran</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="336"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="370"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="533"/>
|
||||
<source>Download and Install</source>
|
||||
<translation>Télécharger et installer</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="429"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="432"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation><html><head/><body><p>Capable de la Ubuntu 22.04</p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="543"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="546"/>
|
||||
<source><html><head/><body><p>A Wine app.Spark Store will automatically configure the wine kit for you</p></body></html></source>
|
||||
<translation><html><head/><body><p>L'application wine. Spark Store configure automatiquement le kit Wine pour vous</p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1161"/>
|
||||
<source>Update</source>
|
||||
<translation>Moderniser</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1190"/>
|
||||
<source>Contributor</source>
|
||||
<translation>Contributeurs</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1197"/>
|
||||
<source>Pkgname</source>
|
||||
<translation>Nom de l'emballage</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1303"/>
|
||||
<source>Author</source>
|
||||
<translation>Auteur</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1339"/>
|
||||
<source>Size</source>
|
||||
<translation>Taille</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="1375"/>
|
||||
<source>Website</source>
|
||||
<translation>Site Web</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="53"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="50"/>
|
||||
<source>Click Open</source>
|
||||
<translation>Cliquez sur Ouvrir</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="132"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="113"/>
|
||||
<source>Developer Mode Disabled</source>
|
||||
<translation>Mode développeur désactivé</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="363"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="505"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="159"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="328"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="451"/>
|
||||
<source>Reinstall</source>
|
||||
<translation>Réinstaller</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="166"/>
|
||||
<source>Upgrade</source>
|
||||
<translation>Mise à niveau</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="341"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="481"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="317"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="427"/>
|
||||
<source>Install</source>
|
||||
<translation>Installation</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="346"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="322"/>
|
||||
<source>Installing</source>
|
||||
<translation>Installation en cours</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="406"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="410"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="414"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="418"/>
|
||||
<source>Warning</source>
|
||||
<translation>Avertissement</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||
<location filename="../src/pages/appintopage.cpp" line="406"/>
|
||||
<source>The current application does not support deepin, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||
<location filename="../src/pages/appintopage.cpp" line="410"/>
|
||||
<source>The current application does not support UOS, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||
<location filename="../src/pages/appintopage.cpp" line="414"/>
|
||||
<source>The current application does not support Ubuntu, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="418"/>
|
||||
<source>The current application does not support current platform, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="482"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="495"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>Le Spark store</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="482"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>Désinstallation réussie</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="495"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>L'URL a été copiée dans le presse - papiers</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -258,33 +257,25 @@
|
||||
<message>
|
||||
<location filename="../src/pages/applistpage.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Type</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/applistpage.ui" line="60"/>
|
||||
<source>about:blank</source>
|
||||
<translation>Re: vide</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="142"/>
|
||||
<location filename="../src/application.cpp" line="139"/>
|
||||
<source>Version: %1</source>
|
||||
<translation>Version: %1</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="152"/>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation>%1 publié sous %2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadController</name>
|
||||
<message>
|
||||
<location filename="../src/backend/downloadworker.cpp" line="180"/>
|
||||
<source>Download Failed, please retry :(</source>
|
||||
<translation>Le téléchargement a échoué, veuillez réessayer</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -292,97 +283,105 @@
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="32"/>
|
||||
<source>Form</source>
|
||||
<translation>Type</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="74"/>
|
||||
<source>icon</source>
|
||||
<translation>Idoles</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="134"/>
|
||||
<source>TextLabel</source>
|
||||
<translation>Étiquettes de texte</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="121"/>
|
||||
<source>Name</source>
|
||||
<translation>Le nom</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="226"/>
|
||||
<source>Waiting to download</source>
|
||||
<translation>En attente de téléchargement</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="277"/>
|
||||
<source>Install</source>
|
||||
<translation>Installation</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="296"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Annulation</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.ui" line="315"/>
|
||||
<source>Info</source>
|
||||
<translation>Informations</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="43"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="44"/>
|
||||
<source>Download Complete.</source>
|
||||
<translation>Le téléchargement est terminé.</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>Le Spark store</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="125"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="126"/>
|
||||
<source>Installing</source>
|
||||
<translation>Installation en cours</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="218"/>
|
||||
<source>Installation complete.</source>
|
||||
<translation>L'installation est terminée.</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="219"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="220"/>
|
||||
<source>Finish</source>
|
||||
<translation>Terminé</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="227"/>
|
||||
<source>Retry</source>
|
||||
<translation>Essayez à nouveau</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<source>Error happened in dpkg progress , you can try it again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="230"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="231"/>
|
||||
<source>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation>Une erreur s'est produite dans le processus dpkg, vérifiez les informations d'installation ou essayez de réinstaller.</translation>
|
||||
<source>Error happened in dpkg progress , you can try it again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<source>dpkg progress had been aborted,you can retry installation.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<translation>La progression de DPKG a été interrompue, veuillez vérifier les informations d’installation ou essayer de réinstaller.</translation>
|
||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="145"/>
|
||||
<source>Download canceled</source>
|
||||
<translation>Le téléchargement a été annulé</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -390,17 +389,17 @@
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Type</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.ui" line="41"/>
|
||||
<source>The list is currently empty. Go and download some softwares!</source>
|
||||
<translation>La liste est actuellement vide. Allez télécharger quelques logiciels!</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.ui" line="116"/>
|
||||
<source>Open download directory</source>
|
||||
<translation>Ouvrir le catalogue de téléchargement</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -408,138 +407,138 @@
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="14"/>
|
||||
<source>MainWindow</source>
|
||||
<translation>Fenêtre principale</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="116"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="166"/>
|
||||
<source>Home</source>
|
||||
<translation>Maison</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="153"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="203"/>
|
||||
<source>Network</source>
|
||||
<translation>Réseau</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="181"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="231"/>
|
||||
<source>Chat</source>
|
||||
<translation>Bavarder</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="209"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="259"/>
|
||||
<source>Music</source>
|
||||
<translation>Musique</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="237"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="287"/>
|
||||
<source>Video</source>
|
||||
<translation>Vidéo</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="265"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="315"/>
|
||||
<source>Picture</source>
|
||||
<translation>Photos</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="293"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="343"/>
|
||||
<source>Game</source>
|
||||
<translation>Jeux</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="321"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="371"/>
|
||||
<source>Office</source>
|
||||
<translation>Bureaux</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="349"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="399"/>
|
||||
<source>Reading</source>
|
||||
<translation>Lire</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="377"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="427"/>
|
||||
<source>Development</source>
|
||||
<translation>Développement</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="405"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="455"/>
|
||||
<source>Tool</source>
|
||||
<translation>Outils</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="433"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="483"/>
|
||||
<source>Theme</source>
|
||||
<translation>Thèmes</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="461"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="511"/>
|
||||
<source>Other</source>
|
||||
<translation>En outre</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="489"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="539"/>
|
||||
<source>APP Upgrade</source>
|
||||
<translation>Mise à niveau app</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="217"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
|
||||
<source>Submit App</source>
|
||||
<translation>Soumettre une application</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="218"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation>Soumettre une demande au client (recommandé)</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
|
||||
<source>Settings</source>
|
||||
<translation>Paramètres</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="220"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation>Paramètres de mise à niveau et d'installation de l'app</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="271"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>Le Spark store</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="176"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation>Rechercher ou entrer SPK /</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="36"/>
|
||||
<location filename="../src/application.cpp" line="37"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="149"/>
|
||||
<location filename="../src/application.cpp" line="33"/>
|
||||
<location filename="../src/application.cpp" line="34"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>Le Spark store</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="41"/>
|
||||
<location filename="../src/application.cpp" line="38"/>
|
||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||
<translation><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<location filename="../src/application.cpp" line="146"/>
|
||||
<source>Spark Project</source>
|
||||
<translation>Le projet Spark</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="18"/>
|
||||
<source>Download list</source>
|
||||
<translation>Télécharger la Liste</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="274"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation>Afficher la fenêtre principale</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -547,125 +546,116 @@
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Type</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="91"/>
|
||||
<source>Line Settings</source>
|
||||
<translation>Configuration de la ligne</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="107"/>
|
||||
<source>Choose Line:</source>
|
||||
<translation>Sélectionnez la ligne:</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="130"/>
|
||||
<source>Refresh</source>
|
||||
<translation>Rafraîchir</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="143"/>
|
||||
<source>Take effect immediately</source>
|
||||
<translation>Entrée en vigueur immédiate</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="185"/>
|
||||
<source><html><head/><body><p>Check update for Spark Store. </p></body></html></source>
|
||||
<translation><html><head/><body><p>Vérifiez les mises à jour sur le Spark Store. </p></body></html></translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="202"/>
|
||||
<source>Update</source>
|
||||
<translation>Moderniser</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="195"/>
|
||||
<source>Spark Store Update</source>
|
||||
<translation>Mise à jour du Spark store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="230"/>
|
||||
<source>Other Settings</source>
|
||||
<translation>Autres paramètres</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="240"/>
|
||||
<source>Enable notification for apps not compatible with current system</source>
|
||||
<translation>Activer les notifications pour les applications incompatibles avec le système actuel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="264"/>
|
||||
<source>Temp</source>
|
||||
<translation>Employés temporaires</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
|
||||
<translation>Comme le dictionnaire se trouve dans / tmp, il est nettoyé automatiquement lorsque le système redémarre.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="284"/>
|
||||
<source>0B</source>
|
||||
<translation>0B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="291"/>
|
||||
<source>Location:/tmp/spark-store</source>
|
||||
<translation>Emplacement: / tmp / Spark stockage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="311"/>
|
||||
<source>Clean</source>
|
||||
<translation>Nettoyé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="324"/>
|
||||
<source>Size:</source>
|
||||
<translation>Dimensions:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="331"/>
|
||||
<source>Clear Web Cache</source>
|
||||
<translation>Effacer le cache Web</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="352"/>
|
||||
<source>About us</source>
|
||||
<translation>À propos de nous</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="359"/>
|
||||
<source><html><head/><body><p>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. </p><p>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. </p><p>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. </p><p>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.</p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p><p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="214"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="230"/>
|
||||
<source>Temp</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="243"/>
|
||||
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="250"/>
|
||||
<source>0B</source>
|
||||
<translation type="unfinished">0B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="257"/>
|
||||
<source>Location:/tmp/spark-store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<source>Clean</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="290"/>
|
||||
<source>Size:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="297"/>
|
||||
<source>Clear Web Cache</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="318"/>
|
||||
<source>About us</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="325"/>
|
||||
<source><html><head/><body><p>We are <span style=" font-weight:600;">NOT</span> the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &quot;Spark Store&quot;! &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. </p><p>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. </p><p>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. </p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p>
|
||||
<p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="213"/>
|
||||
<source>Updating, please wait...</source>
|
||||
<translation>Mise à jour en cours, veuillez patienter...</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>Le Spark store</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||
<source>Temporary cache was cleaned</source>
|
||||
<translation>Cache temporaire nettoyé</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="275"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
|
||||
<source>About</source>
|
||||
<translation>À propos</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="276"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
|
||||
<source>Exit</source>
|
||||
<translation>Exportations</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
||||
@@ -8,6 +8,14 @@
|
||||
<source>Form</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="174"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="312"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="478"/>
|
||||
<source>Download</source>
|
||||
<translation>下载</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="290"/>
|
||||
<source>Uninstall</source>
|
||||
@@ -119,15 +127,6 @@
|
||||
<source>Screen capture</source>
|
||||
<translation>屏幕截图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="336"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="370"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="533"/>
|
||||
<source>Download and Install</source>
|
||||
<translation>下载并安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="429"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="432"/>
|
||||
@@ -176,79 +175,79 @@
|
||||
<translation>软件官网</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="53"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="50"/>
|
||||
<source>Click Open</source>
|
||||
<translation>点击跳转</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="132"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="113"/>
|
||||
<source>Developer Mode Disabled</source>
|
||||
<translation>开发者模式未开启</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="363"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="505"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="159"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="328"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="451"/>
|
||||
<source>Reinstall</source>
|
||||
<translation>重新安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="166"/>
|
||||
<source>Upgrade</source>
|
||||
<translation>升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="341"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="481"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="317"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="427"/>
|
||||
<source>Install</source>
|
||||
<translation>安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="346"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="322"/>
|
||||
<source>Installing</source>
|
||||
<translation>正在安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="406"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="410"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="414"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="418"/>
|
||||
<source>Warning</source>
|
||||
<translation>警告</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||
<translation>当前应用不支持或未在deepin上测试过,安装后可能会出现问题</translation>
|
||||
<location filename="../src/pages/appintopage.cpp" line="406"/>
|
||||
<source>The current application does not support deepin, there may be problems</source>
|
||||
<translation>当前应用不支持deepin,安装后可能会出现问题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||
<translation>当前应用不支持或未在UOS上测试过,安装后可能会出现问题</translation>
|
||||
<location filename="../src/pages/appintopage.cpp" line="410"/>
|
||||
<source>The current application does not support UOS, there may be problems</source>
|
||||
<translation>当前应用不支持UOS,安装后可能会出现问题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||
<translation>当前应用不支持或未在Ubuntu上测试过,安装后可能会出现问题</translation>
|
||||
<location filename="../src/pages/appintopage.cpp" line="414"/>
|
||||
<source>The current application does not support Ubuntu, there may be problems</source>
|
||||
<translation>当前应用不支持Ubuntu,安装后可能会出现问题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||
<translation>当前应用不支持或未在您的平台上测试过,安装后可能会出现问题</translation>
|
||||
<location filename="../src/pages/appintopage.cpp" line="418"/>
|
||||
<source>The current application does not support current platform, there may be problems</source>
|
||||
<translation>当前应用不支持平台,安装后可能会出现问题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="482"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="495"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="482"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>卸载成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="495"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>链接已复制到剪贴板</translation>
|
||||
</message>
|
||||
@@ -269,24 +268,16 @@
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="142"/>
|
||||
<location filename="../src/application.cpp" line="139"/>
|
||||
<source>Version: %1</source>
|
||||
<translation>版本:%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="152"/>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation>%1遵循%2协议发布</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadController</name>
|
||||
<message>
|
||||
<location filename="../src/backend/downloadworker.cpp" line="180"/>
|
||||
<source>Download Failed, please retry :(</source>
|
||||
<translation>下载失败,请重试</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadItem</name>
|
||||
<message>
|
||||
@@ -366,17 +357,25 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<source>Error happened in dpkg progress , you can try it again.</source>
|
||||
<translation>安装被中止,可重新安装。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="230"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="231"/>
|
||||
<source>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation>安装出现错误,请检查安装详情或尝试重新安装。</translation>
|
||||
<source>Error happened in dpkg progress , you can try it again</source>
|
||||
<translation>dpkg出现错误,可重新安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<source>dpkg progress had been aborted,you can retry installation.</source>
|
||||
<translation>dpkg进程被中断,您可重试安装。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<translation>安装被中止,请检查安装详情或尝试重新安装。</translation>
|
||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||
<translation>安装被中止,可重新安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
|
||||
@@ -411,103 +410,103 @@
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="116"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="166"/>
|
||||
<source>Home</source>
|
||||
<translation>主页</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="153"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="203"/>
|
||||
<source>Network</source>
|
||||
<translation>网络</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="181"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="231"/>
|
||||
<source>Chat</source>
|
||||
<translation>社交</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="209"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="259"/>
|
||||
<source>Music</source>
|
||||
<translation>音乐</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="237"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="287"/>
|
||||
<source>Video</source>
|
||||
<translation>视频</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="265"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="315"/>
|
||||
<source>Picture</source>
|
||||
<translation>图像</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="293"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="343"/>
|
||||
<source>Game</source>
|
||||
<translation>游戏</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="321"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="371"/>
|
||||
<source>Office</source>
|
||||
<translation>办公</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="349"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="399"/>
|
||||
<source>Reading</source>
|
||||
<translation>阅读</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="377"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="427"/>
|
||||
<source>Development</source>
|
||||
<translation>开发</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="405"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="455"/>
|
||||
<source>Tool</source>
|
||||
<translation>工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="433"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="483"/>
|
||||
<source>Theme</source>
|
||||
<translation>主题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="461"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="511"/>
|
||||
<source>Other</source>
|
||||
<translation>其他</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="489"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="539"/>
|
||||
<source>APP Upgrade</source>
|
||||
<translation>更新</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="217"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
|
||||
<source>Submit App</source>
|
||||
<translation>投递应用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="218"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation>使用本地投稿器投递应用(推荐)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
|
||||
<source>Settings</source>
|
||||
<translation>设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="220"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation>应用更新和安装设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="271"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="176"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation>搜索或打开链接</translation>
|
||||
</message>
|
||||
@@ -515,19 +514,19 @@
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="36"/>
|
||||
<location filename="../src/application.cpp" line="37"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="149"/>
|
||||
<location filename="../src/application.cpp" line="33"/>
|
||||
<location filename="../src/application.cpp" line="34"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="41"/>
|
||||
<location filename="../src/application.cpp" line="38"/>
|
||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||
<translation><span style=' font-size:10pt;font-weight:60;'>一款由社区提供的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>星火计划开发者</span></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<location filename="../src/application.cpp" line="146"/>
|
||||
<source>Spark Project</source>
|
||||
<translation>星火计划</translation>
|
||||
</message>
|
||||
@@ -537,7 +536,7 @@
|
||||
<translation>下载列表</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="274"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation>显示主窗口</translation>
|
||||
</message>
|
||||
@@ -586,71 +585,62 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="230"/>
|
||||
<source>Other Settings</source>
|
||||
<translation>其他设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="240"/>
|
||||
<source>Enable notification for apps not compatible with current system</source>
|
||||
<translation>开启应用不兼容当前系统提示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="264"/>
|
||||
<source>Temp</source>
|
||||
<translation>缓存目录</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="243"/>
|
||||
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
|
||||
<translation>因为这个目录位于/tmp下,所以即使你不手动清空的话,其也将在系统重启时自动清空。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="284"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="250"/>
|
||||
<source>0B</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="291"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="257"/>
|
||||
<source>Location:/tmp/spark-store</source>
|
||||
<translation>目录位置:/tmp/spark-store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="311"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<source>Clean</source>
|
||||
<translation>清空</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="324"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="290"/>
|
||||
<source>Size:</source>
|
||||
<translation>目录大小:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="331"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="297"/>
|
||||
<source>Clear Web Cache</source>
|
||||
<translation>清理网页缓存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="352"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="318"/>
|
||||
<source>About us</source>
|
||||
<translation>关于我们</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="359"/>
|
||||
<source><html><head/><body><p>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. </p><p>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. </p><p>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. </p><p>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.</p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p><p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<translation><html><head/><body><p>我们的服务和软件免费供个人和非营利组织使用、交流和学习,但您在使用过程中必须遵守当地的法律法规,否则出现的任何问题与我们无关。</p><p>我们不从社区版本商店中获利,我们的大部分运营费用依靠社区的捐赠,我们很感激这让我们可以花更少的精力担心钱。但是,为了更好地提供持续的服务,Spark只对个人用户免费开放服务仓库,如果您或您的组织需要提供商业服务或者您的组织是营利性组织,请联系我们获取商业授权。</p><p>严禁用户或组织在使用本软件时从事任何形式的恶意行为,包括但不限于恶意攻击、滥用、破坏、批量抓取软件仓库等。恶意行为的定义由Spark社区判断,违规者将承担法律责任。Spark Community保留发布其生成的软件包的权利。</p><p>未经Spark Community明确授权,禁止任何个人或组织将Spark Community软件包用于商业目的或重新分发。该条款旨在确保开源精神,同时保护Spark社区的知识产权。除此之外,如果您使用Spark Store主程序或其部分代码,则必须遵守GPL v3的所有其他条款和要求。<span style=" font - family:宋体;" <span style=" font - family:宋体;color:#0082fa;">jifengshenmo@outlook.com</span></a>我们会尽快删除侵权内容。</p><p>如果你也想加入我们,无论你是参与开发、设计、推销还是提交作品,我们都欢迎你加入我们。<br/></span>我们的联系方法可以在<a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">找到</span></a></p></body></html></translation>
|
||||
<location filename="../src/pages/settingspage.ui" line="325"/>
|
||||
<source><html><head/><body><p>We are <span style=" font-weight:600;">NOT</span> the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &quot;Spark Store&quot;! &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. </p><p>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. </p><p>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. </p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p>
|
||||
<p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<translation><html><head/><body><p>我们并<span style=" font-weight:600;">不是</span>官方团队,和你一样,我们也只是众多Linux/deepin系统爱好者和用户之中的一员,我们开发并且运营这个“Spark应用商店”,是为了让社区的朋友们一起分享好用的软件,或者一起参与开发,让大家都用到最新的,最优秀的软件。</p><p>我们并没有因此盈利,所有开发和维护人员都不会获得报酬,我们的主要支出大部分依赖于社区对我们的捐助,很感谢大家,这部分捐助让我们并不需要耗费太多精力去担心资金问题。</p><p>我们的服务和开发的软件都是免费供给大家使用,交流,学习的,但是在您的使用过程中一定要遵守当地的法律法规,否则出现任何问题和我们无关。</p><p>如果商店中任何一部分有侵犯您权益的行为,请告知我们 <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> ,我们会第一时间删除侵权内容。</p><p>如果你也想参与我们,不管是参与开发,设计,投递还是投稿作品,我们都欢迎你的加入。<p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>请点击<a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">这里</span></a>来联系我们,加群</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="214"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="213"/>
|
||||
<source>Updating, please wait...</source>
|
||||
<translation>正在更新,请稍候……</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||
<source>Temporary cache was cleaned</source>
|
||||
<translation>缓存目录已清空</translation>
|
||||
</message>
|
||||
@@ -658,12 +648,12 @@
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="275"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
|
||||
<source>About</source>
|
||||
<translation>关于</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="276"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
|
||||
<source>Exit</source>
|
||||
<translation>退出</translation>
|
||||
</message>
|
||||
|
||||
@@ -8,6 +8,14 @@
|
||||
<source>Form</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="174"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="312"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="478"/>
|
||||
<source>Download</source>
|
||||
<translation>下载</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="290"/>
|
||||
<source>Uninstall</source>
|
||||
@@ -119,15 +127,6 @@
|
||||
<source>Screen capture</source>
|
||||
<translation>軟體演示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="244"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="198"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="336"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="370"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="533"/>
|
||||
<source>Download and Install</source>
|
||||
<translation>下載並安裝</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.ui" line="429"/>
|
||||
<location filename="../src/pages/appintopage.ui" line="432"/>
|
||||
@@ -176,79 +175,79 @@
|
||||
<translation>软件官网</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="53"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="50"/>
|
||||
<source>Click Open</source>
|
||||
<translation>点击跳转</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="132"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="113"/>
|
||||
<source>Developer Mode Disabled</source>
|
||||
<translation>开发者模式未开启</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="183"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="363"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="505"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="159"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="328"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="451"/>
|
||||
<source>Reinstall</source>
|
||||
<translation>重新安裝</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="190"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="166"/>
|
||||
<source>Upgrade</source>
|
||||
<translation>升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="341"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="481"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="317"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="427"/>
|
||||
<source>Install</source>
|
||||
<translation>安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="346"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="322"/>
|
||||
<source>Installing</source>
|
||||
<translation>正在安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="406"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="410"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="414"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="418"/>
|
||||
<source>Warning</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="460"/>
|
||||
<source>The current application does not support or tested on deepin, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<location filename="../src/pages/appintopage.cpp" line="406"/>
|
||||
<source>The current application does not support deepin, there may be problems</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="464"/>
|
||||
<source>The current application does not support or tested on UOS, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<location filename="../src/pages/appintopage.cpp" line="410"/>
|
||||
<source>The current application does not support UOS, there may be problems</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="468"/>
|
||||
<source>The current application does not support or tested on Ubuntu, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<location filename="../src/pages/appintopage.cpp" line="414"/>
|
||||
<source>The current application does not support Ubuntu, there may be problems</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="472"/>
|
||||
<source>The current application does not support or tested on current platform, there may be problems</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<location filename="../src/pages/appintopage.cpp" line="418"/>
|
||||
<source>The current application does not support current platform, there may be problems</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="482"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="495"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="536"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="482"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>卸载成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/appintopage.cpp" line="551"/>
|
||||
<location filename="../src/pages/appintopage.cpp" line="495"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>链接已复制到剪贴板</translation>
|
||||
</message>
|
||||
@@ -269,24 +268,16 @@
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="142"/>
|
||||
<location filename="../src/application.cpp" line="139"/>
|
||||
<source>Version: %1</source>
|
||||
<translation>版本:%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="152"/>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation>%1遵循%2协议发布</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadController</name>
|
||||
<message>
|
||||
<location filename="../src/backend/downloadworker.cpp" line="180"/>
|
||||
<source>Download Failed, please retry :(</source>
|
||||
<translation>下載失敗,請重試</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DownloadItem</name>
|
||||
<message>
|
||||
@@ -366,17 +357,25 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="229"/>
|
||||
<source>Error happened in dpkg progress , you can try it again.</source>
|
||||
<translation>安装被中止,可重新安装。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="230"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="231"/>
|
||||
<source>Error happened in dpkg progress , please check the install info or try to reinstall.</source>
|
||||
<translation>安裝出現錯誤,請檢查安裝詳情或嘗試重新安裝。</translation>
|
||||
<source>Error happened in dpkg progress , you can try it again</source>
|
||||
<translation>dpkg出现错误,可重新安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="237"/>
|
||||
<source>dpkg progress had been aborted,you can retry installation.</source>
|
||||
<translation>dpkg进程被中断,您可重试安装。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="238"/>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="239"/>
|
||||
<source>dpkg progress had been aborted, please check the install info or try to reinstall.</source>
|
||||
<translation>安裝被中止,請檢查安裝詳情或嘗試重新安裝。</translation>
|
||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||
<translation>安装被中止,可重新安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
|
||||
@@ -411,103 +410,103 @@
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="116"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="166"/>
|
||||
<source>Home</source>
|
||||
<translation>首頁</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="153"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="203"/>
|
||||
<source>Network</source>
|
||||
<translation>網路</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="181"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="231"/>
|
||||
<source>Chat</source>
|
||||
<translation>聊天</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="209"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="259"/>
|
||||
<source>Music</source>
|
||||
<translation>音樂</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="237"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="287"/>
|
||||
<source>Video</source>
|
||||
<translation>播放</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="265"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="315"/>
|
||||
<source>Picture</source>
|
||||
<translation>圖片</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="293"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="343"/>
|
||||
<source>Game</source>
|
||||
<translation>遊戲</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="321"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="371"/>
|
||||
<source>Office</source>
|
||||
<translation>辦公</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="349"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="399"/>
|
||||
<source>Reading</source>
|
||||
<translation>閱讀</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="377"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="427"/>
|
||||
<source>Development</source>
|
||||
<translation>開發</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="405"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="455"/>
|
||||
<source>Tool</source>
|
||||
<translation>工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="433"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="483"/>
|
||||
<source>Theme</source>
|
||||
<translation>主題</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="461"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="511"/>
|
||||
<source>Other</source>
|
||||
<translation>其他</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="489"/>
|
||||
<location filename="../src/mainwindow-dtk.ui" line="539"/>
|
||||
<source>APP Upgrade</source>
|
||||
<translation>軟體更新</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="217"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
|
||||
<source>Submit App</source>
|
||||
<translation>上傳軟體</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="218"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation>從客戶端上傳軟體(推薦的)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
|
||||
<source>Settings</source>
|
||||
<translation>設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="220"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="190"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation>軟體升級 和 安裝設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="271"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="146"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="241"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="176"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="151"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation>搜索或打开链接</translation>
|
||||
</message>
|
||||
@@ -515,19 +514,19 @@
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="36"/>
|
||||
<location filename="../src/application.cpp" line="37"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="149"/>
|
||||
<location filename="../src/application.cpp" line="33"/>
|
||||
<location filename="../src/application.cpp" line="34"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="41"/>
|
||||
<location filename="../src/application.cpp" line="38"/>
|
||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||
<translation><span style=' font-size:10pt;font-weight:60;'>一款由社区提供的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>星火计划开发者</span></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<location filename="../src/application.cpp" line="146"/>
|
||||
<source>Spark Project</source>
|
||||
<translation>星火计划</translation>
|
||||
</message>
|
||||
@@ -537,7 +536,7 @@
|
||||
<translation>下载列表</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="274"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation>显示主窗口</translation>
|
||||
</message>
|
||||
@@ -586,71 +585,62 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="230"/>
|
||||
<source>Other Settings</source>
|
||||
<translation>其他設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="240"/>
|
||||
<source>Enable notification for apps not compatible with current system</source>
|
||||
<translation>開啟應用不相容當前系統提示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="264"/>
|
||||
<source>Temp</source>
|
||||
<translation>缓存目录</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="243"/>
|
||||
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
|
||||
<translation>因为这个目录位于/tmp下,所以即使你不手动清空的话,其也将在系统重启时自动清空。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="284"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="250"/>
|
||||
<source>0B</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="291"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="257"/>
|
||||
<source>Location:/tmp/spark-store</source>
|
||||
<translation>目录位置:/tmp/spark-store</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="311"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="277"/>
|
||||
<source>Clean</source>
|
||||
<translation>清空</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="324"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="290"/>
|
||||
<source>Size:</source>
|
||||
<translation>目录大小:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="331"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="297"/>
|
||||
<source>Clear Web Cache</source>
|
||||
<translation>清理网页缓存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="352"/>
|
||||
<location filename="../src/pages/settingspage.ui" line="318"/>
|
||||
<source>About us</source>
|
||||
<translation>关于我们</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.ui" line="359"/>
|
||||
<source><html><head/><body><p>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. </p><p>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. </p><p>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. </p><p>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.</p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p><p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<translation><html><head/><body><p>我们的服务和软件免费供个人和非营利组织使用、交流和学习,但您在使用过程中必须遵守当地的法律法规,否则出现的任何问题与我们无关。</p><p>我们不从社区版本商店中获利,我们的大部分运营费用依靠社区的捐赠,我们很感激这让我们可以花更少的精力担心钱。但是,为了更好地提供持续的服务,Spark只对个人用户免费开放服务仓库,如果您或您的组织需要提供商业服务或者您的组织是营利性组织,请联系我们获取商业授权。</p><p>严禁用户或组织在使用本软件时从事任何形式的恶意行为,包括但不限于恶意攻击、滥用、破坏、批量抓取软件仓库等。恶意行为的定义由Spark社区判断,违规者将承担法律责任。Spark Community保留发布其生成的软件包的权利。</p><p>未经Spark Community明确授权,禁止任何个人或组织将Spark Community软件包用于商业目的或重新分发。该条款旨在确保开源精神,同时保护Spark社区的知识产权。除此之外,如果您使用Spark Store主程序或其部分代码,则必须遵守GPL v3的所有其他条款和要求。<span style=" font - family:宋体;" <span style=" font - family:宋体;color:#0082fa;">jifengshenmo@outlook.com</span></a>我们会尽快删除侵权内容。</p><p>如果你也想加入我们,无论你是参与开发、设计、推销还是提交作品,我们都欢迎你加入我们。<br/></span>我们的联系方法可以在<a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">找到</span></a></p></body></html></translation>
|
||||
<location filename="../src/pages/settingspage.ui" line="325"/>
|
||||
<source><html><head/><body><p>We are <span style=" font-weight:600;">NOT</span> the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &quot;Spark Store&quot;! &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. </p><p>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. </p><p>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. </p><p>If any part of the store infringes your rights, please tell us <a href="mailto:jifengshenmo@outlook.com"><span style=" text-decoration: underline; color:#0082fa;">jifengshenmo@outlook.com</span></a> we will remove the infringing content as soon as possible. </p><p>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. </p>
|
||||
<p><span style=" text-decoration: underline; color:#0000ff;"><br/></span>Our contact method can be found at <a href="https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/"><span style=" text-decoration: underline; color:#0082fa;">Here</span></a></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="214"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="213"/>
|
||||
<source>Updating, please wait...</source>
|
||||
<translation>正在更新,请稍候……</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/pages/settingspage.cpp" line="236"/>
|
||||
<location filename="../src/pages/settingspage.cpp" line="235"/>
|
||||
<source>Temporary cache was cleaned</source>
|
||||
<translation>缓存目录已清空</translation>
|
||||
</message>
|
||||
@@ -658,12 +648,12 @@
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="275"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
|
||||
<source>About</source>
|
||||
<translation>关于</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="276"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="246"/>
|
||||
<source>Exit</source>
|
||||
<translation>退出</translation>
|
||||
</message>
|
||||
|
||||
Reference in New Issue
Block a user