!178 fix: 修复主窗口关闭后,关于窗口没有自动关闭的问题

* 添加 Application 类,继承 DApplication,将 main 函数中设置属性、关于信息等操作移至 Application 构造函数中进行
* 1.1. 添加 setOrganizationName 操作,设置组织名称为 spark-union,与 SWRT 保持一致
* 1.2. 设置组织名称后,QStandardPaths::AppConfigLocation 等路径相应改变,修改所有配置文件和缓存文件路径(server.list/config.ini 等)
* 1.3. 关于对话框设置父对象后,对话框背景色受主窗口样式表影响,移动部分控件样式表设置方式与位置
* 修复关于窗口不显示组织 Logo 的问题,补充丢失的资源文件,整理资源文件
* 去除 .pro 文件中无效的更新翻译文件脚本调用,整理 .pro 文件,添加编译时更新 ts 文件脚本调用
* 继续修复偶现关闭客户端时崩溃问题(疑似 aria2c 进程未启动,pid 未初始化为随机值,执行 kill 操作时未判断导致)
* 修复进入详情页时焦点默认在分享链接按钮上的问题
* 暂时去除没有意义的 DBus 接口,使用 DGuiApplicationHelper::newProcessInstance 获取新进程的启动参数
* 更新翻译文件,去除已经不存在的翻译
This commit is contained in:
忘记、过去 2022-12-25 08:28:05 +00:00 committed by Pluto
parent 1b9c925183
commit f99c0839dd
24 changed files with 752 additions and 1427 deletions

125
debian/changelog vendored
View File

@ -12,66 +12,75 @@ spark-store (4.1.1) stable; urgency=medium
* fix:更新失效
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.1.0) stable; urgency=medium
* feat: 现在可以支持UOS签名包问题了
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.0.1) stable; urgency=medium
* feat: 提升Ubuntu下的显示效果
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.0.0) stable; urgency=medium
* feat: 修复了成吨的bug后开始正式版
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.0.0~test2) stable; urgency=medium
* feat: 修复了成吨的bug后开始公测
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.0.0~test1) stable; urgency=medium
* feat: 柚子过来补充一下啦
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.4~test1) stable; urgency=medium
* feat: aptss不再尝试安装apt-fast转而自带
* chore: 删除password-check模块
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3) stable; urgency=medium
* feat: 首页链接调用浏览器打开
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
0spark-store (3.3.3~test5) stable; urgency=medium
spark-store (3.3.3~test5) stable; urgency=medium
* 修复可能的内存泄漏问题
* 修复应用搜索为空但仍显示上一次搜索结果的问题
* 修复动画加载延后的问题
* 修复统计下载量卡主渲染线程的问题
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test4) stable; urgency=medium
* Enable i386 arch support by default
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test3) stable; urgency=medium
@ -84,7 +93,8 @@ spark-store (3.3.3~test2) stable; urgency=medium
* bug fix: 更新和检查更新出错时不报错.此更新需要一个推送
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.3~test1) stable; urgency=medium
@ -92,132 +102,137 @@ spark-store (3.3.3~test1) stable; urgency=medium
* 图形环境中所有root权限的组件剥离到cli(可用于deepin 23 daily只保证商店本体正常运作不处理安装依赖不满足)
* 文案更改:更新检查-->检查更新
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.1~test1) stable; urgency=medium
* 安装时不再需要联网
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.4) stable; urgency=medium
* 为减轻服务器压力,不再单独更新某一个应用,而是作为整体更新
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.3) stable; urgency=medium
* 回滚 更新中行为到进度条而不是实时输出
* 更新应用时显示正在更新哪个应用
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.2) stable; urgency=medium
* 修复 pkexec未执行
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3.0.1) stable; urgency=medium
* 修复 检查更新的更新进程未实际运行
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3) stable; urgency=medium
* 修复 检查更新 未刷新软件源
* 把检查更新单独拿出作为左列
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3~test3) stable; urgency=medium
* 把检查更新加入免密码
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3~test2) stable; urgency=medium
* 更新检测功能全部更改到zenity
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.3~test1) stable; urgency=medium
* zenity选择可更新应用
* 自动更新检测现在会跳过hold
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4) stable; urgency=medium
* 修改tag相关的文案内容wine相关环境已可自动配置了
* 准备发版
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4~test4) stable; urgency=medium
* 现在在商店启动后点击spk链接仍会正常启动 https://gitee.com/deepin-community-store/spark-store/commit/dd6780d636042bf12d77414e6f1552cc7d1ed24c
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4~test3) stable; urgency=medium
* 发版合入到master
* 翻译完毕
* 合入先前的各项改动客户端集成投稿器入口和支持修复安装依赖时间较长时错误地返回“安装完毕”结果现在客户端版本更新时不关闭免密码登录UOS安装进程合并正常aptss中
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4~test2) stable; urgency=medium
* 客户端集成投稿器入口和支持
* 修复:安装依赖时间较长时错误地返回“安装完毕”结果
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.4~test1) stable; urgency=medium
* 客户端更新时不关闭免密码登录
* UOS合并正常aptss中
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.3) stable; urgency=medium
* 客户端异常退出时仍然占用资源问题修复
* 降低dtk依赖版本Debian 11 stable可直接安装
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.2) stable; urgency=medium
* aptss will now refresh the system source before doing install, policy....etc
* 启动客户端GPU加速支持
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2.1) stable; urgency=medium
* 更改刷新系统源的功能
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.2) stable; urgency=medium
@ -230,20 +245,22 @@ spark-store (3.2) stable; urgency=medium
* 修复 在更新检测设置中的是否开启自动更新检测设置项的显示不随开启或关闭状态改变
* 修复 在检测更新时临时降低优先级到100防止系统中有且版本一致的包被反复来回更新
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.6) stable; urgency=medium
* 修复部分情况下无法选中正确的镜像源的问题
* 合入3.1.5以来的各项修改
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-5) stable; urgency=medium
* 从所有镜像源中选取最快镜像源高速下载
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-4) stable; urgency=medium
@ -253,53 +270,54 @@ spark-store (3.1.5-4) stable; urgency=medium
* 更新检测服务优化:从分体改为一体
* aptss 支持自动补全
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-3) stable; urgency=medium
* 包内自带密钥
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-2) stable; urgency=medium
* 下载软件时跳过获取大小,修复部分软件无法下载的问题
* 修复 获取key时出错指定使用http1.1
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5-1) stable; urgency=medium
* 改变更新策略UOS也下载加速但是安装不加速
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.5) stable; urgency=medium
* 改变更新策略,现在支持应用在更新时引入新依赖
* ss-apt-fast现在默认允许降级以与apt使用体验一致
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.4-2) stable; urgency=medium
* 客户端下载使用metalink来支持bt下载加速
* 修复使用更新和安装设置更新商店本体时出错
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.4-1) stable; urgency=medium
* 安装脚本和检测更新脚本检查网络时间超时时间延长至5s
* 修复ssinstall在没有安装apt-fast的情况下首次安装需要依赖的软件时安装失败
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.4) stable; urgency=medium
@ -312,6 +330,7 @@ spark-store (3.1.4) stable; urgency=medium
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3-2) stable; urgency=medium
* 调整 现在与系统更新分开,不再导致更新失败
@ -320,17 +339,17 @@ spark-store (3.1.3-2) stable; urgency=medium
* 修改ss-apt-fast的策略现在除了安装下载和更新都改用apt
* ssinstall 现在也会在不适用ss-apt-fast的时候模拟源了针对UOS
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3-1) stable; urgency=medium
* 修复 下载提前退出
* 移除 下载量显示
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.3) stable; urgency=medium
* Now uses aria2 to download softwares form all mirrors
@ -342,6 +361,7 @@ spark-store (3.1.3) stable; urgency=medium
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (3.1.2) stable; urgency=medium
* Now let apt-fast method support all mirrors
@ -350,8 +370,6 @@ spark-store (3.1.2) stable; urgency=medium
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.1.1) stable; urgency=medium
* Now will delete the link of policy file after uninstall or upgrade
@ -360,8 +378,6 @@ spark-store (3.1.1) stable; urgency=medium
-- shenmo <shenmo@spark-app.store> Mon, 17 Jan 2022 00:00:00 +0800
spark-store (3.1.0) stable; urgency=medium
* Add pkexec policy: ssinstall. Only will be enabled after permitted.
@ -370,7 +386,6 @@ spark-store (3.1.0) stable; urgency=medium
-- 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
@ -380,7 +395,6 @@ spark-store (3.0.3-13) stable; urgency=medium
-- 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
@ -390,8 +404,6 @@ spark-store (3.0.3-12) stable; urgency=medium
-- 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
@ -399,8 +411,6 @@ spark-store (3.0.3-11) stable; urgency=medium
-- 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
@ -413,3 +423,4 @@ 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

View File

@ -14,13 +14,11 @@ SUBDIRS += \
src/spark-dstore-patch \
src/spark-store.pro
#TRANSLATIONS += \
# translations/spark-store_fr.ts \
# translations/spark-store_en.ts \
# translations/spark-store_zh_CN.ts
# Update translation files
CONFIG(release, debug|release): system(bash $${PWD}/translate_generation.sh)
CONFIG(release, debug|release) {
system(bash $${PWD}/translate_update.sh)
system(bash $${PWD}/translate_generation.sh)
}
# Rules for deployment
tool.files += tool/*
@ -64,4 +62,4 @@ INSTALLS += \
service \
bash_completion \
polkit-1
# 暂时不添加
# 暂时不添加

101
src/application.cpp Normal file
View File

@ -0,0 +1,101 @@
#include "application.h"
#include <DPlatformWindowHandle>
#include <DLog>
#include <DGuiApplicationHelper>
#include <DAboutDialog>
#include <QSettings>
#include <QStandardPaths>
DCORE_USE_NAMESPACE
Application::Application(int &argc, char **argv)
: DApplication(argc, argv)
{
// Wayland 环境下使用,防止子控件 Native 化
if (!DPlatformWindowHandle::pluginVersion().isEmpty()) {
setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
}
setAttribute(Qt::AA_UseHighDpiPixmaps);
loadTranslator(); // 载入翻译
setOrganizationName("spark-union");
setApplicationName("spark-store"); // 影响 ~/.local/share/spark-union 下文件夹名称
setApplicationDisplayName(QObject::tr("Spark Store")); // 设置窗口显示标题 (Wayland 下会显示 Qt 原生标题栏)
setProductName(QObject::tr("Spark Store"));
setProductIcon(QIcon::fromTheme("spark-store"));
setApplicationHomePage("https://gitee.com/deepin-community-store");
setApplicationDescription(
QObject::tr(
"<span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/>"
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
"<span style=' font-size:12pt;'>Spark developers</span>"));
setApplicationLicense(" <a href='https://www.gnu.org/licenses/gpl-3.0.html'>GPLv3</a> ");
// 检查 ~/.config/spark-union/spark-store 文件夹是否存在
checkAppConfigLocation();
// 初始化日志模块 (默认日志位置 ~/.cache/spark-union/spark-store)
DLogManager::registerConsoleAppender();
DLogManager::registerFileAppender();
}
void Application::handleAboutAction()
{
if (aboutDialog()) {
DApplication::handleAboutAction();
return;
}
initAboutDialog();
DApplication::handleAboutAction();
}
void Application::setVersionAndBuildDateTime(const QString &version, const QString &buildDateTime)
{
m_version = version;
m_buildDateTime = buildDateTime;
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
if (config.value("build/version").toString() != m_version) {
qDebug() << "Spark Store has been updated!";
config.setValue("build/version", m_version);
config.setValue("build/time", m_buildDateTime);
config.sync();
}
setApplicationVersion(DApplication::buildVersion(config.value("build/version").toString() + "-" + "Flamescion" + "-" + config.value("build/time").toString()));
}
void Application::checkAppConfigLocation()
{
QDir dir(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation));
if (!dir.exists()) {
qWarning() << "AppConfigLocation not existed, creating...";
dir.mkpath(dir.absolutePath());
}
}
void Application::initAboutDialog()
{
// Customized DAboutDialog
DAboutDialog *dialog = new DAboutDialog(activeWindow());
dialog->setProductName(productName());
dialog->setProductIcon(productIcon());
dialog->setVersion(translate("DAboutDialog", "Version: %1").arg(applicationVersion()));
// dialog->setCompanyLogo(QPixmap(":/icon/Logo-Spark.png")); // 根据 shenmo 要求,不显示组织 Logo
dialog->setWebsiteName(QObject::tr("Spark Project"));
dialog->setWebsiteLink(applicationHomePage());
dialog->setDescription(applicationDescription());
dialog->setLicense(translate("DAboutDialog", "%1 is released under %2").arg(productName()).arg(applicationLicense()));
setAboutDialog(dialog);
connect(aboutDialog(), &DAboutDialog::destroyed, this, [=] {
setAboutDialog(nullptr);
});
dialog->hide();
}

27
src/application.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef APPLICATION_H
#define APPLICATION_H
#include <DApplication>
DWIDGET_USE_NAMESPACE
class Application : public DApplication
{
Q_OBJECT
public:
Application(int &argc, char **argv);
void handleAboutAction() override;
void setVersionAndBuildDateTime(const QString &version, const QString &buildDateTime);
private:
void checkAppConfigLocation();
void initAboutDialog();
private:
QString m_version;
QString m_buildDateTime;
};
#endif // APPLICATION_H

View File

@ -1,64 +1,65 @@
<RCC>
<qresource prefix="/">
<file>icon/logo.svg</file>
<file>tags/a2d-small.png</file>
<file>tags/a2d.png</file>
<file>tags/community-small.png</file>
<file>tags/community.png</file>
<file>tags/community.svg</file>
<file>tags/deepin-small.png</file>
<file>tags/deepin.svg</file>
<file>tags/dtk-small.png</file>
<file>tags/dwine2-small.png</file>
<file>tags/dwine5-small.png</file>
<file>tags/dwine5.svg</file>
<file>tags/logo_icon.svg</file>
<file>tags/ubuntu-small.png</file>
<file>tags/ubuntu.png</file>
<file>tags/uos-authorize.svg</file>
<file>tags/uos-small.png</file>
<file>tags/uos.svg</file>
<file>icon/light/back.svg</file>
<file>icon/light/download.svg</file>
<file>icon/light/leftbutton_0.svg</file>
<file>icon/light/leftbutton_1.svg</file>
<file>icon/light/leftbutton_2.svg</file>
<file>icon/light/leftbutton_3.svg</file>
<file>icon/light/leftbutton_4.svg</file>
<file>icon/light/leftbutton_5.svg</file>
<file>icon/light/leftbutton_6.svg</file>
<file>icon/light/leftbutton_7.svg</file>
<file>icon/light/leftbutton_8.svg</file>
<file>icon/light/leftbutton_9.svg</file>
<file>icon/light/leftbutton_10.svg</file>
<file>icon/light/leftbutton_11.svg</file>
<file>icon/light/leftbutton_12.svg</file>
<file>icon/light/box.svg</file>
<file>icon/light/calendar.svg</file>
<file>icon/light/globe.svg</file>
<file>icon/light/folder.svg</file>
<file>icon/light/text.svg</file>
<file>icon/dark/back.svg</file>
<file>icon/dark/box.svg</file>
<file>icon/dark/calendar.svg</file>
<file>icon/dark/download.svg</file>
<file>icon/dark/folder.svg</file>
<file>icon/dark/globe.svg</file>
<file>icon/dark/leftbutton_0.svg</file>
<file>icon/dark/leftbutton_1.svg</file>
<file>icon/dark/leftbutton_2.svg</file>
<file>icon/dark/leftbutton_3.svg</file>
<file>icon/dark/leftbutton_4.svg</file>
<file>icon/dark/leftbutton_5.svg</file>
<file>icon/dark/leftbutton_6.svg</file>
<file>icon/dark/leftbutton_7.svg</file>
<file>icon/dark/leftbutton_8.svg</file>
<file>icon/dark/leftbutton_9.svg</file>
<file>icon/dark/leftbutton_10.svg</file>
<file>icon/dark/leftbutton_11.svg</file>
<file>icon/dark/leftbutton_12.svg</file>
<file>icon/dark/text.svg</file>
<file>icon/light/update.svg</file>
<file>icon/dark/update.svg</file>
</qresource>
</RCC>
<RCC>
<qresource prefix="/">
<file>icon/Logo-Spark.png</file>
<file>icon/dark/back.svg</file>
<file>icon/dark/box.svg</file>
<file>icon/dark/calendar.svg</file>
<file>icon/dark/download.svg</file>
<file>icon/dark/folder.svg</file>
<file>icon/dark/globe.svg</file>
<file>icon/dark/leftbutton_0.svg</file>
<file>icon/dark/leftbutton_1.svg</file>
<file>icon/dark/leftbutton_2.svg</file>
<file>icon/dark/leftbutton_3.svg</file>
<file>icon/dark/leftbutton_4.svg</file>
<file>icon/dark/leftbutton_5.svg</file>
<file>icon/dark/leftbutton_6.svg</file>
<file>icon/dark/leftbutton_7.svg</file>
<file>icon/dark/leftbutton_8.svg</file>
<file>icon/dark/leftbutton_9.svg</file>
<file>icon/dark/leftbutton_10.svg</file>
<file>icon/dark/leftbutton_11.svg</file>
<file>icon/dark/leftbutton_12.svg</file>
<file>icon/dark/text.svg</file>
<file>icon/dark/update.svg</file>
<file>icon/light/back.svg</file>
<file>icon/light/download.svg</file>
<file>icon/light/leftbutton_0.svg</file>
<file>icon/light/leftbutton_1.svg</file>
<file>icon/light/leftbutton_2.svg</file>
<file>icon/light/leftbutton_3.svg</file>
<file>icon/light/leftbutton_4.svg</file>
<file>icon/light/leftbutton_5.svg</file>
<file>icon/light/leftbutton_6.svg</file>
<file>icon/light/leftbutton_7.svg</file>
<file>icon/light/leftbutton_8.svg</file>
<file>icon/light/leftbutton_9.svg</file>
<file>icon/light/leftbutton_10.svg</file>
<file>icon/light/leftbutton_11.svg</file>
<file>icon/light/leftbutton_12.svg</file>
<file>icon/light/box.svg</file>
<file>icon/light/calendar.svg</file>
<file>icon/light/globe.svg</file>
<file>icon/light/folder.svg</file>
<file>icon/light/text.svg</file>
<file>icon/light/update.svg</file>
<file>icon/logo.svg</file>
<file>tags/a2d-small.png</file>
<file>tags/a2d.png</file>
<file>tags/community-small.png</file>
<file>tags/community.png</file>
<file>tags/community.svg</file>
<file>tags/deepin-small.png</file>
<file>tags/deepin.svg</file>
<file>tags/dtk-small.png</file>
<file>tags/dwine2-small.png</file>
<file>tags/dwine5-small.png</file>
<file>tags/dwine5.svg</file>
<file>tags/logo_icon.svg</file>
<file>tags/ubuntu-small.png</file>
<file>tags/ubuntu.png</file>
<file>tags/uos-authorize.svg</file>
<file>tags/uos-small.png</file>
<file>tags/uos.svg</file>
</qresource>
</RCC>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,9 +1,11 @@
#include "downloadworker.h"
#include <QEventLoop>
#include <QProcess>
#include <QRegularExpression>
#include <QDir>
#include <QtConcurrent>
#include <QStandardPaths>
DownloadController::DownloadController(QObject *parent)
{
@ -48,7 +50,7 @@ bool checkMeatlink(QString metaUrl)
void gennerateDomain(QVector<QString> &domains)
{
QFile serverList(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
QFile serverList(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/server.list");
if (serverList.open(QFile::ReadOnly))
{
QStringList list = QString(serverList.readAll()).trimmed().split("\n");
@ -87,14 +89,17 @@ void DownloadController::startDownload(const QString &url)
}
QtConcurrent::run([=]()
{
{
QString metaUrl = url + ".metalink";
qDebug() << "metalink" << metaUrl;
bool useMetalink = false;
if (checkMeatlink(metaUrl)){
if (checkMeatlink(metaUrl))
{
useMetalink = true;
qDebug() << "useMetalink:" << useMetalink;
}else{
}
else
{
gennerateDomain(domains);
// qDebug() << domains << domains.size();
}
@ -111,10 +116,12 @@ void DownloadController::startDownload(const QString &url)
QString aria2ConnectionMax = "--max-concurrent-downloads=16";
QString aria2DNSCommand = "--async-dns-server=119.29.29.29,223.5.5.5";
if (useMetalink){
if (useMetalink)
{
command.append(metaUrl.toUtf8());
}
else{
else
{
for (int i = 0; i < domains.size(); i++)
{
command.append(replaceDomain(url, domains.at(i)).replace("+","%2B").toUtf8()); //对+进行转译避免oss出错
@ -133,7 +140,8 @@ void DownloadController::startDownload(const QString &url)
command.append(aria2ConnectionPerServer.toUtf8());
command.append(aria2ConnectionMax.toUtf8());
command.append(aria2DNSCommand.toUtf8());
if (useMetalink){
if (useMetalink)
{
command.append(aria2NoSeeds.toUtf8());
}
qDebug() << command;
@ -144,8 +152,7 @@ void DownloadController::startDownload(const QString &url)
cmd->start();
cmd->waitForStarted(); //等待启动完成
QObject::connect(cmd, &QProcess::readyReadStandardOutput,
[&]()
QObject::connect(cmd, &QProcess::readyReadStandardOutput, [&]()
{
//通过读取输出计算下载速度
QString message = cmd->readAllStandardOutput().data();
@ -188,8 +195,7 @@ void DownloadController::startDownload(const QString &url)
emit downloadProcess(speedInfo, downloadSizeRecord, fileSize);
}
});
QObject::connect(cmd, &QProcess::readyReadStandardError,
[&]()
QObject::connect(cmd, &QProcess::readyReadStandardError, [&]()
{
emit errorOccur(cmd->readAllStandardError().data());
return;
@ -222,10 +228,16 @@ void DownloadController::startDownload(const QString &url)
*/
void DownloadController::stopDownload()
{
if (pidNumber < 0)
{
return;
}
// 实现下载进程退出
QString killCmd = QString("kill -9 %1").arg(pidNumber);
system(killCmd.toUtf8());
qDebug() << "kill aria2!";
pidNumber = -1;
}
qint64 DownloadController::getFileSize(const QString &url)

View File

@ -21,7 +21,7 @@ public:
private:
int threadNum;
int pidNumber;
int pidNumber = -1;
QString filename;
qint64 fileSize;
QVector<QPair<qint64, qint64>> ranges;

View File

@ -1,39 +1,45 @@
#include "sparkapi.h"
#include <QSettings>
#include <QStandardPaths>
#include <QDebug>
QString SparkAPI::serverUrl = "";
SparkAPI::SparkAPI(QObject *parent) : QObject(parent)
{
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
if (!readConfig.value("server/choose").toString().isEmpty() && readConfig.value("server/updated").toString() == "TRUE")
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
if (!config.value("server/choose").toString().isEmpty() && config.value("server/updated").toBool())
{
SparkAPI::setServerUrl(readConfig.value("server/choose").toString());
SparkAPI::setServerUrl(config.value("server/choose").toString());
}
}
void SparkAPI::get(QUrl url)
{
QNetworkRequest request;
HttpRequest *httprequest = new HttpRequest;
request.setUrl(QUrl(url.toString().replace("+", "%2B")));
connect(httprequest, &HttpRequest::finished, [=](QString data)
{
{
QByteArray arr = data.toUtf8();
//解析Json
QJsonParseError error;
if(QJsonDocument::fromJson(arr,&error).isArray())
{
auto doc = QJsonDocument::fromJson(arr,&error).array();
emit finished(doc);
}else {
auto doc = QJsonDocument::fromJson(arr,&error).object();
emit finishedObject(doc);
}
// 解析 Json
QJsonParseError error;
if(QJsonDocument::fromJson(arr,&error).isArray())
{
auto doc = QJsonDocument::fromJson(arr,&error).array();
emit finished(doc);
} else {
auto doc = QJsonDocument::fromJson(arr,&error).object();
emit finishedObject(doc);
}
httprequest->deleteLater();
});
httprequest->deleteLater(); });
httprequest->getRequest(request);
}
void SparkAPI::getRAW(QUrl url)
{
QNetworkRequest request;
@ -45,30 +51,37 @@ void SparkAPI::getRAW(QUrl url)
httprequest->deleteLater(); });
httprequest->getRequest(request);
}
void SparkAPI::getAppList(QString type)
{
get(QUrl(getServerUrl() + "store/" + type + "/applist.json"));
}
void SparkAPI::getSearchList(QString keyword)
{
get(QUrl("https://search.deepinos.org.cn/appinfo/search?keyword=" + keyword));
}
void SparkAPI::getAppInfo(QUrl spk)
{
get(QUrl(getServerUrl() + "store" + spk.path().replace("+", "%2B") + "/app.json"));
}
void SparkAPI::getAppDownloadTimes(QUrl spk)
{
getRAW(QUrl(getServerUrl() + "store" + spk.path().replace("+", "%2B") + "/download-times.txt"));
}
QString SparkAPI::getServerUrl()
{
return SparkAPI::serverUrl;
}
QString SparkAPI::getImgServerUrl()
{
return SparkAPI::serverUrl;
}
void SparkAPI::setServerUrl(QString url)
{
SparkAPI::serverUrl = url;

View File

@ -1,16 +1,21 @@
#ifndef SPARKAPI_H
#define SPARKAPI_H
#include "utils/httprequest.h"
#include <QObject>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonParseError>
#include "utils/httprequest.h"
#include <QSettings>
#include <QDir>
class SparkAPI : public QObject
{
Q_OBJECT
public:
explicit SparkAPI(QObject *parent = nullptr);
static QString getServerUrl();
static QString getImgServerUrl();
static void setServerUrl(QString url);
@ -20,17 +25,14 @@ public:
void getRAW(QUrl url);
void getAppList(QString type);
void getAppInfo(QUrl spk);
explicit SparkAPI(QObject *parent = nullptr);
private:
static QString serverUrl;
signals:
void finished(QJsonArray);
void finishedRAW(QString);
void finishedObject(QJsonObject);
public slots:
private:
static QString serverUrl;
};
#endif // SPARKAPI_H

View File

@ -1,13 +1,11 @@
#include "application.h"
#include "mainwindow-dtk.h"
#include <DApplication>
#include <DLog>
#include <DPlatformWindowHandle>
#include <DApplicationSettings>
#include <DAboutDialog>
#include <QLabel>
#include <DWidgetUtil>
#include <DSysInfo>
#include <DApplicationSettings>
#include <DWidgetUtil>
#include <QStandardPaths>
DCORE_USE_NAMESPACE
DWIDGET_USE_NAMESPACE
@ -18,35 +16,36 @@ int main(int argc, char *argv[])
static const QString version = "Version 4.1.2";
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");
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
QSettings *setConfig = new QSettings(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
static const QString buildDateTime = buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString("hh:mm:ss");
// 设置桌面环境环境变量
bool isDeepinOS = true;
if (!QString(qgetenv("XDG_CURRENT_DESKTOP")).toLower().startsWith("deepin"))
{
setenv("XDG_CURRENT_DESKTOP", "Deepin", 1);
qputenv("XDG_CURRENT_DESKTOP", "Deepin");
isDeepinOS = false;
}
bool isWayland = false;
auto e = QProcessEnvironment::systemEnvironment();
QString XDG_SESSION_TYPE = e.value(QStringLiteral("XDG_SESSION_TYPE"));
QString WAYLAND_DISPLAY = e.value(QStringLiteral("WAYLAND_DISPLAY"));
if (XDG_SESSION_TYPE == QLatin1String("wayland") || WAYLAND_DISPLAY.contains(QLatin1String("wayland"), Qt::CaseInsensitive))
{
isWayland = true;
}
setConfig->setValue("build/isWayland", isWayland);
setConfig->setValue("build/isDeepinOS", isDeepinOS);
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
config.setValue("build/isWayland", isWayland);
config.setValue("build/isDeepinOS", isDeepinOS);
// Check config file, if there is no wayland config, then set it to default, which means use wayland if possible.
if (!readConfig.contains("build/useWayland"))
if (!config.contains("build/useWayland"))
{
setConfig->setValue("build/useWayland", true);
config.setValue("build/useWayland", true);
}
bool useWayland = readConfig.value("build/useWayland").toBool();
bool useWayland = config.value("build/useWayland").toBool();
qDebug() << "System Wayland enabled:" << isWayland << ". Spark Wayland enabled:" << useWayland;
// Set display backend
@ -62,104 +61,55 @@ int main(int argc, char *argv[])
{
qputenv("QT_QPA_PLATFORM", "dxcb");
}
// 龙芯机器配置,使得 DApplication 能正确加载 QTWEBENGINE
qputenv("DTK_FORCE_RASTER_WIDGETS", "FALSE");
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-features=UseModernMediaControls");
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
// 浏览器开启 GPU 支持
#ifdef __sw_64__
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode --no-sandbox");
#else
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode");
#endif
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持
// 浏览器开启 GPU 支持
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode");
// 强制使用 DTK 平台插件
QVector<char *> fakeArgs(argc + 2);
fakeArgs[0] = argv[0];
QString fakeArgs1 = "-platformtheme";
QByteArray fakeArgsTemp = fakeArgs1.toLatin1(); // must
fakeArgs[1] = fakeArgsTemp.data();
fakeArgs1 = "deepin";
fakeArgsTemp = fakeArgs1.toLatin1(); // must
fakeArgs[2] = fakeArgsTemp.data();
fakeArgs[1] = const_cast<char *>("-platformtheme");
fakeArgs[2] = const_cast<char *>("deepin");
for (int i = 1; i < argc; i++)
{
fakeArgs[i + 2] = argv[i];
int fakeArgc = argc + 2; // DApplication的argc要用引用避免c++编译器优化
DApplication a(fakeArgc, fakeArgs.data());
// 初始化日志模块 (默认日志位置 ~/.cache/deepin/spark-store)
DLogManager::registerConsoleAppender();
DLogManager::registerFileAppender();
// Wayland 环境下使用,防止子控件 Native 化
if (!DPlatformWindowHandle::pluginVersion().isEmpty())
{
a.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
}
a.setAttribute(Qt::AA_UseHighDpiPixmaps);
a.setApplicationDisplayName("Spark Store");
int fakeArgc = argc + 2; // QCoreApplication 的 argc 要用引用,避免 c++ 编译器优化
Application a(fakeArgc, fakeArgs.data());
// 设置版本和构建时间
a.setVersionAndBuildDateTime(version, buildDateTime);
a.loadTranslator(); // 载入翻译
if (readConfig.value("build/version").toString() != version)
{
qDebug() << "Spark Store has been updated!";
setConfig->setValue("build/version", version);
setConfig->setValue("build/time", buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString());
}
setConfig->deleteLater();
// Customized DAboutDialog
DAboutDialog dialog;
a.setAboutDialog(&dialog);
dialog.setLicense(QObject::tr("We publish this program under GPL V3"));
dialog.setVersion(DApplication::buildVersion(readConfig.value("build/version").toString() + "-" + "Flamescion" + "-" + readConfig.value("build/time").toString()));
dialog.setProductIcon(QIcon::fromTheme("spark-store")); // 设置Logo
dialog.setProductName(QLabel::tr("Spark Store"));
dialog.setDescription(
QObject::tr(
"<span style=' font-size:10pt;font-weight:60;'>An appstore powered by community</span><br/>"
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
"<span style=' font-size:12pt;'>Spark developers</span>"));
dialog.setProductName(QLabel::tr("Spark Store"));
dialog.setCompanyLogo(QPixmap(":/spark-store.png"));
dialog.setWebsiteName(QObject::tr("The Spark Project"));
dialog.setWebsiteLink("https://gitee.com/deepin-community-store");
a.setOrganizationName("spark-union");
a.setProductName(QObject::tr("Spark Store"));
a.setApplicationName("Spark Store"); // 不用翻译,影响 ~/.local/share/spark-union 下文件夹名称
a.setApplicationDisplayName(QObject::tr("Spark Store")); // 设置窗口显示标题 (Wayland 下会显示 Qt 原生标题栏)
a.setWindowIcon(QIcon::fromTheme("spark-store"));
a.setApplicationDescription(
QObject::tr(
"<span style='font-size:10pt;font-weight:60;'>An appstore powered by deepin community</span><br/>"
"<a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/>"
"<span style='font-size:12pt;'>Spark developers</span><br/><br/>"
"Published under GPL V3"));
// 限制单实例运行
if (!a.setSingleInstance("spark-store"))
{
qDebug() << "The application is already running!";
QDBusInterface iface("com.gitee.spark.store",
"/com/gitee/spark/store",
"com.gitee.spark.store",
QDBusConnection::sessionBus());
QString arg1 = argv[1];
iface.asyncCall("activeWindow", arg1);
qWarning() << "Another instance has already started, activating...";
return -1;
}
DGuiApplicationHelper::instance()->setPaletteType(DGuiApplicationHelper::LightType); // 固定主题为浅色主题
DApplicationSettings settings; // 定义 DApplicationSettings自动保存主题设置
DApplicationSettings settings; // 定义 DApplicationSettings自动保存主题设置
MainWindow w;
// 让打开时界面显示在正中
Dtk::Widget::moveToCenter(&w);
QString arg1 = argv[1];
if (arg1.startsWith("spk://"))
if (argc > 1)
{
w.openUrl(QUrl(argv[1]));
QString arg1 = argv[1];
if (arg1.trimmed().startsWith("spk://"))
{
w.openUrl(QUrl(argv[1]));
}
}
w.show();
w.setWindowTitle("Spark Store");

View File

@ -18,11 +18,12 @@ MainWindow::MainWindow(QWidget *parent)
: BaseWidgetOpacity(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle(QObject::tr("Spark Store"));
initConfig();
moveToCenter(this); // 让窗口居中显示
WidgetAnimation::widgetOpacity(this, true);
searchEdit = new DSearchEdit(ui->titlebar);
downloadlistwidget = new DownloadListWidget;
downloadButton = new ProgressButton(ui->titlebar);
backButtom = new QPushButton(ui->titlebar);
@ -75,9 +76,6 @@ MainWindow::MainWindow(QWidget *parent)
if (themeType == DGuiApplicationHelper::DarkType) {
//深色模式
setMaskColor(QColor("#2a2b2b"));
this->setStyleSheet("#mainpage{background-color: transparent;border-radius:14px;}\
QLabel#cardtitle,QLabel#title,QLabel#title_1,QLabel#title_2,QLabel#title_3 {color:#FFFFFF}\
");
backButtom->setIcon(QIcon(":/icon/dark/back.svg"));
downloadButton->setIcon(":/icon/dark/download.svg");
downloadButton->setBackgroundColor(QColor("#444444"));
@ -98,9 +96,6 @@ MainWindow::MainWindow(QWidget *parent)
} else {
//亮色模式
setMaskColor(QColor("#f3f7f8"));
this->setStyleSheet("#mainpage{background-color: transparent;border-radius:14px;}\
QLabel#cardtitle,QLabel#title,QLabel#title_1,QLabel#title_2,QLabel#title_3 {color:#000000}\
");
backButtom->setIcon(QIcon(":/icon/light/back.svg"));
downloadButton->setBackgroundColor(QColor("#e3e4e4"));
downloadButton->setColor(QColor("#66CCFF"));
@ -153,18 +148,17 @@ MainWindow::MainWindow(QWidget *parent)
backButtom->hide();
ui->titlebar->setIcon(QIcon::fromTheme(":/icon/logo.svg"));
// Check wayland configs
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
QWidget *w_titlebar = new QWidget(ui->titlebar);
QHBoxLayout *ly_titlebar = new QHBoxLayout(w_titlebar);
QLabel *title = new QLabel(this);
QLabel *title = new QLabel(ui->titlebar);
title->setText(tr("Spark Store"));
searchEdit->setPlaceholderText(tr("Search or enter spk://"));
ly_titlebar->addWidget(title);
ly_titlebar->addWidget(backButtom);
if (!readConfig.value("build/isDeepinOS").toBool() && readConfig.value("build/useWayland").toBool())
// Check wayland configs
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
if (!config.value("build/isDeepinOS").toBool() && config.value("build/useWayland").toBool())
{
// Wayland 搜索栏居中
ly_titlebar->addStretch(WaylandSearchCenter);
@ -219,14 +213,16 @@ MainWindow::MainWindow(QWidget *parent)
{ openUrl(spk); });
emit DGuiApplicationHelper::instance()->themeTypeChanged(DGuiApplicationHelper::instance()->themeType());
initDbus();
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::newProcessInstance, this, &MainWindow::onNewProcessInstance);
}
MainWindow::~MainWindow()
{
delete searchEdit;
delete downloadlistwidget;
delete ui;
if (downloadlistwidget) {
downloadlistwidget->deleteLater();
}
}
void MainWindow::initDbus()
@ -240,13 +236,21 @@ void MainWindow::initDbus()
void MainWindow::onGetUrl(const QString &url)
{
if (url.left(6) == "spk://")
{
if (url.trimmed().startsWith("spk://")) {
openUrl(QUrl(url));
}
activateWindow();
}
void MainWindow::onNewProcessInstance(qint64 pid, const QStringList &arguments)
{
Q_UNUSED(pid)
if (arguments.size() > 1) {
onGetUrl(arguments.value(1));
}
}
void MainWindow::openUrl(QUrl url)
{
if (url.toString().startsWith("spk://"))
@ -279,6 +283,7 @@ void MainWindow::switchPage(int now) // 临时方案,回家后修改
backButtom->hide();
}
ui->stackedWidget->setCurrentIndex(now);
ui->stackedWidget->currentWidget()->setFocus();
pageHistory << now;
}

View File

@ -39,20 +39,20 @@ private:
void switchPage(int now);
void updateUi(int now);
private:
QList<int> pageHistory;
DownloadListWidget *downloadlistwidget;
ProgressButton *downloadButton;
QPushButton *backButtom;
DSearchEdit *searchEdit = new DSearchEdit;
Ui::MainWindow *ui;
private slots:
//接受来自dbus的url
void onGetUrl(const QString &url);
void onNewProcessInstance(qint64 pid, const QStringList &arguments);
void on_pushButton_14_clicked();
private:
QList<int> pageHistory;
Ui::MainWindow *ui;
DownloadListWidget *downloadlistwidget;
ProgressButton *downloadButton;
QPushButton *backButtom;
DSearchEdit *searchEdit;
};
#endif // MAINWINDOWDTK_H

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>1190</width>
<height>651</height>
<height>656</height>
</rect>
</property>
<property name="windowTitle">
@ -34,6 +34,12 @@
<property name="autoFillBackground">
<bool>true</bool>
</property>
<property name="styleSheet">
<string notr="true">.QWidget#mainpage {
background: transparent;
border-radius: 14px;
}</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>

View File

@ -272,7 +272,8 @@ void AppIntoPage::setTheme(bool dark)
{
if (dark)
{
QString frameStyleSheet = "#frame,#frame_2,#frame_3,#frame_4{background-color: #252525;border-radius:14px;border:1px solid rgb(64, 64, 64);}";
QString frameStyleSheet ="#frame,#frame_2,#frame_3,#frame_4 {background-color: #252525; border-radius: 14px; border: 1px solid rgb(64, 64, 64);}\
QLabel#cardtitle,QLabel#title,QLabel#title_1,QLabel#title_2,QLabel#title_3 {color: #FFFFFF}";
ui->frame->setStyleSheet(frameStyleSheet);
ui->frame_2->setStyleSheet(frameStyleSheet);
ui->frame_3->setStyleSheet(frameStyleSheet);
@ -284,11 +285,10 @@ void AppIntoPage::setTheme(bool dark)
ui->icon_4->setPixmap(QPixmap(":/icon/dark/text.svg"));
ui->icon_5->setPixmap(QPixmap(":/icon/dark/folder.svg"));
ui->icon_6->setPixmap(QPixmap(":/icon/dark/globe.svg"));
}
else
{
// 亮色模式
QString frameStyleSheet = "#frame,#frame_2,#frame_3,#frame_4{background-color: #fbfbfb;border-radius:14px;border:1px solid rgb(229,229,229);}";
}else {
//亮色模式
QString frameStyleSheet ="#frame,#frame_2,#frame_3,#frame_4 {background-color: #fbfbfb; border-radius: 14px; border: 1px solid rgb(229,229,229);}\
QLabel#cardtitle,QLabel#title,QLabel#title_1,QLabel#title_2,QLabel#title_3 {color: #000000}";
ui->frame->setStyleSheet(frameStyleSheet);
ui->frame_2->setStyleSheet(frameStyleSheet);
ui->frame_3->setStyleSheet(frameStyleSheet);
@ -336,29 +336,30 @@ void AppIntoPage::on_downloadButton_clicked()
void AppIntoPage::on_pushButton_3_clicked()
{
QtConcurrent::run([=]()
{
ui->downloadButton->setEnabled(false);
ui->pushButton_3->setEnabled(false);
{
ui->downloadButton->setEnabled(false);
ui->pushButton_3->setEnabled(false);
QProcess uninstall;
uninstall.start("pkexec", QStringList() << "apt" << "purge" << "-y" << info["Pkgname"].toString().toLower());
uninstall.waitForFinished(-1);
QProcess uninstall;
uninstall.start("pkexec", QStringList() << "apt" << "purge" << "-y" << info["Pkgname"].toString().toLower());
uninstall.waitForFinished(-1);
QProcess check;
check.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString().toLower());
check.waitForFinished(10*1000);
QProcess check;
check.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString().toLower());
check.waitForFinished(10*1000);
if (check.readAllStandardOutput().isEmpty())
{
ui->downloadButton->setText(tr("Install"));
ui->pushButton_3->hide();
if (check.readAllStandardOutput().isEmpty())
{
ui->downloadButton->setText(tr("Install"));
ui->pushButton_3->hide();
updatesEnabled();
Utils::sendNotification("spark-store",tr("Spark Store"),tr("Uninstall succeeded"));
}
updatesEnabled();
Utils::sendNotification("spark-store",tr("Spark Store"),tr("Uninstall succeeded"));
}
ui->downloadButton->setEnabled(true);
ui->pushButton_3->setEnabled(true); });
ui->downloadButton->setEnabled(true);
ui->pushButton_3->setEnabled(true);
});
}
void AppIntoPage::on_shareButton_clicked()

View File

@ -1,10 +1,22 @@
#include "settingspage.h"
#include "ui_settingspage.h"
#include "../backend/sparkapi.h"
#include "utils/utils.h"
#include <QSettings>
#include <QtConcurrent>
#include <QDebug>
#define TMP_PATH "/tmp/spark-store"
bool SettingsPage::isdownload = false;
SettingsPage::SettingsPage(QWidget *parent) : QWidget(parent),
ui(new Ui::SettingsPage)
SettingsPage::SettingsPage(QWidget *parent)
: QWidget(parent)
, ui(new Ui::SettingsPage)
{
ui->setupUi(this);
configCanSave = false;
initConfig();
}
@ -25,20 +37,22 @@ void SettingsPage::setTheme(bool dark)
void SettingsPage::readServerList()
{
// 读取服务器列表并初始化
QFile file(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
QFile file(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/server.list");
// 判断文件是否存在
if (!file.exists())
{
ui->comboBox_server->addItem("https://d.store.deepinos.org.cn/");
return;
}
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "无法读取server.list";
qWarning() << "无法读取 server.list";
return;
}
// 创建QTextStream对象
// 创建 QTextStream 对象
QTextStream textStream(&file);
QString lineData = textStream.readLine(); // 读取文件的第一行
@ -71,12 +85,12 @@ void SettingsPage::initConfig()
readServerList();
// 读取服务器URL并初始化菜单项的链接
QSettings readConfig(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
if (!readConfig.value("server/choose").toString().isEmpty() && readConfig.value("server/updated").toString() == "TRUE")
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
if (!config.value("server/choose").toString().isEmpty() && config.value("server/updated").toBool())
{
qDebug() << readConfig.value("server/choose").toString();
ui->comboBox_server->setCurrentText(readConfig.value("server/choose").toString());
SparkAPI::setServerUrl(readConfig.value("server/choose").toString());
qDebug() << config.value("server/choose").toString();
ui->comboBox_server->setCurrentText(config.value("server/choose").toString());
SparkAPI::setServerUrl(config.value("server/choose").toString());
}
configCanSave = true; //  防止触发保存配置信号
}
@ -93,8 +107,8 @@ void SettingsPage::on_pushButton_updateServer_clicked()
ui->pushButton_updateServer->setEnabled(false);
ui->comboBox_server->clear();
QFile::remove(QDir::homePath().toUtf8() + "/.config/spark-store/server.list");
system("curl -o " + QDir::homePath().toUtf8() + "/.config/spark-store/server.list https://d.store.deepinos.org.cn/store/server-and-mirror.list");
QFile::remove(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/server.list");
system("curl -o " + QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation).toUtf8() + "/server.list https://d.store.deepinos.org.cn/store/server-and-mirror.list");
ui->pushButton_updateServer->setEnabled(true);
readServerList();
@ -105,14 +119,14 @@ void SettingsPage::on_comboBox_server_currentIndexChanged(const QString &arg1)
{
SparkAPI::setServerUrl(arg1); // 服务器信息更新
qDebug() << arg1;
const QString updatedInfo = "TRUE";
if (configCanSave)
bool updatedInfo = true;
if(configCanSave)
{
// ui->label_setting1->show();
QSettings *setConfig = new QSettings(QDir::homePath() + "/.config/spark-store/config.ini", QSettings::IniFormat);
setConfig->setValue("server/choose", arg1);
setConfig->setValue("server/updated", updatedInfo);
setConfig->deleteLater();
QSettings config(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini", QSettings::IniFormat);
config.setValue("server/choose", arg1);
config.setValue("server/updated", updatedInfo);
config.sync();
}
}
@ -183,7 +197,8 @@ void SettingsPage::on_pushButton_updateApt_clicked()
emit openUrl(QUrl("spk://store/tools/spark-store"));
ui->label_aptserver->setText(tr(""));
ui->pushButton_updateApt->setEnabled(true); });
ui->pushButton_updateApt->setEnabled(true);
});
}
void SettingsPage::on_pushButton_clear_clicked()
@ -207,13 +222,15 @@ void SettingsPage::on_pushButton_clear_clicked()
void SettingsPage::on_pushButton_clearWebCache_clicked()
{
QtConcurrent::run([=]()
{
QString dataLocal = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
qDebug() << dataLocal;
QDir dataDir(dataLocal);
{
QString localDataLocation = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/QtWebEngine";
qDebug() << localDataLocation;
QDir dataDir(localDataLocation);
dataDir.removeRecursively();
dataLocal = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
qDebug() << dataLocal;
QDir cacheDir(dataLocal);
cacheDir.removeRecursively(); });
QString cacheLocation = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/QtWebEngine";
qDebug() << cacheLocation;
QDir cacheDir(cacheLocation);
cacheDir.removeRecursively();
});
}

View File

@ -2,14 +2,7 @@
#define SETTINGSPAGE_H
#include <QWidget>
#include <QFile>
#include <QDir>
#include <QDebug>
#include <QSettings>
#include <QtConcurrent>
#include "../backend/sparkapi.h"
#include "utils/utils.h"
#define TMP_PATH "/tmp/spark-store"
#include <QUrl>
namespace Ui {
class SettingsPage;

View File

@ -4,7 +4,7 @@
#
#-------------------------------------------------
QT += core gui network concurrent webenginewidgets dbus svg
QT += core gui concurrent dbus network svg webenginewidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@ -22,78 +22,75 @@ DEFINES += QT_DEPRECATED_WARNINGS
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
DEFINES += QT_APP_DEBUG
# Disable qWarning / qDebug output in Release
# CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
CONFIG += c++11 link_pkgconfig
PKGCONFIG += dtkcore dtkgui dtkwidget
# Disable qWarning / qDebug output in Release
CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
# Update translation files
CONFIG(release, debug|release): system(bash $${PWD}/translate_generation.sh)
TRANSLATIONS += \
../translations/spark-store_en.ts \
../translations/spark-store_fr.ts \
../translations/spark-store_zh_CN.ts
SOURCES += \
dbus/dbussparkstoreservice.cpp \
main.cpp \
mainwindow-dtk.cpp \
backend/downloadworker.cpp \
backend/image_show.cpp \
backend/sparkapi.cpp \
dbus/dbussparkstoreservice.cpp \
pages/appintopage.cpp \
pages/applistpage.cpp \
pages/settingspage.cpp \
utils/httprequest.cpp \
utils/utils.cpp \
utils/widgetanimation.cpp \
widgets/common/progressbutton.cpp \
widgets/common/webenginepage.cpp \
widgets/common/webengineview.cpp \
widgets/downloadlistwidget.cpp \
widgets/base/basewidgetopacity.cpp \
widgets/common/downloaditem.cpp \
widgets/common/progressbutton.cpp \
widgets/common/smoothlistwidget.cpp \
widgets/common/smoothscrollbar.cpp \
utils/httprequest.cpp \
pages/applistpage.cpp \
backend/downloadworker.cpp \
pages/appintopage.cpp \
widgets/common/webenginepage.cpp \
widgets/common/webengineview.cpp \
widgets/big_image.cpp \
backend/image_show.cpp \
widgets/base/basewidgetopacity.cpp
widgets/downloadlistwidget.cpp \
application.cpp \
main.cpp \
mainwindow-dtk.cpp
HEADERS += \
dbus/dbussparkstoreservice.h \
mainwindow-dtk.h \
backend/downloadworker.h \
backend/image_show.h \
backend/sparkapi.h \
dbus/dbussparkstoreservice.h \
pages/appintopage.h \
pages/applistpage.h \
pages/settingspage.h \
utils/httprequest.h \
utils/utils.h \
utils/widgetanimation.h \
widgets/common/progressbutton.h \
widgets/common/webenginepage.h \
widgets/common/webengineview.h \
widgets/downloadlistwidget.h \
widgets/base/basewidgetopacity.h \
widgets/common/downloaditem.h \
widgets/common/progressbutton.h \
widgets/common/smoothlistwidget.h \
widgets/common/smoothscrollbar.h \
utils/httprequest.h \
pages/applistpage.h \
backend/downloadworker.h \
pages/appintopage.h \
widgets/common/webenginepage.h \
widgets/common/webengineview.h \
widgets/big_image.h \
backend/image_show.h \
widgets/base/basewidgetopacity.h
widgets/downloadlistwidget.h \
application.h \
mainwindow-dtk.h
FORMS += \
mainwindow-dtk.ui \
pages/settingspage.ui \
widgets/downloadlistwidget.ui \
widgets/common/downloaditem.ui \
pages/appintopage.ui \
pages/applistpage.ui \
pages/appintopage.ui
pages/settingspage.ui \
widgets/common/downloaditem.ui \
widgets/downloadlistwidget.ui \
mainwindow-dtk.ui
RESOURCES += \
assets/assets.qrc
TRANSLATIONS += \
../translations/spark-store_en.ts \
../translations/spark-store_fr.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

View File

@ -55,7 +55,6 @@ DownloadListWidget::~DownloadListWidget()
if (downloadController)
{
downloadController->stopDownload();
downloadController->deleteLater();
}
delete ui;

View File

@ -1,10 +1,6 @@
#!/bin/bash
# this file is used to auto-generate .qm file from .ts file.
ts_list=(`ls ./translations/*.ts`)
cd $(dirname $0)
for ts in "${ts_list[@]}"
do
printf "\nprocess ${ts}\n"
lrelease "${ts}"
done
lrelease ./src/spark-store.pro

6
translate_update.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
# this file is used to auto-update .ts file.
cd $(dirname $0)
lupdate ./src/spark-store.pro -no-obsolete

View File

@ -10,8 +10,8 @@
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="147"/>
<location filename="../src/pages/appintopage.cpp" line="209"/>
<location filename="../src/pages/appintopage.cpp" line="146"/>
<location filename="../src/pages/appintopage.cpp" line="211"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
@ -174,47 +174,47 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="89"/>
<location filename="../src/pages/appintopage.cpp" line="88"/>
<source>Click Open</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="132"/>
<location filename="../src/pages/appintopage.cpp" line="224"/>
<location filename="../src/pages/appintopage.cpp" line="316"/>
<location filename="../src/pages/appintopage.cpp" line="131"/>
<location filename="../src/pages/appintopage.cpp" line="227"/>
<location filename="../src/pages/appintopage.cpp" line="324"/>
<source>Reinstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="139"/>
<location filename="../src/pages/appintopage.cpp" line="138"/>
<source>Upgrade</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="214"/>
<location filename="../src/pages/appintopage.cpp" line="308"/>
<location filename="../src/pages/appintopage.cpp" line="341"/>
<location filename="../src/pages/appintopage.cpp" line="216"/>
<location filename="../src/pages/appintopage.cpp" line="312"/>
<location filename="../src/pages/appintopage.cpp" line="353"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="219"/>
<location filename="../src/pages/appintopage.cpp" line="221"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="345"/>
<location filename="../src/pages/appintopage.cpp" line="356"/>
<location filename="../src/pages/appintopage.cpp" line="357"/>
<location filename="../src/pages/appintopage.cpp" line="368"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="345"/>
<location filename="../src/pages/appintopage.cpp" line="357"/>
<source>Uninstall succeeded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="356"/>
<location filename="../src/pages/appintopage.cpp" line="368"/>
<source>The URL has been copied to the clipboard</source>
<translation type="unfinished"></translation>
</message>
@ -232,6 +232,19 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="88"/>
<source>Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="93"/>
<source>%1 is released under %2</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -275,59 +288,59 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="40"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="39"/>
<source>Download Complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="141"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="151"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="158"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="99"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="98"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="141"/>
<source>Installation complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="143"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<source>Finish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="150"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="149"/>
<source>Retry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="151"/>
<source>Error happened in dpkg progress , you can try it again.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="153"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<source>Error happened in dpkg progress , you can try it again</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="158"/>
<source>dpkg progress had been abortedyou can retry installation.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="160"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<source>dpkg progress had been abortedyou can retry installation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="181"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="179"/>
<source>Download canceled</source>
<translation type="unfinished"></translation>
</message>
@ -358,141 +371,123 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="160"/>
<location filename="../src/mainwindow-dtk.ui" line="166"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="197"/>
<location filename="../src/mainwindow-dtk.ui" line="203"/>
<source>Network</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="225"/>
<location filename="../src/mainwindow-dtk.ui" line="231"/>
<source>Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="253"/>
<location filename="../src/mainwindow-dtk.ui" line="259"/>
<source>Music</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="281"/>
<location filename="../src/mainwindow-dtk.ui" line="287"/>
<source>Video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="309"/>
<location filename="../src/mainwindow-dtk.ui" line="315"/>
<source>Picture</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="337"/>
<location filename="../src/mainwindow-dtk.ui" line="343"/>
<source>Game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="365"/>
<location filename="../src/mainwindow-dtk.ui" line="371"/>
<source>Office</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="393"/>
<location filename="../src/mainwindow-dtk.ui" line="399"/>
<source>Reading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="421"/>
<location filename="../src/mainwindow-dtk.ui" line="427"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="449"/>
<location filename="../src/mainwindow-dtk.ui" line="455"/>
<source>Tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="477"/>
<location filename="../src/mainwindow-dtk.ui" line="483"/>
<source>Theme</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="505"/>
<location filename="../src/mainwindow-dtk.ui" line="511"/>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="533"/>
<location filename="../src/mainwindow-dtk.ui" line="539"/>
<source>APP Upgrade</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="34"/>
<location filename="../src/mainwindow-dtk.cpp" line="38"/>
<source>Submit App</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="35"/>
<location filename="../src/mainwindow-dtk.cpp" line="39"/>
<source>Submit App with client(Recommanded)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="36"/>
<location filename="../src/mainwindow-dtk.cpp" line="40"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="37"/>
<location filename="../src/mainwindow-dtk.cpp" line="41"/>
<source>APP Upgrade and Install Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="158"/>
<location filename="../src/mainwindow-dtk.cpp" line="154"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="159"/>
<location filename="../src/mainwindow-dtk.cpp" line="155"/>
<source>Search or enter spk://</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QLabel</name>
<message>
<location filename="../src/main.cpp" line="64"/>
<location filename="../src/main.cpp" line="73"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../src/main.cpp" line="61"/>
<source>We publish this program under GPL V3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="66"/>
<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/main.cpp" line="75"/>
<source>The Spark Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="79"/>
<location filename="../src/main.cpp" line="81"/>
<location filename="../src/application.cpp" line="26"/>
<location filename="../src/application.cpp" line="27"/>
<location filename="../src/mainwindow-dtk.cpp" line="21"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="84"/>
<source>&lt;span style=&apos;font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin 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;&lt;br/&gt;&lt;br/&gt;Published under GPL V3</source>
<location filename="../src/application.cpp" line="31"/>
<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="90"/>
<source>Spark Project</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -584,30 +579,19 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="181"/>
<location filename="../src/pages/settingspage.cpp" line="196"/>
<source>Updating, please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="204"/>
<location filename="../src/pages/settingspage.cpp" line="218"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="204"/>
<location filename="../src/pages/settingspage.cpp" line="218"/>
<source>Temporary cache was cleaned</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Widget</name>
<message>
<source>Share</source>
<translation type="obsolete">Spk share link</translation>
</message>
<message>
<source>0B</source>
<translation type="obsolete">0B</translation>
</message>
</context>
</TS>

View File

@ -10,8 +10,8 @@
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="147"/>
<location filename="../src/pages/appintopage.cpp" line="209"/>
<location filename="../src/pages/appintopage.cpp" line="146"/>
<location filename="../src/pages/appintopage.cpp" line="211"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
@ -174,47 +174,47 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="89"/>
<location filename="../src/pages/appintopage.cpp" line="88"/>
<source>Click Open</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="132"/>
<location filename="../src/pages/appintopage.cpp" line="224"/>
<location filename="../src/pages/appintopage.cpp" line="316"/>
<location filename="../src/pages/appintopage.cpp" line="131"/>
<location filename="../src/pages/appintopage.cpp" line="227"/>
<location filename="../src/pages/appintopage.cpp" line="324"/>
<source>Reinstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="139"/>
<location filename="../src/pages/appintopage.cpp" line="138"/>
<source>Upgrade</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="214"/>
<location filename="../src/pages/appintopage.cpp" line="308"/>
<location filename="../src/pages/appintopage.cpp" line="341"/>
<location filename="../src/pages/appintopage.cpp" line="216"/>
<location filename="../src/pages/appintopage.cpp" line="312"/>
<location filename="../src/pages/appintopage.cpp" line="353"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="219"/>
<location filename="../src/pages/appintopage.cpp" line="221"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="345"/>
<location filename="../src/pages/appintopage.cpp" line="356"/>
<location filename="../src/pages/appintopage.cpp" line="357"/>
<location filename="../src/pages/appintopage.cpp" line="368"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="345"/>
<location filename="../src/pages/appintopage.cpp" line="357"/>
<source>Uninstall succeeded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="356"/>
<location filename="../src/pages/appintopage.cpp" line="368"/>
<source>The URL has been copied to the clipboard</source>
<translation type="unfinished"></translation>
</message>
@ -232,6 +232,19 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="88"/>
<source>Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="93"/>
<source>%1 is released under %2</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -275,59 +288,59 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="40"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="39"/>
<source>Download Complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="141"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="151"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="158"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="99"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="98"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="141"/>
<source>Installation complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="143"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<source>Finish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="150"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="149"/>
<source>Retry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="151"/>
<source>Error happened in dpkg progress , you can try it again.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="153"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<source>Error happened in dpkg progress , you can try it again</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="158"/>
<source>dpkg progress had been abortedyou can retry installation.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="160"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<source>dpkg progress had been abortedyou can retry installation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="181"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="179"/>
<source>Download canceled</source>
<translation type="unfinished"></translation>
</message>
@ -358,152 +371,123 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="160"/>
<location filename="../src/mainwindow-dtk.ui" line="166"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="197"/>
<location filename="../src/mainwindow-dtk.ui" line="203"/>
<source>Network</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="225"/>
<location filename="../src/mainwindow-dtk.ui" line="231"/>
<source>Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="253"/>
<location filename="../src/mainwindow-dtk.ui" line="259"/>
<source>Music</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="281"/>
<location filename="../src/mainwindow-dtk.ui" line="287"/>
<source>Video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="309"/>
<location filename="../src/mainwindow-dtk.ui" line="315"/>
<source>Picture</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="337"/>
<location filename="../src/mainwindow-dtk.ui" line="343"/>
<source>Game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="365"/>
<location filename="../src/mainwindow-dtk.ui" line="371"/>
<source>Office</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="393"/>
<location filename="../src/mainwindow-dtk.ui" line="399"/>
<source>Reading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="421"/>
<location filename="../src/mainwindow-dtk.ui" line="427"/>
<source>Development</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="449"/>
<location filename="../src/mainwindow-dtk.ui" line="455"/>
<source>Tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="477"/>
<location filename="../src/mainwindow-dtk.ui" line="483"/>
<source>Theme</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="505"/>
<location filename="../src/mainwindow-dtk.ui" line="511"/>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="533"/>
<location filename="../src/mainwindow-dtk.ui" line="539"/>
<source>APP Upgrade</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="34"/>
<location filename="../src/mainwindow-dtk.cpp" line="38"/>
<source>Submit App</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="35"/>
<location filename="../src/mainwindow-dtk.cpp" line="39"/>
<source>Submit App with client(Recommanded)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="36"/>
<location filename="../src/mainwindow-dtk.cpp" line="40"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="37"/>
<location filename="../src/mainwindow-dtk.cpp" line="41"/>
<source>APP Upgrade and Install Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="158"/>
<location filename="../src/mainwindow-dtk.cpp" line="154"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="159"/>
<location filename="../src/mainwindow-dtk.cpp" line="155"/>
<source>Search or enter spk://</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QLabel</name>
<message>
<source>Spark应用商店</source>
<translation type="vanished">Spark Store</translation>
</message>
<message>
<source>
GPL第三版开源</source>
<translation type="vanished">Un app store tier alimenté par la communauté Deepin
Spark Store est publié sous licence GPL V3
Nous sommes nés pour le changement.</translation>
</message>
<message>
<location filename="../src/main.cpp" line="64"/>
<location filename="../src/main.cpp" line="73"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../src/main.cpp" line="61"/>
<source>We publish this program under GPL V3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="66"/>
<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/main.cpp" line="75"/>
<source>The Spark Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="79"/>
<location filename="../src/main.cpp" line="81"/>
<location filename="../src/application.cpp" line="26"/>
<location filename="../src/application.cpp" line="27"/>
<location filename="../src/mainwindow-dtk.cpp" line="21"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/main.cpp" line="84"/>
<source>&lt;span style=&apos;font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin 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;&lt;br/&gt;&lt;br/&gt;Published under GPL V3</source>
<location filename="../src/application.cpp" line="31"/>
<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="90"/>
<source>Spark Project</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -595,212 +579,19 @@ Nous sommes nés pour le changement.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="181"/>
<location filename="../src/pages/settingspage.cpp" line="196"/>
<source>Updating, please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="204"/>
<location filename="../src/pages/settingspage.cpp" line="218"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="204"/>
<location filename="../src/pages/settingspage.cpp" line="218"/>
<source>Temporary cache was cleaned</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Widget</name>
<message>
<source></source>
<translatorcomment>Lecteurs vidéo et créateurs vidéo</translatorcomment>
<translation type="vanished">Vidéo</translation>
</message>
<message>
<source></source>
<translation type="vanished">Liste de téléchargement</translation>
</message>
<message>
<source></source>
<translation type="vanished">Outils</translation>
</message>
<message>
<source></source>
<translatorcomment>Thème des icônes et autres </translatorcomment>
<translation type="vanished">Thèmes</translation>
</message>
<message>
<source></source>
<translation type="vanished">Musique</translation>
</message>
<message>
<source></source>
<translation type="vanished">Développement</translation>
</message>
<message>
<source></source>
<translation type="vanished">Bureau</translation>
</message>
<message>
<source></source>
<translation type="vanished">Traduire</translation>
</message>
<message>
<source></source>
<translation type="vanished">Autres</translation>
</message>
<message>
<source></source>
<translation type="vanished">Accueil</translation>
</message>
<message>
<source></source>
<translation type="vanished">Images</translation>
</message>
<message>
<source></source>
<translation type="vanished">Jeux</translation>
</message>
<message>
<source></source>
<translation type="vanished">Chat</translation>
</message>
<message>
<source></source>
<translation type="vanished">Réseau</translation>
</message>
<message>
<source></source>
<translation type="vanished">La liste de téléchargement est vide</translation>
</message>
<message>
<source></source>
<translation type="vanished">Ouvrir dans le gestionnaire de fichiers</translation>
</message>
<message>
<source></source>
<translation type="vanished">Installer</translation>
</message>
<message>
<source></source>
<translation type="vanished">Supprimer</translation>
</message>
<message>
<source></source>
<translation type="vanished">Site</translation>
</message>
<message>
<source></source>
<translation type="vanished">Nom</translation>
</message>
<message>
<source></source>
<translation type="vanished">Icon</translation>
</message>
<message>
<source></source>
<translation type="vanished">Partager</translation>
</message>
<message>
<source></source>
<translation type="vanished">Détails</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;magasin de logiciels développé par des passionnés de la communauté&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source></source>
<translation type="vanished">Captures d&apos;écran</translation>
</message>
<message>
<source>线</source>
<translation type="vanished">Line Settings</translation>
</message>
<message>
<source>线</source>
<translation type="vanished">Choisissez: </translation>
</message>
<message>
<source></source>
<translation type="vanished">Mise à jour</translation>
</message>
<message>
<source> </source>
<translation type="vanished">Redémarrez pour prendre effet</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;使apt工具获取软件使线&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Le rôle du serveur source est de s&apos;assurer que le logiciel est mis à jour et prend en charge l&apos;utilisation de l&apos;outil apt pour obtenir le logiciel. Nous préférons généralement que vous utilisiez la première ligne comme source de mise à jour, qui est généralement la plus stable. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source></source>
<translation type="vanished">Mettre à jour la source APT</translation>
</message>
<message>
<source></source>
<translation type="vanished">Source APT: </translation>
</message>
<message>
<source></source>
<translation type="vanished">serveur</translation>
</message>
<message>
<source></source>
<translation type="vanished">Temp</translation>
</message>
<message>
<source></source>
<translation type="vanished">Nettoyer</translation>
</message>
<message>
<source>/tmp下使</source>
<translation type="vanished">Étant donné que ce répertoire se trouve sous /tmp, même si vous ne l&apos;effacez pas manuellement, il sera effacé automatiquement au redémarrage du système.</translation>
</message>
<message>
<source></source>
<translation type="vanished">Taille: </translation>
</message>
<message>
<source>0B</source>
<translation type="obsolete">0B</translation>
</message>
<message>
<source>/tmp/spark-store</source>
<translation type="vanished">Emplacement:/tmp/spark-store</translation>
</message>
<message>
<source></source>
<translation type="vanished">À propos de nous</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Linux/deepin系统爱好者和用户之中的一员Spark应用商店&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt;&amp;lt;jifengshenmo@outlook.com&amp;gt;&lt;/p&gt;&lt;p&gt;稿&lt;/p&gt;&lt;p&gt;QQ872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Nous ne sommes pas l&apos;équipe officielle, tout comme vous, nous ne sommes qu&apos;un des nombreux passionnés et utilisateurs de systèmes Linux / deepin, nous développons et gérons le &quot;Spark Store&quot;! &quot;, est de rassembler la communauté pour partager des logiciels utiles, ou pour participer au développement ensemble, afin que nous utilisions tous les derniers et meilleurs logiciels. &lt;/p&gt;&lt;p&gt; Nous n&apos;en tirons aucun profit, tous les développeurs et mainteneurs ne sont pas payés, et nous comptons sur les dons de la communauté pour la plupart de nos dépenses, dont nous sommes reconnaissants et qui nous permettent de ne pas dépenser trop d&apos;énergie se soucier du financement. &lt;/p&gt;&lt;p&gt;Notre service et nos logiciels sont gratuits pour tout le monde à utiliser, à communiquer et à apprendre, mais vous devez vous conformer aux lois et réglementations locales dans le processus de votre utilisation, sinon tout problème n&apos;a rien à voir avec nous. &lt;/p&gt;&lt;p&gt;Si une partie du magasin enfreint vos droits, veuillez nous en informer &amp;lt;jifengshenmo@outlook.com&amp;gt; nous retirerons le contenu en infraction dès que possible. &lt;/p&gt;&lt;p&gt;Si vous souhaitez également vous impliquer avec nous, que vous soyez impliqué dans le développement, la conception, le pitching ou la soumission de travaux, nous vous invitons à nous rejoindre. &lt;/p&gt;&lt;p&gt;QQ group:872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>
<name>downloadlist</name>
<message>
<source></source>
<translation type="vanished">Nom</translation>
</message>
<message>
<source></source>
<translatorcomment>Attendez pour téléchargerd</translatorcomment>
<translation type="vanished">Attendez pour télécharger</translation>
</message>
<message>
<source></source>
<translation type="vanished">Installer</translation>
</message>
<message>
<source></source>
<translation type="vanished">Annuler</translation>
</message>
<message>
<source></source>
<translation type="vanished">Détail</translation>
</message>
</context>
</TS>

View File

@ -10,8 +10,8 @@
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="147"/>
<location filename="../src/pages/appintopage.cpp" line="209"/>
<location filename="../src/pages/appintopage.cpp" line="146"/>
<location filename="../src/pages/appintopage.cpp" line="211"/>
<source>Download</source>
<translation></translation>
</message>
@ -63,10 +63,6 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/uos-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine2 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine2 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="obsolete">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt; deepin-wine2 使使ubuntu deepin-wine2 &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="467"/>
<location filename="../src/pages/appintopage.ui" line="470"/>
@ -111,10 +107,6 @@
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/tags/a2d-small.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine5 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine5 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="obsolete">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;deepin-wine5应用使使ubuntudeepin-wine5环境&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="543"/>
<location filename="../src/pages/appintopage.ui" line="546"/>
@ -182,55 +174,47 @@
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="89"/>
<location filename="../src/pages/appintopage.cpp" line="88"/>
<source>Click Open</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="132"/>
<location filename="../src/pages/appintopage.cpp" line="224"/>
<location filename="../src/pages/appintopage.cpp" line="316"/>
<location filename="../src/pages/appintopage.cpp" line="131"/>
<location filename="../src/pages/appintopage.cpp" line="227"/>
<location filename="../src/pages/appintopage.cpp" line="324"/>
<source>Reinstall</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="139"/>
<location filename="../src/pages/appintopage.cpp" line="138"/>
<source>Upgrade</source>
<translation></translation>
</message>
<message>
<source>Downloading</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Downloaded</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="214"/>
<location filename="../src/pages/appintopage.cpp" line="308"/>
<location filename="../src/pages/appintopage.cpp" line="341"/>
<location filename="../src/pages/appintopage.cpp" line="216"/>
<location filename="../src/pages/appintopage.cpp" line="312"/>
<location filename="../src/pages/appintopage.cpp" line="353"/>
<source>Install</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="219"/>
<location filename="../src/pages/appintopage.cpp" line="221"/>
<source>Installing</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="345"/>
<location filename="../src/pages/appintopage.cpp" line="356"/>
<location filename="../src/pages/appintopage.cpp" line="357"/>
<location filename="../src/pages/appintopage.cpp" line="368"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="345"/>
<location filename="../src/pages/appintopage.cpp" line="357"/>
<source>Uninstall succeeded</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="356"/>
<location filename="../src/pages/appintopage.cpp" line="368"/>
<source>The URL has been copied to the clipboard</source>
<translation></translation>
</message>
@ -248,6 +232,19 @@
<translation></translation>
</message>
</context>
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="88"/>
<source>Version: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="93"/>
<source>%1 is released under %2</source>
<translation>%1%2</translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -291,83 +288,59 @@
<translation></translation>
</message>
<message>
<source>Spark Store App Installer</source>
<translation type="vanished"></translation>
</message>
<message>
<source>deepin deb installer</source>
<translation type="vanished"></translation>
</message>
<message>
<source>gdebi</source>
<translation type="vanished">gdebi</translation>
</message>
<message>
<source>Downloaded, waiting to install</source>
<translation type="obsolete"></translation>
</message>
<message>
<source>Download FailedCheck Your Connection</source>
<translation type="obsolete"></translation>
</message>
<message>
<source>Downloaded. Open APP Upgrade and Install Settings to enable password-free installation</source>
<translation type="vanished"> APP </translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="40"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="39"/>
<source>Download Complete.</source>
<translation>.</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="141"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="151"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="158"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="99"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="98"/>
<source>Installing</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="141"/>
<source>Installation complete.</source>
<translation>.</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="143"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="142"/>
<source>Finish</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="150"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="149"/>
<source>Retry</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="151"/>
<source>Error happened in dpkg progress , you can try it again.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="153"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="152"/>
<source>Error happened in dpkg progress , you can try it again</source>
<translation>dpkg出现错误</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="158"/>
<source>dpkg progress had been abortedyou can retry installation.</source>
<translation>dpkg进程被中断</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="160"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="159"/>
<source>dpkg progress had been abortedyou can retry installation</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="181"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="179"/>
<source>Download canceled</source>
<translation></translation>
</message>
@ -389,14 +362,6 @@
<source>Open download directory</source>
<translation></translation>
</message>
<message>
<source>Spark Store</source>
<translation type="vanished"></translation>
</message>
<message>
<source>The download is complete. Please click the download button on the title Bar to open the download list for installation</source>
<translation type="vanished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -406,155 +371,125 @@
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="160"/>
<location filename="../src/mainwindow-dtk.ui" line="166"/>
<source>Home</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="197"/>
<location filename="../src/mainwindow-dtk.ui" line="203"/>
<source>Network</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="225"/>
<location filename="../src/mainwindow-dtk.ui" line="231"/>
<source>Chat</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="253"/>
<location filename="../src/mainwindow-dtk.ui" line="259"/>
<source>Music</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="281"/>
<location filename="../src/mainwindow-dtk.ui" line="287"/>
<source>Video</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="309"/>
<location filename="../src/mainwindow-dtk.ui" line="315"/>
<source>Picture</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="337"/>
<location filename="../src/mainwindow-dtk.ui" line="343"/>
<source>Game</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="365"/>
<location filename="../src/mainwindow-dtk.ui" line="371"/>
<source>Office</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="393"/>
<location filename="../src/mainwindow-dtk.ui" line="399"/>
<source>Reading</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="421"/>
<location filename="../src/mainwindow-dtk.ui" line="427"/>
<source>Development</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="449"/>
<location filename="../src/mainwindow-dtk.ui" line="455"/>
<source>Tool</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="477"/>
<location filename="../src/mainwindow-dtk.ui" line="483"/>
<source>Theme</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="505"/>
<location filename="../src/mainwindow-dtk.ui" line="511"/>
<source>Other</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.ui" line="533"/>
<location filename="../src/mainwindow-dtk.ui" line="539"/>
<source>APP Upgrade</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="34"/>
<location filename="../src/mainwindow-dtk.cpp" line="38"/>
<source>Submit App</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="35"/>
<location filename="../src/mainwindow-dtk.cpp" line="39"/>
<source>Submit App with client(Recommanded)</source>
<translation>使稿</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="36"/>
<location filename="../src/mainwindow-dtk.cpp" line="40"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="37"/>
<location filename="../src/mainwindow-dtk.cpp" line="41"/>
<source>APP Upgrade and Install Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="158"/>
<location filename="../src/mainwindow-dtk.cpp" line="154"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="159"/>
<location filename="../src/mainwindow-dtk.cpp" line="155"/>
<source>Search or enter spk://</source>
<translation></translation>
</message>
</context>
<context>
<name>QLabel</name>
<message>
<location filename="../src/main.cpp" line="64"/>
<location filename="../src/main.cpp" line="73"/>
<source>Spark Store</source>
<translation>Spark </translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../src/main.cpp" line="61"/>
<source>We publish this program under GPL V3</source>
<translation>GPL V3开源</translation>
</message>
<message>
<location filename="../src/main.cpp" line="66"/>
<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></translation>
</message>
<message>
<source>Version 2.0+2</source>
<translation type="vanished"> 2.0+2</translation>
</message>
<message>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin 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="vanished">&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;deepin &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/main.cpp" line="75"/>
<source>The Spark Project</source>
<translation></translation>
</message>
<message>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin 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;&lt;br/&gt;We publish this program under GPL V3</source>
<translation type="vanished">&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt; &lt;/span&gt;&lt;br/&gt;&quot;&quot;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&quot;&quot;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火开发者联盟&lt;/span&gt;&lt;br/&gt;本程序遵循 GPL V3 协议发布</translation>
</message>
<message>
<location filename="../src/main.cpp" line="84"/>
<source>&lt;span style=&apos;font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by deepin 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;&lt;br/&gt;&lt;br/&gt;Published under GPL V3</source>
<translation>&lt;span style=&apos;font-size:10pt;font-weight:60;&apos;&gt; Deepin &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;&lt;br/&gt;&lt;br/&gt;遵循 GPL V3 协议发布</translation>
</message>
<message>
<location filename="../src/main.cpp" line="79"/>
<location filename="../src/main.cpp" line="81"/>
<location filename="../src/application.cpp" line="26"/>
<location filename="../src/application.cpp" line="27"/>
<location filename="../src/mainwindow-dtk.cpp" line="21"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/application.cpp" line="31"/>
<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;&quot;&quot;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&quot;&quot;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火开发者联盟&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="90"/>
<source>Spark Project</source>
<translation></translation>
</message>
</context>
<context>
<name>SettingsPage</name>
@ -644,539 +579,19 @@
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;&lt;/span&gt;Linux/deepinSpark&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt; &amp;lt;jifengshenmo@outlook.com&amp;gt; &lt;/p&gt;&lt;p&gt;稿&lt;/p&gt;&lt;p&gt; Spark IM :&lt;a href=&quot;https://chat.shenmo.tech&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;https://chat.shenmo.tech&lt;br/&gt;&lt;/span&gt;&lt;/a&gt;QQ 872690351&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;Connect us on Spark IM: https://chat.shenmo.tech&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&amp;lt;html&amp;gt;&amp;lt;head/&amp;gt;&amp;lt;body&amp;gt;&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot; font-weight:600;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Linux/deepinSpark&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;使使&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt; &amp;amp;lt;jifengshenmo@outlook.com&amp;amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;稿&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt; Spark IM : https://chat.shenmo.tech&amp;lt;br/&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;</translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="181"/>
<location filename="../src/pages/settingspage.cpp" line="196"/>
<source>Updating, please wait...</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="204"/>
<location filename="../src/pages/settingspage.cpp" line="218"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/settingspage.cpp" line="204"/>
<location filename="../src/pages/settingspage.cpp" line="218"/>
<source>Temporary cache was cleaned</source>
<translation></translation>
</message>
</context>
<context>
<name>SpkAppInfoLoaderThread</name>
<message>
<source>Failed to download app info. Please check internet connection.</source>
<translation type="vanished"></translation>
</message>
<message>
<source>PkgName: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Version: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Author: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Official Site: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Contributor: </source>
<translation type="vanished">稿 </translation>
</message>
<message>
<source>Update Time: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Installed Size: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Failed to load application icon.</source>
<translation type="vanished"></translation>
</message>
</context>
<context>
<name>Widget</name>
<message>
<source>Videos</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Download List</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Tools</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Beautify</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Music</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Coding</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Office</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Translate</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Others</source>
<translation type="vanished"></translation>
</message>
<message>
<source>FrontPage</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Images</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Games</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Chatting</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Network</source>
<translation type="vanished"></translation>
</message>
<message>
<source>The list is currently empty. Go and download some softwares!</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Open download directory</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Name</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Install</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Video</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Download</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Reading</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Chat</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Uninstall</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Site</source>
<translation type="vanished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This app is developed by community user,we give this tag to honor those who contribute to the Linux Ecology&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Linux生态的贡献&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to Ubuntu 20.04&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ubuntu 20.04&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to deepin 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;deepin 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Capable to UOS home 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;UOS家庭版 20&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This is a DTK5 app,which means it would have better effect on Deepin Desktop Environment&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DTK5应用使&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine5 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine5 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;deepin-wine5应用使使ubuntudeepin-wine5环境&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;An Appimage to deb app.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Appimage转制应用.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Share</source>
<translation type="vanished">Spk分享链接</translation>
</message>
<message>
<source>Development</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Home </source>
<translation type="vanished"></translation>
</message>
<message>
<source>Graphics</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Communication</source>
<translation type="vanished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A deepin-wine2 app.If you are using ubuntu or other non-deepin distro,you should deploy deepin-wine2 by your self.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt; deepin-wine2 使使ubuntu deepin-wine2 &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Contribute translation</source>
<translation type="vanished">/</translation>
</message>
<message>
<source>Info</source>
<translation type="vanished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;An app store developed by community enthusiasts&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Screenshots</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Line Settings</source>
<translation type="vanished">线</translation>
</message>
<message>
<source>Choose Line:</source>
<translation type="vanished">线</translation>
</message>
<message>
<source>Refresh</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Take effect when restart </source>
<translation type="vanished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The role of the source server is to ensure that the software is updated, and supports the use of the apt tool to get the software. We usually prefer that you use the first line as the update source, which is generally the most stable. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;使apt工具获取软件使线&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Update</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Source Server</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Temp</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Clean</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Since the dictionary is at /tmp,It would be cleaned automatically when system reboot.</source>
<translation type="vanished">/tmp下使</translation>
</message>
<message>
<source>Size:</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Location/tmp/spark-store</source>
<translation type="vanished">/tmp/spark-store</translation>
</message>
<message>
<source>About us</source>
<translation type="vanished"></translation>
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;We are &lt;span style=&quot; font-weight:600;&quot;&gt;NOT&lt;/span&gt; the official team, just like you, we are just one of the many Linux/deepin system enthusiasts and users, we develop and run the &amp;quot;Spark Store&amp;quot;! &amp;quot;, is to bring the community together to share useful software, or to participate in development together, so that we all use the latest and greatest software. &lt;/p&gt;&lt;p&gt;We don&apos;t make a profit from this, all developers and maintainers don&apos;t get paid, and we rely on the community&apos;s donations to us for most of our expenses, which we are grateful for and which allow us not to spend too much energy worrying about funding. &lt;/p&gt;&lt;p&gt;Our service and software are free for everyone to use, communicate, and learn, but you must comply with local laws and regulations in the process of your use, otherwise any problems have nothing to do with us. &lt;/p&gt;&lt;p&gt;If any part of the store infringes your rights, please tell us &amp;lt;jifengshenmo@outlook.com&amp;gt; we will remove the infringing content as soon as possible. &lt;/p&gt;&lt;p&gt;If you&apos;d like to get involved with us too, whether you&apos;re involved in development, design, pitching or submitting work, we welcome you to join us. &lt;/p&gt;&lt;p&gt;QQ group:872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;&lt;/span&gt;Linux/deepinSpark&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;使使&lt;/p&gt;&lt;p&gt; &amp;lt;jifengshenmo@outlook.com&amp;gt;&lt;/p&gt;&lt;p&gt;稿&lt;/p&gt;&lt;p&gt;QQ 872690351&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Back to category</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Home</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Reload</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Take effect when restart</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Spark Store</source>
<translation type="vanished">Spark </translation>
</message>
<message>
<source>Search or enter spk://</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Submit App</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Settings</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Not Exist</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Spark\ Store</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Failed to download app info. Please check internet connection.</source>
<translation type="vanished"></translation>
</message>
<message>
<source>PkgName: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Version: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Author: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Official Site: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Contributor: </source>
<translation type="vanished">稿 </translation>
</message>
<message>
<source>Update Time: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Installed Size: </source>
<translation type="vanished"> </translation>
</message>
<message>
<source>Reinstall</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Failed to load application icon.</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Failed to get the name to the file to be downloaded.</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Relative apps Not Found!</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Request Error: %1</source>
<translation type="vanished">%1</translation>
</message>
<message>
<source>Spark store could only process spk:// links for now. The search feature is coming soon!</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Upgrade</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Updating, please wait...</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Apt has reported an error. Please use apt update in terminal to locate the problem.</source>
<translation type="vanished">使apt update来查看错误原因</translation>
</message>
<message>
<source>Unknown error!</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Yes</source>
<translation type="vanished"></translation>
</message>
<message>
<source>No</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Information for Contributors</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Currently the translation contribution is limited to English,
and you will be redirected to our Gitee repository at which you are
supposed to be creating pull requests to contribute app info
translations.
Tips:You can simply click the file to edit to create a flat pull request without create a full pull request
Tips:You can use github account to login to Gitee
Click yes to continue.</source>
<translation type="vanished">
Gitee
Pull Request
pr
使github账户直接登陆Gitee
</translation>
</message>
<message>
<source>Currently the translation contribution is limited to English,
and you will be redirected to our Gitee repository at which you are
supposed to be creating pull requests to contribute app info
translations.
Click yes to continue.</source>
<translation type="obsolete">
Gitee
Pull Request
pr
使github账户直接登陆Gitee
.</translation>
</message>
<message>
<source>Unknown server error!</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Uninstall succeeded</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Temporary cache was cleaned</source>
<translation type="vanished"></translation>
</message>
<message>
<source>The URL has been copied to the clipboard</source>
<translation type="vanished"></translation>
</message>
</context>
<context>
<name>downloadlist</name>
<message>
<source>Name</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Waiting to download</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Install</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Info</source>
<translation type="vanished"></translation>
</message>
<message>
<source>dpkg</source>
<translation type="vanished">dpkg</translation>
</message>
<message>
<source>Spark Store App Installer</source>
<translation type="vanished"></translation>
</message>
<message>
<source>gdebi</source>
<translation type="vanished">gdebi</translation>
</message>
<message>
<source>deepin deb installer</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Downloaded, waiting to install</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Failed to download %1</source>
<translation type="vanished"> %1 </translation>
</message>
<message>
<source>Download FailedCheck Your Connection</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Finished downloading %1, awaiting to install</source>
<translation type="vanished">%1 </translation>
</message>
<message>
<source>Installing</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Installing...</source>
<translation type="obsolete"></translation>
</message>
<message>
<source>Finish</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Retry</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Error happened in dpkg progress , you can try it again</source>
<translation type="vanished">dpkg出现错误</translation>
</message>
<message>
<source>dpkg progress had been abortedyou can retry installation</source>
<translation type="vanished"></translation>
</message>
<message>
<source>Download canceled</source>
<translation type="vanished"></translation>
</message>
</context>
</TS>