mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-12-15 13:22:04 +08:00
Compare commits
83 Commits
3.0.3-11-m
...
3.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
| c0ea5824b1 | |||
| ee60b2e7f6 | |||
| 53ae863823 | |||
| 3dae7db89a | |||
| 3b3bf8f0de | |||
| 00f9b62b80 | |||
| 0916a0a97e | |||
|
|
c6505c1c14 | ||
| 4f600f3ec7 | |||
| bf5d0cb75f | |||
| 4ca292bd34 | |||
| 12cf0a3515 | |||
| 18279ec00d | |||
| e415798ee0 | |||
| 89740ad953 | |||
| 3eddb4ce71 | |||
| 239a788019 | |||
| dc6210b545 | |||
| 94d6a566ca | |||
| c66c5c6ca3 | |||
| c974349c9f | |||
| 42362fd0ca | |||
| 63bc01c43d | |||
| 280cd983cb | |||
| 05e95b42e0 | |||
| 2614b4ae05 | |||
| e8d55cadb6 | |||
| 3534b815cc | |||
| ef75e89916 | |||
| e4daffd052 | |||
| 9c29ca2e38 | |||
| 733751db8e | |||
| db739181f2 | |||
| 0bd87eb100 | |||
| 8b690e8dea | |||
| 9329c939d7 | |||
| 232fe777e5 | |||
| 000fcf8c9d | |||
| 30bc12a8b6 | |||
| a7385aff1e | |||
| c5b786d9e6 | |||
| 55d254e147 | |||
| cccad380a4 | |||
| afe5c00af7 | |||
| 55e7fd836c | |||
| 2959d72d1c | |||
| 95b4608e82 | |||
| edef44eea8 | |||
| a4b9bd6a17 | |||
| a165cd7d67 | |||
| 387d21b29f | |||
| 63b8ae5ae7 | |||
| 9ae4fa8372 | |||
| 1eb2f8df91 | |||
| ce1de9c367 | |||
| 80284b22cb | |||
| ad1b69493a | |||
| 7ca5e9b0d0 | |||
| 873a83e6b9 | |||
| da8ee30fbd | |||
| 6d84fa0fe5 | |||
| 41d6272526 | |||
| 0f7bdf484f | |||
| bc67bcb6f0 | |||
| 134586b580 | |||
| d645b26c62 | |||
| fdc818cdb4 | |||
| 1f493a8aca | |||
| 463a8d0c04 | |||
| 932bbd7995 | |||
| 5f45abc484 | |||
| 820ad08bf4 | |||
| 2ddfb3f192 | |||
| b3ca6878ec | |||
| ae6f2354bb | |||
| 591556a7c8 | |||
| 0bcf8a1ee9 | |||
| 15b6a22f49 | |||
| 7f1f5528ef | |||
| 158ba884b1 | |||
| d9a50e7b44 | |||
| 72019f7cce | |||
| c4b26045d9 |
@@ -1,2 +1,4 @@
|
||||
FROM python:3
|
||||
RUN pip3 install requests
|
||||
FROM shenmo7192/uos-21-dtk5.4:1.0
|
||||
ADD . /root/workdir
|
||||
WORKDIR /root/workdir
|
||||
RUN dpkg-buildpackage
|
||||
|
||||
35
.workflow/master-pipeline.yml
Normal file
35
.workflow/master-pipeline.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
version: '1.0'
|
||||
name: dtk-build-commit-20220425
|
||||
displayName: dtk-build-commit
|
||||
triggers:
|
||||
trigger: manual
|
||||
push:
|
||||
branches:
|
||||
prefix:
|
||||
- master
|
||||
tags:
|
||||
prefix:
|
||||
- ''
|
||||
stages:
|
||||
- name: stage-4e566164
|
||||
displayName: build
|
||||
strategy: naturally
|
||||
trigger: auto
|
||||
executor: []
|
||||
steps:
|
||||
- step: execute@docker
|
||||
name: execute_by_docker
|
||||
displayName: 基于镜像的脚本执行
|
||||
certificate: d3a72e50-a6b5-013a-3031-5e77c3ac149e
|
||||
image: hub.docker.com/r/shenmo7192/uos-21-dtk5.4
|
||||
command:
|
||||
- git clone https://gitee.com/deepin-community-store/spark-store
|
||||
- mkdir debs
|
||||
- cd spark-store
|
||||
- dpkg-buildpackage
|
||||
- mv *.deb ../debs
|
||||
- cd ../debs
|
||||
- curl -s --url "smtp://smtp.163.com" --mail-from "sparkstorefeedback@163.com" --mail-rcpt "shenmo@spark-app.store" --upload-file ./*.deb --user "sparkstorefeedback@163.com:YWYGLQNOPLWNNJJY"
|
||||
permissions:
|
||||
- role: admin
|
||||
members: []
|
||||
0
DOCS/.keep
Normal file
0
DOCS/.keep
Normal file
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);
|
||||
}
|
||||
```
|
||||
25
DOCS/spk-doc.md
Normal file
25
DOCS/spk-doc.md
Normal file
@@ -0,0 +1,25 @@
|
||||
#### 调用参数(spk规则)
|
||||
|
||||
参数只有一个Url,该url应当遵循这种格式:`spk://<任意合法字符>/web分类/包名`
|
||||
|
||||
例如:
|
||||
|
||||
[spk://abcdefg/games/store.spark-app.hmcl](spk://abcdefg/games/store.spark-app.hmcl)
|
||||
|
||||
|
||||
可选的web分类:
|
||||
|
||||
| 分类名称 | web分类 |
|
||||
| -------- | -------------- |
|
||||
| 网络应用 | network |
|
||||
| 社交沟通 | chat |
|
||||
| 音乐欣赏 | music |
|
||||
| 视频播放 | video |
|
||||
| 图形图像 | graphics |
|
||||
| 游戏娱乐 | games |
|
||||
| 办公学习 | office |
|
||||
| 阅读翻译 | reading |
|
||||
| 编程开发 | development |
|
||||
| 系统工具 | tools |
|
||||
| 主题美化 | beautify |
|
||||
| 其他应用 | others |
|
||||
375
README.md
375
README.md
@@ -1,388 +1,41 @@
|
||||
# 星火应用商店
|
||||
|
||||
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](https://gitee.com/deepin-community-store/spark-store/members)
|
||||
|
||||
众所周知,国内的Linux应用比较少,wine应用难以获取,优质工具分散在民间各大论坛,无法形成合力,难以改善生态
|
||||
|
||||
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
|
||||
|
||||
我们创建了这个应用商店,广泛收录大家需要的软件包,搜集优质小工具,主动适配wine应用,存放到储存库供大家获取
|
||||
|
||||
我们支持:Deepin 20 ; Ubuntu 20.04 LTS ; UOS Home 20
|
||||
我们支持:Deepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(将会逐渐停止支持) ; UOS Home 21
|
||||
|
||||
希望看到这里的人也可以加入我们的队伍,开发或者投递应用都很欢迎,共同构建Linux应用生态
|
||||
|
||||
### [在这里投稿](https://upload.deepinos.org/index)
|
||||
|
||||
web页面部分正在开发当中,详情请见[web仓库](https://gitee.com/deepin-community-store/DCSAPP_WEB)
|
||||
如果有想要提交的软件包,请 [在这里投稿](https://upload.deepinos.org/index)
|
||||
|
||||
|
||||
#### 说明
|
||||
## 🙌 简单的开始
|
||||
|
||||
当前服务器线路列表(项目中包含):
|
||||
如果想安装 `星火应用商店` ,请打开右侧的 [Release] 页面,找到最新版本,并选择适用于当前系统的安装包下载。
|
||||
|
||||
```
|
||||
https://d.store.deepinos.org.cn/
|
||||
https://store.deepinos.org.cn/
|
||||
```
|
||||
|
||||
#### 调用参数(spk规则)
|
||||
|
||||
参数只有一个Url,该url应当遵循这种格式:`spk://<任意合法字符>/web分类/包名`
|
||||
|
||||
例如:
|
||||
|
||||
[spk://abcdefg/games/store.spark-app.hmcl](spk://abcdefg/games/store.spark-app.hmcl)
|
||||
---
|
||||
#### 编译安装
|
||||
|
||||
|
||||
可选的web分类:
|
||||
|
||||
| 分类名称 | web分类 |
|
||||
| -------- | -------------- |
|
||||
| 网络应用 | network |
|
||||
| 社交沟通 | chat |
|
||||
| 音乐欣赏 | music |
|
||||
| 视频播放 | video |
|
||||
| 图形图像 | graphics |
|
||||
| 游戏娱乐 | games |
|
||||
| 办公学习 | office |
|
||||
| 阅读翻译 | reading |
|
||||
| 编程开发 | development |
|
||||
| 系统工具 | tools |
|
||||
| 主题美化 | beautify |
|
||||
| 其他应用 | others |
|
||||
|
||||
|
||||
|
||||
#### 如何编译
|
||||
|
||||
Deepin V20/UOS 系统下, 安装依赖
|
||||
Deepin V20/UOS 21/ Ubuntu 22.04 系统下, 安装依赖
|
||||
|
||||
```shell
|
||||
sudo apt install qt5-default libdtkcore-dev libdtkgui-dev libdtkwidget-dev qtwebengine5-dev libnotify-dev
|
||||
```
|
||||
sudo apt install qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev
|
||||
|
||||
```
|
||||
然后
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
mkdir build && cd build
|
||||
qmake ..
|
||||
make -j
|
||||
```
|
||||
|
||||
./build 文件夹下的 spark-store 即为可执行文件
|
||||
|
||||
P.S. 安装依赖后直接运行 build.sh 即可编译并打包
|
||||
|
||||
# 星火应用商店文档
|
||||
|
||||
# 目录结构
|
||||
几个目录结构
|
||||
```
|
||||
/
|
||||
/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 里的信息,提取应用名、描述、图标、截图
|
||||
处理完毕后发射相应的信号
|
||||
}
|
||||
dpkg-buildpackage
|
||||
```
|
||||
|
||||
|
||||
**应用下载**
|
||||
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);
|
||||
}
|
||||
```
|
||||
非常感谢有兴趣的开发者或爱好者参与 `星火应用商店` 项目,分享你的见解与思路。
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 46 KiB |
BIN
assets/fonts/Yukarimobile.ttf
Normal file
BIN
assets/fonts/Yukarimobile.ttf
Normal file
Binary file not shown.
@@ -34,7 +34,6 @@
|
||||
<file>icons/refresh-page.svg</file>
|
||||
</qresource>
|
||||
<qresource prefix="/">
|
||||
<file>Logo-Spark.png</file>
|
||||
<file>tags/a2d.png</file>
|
||||
<file>tags/community.svg</file>
|
||||
<file>tags/deepin.svg</file>
|
||||
@@ -51,6 +50,8 @@
|
||||
<file>tags/dwine5-small.png</file>
|
||||
<file>tags/dwine5.svg</file>
|
||||
<file>tags/dwine2-small.png</file>
|
||||
<file>spark-store.png</file>
|
||||
<file>spark-logo.svg</file>
|
||||
</qresource>
|
||||
<qresource prefix="/fonts">
|
||||
<file>fonts/hksnzt.ttf</file>
|
||||
|
||||
253
assets/spark-logo.svg
Normal file
253
assets/spark-logo.svg
Normal file
@@ -0,0 +1,253 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
sodipodi:docname="spark-logo.svg"
|
||||
inkscape:version="1.1 (c4e8f9e, 2021-05-24)"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 180.00012 48.251057"
|
||||
height="48.251057mm"
|
||||
width="180.00012mm"
|
||||
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
|
||||
id="linearGradient1200"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop1196"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:0.1299435" />
|
||||
<stop
|
||||
id="stop1198"
|
||||
offset="1"
|
||||
style="stop-color:#dadada;stop-opacity:0.81960785" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient1138">
|
||||
<stop
|
||||
style="stop-color:#99e7ea;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop1134" />
|
||||
<stop
|
||||
style="stop-color:#007ffc;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop1136" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1128"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop1124"
|
||||
offset="0"
|
||||
style="stop-color:#99e7ea;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop1126"
|
||||
offset="1"
|
||||
style="stop-color:#007ffc;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
only_selected="false"
|
||||
apply_with_weight="true"
|
||||
apply_no_weight="true"
|
||||
helper_size="0"
|
||||
steps="2"
|
||||
weight="33.333333"
|
||||
is_visible="true"
|
||||
id="path-effect960"
|
||||
effect="bspline"
|
||||
lpeversion="0" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
r="90.135414"
|
||||
fy="199.86011"
|
||||
fx="100.35268"
|
||||
cy="199.86011"
|
||||
cx="100.35268"
|
||||
id="radialGradient1130"
|
||||
xlink:href="#linearGradient1128"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="90.135414"
|
||||
fy="199.86011"
|
||||
fx="100.35268"
|
||||
cy="199.86011"
|
||||
cx="100.35268"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient1132"
|
||||
xlink:href="#linearGradient1138"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
r="90.135414"
|
||||
fy="199.86011"
|
||||
fx="100.35268"
|
||||
cy="199.86011"
|
||||
cx="100.35268"
|
||||
id="radialGradient1202"
|
||||
xlink:href="#linearGradient1200"
|
||||
inkscape:collect="always" />
|
||||
<filter
|
||||
id="filter1448"
|
||||
inkscape:label="Drop Shadow"
|
||||
style="color-interpolation-filters:sRGB">
|
||||
<feFlood
|
||||
id="feFlood1438"
|
||||
result="flood"
|
||||
flood-color="rgb(145,145,145)"
|
||||
flood-opacity="0.372549" />
|
||||
<feComposite
|
||||
id="feComposite1440"
|
||||
result="composite1"
|
||||
operator="in"
|
||||
in2="SourceGraphic"
|
||||
in="flood" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur1442"
|
||||
result="blur"
|
||||
stdDeviation="5.2918"
|
||||
in="composite1" />
|
||||
<feOffset
|
||||
id="feOffset1444"
|
||||
result="offset"
|
||||
dy="0"
|
||||
dx="0" />
|
||||
<feComposite
|
||||
id="feComposite1446"
|
||||
result="composite2"
|
||||
operator="over"
|
||||
in2="offset"
|
||||
in="SourceGraphic" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter2201"
|
||||
inkscape:label="Drop Shadow"
|
||||
style="color-interpolation-filters:sRGB">
|
||||
<feFlood
|
||||
id="feFlood2191"
|
||||
result="flood"
|
||||
flood-color="rgb(145,145,145)"
|
||||
flood-opacity="0.372549" />
|
||||
<feComposite
|
||||
id="feComposite2193"
|
||||
result="composite1"
|
||||
operator="in"
|
||||
in2="SourceGraphic"
|
||||
in="flood" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur2195"
|
||||
result="blur"
|
||||
stdDeviation="3.76995"
|
||||
in="composite1" />
|
||||
<feOffset
|
||||
id="feOffset2197"
|
||||
result="offset"
|
||||
dy="0"
|
||||
dx="0" />
|
||||
<feComposite
|
||||
id="feComposite2199"
|
||||
result="composite2"
|
||||
operator="over"
|
||||
in2="offset"
|
||||
in="SourceGraphic" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="946"
|
||||
inkscape:window-width="1920"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:cy="332.14286"
|
||||
inkscape:cx="520.71429"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:pagecheckerboard="0" />
|
||||
<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
|
||||
transform="translate(-34.291348,-63.035531)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1" />
|
||||
<g
|
||||
inkscape:label="Layer 2"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(-34.291348,33.964469)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1002"
|
||||
d="m 50.895965,-25.80076 c 0,0 3.210258,-0.04536 6.509677,1.995776 3.299426,2.041135 5.216663,3.991553 5.840878,5.261592 0.624212,1.270041 2.67521,3.492613 2.630628,7.574884 -0.04461,4.0822665 -0.98091,6.8037874 -2.586039,9.0717077 -1.605128,2.26792732 -4.503272,3.9915518 -7.981044,4.0822737 -3.477778,0.090717 -5.707121,-2.17720666 -6.465096,-3.4472534 -0.757975,-1.270036 -1.070084,-3.9915518 -0.133761,-5.9419619 0.936325,-1.9504282 2.40769,-1.9504282 2.898147,-1.7689877 0.490455,0.181438 0.624213,0.4535811 0.891735,0.9525256 0.26752,0.4989447 0.44587,0.4082311 0.847161,0.1360795 0.401275,-0.2721541 0.535033,-0.5896654 0.445866,-0.9978916 -0.08917,-0.408231 -0.62422,-0.9071732 -1.070092,-1.0432502 -0.445865,-0.1360747 -1.070085,-0.5443017 -1.961822,-0.4082167 -0.891736,0.136065 -2.630623,0.5896548 -4.101988,2.585427 -1.471365,1.9957744 -1.29302,5.0801606 -0.401281,6.5316309 0.891737,1.45147531 2.586035,4.1729873 6.331332,5.1255217 3.745301,0.9525364 9.809105,-1.8597006 11.904684,-6.2141209 2.095577,-4.3544229 2.140168,-6.3955562 2.051001,-9.9788777 -0.08917,-3.583335 -3.254842,-8.935643 -6.777199,-10.886061 -3.522357,-1.950419 -6.152982,-3.084383 -8.872787,-2.630797 z"
|
||||
style="fill:#ffc344;fill-opacity:1;stroke:none;stroke-width:0.0890379px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1012"
|
||||
d="m 52.759546,-7.6807986 c 0,0 -0.882776,-0.833911 -1.670967,0.6414663 -0.788192,1.4753675 -1.166523,2.790373 -0.378332,4.3940472 0.78819,1.6036647 2.427624,2.56586017 4.949854,2.53379165 2.522203,-0.0321084 4.382334,-0.64146726 5.485801,-2.46964635 1.103472,-1.8281836 1.954712,-3.1752577 2.049297,-3.8487984 0.09459,-0.6735444 0.599029,0.096216 0.441394,0.6735407 -0.15764,0.5773125 -0.126112,1.6998816 0.315273,1.4753653 0.441388,-0.2245063 0.788195,-0.5773163 0.851243,-0.4169509 0.06306,0.1603616 -0.50444,1.154644 -0.772422,1.6517766 -0.267993,0.4971326 -1.103472,1.699893 -1.592156,2.16494892 -0.488669,0.46506666 -1.166517,1.1225704 -1.970475,1.6036691 C 59.664103,1.2035109 58.418766,1.7647989 57.725156,1.893092 57.031546,2.0213857 55.644328,2.2940039 54.856131,2.2619316 54.067946,2.2298548 53.059055,2.0855246 51.939826,1.5242442 50.820592,0.96296626 49.606778,0.0969782 49.133864,-0.76900099 48.66095,-1.6349808 47.935815,-2.4207789 48.093452,-4.6017617 c 0.15764,-2.1809854 0.86701,-3.3035574 1.40298,-3.8167243 0.53597,-0.5131766 1.32416,-0.7376922 1.844369,-0.6254295 0.520205,0.1122529 0.851246,0.4169555 0.977357,0.6414613 0.126107,0.224512 0.331042,0.6414675 0.441388,0.7216556 z"
|
||||
style="fill:#f06767;fill-opacity:1;stroke:none;stroke-width:0.0890379px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1014"
|
||||
d="m 60.767575,3.8655962 c 0,0 3.783317,-2.2130621 5.548864,-5.7090499 1.765551,-3.4959942 2.522214,-5.7411261 2.30152,-9.1729813 -0.220695,-3.431843 -0.756663,-1.731959 -0.157641,-3.207334 0.599026,-1.475377 -0.378328,-4.394049 0.03152,-4.586488 0.409861,-0.19244 1.292637,1.282934 1.544859,2.469649 0.252214,1.186712 1.355684,4.843067 0.472911,9.4937107 -0.882773,4.6506303 -2.963589,6.51088559 -4.350812,7.76175223 C 64.77157,2.1657114 61.618812,4.3467019 61.145898,4.314627 60.67298,4.2825186 60.609928,4.2825186 60.76756,3.8655962 Z"
|
||||
style="fill:#3f62eb;fill-opacity:1;stroke:none;stroke-width:0.0890379px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1016"
|
||||
d="m 53.957602,-2.8698091 c 0,0 2.017773,0.4490302 3.562621,-0.5131634 1.544859,-0.9622063 2.742913,-2.5337986 2.932073,-3.1431917 0.189165,-0.6093954 0.220697,0.5452465 0.441386,-0.032045 0.220692,-0.5773293 1.10347,-1.7319649 0.662081,-4.4261318 -0.441389,-2.694157 -0.472916,-2.822457 -1.292627,-4.265758 -0.819727,-1.443301 -2.774446,-3.431845 -3.972493,-4.073313 -1.198047,-0.641466 -2.86901,-1.603666 -5.170538,-1.53952 -2.301517,0.06415 -1.544853,-0.09622 -3.751788,0.288661 -2.206938,0.384879 -4.193179,1.4433 -4.855258,2.02062 -0.66208,0.577321 -2.427629,2.148917 -3.058183,3.014896 -0.630554,0.865981 -2.364573,2.822454 -3.278875,5.5486918 -0.914302,2.7262327 -1.292635,3.0148925 -1.35569,4.8109998 -0.06306,1.7961094 0.157637,2.2772018 -0.220692,2.4375779 -0.378332,0.1603616 -0.315277,-1.3470823 -0.283751,-2.4055093 0.03153,-1.0584128 0.03153,-3.8167249 1.418745,-6.8957642 1.387216,-3.079043 3.846373,-5.644912 5.23359,-6.575039 1.387216,-0.930126 2.995127,-2.180987 5.485811,-2.790382 2.490685,-0.609392 4.981368,-0.513172 6.526228,-0.224513 1.544859,0.288661 3.94096,1.282935 5.23359,2.277208 1.292636,0.994275 2.711385,2.213062 3.78332,4.20161 1.07194,1.988545 1.355684,4.522341 1.324159,5.5807587 -0.03152,1.0584266 -0.567498,3.4960027 -1.387216,4.6827127 -0.819721,1.186715 -1.923185,2.597942 -3.05818,3.1111149 -1.135,0.5131697 -2.522222,0.6735396 -3.657204,0.1603641 C 54.08371,-2.132102 54.146768,-2.3245385 53.957602,-2.869785 Z"
|
||||
style="fill:#fce102;fill-opacity:1;stroke:none;stroke-width:0.0890379px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1018"
|
||||
d="m 53.957602,-2.8698091 c 0,0 1.597697,0.4513829 2.946439,-0.1609516 1.348754,-0.6123403 1.850358,-1.2020043 2.173613,-1.5535277 0.323251,-0.3515343 0.936324,-1.0092338 1.103526,-1.3154017 0.167198,-0.3061663 0.345542,-0.4876031 0.345542,-0.6009978 0,-0.1133983 -0.312104,-0.3855536 -0.01112,-1.043249 0.300955,-0.6576966 0.568485,-2.1658733 0.434721,-2.8462471 -0.133762,-0.680377 -0.445868,-4.456482 -3.121079,-6.973885 -2.675203,-2.517401 -5.328127,-2.81223 -5.328127,-2.81223 0,0 4.235756,1.338077 6.219869,5.397669 1.984117,4.059596 1.337601,6.66771 0.06688,8.2552586 -1.270724,1.5875487 -3.076491,1.7689868 -3.566953,1.3607558 -0.490444,-0.4082292 -1.501077,1.8641068 -1.26328,2.2928065 z"
|
||||
style="fill:#5ed938;fill-opacity:1;stroke:none;stroke-width:0.0890379px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1020"
|
||||
d="m 48.800383,-17.432105 c 0,0 -2.853557,-0.02267 -5.01602,1.406112 -2.16246,1.428797 -3.210252,2.585441 -3.812175,3.492612 -0.601919,0.907174 -1.293016,2.154531 -1.203842,2.131854 0.08917,-0.0227 2.60833,-3.53797 4.57015,-4.445139 1.961822,-0.907173 3.923641,-2.177213 6.621146,-1.247366 2.697505,0.929857 3.968232,2.222571 4.547859,1.905065 0.579629,-0.31751 0.691101,-0.70306 0.356697,-1.133966 -0.334399,-0.430906 -2.697508,-2.540081 -6.063815,-2.109172 z"
|
||||
style="fill:#8fdbe9;fill-opacity:1;stroke:none;stroke-width:0.0890379px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1022"
|
||||
d="m 44.530829,0.69033794 c 0.189165,0.0962163 1.607908,2.56586906 2.742905,2.98282056 1.134994,0.4169541 1.891657,0.4490201 2.017767,0.6414685 0.126111,0.192439 0.09459,1.1546409 1.103469,1.5716019 1.008886,0.4169522 5.738036,1.7319552 7.09372,1.8602476 1.355695,0.1282956 0.2207,0.9301201 1.040416,1.2187811 0.819723,0.2886654 4.319291,0.4490282 5.170539,0.096218 0.851247,-0.3528 0.851247,0.3207371 -0.630553,0.8980604 -1.481799,0.577316 -5.391228,1.956476 -7.944967,1.635743 C 52.570379,11.274546 49.543723,10.729296 47.84123,9.5105098 46.138737,8.2917237 45.413601,7.7464765 46.044154,7.6502577 c 0.630553,-0.096225 2.30152,1.6998841 3.026654,1.8923257 0.725137,0.1924358 1.324162,0.1924358 0.882773,-0.2565932 C 49.512197,8.8369677 46.64318,6.8484212 46.359433,6.9446376 46.075682,7.0408596 45.476656,7.1050004 44.972214,6.4314646 44.467772,5.7579276 41.819449,2.0374171 41.977086,0.04887194 42.134727,-1.9396732 42.63917,-1.4265066 43.238195,-0.6888129 c 0.599024,0.73768484 1.292634,1.37915084 1.292634,1.37915084 z"
|
||||
style="fill:#fd7aff;fill-opacity:1;stroke:none;stroke-width:0.0890379px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:1.28957px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0322394"
|
||||
x="80.617455"
|
||||
y="4.5832744"
|
||||
id="text24207"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan24205"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.4338px;font-family:Yukarimobile;-inkscape-font-specification:'Yukarimobile, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#1d2129;fill-opacity:1;stroke-width:0.0322394"
|
||||
x="80.617455"
|
||||
y="4.5832744">spark</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/spark-store.png
Normal file
BIN
assets/spark-store.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.5 KiB |
BIN
assets/spark-store.xcf
Normal file
BIN
assets/spark-store.xcf
Normal file
Binary file not shown.
30
debian/changelog
vendored
30
debian/changelog
vendored
@@ -1,3 +1,33 @@
|
||||
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
|
||||
|
||||
17
debian/control
vendored
17
debian/control
vendored
@@ -11,9 +11,9 @@ Build-Depends:
|
||||
libqt5widgets5,
|
||||
libqt5network5,
|
||||
libqt5concurrent5,
|
||||
libdtkcore-dev(>=5.4),
|
||||
libdtkgui-dev(>=5.4),
|
||||
libdtkwidget-dev(>=5.4),
|
||||
libdtkcore-dev(>=5.2),
|
||||
libdtkgui-dev(>=5.2),
|
||||
libdtkwidget-dev(>=5.2),
|
||||
qttools5-private-dev,
|
||||
libnotify-dev,
|
||||
qtwebengine5-dev
|
||||
@@ -29,9 +29,12 @@ Depends:${shlibs:Depends}, ${misc:Depends},
|
||||
libqt5widgets5,
|
||||
libqt5network5,
|
||||
libqt5concurrent5,
|
||||
libdtkcore5(>=5.4),
|
||||
libdtkgui5(>=5.4),
|
||||
libdtkwidget5(>=5.4),
|
||||
libnotify4
|
||||
libdtkcore5,
|
||||
libdtkgui5,
|
||||
libdtkwidget5,
|
||||
libnotify4,
|
||||
curl,
|
||||
dde-qt5integration
|
||||
Description: Spark Store
|
||||
A community powered app store, based on DTK.
|
||||
Recommends: apt-fast
|
||||
|
||||
2
debian/spark-store.postinst
vendored
2
debian/spark-store.postinst
vendored
@@ -20,7 +20,7 @@ case "$1" in
|
||||
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
|
||||
apt update
|
||||
apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||
|
||||
# Create symbo links to start upgrade detect
|
||||
ln -s /opt/durapps/spark-store/bin/update-upgrade/autostart/spark-update-notifier.desktop /etc/xdg/autostart/spark-update-notifier.desktop
|
||||
|
||||
27
debian/spark-store.preinst
vendored
Executable file
27
debian/spark-store.preinst
vendored
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
#检测网络链接畅通
|
||||
function network-check()
|
||||
{
|
||||
#超时时间
|
||||
local timeout=1
|
||||
|
||||
#目标网站
|
||||
local target=www.baidu.com
|
||||
|
||||
#获取响应状态码
|
||||
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
|
||||
|
||||
if [ "x$ret_code" = "x200" ]; then
|
||||
echo "Network Checked successful ! Continue..."
|
||||
echo "网络通畅,继续安装"
|
||||
else
|
||||
#网络不畅通
|
||||
echo "Network failed ! Cancel the installation"
|
||||
echo "网络不畅,终止安装"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
network-check
|
||||
@@ -33,6 +33,9 @@ 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/store.spark-app.ssinstall.policy
|
||||
polkit-1.path = /usr/share/polkit-1/actions/
|
||||
|
||||
|
||||
icon.files += pkg/usr/share/icons/hicolor/scalable/apps/spark-store.svg
|
||||
icon.path = /usr/share/icons/hicolor/scalable/apps
|
||||
@@ -48,4 +51,6 @@ INSTALLS += \
|
||||
sourceslist \
|
||||
preferences \
|
||||
tmp \
|
||||
service
|
||||
service
|
||||
# polkit-1
|
||||
# 暂时不添加
|
||||
|
||||
@@ -71,7 +71,7 @@ void downloadlist::setValue(qint64 value)
|
||||
ui->label_2->setText(QString::number(double(value) / 100) + "% (" + speed + ")");
|
||||
if(ui->label_2->text().left(4) == "100%")
|
||||
{
|
||||
ui->label_2->setText(tr("Downloaded, waiting to install"));
|
||||
ui->label_2->setText(tr("Downloaded. Open APP Upgrade and Install Settings to enable password-free installation"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
47
src/main.cpp
47
src/main.cpp
@@ -1,7 +1,7 @@
|
||||
#include <DApplication>
|
||||
#include <DApplicationSettings>
|
||||
#include <DWidgetUtil> // Dtk::Widget::moveToCenter(&w); 要调用它,就得引用 DWidgetUtil
|
||||
|
||||
#include <DAboutDialog>
|
||||
#include <QVector>
|
||||
#include <QScreen>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
DWIDGET_USE_NAMESPACE
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
//DApplication::loadDXcbPlugin(); // 已废弃
|
||||
DApplication::loadDXcbPlugin(); // 已废弃,但是对于非deepin桌面可以正常使用标题栏
|
||||
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持
|
||||
// 程序内强制添加"-platformtheme deepin"参数喂给Qt让Qt正确使用Deepin主题修复各种奇怪样式问题
|
||||
QVector<char*> fakeArgs(argc + 2);
|
||||
@@ -21,36 +21,37 @@ int main(int argc, char *argv[])
|
||||
int fakeArgc = argc + 2; // 为啥DApplication的argc要用引用啊?
|
||||
DApplication a(fakeArgc, fakeArgs.data());
|
||||
|
||||
|
||||
a.setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||
a.loadTranslator(); // 载入翻译
|
||||
|
||||
/* Customized DAboutDialog (Can't work on other distro like Ubuntu...)
|
||||
*
|
||||
* DAboutDialog dialog;
|
||||
* a.setAboutDialog(&dialog);
|
||||
* dialog.setLicense(QObject::tr("We publish this program under GPL V3"));
|
||||
* dialog.setVersion(DApplication::buildVersion("Version 2.0.2.5"));
|
||||
* dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo
|
||||
* dialog.setProductName(QLabel::tr("Spark Store"));
|
||||
* dialog.setDescription(
|
||||
* QObject::tr(
|
||||
* "<span style=' font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/>"
|
||||
* "<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
|
||||
* "<span style=' font-size:12pt;'>Spark developers</span>"
|
||||
* )
|
||||
* );
|
||||
* dialog.setProductName(QLabel::tr("Spark Store"));
|
||||
* dialog.setCompanyLogo(QPixmap(":/Logo-Spark.png"));
|
||||
* dialog.setWebsiteName(QObject::tr("The Spark Project"));
|
||||
* dialog.setWebsiteLink("https://gitee.com/deepin-community-store");
|
||||
*/
|
||||
//Customized DAboutDialog
|
||||
|
||||
DAboutDialog dialog;
|
||||
a.setAboutDialog(&dialog);
|
||||
dialog.setLicense(QObject::tr("We publish this program under GPL V3"));
|
||||
dialog.setVersion(DApplication::buildVersion("Version 3.1"));
|
||||
dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo
|
||||
dialog.setProductName(QLabel::tr("Spark Store"));
|
||||
dialog.setDescription(
|
||||
QObject::tr(
|
||||
"<span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/>"
|
||||
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
|
||||
"<span style=' font-size:12pt;'>Spark developers</span>"
|
||||
)
|
||||
);
|
||||
dialog.setProductName(QLabel::tr("Spark Store"));
|
||||
dialog.setCompanyLogo(QPixmap(":/spark-store.png"));
|
||||
dialog.setWebsiteName(QObject::tr("The Spark Project"));
|
||||
dialog.setWebsiteLink("https://gitee.com/deepin-community-store");
|
||||
|
||||
|
||||
a.setProductName(QLabel::tr("Spark Store"));
|
||||
a.setProductIcon(QIcon::fromTheme("spark-store")); //设置Logo
|
||||
a.setOrganizationName("spark-union");
|
||||
a.setOrganizationDomain("https://www.deepinos.org/");
|
||||
a.setApplicationName("Spark Store"); //不需要翻译,否则 ~/.local/share/ 下文件夹名称也被翻译为中文
|
||||
a.setApplicationVersion(DApplication::buildVersion("3.0.3-11"));
|
||||
a.setApplicationVersion(DApplication::buildVersion("3.1"));
|
||||
a.setApplicationAcknowledgementPage("https://gitee.com/deepin-community-store/spark-store");
|
||||
a.setApplicationDescription(
|
||||
QObject::tr(
|
||||
|
||||
@@ -192,7 +192,7 @@ void Widget::initUI()
|
||||
// 添加菜单项
|
||||
QAction *actionSubmission = new QAction(tr("Submit App"), this);
|
||||
QAction *setting = new QAction(tr("Settings"));
|
||||
QAction *upgrade = new QAction(tr("App Upgrade"));
|
||||
QAction *upgrade = new QAction(tr("APP Upgrade and Install Settings"));
|
||||
|
||||
QMenu *menu = new QMenu;
|
||||
menu->addAction(setting);
|
||||
|
||||
@@ -766,10 +766,10 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Capable to Ubuntu 20.04</p></body></html></string>
|
||||
<string><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string><html><head/><body><p>Capable to Ubuntu 20.04</p></body></html></string>
|
||||
<string><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></string>
|
||||
|
||||
18
tool/auto-install-policy/store.spark-app.ssinstall.policy
Normal file
18
tool/auto-install-policy/store.spark-app.ssinstall.policy
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
|
||||
<policyconfig>
|
||||
<vendor>Spark Store</vendor>
|
||||
<icon_name>x-package-repository</icon_name>
|
||||
<action id="org.maicss.dnf">
|
||||
<description>运行ssinstall需要权限</description>
|
||||
<message>要使用ssinstall需要权限</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">/usr/local/bin/ssinstall</annotate>
|
||||
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
|
||||
</action>
|
||||
</policyconfig>
|
||||
17
tool/password-check/ss-certificate-passwd
Executable file
17
tool/password-check/ss-certificate-passwd
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
uname=`whoami`
|
||||
echo "Now input the password of $uname"
|
||||
read upass
|
||||
passcheck=`echo "$upass" | sudo -S echo "i love amber forever"`
|
||||
passcheck=`echo "$upass" | sudo -S echo "i love amber forever"`
|
||||
reset
|
||||
###UOS魔改的sudo返回了验证成功干扰判断,会变成验证成功i love amber forever
|
||||
### 听我说谢谢你,因为有你,温暖了四季
|
||||
###fuck♂you 就不能改的不那么坑爹吗???还是我用来捕捉的方法太笨了。。。
|
||||
if [ "$passcheck" != "i love amber forever" ];then
|
||||
echo "114514首"
|
||||
exit 1
|
||||
else
|
||||
reset
|
||||
echo "go go Baron Bunny"
|
||||
fi
|
||||
111
tool/ssinstall
111
tool/ssinstall
@@ -1,3 +1,112 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
#将来可能可以换成apt-metalink来直接用种子/链接下载
|
||||
|
||||
echo "Spark Store Install script.星火商店安装脚本"
|
||||
|
||||
#################检测文件是否存在
|
||||
if [ $# -eq 0 ];then
|
||||
echo "没有接收到参数,退出"
|
||||
echo "用法:$0 deb路径"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! -f "$1" ]
|
||||
then
|
||||
echo "文件不存在"
|
||||
exit 1
|
||||
fi
|
||||
#################root校验+要密码
|
||||
if [ "$(id -u)" != "0" ]
|
||||
then
|
||||
echo "ssinstall需要在root下运行";
|
||||
uname=`whoami`
|
||||
echo "Now input the password of $uname"
|
||||
read upass
|
||||
################检查密码对不对
|
||||
echo "$upass" | sudo -S echo "i love amber forever"
|
||||
passcheck=`echo "$upass" | sudo -S echo "i love amber forever"`
|
||||
if [ "$passcheck" != "i love amber forever" ];then
|
||||
echo "-----------------------------------------------------"
|
||||
echo "E:密码错误,退出脚本!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
##################apt-fast/metalink测试
|
||||
DEPEND=`which apt-fast`
|
||||
isuos=`cat /etc/os-release | grep UnionTech`
|
||||
|
||||
|
||||
##############判断是否是root运行,如果是,则正常走;如果不是,则代输密码
|
||||
if [ "$(id -u)" != "0" ];then
|
||||
#############################无root权限时
|
||||
#临时提升星火源的优先级
|
||||
echo "$upass" | sudo -S sed -i 's/400/500/g' /etc/apt/preferences.d/sparkstore
|
||||
|
||||
if [ "$DEPEND" = "" ] ; then
|
||||
echo "没有检测到apt-fast组件,将会使用单线程下载依赖"
|
||||
echo "你可以安装apt-fast来加速下载(对UOS无效)"
|
||||
echo "若要使用apt-fast加速下载,请在安装apt-fast时选择使用apt并选择略过确认对话框"
|
||||
echo ----------------------------------------------------------------------------------
|
||||
echo "$upass" | sudo -S dpkg -i $1 || apt install -yf || dpkg -P $1
|
||||
fi
|
||||
|
||||
|
||||
if [ "$DEPEND" != "" ] && [ "$isuos" != "" ]; then
|
||||
echo "UOS中系统依赖无法使用第三方下载工具,放弃使用apt-fast"
|
||||
echo ----------------------------------------------------------------------------------
|
||||
echo "$upass" | sudo -S dpkg -i $1 || apt install -yf || dpkg -P $1
|
||||
fi
|
||||
|
||||
if [ "$DEPEND" != "" ] && [ "$isuos" = "" ]; then
|
||||
echo "检测到apt-fast,使用apt-fast进行多线程下载加速"
|
||||
echo ----------------------------------------------------------------------------------
|
||||
echo "$upass" | sudo -S dpkg -i $1 || apt-fast install -yf || dpkg -P $1
|
||||
fi
|
||||
|
||||
echo "$upass" | sudo -S sed -i 's/500/400/g' /etc/apt/preferences.d/sparkstore
|
||||
#恢复优先级
|
||||
|
||||
|
||||
|
||||
else
|
||||
###########################有root权限时
|
||||
|
||||
#临时提升星火源的优先级
|
||||
sed -i 's/400/500/g' /etc/apt/preferences.d/sparkstore
|
||||
|
||||
if [ "$DEPEND" = "" ] ; then
|
||||
echo "没有检测到apt-fast组件,将会使用单线程下载依赖"
|
||||
echo "你可以安装apt-fast来加速下载(对UOS无效)"
|
||||
echo "若要使用apt-fast加速下载,请在安装apt-fast时选择使用apt并选择略过确认对话框"
|
||||
echo ----------------------------------------------------------------------------------
|
||||
dpkg -i $1 || apt install -yf || dpkg -P $1
|
||||
fi
|
||||
|
||||
|
||||
if [ "$DEPEND" != "" ] && [ "$isuos" != "" ]; then
|
||||
echo "UOS中系统依赖无法使用第三方下载工具,放弃使用apt-fast"
|
||||
echo ----------------------------------------------------------------------------------
|
||||
dpkg -i $1 || apt install -yf || dpkg -P $1
|
||||
fi
|
||||
|
||||
if [ "$DEPEND" != "" ] && [ "$isuos" = "" ]; then
|
||||
echo "检测到apt-fast,使用apt-fast进行多线程下载加速"
|
||||
echo ----------------------------------------------------------------------------------
|
||||
dpkg -i $1 || apt-fast install -yf || dpkg -P $1
|
||||
fi
|
||||
|
||||
sed -i 's/500/400/g' /etc/apt/preferences.d/sparkstore
|
||||
#恢复优先级
|
||||
|
||||
|
||||
|
||||
fi
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
DEPEND=`which apt-fast`
|
||||
if [ "$DEPEND" = "" ] ; then
|
||||
echo "没有安装apt-fast,使用apt运行"
|
||||
sudo apt upgrade -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||
|
||||
else
|
||||
echo "已安装apt-fast,使用apt-fast加速运行"
|
||||
sudo apt-fast upgrade -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||
fi
|
||||
@@ -1,46 +1,71 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
echo "因为目前没有有时间的Qt程序员志愿者所以现在加功能只有让shenmo写脚本了..."
|
||||
echo
|
||||
echo "此功能被添加的原因是:为了防止影响系统更新,星火源默认的优先级是400,低于默认的500。这导致了与系统仓库相同包名的软件包无法正常更新到比系统仓库更高的版本。例如:hugo,系统仓库中的低版本会被优先安装,而且默认不会更新到星火的更新的版本"
|
||||
echo "此脚本可以检测星火源中是否有比当前系统更高版本的软件包,由您决定是否安装"
|
||||
echo "此脚本使用apt update/apt list --upgrade/apt upgrade来更新软件源、列出更新列表和操作更新"
|
||||
echo
|
||||
echo "该脚本不对其使用效果有任何明示或暗示的担保,在使用前请您确保您清楚地知道您在干什么。您应当清楚,星火商店的软件包并不是适配所有发行版的;尽管绝大多数的软件更新是无害的,您仍然应该仔细检查显示出来的更新内容,以确保不会对您的依赖环境造成破坏,尤其是那些看起来和系统依赖相关的软件包。在查看过更新列表之后,确认更新之前,您仍有一次取消更新的机会。"
|
||||
echo "本脚本的开发者不对使用该脚本可能造成的后果负责"
|
||||
echo
|
||||
echo
|
||||
echo
|
||||
echo "请按任意键继续..."
|
||||
read
|
||||
|
||||
reset
|
||||
|
||||
endloop=0
|
||||
|
||||
#####################检测是否启动过了更新检测工具
|
||||
while [ $endloop -eq 0 ] ;do
|
||||
echo "欢迎使用星火更新工具 脚本版 "
|
||||
|
||||
if [ -f /etc/xdg/autostart/spark-update-notifier.desktop ];then
|
||||
text_update_open="关闭"
|
||||
#已经开启了就显示关闭
|
||||
else
|
||||
text_update_open="开启"
|
||||
fi
|
||||
|
||||
if [ -f /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy ];then
|
||||
text_auto_install_open="关闭"
|
||||
#已经开启了就显示关闭
|
||||
else
|
||||
text_auto_install_open="开启"
|
||||
fi
|
||||
|
||||
|
||||
echo "欢迎使用星火更新和安装设置工具"
|
||||
echo "请在以下操作中选择一个进行~"
|
||||
echo "输入1 开启或关闭星火更新检测工具(如果开启则会在系统启动后自动检测更新。如有更新则会弹出通知)"
|
||||
echo "输入0 查看自动更新相关功能使用前须知(重要)"
|
||||
echo "输入1 $text_update_open星火更新检测工具(如果开启则会在系统启动后自动检测更新。如有更新则会弹出通知)"
|
||||
echo "输入2 查看可更新软件包列表并决定是否更新"
|
||||
echo "输入3 退出脚本"
|
||||
echo "输入3 $text_auto_install_open点击安装免输入密码功能"
|
||||
echo "输入4 退出脚本"
|
||||
read option
|
||||
|
||||
case $option in
|
||||
0)
|
||||
reset
|
||||
echo "此须知适用于自动更新功能"
|
||||
echo "此脚本可以检测星火源中是否有比当前系统更高版本的软件包,由您决定是否安装"
|
||||
echo "此脚本使用apt update/apt list --upgrade/apt upgrade来更新软件源、列出更新列表和操作更新"
|
||||
echo
|
||||
echo "该脚本不对其使用效果有任何明示或暗示的担保,在使用前请您确保您清楚地知道您在干什么。您应当清楚,星火商店的软件包并不是适配所有发行版的;尽管绝大多数的软件更新是无害的,您仍然应该仔细检查显示出来的更新内容,以确保不会对您 的依赖环境造成破坏,尤其是那些看起来和系统依赖相关的软件包。在查看过更新列表之后,确认更新之前,您仍有一次取消更新的机会。"
|
||||
echo "本脚本的开发者不对使用该脚本可能造成的后果负责"
|
||||
echo
|
||||
echo
|
||||
echo
|
||||
echo "请按回车继续..."
|
||||
#"只有回车可以用啊!""啊?"“你说的任意都行啊”“唔。。。戳到我的盲区了”
|
||||
read
|
||||
reset
|
||||
;;
|
||||
1)
|
||||
echo "执行以下操作需要授权..."
|
||||
if [ -f /etc/xdg/autostart/spark-update-notifier.desktop ];then
|
||||
echo "检测到已经启动了自动更新检测,关闭中"
|
||||
echo "检测到已经启动了自动更新检测,执行关闭"
|
||||
sudo systemctl disable spark-update-notifier
|
||||
sudo rm /etc/xdg/autostart/spark-update-notifier.desktop
|
||||
|
||||
sleep 3
|
||||
reset
|
||||
else
|
||||
echo "未检测到自动更新检测,启动中"
|
||||
echo "未检测到自动更新检测,启动"
|
||||
sudo systemctl enable spark-update-notifier
|
||||
sudo service spark-update-notifier start
|
||||
# ln -s /opt/durapps/spark-store/bin/update-upgrade/autostart/spark-update-notifier.desktop $XDG_CONFIG_HOME/autostart
|
||||
#
|
||||
sudo ln -s /opt/durapps/spark-store/bin/update-upgrade/autostart/spark-update-notifier.desktop /etc/xdg/autostart
|
||||
/opt/durapps/spark-store/bin/update-upgrade/ss-update-notify.sh now
|
||||
sleep 3
|
||||
reset
|
||||
fi
|
||||
;;
|
||||
|
||||
@@ -48,10 +73,40 @@ case $option in
|
||||
echo "执行以下操作需要授权..."
|
||||
/opt/durapps/spark-store/bin/update-upgrade/ss-upgrade-list.sh
|
||||
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh
|
||||
|
||||
echo "请按回车返回"
|
||||
read
|
||||
reset
|
||||
;;
|
||||
3)
|
||||
echo "按回车退出"
|
||||
if [ -f /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy ];then
|
||||
echo "检测到已经启动了免输入密码,执行关闭"
|
||||
sudo rm /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
|
||||
sleep 3
|
||||
reset
|
||||
else
|
||||
|
||||
cat << EOF
|
||||
请注意:这个功能尚未开发完成,一旦开启,则运行pkexec ssinstall时不再需要授权
|
||||
仅对星火内置安装器生效
|
||||
理论上会存在一定的安全风险~
|
||||
如果接受,请输入1,否则输入2
|
||||
EOF
|
||||
read is_accept_polkiy
|
||||
|
||||
if [ "$is_accept_polkiy" = "1" ];then
|
||||
echo "执行以下操作需要授权..."
|
||||
sudo ln /opt/durapps/spark-store/bin/auto-install-policy/store.spark-app.ssinstall.policy /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
|
||||
echo 已启动
|
||||
sleep 3
|
||||
reset
|
||||
else
|
||||
echo 未同意,返回
|
||||
sleep 3
|
||||
reset
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
4)
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
<context>
|
||||
<name>QLabel</name>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="40"/>
|
||||
<location filename="../src/main.cpp" line="35"/>
|
||||
<location filename="../src/main.cpp" line="43"/>
|
||||
<location filename="../src/main.cpp" line="49"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -20,7 +22,22 @@
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="48"/>
|
||||
<location filename="../src/main.cpp" line="32"/>
|
||||
<source>We publish this program under GPL V3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="37"/>
|
||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="45"/>
|
||||
<source>The Spark Project</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="57"/>
|
||||
<source><span style='font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style='font-size:12pt;'>Spark developers</span><br/><br/>Published under GPL V3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -127,8 +144,8 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="547"/>
|
||||
<location filename="../src/widget.cpp" line="902"/>
|
||||
<location filename="../src/widget.cpp" line="1171"/>
|
||||
<location filename="../src/widget.cpp" line="906"/>
|
||||
<location filename="../src/widget.cpp" line="1175"/>
|
||||
<source>Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -153,12 +170,6 @@
|
||||
<source><html><head/><body><p><img src=":/tags/community-small.png"/></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="769"/>
|
||||
<location filename="../src/widget.ui" line="772"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 20.04</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="775"/>
|
||||
<source><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></source>
|
||||
@@ -279,6 +290,12 @@
|
||||
<source>Network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="769"/>
|
||||
<location filename="../src/widget.ui" line="772"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="845"/>
|
||||
<location filename="../src/widget.ui" line="848"/>
|
||||
@@ -431,72 +448,77 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="340"/>
|
||||
<location filename="../src/widget.cpp" line="195"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="344"/>
|
||||
<source>Not Exist</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="138"/>
|
||||
<location filename="../src/widget.cpp" line="402"/>
|
||||
<location filename="../src/widget.cpp" line="407"/>
|
||||
<location filename="../src/widget.cpp" line="417"/>
|
||||
<location filename="../src/widget.cpp" line="422"/>
|
||||
<location filename="../src/widget.cpp" line="406"/>
|
||||
<location filename="../src/widget.cpp" line="411"/>
|
||||
<location filename="../src/widget.cpp" line="421"/>
|
||||
<location filename="../src/widget.cpp" line="426"/>
|
||||
<source>Spark\ Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="652"/>
|
||||
<location filename="../src/widget.cpp" line="891"/>
|
||||
<location filename="../src/widget.cpp" line="656"/>
|
||||
<location filename="../src/widget.cpp" line="895"/>
|
||||
<source>Reinstall</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="618"/>
|
||||
<location filename="../src/widget.cpp" line="622"/>
|
||||
<source>Failed to get the name to the file to be downloaded.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="896"/>
|
||||
<location filename="../src/widget.cpp" line="900"/>
|
||||
<source>Upgrade</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1079"/>
|
||||
<location filename="../src/widget.cpp" line="1083"/>
|
||||
<source>Updating, please wait...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1140"/>
|
||||
<location filename="../src/widget.cpp" line="1144"/>
|
||||
<source>Apt has reported an error. Please use apt update in terminal to locate the problem.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1147"/>
|
||||
<location filename="../src/widget.cpp" line="1151"/>
|
||||
<source>Unknown error!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1175"/>
|
||||
<location filename="../src/widget.cpp" line="1179"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="702"/>
|
||||
<location filename="../src/widget.cpp" line="706"/>
|
||||
<source>Relative apps Not Found!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="711"/>
|
||||
<location filename="../src/widget.cpp" line="715"/>
|
||||
<source>Request Error: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1197"/>
|
||||
<location filename="../src/widget.cpp" line="1201"/>
|
||||
<source>Temporary cache was cleaned</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1279"/>
|
||||
<location filename="../src/widget.cpp" line="1283"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -559,52 +581,52 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="69"/>
|
||||
<source>Downloaded, waiting to install</source>
|
||||
<location filename="../src/downloadlist.cpp" line="74"/>
|
||||
<source>Downloaded. Open APP Upgrade and Install Settings to enable password-free installation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="95"/>
|
||||
<location filename="../src/downloadlist.cpp" line="100"/>
|
||||
<source>Failed to download %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="97"/>
|
||||
<location filename="../src/downloadlist.cpp" line="102"/>
|
||||
<source>Download Failed,Check Your Connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="109"/>
|
||||
<location filename="../src/downloadlist.cpp" line="114"/>
|
||||
<source>Finished downloading %1, awaiting to install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="142"/>
|
||||
<location filename="../src/downloadlist.cpp" line="147"/>
|
||||
<source>Installing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="185"/>
|
||||
<location filename="../src/downloadlist.cpp" line="190"/>
|
||||
<source>Finish</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="191"/>
|
||||
<location filename="../src/downloadlist.cpp" line="196"/>
|
||||
<source>Retry</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="192"/>
|
||||
<location filename="../src/downloadlist.cpp" line="197"/>
|
||||
<source>Error happened in dpkg progress , you can try it again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="198"/>
|
||||
<location filename="../src/downloadlist.cpp" line="203"/>
|
||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="220"/>
|
||||
<location filename="../src/downloadlist.cpp" line="225"/>
|
||||
<source>Download canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
@@ -23,7 +23,9 @@ Spark Store est publié sous licence GPL V3
|
||||
Nous sommes nés pour le changement.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="40"/>
|
||||
<location filename="../src/main.cpp" line="35"/>
|
||||
<location filename="../src/main.cpp" line="43"/>
|
||||
<location filename="../src/main.cpp" line="49"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -31,7 +33,22 @@ Nous sommes nés pour le changement.</translation>
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="48"/>
|
||||
<location filename="../src/main.cpp" line="32"/>
|
||||
<source>We publish this program under GPL V3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="37"/>
|
||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="45"/>
|
||||
<source>The Spark Project</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="57"/>
|
||||
<source><span style='font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style='font-size:12pt;'>Spark developers</span><br/><br/>Published under GPL V3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -188,8 +205,8 @@ Nous sommes nés pour le changement.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="547"/>
|
||||
<location filename="../src/widget.cpp" line="902"/>
|
||||
<location filename="../src/widget.cpp" line="1171"/>
|
||||
<location filename="../src/widget.cpp" line="906"/>
|
||||
<location filename="../src/widget.cpp" line="1175"/>
|
||||
<source>Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -232,7 +249,7 @@ Nous sommes nés pour le changement.</translation>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="769"/>
|
||||
<location filename="../src/widget.ui" line="772"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 20.04</p></body></html></source>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -585,10 +602,10 @@ Nous sommes nés pour le changement.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="138"/>
|
||||
<location filename="../src/widget.cpp" line="402"/>
|
||||
<location filename="../src/widget.cpp" line="407"/>
|
||||
<location filename="../src/widget.cpp" line="417"/>
|
||||
<location filename="../src/widget.cpp" line="422"/>
|
||||
<location filename="../src/widget.cpp" line="406"/>
|
||||
<location filename="../src/widget.cpp" line="411"/>
|
||||
<location filename="../src/widget.cpp" line="421"/>
|
||||
<location filename="../src/widget.cpp" line="426"/>
|
||||
<source>Spark\ Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -613,63 +630,68 @@ Nous sommes nés pour le changement.</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="340"/>
|
||||
<location filename="../src/widget.cpp" line="195"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="344"/>
|
||||
<source>Not Exist</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="652"/>
|
||||
<location filename="../src/widget.cpp" line="891"/>
|
||||
<location filename="../src/widget.cpp" line="656"/>
|
||||
<location filename="../src/widget.cpp" line="895"/>
|
||||
<source>Reinstall</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="618"/>
|
||||
<location filename="../src/widget.cpp" line="622"/>
|
||||
<source>Failed to get the name to the file to be downloaded.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="702"/>
|
||||
<location filename="../src/widget.cpp" line="706"/>
|
||||
<source>Relative apps Not Found!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="711"/>
|
||||
<location filename="../src/widget.cpp" line="715"/>
|
||||
<source>Request Error: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="896"/>
|
||||
<location filename="../src/widget.cpp" line="900"/>
|
||||
<source>Upgrade</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1079"/>
|
||||
<location filename="../src/widget.cpp" line="1083"/>
|
||||
<source>Updating, please wait...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1140"/>
|
||||
<location filename="../src/widget.cpp" line="1144"/>
|
||||
<source>Apt has reported an error. Please use apt update in terminal to locate the problem.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1147"/>
|
||||
<location filename="../src/widget.cpp" line="1151"/>
|
||||
<source>Unknown error!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1175"/>
|
||||
<location filename="../src/widget.cpp" line="1179"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1197"/>
|
||||
<location filename="../src/widget.cpp" line="1201"/>
|
||||
<source>Temporary cache was cleaned</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1279"/>
|
||||
<location filename="../src/widget.cpp" line="1283"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -753,52 +775,52 @@ Nous sommes nés pour le changement.</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="69"/>
|
||||
<source>Downloaded, waiting to install</source>
|
||||
<location filename="../src/downloadlist.cpp" line="74"/>
|
||||
<source>Downloaded. Open APP Upgrade and Install Settings to enable password-free installation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="95"/>
|
||||
<location filename="../src/downloadlist.cpp" line="100"/>
|
||||
<source>Failed to download %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="97"/>
|
||||
<location filename="../src/downloadlist.cpp" line="102"/>
|
||||
<source>Download Failed,Check Your Connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="109"/>
|
||||
<location filename="../src/downloadlist.cpp" line="114"/>
|
||||
<source>Finished downloading %1, awaiting to install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="142"/>
|
||||
<location filename="../src/downloadlist.cpp" line="147"/>
|
||||
<source>Installing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="185"/>
|
||||
<location filename="../src/downloadlist.cpp" line="190"/>
|
||||
<source>Finish</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="191"/>
|
||||
<location filename="../src/downloadlist.cpp" line="196"/>
|
||||
<source>Retry</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="192"/>
|
||||
<location filename="../src/downloadlist.cpp" line="197"/>
|
||||
<source>Error happened in dpkg progress , you can try it again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="198"/>
|
||||
<location filename="../src/downloadlist.cpp" line="203"/>
|
||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="220"/>
|
||||
<location filename="../src/downloadlist.cpp" line="225"/>
|
||||
<source>Download canceled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
<context>
|
||||
<name>QLabel</name>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="40"/>
|
||||
<location filename="../src/main.cpp" line="35"/>
|
||||
<location filename="../src/main.cpp" line="43"/>
|
||||
<location filename="../src/main.cpp" line="49"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>Spark 应用商店</translation>
|
||||
</message>
|
||||
@@ -20,8 +22,14 @@
|
||||
<context>
|
||||
<name>QObject</name>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="32"/>
|
||||
<source>We publish this program under GPL V3</source>
|
||||
<translation type="vanished">本程序按GPL V3开源</translation>
|
||||
<translation>本程序按GPL V3开源</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="37"/>
|
||||
<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"><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>
|
||||
<source>Version 2.0+2</source>
|
||||
@@ -32,15 +40,16 @@
|
||||
<translation type="vanished"><span style=' font-size:10pt;font-weight:60;'>deepin 社区驱动的一款第三方应用商店</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/main.cpp" line="45"/>
|
||||
<source>The Spark Project</source>
|
||||
<translation type="vanished">星火项目组</translation>
|
||||
<translation type="unfinished">星火计划 The Spark Project</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span><br/>We publish this program under GPL V3</source>
|
||||
<translation type="vanished"><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><br/>本程序遵循 GPL V3 协议发布</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/main.cpp" line="48"/>
|
||||
<location filename="../src/main.cpp" line="57"/>
|
||||
<source><span style='font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style='font-size:12pt;'>Spark developers</span><br/><br/>Published under GPL V3</source>
|
||||
<translation><span style='font-size:10pt;font-weight:60;'>由 Deepin 社区出品的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style='font-size:12pt;'>星火商店开发组</span><br/><br/>遵循 GPL V3 协议发布</translation>
|
||||
</message>
|
||||
@@ -190,8 +199,8 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="547"/>
|
||||
<location filename="../src/widget.cpp" line="902"/>
|
||||
<location filename="../src/widget.cpp" line="1171"/>
|
||||
<location filename="../src/widget.cpp" line="906"/>
|
||||
<location filename="../src/widget.cpp" line="1175"/>
|
||||
<source>Install</source>
|
||||
<translation>安装</translation>
|
||||
</message>
|
||||
@@ -239,8 +248,8 @@
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="769"/>
|
||||
<location filename="../src/widget.ui" line="772"/>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 20.04</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持Ubuntu 20.04</p></body></html></translation>
|
||||
<source><html><head/><body><p>Capable to Ubuntu 22.04</p></body></html></source>
|
||||
<translation><html><head/><body><p>支持Ubuntu 22.04</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.ui" line="788"/>
|
||||
@@ -495,16 +504,21 @@
|
||||
<translation>设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="340"/>
|
||||
<location filename="../src/widget.cpp" line="195"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation>应用更新和安装设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="344"/>
|
||||
<source>Not Exist</source>
|
||||
<translation>不存在</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="138"/>
|
||||
<location filename="../src/widget.cpp" line="402"/>
|
||||
<location filename="../src/widget.cpp" line="407"/>
|
||||
<location filename="../src/widget.cpp" line="417"/>
|
||||
<location filename="../src/widget.cpp" line="422"/>
|
||||
<location filename="../src/widget.cpp" line="406"/>
|
||||
<location filename="../src/widget.cpp" line="411"/>
|
||||
<location filename="../src/widget.cpp" line="421"/>
|
||||
<location filename="../src/widget.cpp" line="426"/>
|
||||
<source>Spark\ Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
@@ -541,8 +555,8 @@
|
||||
<translation type="vanished">大小: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="652"/>
|
||||
<location filename="../src/widget.cpp" line="891"/>
|
||||
<location filename="../src/widget.cpp" line="656"/>
|
||||
<location filename="../src/widget.cpp" line="895"/>
|
||||
<source>Reinstall</source>
|
||||
<translation>重新安装</translation>
|
||||
</message>
|
||||
@@ -551,17 +565,17 @@
|
||||
<translation type="vanished">加载应用程序图标失败。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="618"/>
|
||||
<location filename="../src/widget.cpp" line="622"/>
|
||||
<source>Failed to get the name to the file to be downloaded.</source>
|
||||
<translation>获取安装包文件名失败。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="702"/>
|
||||
<location filename="../src/widget.cpp" line="706"/>
|
||||
<source>Relative apps Not Found!</source>
|
||||
<translation>相关应用未找到!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="711"/>
|
||||
<location filename="../src/widget.cpp" line="715"/>
|
||||
<source>Request Error: %1</source>
|
||||
<translation>请求错误:%1</translation>
|
||||
</message>
|
||||
@@ -570,22 +584,22 @@
|
||||
<translation type="vanished">目前仅支持商店专用链接的打开,搜索功能正在开发,请期待以后的版本!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="896"/>
|
||||
<location filename="../src/widget.cpp" line="900"/>
|
||||
<source>Upgrade</source>
|
||||
<translation>升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1079"/>
|
||||
<location filename="../src/widget.cpp" line="1083"/>
|
||||
<source>Updating, please wait...</source>
|
||||
<translation>正在更新,请稍候……</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1140"/>
|
||||
<location filename="../src/widget.cpp" line="1144"/>
|
||||
<source>Apt has reported an error. Please use apt update in terminal to locate the problem.</source>
|
||||
<translation>更新中发生错误,请在终端使用apt update来查看错误原因。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1147"/>
|
||||
<location filename="../src/widget.cpp" line="1151"/>
|
||||
<source>Unknown error!</source>
|
||||
<translation>未知错误!</translation>
|
||||
</message>
|
||||
@@ -637,17 +651,17 @@ Click yes to continue.</source>
|
||||
<translation type="vanished">服务器未知错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1175"/>
|
||||
<location filename="../src/widget.cpp" line="1179"/>
|
||||
<source>Uninstall succeeded</source>
|
||||
<translation>卸载成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1197"/>
|
||||
<location filename="../src/widget.cpp" line="1201"/>
|
||||
<source>Temporary cache was cleaned</source>
|
||||
<translation>缓存目录已清空</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widget.cpp" line="1279"/>
|
||||
<location filename="../src/widget.cpp" line="1283"/>
|
||||
<source>The URL has been copied to the clipboard</source>
|
||||
<translation>链接已复制到剪贴板</translation>
|
||||
</message>
|
||||
@@ -714,27 +728,26 @@ Click yes to continue.</source>
|
||||
<translation>深度软件包安装器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="69"/>
|
||||
<source>Downloaded, waiting to install</source>
|
||||
<translation>已完成,等待安装</translation>
|
||||
<translation type="vanished">已完成,等待安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="95"/>
|
||||
<location filename="../src/downloadlist.cpp" line="100"/>
|
||||
<source>Failed to download %1</source>
|
||||
<translation>下载 %1 失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="97"/>
|
||||
<location filename="../src/downloadlist.cpp" line="102"/>
|
||||
<source>Download Failed,Check Your Connection</source>
|
||||
<translation>下载失败,请检查网络连接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="109"/>
|
||||
<location filename="../src/downloadlist.cpp" line="114"/>
|
||||
<source>Finished downloading %1, awaiting to install</source>
|
||||
<translation>%1 下载完成,等待安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="142"/>
|
||||
<location filename="../src/downloadlist.cpp" line="147"/>
|
||||
<source>Installing</source>
|
||||
<translation>正在安装</translation>
|
||||
</message>
|
||||
@@ -743,27 +756,32 @@ Click yes to continue.</source>
|
||||
<translation type="obsolete">正在安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="185"/>
|
||||
<location filename="../src/downloadlist.cpp" line="74"/>
|
||||
<source>Downloaded. Open APP Upgrade and Install Settings to enable password-free installation</source>
|
||||
<translation type="unfinished">下载完成 可进入应用更新和安装设置来启动免密码安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="190"/>
|
||||
<source>Finish</source>
|
||||
<translation>完成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="191"/>
|
||||
<location filename="../src/downloadlist.cpp" line="196"/>
|
||||
<source>Retry</source>
|
||||
<translation>重试</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="192"/>
|
||||
<location filename="../src/downloadlist.cpp" line="197"/>
|
||||
<source>Error happened in dpkg progress , you can try it again</source>
|
||||
<translation>dpkg出现错误,可重新安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="198"/>
|
||||
<location filename="../src/downloadlist.cpp" line="203"/>
|
||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||
<translation>安装被中止,可重新安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/downloadlist.cpp" line="220"/>
|
||||
<location filename="../src/downloadlist.cpp" line="225"/>
|
||||
<source>Download canceled</source>
|
||||
<translation>下载已取消</translation>
|
||||
</message>
|
||||
|
||||
Reference in New Issue
Block a user