mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-10-12 21:32:21 +08:00
commit
ad1efd8630
@ -2,7 +2,7 @@ version: '1.0'
|
|||||||
name: dtk-build-release-tag-20220425
|
name: dtk-build-release-tag-20220425
|
||||||
displayName: dtk-build-release-tag
|
displayName: dtk-build-release-tag
|
||||||
triggers:
|
triggers:
|
||||||
trigger: auto
|
trigger: manual
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
prefix:
|
prefix:
|
||||||
|
@ -25,10 +25,12 @@ stages:
|
|||||||
- apt update
|
- apt update
|
||||||
- export DEBIAN_FRONTEND=noninteractive
|
- export DEBIAN_FRONTEND=noninteractive
|
||||||
- echo "安装wget qemu-user-static"
|
- echo "安装wget qemu-user-static"
|
||||||
- apt install wget qemu-user-static xz-utils -y
|
- apt install git wget qemu-user-static xz-utils binfmt-support -y
|
||||||
- mkdir ../spark-store-git
|
- mkdir ../spark-store-git
|
||||||
- mv * ../spark-store-git
|
- mv * ../spark-store-git
|
||||||
- wget https://code.gitlink.org.cn/shenmo7192/debian-container-aarch64/raw/branch/master/DEBIANARM.tar.xz
|
- git clone https://gitlink.org.cn/shenmo7192/debian-container-aarch64.git
|
||||||
|
- mv debian-container-aarch64/DEBIANARM.tar.xz .
|
||||||
|
- rm -rf debian-container-aarch64
|
||||||
- tar -xf DEBIANARM.tar.xz
|
- tar -xf DEBIANARM.tar.xz
|
||||||
- mkdir -p DEBIAN/root/build-spark
|
- mkdir -p DEBIAN/root/build-spark
|
||||||
- mv ../spark-store-git DEBIAN/root/build-spark/spark-store
|
- mv ../spark-store-git DEBIAN/root/build-spark/spark-store
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](https://gitee.com/deepin-community-store/spark-store/members)
|
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](https://gitee.com/deepin-community-store/spark-store/members)
|
||||||
|
|
||||||
|
|
||||||
## You are informed that the aarch64 support is EXPERIMENTAL and there is NO GUARANTEE that this branch will be supported in the future
|
|
||||||
|
|
||||||
Spark Store aims to collect Linux apps for the convieniece of Linux new comers
|
Spark Store aims to collect Linux apps for the convieniece of Linux new comers
|
||||||
|
|
||||||
@ -12,11 +11,11 @@ We set up this APP Store and collect APPs/tools that everyone need widely. Also
|
|||||||
|
|
||||||
All packages will be shared in our repository for users to get freely.
|
All packages will be shared in our repository for users to get freely.
|
||||||
|
|
||||||
Distrobution supported:Deepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(May stop support in the future) ; UniontechOS Home 21
|
Distrobution supported:
|
||||||
|
|
||||||
*About OpenKylin and deepin 23*
|
* amd64: deepin 20 / deepin 23 / Ubuntu 22.04 LTS / UniontechOS Home 21
|
||||||
|
* arm64: UniontechOS Professional 1060 / Ubuntu 22.04 LTS / deepin 23
|
||||||
|
|
||||||
The adaptation work is scheduled after their official release.
|
|
||||||
|
|
||||||
You can track our Issue resoving progress here https://gitee.com/deepin-community-store/spark-store/board
|
You can track our Issue resoving progress here https://gitee.com/deepin-community-store/spark-store/board
|
||||||
|
|
||||||
@ -35,6 +34,7 @@ If you are using Debian11/Ubuntu 20.04, you will need extra dependency package.
|
|||||||
---
|
---
|
||||||
#### Compile and developement
|
#### Compile and developement
|
||||||
|
|
||||||
|
**dev branch is for development, Flamescion branch is for amd64 and Reason branch is for arrch64.** Although, for the most of the time, Flamescion branch is same as Reason.
|
||||||
|
|
||||||
For Deepin V20/UOS 21/ Debian 11
|
For Deepin V20/UOS 21/ Debian 11
|
||||||
|
|
||||||
|
15
README.zh.md
15
README.zh.md
@ -2,20 +2,22 @@
|
|||||||
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](https://gitee.com/deepin-community-store/spark-store/members)
|
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](https://gitee.com/deepin-community-store/spark-store/members)
|
||||||
|
|
||||||
|
|
||||||
## 请注意,aarch64的支持是实验性的,并未确认持续支持!
|
|
||||||
|
|
||||||
众所周知,国内的Linux应用比较少,wine应用难以获取,优质工具分散在民间各大论坛,无法形成合力,难以改善生态
|
国内的Linux应用比较少,wine应用难以获取,优质工具分散在民间各大论坛,无法形成合力,难以改善生态
|
||||||
|
|
||||||
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
|
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
|
||||||
|
|
||||||
我们创建了这个应用商店,广泛收录大家需要的软件包,搜集优质小工具,主动适配wine应用,存放到储存库供大家获取
|
我们创建了这个应用商店,广泛收录大家需要的软件包,搜集优质小工具,主动适配wine应用,存放到储存库供大家获取
|
||||||
我们支持:Deepin 20 ; Ubuntu 22.04 LTS / Ubuntu 20.04 LTS(将会逐渐停止支持) ; UOS Home 21
|
|
||||||
|
发行版支持:
|
||||||
|
|
||||||
|
* amd64: deepin 20 / deepin 23 / Ubuntu 22.04 / UOS家庭版20
|
||||||
|
* arm64: UOS专业版1060 / Ubuntu 22.04 / deepin 23
|
||||||
|
|
||||||
|
**请注意:本程序不包含任何保证,若你要在UOS专业版上使用,请确保你打开了开发者模式且拥有排查错误的能力,风险自负!**
|
||||||
|
|
||||||
## 关于协作:分支相关的文档见 [这里](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo)
|
## 关于协作:分支相关的文档见 [这里](https://deepin-community-store.gitee.io/spark-wiki/#/Dev/Spark-Store-Git-Repo)
|
||||||
|
|
||||||
*关于OpenKylin和deepin 23*
|
|
||||||
|
|
||||||
支持计划将会在对应系统发布正式版之后开始评估和执行
|
|
||||||
|
|
||||||
希望看到这里的人也可以加入我们的队伍,开发或者投递应用都很欢迎,共同构建Linux应用生态
|
希望看到这里的人也可以加入我们的队伍,开发或者投递应用都很欢迎,共同构建Linux应用生态
|
||||||
|
|
||||||
@ -33,6 +35,7 @@
|
|||||||
---
|
---
|
||||||
#### 编译安装
|
#### 编译安装
|
||||||
|
|
||||||
|
**dev分支用于开发,Flamescion分支是amd64,Reason分支是aarch64**。然而,绝大多数情况下,Flamescion和Reason的内容是一致的
|
||||||
|
|
||||||
Deepin V20/UOS 21 系统下, 安装依赖
|
Deepin V20/UOS 21 系统下, 安装依赖
|
||||||
|
|
||||||
|
13
debian/changelog
vendored
13
debian/changelog
vendored
@ -1,3 +1,16 @@
|
|||||||
|
spark-store (4.2.7.3) stable; urgency=medium
|
||||||
|
|
||||||
|
* 修复:aptss现在会正确地透传错误码而不是exit 0
|
||||||
|
* 修复:下载时如果卡0%(无法下载metalink),会在超时后报错中断而不是一直傻等
|
||||||
|
* 修复:排队下载时CPU占满单核的bug https://gitee.com/deepin-community-store/spark-store/issues/I7B91V
|
||||||
|
* 修复:在终端中打开的icon过大导致无法投稿到UOS
|
||||||
|
* 修复:v23下编译出错
|
||||||
|
* 薪怎:支持崩溃日志收集系统
|
||||||
|
|
||||||
|
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spark-store (4.2.7.2) stable; urgency=medium
|
spark-store (4.2.7.2) stable; urgency=medium
|
||||||
|
|
||||||
* 新增:内置在终端打开功能
|
* 新增:内置在终端打开功能
|
||||||
|
3
debian/control
vendored
3
debian/control
vendored
@ -5,7 +5,8 @@ Priority: optional
|
|||||||
Build-Depends:
|
Build-Depends:
|
||||||
debhelper (>= 9),
|
debhelper (>= 9),
|
||||||
pkg-config,
|
pkg-config,
|
||||||
qtchooser (>= 55-gc9562a1-1~),
|
qtchooser (>= 55-gc9562a1-1~) | qt5-default,
|
||||||
|
qtbase5-dev,
|
||||||
libqt5core5a,
|
libqt5core5a,
|
||||||
libqt5gui5,
|
libqt5gui5,
|
||||||
libqt5widgets5,
|
libqt5widgets5,
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 89 KiB |
@ -2,6 +2,8 @@
|
|||||||
#include "mainwindow-dtk.h"
|
#include "mainwindow-dtk.h"
|
||||||
#include "utils/utils.h"
|
#include "utils/utils.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QJsonArray>
|
||||||
#include <DPlatformWindowHandle>
|
#include <DPlatformWindowHandle>
|
||||||
#include <DLog>
|
#include <DLog>
|
||||||
#include <DGuiApplicationHelper>
|
#include <DGuiApplicationHelper>
|
||||||
|
@ -5,13 +5,16 @@
|
|||||||
#include <QtConcurrent>
|
#include <QtConcurrent>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
|
||||||
|
#define DEFAULTURL "d.store.deepinos.org.cn"
|
||||||
|
#define MAXWAITTIME 200000
|
||||||
|
|
||||||
DownloadController::DownloadController(QObject *parent)
|
DownloadController::DownloadController(QObject *parent)
|
||||||
{
|
{
|
||||||
Q_UNUSED(parent)
|
Q_UNUSED(parent)
|
||||||
|
|
||||||
// 初始化默认域名
|
// 初始化默认域名
|
||||||
domains.clear();
|
domains.clear();
|
||||||
domains.append("d.store.deepinos.org.cn");
|
domains.append(DEFAULTURL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
domains = {
|
domains = {
|
||||||
@ -37,7 +40,8 @@ bool checkMeatlink(QString metaUrl)
|
|||||||
{
|
{
|
||||||
metaStatus.remove();
|
metaStatus.remove();
|
||||||
}
|
}
|
||||||
system("curl -I -s --connect-timeout 5 " + metaUrl.toUtf8() + " -w %{http_code} |tail -n1 > /tmp/spark-store/metaStatus.txt");
|
QString cmd = QString("curl -I -s --connect-timeout 5 %1 -w %{http_code} |tail -n1 > /tmp/spark-store/metaStatus.txt").arg(metaUrl);
|
||||||
|
system(cmd.toUtf8().data());
|
||||||
if (metaStatus.open(QFile::ReadOnly) && QString(metaStatus.readAll()).toUtf8() == "200")
|
if (metaStatus.open(QFile::ReadOnly) && QString(metaStatus.readAll()).toUtf8() == "200")
|
||||||
{
|
{
|
||||||
metaStatus.remove();
|
metaStatus.remove();
|
||||||
@ -68,9 +72,13 @@ void gennerateDomain(QVector<QString> &domains)
|
|||||||
}
|
}
|
||||||
if (domains.size() == 0)
|
if (domains.size() == 0)
|
||||||
{
|
{
|
||||||
domains.append("d.store.deepinos.org.cn");
|
domains.append(DEFAULTURL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
domains.append(DEFAULTURL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -102,34 +110,36 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
// qDebug() << domains << domains.size();
|
// qDebug() << domains << domains.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString aria2Command = "-d";
|
QString aria2Command = "-d"; //下载目录
|
||||||
QString aria2Urls = "";
|
QString aria2Urls = ""; //下载地址
|
||||||
QString aria2Verbose = "--summary-interval=1";
|
QString aria2Verbose = "--summary-interval=1"; //显示下载速度
|
||||||
QString aria2SizePerThreads = "--min-split-size=1M";
|
QString aria2SizePerThreads = "--min-split-size=1M"; //最小分片大小
|
||||||
QString aria2NoConfig = "--no-conf";
|
QString aria2NoConfig = "--no-conf"; //不使用配置文件
|
||||||
QString aria2NoSeeds = "--seed-time=0";
|
QString aria2NoSeeds = "--seed-time=0"; //不做种
|
||||||
QStringList command;
|
QStringList command;
|
||||||
QString downloadDir = "/tmp/spark-store/";
|
QString downloadDir = "/tmp/spark-store/"; //下载目录
|
||||||
QString aria2ConnectionPerServer = "--max-connection-per-server=1";
|
QString aria2ConnectionPerServer = "--max-connection-per-server=1"; //每个服务器最大连接数
|
||||||
QString aria2ConnectionMax = "--max-concurrent-downloads=16";
|
QString aria2ConnectionMax = "--max-concurrent-downloads=16"; //最大同时下载数
|
||||||
QString aria2DNSCommand = "--async-dns-server=119.29.29.29,223.5.5.5";
|
|
||||||
|
|
||||||
if (useMetalink)
|
|
||||||
|
if (useMetalink) //如果是metalink
|
||||||
{
|
{
|
||||||
command.append(metaUrl.toUtf8());
|
command.append(metaUrl.toUtf8());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < domains.size(); i++)
|
for (int i = 0; i < domains.size(); i++) //遍历域名
|
||||||
{
|
{
|
||||||
command.append(replaceDomain(url, domains.at(i)).replace("+","%2B").toUtf8()); //对+进行转译,避免oss出错
|
command.append(replaceDomain(url, domains.at(i)).replace("+","%2B").toUtf8()); //对+进行转译,避免oss出错
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
qint64 downloadSizeRecord = 0;
|
qint64 downloadSizeRecord = 0; //下载大小记录
|
||||||
QString speedInfo = "";
|
qint8 failDownloadTimes = 0; // 记录重试次数
|
||||||
QString percentInfo = "";
|
const qint8 maxRetryTimes = 3; //最大重试次数
|
||||||
|
QString speedInfo = ""; //显示下载速度
|
||||||
|
QString percentInfo = ""; //显示下载进度
|
||||||
command.append(aria2Command.toUtf8());
|
command.append(aria2Command.toUtf8());
|
||||||
command.append(downloadDir.toUtf8());
|
command.append(downloadDir.toUtf8());
|
||||||
command.append(aria2Verbose.toUtf8());
|
command.append(aria2Verbose.toUtf8());
|
||||||
@ -137,7 +147,7 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
command.append(aria2SizePerThreads.toUtf8());
|
command.append(aria2SizePerThreads.toUtf8());
|
||||||
command.append(aria2ConnectionPerServer.toUtf8());
|
command.append(aria2ConnectionPerServer.toUtf8());
|
||||||
command.append(aria2ConnectionMax.toUtf8());
|
command.append(aria2ConnectionMax.toUtf8());
|
||||||
command.append(aria2DNSCommand.toUtf8());
|
|
||||||
if (useMetalink)
|
if (useMetalink)
|
||||||
{
|
{
|
||||||
command.append(aria2NoSeeds.toUtf8());
|
command.append(aria2NoSeeds.toUtf8());
|
||||||
@ -152,11 +162,30 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
cmd.start();
|
cmd.start();
|
||||||
cmd.waitForStarted(-1); //等待启动完成
|
cmd.waitForStarted(-1); //等待启动完成
|
||||||
|
|
||||||
|
// Timer
|
||||||
|
QTimer *timeoutTimer = new QTimer(this);
|
||||||
|
timeoutTimer->setSingleShot(true); // 单次触发
|
||||||
|
connect(timeoutTimer, &QTimer::timeout, [&]() {
|
||||||
|
if (failDownloadTimes < maxRetryTimes) {
|
||||||
|
qDebug() << "Download timeout, restarting...";
|
||||||
|
// 重新启动下载任务的代码
|
||||||
|
restartDownload(cmd, command); // 调用重新启动下载任务的函数
|
||||||
|
failDownloadTimes += 1;
|
||||||
|
timeoutTimer->start(MAXWAITTIME); // 重新启动定时器
|
||||||
|
} else{
|
||||||
|
emit errorOccur(tr("Download Failed, please retry :(")); // 下载失败
|
||||||
|
downloadSuccess = false;
|
||||||
|
cmd.close();
|
||||||
|
cmd.terminate(); // 终止当前的下载进程
|
||||||
|
cmd.waitForFinished(); // 等待进程结束
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
connect(&cmd, &QProcess::readyReadStandardOutput, [&]()
|
connect(&cmd, &QProcess::readyReadStandardOutput, [&]()
|
||||||
{
|
{
|
||||||
|
timeoutTimer->start(MAXWAITTIME); // 重置超时计时器,15秒超时
|
||||||
//通过读取输出计算下载速度
|
//通过读取输出计算下载速度
|
||||||
QString message = cmd.readAllStandardOutput().data();
|
QString message = cmd.readAllStandardOutput().data();
|
||||||
// qDebug() << message;
|
|
||||||
message = message.replace(" ", "");
|
message = message.replace(" ", "");
|
||||||
QStringList list;
|
QStringList list;
|
||||||
qint64 downloadSize = 0;
|
qint64 downloadSize = 0;
|
||||||
@ -179,10 +208,10 @@ void DownloadController::startDownload(const QString &url)
|
|||||||
speedInfo = message.mid(speedPlace1 + 3, speedPlace2 - speedPlace1 - 3);
|
speedInfo = message.mid(speedPlace1 + 3, speedPlace2 - speedPlace1 - 3);
|
||||||
speedInfo += "/s";
|
speedInfo += "/s";
|
||||||
}
|
}
|
||||||
// qDebug() << percentInfo << speedInfo;
|
|
||||||
if (downloadSize >= downloadSizeRecord)
|
if (downloadSize >= downloadSizeRecord)
|
||||||
{
|
{
|
||||||
downloadSizeRecord = downloadSize;
|
downloadSizeRecord = downloadSize;
|
||||||
|
timeoutTimer->stop(); // 如果有进度,停止超时计时器
|
||||||
}
|
}
|
||||||
if (percentInfo == "OK")
|
if (percentInfo == "OK")
|
||||||
{
|
{
|
||||||
@ -244,6 +273,15 @@ void DownloadController::stopDownload()
|
|||||||
pidNumber = -1;
|
pidNumber = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DownloadController::restartDownload(QProcess &cmd, const QStringList &command)
|
||||||
|
{
|
||||||
|
cmd.terminate(); // 终止当前的下载进程
|
||||||
|
cmd.waitForFinished(); // 等待进程结束
|
||||||
|
cmd.setArguments(command); // 重新设置参数
|
||||||
|
cmd.start(); // 重新启动下载
|
||||||
|
cmd.waitForStarted(-1); // 等待启动完成
|
||||||
|
}
|
||||||
|
|
||||||
qint64 DownloadController::getFileSize(const QString &url)
|
qint64 DownloadController::getFileSize(const QString &url)
|
||||||
{
|
{
|
||||||
// 已经无需使用 qtnetwork 再获取 filesize,完全交给 aria2 来计算进度。 为保证兼容性,故保留此函数。
|
// 已经无需使用 qtnetwork 再获取 filesize,完全交给 aria2 来计算进度。 为保证兼容性,故保留此函数。
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
|
#include <QProcess>
|
||||||
|
|
||||||
class DownloadController : public QObject
|
class DownloadController : public QObject
|
||||||
{
|
{
|
||||||
@ -14,6 +15,7 @@ public:
|
|||||||
void setFilename(QString filename);
|
void setFilename(QString filename);
|
||||||
void startDownload(const QString &url);
|
void startDownload(const QString &url);
|
||||||
void stopDownload();
|
void stopDownload();
|
||||||
|
void restartDownload(QProcess &cmd, const QStringList &command);
|
||||||
qint64 getFileSize(const QString& url);
|
qint64 getFileSize(const QString& url);
|
||||||
QString replaceDomain(const QString& url, const QString domain);
|
QString replaceDomain(const QString& url, const QString domain);
|
||||||
|
|
||||||
|
95
src/main.cpp
95
src/main.cpp
@ -2,6 +2,14 @@
|
|||||||
#include "mainwindow-dtk.h"
|
#include "mainwindow-dtk.h"
|
||||||
#include "utils/utils.h"
|
#include "utils/utils.h"
|
||||||
|
|
||||||
|
#include <signal.h>
|
||||||
|
#include <execinfo.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
#include <DSysInfo>
|
#include <DSysInfo>
|
||||||
#include <DApplicationSettings>
|
#include <DApplicationSettings>
|
||||||
#include <DWidgetUtil>
|
#include <DWidgetUtil>
|
||||||
@ -16,12 +24,97 @@
|
|||||||
DCORE_USE_NAMESPACE
|
DCORE_USE_NAMESPACE
|
||||||
DWIDGET_USE_NAMESPACE
|
DWIDGET_USE_NAMESPACE
|
||||||
|
|
||||||
|
static QString buildDateTime;
|
||||||
|
|
||||||
|
|
||||||
|
void crashHandler(int sig) {
|
||||||
|
void *array[50];
|
||||||
|
size_t size = backtrace(array, 50);
|
||||||
|
if (size == 0) {
|
||||||
|
perror("backtrace");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t t = time(NULL);
|
||||||
|
struct tm tm = *localtime(&t);
|
||||||
|
char filename[128];
|
||||||
|
snprintf(filename, sizeof(filename), "/tmp/spark_store_crash_log_%04d%02d%02d_%02d%02d%02d.txt",
|
||||||
|
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||||
|
|
||||||
|
std::ofstream logFile(filename, std::ios::out);
|
||||||
|
if (!logFile.is_open()) {
|
||||||
|
perror("ofstream");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
logFile << "Please send this log to the developer. QQ Group: 872690351\n";
|
||||||
|
logFile << "Build Date and Time: " << buildDateTime.toStdString() << "\n";
|
||||||
|
|
||||||
|
FILE *fp = popen("uname -m", "r");
|
||||||
|
if (fp) {
|
||||||
|
char buffer[256];
|
||||||
|
if (fgets(buffer, sizeof(buffer), fp) != NULL) {
|
||||||
|
// 移除换行符
|
||||||
|
buffer[strcspn(buffer, "\n")] = 0;
|
||||||
|
logFile << "CPU Architecture: " << buffer << "\n";
|
||||||
|
}
|
||||||
|
pclose(fp);
|
||||||
|
} else {
|
||||||
|
logFile << "Failed to gather CPU architecture info.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FILE *fp2 = popen("lsb_release -a", "r");
|
||||||
|
if (fp2) {
|
||||||
|
char buffer[256];
|
||||||
|
while (fgets(buffer, sizeof(buffer), fp2) != NULL) {
|
||||||
|
logFile << buffer;
|
||||||
|
}
|
||||||
|
pclose(fp2);
|
||||||
|
} else {
|
||||||
|
logFile << "Failed to gather distribution info.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
logFile << "Error: signal " << sig << ":\n";
|
||||||
|
for (size_t i = 0; i < size; i++) {
|
||||||
|
char **strings = backtrace_symbols(&array[i], 1);
|
||||||
|
if (strings != NULL && strings[0] != NULL) {
|
||||||
|
logFile << strings[0] << "\n";
|
||||||
|
} else {
|
||||||
|
logFile << "Failed to get symbol.\n";
|
||||||
|
}
|
||||||
|
free(strings);
|
||||||
|
}
|
||||||
|
|
||||||
|
logFile.close();
|
||||||
|
|
||||||
|
char openCmd[256];
|
||||||
|
snprintf(openCmd, sizeof(openCmd), "xdg-open %s", filename);
|
||||||
|
if (system(openCmd) == -1) {
|
||||||
|
perror("system");
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "Error: signal %d:\n", sig);
|
||||||
|
backtrace_symbols_fd(array, size, STDERR_FILENO);
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
// 崩溃处理
|
||||||
|
signal(SIGSEGV, crashHandler); // 注册SIGSEGV处理函数
|
||||||
|
|
||||||
|
|
||||||
// Get build time
|
// Get build time
|
||||||
static const QDate buildDate = QLocale(QLocale::English).toDate(QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy");
|
static const QDate buildDate = QLocale(QLocale::English).toDate(QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy");
|
||||||
static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss");
|
static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss");
|
||||||
static const QString buildDateTime = buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString("hh:mm:ss");
|
buildDateTime = buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString("hh:mm:ss");
|
||||||
|
|
||||||
|
|
||||||
// NOTE: 提前设置组织名称和应用名称,避免配置文件位置错误
|
// NOTE: 提前设置组织名称和应用名称,避免配置文件位置错误
|
||||||
DApplication::setOrganizationName("spark-union");
|
DApplication::setOrganizationName("spark-union");
|
||||||
|
@ -17,7 +17,8 @@ big_image::big_image(DBlurEffectWidget *parent) : DBlurEffectWidget(parent),
|
|||||||
layout->addWidget(m_image);
|
layout->addWidget(m_image);
|
||||||
layout->setMargin(0);
|
layout->setMargin(0);
|
||||||
|
|
||||||
// m_image->setParent(this);
|
// Make sure the image has a parent so that it will be freed.
|
||||||
|
m_image->setParent(this);
|
||||||
// m_image->setMaximumSize(1360,768);
|
// m_image->setMaximumSize(1360,768);
|
||||||
m_image->setAlignment(Qt::AlignCenter);
|
m_image->setAlignment(Qt::AlignCenter);
|
||||||
}
|
}
|
||||||
|
@ -169,6 +169,7 @@ void DownloadListWidget::httpFinished() // 完成下载
|
|||||||
{
|
{
|
||||||
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1) // 安装当前应用,堵塞安装,后面的下载suspend
|
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1) // 安装当前应用,堵塞安装,后面的下载suspend
|
||||||
{
|
{
|
||||||
|
QThread::msleep(500); // 休眠500ms,减少CPU负担
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
downloaditemlist[nowDownload - 1]->free = true;
|
downloaditemlist[nowDownload - 1]->free = true;
|
||||||
@ -179,18 +180,16 @@ void DownloadListWidget::httpFinished() // 完成下载
|
|||||||
// 如果有排队则下载下一个
|
// 如果有排队则下载下一个
|
||||||
qDebug() << "Download: 切换下一个下载...";
|
qDebug() << "Download: 切换下一个下载...";
|
||||||
nowDownload += 1;
|
nowDownload += 1;
|
||||||
while (downloaditemlist[nowDownload - 1]->close)
|
while (nowDownload <= allDownload && downloaditemlist[nowDownload - 1]->close)
|
||||||
{
|
{
|
||||||
nowDownload += 1;
|
nowDownload += 1;
|
||||||
if (nowDownload >= allDownload)
|
}
|
||||||
|
if (nowDownload <= allDownload)
|
||||||
{
|
{
|
||||||
nowDownload = allDownload;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
QString fileName = downloaditemlist[nowDownload - 1]->getName();
|
QString fileName = downloaditemlist[nowDownload - 1]->getName();
|
||||||
startRequest(urList.at(nowDownload - 1), fileName);
|
startRequest(urList.at(nowDownload - 1), fileName);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,12 +235,17 @@ void DownloadListWidget::on_pushButton_clicked()
|
|||||||
void DownloadListWidget::slotInstallFinished(bool success)
|
void DownloadListWidget::slotInstallFinished(bool success)
|
||||||
{
|
{
|
||||||
// NOTE: 仅在安装成功后判断是否需要退出后台
|
// NOTE: 仅在安装成功后判断是否需要退出后台
|
||||||
if (success) {
|
if (!success) {
|
||||||
toDownload -= 1; // 安装完以后减少待安装数目
|
qDebug() << "Download: install failed";
|
||||||
qDebug() << "Download: 还没有下载的数目:" << toDownload;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (toDownload == 0)
|
if (toDownload > 0) {
|
||||||
{
|
toDownload -= 1;
|
||||||
|
qDebug() << "Download: toDownload" << toDownload;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toDownload == 0) {
|
||||||
Application *app = qobject_cast<Application *>(qApp);
|
Application *app = qobject_cast<Application *>(qApp);
|
||||||
MainWindow *mainWindow = app->mainWindow();
|
MainWindow *mainWindow = app->mainWindow();
|
||||||
if (mainWindow->isCloseWindowAnimation() == true)
|
if (mainWindow->isCloseWindowAnimation() == true)
|
||||||
@ -250,5 +254,4 @@ void DownloadListWidget::slotInstallFinished(bool success)
|
|||||||
qApp->quit();
|
qApp->quit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,7 @@ if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] ;
|
|||||||
ret="$?"
|
ret="$?"
|
||||||
if [ "$ret" -ne 0 ];then
|
if [ "$ret" -ne 0 ];then
|
||||||
echo -e "\e[1;33m$TRANSHELL_CONTENT_PLEASE_USE_APTSS_INSTEAD_OF_APT\e[0m"
|
echo -e "\e[1;33m$TRANSHELL_CONTENT_PLEASE_USE_APTSS_INSTEAD_OF_APT\e[0m"
|
||||||
|
exit $ret
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
@ -268,16 +268,24 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>DAboutDialog</name>
|
<name>DAboutDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="139"/>
|
<location filename="../src/application.cpp" line="141"/>
|
||||||
<source>Version: %1</source>
|
<source>Version: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="149"/>
|
<location filename="../src/application.cpp" line="151"/>
|
||||||
<source>%1 is released under %2</source>
|
<source>%1 is released under %2</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>DownloadController</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/backend/downloadworker.cpp" line="176"/>
|
||||||
|
<source>Download Failed, please retry :(</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>DownloadItem</name>
|
<name>DownloadItem</name>
|
||||||
<message>
|
<message>
|
||||||
@ -506,19 +514,19 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="33"/>
|
<location filename="../src/application.cpp" line="35"/>
|
||||||
<location filename="../src/application.cpp" line="34"/>
|
<location filename="../src/application.cpp" line="36"/>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="38"/>
|
<location filename="../src/application.cpp" line="40"/>
|
||||||
<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>
|
<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>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="146"/>
|
<location filename="../src/application.cpp" line="148"/>
|
||||||
<source>Spark Project</source>
|
<source>Spark Project</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -268,16 +268,24 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>DAboutDialog</name>
|
<name>DAboutDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="139"/>
|
<location filename="../src/application.cpp" line="141"/>
|
||||||
<source>Version: %1</source>
|
<source>Version: %1</source>
|
||||||
<translation>Version: %1</translation>
|
<translation>Version: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="149"/>
|
<location filename="../src/application.cpp" line="151"/>
|
||||||
<source>%1 is released under %2</source>
|
<source>%1 is released under %2</source>
|
||||||
<translation>%1 publié sous %2</translation>
|
<translation>%1 publié sous %2</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>DownloadController</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/backend/downloadworker.cpp" line="176"/>
|
||||||
|
<source>Download Failed, please retry :(</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>DownloadItem</name>
|
<name>DownloadItem</name>
|
||||||
<message>
|
<message>
|
||||||
@ -506,19 +514,19 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="33"/>
|
<location filename="../src/application.cpp" line="35"/>
|
||||||
<location filename="../src/application.cpp" line="34"/>
|
<location filename="../src/application.cpp" line="36"/>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation>Le Spark store</translation>
|
<translation>Le Spark store</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="38"/>
|
<location filename="../src/application.cpp" line="40"/>
|
||||||
<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>
|
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||||
<translation><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></translation>
|
<translation><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="146"/>
|
<location filename="../src/application.cpp" line="148"/>
|
||||||
<source>Spark Project</source>
|
<source>Spark Project</source>
|
||||||
<translation>Le projet Spark</translation>
|
<translation>Le projet Spark</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -268,16 +268,24 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>DAboutDialog</name>
|
<name>DAboutDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="139"/>
|
<location filename="../src/application.cpp" line="141"/>
|
||||||
<source>Version: %1</source>
|
<source>Version: %1</source>
|
||||||
<translation>版本:%1</translation>
|
<translation>版本:%1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="149"/>
|
<location filename="../src/application.cpp" line="151"/>
|
||||||
<source>%1 is released under %2</source>
|
<source>%1 is released under %2</source>
|
||||||
<translation>%1遵循%2协议发布</translation>
|
<translation>%1遵循%2协议发布</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>DownloadController</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/backend/downloadworker.cpp" line="176"/>
|
||||||
|
<source>Download Failed, please retry :(</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>DownloadItem</name>
|
<name>DownloadItem</name>
|
||||||
<message>
|
<message>
|
||||||
@ -506,19 +514,19 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="33"/>
|
<location filename="../src/application.cpp" line="35"/>
|
||||||
<location filename="../src/application.cpp" line="34"/>
|
<location filename="../src/application.cpp" line="36"/>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation>星火应用商店</translation>
|
<translation>星火应用商店</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="38"/>
|
<location filename="../src/application.cpp" line="40"/>
|
||||||
<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>
|
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||||
<translation><span style=' font-size:10pt;font-weight:60;'>一款由社区提供的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>星火计划开发者</span></translation>
|
<translation><span style=' font-size:10pt;font-weight:60;'>一款由社区提供的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>星火计划开发者</span></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="146"/>
|
<location filename="../src/application.cpp" line="148"/>
|
||||||
<source>Spark Project</source>
|
<source>Spark Project</source>
|
||||||
<translation>星火计划</translation>
|
<translation>星火计划</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -268,16 +268,24 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>DAboutDialog</name>
|
<name>DAboutDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="139"/>
|
<location filename="../src/application.cpp" line="141"/>
|
||||||
<source>Version: %1</source>
|
<source>Version: %1</source>
|
||||||
<translation>版本:%1</translation>
|
<translation>版本:%1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="149"/>
|
<location filename="../src/application.cpp" line="151"/>
|
||||||
<source>%1 is released under %2</source>
|
<source>%1 is released under %2</source>
|
||||||
<translation>%1遵循%2协议发布</translation>
|
<translation>%1遵循%2协议发布</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>DownloadController</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../src/backend/downloadworker.cpp" line="176"/>
|
||||||
|
<source>Download Failed, please retry :(</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>DownloadItem</name>
|
<name>DownloadItem</name>
|
||||||
<message>
|
<message>
|
||||||
@ -506,19 +514,19 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>QObject</name>
|
<name>QObject</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="33"/>
|
<location filename="../src/application.cpp" line="35"/>
|
||||||
<location filename="../src/application.cpp" line="34"/>
|
<location filename="../src/application.cpp" line="36"/>
|
||||||
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
|
||||||
<source>Spark Store</source>
|
<source>Spark Store</source>
|
||||||
<translation>星火应用商店</translation>
|
<translation>星火应用商店</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="38"/>
|
<location filename="../src/application.cpp" line="40"/>
|
||||||
<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>
|
<source><span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>Spark developers</span></source>
|
||||||
<translation><span style=' font-size:10pt;font-weight:60;'>一款由社区提供的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>星火计划开发者</span></translation>
|
<translation><span style=' font-size:10pt;font-weight:60;'>一款由社区提供的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>星火计划开发者</span></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/application.cpp" line="146"/>
|
<location filename="../src/application.cpp" line="148"/>
|
||||||
<source>Spark Project</source>
|
<source>Spark Project</source>
|
||||||
<translation>星火计划</translation>
|
<translation>星火计划</translation>
|
||||||
</message>
|
</message>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user