From 18e13e4525e0d7e0422bef93e6b84d0cc93d653b Mon Sep 17 00:00:00 2001
From: zty199 <46324746+zty199@users.noreply.github.com>
Date: Wed, 10 Apr 2024 21:58:48 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BA=94=E7=94=A8?=
 =?UTF-8?q?=E4=BF=A1=E6=81=AF=E9=A1=B5=E9=9D=A2=E5=AE=89=E8=A3=85=E5=86=8D?=
 =?UTF-8?q?=E5=8D=B8=E8=BD=BD=E5=BA=94=E7=94=A8=E5=90=8E=EF=BC=8C=E9=87=8D?=
 =?UTF-8?q?=E6=96=B0=E8=BF=9B=E5=85=A5=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=BA=94?=
 =?UTF-8?q?=E7=94=A8=E4=BB=8D=E7=84=B6=E4=B8=BA=E5=B7=B2=E5=AE=89=E8=A3=85?=
 =?UTF-8?q?=E7=8A=B6=E6=80=81=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

下载管理中存在已卸载应用的下载记录,判断应用状态时认为应用安装完成

Log: 根据下载记录判断应用状态时,若下载管理显示安装完成,额外判断应用是否已安装
---
 src/pages/appintopage.cpp | 37 ++++++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/src/pages/appintopage.cpp b/src/pages/appintopage.cpp
index 1452d8f..e7ea1ec 100644
--- a/src/pages/appintopage.cpp
+++ b/src/pages/appintopage.cpp
@@ -55,7 +55,7 @@ void AppIntoPage::openUrl(const QUrl &url)
         ui->label_2->setText(info["More"].toString());
 
         // 显示 tags
-        #if (DTK_VERSION >= DTK_VERSION_CHECK(5, 15, 0, 0))
+        #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
             QStringList taglist = info["Tags"].toString().split(";", Qt::SkipEmptyParts);
         #else
             QStringList taglist = info["Tags"].toString().split(";", QString::SkipEmptyParts);
@@ -154,7 +154,7 @@ void AppIntoPage::openUrl(const QUrl &url)
 
                 isUpdate.start("dpkg", QStringList() << "--compare-versions" << localVersion << "ge" << info["Version"].toString());
                 isUpdate.waitForFinished(180 * 1000); // 默认超时 3 分钟
-                if (!isUpdate.exitCode())
+                if (isUpdate.exitCode() == 0 && isUpdate.exitStatus() == QProcess::NormalExit)
                 {
                     isUpdated = true;
                 }
@@ -342,10 +342,27 @@ void AppIntoPage::isDownloading(const QUrl &url)
     }
     if (item->download == 3)
     {
-        ui->downloadButton->setEnabled(true);
-        ui->downloadButton->setText(tr("Reinstall"));
-        ui->downloadButton->show();
-        ui->pushButton_3->show();
+        QString packageName = info["Pkgname"].toString();
+        QProcess process;
+        process.start("/opt/durapps/spark-store/bin/store-helper/check-is-installed", {packageName});
+        process.waitForFinished(-1);
+
+        int exitCode = process.exitCode();
+        QProcess::ExitStatus exitStatus = process.exitStatus();
+        process.close();
+
+        if (exitCode == 0 && exitStatus == QProcess::NormalExit)
+        {
+            ui->downloadButton->setEnabled(true);
+            ui->downloadButton->setText(tr("Reinstall"));
+            ui->downloadButton->show();
+            ui->pushButton_3->show();
+        }
+        else
+        {
+            ui->downloadButton->setEnabled(true);
+            ui->downloadButton->setText(tr("Download and Install"));
+        }
     }
 }
 
@@ -490,22 +507,24 @@ void AppIntoPage::on_pushButton_3_clicked()
         QProcess uninstall;
         uninstall.start("pkexec", QStringList() << "apt" << "autopurge" << "-y" << info["Pkgname"].toString().toLower());
         uninstall.waitForFinished(-1);
+        uninstall.close();
 
         QProcess check;
         check.start("dpkg", QStringList() << "-s" << info["Pkgname"].toString().toLower());
-        check.waitForFinished(10*1000);
+        check.waitForFinished(-1);
 
-        if (check.readAllStandardOutput().isEmpty())
+        if (check.exitCode() != 0 || check.exitStatus() != QProcess::NormalExit)
         {
             ui->downloadButton->setText(tr("Download and Install"));
             ui->pushButton_3->hide();
 
-            updatesEnabled();
             Utils::sendNotification("spark-store",tr("Spark Store"),tr("Uninstall succeeded"));
         }
 
         ui->downloadButton->setEnabled(true);
         ui->pushButton_3->setEnabled(true);
+
+        check.close();
     });
 }