Compare commits
117 Commits
3.0.3-7
...
modify-jen
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5f48b9f37 | ||
|
|
36a3a9eb5d | ||
|
|
b9c21e1640 | ||
|
|
0d823d5dc7 | ||
|
|
08da84e67d | ||
|
|
d283d3f346 | ||
|
|
1e04500382 | ||
|
|
28ea231170 | ||
| 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 | |||
| e14b1baaab | |||
| 0bfa7c9136 | |||
| 6d38c0bf70 | |||
| a932966795 | |||
| a63c7ec750 | |||
| ad53669098 | |||
| 69b42f2afe | |||
| c4f4465e87 | |||
| f292f954f7 | |||
| 161c9e320b | |||
| f33386ee5c | |||
|
|
61c10944c9 | ||
|
|
6db6fe6060 | ||
|
|
14506b18b2 | ||
| 44d1041087 | |||
| dd941bcf8e | |||
| 75fc22d2a2 | |||
| ee549b91f1 | |||
| 38209d0efb | |||
| b7dcca35b5 | |||
| bb39fe386b | |||
|
|
3d02922751 | ||
| e5ea3c3477 | |||
| 0b00cd2f4d | |||
| 7f6b8c1f5e | |||
|
|
3bfc183c89 | ||
| 45e1970186 | |||
| c8e8560584 | |||
| 5bdf9c69ea | |||
|
|
e48438b5a6 | ||
| 00cb5d2442 | |||
| 9a84dfffd0 | |||
| 45a2b0b8c8 | |||
| a947963fc1 |
57
.gitignore
vendored
@@ -1,4 +1,53 @@
|
|||||||
*.pro.user*
|
# C++ objects and libs
|
||||||
build/
|
*.slo
|
||||||
.vscode/
|
*.lo
|
||||||
Lib/
|
*.o
|
||||||
|
*.a
|
||||||
|
*.la
|
||||||
|
*.lai
|
||||||
|
*.so
|
||||||
|
*.dll
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Qt-es
|
||||||
|
object_script.*.Release
|
||||||
|
object_script.*.Debug
|
||||||
|
*_plugin_import.cpp
|
||||||
|
/.qmake.cache
|
||||||
|
/.qmake.stash
|
||||||
|
*.pro.user
|
||||||
|
*.pro.user.*
|
||||||
|
*.qbs.user
|
||||||
|
*.qbs.user.*
|
||||||
|
*.moc
|
||||||
|
moc_*.cpp
|
||||||
|
moc_*.h
|
||||||
|
qrc_*.cpp
|
||||||
|
ui_*.h
|
||||||
|
*.qmlc
|
||||||
|
*.jsc
|
||||||
|
Makefile*
|
||||||
|
*build-*
|
||||||
|
|
||||||
|
# Qt unit tests
|
||||||
|
target_wrapper.*
|
||||||
|
|
||||||
|
# Qt qm files
|
||||||
|
translations/*.qm
|
||||||
|
|
||||||
|
# QtCreator
|
||||||
|
*.autosave
|
||||||
|
|
||||||
|
# QtCreator Qml
|
||||||
|
*.qmlproject.user
|
||||||
|
*.qmlproject.user.*
|
||||||
|
|
||||||
|
# QtCreator CMake
|
||||||
|
CMakeLists.txt.user*
|
||||||
|
build
|
||||||
|
|
||||||
|
# Debian dpkg-buildpackage
|
||||||
|
debian/*.debhelper*
|
||||||
|
debian/files
|
||||||
|
debian/*.substvars
|
||||||
|
debian/spark-store
|
||||||
|
|||||||
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
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
@@ -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 |
|
||||||
9
Jenkinsfile
vendored
@@ -4,12 +4,11 @@ pipeline {
|
|||||||
stage('build') {
|
stage('build') {
|
||||||
agent {
|
agent {
|
||||||
docker {
|
docker {
|
||||||
image 'jerry979/dtke:5.11.1'
|
image 'sparkstore/qt-build-image:5.11-1'
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
sh 'mkdir build && cd build && qmake .. && make '
|
sh 'mkdir build && cd build && qmake .. && make && cd ..'
|
||||||
archiveArtifacts(artifacts: 'build/src/spark-store', allowEmptyArchive: true, defaultExcludes: true)
|
archiveArtifacts(artifacts: 'build/src/spark-store', allowEmptyArchive: true, defaultExcludes: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -19,15 +18,13 @@ pipeline {
|
|||||||
dockerfile {
|
dockerfile {
|
||||||
filename '.gitee/Dockerfile'
|
filename '.gitee/Dockerfile'
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
environment {
|
environment {
|
||||||
gitee_token = credentials('1')
|
gitee_token = credentials('1')
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
sh "python3 .gitee/callback.py"
|
sh 'python3 .gitee/callback.py'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 43 KiB |
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应用难以获取,优质工具分散在民间各大论坛,无法形成合力,难以改善生态
|
众所周知,国内的Linux应用比较少,wine应用难以获取,优质工具分散在民间各大论坛,无法形成合力,难以改善生态
|
||||||
|
|
||||||
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
|
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
|
||||||
|
|
||||||
我们创建了这个应用商店,广泛收录大家需要的软件包,搜集优质小工具,主动适配wine应用,存放到储存库供大家获取
|
我们创建了这个应用商店,广泛收录大家需要的软件包,搜集优质小工具,主动适配wine应用,存放到储存库供大家获取
|
||||||
|
我们支持:Deepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(将会逐渐停止支持) ; UOS Home 21
|
||||||
我们支持:Deepin 20 ; Ubuntu 20.04 LTS ; UOS Home 20
|
|
||||||
|
|
||||||
希望看到这里的人也可以加入我们的队伍,开发或者投递应用都很欢迎,共同构建Linux应用生态
|
希望看到这里的人也可以加入我们的队伍,开发或者投递应用都很欢迎,共同构建Linux应用生态
|
||||||
|
|
||||||
### [在这里投稿](https://upload.deepinos.org/index)
|
如果有想要提交的软件包,请 [在这里投稿](https://upload.deepinos.org/index)
|
||||||
|
|
||||||
web页面部分正在开发当中,详情请见[web仓库](https://gitee.com/deepin-community-store/DCSAPP_WEB)
|
|
||||||
|
|
||||||
|
|
||||||
#### 说明
|
## 🙌 简单的开始
|
||||||
|
|
||||||
当前服务器线路列表(项目中包含):
|
如果想安装 `星火应用商店` ,请打开右侧的 [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分类:
|
Deepin V20/UOS 21/ Ubuntu 22.04 系统下, 安装依赖
|
||||||
|
|
||||||
| 分类名称 | web分类 |
|
|
||||||
| -------- | -------------- |
|
|
||||||
| 网络应用 | network |
|
|
||||||
| 社交沟通 | chat |
|
|
||||||
| 音乐欣赏 | music |
|
|
||||||
| 视频播放 | video |
|
|
||||||
| 图形图像 | graphics |
|
|
||||||
| 游戏娱乐 | games |
|
|
||||||
| 办公学习 | office |
|
|
||||||
| 阅读翻译 | reading |
|
|
||||||
| 编程开发 | development |
|
|
||||||
| 系统工具 | tools |
|
|
||||||
| 主题美化 | beautify |
|
|
||||||
| 其他应用 | others |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 如何编译
|
|
||||||
|
|
||||||
Deepin V20/UOS 系统下, 安装依赖
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo apt install qt5-default libdtkcore-dev libdtkgui-dev libdtkwidget-dev qtwebengine5-dev libnotify-dev
|
sudo apt install debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev
|
||||||
```
|
|
||||||
|
|
||||||
|
```
|
||||||
|
然后
|
||||||
```shell
|
```shell
|
||||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||||
cd spark-store
|
cd spark-store
|
||||||
mkdir build && cd build
|
dpkg-buildpackage
|
||||||
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 里的信息,提取应用名、描述、图标、截图
|
|
||||||
处理完毕后发射相应的信号
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
**应用下载**
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
@@ -34,18 +34,7 @@
|
|||||||
<file>icons/refresh-page.svg</file>
|
<file>icons/refresh-page.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>../Logo-Spark.png</file>
|
<file>Logo-Spark.png</file>
|
||||||
<file>../src/big_image.cpp</file>
|
|
||||||
<file>../src/big_image.h</file>
|
|
||||||
<file>../src/downloadlist.cpp</file>
|
|
||||||
<file>../src/downloadlist.h</file>
|
|
||||||
<file>../src/image_show.cpp</file>
|
|
||||||
<file>../src/image_show.h</file>
|
|
||||||
<file>../src/main.cpp</file>
|
|
||||||
<file>../src/progressload.cpp</file>
|
|
||||||
<file>../src/progressload.h</file>
|
|
||||||
<file>../src/widget.cpp</file>
|
|
||||||
<file>../src/widget.h</file>
|
|
||||||
<file>tags/a2d.png</file>
|
<file>tags/a2d.png</file>
|
||||||
<file>tags/community.svg</file>
|
<file>tags/community.svg</file>
|
||||||
<file>tags/deepin.svg</file>
|
<file>tags/deepin.svg</file>
|
||||||
|
|||||||
@@ -1,125 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="16px"
|
|
||||||
height="16px"
|
|
||||||
viewBox="0 0 16 16"
|
|
||||||
version="1.1"
|
|
||||||
id="svg22"
|
|
||||||
sodipodi:docname="category_active_16px_l.svg"
|
|
||||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
|
||||||
<metadata
|
|
||||||
id="metadata26">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title>category_active_16px</dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="987"
|
|
||||||
id="namedview24"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="14.75"
|
|
||||||
inkscape:cx="-4"
|
|
||||||
inkscape:cy="8"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg22" />
|
|
||||||
<!-- Generator: Sketch 3.6.1 (26313) - http://www.bohemiancoding.com/sketch -->
|
|
||||||
<title
|
|
||||||
id="title2">category_active_16px</title>
|
|
||||||
<desc
|
|
||||||
id="desc4">Created with Sketch.</desc>
|
|
||||||
<defs
|
|
||||||
id="defs6" />
|
|
||||||
<g
|
|
||||||
id="Page-1"
|
|
||||||
stroke="none"
|
|
||||||
stroke-width="1"
|
|
||||||
fill="none"
|
|
||||||
fill-rule="evenodd"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999">
|
|
||||||
<g
|
|
||||||
id="category_active_16px"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999">
|
|
||||||
<rect
|
|
||||||
id="Rectangle-1-Copy-44"
|
|
||||||
fill="#747568"
|
|
||||||
opacity="0"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999" />
|
|
||||||
<g
|
|
||||||
id="Group-2"
|
|
||||||
transform="translate(2.000000, 2.000000)"
|
|
||||||
fill="#FFFFFF"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999">
|
|
||||||
<rect
|
|
||||||
id="Rectangle-94"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="2"
|
|
||||||
height="2"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999" />
|
|
||||||
<rect
|
|
||||||
id="Rectangle-97"
|
|
||||||
x="3"
|
|
||||||
y="0"
|
|
||||||
width="9"
|
|
||||||
height="2"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999" />
|
|
||||||
<rect
|
|
||||||
id="rect11"
|
|
||||||
x="0"
|
|
||||||
y="5"
|
|
||||||
width="2"
|
|
||||||
height="2"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999" />
|
|
||||||
<rect
|
|
||||||
id="rect13"
|
|
||||||
x="3"
|
|
||||||
y="5"
|
|
||||||
width="9"
|
|
||||||
height="2"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999" />
|
|
||||||
<rect
|
|
||||||
id="rect15"
|
|
||||||
x="0"
|
|
||||||
y="10"
|
|
||||||
width="2"
|
|
||||||
height="2"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999" />
|
|
||||||
<rect
|
|
||||||
id="rect17"
|
|
||||||
x="3"
|
|
||||||
y="10"
|
|
||||||
width="9"
|
|
||||||
height="2"
|
|
||||||
style="fill:#000000;fill-opacity:0.94999999" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 3.3 KiB |
@@ -1,124 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="16px"
|
|
||||||
height="16px"
|
|
||||||
viewBox="0 0 16 16"
|
|
||||||
version="1.1"
|
|
||||||
id="svg22"
|
|
||||||
sodipodi:docname="category_active_16px.svg"
|
|
||||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
|
||||||
<metadata
|
|
||||||
id="metadata26">
|
|
||||||
<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>
|
|
||||||
<sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="987"
|
|
||||||
id="namedview24"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="14.75"
|
|
||||||
inkscape:cx="8"
|
|
||||||
inkscape:cy="8"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg22" />
|
|
||||||
<!-- Generator: Sketch 3.6.1 (26313) - http://www.bohemiancoding.com/sketch -->
|
|
||||||
<title
|
|
||||||
id="title2">category_active_16px</title>
|
|
||||||
<desc
|
|
||||||
id="desc4">Created with Sketch.</desc>
|
|
||||||
<defs
|
|
||||||
id="defs6" />
|
|
||||||
<g
|
|
||||||
id="Page-1"
|
|
||||||
stroke="none"
|
|
||||||
stroke-width="1"
|
|
||||||
fill="none"
|
|
||||||
fill-rule="evenodd"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002">
|
|
||||||
<g
|
|
||||||
id="category_active_16px"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002">
|
|
||||||
<rect
|
|
||||||
id="Rectangle-1-Copy-44"
|
|
||||||
fill="#747568"
|
|
||||||
opacity="0"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
|
||||||
<g
|
|
||||||
id="Group-2"
|
|
||||||
transform="translate(2.000000, 2.000000)"
|
|
||||||
fill="#FFFFFF"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002">
|
|
||||||
<rect
|
|
||||||
id="Rectangle-94"
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="2"
|
|
||||||
height="2"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
|
||||||
<rect
|
|
||||||
id="Rectangle-97"
|
|
||||||
x="3"
|
|
||||||
y="0"
|
|
||||||
width="9"
|
|
||||||
height="2"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
|
||||||
<rect
|
|
||||||
id="rect11"
|
|
||||||
x="0"
|
|
||||||
y="5"
|
|
||||||
width="2"
|
|
||||||
height="2"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
|
||||||
<rect
|
|
||||||
id="rect13"
|
|
||||||
x="3"
|
|
||||||
y="5"
|
|
||||||
width="9"
|
|
||||||
height="2"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
|
||||||
<rect
|
|
||||||
id="rect15"
|
|
||||||
x="0"
|
|
||||||
y="10"
|
|
||||||
width="2"
|
|
||||||
height="2"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
|
||||||
<rect
|
|
||||||
id="rect17"
|
|
||||||
x="3"
|
|
||||||
y="10"
|
|
||||||
width="9"
|
|
||||||
height="2"
|
|
||||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 3.3 KiB |
20
build.sh
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
realpath=`realpath $0`
|
|
||||||
cd `dirname $realpath`
|
|
||||||
|
|
||||||
mkdir -p build && cd build
|
|
||||||
|
|
||||||
/usr/lib/qt5/bin/qmake ../spark-store-project.pro -spec linux-g++ CONFIG+=qtquickcompiler && /usr/bin/make qmake_all
|
|
||||||
make -j$(cat /proc/cpuinfo | grep "processor" | wc -l)
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
cp ./ssinstall ./debian/opt/durapps/spark-store/bin/
|
|
||||||
cp ./spark-dstore-patch ./debian/opt/durapps/spark-store/bin/
|
|
||||||
cp ./build/src/spark-store ./debian/opt/durapps/spark-store/bin/
|
|
||||||
cp ./translations/*.qm ./debian/usr/share/spark-store/translations/
|
|
||||||
|
|
||||||
version=$(cat ./debian/DEBIAN/control | grep "Version" | awk -F ' ' '{print $2}')
|
|
||||||
|
|
||||||
fakeroot dpkg -b ./debian ./
|
|
||||||
12
debian/DEBIAN/control
vendored
@@ -1,12 +0,0 @@
|
|||||||
Package: spark-store
|
|
||||||
Version: 3.0.3-7
|
|
||||||
Maintainer: shenmo <shenmo@spark-app.store>
|
|
||||||
Section: utils
|
|
||||||
Source: https://gitee.com/deepin-community-store/spark-store
|
|
||||||
Homepage: ttps://gitee.com/deepin-community-store/spark-store
|
|
||||||
Architecture: amd64
|
|
||||||
Priority: optional
|
|
||||||
Depends: libc6 (>= 2.14), libgcc1 (>= 1:3.0), libstdc++6 (>= 5.2), libqt5core5a (>= 5.11.0~rc1), libqt5gui5 (>= 5.11.0~rc1), libqt5widgets5 (>= 5.11.0~rc1), libqt5network5 (>= 5.11.0~rc1), libqt5webenginewidgets5 (>= 5.11.0~rc1), libqt5concurrent5 (>= 5.11.0~rc1), libdtkcore5 (>= 5.2.1-1), libdtkwidget5 (>= 5.2.1-1), libdtkgui5 (>= 5.2.0-1), libglib2.0-0, libgdk-pixbuf2.0-0, libnotify4, wget, curl, gnupg
|
|
||||||
Description: Spark Store version 3.0.3-7 update
|
|
||||||
Provides: deepin-app-store
|
|
||||||
Conflicts: spark-dstore-patch
|
|
||||||
33
debian/DEBIAN/postinst
vendored
@@ -1,33 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$1" = "triggered" ]; then
|
|
||||||
echo '------------星火应用商店现已集成UOS包补丁工具---------------'
|
|
||||||
if [ -f "/usr/bin/deepin-app-store-tool" ]; then
|
|
||||||
echo '----------检测到已安装深度应用商店,不运行补丁---------------'
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
echo '--------检测到Uniontech标准软件包,运行补丁以修正安装--------'
|
|
||||||
/usr/local/bin/spark-dstore-patch
|
|
||||||
echo '-----------spark-dstore-patch补丁工具已运行完毕-----------'
|
|
||||||
else
|
|
||||||
|
|
||||||
mkdir -p /usr/local/bin
|
|
||||||
|
|
||||||
ln -s -f /opt/durapps/spark-store/bin/spark-store /usr/local/bin/spark-store
|
|
||||||
ln -s -f /opt/durapps/spark-store/bin/ssinstall /usr/local/bin/ssinstall
|
|
||||||
ln -s -f /opt/durapps/spark-store/bin/spark-dstore-patch /usr/local/bin/spark-dstore-patch
|
|
||||||
|
|
||||||
cd /tmp/spark-store-install
|
|
||||||
wget https://d.store.deepinos.org.cn/dcs-repo.gpg-key.asc
|
|
||||||
apt-key add dcs-repo.gpg-key.asc
|
|
||||||
|
|
||||||
update-icon-caches /usr/share/icons/hicolor || true
|
|
||||||
update-desktop-database /usr/share/applications || true
|
|
||||||
xdg-mime default spark-store.desktop x-scheme-handler/spk
|
|
||||||
update-mime-database /usr/share/mime || true
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
exit 0
|
|
||||||
# /tmp/spark-store-install/feedback.sh
|
|
||||||
51
debian/changelog
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
spark-store (3.0.3-14) stable; urgency=medium
|
||||||
|
|
||||||
|
* Add pkexec policy: ssinstall
|
||||||
|
* Modify ssinistall script: Now will refuse run when no args are given or not run as root.
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
spark-store (3.0.3-13) stable; urgency=medium
|
||||||
|
|
||||||
|
* Update the ssinstall script. Now support apt-fast and will temporarily increase the spark store source priority to 500 to make depends install correctly
|
||||||
|
* Change the style of About Dialog
|
||||||
|
* Modified depends to avoid Deb installers can not handle "Provides"
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
spark-store (3.0.3-12) stable; urgency=medium
|
||||||
|
|
||||||
|
* Rollback to use DApplication::loadDXcbPlugin() to make titlebar behave normally in ubuntu
|
||||||
|
* Now can run on Debian 11
|
||||||
|
* Now can run on Ubuntu 22.04
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
spark-store (3.0.3-11) stable; urgency=medium
|
||||||
|
|
||||||
|
* Now support autoupdate
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
spark-store (3.0.3-10) stable; urgency=medium
|
||||||
|
|
||||||
|
* Now also compile dstore patch
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
|
|
||||||
|
|
||||||
|
spark-store (3.0.3-9) stable; urgency=medium
|
||||||
|
|
||||||
|
* Support dpkg-buildpackage
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
|
||||||
1
debian/compat
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
11
|
||||||
40
debian/control
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
Source: spark-store
|
||||||
|
Maintainer: shenmo <shenmo@spark-app.store>
|
||||||
|
Section: utils
|
||||||
|
Priority: optional
|
||||||
|
Build-Depends:
|
||||||
|
debhelper (>= 9),
|
||||||
|
pkg-config,
|
||||||
|
qtchooser (>= 55-gc9562a1-1~),
|
||||||
|
libqt5core5a,
|
||||||
|
libqt5gui5,
|
||||||
|
libqt5widgets5,
|
||||||
|
libqt5network5,
|
||||||
|
libqt5concurrent5,
|
||||||
|
libdtkcore-dev(>=5.2),
|
||||||
|
libdtkgui-dev(>=5.2),
|
||||||
|
libdtkwidget-dev(>=5.2),
|
||||||
|
qttools5-private-dev,
|
||||||
|
libnotify-dev,
|
||||||
|
qtwebengine5-dev
|
||||||
|
Standards-Version: 3.0
|
||||||
|
Homepage: https://www.spark-app.store/
|
||||||
|
|
||||||
|
|
||||||
|
Package: spark-store
|
||||||
|
Architecture: any
|
||||||
|
Depends:${shlibs:Depends}, ${misc:Depends},
|
||||||
|
libqt5core5a,
|
||||||
|
libqt5gui5,
|
||||||
|
libqt5widgets5,
|
||||||
|
libqt5network5,
|
||||||
|
libqt5concurrent5,
|
||||||
|
libdtkcore5(>=5.2),
|
||||||
|
libdtkgui5(>=5.2),
|
||||||
|
libdtkwidget5(>=5.2),
|
||||||
|
libnotify4,
|
||||||
|
curl,
|
||||||
|
dde-qt5integration
|
||||||
|
Description: Spark Store
|
||||||
|
A community powered app store, based on DTK.
|
||||||
|
Recommends: apt-fast
|
||||||
22
debian/copyright
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Upstream-Name: spark-store
|
||||||
|
Source: https://gitee.com/deepin-community-store/spark-store
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: The Spark Project Developers
|
||||||
|
|
||||||
|
License: GPL-3+
|
||||||
|
This package is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
.
|
||||||
|
This package is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General
|
||||||
BIN
debian/opt/durapps/spark-store/bin/spark-store
vendored
3
debian/opt/durapps/spark-store/bin/ssinstall
vendored
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
dpkg -i $1 || apt install -yf || dpkg -P $1
|
|
||||||
35
debian/rules
vendored
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
export QT_SELECT=5
|
||||||
|
include /usr/share/dpkg/default.mk
|
||||||
|
|
||||||
|
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
|
||||||
|
DH_AUTO_ARGS = --parallel --buildsystem=qmake
|
||||||
|
|
||||||
|
# Uncomment this to turn on verbose mode.
|
||||||
|
#export DH_VERBOSE=1
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@ --parallel
|
||||||
|
|
||||||
|
override_dh_auto_clean:
|
||||||
|
rm -rf $(CURDIR)/build
|
||||||
|
|
||||||
|
override_dh_auto_configure:
|
||||||
|
mkdir -p $(CURDIR)/build
|
||||||
|
|
||||||
|
dh_auto_configure MAKEFLAGS=-j$(JOBS) -- spark-store-project.pro \
|
||||||
|
-spec linux-g++ CONFIG+=qtquickcompiler \
|
||||||
|
-o $(CURDIR)/build/
|
||||||
|
|
||||||
|
override_dh_auto_build:
|
||||||
|
make -C $(CURDIR)/build -j$(JOBS)
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
make -C $(CURDIR)/build install \
|
||||||
|
INSTALL_ROOT=$(CURDIR)/debian/spark-store
|
||||||
|
|
||||||
|
# Ignore the dpkg-shlibdeps: warning (it uses none of the library's symbols)
|
||||||
|
# Qt Mutidedia lib will ref to network libraray.
|
||||||
|
override_dh_shlibdeps:
|
||||||
|
dh_shlibdeps --dpkg-shlibdeps-params=--warnings=0
|
||||||
1
debian/source/format
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
1.0
|
||||||
61
debian/spark-store.postinst
vendored
Executable file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
configure)
|
||||||
|
# Check if /usr/local/bin existed
|
||||||
|
mkdir -p /usr/local/bin
|
||||||
|
|
||||||
|
# Create symbol links for binary files
|
||||||
|
ln -s -f /opt/durapps/spark-store/bin/ussinstall /usr/local/bin/ussinstall
|
||||||
|
ln -s -f /opt/durapps/spark-store/bin/ussremove /usr/local/bin/ussremove
|
||||||
|
ln -s -f /opt/durapps/spark-store/bin/spark-store /usr/local/bin/spark-store
|
||||||
|
ln -s -f /opt/durapps/spark-store/bin/ssinstall /usr/local/bin/ssinstall
|
||||||
|
ln -s -f /opt/durapps/spark-store/bin/spark-dstore-patch /usr/local/bin/spark-dstore-patch
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Download and install key
|
||||||
|
wget -O /tmp/spark-store-install/spark-store.asc https://d.store.deepinos.org.cn/dcs-repo.gpg-key.asc
|
||||||
|
gpg --dearmor /tmp/spark-store-install/spark-store.asc
|
||||||
|
cp -f /tmp/spark-store-install/spark-store.asc.gpg /etc/apt/trusted.gpg.d/spark-store.gpg
|
||||||
|
|
||||||
|
# Run apt update to avoid users being fucked up by the non-exist dependency problem
|
||||||
|
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
|
||||||
|
|
||||||
|
# Start upgrade detect service
|
||||||
|
systemctl enable spark-update-notifier
|
||||||
|
service spark-update-notifier start
|
||||||
|
|
||||||
|
|
||||||
|
# Update certain caches
|
||||||
|
update-icon-caches /usr/share/icons/hicolor || true
|
||||||
|
update-desktop-database /usr/share/applications || true
|
||||||
|
xdg-mime default spark-store.desktop x-scheme-handler/spk
|
||||||
|
update-mime-database /usr/share/mime || true
|
||||||
|
|
||||||
|
# Send email for statistics
|
||||||
|
# /tmp/spark-store-install/feedback.sh
|
||||||
|
|
||||||
|
# Remove temp dir
|
||||||
|
rm -rf /tmp/spark-store-install
|
||||||
|
;;
|
||||||
|
|
||||||
|
triggered)
|
||||||
|
# Quit if deepin-app-store-tool existed
|
||||||
|
if [ -x "/usr/bin/deepin-app-store-tool" ] ; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Trigger for UOS debs installation
|
||||||
|
echo '--------检测到Uniontech标准软件包,运行补丁以修正安装--------'
|
||||||
|
if [ -x "/usr/local/bin/spark-dstore-patch" ] ; then
|
||||||
|
/usr/local/bin/spark-dstore-patch
|
||||||
|
echo '-----------spark-dstore-patch补丁工具已运行完毕-----------'
|
||||||
|
else
|
||||||
|
echo '------------spark-dstore-patch补丁工具运行失败------------'
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
rm /usr/local/bin/spark-store
|
# Update certain caches
|
||||||
rm /usr/local/bin/ssinstall
|
|
||||||
rm /usr/local/bin/spark-dstore-patch
|
|
||||||
|
|
||||||
update-icon-caches /usr/share/icons/hicolor || true
|
update-icon-caches /usr/share/icons/hicolor || true
|
||||||
update-desktop-database /usr/share/applications || true
|
update-desktop-database /usr/share/applications || true
|
||||||
update-mime-database /usr/share/mime || true
|
update-mime-database /usr/share/mime || true
|
||||||
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
|
||||||
34
debian/spark-store.prerm
vendored
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Remove residual symbol links
|
||||||
|
rm /usr/local/bin/spark-store
|
||||||
|
rm /usr/local/bin/ssinstall
|
||||||
|
rm /usr/local/bin/spark-dstore-patch
|
||||||
|
rm /usr/local/bin/ussinstall
|
||||||
|
rm /usr/local/bin/ussremove
|
||||||
|
|
||||||
|
# Remove residual symbol links to stop upgrade detect if exist
|
||||||
|
if [ -f /etc/xdg/autostart/spark-update-notifier.desktop ];then
|
||||||
|
rm /etc/xdg/autostart/spark-update-notifier.desktop
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Shutdown services
|
||||||
|
service spark-update-notifier stop
|
||||||
|
|
||||||
|
# Stop update detect service
|
||||||
|
systemctl disable spark-update-notifier
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Clean the service place file
|
||||||
|
if [ -d "/tmp/spark-store-updatenum/" ] ; then
|
||||||
|
rm -rf /tmp/spark-store-updatenum/s
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove gpg key file
|
||||||
|
if [ -f "/etc/apt/trusted.gpg.d/spark-store.gpg" ] ; then
|
||||||
|
rm /etc/apt/trusted.gpg.d/spark-store.gpg
|
||||||
|
fi
|
||||||
|
|
||||||
|
apt-key del '9D9A A859 F750 24B1 A1EC E16E 0E41 D354 A29A 440C'
|
||||||
|
|
||||||
BIN
debian/usr/share/doc/spark-store/changelog.gz
vendored
674
debian/usr/share/doc/spark-store/copyright
vendored
@@ -1,674 +0,0 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 29 June 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
the GNU General Public License is intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users. We, the Free Software Foundation, use the
|
|
||||||
GNU General Public License for most of our software; it applies also to
|
|
||||||
any other work released this way by its authors. You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to prevent others from denying you
|
|
||||||
these rights or asking you to surrender the rights. Therefore, you have
|
|
||||||
certain responsibilities if you distribute copies of the software, or if
|
|
||||||
you modify it: responsibilities to respect the freedom of others.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must pass on to the recipients the same
|
|
||||||
freedoms that you received. You must make sure that they, too, receive
|
|
||||||
or can get the source code. And you must show them these terms so they
|
|
||||||
know their rights.
|
|
||||||
|
|
||||||
Developers that use the GNU GPL protect your rights with two steps:
|
|
||||||
(1) assert copyright on the software, and (2) offer you this License
|
|
||||||
giving you legal permission to copy, distribute and/or modify it.
|
|
||||||
|
|
||||||
For the developers' and authors' protection, the GPL clearly explains
|
|
||||||
that there is no warranty for this free software. For both users' and
|
|
||||||
authors' sake, the GPL requires that modified versions be marked as
|
|
||||||
changed, so that their problems will not be attributed erroneously to
|
|
||||||
authors of previous versions.
|
|
||||||
|
|
||||||
Some devices are designed to deny users access to install or run
|
|
||||||
modified versions of the software inside them, although the manufacturer
|
|
||||||
can do so. This is fundamentally incompatible with the aim of
|
|
||||||
protecting users' freedom to change the software. The systematic
|
|
||||||
pattern of such abuse occurs in the area of products for individuals to
|
|
||||||
use, which is precisely where it is most unacceptable. Therefore, we
|
|
||||||
have designed this version of the GPL to prohibit the practice for those
|
|
||||||
products. If such problems arise substantially in other domains, we
|
|
||||||
stand ready to extend this provision to those domains in future versions
|
|
||||||
of the GPL, as needed to protect the freedom of users.
|
|
||||||
|
|
||||||
Finally, every program is threatened constantly by software patents.
|
|
||||||
States should not allow patents to restrict development and use of
|
|
||||||
software on general-purpose computers, but in those that do, we wish to
|
|
||||||
avoid the special danger that patents applied to a free program could
|
|
||||||
make it effectively proprietary. To prevent this, the GPL assures that
|
|
||||||
patents cannot be used to render the program non-free.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Use with the GNU Affero General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU Affero General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the special requirements of the GNU Affero General Public License,
|
|
||||||
section 13, concerning interaction through a network will apply to the
|
|
||||||
combination as such.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program does terminal interaction, make it output a short
|
|
||||||
notice like this when it starts in an interactive mode:
|
|
||||||
|
|
||||||
<program> Copyright (C) <year> <name of author>
|
|
||||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, your program's commands
|
|
||||||
might be different; for a GUI interface, you would use an "about box".
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU GPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
The GNU General Public License does not permit incorporating your program
|
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
|
||||||
may consider it more useful to permit linking proprietary applications with
|
|
||||||
the library. If this is what you want to do, use the GNU Lesser General
|
|
||||||
Public License instead of this License. But first, please read
|
|
||||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
|
||||||
14
pkg/usr/lib/systemd/system/spark-update-notifier.service
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Spark Store update notifier
|
||||||
|
After=apt-daily.service network.target network-online.target systemd-networkd.service NetworkManager.service connman.service
|
||||||
|
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/opt/durapps/spark-store/bin/update-upgrade/ss-update-notify-placer.sh
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@@ -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>
|
||||||
@@ -1,9 +1,56 @@
|
|||||||
|
TARGET = spark-store
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
CONFIG += ordered
|
CONFIG += ordered
|
||||||
|
|
||||||
SUBDIRS += \
|
SUBDIRS += \
|
||||||
|
src/spark-dstore-patch \
|
||||||
third-party/QtNetworkService \
|
third-party/QtNetworkService \
|
||||||
src/spark-store.pro
|
src/spark-store.pro
|
||||||
|
|
||||||
|
|
||||||
spark-store.depends = third-party/QtNetworkService
|
spark-store.depends = third-party/QtNetworkService
|
||||||
|
|
||||||
|
# Update translation files
|
||||||
|
CONFIG(release, debug|release): system(bash $${PWD}/translate_generation.sh)
|
||||||
|
|
||||||
|
# Rules for deployment
|
||||||
|
tool.files += tool/*
|
||||||
|
tool.path = /opt/durapps/$${TARGET}/bin
|
||||||
|
|
||||||
|
qm.files += translations/*.qm
|
||||||
|
qm.path = /usr/share/spark-store/translations
|
||||||
|
|
||||||
|
preferences.files += pkg/etc/apt/preferences.d/sparkstore
|
||||||
|
preferences.path = /etc/apt/preferences.d
|
||||||
|
|
||||||
|
sourceslist.files += pkg/etc/apt/sources.list.d/sparkstore.list
|
||||||
|
sourceslist.path = /etc/apt/sources.list.d
|
||||||
|
|
||||||
|
desktop.files += pkg/usr/share/applications/spark-store.desktop
|
||||||
|
desktop.path = /usr/share/applications
|
||||||
|
|
||||||
|
service.files += pkg/usr/lib/systemd/system/spark-update-notifier.service
|
||||||
|
service.path = /usr/lib/systemd/system/
|
||||||
|
|
||||||
|
polkit-1.files +=pkg/usr/share/polkit-1/actions/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
|
||||||
|
|
||||||
|
tmp.files += pkg/tmp/spark-store-install/feedback.sh
|
||||||
|
tmp.path = /tmp/spark-store-install
|
||||||
|
|
||||||
|
INSTALLS += \
|
||||||
|
tool \
|
||||||
|
qm \
|
||||||
|
desktop \
|
||||||
|
icon \
|
||||||
|
sourceslist \
|
||||||
|
preferences \
|
||||||
|
tmp \
|
||||||
|
service
|
||||||
|
# polkit-1
|
||||||
|
# 暂时不添加
|
||||||
|
|||||||
57
src/main.cpp
@@ -1,7 +1,8 @@
|
|||||||
#include <DApplication>
|
#include <DApplication>
|
||||||
#include <DApplicationSettings>
|
#include <DApplicationSettings>
|
||||||
#include <DWidgetUtil> // Dtk::Widget::moveToCenter(&w); 要调用它,就得引用 DWidgetUtil
|
#include <DWidgetUtil> // Dtk::Widget::moveToCenter(&w); 要调用它,就得引用 DWidgetUtil
|
||||||
|
#include <DAboutDialog>
|
||||||
|
#include <QVector>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
|
|
||||||
#include "widget.h"
|
#include "widget.h"
|
||||||
@@ -9,40 +10,48 @@
|
|||||||
DWIDGET_USE_NAMESPACE
|
DWIDGET_USE_NAMESPACE
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
DApplication::loadDXcbPlugin(); // 让 bar 处在标题栏中
|
DApplication::loadDXcbPlugin(); // 已废弃,但是对于非deepin桌面可以正常使用标题栏
|
||||||
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持
|
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持
|
||||||
DApplication a(argc, argv);
|
// 程序内强制添加"-platformtheme deepin"参数喂给Qt让Qt正确使用Deepin主题修复各种奇怪样式问题
|
||||||
|
QVector<char*> fakeArgs(argc + 2);
|
||||||
|
fakeArgs[0] = argv[0];
|
||||||
|
fakeArgs[1] = "-platformtheme";
|
||||||
|
fakeArgs[2] = "deepin";
|
||||||
|
for(int i = 1; i < argc; i++) fakeArgs[i + 2] = argv[i];
|
||||||
|
int fakeArgc = argc + 2; // 为啥DApplication的argc要用引用啊?
|
||||||
|
DApplication a(fakeArgc, fakeArgs.data());
|
||||||
|
|
||||||
|
|
||||||
a.setAttribute(Qt::AA_UseHighDpiPixmaps);
|
a.setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||||
a.loadTranslator(); // 载入翻译
|
a.loadTranslator(); // 载入翻译
|
||||||
|
|
||||||
/* Customized DAboutDialog (Can't work on other distro like Ubuntu...)
|
//Customized DAboutDialog
|
||||||
*
|
|
||||||
* DAboutDialog dialog;
|
DAboutDialog dialog;
|
||||||
* a.setAboutDialog(&dialog);
|
a.setAboutDialog(&dialog);
|
||||||
* dialog.setLicense(QObject::tr("We publish this program under GPL V3"));
|
dialog.setLicense(QObject::tr("We publish this program under GPL V3"));
|
||||||
* dialog.setVersion(DApplication::buildVersion("Version 2.0.2.5"));
|
dialog.setVersion(DApplication::buildVersion("Version 3.1"));
|
||||||
* dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo
|
dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo
|
||||||
* dialog.setProductName(QLabel::tr("Spark Store"));
|
dialog.setProductName(QLabel::tr("Spark Store"));
|
||||||
* dialog.setDescription(
|
dialog.setDescription(
|
||||||
* QObject::tr(
|
QObject::tr(
|
||||||
* "<span style=' font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/>"
|
"<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/>"
|
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
|
||||||
* "<span style=' font-size:12pt;'>Spark developers</span>"
|
"<span style=' font-size:12pt;'>Spark developers</span>"
|
||||||
* )
|
)
|
||||||
* );
|
);
|
||||||
* dialog.setProductName(QLabel::tr("Spark Store"));
|
dialog.setProductName(QLabel::tr("Spark Store"));
|
||||||
* dialog.setCompanyLogo(QPixmap(":/Logo-Spark.png"));
|
dialog.setCompanyLogo(QPixmap(":/Logo-Spark.png"));
|
||||||
* dialog.setWebsiteName(QObject::tr("The Spark Project"));
|
dialog.setWebsiteName(QObject::tr("The Spark Project"));
|
||||||
* dialog.setWebsiteLink("https://gitee.com/deepin-community-store");
|
dialog.setWebsiteLink("https://gitee.com/deepin-community-store");
|
||||||
*/
|
|
||||||
|
|
||||||
a.setProductName(QLabel::tr("Spark Store"));
|
a.setProductName(QLabel::tr("Spark Store"));
|
||||||
a.setProductIcon(QIcon::fromTheme("spark-store")); //设置Logo
|
a.setProductIcon(QIcon::fromTheme("spark-store")); //设置Logo
|
||||||
a.setOrganizationName("spark-union");
|
a.setOrganizationName("spark-union");
|
||||||
a.setOrganizationDomain("https://www.deepinos.org/");
|
a.setOrganizationDomain("https://www.deepinos.org/");
|
||||||
a.setApplicationName("Spark Store"); //不需要翻译,否则 ~/.local/share/ 下文件夹名称也被翻译为中文
|
a.setApplicationName("Spark Store"); //不需要翻译,否则 ~/.local/share/ 下文件夹名称也被翻译为中文
|
||||||
a.setApplicationVersion(DApplication::buildVersion("3.0.3-7"));
|
a.setApplicationVersion(DApplication::buildVersion("3.1"));
|
||||||
a.setApplicationAcknowledgementPage("https://gitee.com/deepin-community-store/spark-store");
|
a.setApplicationAcknowledgementPage("https://gitee.com/deepin-community-store/spark-store");
|
||||||
a.setApplicationDescription(
|
a.setApplicationDescription(
|
||||||
QObject::tr(
|
QObject::tr(
|
||||||
|
|||||||
9
src/spark-dstore-patch/spark-dstore-patch.pro
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
TARGET = spark-dstore-patch
|
||||||
|
TEMPLATE += app
|
||||||
|
QT += widgets
|
||||||
|
SOURCES += spark-dstore-tool.cpp
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/spark-store/bin
|
||||||
|
else: unix:!android: target.path = /opt/durapps/spark-store/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
195
src/spark-dstore-patch/spark-dstore-tool.cpp
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QJsonObject>
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QDirIterator>
|
||||||
|
#include <QProcess>
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
QList<QJsonObject> enumAppInfoList()
|
||||||
|
{
|
||||||
|
QList<QJsonObject> appInfoList;
|
||||||
|
QDir apps("/opt/apps");
|
||||||
|
auto list = apps.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
|
||||||
|
for (auto &appID : list) {
|
||||||
|
auto infoPath = apps.absoluteFilePath(appID + "/info");
|
||||||
|
QFile infoFile(infoPath);
|
||||||
|
if (!infoFile.open(QIODevice::ReadOnly)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto doc = QJsonDocument::fromJson(infoFile.readAll());
|
||||||
|
appInfoList.push_back(doc.object());
|
||||||
|
}
|
||||||
|
return appInfoList;
|
||||||
|
}
|
||||||
|
//这段是去找appid和info,没看懂用来干啥的,在此之后info文件也没再用过
|
||||||
|
//可能以后版本的实现会用到,等官方加功能再说
|
||||||
|
void linkDir(const QString &source, const QString &target)
|
||||||
|
{
|
||||||
|
auto ensureTargetDir = [](const QString &targetFile) {
|
||||||
|
QFileInfo t(targetFile);
|
||||||
|
QDir tDir(t.dir());
|
||||||
|
tDir.mkpath(".");
|
||||||
|
};
|
||||||
|
|
||||||
|
QDir sourceDir(source);
|
||||||
|
QDir targetDir(target);
|
||||||
|
QDirIterator iter(source, QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
auto sourceFile = iter.next();
|
||||||
|
auto targetFile = targetDir.absoluteFilePath(sourceDir.relativeFilePath(sourceFile));
|
||||||
|
|
||||||
|
QFileInfo tfi(targetFile);
|
||||||
|
// if (tfi.isSymLink() && (tfi.canonicalFilePath() == sourceFile)) {
|
||||||
|
//这里官方应该是写错了,否则会每触发一次就把所有软链接都删了重新创建一次
|
||||||
|
if (tfi.isSymLink() && (tfi.symLinkTarget() == sourceFile)) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
QFile::remove(targetFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
ensureTargetDir(targetFile);
|
||||||
|
auto ret = symlink(sourceFile.toStdString().c_str(), targetFile.toStdString().c_str());
|
||||||
|
if (0 != ret) {
|
||||||
|
qDebug() << "link failed" << sourceFile << "=>" << targetFile << ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//reset Dynamic library rpath
|
||||||
|
void setRpath(const QString &file, const QString &path)
|
||||||
|
{
|
||||||
|
if (!QFileInfo::exists(path))
|
||||||
|
return;
|
||||||
|
QProcess p;
|
||||||
|
auto cmd = "patchelf " + file + " --set-rpath " + path;
|
||||||
|
p.start("bash", QStringList {"-c", cmd});
|
||||||
|
p.waitForFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString getGlic()
|
||||||
|
{
|
||||||
|
//get arch & glibc
|
||||||
|
QProcess p;
|
||||||
|
auto cmd = "gcc -dumpmachine";
|
||||||
|
p.start("bash", QStringList {"-c", cmd});
|
||||||
|
p.waitForFinished();
|
||||||
|
return p.readAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
void linkApp(const QJsonObject &app)
|
||||||
|
{
|
||||||
|
auto appID = app.value("appid").toString();
|
||||||
|
auto appEntriesDir = QDir("/opt/apps/" + appID + "/entries");
|
||||||
|
auto appLibsDir = QDir("/opt/apps/" + appID + "/files/lib");
|
||||||
|
auto autoStartDir = QDir(appEntriesDir.absoluteFilePath("autostart"));
|
||||||
|
|
||||||
|
bool autoStart = app.value("permissions").toObject().value("autostart").toBool();
|
||||||
|
if (autoStart) {
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("autostart"), "/etc/xdg/autostart");
|
||||||
|
}
|
||||||
|
|
||||||
|
// link application
|
||||||
|
auto sysShareDir = QDir("/usr/share");
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("applications"), sysShareDir.absoluteFilePath("applications"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("icons"), sysShareDir.absoluteFilePath("icons"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("mime"), sysShareDir.absoluteFilePath("mime"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("glib-2.0"), sysShareDir.absoluteFilePath("glib-2.0"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("services"), sysShareDir.absoluteFilePath("dbus-1/services"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("GConf"), sysShareDir.absoluteFilePath("GConf"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("help"), sysShareDir.absoluteFilePath("help"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("locale"), sysShareDir.absoluteFilePath("locale"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("fcitx"), sysShareDir.absoluteFilePath("fcitx"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("polkit"), sysShareDir.absoluteFilePath("polkit-1"));
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("fonts/conf"), "/etc/fonts/conf.d");
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("fonts/files"), sysShareDir.absoluteFilePath("fonts"));
|
||||||
|
|
||||||
|
|
||||||
|
//原来会导致Gtk相关应用翻译缺失,补足了
|
||||||
|
|
||||||
|
|
||||||
|
auto pluginDir = QDir(appEntriesDir.absoluteFilePath("plugins"));
|
||||||
|
if (pluginDir.exists()) {
|
||||||
|
QString arch = getGlic();
|
||||||
|
// if (pluginDir.exists()) {
|
||||||
|
// QDirIterator iter(pluginDir.absolutePath(), QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
|
||||||
|
// while (iter.hasNext()) {
|
||||||
|
// auto sourceFile = iter.next();
|
||||||
|
// setRpath(sourceFile, appLibsDir.absolutePath()); //set rpath
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("plugins/fcitx"), "/usr/lib/" + arch + "/fcitx");
|
||||||
|
linkDir(appEntriesDir.absoluteFilePath("plugins/browser"), "/usr/lib/mozilla/plugins");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cleanLink()
|
||||||
|
{
|
||||||
|
auto cleanDirBrokenLink = [](const QString &dir) {
|
||||||
|
QProcess p;
|
||||||
|
auto cmd = "find " + dir + " -xtype l -delete";
|
||||||
|
p.start("bash", QStringList {"-c", cmd});
|
||||||
|
p.waitForFinished();
|
||||||
|
};
|
||||||
|
|
||||||
|
QString arch = getGlic();
|
||||||
|
auto sysShareDir = QDir("/usr/share");
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("applications"));
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("icons"));
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("mime/packages"));
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("glib-2.0"));
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("dbus-1/services"));
|
||||||
|
cleanDirBrokenLink("/etc/xdg/autostart");
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("fcitx"));
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("help"));
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("locale"));
|
||||||
|
cleanDirBrokenLink("/usr/lib/" + arch + "/fcitx");
|
||||||
|
cleanDirBrokenLink("/usr/lib/mozilla/plugins");
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("polkit-1/actions"));
|
||||||
|
cleanDirBrokenLink(sysShareDir.absoluteFilePath("fonts"));
|
||||||
|
cleanDirBrokenLink("/etc/fonts/conf.d");
|
||||||
|
}
|
||||||
|
|
||||||
|
void update()
|
||||||
|
{
|
||||||
|
QProcess p;
|
||||||
|
auto cmd = "glib-compile-schemas /usr/share/glib-2.0/schemas/";
|
||||||
|
p.start("bash", QStringList {"-c", cmd});
|
||||||
|
p.waitForFinished();
|
||||||
|
|
||||||
|
cmd = "update-icon-caches /usr/share/icons/*";
|
||||||
|
p.start("bash", QStringList {"-c", cmd});
|
||||||
|
p.waitForFinished();
|
||||||
|
|
||||||
|
cmd = "update-desktop-database -q";
|
||||||
|
p.start("bash", QStringList {"-c", cmd});
|
||||||
|
p.waitForFinished();
|
||||||
|
|
||||||
|
cmd = "update-mime-database -V /usr/share/mime";
|
||||||
|
p.start("bash", QStringList {"-c", cmd});
|
||||||
|
p.waitForFinished();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QCoreApplication app(argc, argv);
|
||||||
|
|
||||||
|
cleanLink();
|
||||||
|
|
||||||
|
for (auto &a : enumAppInfoList()) {
|
||||||
|
linkApp(a);
|
||||||
|
}
|
||||||
|
qInfo()<<"Spark dstore patch (c) The Spark Project 2022-Now. Modified from deepin-app-store-tool";
|
||||||
|
|
||||||
|
// trigger
|
||||||
|
update();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -26,10 +26,10 @@ DEFINES += QT_APP_DEBUG
|
|||||||
include(../third-party/QtNetworkService/QtNetworkService.pri)
|
include(../third-party/QtNetworkService/QtNetworkService.pri)
|
||||||
|
|
||||||
CONFIG += c++11 link_pkgconfig
|
CONFIG += c++11 link_pkgconfig
|
||||||
PKGCONFIG += dtkwidget glib-2.0 gdk-pixbuf-2.0 libnotify
|
PKGCONFIG += dtkcore dtkgui dtkwidget libnotify
|
||||||
|
|
||||||
# 禁止输出 qWarning / qDebug 信息
|
# 禁止输出 qWarning / qDebug 信息
|
||||||
CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
|
#CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
appitem.cpp \
|
appitem.cpp \
|
||||||
@@ -81,3 +81,8 @@ TRANSLATIONS += \
|
|||||||
../translations/spark-store_en.ts \
|
../translations/spark-store_en.ts \
|
||||||
../translations/spark-store_fr.ts \
|
../translations/spark-store_fr.ts \
|
||||||
../translations/spark-store_zh_CN.ts
|
../translations/spark-store_zh_CN.ts
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/durapps/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|||||||
@@ -192,14 +192,18 @@ void Widget::initUI()
|
|||||||
// 添加菜单项
|
// 添加菜单项
|
||||||
QAction *actionSubmission = new QAction(tr("Submit App"), this);
|
QAction *actionSubmission = new QAction(tr("Submit App"), this);
|
||||||
QAction *setting = new QAction(tr("Settings"));
|
QAction *setting = new QAction(tr("Settings"));
|
||||||
|
QAction *upgrade = new QAction(tr("App Upgrade"));
|
||||||
|
|
||||||
QMenu *menu = new QMenu;
|
QMenu *menu = new QMenu;
|
||||||
menu->addAction(setting);
|
menu->addAction(setting);
|
||||||
|
menu->addAction(upgrade);
|
||||||
menu->addAction(actionSubmission);
|
menu->addAction(actionSubmission);
|
||||||
|
|
||||||
titlebar->setMenu(menu);
|
titlebar->setMenu(menu);
|
||||||
|
|
||||||
connect(actionSubmission, &QAction::triggered, this, [=]{QDesktopServices::openUrl(QUrl("https://upload.deepinos.org/"));});
|
connect(actionSubmission, &QAction::triggered, this, [=]{QDesktopServices::openUrl(QUrl("https://upload.deepinos.org/"));});
|
||||||
connect(setting, &QAction::triggered, this, &Widget::opensetting);
|
connect(setting, &QAction::triggered, this, &Widget::opensetting);
|
||||||
|
connect(upgrade, &QAction::triggered, this, [=]{QProcess::startDetached("x-terminal-emulator -e /opt/durapps/spark-store/bin/update-upgrade/ss-update-controler.sh");});
|
||||||
|
|
||||||
// 载入自定义字体
|
// 载入自定义字体
|
||||||
int loadedFontID = QFontDatabase::addApplicationFont(":/fonts/fonts/hksnzt.ttf");
|
int loadedFontID = QFontDatabase::addApplicationFont(":/fonts/fonts/hksnzt.ttf");
|
||||||
|
|||||||
@@ -766,10 +766,10 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="toolTip">
|
<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>
|
||||||
<property name="whatsThis">
|
<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>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></string>
|
<string><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></string>
|
||||||
|
|||||||
11
tool/password-check/ss-certificate-passwd
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
uname=`whoami`
|
||||||
|
echo "Now input the password of $uname"
|
||||||
|
read upass
|
||||||
|
passcheck=`echo "$upass" | sudo -S echo "i love amber forever"`
|
||||||
|
if [ "$passcheck" != "i love amber forever" ];then
|
||||||
|
echo "114514首"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "go go Baron Bunny"
|
||||||
|
fi
|
||||||
112
tool/ssinstall
Executable file
@@ -0,0 +1,112 @@
|
|||||||
|
#!/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 ----------------------------------------------------------------------------------
|
||||||
|
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
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
Type=Application
|
||||||
|
Exec=/opt/durapps/spark-store/bin/update-upgrade/ss-update-notify.sh
|
||||||
|
Name=spark-update-notifier
|
||||||
9
tool/update-upgrade/ss-do-upgrade.sh
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
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
|
||||||
73
tool/update-upgrade/ss-update-controler.sh
Executable file
@@ -0,0 +1,73 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
if [ -f /etc/xdg/autostart/spark-update-notifier.desktop ];then
|
||||||
|
textupdateopen="关闭"
|
||||||
|
#已经开启了就显示关闭
|
||||||
|
else
|
||||||
|
textupdateopen="开启"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "欢迎使用星火更新工具 脚本版 "
|
||||||
|
echo "请在以下操作中选择一个进行~"
|
||||||
|
echo "输入1 $textupdateopen星火更新检测工具(如果开启则会在系统启动后自动检测更新。如有更新则会弹出通知)"
|
||||||
|
echo "输入2 查看可更新软件包列表并决定是否更新"
|
||||||
|
echo "输入3 退出脚本"
|
||||||
|
read option
|
||||||
|
|
||||||
|
case $option in
|
||||||
|
1)
|
||||||
|
echo "执行以下操作需要授权..."
|
||||||
|
if [ -f /etc/xdg/autostart/spark-update-notifier.desktop ];then
|
||||||
|
echo "检测到已经启动了自动更新检测,关闭中"
|
||||||
|
sudo systemctl disable spark-update-notifier
|
||||||
|
sudo rm /etc/xdg/autostart/spark-update-notifier.desktop
|
||||||
|
|
||||||
|
else
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
2)
|
||||||
|
echo "执行以下操作需要授权..."
|
||||||
|
/opt/durapps/spark-store/bin/update-upgrade/ss-upgrade-list.sh
|
||||||
|
/opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade.sh
|
||||||
|
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
echo "按回车退出"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "无法识别的输入!请重新输入"
|
||||||
|
reset
|
||||||
|
esac
|
||||||
|
|
||||||
|
done
|
||||||
57
tool/update-upgrade/ss-update-notify-placer.sh
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
rm -rf /tmp/spark-store-updatenum/number
|
||||||
|
LANG=en.US
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#检测网络链接畅通
|
||||||
|
function network()
|
||||||
|
{
|
||||||
|
#超时时间
|
||||||
|
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
|
||||||
|
#网络畅通
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
#网络不畅通
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
network
|
||||||
|
if [ $? -eq 1 ];then
|
||||||
|
echo "Network fail. Stop to avoid bother dpkg"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
#The code above is modified from https://blog.csdn.net/yaxuan88521/article/details/120516298
|
||||||
|
|
||||||
|
|
||||||
|
updatetext=`sudo apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"`
|
||||||
|
|
||||||
|
mkdir -p /tmp/spark-store-updatenum/
|
||||||
|
|
||||||
|
|
||||||
|
isupdate=`echo ${updatetext: -5}`
|
||||||
|
if [ "$isupdate" = "date." ];then
|
||||||
|
sudo echo "0" > /tmp/spark-store-updatenum/number
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
update_app_number=`echo ${updatetext%package*} #从右向左截取第一个 src 后的字符串`
|
||||||
|
update_app_number=`echo ${update_app_number: -1}`
|
||||||
|
sudo echo "$update_app_number" > /tmp/spark-store-updatenum/number
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
28
tool/update-upgrade/ss-update-notify.sh
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
isexistnumber=0
|
||||||
|
if [ "$1" = "now" ];then
|
||||||
|
if [ -f /tmp/spark-store-updatenum/number ];then
|
||||||
|
update_app_number=`cat /tmp/spark-store-updatenum/number`
|
||||||
|
echo "$update_app_number"
|
||||||
|
if [ "$update_app_number" = "0" ];then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
notify-send -i spark-store "星火更新提醒" "星火商店仓库中有$update_app_number个软件包可以更新啦!请到星火商店的菜单处理"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
until [ $isexistnumber -eq 1 ];do
|
||||||
|
if [ -f /tmp/spark-store-updatenum/number ];then
|
||||||
|
sleep 10
|
||||||
|
update_app_number=`cat /tmp/spark-store-updatenum/number`
|
||||||
|
echo "$update_app_number"
|
||||||
|
if [ "$update_app_number" = "0" ];then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
notify-send -i spark-store "星火更新提醒" "星火商店仓库中有$update_app_number个软件包可以更新啦!请到星火商店的菜单处理"
|
||||||
|
isexistnumber=1
|
||||||
|
fi
|
||||||
|
sleep 10
|
||||||
|
done
|
||||||
6
tool/update-upgrade/ss-upgrade-list.sh
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
echo "可更新的应用有:"
|
||||||
|
sudo apt list --upgradable -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||||
91
tool/ussinstall
Executable file
@@ -0,0 +1,91 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
reset
|
||||||
|
|
||||||
|
echo "Copyright (c) 2019-2021 The Spark Project"
|
||||||
|
|
||||||
|
if [ -x "/usr/bin/deepin-deb-installer" ] ; then
|
||||||
|
echo "深度软件包安装器已安装,开始检测证书"
|
||||||
|
else
|
||||||
|
echo "未安装深度软件包安装器,拒绝执行"
|
||||||
|
echo "UOS需要深度软件包安装器来认证签名"
|
||||||
|
echo "如果你用的是UOS,你能卸载这玩意说明你已经开了开发者模式......悄悄告诉你,放屁是不用脱裤子的!"
|
||||||
|
echo "如果你用的不是统信系发行版......所以你为什么要打开这个脚本?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "/usr/share/ca-certificates/deepin/private/priv.crt" ] ; then
|
||||||
|
echo "检测到已经生成过证书,直接跳过询问"
|
||||||
|
else
|
||||||
|
until [ -f "/usr/bin/cert-tool" ] ; do
|
||||||
|
#强制未安装证书工具的不通过
|
||||||
|
echo "该工具的原理是利用UOS的自签名安装包免开发者的特性,需要您的UOS ID账号和密码,请在使用工具前确保在应用商店中已安装过“证书工具”这个应用"
|
||||||
|
echo "如果没有安装,则无法使用。请确认安装后再进行下一步操作"
|
||||||
|
sleep 3
|
||||||
|
echo "如果你确认已经安装了该应用,请按回车"
|
||||||
|
read renyijian
|
||||||
|
|
||||||
|
#检测是否在说谎签名文件
|
||||||
|
if [ -f "/usr/bin/cert-tool" ] ; then
|
||||||
|
echo "成功检测到cert-tool存在,开始检测证书\n"
|
||||||
|
else
|
||||||
|
echo "没有检测到该应用,请您再次确认“证书工具”已经安装!"
|
||||||
|
sleep 3
|
||||||
|
clear
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
until [ -f "/usr/share/ca-certificates/deepin/private/priv.crt" ] ; do
|
||||||
|
echo "没有检测到证书,准备调用证书工具生成证书,请输入您的UOS账号/密码。本脚本不会上传任何信息"
|
||||||
|
echo "请在此行输入您的UOS账号用户名/电话号/邮箱"
|
||||||
|
read account
|
||||||
|
echo "请在此行输入您的UOS账号密码"
|
||||||
|
read passwd
|
||||||
|
echo "即将安装证书,请在弹出的窗口安装"
|
||||||
|
cert-tool -username="$account" -password="$passwd"
|
||||||
|
done
|
||||||
|
echo "检测到已经生成过证书,准备签名"
|
||||||
|
fi
|
||||||
|
#这个if是判断是否已经有证书
|
||||||
|
|
||||||
|
unset account
|
||||||
|
unset passwd
|
||||||
|
unset renyijian
|
||||||
|
|
||||||
|
debpath=""
|
||||||
|
cd /tmp
|
||||||
|
|
||||||
|
until [ -f "$debpath" ] ; do
|
||||||
|
if [ ! $1 ] ; then
|
||||||
|
echo "没有检测到参数,以交互式安装运行"
|
||||||
|
echo "请输入deb文件的绝对路径或直接拖入deb文件(仅限支持的文件管理器,比如深度文管),结束后回车"
|
||||||
|
echo "生成的签名过的deb将保存在/tmp/signed_deb"
|
||||||
|
read debpath
|
||||||
|
else
|
||||||
|
echo "参数存在,直接开始签名\n生成的签名过的deb保存在/tmp/signed_deb"
|
||||||
|
debpath="$1"
|
||||||
|
echo "读取到的deb路径为:$debpath"
|
||||||
|
fi
|
||||||
|
debpath=`echo "$debpath" | sed $'s/\'//g'`
|
||||||
|
echo "去除可能的单引号后得到:$debpath"
|
||||||
|
|
||||||
|
if [ -f $debpath ] ; then
|
||||||
|
echo "文件有效,开始签名"
|
||||||
|
echo "------------以下为签名工具输出------------"
|
||||||
|
deepin-elf-sign-deb "$debpath"
|
||||||
|
echo "------------签名工具输出已结束------------"
|
||||||
|
echo "签名结束,启动深度软件包管理器"
|
||||||
|
else
|
||||||
|
echo "路径出错,请确认你输入了正确的路径!"
|
||||||
|
sleep 3
|
||||||
|
clear
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
file_name=$(basename "$debpath")
|
||||||
|
|
||||||
|
echo "--------以下为深度软件包安装器输出--------"
|
||||||
|
deepin-deb-installer "/tmp/signed_deb/$file_name"
|
||||||
|
echo "--------深度软件包安装器输出已结束--------"
|
||||||
|
echo "删除临时文件"
|
||||||
|
rm /tmp/signed_deb/$file_name
|
||||||
142
tool/ussremove
Executable file
@@ -0,0 +1,142 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
reset
|
||||||
|
|
||||||
|
echo "Copyright (c) 2019-2021 The Spark Project"
|
||||||
|
|
||||||
|
if [ -x "/usr/bin/deepin-deb-installer" ] ; then
|
||||||
|
echo "深度软件包安装器已安装,开始检测证书"
|
||||||
|
else
|
||||||
|
echo "未安装深度软件包安装器,拒绝执行"
|
||||||
|
echo "UOS需要深度软件包安装器来认证签名"
|
||||||
|
echo "如果你用的是UOS,你能卸载这玩意说明你已经开了开发者模式......悄悄告诉你,放屁是不用脱裤子的!"
|
||||||
|
echo "如果你用的不是统信系发行版......所以你为什么要打开这个脚本?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "/usr/share/ca-certificates/deepin/private/priv.crt" ] ; then
|
||||||
|
echo "检测到已经生成过证书,直接跳过询问"
|
||||||
|
else
|
||||||
|
until [ -f "/usr/bin/cert-tool" ] ; do
|
||||||
|
#强制未安装证书工具的不通过
|
||||||
|
echo "该工具的原理是利用UOS的自签名安装包免开发者的特性,需要您的UOS ID账号和密码,请在使用工具前确保在应用商店中已安装过“证书工具”这个应用"
|
||||||
|
echo "如果没有安装,则无法使用。请确认安装后再进行下一步操作"
|
||||||
|
echo "如果你确认已经安装了该应用,请按回车"
|
||||||
|
read renyijian
|
||||||
|
|
||||||
|
#检测是否在说谎签名文件
|
||||||
|
if [ -f "/usr/bin/cert-tool" ] ; then
|
||||||
|
echo "成功检测到cert-tool存在,开始检测证书\n"
|
||||||
|
else
|
||||||
|
echo "没有检测到该应用,请您再次确认“证书工具”已经安装!"
|
||||||
|
sleep 3
|
||||||
|
clear
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
until [ -f "/usr/share/ca-certificates/deepin/private/priv.crt" ] ; do
|
||||||
|
echo "没有检测到证书,准备调用证书工具生成证书,请输入您的UOS账号/密码。本脚本不会上传任何信息"
|
||||||
|
echo "请在此行输入您的UOS账号用户名/电话号/邮箱"
|
||||||
|
read account
|
||||||
|
echo "请在此行输入您的UOS账号密码"
|
||||||
|
read passwd
|
||||||
|
echo "即将安装证书,请在弹出的窗口安装"
|
||||||
|
cert-tool -username="$account" -password="$passwd"
|
||||||
|
done
|
||||||
|
echo "检测到已经生成过证书,准备签名"
|
||||||
|
fi
|
||||||
|
#这个if是判断是否已经有证书
|
||||||
|
|
||||||
|
unset account
|
||||||
|
unset passwd
|
||||||
|
unset renyijian
|
||||||
|
|
||||||
|
mkdir -p /tmp/spark-store-appremover
|
||||||
|
cd /tmp/spark-store-appremover
|
||||||
|
#工作目录应当为 /tmp/spark-store-appremover
|
||||||
|
|
||||||
|
while [ ! $pkgname ] ; do
|
||||||
|
if [ ! $1 ] ; then
|
||||||
|
echo "没有检测到包名,以交互式模式运行"
|
||||||
|
echo "请输入你要卸载的软件包名,输入结束后回车"
|
||||||
|
read pkgname
|
||||||
|
else
|
||||||
|
echo "检测到包名,跳过获取"
|
||||||
|
pkgname="$1"
|
||||||
|
echo "读取到的包名为:$pkgname"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! $pkgname ] ; then
|
||||||
|
echo "没有检测到包名,请重新输入!"
|
||||||
|
sleep 3
|
||||||
|
clear
|
||||||
|
else
|
||||||
|
echo "包名读取成功,进入下一步"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
#while [ ! $version ] ; do
|
||||||
|
# if [ ! $2 ] ; then
|
||||||
|
# echo "没有检测到版本号,以交互式模式运行"
|
||||||
|
# echo "请输入你要卸载的软件包版本号,输入结束后回车"
|
||||||
|
# read version
|
||||||
|
# else
|
||||||
|
# echo "检测到包名,跳过获取"
|
||||||
|
# version="$2"
|
||||||
|
# echo "读取到的版本号为:$version"
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# if [ ! $version ] ; then
|
||||||
|
# echo "没有检测到版本号,请重新输入!"
|
||||||
|
# sleep 3
|
||||||
|
# clear
|
||||||
|
# else
|
||||||
|
# echo "版本号读取成功,进入下一步"
|
||||||
|
# fi
|
||||||
|
#done
|
||||||
|
|
||||||
|
#发现版本号不一定一致也可以卸载
|
||||||
|
version="1.0"
|
||||||
|
echo "开始生成deb包"
|
||||||
|
echo "输出的control文件为"
|
||||||
|
echo ""
|
||||||
|
echo "Package: $pkgname"
|
||||||
|
echo "Version: $version"
|
||||||
|
echo "Depends: "
|
||||||
|
echo "Maintainer: spark-store"
|
||||||
|
echo "Description: 这是一个假软件包,请点击卸载"
|
||||||
|
echo "Architecture: $(arch)"
|
||||||
|
echo "-----------------------开始生成-----------------------"
|
||||||
|
workdir=$(pwd)
|
||||||
|
echo "工作目录为$workdir"
|
||||||
|
mkdir DEBIAN
|
||||||
|
cd DEBIAN
|
||||||
|
touch control
|
||||||
|
echo "Package: $pkgname" >> ./control
|
||||||
|
echo "Version: $version" >> ./control
|
||||||
|
echo "Depends: " >> ./control
|
||||||
|
echo "Maintainer: spark-store" >> ./control
|
||||||
|
echo "Description: 这是一个假软件包,请点击卸载" >> ./control
|
||||||
|
echo "Architecture: $(arch)" >> ./control
|
||||||
|
|
||||||
|
echo "-----------------------开始打包-----------------------"
|
||||||
|
cd ..
|
||||||
|
workdir=$(pwd)
|
||||||
|
echo "回退到工作目录,当前目录位于$workdir"
|
||||||
|
fakeroot dpkg -b . ./uninstall.deb
|
||||||
|
echo "-----------------------打包结束-----------------------"
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
|
||||||
|
echo "-----------------------开始签名-----------------------"
|
||||||
|
deepin-elf-sign-deb "/tmp/spark-store-appremover/uninstall.deb"
|
||||||
|
echo "-----------------------签名结束-----------------------"
|
||||||
|
echo "-----------------启动深度软件包管理器-------------------"
|
||||||
|
|
||||||
|
deepin-deb-installer "/tmp/signed_deb/uninstall.deb"
|
||||||
|
|
||||||
|
file_name=$(basename "/tmp/signed_deb/uninstall.deb")
|
||||||
|
echo "---------------以上为深度软件包管理器输出----------------"
|
||||||
|
echo "删除临时包"
|
||||||
|
rm "/tmp/signed_deb/$file_name"
|
||||||
|
rm -r /tmp/spark-store-appremover
|
||||||
10
translate_generation.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# this file is used to auto-generate .qm file from .ts file.
|
||||||
|
|
||||||
|
ts_list=(`ls ./translations/*.ts`)
|
||||||
|
|
||||||
|
for ts in "${ts_list[@]}"
|
||||||
|
do
|
||||||
|
printf "\nprocess ${ts}\n"
|
||||||
|
lrelease "${ts}"
|
||||||
|
done
|
||||||
@@ -12,7 +12,9 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QLabel</name>
|
<name>QLabel</name>
|
||||||
<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>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -20,7 +22,22 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<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>
|
<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>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -127,8 +144,8 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.ui" line="547"/>
|
<location filename="../src/widget.ui" line="547"/>
|
||||||
<location filename="../src/widget.cpp" line="902"/>
|
<location filename="../src/widget.cpp" line="906"/>
|
||||||
<location filename="../src/widget.cpp" line="1171"/>
|
<location filename="../src/widget.cpp" line="1175"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -153,12 +170,6 @@
|
|||||||
<source><html><head/><body><p><img src=":/tags/community-small.png"/></p></body></html></source>
|
<source><html><head/><body><p><img src=":/tags/community-small.png"/></p></body></html></source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<location filename="../src/widget.ui" line="775"/>
|
<location filename="../src/widget.ui" line="775"/>
|
||||||
<source><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></source>
|
<source><html><head/><body><p><img src=":/tags/ubuntu-small.png"/></p></body></html></source>
|
||||||
@@ -279,6 +290,12 @@
|
|||||||
<source>Network</source>
|
<source>Network</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<location filename="../src/widget.ui" line="845"/>
|
<location filename="../src/widget.ui" line="845"/>
|
||||||
<location filename="../src/widget.ui" line="848"/>
|
<location filename="../src/widget.ui" line="848"/>
|
||||||
@@ -431,72 +448,77 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="340"/>
|
<location filename="../src/widget.cpp" line="344"/>
|
||||||
<source>Not Exist</source>
|
<source>Not Exist</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="138"/>
|
<location filename="../src/widget.cpp" line="138"/>
|
||||||
<location filename="../src/widget.cpp" line="402"/>
|
<location filename="../src/widget.cpp" line="406"/>
|
||||||
<location filename="../src/widget.cpp" line="407"/>
|
<location filename="../src/widget.cpp" line="411"/>
|
||||||
<location filename="../src/widget.cpp" line="417"/>
|
<location filename="../src/widget.cpp" line="421"/>
|
||||||
<location filename="../src/widget.cpp" line="422"/>
|
<location filename="../src/widget.cpp" line="426"/>
|
||||||
<source>Spark\ Store</source>
|
<source>Spark\ Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="652"/>
|
<location filename="../src/widget.cpp" line="656"/>
|
||||||
<location filename="../src/widget.cpp" line="891"/>
|
<location filename="../src/widget.cpp" line="895"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Failed to get the name to the file to be downloaded.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="896"/>
|
<location filename="../src/widget.cpp" line="195"/>
|
||||||
|
<source>App Upgrade</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/widget.cpp" line="900"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1079"/>
|
<location filename="../src/widget.cpp" line="1083"/>
|
||||||
<source>Updating, please wait...</source>
|
<source>Updating, please wait...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/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>
|
<source>Apt has reported an error. Please use apt update in terminal to locate the problem.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1147"/>
|
<location filename="../src/widget.cpp" line="1151"/>
|
||||||
<source>Unknown error!</source>
|
<source>Unknown error!</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1175"/>
|
<location filename="../src/widget.cpp" line="1179"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="702"/>
|
<location filename="../src/widget.cpp" line="706"/>
|
||||||
<source>Relative apps Not Found!</source>
|
<source>Relative apps Not Found!</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="711"/>
|
<location filename="../src/widget.cpp" line="715"/>
|
||||||
<source>Request Error: %1</source>
|
<source>Request Error: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1197"/>
|
<location filename="../src/widget.cpp" line="1201"/>
|
||||||
<source>Temporary cache was cleaned</source>
|
<source>Temporary cache was cleaned</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -559,52 +581,52 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="69"/>
|
<location filename="../src/downloadlist.cpp" line="74"/>
|
||||||
<source>Downloaded, waiting to install</source>
|
<source>Downloaded, waiting to install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="95"/>
|
<location filename="../src/downloadlist.cpp" line="100"/>
|
||||||
<source>Failed to download %1</source>
|
<source>Failed to download %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="97"/>
|
<location filename="../src/downloadlist.cpp" line="102"/>
|
||||||
<source>Download Failed,Check Your Connection</source>
|
<source>Download Failed,Check Your Connection</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="109"/>
|
<location filename="../src/downloadlist.cpp" line="114"/>
|
||||||
<source>Finished downloading %1, awaiting to install</source>
|
<source>Finished downloading %1, awaiting to install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="142"/>
|
<location filename="../src/downloadlist.cpp" line="147"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="185"/>
|
<location filename="../src/downloadlist.cpp" line="190"/>
|
||||||
<source>Finish</source>
|
<source>Finish</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="191"/>
|
<location filename="../src/downloadlist.cpp" line="196"/>
|
||||||
<source>Retry</source>
|
<source>Retry</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Error happened in dpkg progress , you can try it again</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="198"/>
|
<location filename="../src/downloadlist.cpp" line="203"/>
|
||||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="220"/>
|
<location filename="../src/downloadlist.cpp" line="225"/>
|
||||||
<source>Download canceled</source>
|
<source>Download canceled</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|||||||
@@ -23,7 +23,9 @@ Spark Store est publié sous licence GPL V3
|
|||||||
Nous sommes nés pour le changement.</translation>
|
Nous sommes nés pour le changement.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -31,7 +33,22 @@ Nous sommes nés pour le changement.</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<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>
|
<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>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -188,8 +205,8 @@ Nous sommes nés pour le changement.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.ui" line="547"/>
|
<location filename="../src/widget.ui" line="547"/>
|
||||||
<location filename="../src/widget.cpp" line="902"/>
|
<location filename="../src/widget.cpp" line="906"/>
|
||||||
<location filename="../src/widget.cpp" line="1171"/>
|
<location filename="../src/widget.cpp" line="1175"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -232,7 +249,7 @@ Nous sommes nés pour le changement.</translation>
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.ui" line="769"/>
|
<location filename="../src/widget.ui" line="769"/>
|
||||||
<location filename="../src/widget.ui" line="772"/>
|
<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>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
@@ -585,10 +602,10 @@ Nous sommes nés pour le changement.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="138"/>
|
<location filename="../src/widget.cpp" line="138"/>
|
||||||
<location filename="../src/widget.cpp" line="402"/>
|
<location filename="../src/widget.cpp" line="406"/>
|
||||||
<location filename="../src/widget.cpp" line="407"/>
|
<location filename="../src/widget.cpp" line="411"/>
|
||||||
<location filename="../src/widget.cpp" line="417"/>
|
<location filename="../src/widget.cpp" line="421"/>
|
||||||
<location filename="../src/widget.cpp" line="422"/>
|
<location filename="../src/widget.cpp" line="426"/>
|
||||||
<source>Spark\ Store</source>
|
<source>Spark\ Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -613,63 +630,68 @@ Nous sommes nés pour le changement.</translation>
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="340"/>
|
<location filename="../src/widget.cpp" line="344"/>
|
||||||
<source>Not Exist</source>
|
<source>Not Exist</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="652"/>
|
<location filename="../src/widget.cpp" line="656"/>
|
||||||
<location filename="../src/widget.cpp" line="891"/>
|
<location filename="../src/widget.cpp" line="895"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Failed to get the name to the file to be downloaded.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="702"/>
|
<location filename="../src/widget.cpp" line="195"/>
|
||||||
|
<source>App Upgrade</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/widget.cpp" line="706"/>
|
||||||
<source>Relative apps Not Found!</source>
|
<source>Relative apps Not Found!</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="711"/>
|
<location filename="../src/widget.cpp" line="715"/>
|
||||||
<source>Request Error: %1</source>
|
<source>Request Error: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="896"/>
|
<location filename="../src/widget.cpp" line="900"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1079"/>
|
<location filename="../src/widget.cpp" line="1083"/>
|
||||||
<source>Updating, please wait...</source>
|
<source>Updating, please wait...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/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>
|
<source>Apt has reported an error. Please use apt update in terminal to locate the problem.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1147"/>
|
<location filename="../src/widget.cpp" line="1151"/>
|
||||||
<source>Unknown error!</source>
|
<source>Unknown error!</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1175"/>
|
<location filename="../src/widget.cpp" line="1179"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1197"/>
|
<location filename="../src/widget.cpp" line="1201"/>
|
||||||
<source>Temporary cache was cleaned</source>
|
<source>Temporary cache was cleaned</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -753,52 +775,52 @@ Nous sommes nés pour le changement.</translation>
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="69"/>
|
<location filename="../src/downloadlist.cpp" line="74"/>
|
||||||
<source>Downloaded, waiting to install</source>
|
<source>Downloaded, waiting to install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="95"/>
|
<location filename="../src/downloadlist.cpp" line="100"/>
|
||||||
<source>Failed to download %1</source>
|
<source>Failed to download %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="97"/>
|
<location filename="../src/downloadlist.cpp" line="102"/>
|
||||||
<source>Download Failed,Check Your Connection</source>
|
<source>Download Failed,Check Your Connection</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="109"/>
|
<location filename="../src/downloadlist.cpp" line="114"/>
|
||||||
<source>Finished downloading %1, awaiting to install</source>
|
<source>Finished downloading %1, awaiting to install</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="142"/>
|
<location filename="../src/downloadlist.cpp" line="147"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="185"/>
|
<location filename="../src/downloadlist.cpp" line="190"/>
|
||||||
<source>Finish</source>
|
<source>Finish</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="191"/>
|
<location filename="../src/downloadlist.cpp" line="196"/>
|
||||||
<source>Retry</source>
|
<source>Retry</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Error happened in dpkg progress , you can try it again</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="198"/>
|
<location filename="../src/downloadlist.cpp" line="203"/>
|
||||||
<source>dpkg progress had been aborted,you can retry installation</source>
|
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="220"/>
|
<location filename="../src/downloadlist.cpp" line="225"/>
|
||||||
<source>Download canceled</source>
|
<source>Download canceled</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|||||||
@@ -12,7 +12,9 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QLabel</name>
|
<name>QLabel</name>
|
||||||
<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>
|
<source>Spark Store</source>
|
||||||
<translation>Spark 应用商店</translation>
|
<translation>Spark 应用商店</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -20,8 +22,14 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<message>
|
||||||
|
<location filename="../src/main.cpp" line="32"/>
|
||||||
<source>We publish this program under GPL V3</source>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Version 2.0+2</source>
|
<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>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
|
<location filename="../src/main.cpp" line="45"/>
|
||||||
<source>The Spark Project</source>
|
<source>The Spark Project</source>
|
||||||
<translation type="vanished">星火项目组</translation>
|
<translation type="unfinished">星火计划 The Spark Project</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<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>
|
||||||
<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>
|
<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>
|
<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>
|
</message>
|
||||||
@@ -190,8 +199,8 @@
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.ui" line="547"/>
|
<location filename="../src/widget.ui" line="547"/>
|
||||||
<location filename="../src/widget.cpp" line="902"/>
|
<location filename="../src/widget.cpp" line="906"/>
|
||||||
<location filename="../src/widget.cpp" line="1171"/>
|
<location filename="../src/widget.cpp" line="1175"/>
|
||||||
<source>Install</source>
|
<source>Install</source>
|
||||||
<translation>安装</translation>
|
<translation>安装</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -239,8 +248,8 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.ui" line="769"/>
|
<location filename="../src/widget.ui" line="769"/>
|
||||||
<location filename="../src/widget.ui" line="772"/>
|
<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><html><head/><body><p>支持Ubuntu 20.04</p></body></html></translation>
|
<translation><html><head/><body><p>支持Ubuntu 22.04</p></body></html></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.ui" line="788"/>
|
<location filename="../src/widget.ui" line="788"/>
|
||||||
@@ -495,16 +504,21 @@
|
|||||||
<translation>设置</translation>
|
<translation>设置</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="340"/>
|
<location filename="../src/widget.cpp" line="195"/>
|
||||||
|
<source>App Upgrade</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/widget.cpp" line="344"/>
|
||||||
<source>Not Exist</source>
|
<source>Not Exist</source>
|
||||||
<translation>不存在</translation>
|
<translation>不存在</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="138"/>
|
<location filename="../src/widget.cpp" line="138"/>
|
||||||
<location filename="../src/widget.cpp" line="402"/>
|
<location filename="../src/widget.cpp" line="406"/>
|
||||||
<location filename="../src/widget.cpp" line="407"/>
|
<location filename="../src/widget.cpp" line="411"/>
|
||||||
<location filename="../src/widget.cpp" line="417"/>
|
<location filename="../src/widget.cpp" line="421"/>
|
||||||
<location filename="../src/widget.cpp" line="422"/>
|
<location filename="../src/widget.cpp" line="426"/>
|
||||||
<source>Spark\ Store</source>
|
<source>Spark\ Store</source>
|
||||||
<translation>星火应用商店</translation>
|
<translation>星火应用商店</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -541,8 +555,8 @@
|
|||||||
<translation type="vanished">大小: </translation>
|
<translation type="vanished">大小: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="652"/>
|
<location filename="../src/widget.cpp" line="656"/>
|
||||||
<location filename="../src/widget.cpp" line="891"/>
|
<location filename="../src/widget.cpp" line="895"/>
|
||||||
<source>Reinstall</source>
|
<source>Reinstall</source>
|
||||||
<translation>重新安装</translation>
|
<translation>重新安装</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -551,17 +565,17 @@
|
|||||||
<translation type="vanished">加载应用程序图标失败。</translation>
|
<translation type="vanished">加载应用程序图标失败。</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Failed to get the name to the file to be downloaded.</source>
|
||||||
<translation>获取安装包文件名失败。</translation>
|
<translation>获取安装包文件名失败。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="702"/>
|
<location filename="../src/widget.cpp" line="706"/>
|
||||||
<source>Relative apps Not Found!</source>
|
<source>Relative apps Not Found!</source>
|
||||||
<translation>相关应用未找到!</translation>
|
<translation>相关应用未找到!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="711"/>
|
<location filename="../src/widget.cpp" line="715"/>
|
||||||
<source>Request Error: %1</source>
|
<source>Request Error: %1</source>
|
||||||
<translation>请求错误:%1</translation>
|
<translation>请求错误:%1</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -570,22 +584,22 @@
|
|||||||
<translation type="vanished">目前仅支持商店专用链接的打开,搜索功能正在开发,请期待以后的版本!</translation>
|
<translation type="vanished">目前仅支持商店专用链接的打开,搜索功能正在开发,请期待以后的版本!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="896"/>
|
<location filename="../src/widget.cpp" line="900"/>
|
||||||
<source>Upgrade</source>
|
<source>Upgrade</source>
|
||||||
<translation>升级</translation>
|
<translation>升级</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1079"/>
|
<location filename="../src/widget.cpp" line="1083"/>
|
||||||
<source>Updating, please wait...</source>
|
<source>Updating, please wait...</source>
|
||||||
<translation>正在更新,请稍候……</translation>
|
<translation>正在更新,请稍候……</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Apt has reported an error. Please use apt update in terminal to locate the problem.</source>
|
||||||
<translation>更新中发生错误,请在终端使用apt update来查看错误原因。</translation>
|
<translation>更新中发生错误,请在终端使用apt update来查看错误原因。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1147"/>
|
<location filename="../src/widget.cpp" line="1151"/>
|
||||||
<source>Unknown error!</source>
|
<source>Unknown error!</source>
|
||||||
<translation>未知错误!</translation>
|
<translation>未知错误!</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -637,17 +651,17 @@ Click yes to continue.</source>
|
|||||||
<translation type="vanished">服务器未知错误</translation>
|
<translation type="vanished">服务器未知错误</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1175"/>
|
<location filename="../src/widget.cpp" line="1179"/>
|
||||||
<source>Uninstall succeeded</source>
|
<source>Uninstall succeeded</source>
|
||||||
<translation>卸载成功</translation>
|
<translation>卸载成功</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/widget.cpp" line="1197"/>
|
<location filename="../src/widget.cpp" line="1201"/>
|
||||||
<source>Temporary cache was cleaned</source>
|
<source>Temporary cache was cleaned</source>
|
||||||
<translation>缓存目录已清空</translation>
|
<translation>缓存目录已清空</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>The URL has been copied to the clipboard</source>
|
||||||
<translation>链接已复制到剪贴板</translation>
|
<translation>链接已复制到剪贴板</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -714,27 +728,27 @@ Click yes to continue.</source>
|
|||||||
<translation>深度软件包安装器</translation>
|
<translation>深度软件包安装器</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="69"/>
|
<location filename="../src/downloadlist.cpp" line="74"/>
|
||||||
<source>Downloaded, waiting to install</source>
|
<source>Downloaded, waiting to install</source>
|
||||||
<translation>已完成,等待安装</translation>
|
<translation>已完成,等待安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="95"/>
|
<location filename="../src/downloadlist.cpp" line="100"/>
|
||||||
<source>Failed to download %1</source>
|
<source>Failed to download %1</source>
|
||||||
<translation>下载 %1 失败</translation>
|
<translation>下载 %1 失败</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="97"/>
|
<location filename="../src/downloadlist.cpp" line="102"/>
|
||||||
<source>Download Failed,Check Your Connection</source>
|
<source>Download Failed,Check Your Connection</source>
|
||||||
<translation>下载失败,请检查网络连接</translation>
|
<translation>下载失败,请检查网络连接</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="109"/>
|
<location filename="../src/downloadlist.cpp" line="114"/>
|
||||||
<source>Finished downloading %1, awaiting to install</source>
|
<source>Finished downloading %1, awaiting to install</source>
|
||||||
<translation>%1 下载完成,等待安装</translation>
|
<translation>%1 下载完成,等待安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="142"/>
|
<location filename="../src/downloadlist.cpp" line="147"/>
|
||||||
<source>Installing</source>
|
<source>Installing</source>
|
||||||
<translation>正在安装</translation>
|
<translation>正在安装</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -743,27 +757,27 @@ Click yes to continue.</source>
|
|||||||
<translation type="obsolete">正在安装</translation>
|
<translation type="obsolete">正在安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="185"/>
|
<location filename="../src/downloadlist.cpp" line="190"/>
|
||||||
<source>Finish</source>
|
<source>Finish</source>
|
||||||
<translation>完成</translation>
|
<translation>完成</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="191"/>
|
<location filename="../src/downloadlist.cpp" line="196"/>
|
||||||
<source>Retry</source>
|
<source>Retry</source>
|
||||||
<translation>重试</translation>
|
<translation>重试</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>Error happened in dpkg progress , you can try it again</source>
|
||||||
<translation>dpkg出现错误,可重新安装</translation>
|
<translation>dpkg出现错误,可重新安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>dpkg progress had been aborted,you can retry installation</source>
|
||||||
<translation>安装被中止,可重新安装</translation>
|
<translation>安装被中止,可重新安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/downloadlist.cpp" line="220"/>
|
<location filename="../src/downloadlist.cpp" line="225"/>
|
||||||
<source>Download canceled</source>
|
<source>Download canceled</source>
|
||||||
<translation>下载已取消</translation>
|
<translation>下载已取消</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|||||||