!239 4273 理之律者

Merge pull request !239 from shenmo/dev
This commit is contained in:
shenmo 2023-09-17 00:49:33 +00:00 committed by Gitee
commit ad1efd8630
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
18 changed files with 271 additions and 80 deletions

View File

@ -2,7 +2,7 @@ version: '1.0'
name: dtk-build-release-tag-20220425
displayName: dtk-build-release-tag
triggers:
trigger: auto
trigger: manual
push:
tags:
prefix:

View File

@ -25,10 +25,12 @@ stages:
- apt update
- export DEBIAN_FRONTEND=noninteractive
- 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
- 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
- mkdir -p DEBIAN/root/build-spark
- mv ../spark-store-git DEBIAN/root/build-spark/spark-store

View File

@ -2,7 +2,6 @@
[![star](https://gitee.com/deepin-community-store/spark-store/badge/star.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/stargazers) [![fork](https://gitee.com/deepin-community-store/spark-store/badge/fork.svg?theme=gvp)](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
@ -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.
Distrobution supportedDeepin 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
@ -35,6 +34,7 @@ If you are using Debian11/Ubuntu 20.04, you will need extra dependency package.
---
#### 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

View File

@ -2,20 +2,22 @@
[![star](https://gitee.com/deepin-community-store/spark-store/badge/star.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/stargazers) [![fork](https://gitee.com/deepin-community-store/spark-store/badge/fork.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/members)
## 请注意aarch64的支持是实验性的并未确认持续支持
众所周知,国内的Linux应用比较少wine应用难以获取优质工具分散在民间各大论坛无法形成合力难以改善生态
国内的Linux应用比较少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)
*关于OpenKylin和deepin 23*
支持计划将会在对应系统发布正式版之后开始评估和执行
希望看到这里的人也可以加入我们的队伍开发或者投递应用都很欢迎共同构建Linux应用生态
@ -33,6 +35,7 @@
---
#### 编译安装
**dev分支用于开发Flamescion分支是amd64,Reason分支是aarch64**。然而绝大多数情况下Flamescion和Reason的内容是一致的
Deepin V20/UOS 21 系统下, 安装依赖

13
debian/changelog vendored
View File

@ -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
* 新增:内置在终端打开功能

3
debian/control vendored
View File

@ -5,7 +5,8 @@ Priority: optional
Build-Depends:
debhelper (>= 9),
pkg-config,
qtchooser (>= 55-gc9562a1-1~),
qtchooser (>= 55-gc9562a1-1~) | qt5-default,
qtbase5-dev,
libqt5core5a,
libqt5gui5,
libqt5widgets5,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 89 KiB

View File

@ -2,6 +2,8 @@
#include "mainwindow-dtk.h"
#include "utils/utils.h"
#include <QDir>
#include <QJsonArray>
#include <DPlatformWindowHandle>
#include <DLog>
#include <DGuiApplicationHelper>

View File

@ -5,13 +5,16 @@
#include <QtConcurrent>
#include <QStandardPaths>
#define DEFAULTURL "d.store.deepinos.org.cn"
#define MAXWAITTIME 200000
DownloadController::DownloadController(QObject *parent)
{
Q_UNUSED(parent)
// 初始化默认域名
domains.clear();
domains.append("d.store.deepinos.org.cn");
domains.append(DEFAULTURL);
/*
domains = {
@ -37,7 +40,8 @@ bool checkMeatlink(QString metaUrl)
{
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")
{
metaStatus.remove();
@ -68,9 +72,13 @@ void gennerateDomain(QVector<QString> &domains)
}
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();
}
QString aria2Command = "-d";
QString aria2Urls = "";
QString aria2Verbose = "--summary-interval=1";
QString aria2SizePerThreads = "--min-split-size=1M";
QString aria2NoConfig = "--no-conf";
QString aria2NoSeeds = "--seed-time=0";
QString aria2Command = "-d"; //下载目录
QString aria2Urls = ""; //下载地址
QString aria2Verbose = "--summary-interval=1"; //显示下载速度
QString aria2SizePerThreads = "--min-split-size=1M"; //最小分片大小
QString aria2NoConfig = "--no-conf"; //不使用配置文件
QString aria2NoSeeds = "--seed-time=0"; //不做种
QStringList command;
QString downloadDir = "/tmp/spark-store/";
QString aria2ConnectionPerServer = "--max-connection-per-server=1";
QString aria2ConnectionMax = "--max-concurrent-downloads=16";
QString aria2DNSCommand = "--async-dns-server=119.29.29.29,223.5.5.5";
QString downloadDir = "/tmp/spark-store/"; //下载目录
QString aria2ConnectionPerServer = "--max-connection-per-server=1"; //每个服务器最大连接数
QString aria2ConnectionMax = "--max-concurrent-downloads=16"; //最大同时下载数
if (useMetalink)
if (useMetalink) //如果是metalink
{
command.append(metaUrl.toUtf8());
}
else
{
for (int i = 0; i < domains.size(); i++)
for (int i = 0; i < domains.size(); i++) //遍历域名
{
command.append(replaceDomain(url, domains.at(i)).replace("+","%2B").toUtf8()); //对+进行转译避免oss出错
}
}
qint64 downloadSizeRecord = 0;
QString speedInfo = "";
QString percentInfo = "";
qint64 downloadSizeRecord = 0; //下载大小记录
qint8 failDownloadTimes = 0; // 记录重试次数
const qint8 maxRetryTimes = 3; //最大重试次数
QString speedInfo = ""; //显示下载速度
QString percentInfo = ""; //显示下载进度
command.append(aria2Command.toUtf8());
command.append(downloadDir.toUtf8());
command.append(aria2Verbose.toUtf8());
@ -137,7 +147,7 @@ void DownloadController::startDownload(const QString &url)
command.append(aria2SizePerThreads.toUtf8());
command.append(aria2ConnectionPerServer.toUtf8());
command.append(aria2ConnectionMax.toUtf8());
command.append(aria2DNSCommand.toUtf8());
if (useMetalink)
{
command.append(aria2NoSeeds.toUtf8());
@ -152,11 +162,30 @@ void DownloadController::startDownload(const QString &url)
cmd.start();
cmd.waitForStarted(-1); //等待启动完成
// Timer
QTimer *timeoutTimer = new QTimer(this);
timeoutTimer->setSingleShot(true); // 单次触发
connect(timeoutTimer, &QTimer::timeout, [&]() {
if (failDownloadTimes < maxRetryTimes) {
qDebug() << "Download timeout, restarting...";
// 重新启动下载任务的代码
restartDownload(cmd, command); // 调用重新启动下载任务的函数
failDownloadTimes += 1;
timeoutTimer->start(MAXWAITTIME); // 重新启动定时器
} else{
emit errorOccur(tr("Download Failed, please retry :(")); // 下载失败
downloadSuccess = false;
cmd.close();
cmd.terminate(); // 终止当前的下载进程
cmd.waitForFinished(); // 等待进程结束
}
});
connect(&cmd, &QProcess::readyReadStandardOutput, [&]()
{
timeoutTimer->start(MAXWAITTIME); // 重置超时计时器15秒超时
//通过读取输出计算下载速度
QString message = cmd.readAllStandardOutput().data();
// qDebug() << message;
message = message.replace(" ", "");
QStringList list;
qint64 downloadSize = 0;
@ -179,10 +208,10 @@ void DownloadController::startDownload(const QString &url)
speedInfo = message.mid(speedPlace1 + 3, speedPlace2 - speedPlace1 - 3);
speedInfo += "/s";
}
// qDebug() << percentInfo << speedInfo;
if (downloadSize >= downloadSizeRecord)
{
downloadSizeRecord = downloadSize;
timeoutTimer->stop(); // 如果有进度,停止超时计时器
}
if (percentInfo == "OK")
{
@ -244,6 +273,15 @@ void DownloadController::stopDownload()
pidNumber = -1;
}
void DownloadController::restartDownload(QProcess &cmd, const QStringList &command)
{
cmd.terminate(); // 终止当前的下载进程
cmd.waitForFinished(); // 等待进程结束
cmd.setArguments(command); // 重新设置参数
cmd.start(); // 重新启动下载
cmd.waitForStarted(-1); // 等待启动完成
}
qint64 DownloadController::getFileSize(const QString &url)
{
// 已经无需使用 qtnetwork 再获取 filesize完全交给 aria2 来计算进度。 为保证兼容性,故保留此函数。

View File

@ -3,6 +3,7 @@
#include <QObject>
#include <QVector>
#include <QProcess>
class DownloadController : public QObject
{
@ -14,6 +15,7 @@ public:
void setFilename(QString filename);
void startDownload(const QString &url);
void stopDownload();
void restartDownload(QProcess &cmd, const QStringList &command);
qint64 getFileSize(const QString& url);
QString replaceDomain(const QString& url, const QString domain);

View File

@ -2,6 +2,14 @@
#include "mainwindow-dtk.h"
#include "utils/utils.h"
#include <signal.h>
#include <execinfo.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <DSysInfo>
#include <DApplicationSettings>
#include <DWidgetUtil>
@ -16,12 +24,97 @@
DCORE_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[])
{
// 崩溃处理
signal(SIGSEGV, crashHandler); // 注册SIGSEGV处理函数
// Get build time
static const QDate buildDate = QLocale(QLocale::English).toDate(QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy");
static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss");
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: 提前设置组织名称和应用名称,避免配置文件位置错误
DApplication::setOrganizationName("spark-union");

View File

@ -17,7 +17,8 @@ big_image::big_image(DBlurEffectWidget *parent) : DBlurEffectWidget(parent),
layout->addWidget(m_image);
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->setAlignment(Qt::AlignCenter);
}

View File

@ -169,6 +169,7 @@ void DownloadListWidget::httpFinished() // 完成下载
{
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1) // 安装当前应用堵塞安装后面的下载suspend
{
QThread::msleep(500); // 休眠500ms减少CPU负担
continue;
}
downloaditemlist[nowDownload - 1]->free = true;
@ -179,17 +180,15 @@ void DownloadListWidget::httpFinished() // 完成下载
// 如果有排队则下载下一个
qDebug() << "Download: 切换下一个下载...";
nowDownload += 1;
while (downloaditemlist[nowDownload - 1]->close)
while (nowDownload <= allDownload && downloaditemlist[nowDownload - 1]->close)
{
nowDownload += 1;
if (nowDownload >= allDownload)
{
nowDownload = allDownload;
return;
}
}
QString fileName = downloaditemlist[nowDownload - 1]->getName();
startRequest(urList.at(nowDownload - 1), fileName);
if (nowDownload <= allDownload)
{
QString fileName = downloaditemlist[nowDownload - 1]->getName();
startRequest(urList.at(nowDownload - 1), fileName);
}
}
});
}
@ -236,19 +235,23 @@ void DownloadListWidget::on_pushButton_clicked()
void DownloadListWidget::slotInstallFinished(bool success)
{
// NOTE: 仅在安装成功后判断是否需要退出后台
if (success) {
toDownload -= 1; // 安装完以后减少待安装数目
qDebug() << "Download: 还没有下载的数目:" << toDownload;
if (!success) {
qDebug() << "Download: install failed";
return;
}
if (toDownload == 0)
if (toDownload > 0) {
toDownload -= 1;
qDebug() << "Download: toDownload" << toDownload;
}
if (toDownload == 0) {
Application *app = qobject_cast<Application *>(qApp);
MainWindow *mainWindow = app->mainWindow();
if (mainWindow->isCloseWindowAnimation() == true)
{
Application *app = qobject_cast<Application *>(qApp);
MainWindow *mainWindow = app->mainWindow();
if (mainWindow->isCloseWindowAnimation() == true)
{
qDebug() << "Download: 后台安装结束,退出程序";
qApp->quit();
}
qDebug() << "Download: 后台安装结束,退出程序";
qApp->quit();
}
}
}

View File

@ -76,6 +76,7 @@ if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] ;
ret="$?"
if [ "$ret" -ne 0 ];then
echo -e "\e[1;33m$TRANSHELL_CONTENT_PLEASE_USE_APTSS_INSTEAD_OF_APT\e[0m"
exit $ret
fi

View File

@ -268,16 +268,24 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="139"/>
<location filename="../src/application.cpp" line="141"/>
<source>Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="149"/>
<location filename="../src/application.cpp" line="151"/>
<source>%1 is released under %2</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadController</name>
<message>
<location filename="../src/backend/downloadworker.cpp" line="176"/>
<source>Download Failed, please retry :(</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -506,19 +514,19 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/application.cpp" line="35"/>
<location filename="../src/application.cpp" line="36"/>
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="40"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="146"/>
<location filename="../src/application.cpp" line="148"/>
<source>Spark Project</source>
<translation type="unfinished"></translation>
</message>

View File

@ -268,16 +268,24 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="139"/>
<location filename="../src/application.cpp" line="141"/>
<source>Version: %1</source>
<translation>Version: %1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="149"/>
<location filename="../src/application.cpp" line="151"/>
<source>%1 is released under %2</source>
<translation>%1 publié sous %2</translation>
</message>
</context>
<context>
<name>DownloadController</name>
<message>
<location filename="../src/backend/downloadworker.cpp" line="176"/>
<source>Download Failed, please retry :(</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -506,19 +514,19 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/application.cpp" line="35"/>
<location filename="../src/application.cpp" line="36"/>
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
<source>Spark Store</source>
<translation>Le Spark store</translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="40"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="146"/>
<location filename="../src/application.cpp" line="148"/>
<source>Spark Project</source>
<translation>Le projet Spark</translation>
</message>

View File

@ -268,16 +268,24 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="139"/>
<location filename="../src/application.cpp" line="141"/>
<source>Version: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="149"/>
<location filename="../src/application.cpp" line="151"/>
<source>%1 is released under %2</source>
<translation>%1%2</translation>
</message>
</context>
<context>
<name>DownloadController</name>
<message>
<location filename="../src/backend/downloadworker.cpp" line="176"/>
<source>Download Failed, please retry :(</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -506,19 +514,19 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/application.cpp" line="35"/>
<location filename="../src/application.cpp" line="36"/>
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="40"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火计划开发者&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="146"/>
<location filename="../src/application.cpp" line="148"/>
<source>Spark Project</source>
<translation></translation>
</message>

View File

@ -268,16 +268,24 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="139"/>
<location filename="../src/application.cpp" line="141"/>
<source>Version: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="149"/>
<location filename="../src/application.cpp" line="151"/>
<source>%1 is released under %2</source>
<translation>%1%2</translation>
</message>
</context>
<context>
<name>DownloadController</name>
<message>
<location filename="../src/backend/downloadworker.cpp" line="176"/>
<source>Download Failed, please retry :(</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -506,19 +514,19 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/application.cpp" line="35"/>
<location filename="../src/application.cpp" line="36"/>
<location filename="../src/mainwindow-dtk.cpp" line="126"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="40"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火计划开发者&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="146"/>
<location filename="../src/application.cpp" line="148"/>
<source>Spark Project</source>
<translation></translation>
</message>