Compare commits

..

8 Commits

Author SHA1 Message Date
ee0d3f87ec !185 4.2.3test2
Merge pull request !185 from shenmo/dev
2023-02-13 07:37:43 +00:00
4ce19e25e5 !182 4.2.2
Merge pull request !182 from shenmo/dev
2023-01-31 04:31:43 +00:00
41a6a3fc04 !181 4.2.1
Merge pull request !181 from shenmo/dev
2023-01-27 09:51:15 +00:00
682a6e38d6 !180 4.2 正式
Merge pull request !180 from shenmo/dev
2023-01-16 09:11:11 +00:00
36d273dd5e !179 4.1.2 正式版
Merge pull request !179 from shenmo/dev
2023-01-06 09:43:45 +00:00
8850cfd4a3 update dtk-build-release-tag-20220425.yml 2022-12-25 07:45:19 +00:00
bec8a14baf !177 将默认的README改为英文
Merge pull request !177 from shenmo/dev
2022-12-25 04:46:51 +00:00
8918e63484 !171 4.1.1-real
Merge pull request !171 from shenmo/dev
2022-12-21 16:18:05 +00:00
33 changed files with 510 additions and 778 deletions

12
debian/changelog vendored
View File

@@ -1,14 +1,3 @@
spark-store (4.2.3~test3) stable; urgency=medium
* 调整:打包时从 debian/changelog 自动获取构建版本号并写入关于窗口保证与deb一致
* 新增:支持 DTK 5.6.4 关于对话框“版本特性”显示功能。目前只在deepin编译安装时开启
* 修复:修复下载列表对话框中,点击某个 item 取消下载按钮后下载列表无法再次显示的问题
* 修复:多个应用安装可能会出现某一个应用没有安装
* 修复:修复下载按钮点击/双击/拖动时,主窗口动作与下载管理对话框动作同时触发问题
* aptss 获取线路信息 转到从 d. 服务器获取
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.2.3~test2) stable; urgency=medium
* 调整:开启安装包加固
@@ -16,7 +5,6 @@ spark-store (4.2.3~test2) stable; urgency=medium
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.2.3~test1) stable; urgency=medium
* 修复因判断安装状态错误创建多个相同任务的bug

4
debian/control vendored
View File

@@ -20,9 +20,9 @@ Build-Depends:
qtwayland5-dev-tools,
gcc,
g++
Standards-Version: 4.0.0
Standards-Version: 3.0
Homepage: https://www.spark-app.store/
Package: spark-store
Architecture: any
Depends:${shlibs:Depends}, ${misc:Depends},

14
debian/rules vendored
View File

@@ -1,14 +1,14 @@
#!/usr/bin/make -f
export QT_SELECT = qt5
export QT_SELECT=5
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
include /usr/share/dpkg/default.mk
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
DH_AUTO_ARGS = --parallel --buildsystem=qmake
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE = 1
#export DH_VERBOSE=1
%:
dh $@ --parallel
@@ -18,18 +18,20 @@ override_dh_auto_clean:
override_dh_auto_configure:
mkdir -p $(CURDIR)/build
qmake BUILD_VERSION=$(DEB_VERSION_UPSTREAM) spark-store-project.pro \
dh_auto_configure MAKEFLAGS=-j$(JOBS) -- spark-store-project.pro \
-spec linux-g++ CONFIG+=qtquickcompiler \
-o $(CURDIR)/build/
override_dh_auto_build:
make MAKEFLAGS="$(MAKEFLAGS)" -C $(CURDIR)/build
make -C $(CURDIR)/build -j$(JOBS)
override_dh_auto_install:
make -C $(CURDIR)/build install \
INSTALL_ROOT=$(CURDIR)/debian/spark-store
# Ignore the dpkg-shlibdeps: warning (it uses none of the library's symbols)
# Qt Mutidedia lib will ref to network libraray.
override_dh_shlibdeps:

View File

@@ -2,16 +2,20 @@
case "$1" in
configure)
# Enable i386 arch
echo "Enabling i386 arch..."
dpkg --add-architecture i386
# config for aptss
mkdir -p /etc/aptss/sources.list.d
ln -s -f /etc/apt/sources.list /etc/aptss/sources.list
# Enable i386 arch
echo "Enable i386 arch..."
dpkg --add-architecture i386
# Remove the sources.list file
rm -f /etc/apt/sources.list.d/sparkstore.list
# config for aptss
mkdir -p /etc/aptss/sources.list.d
ln -s -f /etc/apt/sources.list /etc/aptss/sources.list
# Remove the sources.list file
if [ -e /etc/apt/sources.list.d/sparkstore.list ];then
rm /etc/apt/sources.list.d/sparkstore.list
fi
# Check if /usr/local/bin existed
mkdir -p /usr/local/bin
@@ -24,29 +28,33 @@ case "$1" in
ln -s -f /opt/durapps/spark-store/bin/ssaudit /usr/local/bin/ssaudit
ln -s -f /opt/durapps/spark-store/bin/spark-dstore-patch /usr/local/bin/spark-dstore-patch
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/local/bin/ss-apt-fast
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/bin/aptss
ln -s -f /opt/durapps/spark-store/bin/aptss /usr/bin/aptss
# Create symbol links for SSINSTALL
ln -s -f /opt/durapps/spark-store/bin/auto-install-policy/store.spark-app.ssinstall.policy /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
# Compile sender module
echo "Compiling the Sender module..."
gcc -Wformat -Wformat-security -Werror=format-security /opt/durapps/spark-store/bin/ss-feedback/sender-d.sh.c -o /opt/durapps/spark-store/bin/ss-feedback/sender-d
# Install key
mkdir -p /tmp/spark-store-install/
cp -f /opt/durapps/spark-store/bin/spark-store.asc /tmp/spark-store-install/spark-store.asc
cp -f /opt/durapps/spark-store/bin/spark-store.asc /tmp/spark-store-install/spark-store.asc
gpg --dearmor /tmp/spark-store-install/spark-store.asc
cp -f /tmp/spark-store-install/spark-store.asc.gpg /etc/apt/trusted.gpg.d/spark-store.gpg
# Run apt update to avoid users being fucked up by the non-exist dependency problem
# Run apt update to avoid users being fucked up by the non-exist dependency problem
# Now abandoned as aptss now run ssupdate everytime
#aptss ssupdate
# Start upgrade detect service
systemctl enable spark-update-notifier
systemctl start spark-update-notifier
service spark-update-notifier start
# Update certain caches
update-icon-caches /usr/share/icons/hicolor || true
@@ -55,10 +63,12 @@ case "$1" in
update-mime-database /usr/share/mime || true
# Send email for statistics
#/tmp/spark-store-install/feedback.sh
# /tmp/spark-store-install/feedback.sh
# Remove temp dir
rm -rf /tmp/spark-store-install
;;
triggered)

View File

@@ -1,35 +1,48 @@
#!/bin/sh
if [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then
# Remove residual symbol links
rm -f /usr/local/bin/spark-store
rm -f /usr/local/bin/ssinstall
rm -f /usr/local/bin/ssaudit
rm -f /usr/local/bin/spark-dstore-patch
rm -f /usr/local/bin/ussinstall
rm -f /usr/local/bin/ussremove
rm -f /usr/local/bin/ss-apt-fast
rm -f /usr/bin/aptss
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
# Remove residual symbol links
rm /usr/local/bin/spark-store
rm /usr/local/bin/ssinstall
rm /usr/local/bin/ssaudit
rm /usr/local/bin/spark-dstore-patch
rm /usr/local/bin/ussinstall
rm /usr/local/bin/ussremove
rm /usr/local/bin/ss-apt-fast
rm /usr/bin/aptss
rm -rf /etc/aptss/
rm -rf /etc/aptss/
# Remove Sender module
rm -f /opt/durapps/spark-store/bin/ss-feedback/sender-d
# Remove Sender module
rm /opt/durapps/spark-store/bin/ss-feedback/sender-d
# Remove residual symbol links to stop upgrade detect if exist
if [ -e /etc/xdg/autostart/spark-update-notifier.desktop ];then
rm /etc/xdg/autostart/spark-update-notifier.desktop
fi
# Shutdown services
service spark-update-notifier stop
# Stop update detect service
systemctl disable spark-update-notifier
# Clean the auto install polkit file if exist
if [ -f "/usr/share/polkit-1/actions/store.spark-app.ssinstall.policy" ] ; then
rm /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
fi
# Remove gpg key file
if [ -f "/etc/apt/trusted.gpg.d/spark-store.gpg" ] ; then
rm /etc/apt/trusted.gpg.d/spark-store.gpg
fi
apt-key del '9D9A A859 F750 24B1 A1EC E16E 0E41 D354 A29A 440C'
else
echo "非卸载操作,不进行配置清理"
# Remove residual symbol links to stop upgrade detect
rm -f /etc/xdg/autostart/spark-update-notifier.desktop
# Shutdown services
systemctl stop spark-update-notifier
# Stop update detect service
systemctl disable spark-update-notifier
# Clean the auto install polkit file if exist
rm -f /usr/share/polkit-1/actions/store.spark-app.ssinstall.policy
# Remove gpg key file
rm -f /etc/apt/trusted.gpg.d/spark-store.gpg
apt-key del '9D9A A859 F750 24B1 A1EC E16E 0E41 D354 A29A 440C'
else
echo "非卸载操作,不进行配置清理"
fi

View File

@@ -1,26 +0,0 @@
{
"magic": "dsg.config.meta",
"version": "1.0",
"contents": {
"featureUpdated": {
"value": false,
"serial": 0,
"flags": [],
"name": "Whether the application has new feature updates",
"name[zh_CN]": "配置应用的更新状态",
"description": "Configure the update status of the application",
"permissions": "readwrite",
"visibility": "public"
},
"autoDisplayFeature": {
"value": false,
"serial": 0,
"flags": [],
"name": "The application automatically display new features once",
"name[zh_CN]": "配置应用是否自动展示一次新特性",
"description": "The application automatically display updated contents once",
"permissions": "readwrite",
"visibility": "public"
}
}
}

View File

@@ -14,14 +14,8 @@ SUBDIRS += \
src/spark-dstore-patch \
src/spark-store.pro
# https://wiki.debian.org/Hardening
QMAKE_CFLAGS *= $(shell dpkg-buildflags --get CFLAGS)
QMAKE_CPPFLAGS *= $(shell dpkg-buildflags --get CPPFLAGS)
QMAKE_CXXFLAGS *= $(shell dpkg-buildflags --get CXXFLAGS)
QMAKE_LFLAGS *= $(shell dpkg-buildflags --get LDFLAGS)
# Update translation files
CONFIG(release, debug | release) {
CONFIG(release, debug|release) {
system(bash $${PWD}/translate_update.sh)
system(bash $${PWD}/translate_generation.sh)
}
@@ -72,3 +66,9 @@ INSTALLS += \
bash_completion \
polkit-1
# 暂时不添加
# https://wiki.debian.org/Hardening
QMAKE_CPPFLAGS *= $(shell dpkg-buildflags --get CPPFLAGS)
QMAKE_CFLAGS *= $(shell dpkg-buildflags --get CFLAGS)
QMAKE_CXXFLAGS *= $(shell dpkg-buildflags --get CXXFLAGS)
QMAKE_LFLAGS *= $(shell dpkg-buildflags --get LDFLAGS)

View File

@@ -1,14 +1,10 @@
#include "application.h"
#include "mainwindow-dtk.h"
#include "utils/utils.h"
#include <DPlatformWindowHandle>
#include <DLog>
#include <DGuiApplicationHelper>
#include <DAboutDialog>
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
#include <DFeatureDisplayDialog>
#endif
#include <QSettings>
#include <QStandardPaths>
@@ -47,9 +43,6 @@ Application::Application(int &argc, char **argv)
// 初始化日志模块 (默认日志位置 ~/.cache/spark-union/spark-store)
DLogManager::registerConsoleAppender();
DLogManager::registerFileAppender();
// 获取版本特性信息
m_featuresJsonObj = Utils::parseFeatureJsonFile();
}
void Application::handleAboutAction()
@@ -60,21 +53,9 @@ void Application::handleAboutAction()
}
initAboutDialog();
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
initFeatureDisplayDialog(); // 初始化版本特性对话框
#endif
DApplication::handleAboutAction();
}
bool Application::notify(QObject *receiver, QEvent *event)
{
if (m_mainWindow) {
m_mainWindow->notify(receiver, event);
}
return DApplication::notify(receiver, event);
}
void Application::checkAppConfigLocation()
{
QDir dir(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation));
@@ -84,18 +65,21 @@ void Application::checkAppConfigLocation()
}
}
void Application::setBuildDateTime(const QString &buildDateTime)
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() != QString(APP_VERSION)) {
if (config.value("build/version").toString() != m_version) {
qDebug() << "Spark Store has been updated!";
config.setValue("build/version", QString(APP_VERSION));
config.setValue("build/time", buildDateTime);
config.setValue("build/version", m_version);
config.setValue("build/time", m_buildDateTime);
config.sync();
}
setApplicationVersion(DApplication::buildVersion(QString(APP_VERSION) + "-" + "Flamescion" + "-" + buildDateTime));
setApplicationVersion(DApplication::buildVersion(config.value("build/version").toString() + "-" + "Flamescion" + "-" + config.value("build/time").toString()));
}
void Application::setMainWindow(MainWindow *window)
@@ -105,12 +89,6 @@ void Application::setMainWindow(MainWindow *window)
{
initAboutDialog();
}
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
if (featureDisplayDialog() == nullptr || featureDisplayDialog()->parent() != m_mainWindow)
{
initFeatureDisplayDialog(); // 初始化版本特性对话框
}
#endif
}
void Application::initAboutDialog()
@@ -131,9 +109,6 @@ void Application::initAboutDialog()
dialog->setProductName(productName());
dialog->setProductIcon(productIcon());
dialog->setVersion(translate("DAboutDialog", "Version: %1").arg(applicationVersion()));
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
dialog->setVersion(applicationVersion());
#endif
// 根据 shenmo 要求,不显示组织 Logo
// dialog->setCompanyLogo(QPixmap(":/icon/Logo-Spark.png"));
dialog->setCompanyLogo(QPixmap());
@@ -143,70 +118,9 @@ void Application::initAboutDialog()
dialog->setLicense(translate("DAboutDialog", "%1 is released under %2").arg(productName()).arg(applicationLicense()));
setAboutDialog(dialog);
connect(aboutDialog(), &DAboutDialog::destroyed, this, [=]() {
connect(aboutDialog(), &DAboutDialog::destroyed, this, [=] {
setAboutDialog(nullptr);
});
dialog->hide();
}
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
/**
* @brief Application::initFeatureDisplayDialog 初始化版本特性对话框
*/
void Application::initFeatureDisplayDialog()
{
if (featureDisplayDialog())
{
featureDisplayDialog()->deleteLater();
setFeatureDisplayDialog(nullptr);
}
// 自定义 DFeatureDisplayDialog
DFeatureDisplayDialog *dialog = new DFeatureDisplayDialog(m_mainWindow);
// 标题
dialog->setTitle(m_featuresJsonObj.value("title").toString());
// NOTE: json 文件中支持多语言;考虑到维护性,不放入翻译文件处理
if (m_featuresJsonObj.contains(QString("title[%1]").arg(QLocale::system().name())))
{
dialog->setTitle(m_featuresJsonObj.value(QString("title[%1]").arg(QLocale::system().name())).toString());
}
// 特性项
QList<DFeatureItem *> items;
foreach (const QJsonValue &jsonValue, m_featuresJsonObj.value("items").toArray())
{
QJsonObject jsonObj = jsonValue.toObject();
QString name = jsonObj.value("name").toString();
if (jsonObj.contains(QString("name[%1]").arg(QLocale::system().name())))
{
name = jsonObj.value(QString("name[%1]").arg(QLocale::system().name())).toString();
}
QString description = jsonObj.value("description").toString();
if (jsonObj.contains(QString("description[%1]").arg(QLocale::system().name())))
{
description = jsonObj.value(QString("description[%1]").arg(QLocale::system().name())).toString();
}
DFeatureItem *item = new DFeatureItem(QIcon::fromTheme("spark-store"), name, description, dialog);
items.append(item);
}
dialog->addItems(items); // NOTE: 也支持 addItem 依次添加单个 item
// “了解更多”链接按钮
dialog->setLinkUrl(m_featuresJsonObj.value("linkUrl").toString());
dialog->setLinkButtonVisible(m_featuresJsonObj.value("linkButtonVisible").toBool());
setFeatureDisplayDialog(dialog);
connect(featureDisplayDialog(), &DFeatureDisplayDialog::destroyed, this, [=]() {
setFeatureDisplayDialog(nullptr);
});
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
connect(aboutDialog(), &DAboutDialog::featureActivated, this, [=]() {
featureDisplayDialog()->show();
});
#endif
dialog->hide();
}
#endif

View File

@@ -3,8 +3,6 @@
#include <DApplication>
#include <QJsonObject>
DWIDGET_USE_NAMESPACE
class MainWindow;
@@ -15,21 +13,18 @@ class Application : public DApplication
public:
Application(int &argc, char **argv);
void handleAboutAction() override;
bool notify(QObject *receiver, QEvent *event) override;
static void checkAppConfigLocation();
void setBuildDateTime(const QString &buildDateTime);
void setVersionAndBuildDateTime(const QString &version, const QString &buildDateTime);
void setMainWindow(MainWindow *window);
private:
void initAboutDialog();
#if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 4, 0))
void initFeatureDisplayDialog();
#endif
private:
QJsonObject m_featuresJsonObj;
QString m_version;
QString m_buildDateTime;
MainWindow *m_mainWindow = nullptr;
};

View File

@@ -44,7 +44,6 @@
<file>icon/light/text.svg</file>
<file>icon/light/update.svg</file>
<file>icon/logo.svg</file>
<file>json/features.json</file>
<file>tags/a2d-small.png</file>
<file>tags/a2d.png</file>
<file>tags/community-small.png</file>

View File

@@ -1,25 +0,0 @@
{
"title": "Features",
"title[zh_CN]": "版本特性",
"items": [
{
"icon": "/usr/share/icons/hicolor/scalable/apps/spark-store.svg",
"name": "Feature 1",
"name[zh_CN]": "特性 1",
"description": "Please click the learn more button to check",
"description[zh_CN]": "请点击 了解更多 按钮来获取特性"
},
{
"icon": ":/icon/logo.svg",
"name": "Feature 2",
"description": "Feature 2 detailed description..."
},
{
"icon": "spark-store",
"name": "Fix 1",
"description": "Fix 1 detailed description..."
}
],
"linkUrl": "https://gitee.com/deepin-community-store/spark-store/releases/4.2.3test3",
"linkButtonVisible": true
}

View File

@@ -1,7 +1,9 @@
#include "downloadworker.h"
#include <QEventLoop>
#include <QProcess>
#include <QRegularExpression>
#include <QDir>
#include <QtConcurrent>
#include <QStandardPaths>

View File

@@ -2,7 +2,9 @@
#define DOWNLOADWORKER_H
#include <QObject>
#include <QVector>
#include <QList>
#include <QFile>
#include <QNetworkReply>
class DownloadController : public QObject
{
@@ -17,19 +19,23 @@ public:
qint64 getFileSize(const QString& url);
QString replaceDomain(const QString& url, const QString domain);
signals:
void errorOccur(const QString& msg);
void downloadProcess(QString, qint64, qint64);
void downloadFinished();
private:
int threadNum;
qint64 pidNumber = -1;
QString filename;
qint64 fileSize;
QVector<QPair<qint64, qint64>> ranges;
QFile *file;
bool finished = false;
QVector<QString> domains;
signals:
void errorOccur(const QString& msg);
void downloadProcess(QString, qint64, qint64);
void downloadFinished();
};
#endif // FILEDOWNLOADWORKER_H

View File

@@ -18,6 +18,7 @@ DWIDGET_USE_NAMESPACE
int main(int argc, char *argv[])
{
// Get build time
static const QString version = "4.2.3";
static const QDate buildDate = QLocale(QLocale::English).toDate(QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy");
static const QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss");
static const QString buildDateTime = buildDate.toString("yyyy.MM.dd") + "-" + buildTime.toString("hh:mm:ss");
@@ -58,7 +59,7 @@ int main(int argc, char *argv[])
int fakeArgc = argc + 2; // QCoreApplication 的 argc 要用引用,避免 c++ 编译器优化
Application a(fakeArgc, fakeArgs.data());
// 设置版本和构建时间
a.setBuildDateTime(buildDateTime);
a.setVersionAndBuildDateTime(version, buildDateTime);
// 限制单实例运行
if (!a.setSingleInstance("spark-store"))

View File

@@ -3,7 +3,6 @@
#include "utils/widgetanimation.h"
#include "widgets/common/progressbutton.h"
#include "widgets/downloadlistwidget.h"
#include "widgets/common/downloaditem.h"
#include "dbus/dbussparkstoreservice.h"
#include "application.h"
@@ -11,7 +10,6 @@
#include <DWidgetUtil>
#include <DGuiApplicationHelper>
#include <QDesktopServices>
#include <QAbstractButton>
#include <QtConcurrent>
@@ -134,9 +132,6 @@ void MainWindow::initTitleBar()
searchEdit->setPlaceholderText(tr("Search or enter spk://"));
downloadButton = new ProgressButton(ui->titlebar);
downloadButton->setDownloadListWidget(downloadlistwidget);
downloadButton->setFocusPolicy(Qt::FocusPolicy::ClickFocus);
downloadlistwidget->setFocusProxy(downloadButton);
QWidget *w_titlebar = new QWidget(ui->titlebar);
QHBoxLayout *ly_titlebar = new QHBoxLayout(w_titlebar);
@@ -302,6 +297,14 @@ void MainWindow::initConnections()
ui->appintopage->setTheme(themeType == DGuiApplicationHelper::DarkType);
ui->settingspage->setTheme(themeType == DGuiApplicationHelper::DarkType); });
connect(downloadButton, &ProgressButton::clicked, [=]()
{
QPoint pos;
pos.setX(downloadButton->mapToGlobal(QPoint(0, 0)).x() + downloadButton->width() / 2 - downloadlistwidget->width() / 2);
pos.setY(downloadButton->mapToGlobal(QPoint(0, 0)).y() + downloadButton->height() + 5);
downloadlistwidget->m_move(pos.x(), pos.y());
downloadlistwidget->show(); });
// appintopage按下下载按钮时标题栏下载列表按钮抖动
connect(ui->appintopage, &AppIntoPage::clickedDownloadBtn, [=]()
{
@@ -418,35 +421,6 @@ void MainWindow::updateUi(int now)
switchPage(AppPageApplist);
}
void MainWindow::notify(QObject *receiver, QEvent *event)
{
if (!receiver) {
return;
}
Dtk::Widget::DStyle *o_ptr = qobject_cast<Dtk::Widget::DStyle *>(receiver);
if (o_ptr) {
return;
}
if (receiver->inherits("QWidgetWindow")
|| receiver->inherits("QStyleSheetStyle")) {
return;
}
if (event->type() == QEvent::FocusIn) {
QList<QObject *> list = downloadButton->findChildren<QObject *>(QString(), Qt::FindChildrenRecursively);
list << downloadlistwidget->findChildren<QObject *>(QString(), Qt::FindChildrenRecursively);
if (receiver != downloadButton && receiver != downloadlistwidget && !list.contains(receiver)) {
downloadlistwidget->hide();
}
} else if (event->type() == QEvent::FocusOut) {
if (!downloadlistwidget->isActiveWindow() && !isActiveWindow()) {
downloadlistwidget->hide();
}
}
}
void MainWindow::on_pushButton_14_clicked()
{
// Check UOS

View File

@@ -25,7 +25,7 @@ class MainWindow : public BaseWidgetOpacity
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
~MainWindow();
void openUrl(const QString &url);
@@ -41,9 +41,6 @@ private:
void switchPage(int now);
void updateUi(int now);
public slots:
void notify(QObject *receiver, QEvent *event);
private slots:
//接受来自dbus的url
void onGetUrl(const QString &url);

View File

@@ -2,10 +2,8 @@
#include "ui_appintopage.h"
#include "backend/sparkapi.h"
#include "widgets/downloadlistwidget.h"
#include "widgets/common/downloaditem.h"
#include "backend/image_show.h"
#include "application.h"
#include "utils/utils.h"
#include <QtConcurrent>
#include <QClipboard>

View File

@@ -1,6 +1,8 @@
#ifndef APPINTOPAGE_H
#define APPINTOPAGE_H
#include "utils/utils.h"
#include <QWidget>
#include <QJsonObject>
#include <QUrl>

View File

@@ -22,13 +22,8 @@ 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
# Get build version from qmake
VERSION = $$BUILD_VERSION
isEmpty(VERSION): VERSION = 4.0.0
DEFINES += APP_VERSION=\\\"'$${VERSION}'\\\"
# Disable qWarning / qDebug output in Release
#CONFIG(release, debug | release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
# CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
CONFIG += c++11 link_pkgconfig
PKGCONFIG += dtkcore dtkgui dtkwidget

View File

@@ -8,7 +8,6 @@
#include <QSettings>
#include <QStandardPaths>
#include <QFile>
#include <QJsonDocument>
#define UOSDeveloperModeFile "/var/lib/deepin/developer-mode/enabled"
@@ -183,33 +182,3 @@ void Utils::checkUOSDeveloperMode()
file.close();
config.sync(); // 写入更改至 config.ini并同步最新内容
}
/**
* @brief Utils::parseFeatureJsonFile 解析版本特性 json 文件
* @return 返回 QJsonObject
*/
QJsonObject Utils::parseFeatureJsonFile()
{
QFile file(":/json/features.json");
if (!file.open(QFile::ReadOnly))
{
qWarning() << Q_FUNC_INFO << "features.json open failed";
return QJsonObject();
}
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(file.readAll(), &error);
if (error.error != QJsonParseError::NoError || jsonDoc.isNull())
{
qWarning() << Q_FUNC_INFO << "features.json validate failed:" << error.errorString();
return QJsonObject();
}
if (jsonDoc.isEmpty() || !jsonDoc.isObject())
{
qWarning() << Q_FUNC_INFO << "features jsonDoc parse failed:" << jsonDoc;
return QJsonObject();
}
return jsonDoc.object();
}

View File

@@ -2,7 +2,6 @@
#define UTILS_H
#include <QObject>
#include <QJsonObject>
class Utils
{
@@ -14,7 +13,6 @@ public:
static bool isUOS();
static void setQPAPlatform();
static void checkUOSDeveloperMode();
static QJsonObject parseFeatureJsonFile();
};
#endif // UTILS_H

View File

@@ -61,21 +61,8 @@ QString DownloadItem::getName()
return ui->label_filename->text();
}
/***************************************************************
* @brief 告知界面,准备安装
* @param
* @note 如果正在安装,返回-1
* @Sample usage: DownloadItem::install(0);
**************************************************************/
int DownloadItem::readyInstall()
void DownloadItem::readyInstall()
{
// 检查是否正在安装,如果是返回错误 -1
if (isInstall)
{
return -1;
}
if (!close)
{
ui->progressBar->hide();
@@ -83,9 +70,7 @@ int DownloadItem::readyInstall()
ui->pushButton_install->show();
DownloadItem::install(0);
ui->pushButton_2->hide();
return 1;
}
return 0;
}
void DownloadItem::setFileName(QString fileName)
@@ -108,12 +93,6 @@ void DownloadItem::setSpeed(QString s)
speed = s;
}
/***************************************************************
* @brief 安装当前应用
* @param int t, t为安装方式可以为 0,1,2
* @note 备注
* @Sample usage: DownloadItem::install(0);
**************************************************************/
void DownloadItem::install(int t)
{
if (!isInstall)
@@ -163,12 +142,6 @@ void DownloadItem::on_pushButton_3_clicked()
output_w->show();
}
/***************************************************************
* @brief 实际安装应用
* @param int t, t为安装方式可以为 0,1,2
* @note 备注
* @Sample usage: slotAsyncInstall(0);
**************************************************************/
void DownloadItem::slotAsyncInstall(int t)
{
QProcess installer;

View File

@@ -34,7 +34,7 @@ public:
void setMax(qint64);
void setName(QString);
QString getName();
int readyInstall();
void readyInstall();
void setFileName(QString);
void seticon(const QPixmap);

View File

@@ -1,20 +1,20 @@
#include "progressbutton.h"
#include "widgets/downloadlistwidget.h"
#include <QPainter>
#include <QPainterPath>
#include <QMoveEvent>
#include <QRect>
#include <QConicalGradient>
#include <QVariantAnimation>
#include <QSvgRenderer>
ProgressButton::ProgressButton(QWidget *parent)
: QWidget{parent}
{
// this->setWindowFlags(Qt::FramelessWindowHint);
// this->setAttribute(Qt::WA_TranslucentBackground, true);
setMinimumSize(36, 36);
setMinimumWidth(36);
setMinimumHeight(36);
svgPath = "";
backColor = Qt::transparent;
setMouseTracking(true);
connect(this, &ProgressButton::startProcessing, this, &ProgressButton::operationProcessing, Qt::QueuedConnection);
}
@@ -23,6 +23,69 @@ ProgressButton::~ProgressButton()
{
}
void ProgressButton::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
auto rect = event->rect();
if (buttonState == state::normal || buttonState == state::hover)
{
auto radiu = (rect.height() - 6) / 2;
painter.translate(rect.center());
painter.setPen(Qt::transparent);
painter.setBrush(QColor(buttonState == state::normal ? color : color.darker()));
// painter.drawEllipse(QPoint(0,0),radiu,radiu);
// radiu -= 3;
painter.setBrush(backColor);
painter.drawEllipse(QPoint(0, 0), radiu, radiu);
QSvgRenderer m_svgRender;
m_svgRender.load(svgPath);
m_svgRender.render(&painter, QRectF(-radiu / 2, -radiu / 2, radiu, radiu));
}
else if (buttonState == state::openProgress)
{
painter.translate(rect.center());
auto radiu = (rect.height() - 6) / 2 - 3;
painter.setBrush(backColor);
painter.setPen(QPen(backColor, 3));
painter.drawEllipse(QPoint(0, 0), radiu, radiu);
painter.setPen(QPen(backColor, 3));
QSvgRenderer m_svgRender;
m_svgRender.load(svgPath);
m_svgRender.render(&painter, QRectF(-radiu / 2, -radiu / 2, radiu, radiu));
QRect rect = QRect(-radiu, -radiu,
radiu * 2, radiu * 2);
painter.setPen(QPen(color.darker(100), 3));
auto angle = progress * 360 / 100;
painter.drawArc(rect.adjusted(-3, -3, 3, 3), 90 * 16, -static_cast<int>(angle * 16));
}
else if (buttonState == state::closeProgress)
{
auto radiu = (rect.height() - 6) / 2;
painter.translate(rect.center());
painter.setPen(Qt::transparent);
painter.setBrush(QColor(0, 0, 0, 63));
painter.drawEllipse(QPoint(0, 0), radiu, radiu);
radiu -= 3;
painter.setBrush(backColor);
painter.drawEllipse(QPoint(0, 0), radiu, radiu);
painter.setPen(QPen(color, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter.drawLine(QPoint(-radiu / 3, 0),
QPoint(-radiu / 5, radiu / 3));
painter.drawLine(QPoint(-radiu / 5, radiu / 3),
QPoint(radiu / 4, -radiu / 4));
}
}
void ProgressButton::setProgress(int progress)
{
buttonState = state::openProgress;
@@ -44,11 +107,6 @@ void ProgressButton::setProgress(int progress)
update();
}
void ProgressButton::setDownloadListWidget(DownloadListWidget *widget)
{
m_downloadListWidget = widget;
}
void ProgressButton::setIcon(QString svgPATH)
{
svgPath = svgPATH;
@@ -67,56 +125,6 @@ void ProgressButton::setColor(QColor color)
update();
}
void ProgressButton::mousePressEvent(QMouseEvent *event)
{
m_mouseMoved = false;
m_isDownloadListWidgetVisible = m_downloadListWidget->isVisible();
m_downloadListWidget->hide();
QWidget::mousePressEvent(event);
}
void ProgressButton::mouseReleaseEvent(QMouseEvent *event)
{
if (buttonState == state::hover || buttonState == state::normal)
{
widthChangeValue = (this->width() - 6) / 2;
update();
}
else if (buttonState == state::closeProgress)
{
update();
}
if (m_mouseMoved) {
return QWidget::mouseReleaseEvent(event);
}
if (m_isDownloadListWidgetVisible) {
m_downloadListWidget->hide();
} else {
QPoint pos(this->mapToGlobal(QPoint(0, 0)));
pos += QPoint(width() / 2 - m_downloadListWidget->width() / 2, height() + 5);
m_downloadListWidget->m_move(pos.x(), pos.y());
m_downloadListWidget->setWindowState(windowState() & Qt::WindowState::WindowActive);
m_downloadListWidget->activateWindow();
m_downloadListWidget->show();
m_downloadListWidget->raise();
}
m_isDownloadListWidgetVisible = m_downloadListWidget->isVisible();
QWidget::mouseReleaseEvent(event);
}
void ProgressButton::mouseDoubleClickEvent(QMouseEvent *event)
{
event->accept();
}
void ProgressButton::mouseMoveEvent(QMouseEvent *event)
{
m_mouseMoved = true;
QWidget::mouseMoveEvent(event);
}
void ProgressButton::leaveEvent(QEvent *event)
{
if (buttonState == state::hover)
@@ -127,68 +135,19 @@ void ProgressButton::leaveEvent(QEvent *event)
QWidget::leaveEvent(event);
}
void ProgressButton::paintEvent(QPaintEvent *event)
void ProgressButton::mousePressEvent(QMouseEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
QRect rect = event->rect();
if (buttonState == state::normal || buttonState == state::hover)
if (buttonState == state::hover || buttonState == state::normal)
{
int radius = (rect.height() - 6) / 2;
painter.translate(rect.center());
painter.setPen(Qt::transparent);
painter.setBrush(QColor(buttonState == state::normal ? color : color.darker()));
// painter.drawEllipse(QPoint(0, 0), radius, radius);
// radiu -= 3;
painter.setBrush(backColor);
painter.drawEllipse(QPoint(0, 0), radius, radius);
QSvgRenderer m_svgRender;
m_svgRender.load(svgPath);
m_svgRender.render(&painter, QRectF(-radius / 2, -radius / 2, radius, radius));
}
else if (buttonState == state::openProgress)
{
painter.translate(rect.center());
int radius = (rect.height() - 6) / 2 - 3;
painter.setBrush(backColor);
painter.setPen(QPen(backColor, 3));
painter.drawEllipse(QPoint(0, 0), radius, radius);
painter.setPen(QPen(backColor, 3));
QSvgRenderer m_svgRender;
m_svgRender.load(svgPath);
m_svgRender.render(&painter, QRectF(-radius / 2, -radius / 2, radius, radius));
QRect rect = QRect(-radius, -radius,
radius * 2, radius * 2);
painter.setPen(QPen(color.darker(100), 3));
qreal angle = progress * 360 / 100 * 1.0;
painter.drawArc(rect.adjusted(-3, -3, 3, 3), 90 * 16, -qIntCast(angle * 16));
widthChangeValue = (this->width() - 6) / 2;
update();
}
else if (buttonState == state::closeProgress)
{
auto radius = (rect.height() - 6) / 2;
painter.translate(rect.center());
painter.setPen(Qt::transparent);
painter.setBrush(QColor(0, 0, 0, 63));
painter.drawEllipse(QPoint(0, 0), radius, radius);
radius -= 3;
painter.setBrush(backColor);
painter.drawEllipse(QPoint(0, 0), radius, radius);
painter.setPen(QPen(color, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter.drawLine(QPoint(-radius / 3, 0),
QPoint(-radius / 5, radius / 3));
painter.drawLine(QPoint(-radius / 5, radius / 3),
QPoint(radius / 4, -radius / 4));
update();
}
QWidget::paintEvent(event);
emit clicked();
QWidget::mousePressEvent(event);
}
void ProgressButton::operationProcessing()
@@ -197,16 +156,16 @@ void ProgressButton::operationProcessing()
const int RADIUS = 60;
WaterDrop::WaterDrop(QWidget *parent)
: QWidget(parent)
, m_waterDropAnimation(new QVariantAnimation(this))
, m_animationRadius(0)
: QWidget(parent), m_waterDropAnimation(nullptr), m_animationRadius(0)
{
this->setFixedSize(QSize(RADIUS * 2, RADIUS * 2));
// this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
// this->setAttribute(Qt::WA_TranslucentBackground);
// this->setAttribute(Qt::WA_DeleteOnClose);
m_waterDropAnimation = new QVariantAnimation(this);
// m_waterDropAnimation->setEasingCurve(QEasingCurve(static_cast<QEasingCurve::Type>(QRandomGenerator::global()->bounded(40))));
connect(m_waterDropAnimation, &QVariantAnimation::finished, this, &WaterDrop::deleteLater);
}
// 把鼠标点击的点转换为圆心点坐标
@@ -232,7 +191,8 @@ void WaterDrop::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QPen pen(QBrush(QColor("#ffff80")), 5.0);
QPen pen;
pen.setColor(QColor(0xffffff80));
pen.setWidth(5);
painter.setPen(pen);
painter.drawEllipse(event->rect().center(), m_animationRadius, m_animationRadius);
@@ -240,7 +200,7 @@ void WaterDrop::paintEvent(QPaintEvent *event)
QWidget::paintEvent(event);
}
void WaterDrop::onRadiusChanged(const QVariant &value)
void WaterDrop::onRadiusChanged(QVariant value)
{
m_animationRadius = value.toInt();
update();

View File

@@ -1,62 +1,53 @@
#ifndef PROGRESSBUTTON_H
#define PROGRESSBUTTON_H
#include <QWidget>
#include <QTimer>
#include <QVariantAnimation>
class DownloadListWidget;
#include <QtWidgets/QWidget>
#include <QPaintEvent>
#include <QTimer>
#include <QTimerEvent>
#include<QColor>
#include <QList>
#include <QMouseEvent>
class ProgressButton : public QWidget
{
Q_OBJECT
public:
explicit ProgressButton(QWidget *parent = nullptr);
~ProgressButton() override;
ProgressButton(QWidget *parent = nullptr);
void setIcon(QString svgPATH);
void setBackgroundColor(QColor color);
void setColor(QColor color);
void setProgress(int progress);
void setDownloadListWidget(DownloadListWidget *widget);
protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void leaveEvent(QEvent *event) override;
void paintEvent(QPaintEvent *event) override;
~ProgressButton();
signals:
void startProcessing();
void clicked();
private slots:
void operationProcessing();
protected:
void paintEvent(QPaintEvent *event)override;
void leaveEvent(QEvent *event)override;
void mousePressEvent(QMouseEvent *event)override;
private:
enum state
enum class state
{
normal,
hover,
openProgress,
closeProgress,
recovery
};
DownloadListWidget *m_downloadListWidget = nullptr;
state buttonState{state::normal};
}
buttonState{state::normal};
QColor backColor;
QColor color;
QString svgPath;
int widthChangeValue{0};
void operationProcessing();
int progress{0};//处理百分比
bool m_mouseMoved = false;
bool m_isDownloadListWidgetVisible = true;
};
class WaterDrop : public QWidget
@@ -64,19 +55,19 @@ class WaterDrop : public QWidget
Q_OBJECT
public:
explicit WaterDrop(QWidget *parent = nullptr);
WaterDrop(QWidget *parent = Q_NULLPTR);
void show();
void move(const QPoint &point);
protected:
private:
void paintEvent(QPaintEvent *event);
private slots:
void onRadiusChanged(const QVariant &value);
void onRadiusChanged(QVariant value);
private:
QVariantAnimation *m_waterDropAnimation = nullptr;
class QVariantAnimation* m_waterDropAnimation;
int m_animationRadius;
};
#endif // PROGRESSBUTTON_H

View File

@@ -1,15 +1,8 @@
#include "downloadlistwidget.h"
#include "ui_downloadlistwidget.h"
#include "widgets/common/downloaditem.h"
#include "backend/sparkapi.h"
#include "backend/downloadworker.h"
#include "utils/utils.h"
#include "application.h"
#include <QDesktopServices>
#include <QtConcurrent>
#include <QGraphicsOpacityEffect>
#include <QPropertyAnimation>
#include <QDebug>
DownloadListWidget::DownloadListWidget(QWidget *parent) : DBlurEffectWidget(parent),
ui(new Ui::DownloadListWidget)
{
@@ -63,7 +56,7 @@ DownloadListWidget::~DownloadListWidget()
{
downloadController->disconnect();
downloadController->stopDownload();
// 这里没有释放 downloadController,使用懒汉式单例
downloadController->deleteLater();
}
clearItem();
@@ -72,9 +65,22 @@ DownloadListWidget::~DownloadListWidget()
void DownloadListWidget::clearItem()
{
// QListWidgetItem *item = nullptr;
// while ((item = ui->listWidget->takeItem(0)) != nullptr)
// {
// QWidget *card = ui->listWidget->itemWidget(item);
// if (card)
// {
// card->deleteLater();
// card = nullptr;
// }
// delete item;
// item = nullptr;
// }
// ui->listWidget->vScrollBar->scrollTop();
ui->listWidget->clear();
}
DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QString pkgName, const QPixmap icon, QString downloadurl)
{
if (fileName.isEmpty())
@@ -121,18 +127,13 @@ void DownloadListWidget::startRequest(QUrl url, QString fileName)
isdownload = true;
downloaditemlist[allDownload - 1]->free = false;
// 使用懒汉式单例来存储downloadController
if (downloadController == nullptr)
{
downloadController = new DownloadController; // 并发下载,在第一次点击下载按钮的时候才会初始化
}
if (downloadController)
{
downloadController->disconnect();
downloadController->stopDownload();
downloadController->deleteLater();
}
downloadController = new DownloadController; // 并发下载,在点击下载按钮的时候才会初始化
connect(downloadController, &DownloadController::downloadProcess, this, &DownloadListWidget::updateDataReadProgress);
connect(downloadController, &DownloadController::downloadFinished, this, &DownloadListWidget::httpFinished);
// connect(downloadController, &DownloadController::errorOccur, this, [=](QString msg){this->sendNotification(msg);});
@@ -140,44 +141,30 @@ void DownloadListWidget::startRequest(QUrl url, QString fileName)
downloadController->startDownload(url.toString());
}
/***************************************************************
* @brief 下载列表完成下载的回调函数
* @param
* @note 如果正在安装,则在新开的线程空间中等待上一个安装完
* @Sample usage:
**************************************************************/
void DownloadListWidget::httpFinished() // 完成下载
{
isdownload = false;
isBusy = false;
QtConcurrent::run([=]()
downloaditemlist[nowDownload - 1]->readyInstall();
downloaditemlist[nowDownload - 1]->free = true;
emit downloadFinished();
if (nowDownload < allDownload)
{
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1)
// 如果有排队则下载下一个
qDebug() << "切换下一个下载...";
nowDownload += 1;
while (downloaditemlist[nowDownload - 1]->close)
{
continue;
}
downloaditemlist[nowDownload - 1]->free = true;
emit downloadFinished();
if (nowDownload < allDownload)
{
// 如果有排队则下载下一个
qDebug() << "切换下一个下载...";
nowDownload += 1;
while (downloaditemlist[nowDownload - 1]->close)
if (nowDownload >= allDownload)
{
nowDownload += 1;
if (nowDownload >= allDownload)
{
nowDownload = allDownload;
return;
}
nowDownload = allDownload;
return;
}
QString fileName = downloaditemlist[nowDownload - 1]->getName();
startRequest(urList.at(nowDownload - 1), fileName);
}
});
QString fileName = downloaditemlist[nowDownload - 1]->getName();
startRequest(urList.at(nowDownload - 1), fileName);
}
}
void DownloadListWidget::updateDataReadProgress(QString speedInfo, qint64 bytesRead, qint64 totalBytes)
@@ -208,7 +195,21 @@ void DownloadListWidget::m_move(int x, int y)
move(x, y);
return;
}
bool DownloadListWidget::eventFilter(QObject *watched, QEvent *event)
{
if (Q_NULLPTR == watched)
{
return false;
}
if (QEvent::ActivationChange == event->type())
{
if (QApplication::activeWindow() != this)
{
this->close();
}
}
return QWidget::eventFilter(watched, event);
}
void DownloadListWidget::mouseMoveEvent(QMouseEvent *event)
{
setGeometry(m_rect);

View File

@@ -1,19 +1,20 @@
#ifndef DOWNLOADLISTWIDGET_H
#define DOWNLOADLISTWIDGET_H
#include <DBlurEffectWidget>
#include <QWidget>
#include <QTimer>
#include <DBlurEffectWidget>
#include <QNetworkAccessManager>
#include <QDesktopServices>
#include "widgets/common/downloaditem.h"
#include "backend/sparkapi.h"
#include "backend/downloadworker.h"
#include "utils/utils.h"
DWIDGET_USE_NAMESPACE
namespace Ui {
class DownloadListWidget;
}
DWIDGET_USE_NAMESPACE
class DownloadItem;
class DownloadController;
class DownloadListWidget : public DBlurEffectWidget
{
Q_OBJECT
@@ -26,10 +27,7 @@ public:
QList<QUrl> getUrlList();
void m_move(int x, int y);
explicit DownloadListWidget(QWidget *parent = nullptr);
~DownloadListWidget() override;
protected:
void mouseMoveEvent(QMouseEvent *event) override;
~DownloadListWidget();
private:
int isdownload = false;
@@ -50,13 +48,13 @@ private:
void clearItem();
QRect m_rect;
Ui::DownloadListWidget *ui;
private slots:
bool eventFilter(QObject *, QEvent *);
void mouseMoveEvent(QMouseEvent *event);
void on_pushButton_clicked();
signals:
void downloadFinished();
void downloadProgress(int i);
private slots:
void on_pushButton_clicked();
};
#endif // DOWNLOADLISTWIDGET_H

View File

@@ -8,7 +8,7 @@ mkdir -p /tmp/aptss-conf/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
fi
@@ -21,10 +21,10 @@ mkdir -p /tmp/aptss-conf/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore.list"
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list"
sudo bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
#只更新星火源
@@ -69,23 +69,23 @@ mkdir -p /tmp/aptss-conf/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore.list"
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list"
sudo bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
#只更新星火源
elif [ "$1" = "update" ];then
sudo curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore.list"
sudo curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list"
mkdir -p /tmp/aptss-conf/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
### 额外一份拿来给aptss自动补全用
bwrap --dev-bind / / \

View File

@@ -54,7 +54,7 @@ fi
DEBPATH=`realpath $1`
if [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ] && [ ! -e "/var/lib/apt/lists/mirrors.sdu.edu.cn_spark-store-repository_store_Packages" ];then
if [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ];then
echo "接收星火仓库软件信息中..."
aptss ssupdate
fi
@@ -64,12 +64,9 @@ fi
if [ -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是单目录仓库配置"
elif [ -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ]
else
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是根目录仓库配置"
else
PACKAGES_DATA_PATH="/var/lib/apt/lists/mirrors.sdu.edu.cn_spark-store-repository_store_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是SDU镜像仓库配置"
fi

View File

@@ -10,9 +10,9 @@
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="173"/>
<location filename="../src/pages/appintopage.cpp" line="315"/>
<location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="171"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="428"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
@@ -175,51 +175,51 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="47"/>
<location filename="../src/pages/appintopage.cpp" line="45"/>
<source>Click Open</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="112"/>
<location filename="../src/pages/appintopage.cpp" line="110"/>
<source>Developer Mode Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="158"/>
<location filename="../src/pages/appintopage.cpp" line="331"/>
<location filename="../src/pages/appintopage.cpp" line="403"/>
<location filename="../src/pages/appintopage.cpp" line="156"/>
<location filename="../src/pages/appintopage.cpp" line="329"/>
<location filename="../src/pages/appintopage.cpp" line="401"/>
<source>Reinstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="165"/>
<location filename="../src/pages/appintopage.cpp" line="163"/>
<source>Upgrade</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="320"/>
<location filename="../src/pages/appintopage.cpp" line="379"/>
<location filename="../src/pages/appintopage.cpp" line="318"/>
<location filename="../src/pages/appintopage.cpp" line="377"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="325"/>
<location filename="../src/pages/appintopage.cpp" line="323"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="447"/>
<location filename="../src/pages/appintopage.cpp" line="432"/>
<location filename="../src/pages/appintopage.cpp" line="445"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="432"/>
<source>Uninstall succeeded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="447"/>
<location filename="../src/pages/appintopage.cpp" line="445"/>
<source>The URL has been copied to the clipboard</source>
<translation type="unfinished"></translation>
</message>
@@ -240,12 +240,12 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="133"/>
<location filename="../src/application.cpp" line="111"/>
<source>Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="143"/>
<location filename="../src/application.cpp" line="118"/>
<source>%1 is released under %2</source>
<translation type="unfinished"></translation>
</message>
@@ -299,59 +299,59 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="213"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="224"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="232"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="186"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="197"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="205"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="125"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="126"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="104"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="105"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="213"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="186"/>
<source>Installation complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="214"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="215"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="187"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="188"/>
<source>Finish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="222"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="195"/>
<source>Retry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="224"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="197"/>
<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="225"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="198"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="199"/>
<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="232"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="205"/>
<source>dpkg progress had been abortedyou can retry installation.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="233"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="234"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="206"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="207"/>
<source>dpkg progress had been abortedyou can retry installation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="145"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="123"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="124"/>
<source>Download canceled</source>
<translation type="unfinished"></translation>
</message>
@@ -452,33 +452,33 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="170"/>
<location filename="../src/mainwindow-dtk.cpp" line="165"/>
<source>Submit App</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
<location filename="../src/mainwindow-dtk.cpp" line="166"/>
<source>Submit App with client(Recommanded)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="172"/>
<location filename="../src/mainwindow-dtk.cpp" line="167"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="173"/>
<location filename="../src/mainwindow-dtk.cpp" line="168"/>
<source>APP Upgrade and Install Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="129"/>
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
<location filename="../src/mainwindow-dtk.cpp" line="127"/>
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="134"/>
<location filename="../src/mainwindow-dtk.cpp" line="132"/>
<source>Search or enter spk://</source>
<translation type="unfinished"></translation>
</message>
@@ -486,29 +486,29 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/mainwindow-dtk.cpp" line="109"/>
<location filename="../src/application.cpp" line="29"/>
<location filename="../src/application.cpp" line="30"/>
<location filename="../src/mainwindow-dtk.cpp" line="107"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="34"/>
<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="140"/>
<location filename="../src/application.cpp" line="115"/>
<source>Spark Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/downloadlistwidget.cpp" line="17"/>
<location filename="../src/widgets/downloadlistwidget.cpp" line="10"/>
<source>Download list</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="227"/>
<location filename="../src/mainwindow-dtk.cpp" line="222"/>
<source>Show MainWindow</source>
<translation type="unfinished"></translation>
</message>
@@ -619,12 +619,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="228"/>
<location filename="../src/mainwindow-dtk.cpp" line="223"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="229"/>
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
<source>Exit</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -10,9 +10,9 @@
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="173"/>
<location filename="../src/pages/appintopage.cpp" line="315"/>
<location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="171"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="428"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
@@ -175,51 +175,51 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="47"/>
<location filename="../src/pages/appintopage.cpp" line="45"/>
<source>Click Open</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="112"/>
<location filename="../src/pages/appintopage.cpp" line="110"/>
<source>Developer Mode Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="158"/>
<location filename="../src/pages/appintopage.cpp" line="331"/>
<location filename="../src/pages/appintopage.cpp" line="403"/>
<location filename="../src/pages/appintopage.cpp" line="156"/>
<location filename="../src/pages/appintopage.cpp" line="329"/>
<location filename="../src/pages/appintopage.cpp" line="401"/>
<source>Reinstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="165"/>
<location filename="../src/pages/appintopage.cpp" line="163"/>
<source>Upgrade</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="320"/>
<location filename="../src/pages/appintopage.cpp" line="379"/>
<location filename="../src/pages/appintopage.cpp" line="318"/>
<location filename="../src/pages/appintopage.cpp" line="377"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="325"/>
<location filename="../src/pages/appintopage.cpp" line="323"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="447"/>
<location filename="../src/pages/appintopage.cpp" line="432"/>
<location filename="../src/pages/appintopage.cpp" line="445"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="432"/>
<source>Uninstall succeeded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="447"/>
<location filename="../src/pages/appintopage.cpp" line="445"/>
<source>The URL has been copied to the clipboard</source>
<translation type="unfinished"></translation>
</message>
@@ -240,12 +240,12 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="133"/>
<location filename="../src/application.cpp" line="111"/>
<source>Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="143"/>
<location filename="../src/application.cpp" line="118"/>
<source>%1 is released under %2</source>
<translation type="unfinished"></translation>
</message>
@@ -299,59 +299,59 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="213"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="224"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="232"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="186"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="197"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="205"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="125"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="126"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="104"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="105"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="213"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="186"/>
<source>Installation complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="214"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="215"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="187"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="188"/>
<source>Finish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="222"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="195"/>
<source>Retry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="224"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="197"/>
<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="225"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="198"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="199"/>
<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="232"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="205"/>
<source>dpkg progress had been abortedyou can retry installation.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="233"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="234"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="206"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="207"/>
<source>dpkg progress had been abortedyou can retry installation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="145"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="123"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="124"/>
<source>Download canceled</source>
<translation type="unfinished"></translation>
</message>
@@ -452,33 +452,33 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="170"/>
<location filename="../src/mainwindow-dtk.cpp" line="165"/>
<source>Submit App</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
<location filename="../src/mainwindow-dtk.cpp" line="166"/>
<source>Submit App with client(Recommanded)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="172"/>
<location filename="../src/mainwindow-dtk.cpp" line="167"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="173"/>
<location filename="../src/mainwindow-dtk.cpp" line="168"/>
<source>APP Upgrade and Install Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="129"/>
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
<location filename="../src/mainwindow-dtk.cpp" line="127"/>
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="134"/>
<location filename="../src/mainwindow-dtk.cpp" line="132"/>
<source>Search or enter spk://</source>
<translation type="unfinished"></translation>
</message>
@@ -486,29 +486,29 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/mainwindow-dtk.cpp" line="109"/>
<location filename="../src/application.cpp" line="29"/>
<location filename="../src/application.cpp" line="30"/>
<location filename="../src/mainwindow-dtk.cpp" line="107"/>
<source>Spark Store</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="34"/>
<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="140"/>
<location filename="../src/application.cpp" line="115"/>
<source>Spark Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/downloadlistwidget.cpp" line="17"/>
<location filename="../src/widgets/downloadlistwidget.cpp" line="10"/>
<source>Download list</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="227"/>
<location filename="../src/mainwindow-dtk.cpp" line="222"/>
<source>Show MainWindow</source>
<translation type="unfinished"></translation>
</message>
@@ -619,12 +619,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="228"/>
<location filename="../src/mainwindow-dtk.cpp" line="223"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="229"/>
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
<source>Exit</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -10,9 +10,9 @@
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="173"/>
<location filename="../src/pages/appintopage.cpp" line="315"/>
<location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="171"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="428"/>
<source>Download</source>
<translation></translation>
</message>
@@ -175,51 +175,51 @@
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="47"/>
<location filename="../src/pages/appintopage.cpp" line="45"/>
<source>Click Open</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="112"/>
<location filename="../src/pages/appintopage.cpp" line="110"/>
<source>Developer Mode Disabled</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="158"/>
<location filename="../src/pages/appintopage.cpp" line="331"/>
<location filename="../src/pages/appintopage.cpp" line="403"/>
<location filename="../src/pages/appintopage.cpp" line="156"/>
<location filename="../src/pages/appintopage.cpp" line="329"/>
<location filename="../src/pages/appintopage.cpp" line="401"/>
<source>Reinstall</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="165"/>
<location filename="../src/pages/appintopage.cpp" line="163"/>
<source>Upgrade</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="320"/>
<location filename="../src/pages/appintopage.cpp" line="379"/>
<location filename="../src/pages/appintopage.cpp" line="318"/>
<location filename="../src/pages/appintopage.cpp" line="377"/>
<source>Install</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="325"/>
<location filename="../src/pages/appintopage.cpp" line="323"/>
<source>Installing</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="447"/>
<location filename="../src/pages/appintopage.cpp" line="432"/>
<location filename="../src/pages/appintopage.cpp" line="445"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="432"/>
<source>Uninstall succeeded</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="447"/>
<location filename="../src/pages/appintopage.cpp" line="445"/>
<source>The URL has been copied to the clipboard</source>
<translation></translation>
</message>
@@ -240,12 +240,12 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="133"/>
<location filename="../src/application.cpp" line="111"/>
<source>Version: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="143"/>
<location filename="../src/application.cpp" line="118"/>
<source>%1 is released under %2</source>
<translation>%1%2</translation>
</message>
@@ -299,59 +299,59 @@
<translation>.</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="213"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="224"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="232"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="186"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="197"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="205"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="125"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="126"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="104"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="105"/>
<source>Installing</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="213"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="186"/>
<source>Installation complete.</source>
<translation>.</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="214"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="215"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="187"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="188"/>
<source>Finish</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="222"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="195"/>
<source>Retry</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="224"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="197"/>
<source>Error happened in dpkg progress , you can try it again.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="225"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="198"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="199"/>
<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="232"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="205"/>
<source>dpkg progress had been abortedyou can retry installation.</source>
<translation>dpkg进程被中断</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="233"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="234"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="206"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="207"/>
<source>dpkg progress had been abortedyou can retry installation</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="145"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="123"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="124"/>
<source>Download canceled</source>
<translation></translation>
</message>
@@ -452,33 +452,33 @@
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="170"/>
<location filename="../src/mainwindow-dtk.cpp" line="165"/>
<source>Submit App</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
<location filename="../src/mainwindow-dtk.cpp" line="166"/>
<source>Submit App with client(Recommanded)</source>
<translation>使稿</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="172"/>
<location filename="../src/mainwindow-dtk.cpp" line="167"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="173"/>
<location filename="../src/mainwindow-dtk.cpp" line="168"/>
<source>APP Upgrade and Install Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="129"/>
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
<location filename="../src/mainwindow-dtk.cpp" line="127"/>
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="134"/>
<location filename="../src/mainwindow-dtk.cpp" line="132"/>
<source>Search or enter spk://</source>
<translation></translation>
</message>
@@ -486,29 +486,29 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/mainwindow-dtk.cpp" line="109"/>
<location filename="../src/application.cpp" line="29"/>
<location filename="../src/application.cpp" line="30"/>
<location filename="../src/mainwindow-dtk.cpp" line="107"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="34"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火计划开发者&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="140"/>
<location filename="../src/application.cpp" line="115"/>
<source>Spark Project</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/downloadlistwidget.cpp" line="17"/>
<location filename="../src/widgets/downloadlistwidget.cpp" line="10"/>
<source>Download list</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="227"/>
<location filename="../src/mainwindow-dtk.cpp" line="222"/>
<source>Show MainWindow</source>
<translation></translation>
</message>
@@ -619,12 +619,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="228"/>
<location filename="../src/mainwindow-dtk.cpp" line="223"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="229"/>
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
<source>Exit</source>
<translation>退</translation>
</message>

View File

@@ -10,9 +10,9 @@
</message>
<message>
<location filename="../src/pages/appintopage.ui" line="244"/>
<location filename="../src/pages/appintopage.cpp" line="173"/>
<location filename="../src/pages/appintopage.cpp" line="315"/>
<location filename="../src/pages/appintopage.cpp" line="430"/>
<location filename="../src/pages/appintopage.cpp" line="171"/>
<location filename="../src/pages/appintopage.cpp" line="313"/>
<location filename="../src/pages/appintopage.cpp" line="428"/>
<source>Download</source>
<translation></translation>
</message>
@@ -175,51 +175,51 @@
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="47"/>
<location filename="../src/pages/appintopage.cpp" line="45"/>
<source>Click Open</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="112"/>
<location filename="../src/pages/appintopage.cpp" line="110"/>
<source>Developer Mode Disabled</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="158"/>
<location filename="../src/pages/appintopage.cpp" line="331"/>
<location filename="../src/pages/appintopage.cpp" line="403"/>
<location filename="../src/pages/appintopage.cpp" line="156"/>
<location filename="../src/pages/appintopage.cpp" line="329"/>
<location filename="../src/pages/appintopage.cpp" line="401"/>
<source>Reinstall</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="165"/>
<location filename="../src/pages/appintopage.cpp" line="163"/>
<source>Upgrade</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="320"/>
<location filename="../src/pages/appintopage.cpp" line="379"/>
<location filename="../src/pages/appintopage.cpp" line="318"/>
<location filename="../src/pages/appintopage.cpp" line="377"/>
<source>Install</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="325"/>
<location filename="../src/pages/appintopage.cpp" line="323"/>
<source>Installing</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="447"/>
<location filename="../src/pages/appintopage.cpp" line="432"/>
<location filename="../src/pages/appintopage.cpp" line="445"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="434"/>
<location filename="../src/pages/appintopage.cpp" line="432"/>
<source>Uninstall succeeded</source>
<translation></translation>
</message>
<message>
<location filename="../src/pages/appintopage.cpp" line="447"/>
<location filename="../src/pages/appintopage.cpp" line="445"/>
<source>The URL has been copied to the clipboard</source>
<translation></translation>
</message>
@@ -240,12 +240,12 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="133"/>
<location filename="../src/application.cpp" line="111"/>
<source>Version: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="143"/>
<location filename="../src/application.cpp" line="118"/>
<source>%1 is released under %2</source>
<translation>%1%2</translation>
</message>
@@ -299,59 +299,59 @@
<translation>.</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="213"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="224"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="232"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="186"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="197"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="205"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="125"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="126"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="104"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="105"/>
<source>Installing</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="213"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="186"/>
<source>Installation complete.</source>
<translation>.</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="214"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="215"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="187"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="188"/>
<source>Finish</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="222"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="195"/>
<source>Retry</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="224"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="197"/>
<source>Error happened in dpkg progress , you can try it again.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="225"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="226"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="198"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="199"/>
<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="232"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="205"/>
<source>dpkg progress had been abortedyou can retry installation.</source>
<translation>dpkg进程被中断</translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="233"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="234"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="206"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="207"/>
<source>dpkg progress had been abortedyou can retry installation</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/common/downloaditem.cpp" line="144"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="145"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="123"/>
<location filename="../src/widgets/common/downloaditem.cpp" line="124"/>
<source>Download canceled</source>
<translation></translation>
</message>
@@ -452,33 +452,33 @@
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="170"/>
<location filename="../src/mainwindow-dtk.cpp" line="165"/>
<source>Submit App</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
<location filename="../src/mainwindow-dtk.cpp" line="166"/>
<source>Submit App with client(Recommanded)</source>
<translation>()</translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="172"/>
<location filename="../src/mainwindow-dtk.cpp" line="167"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="173"/>
<location filename="../src/mainwindow-dtk.cpp" line="168"/>
<source>APP Upgrade and Install Settings</source>
<translation> </translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="129"/>
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
<location filename="../src/mainwindow-dtk.cpp" line="127"/>
<location filename="../src/mainwindow-dtk.cpp" line="219"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="134"/>
<location filename="../src/mainwindow-dtk.cpp" line="132"/>
<source>Search or enter spk://</source>
<translation></translation>
</message>
@@ -486,29 +486,29 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/application.cpp" line="33"/>
<location filename="../src/application.cpp" line="34"/>
<location filename="../src/mainwindow-dtk.cpp" line="109"/>
<location filename="../src/application.cpp" line="29"/>
<location filename="../src/application.cpp" line="30"/>
<location filename="../src/mainwindow-dtk.cpp" line="107"/>
<source>Spark Store</source>
<translation></translation>
</message>
<message>
<location filename="../src/application.cpp" line="38"/>
<location filename="../src/application.cpp" line="34"/>
<source>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;An appstore powered by community&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;Spark developers&lt;/span&gt;</source>
<translation>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火计划开发者&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="140"/>
<location filename="../src/application.cpp" line="115"/>
<source>Spark Project</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/downloadlistwidget.cpp" line="17"/>
<location filename="../src/widgets/downloadlistwidget.cpp" line="10"/>
<source>Download list</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="227"/>
<location filename="../src/mainwindow-dtk.cpp" line="222"/>
<source>Show MainWindow</source>
<translation></translation>
</message>
@@ -619,12 +619,12 @@
<context>
<name>TitleBarMenu</name>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="228"/>
<location filename="../src/mainwindow-dtk.cpp" line="223"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../src/mainwindow-dtk.cpp" line="229"/>
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
<source>Exit</source>
<translation>退</translation>
</message>