mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-12-13 20:32:05 +08:00
!197 feat: 后台安装结束后退出任务栏驻留
* fix: 没有下载的时候直接退出客户端 * feat: 后台安装结束后退出任务栏驻留 * feat: 更新的时候关闭旧实例
This commit is contained in:
@@ -113,6 +113,11 @@ void Application::setMainWindow(MainWindow *window)
|
||||
#endif
|
||||
}
|
||||
|
||||
MainWindow *Application::mainWindow()
|
||||
{
|
||||
return m_mainWindow;
|
||||
}
|
||||
|
||||
void Application::initAboutDialog()
|
||||
{
|
||||
if (m_mainWindow == nullptr)
|
||||
|
||||
@@ -20,7 +20,9 @@ public:
|
||||
static void checkAppConfigLocation();
|
||||
|
||||
void setBuildDateTime(const QString &buildDateTime);
|
||||
|
||||
void setMainWindow(MainWindow *window);
|
||||
MainWindow *mainWindow();
|
||||
|
||||
private:
|
||||
void initAboutDialog();
|
||||
|
||||
@@ -104,6 +104,22 @@ void MainWindow::openUrl(const QString &url)
|
||||
}
|
||||
}
|
||||
|
||||
bool MainWindow::isCloseWindowAnimation()
|
||||
{
|
||||
return closeWindowAnimation;
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
// 判断下载任务数量,如果没有要下载的,就直接退出主程序
|
||||
if(!downloadlistwidget->isDownloadInProcess()){
|
||||
// 已经全部下载完成
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
BaseWidgetOpacity::closeEvent(event);
|
||||
}
|
||||
|
||||
void MainWindow::initUI()
|
||||
{
|
||||
setWindowTitle(QObject::tr("Spark Store"));
|
||||
|
||||
@@ -29,6 +29,11 @@ public:
|
||||
|
||||
void openUrl(const QString &url);
|
||||
|
||||
bool isCloseWindowAnimation();
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
|
||||
private:
|
||||
void initUI();
|
||||
void initTitleBar();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "basewidgetopacity.h"
|
||||
#include "utils/widgetanimation.h"
|
||||
#include "utils/utils.h"
|
||||
#include "widgets/downloadlistwidget.h"
|
||||
|
||||
#include <QSettings>
|
||||
#include <QStandardPaths>
|
||||
@@ -43,6 +44,7 @@ void BaseWidgetOpacity::closeEvent(QCloseEvent *event)
|
||||
bool isWayland = Utils::isWayland();
|
||||
if (isWayland)
|
||||
{
|
||||
closeWindowAnimation = true;
|
||||
return DBlurEffectWidget::closeEvent(event);
|
||||
}
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ void DownloadItem::setSpeed(QString s)
|
||||
/***************************************************************
|
||||
* @brief 安装当前应用
|
||||
* @param int t, t为安装方式,可以为 0,1,2
|
||||
* @note 备注
|
||||
* @note 执行这个函数时,需要已经检查是否可以安装,但该函数仍然会再检测一次!
|
||||
* @Sample usage: DownloadItem::install(0);
|
||||
**************************************************************/
|
||||
void DownloadItem::install(int t)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "backend/downloadworker.h"
|
||||
#include "utils/utils.h"
|
||||
#include "application.h"
|
||||
#include "mainwindow-dtk.h"
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QtConcurrent>
|
||||
@@ -70,6 +71,15 @@ DownloadListWidget::~DownloadListWidget()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
bool DownloadListWidget::isDownloadInProcess()
|
||||
{
|
||||
if (toDownload > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void DownloadListWidget::clearItem()
|
||||
{
|
||||
ui->listWidget->clear();
|
||||
@@ -83,6 +93,7 @@ DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QStrin
|
||||
}
|
||||
urList.append(downloadurl);
|
||||
allDownload += 1;
|
||||
toDownload += 1;
|
||||
DownloadItem *di = new DownloadItem;
|
||||
dlist << downloadurl;
|
||||
downloaditemlist << di;
|
||||
@@ -126,8 +137,7 @@ void DownloadListWidget::startRequest(QUrl url, QString fileName)
|
||||
{
|
||||
downloadController = new DownloadController; // 并发下载,在第一次点击下载按钮的时候才会初始化
|
||||
}
|
||||
|
||||
if (downloadController)
|
||||
else
|
||||
{
|
||||
downloadController->disconnect();
|
||||
downloadController->stopDownload();
|
||||
@@ -153,17 +163,33 @@ void DownloadListWidget::httpFinished() // 完成下载
|
||||
|
||||
QtConcurrent::run([=]()
|
||||
{
|
||||
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1)
|
||||
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1) // 安装当前应用,堵塞安装,后面的下载suspend
|
||||
{
|
||||
continue;
|
||||
}
|
||||
toDownload -= 1; // 安装完以后减少待安装数目
|
||||
qDebug() << "Download: 还没有下载的数目:" << toDownload;
|
||||
|
||||
if(toDownload == 0){
|
||||
Application *app = qobject_cast<Application *>(qApp);
|
||||
MainWindow *mainWindow = app->mainWindow();
|
||||
if(mainWindow->isCloseWindowAnimation() == true){
|
||||
qDebug()<< "Download: 后台安装结束,退出程序";
|
||||
qApp->quit();
|
||||
}
|
||||
else{
|
||||
delete app;
|
||||
delete mainWindow;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
downloaditemlist[nowDownload - 1]->free = true;
|
||||
emit downloadFinished();
|
||||
if (nowDownload < allDownload)
|
||||
{
|
||||
// 如果有排队则下载下一个
|
||||
qDebug() << "切换下一个下载...";
|
||||
qDebug() << "Download: 切换下一个下载...";
|
||||
nowDownload += 1;
|
||||
while (downloaditemlist[nowDownload - 1]->close)
|
||||
{
|
||||
|
||||
@@ -22,12 +22,15 @@ public:
|
||||
DownloadItem *addItem(QString name, QString fileName, QString pkgName, const QPixmap icon, QString downloadurl);
|
||||
int nowDownload = 0;
|
||||
int allDownload = 0;
|
||||
int toDownload = 0;
|
||||
QList<DownloadItem *> getDIList();
|
||||
QList<QUrl> getUrlList();
|
||||
void m_move(int x, int y);
|
||||
explicit DownloadListWidget(QWidget *parent = nullptr);
|
||||
~DownloadListWidget() override;
|
||||
|
||||
bool isDownloadInProcess();
|
||||
|
||||
protected:
|
||||
void mouseMoveEvent(QMouseEvent *event) override;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user