diff --git a/appmanagerjob.cpp b/appmanagerjob.cpp index 11a7d8b36e3834c6195449f4f55f1eb5c4a8ecd4..903a3bf69ff52d5cad7b006c2b695043330326fc 100644 --- a/appmanagerjob.cpp +++ b/appmanagerjob.cpp @@ -374,16 +374,18 @@ void AppManagerJob::uninstallPkg(const QString &pkgName) void AppManagerJob::installOhMyDDE() { setRunningStatus(Busy); - bool successed = installLocalPkg(OH_MY_DDE_LOCAL_PKG_PATH); - Q_EMIT installOhMyDDEFinished(successed); + QString err; + bool successed = installLocalPkg(OH_MY_DDE_LOCAL_PKG_PATH, err); + Q_EMIT installOhMyDDEFinished(successed, err); setRunningStatus(Normal); } void AppManagerJob::installProcInfoPlugin() { setRunningStatus(Busy); - bool successed = installLocalPkg(PROC_INFO_PLUGIN_LOCAL_PKG_PATH); - Q_EMIT installProcInfoPluginFinished(successed); + QString err; + bool successed = installLocalPkg(PROC_INFO_PLUGIN_LOCAL_PKG_PATH, err); + Q_EMIT installProcInfoPluginFinished(successed, err); setRunningStatus(Normal); } @@ -1107,7 +1109,7 @@ bool AppManagerJob::buildPkg(const AppInfo &info) return true; } -bool AppManagerJob::installLocalPkg(const QString &path) +bool AppManagerJob::installLocalPkg(const QString &path, QString &err) { QProcess *proc = new QProcess(this); proc->start("pkexec", {"dpkg", "-i", path}); @@ -1116,9 +1118,9 @@ bool AppManagerJob::installLocalPkg(const QString &path) proc->waitForFinished(); proc->waitForReadyRead(); - QString error = proc->readAllStandardError(); - if (!error.isEmpty()) { - qInfo() << Q_FUNC_INFO << QString("install %1 failed! ").arg(path) << error; + err = proc->readAllStandardError(); + if (!err.isEmpty()) { + qInfo() << Q_FUNC_INFO << QString("install %1 failed! ").arg(path) << err; proc->close(); proc->deleteLater(); diff --git a/appmanagerjob.h b/appmanagerjob.h index 60b2aaf7cb9f5cd4a49534e69436b3a8508994ec..6c48a3b5d2e643a26ce8bf97ff66e77bac8863fb 100644 --- a/appmanagerjob.h +++ b/appmanagerjob.h @@ -76,8 +76,8 @@ Q_SIGNALS: void uninstallPkgFinished(const QString &pkgName); // 构建安装包任务完成 void buildPkgTaskFinished(bool successed, const AM::AppInfo &info); - void installOhMyDDEFinished(bool successed); - void installProcInfoPluginFinished(bool successed); + void installOhMyDDEFinished(bool successed, const QString &err); + void installProcInfoPluginFinished(bool successed, const QString &err); // 软件安装变动 void appInstalled(const AM::AppInfo &appInfo); void appUpdated(const AM::AppInfo &appInfo); @@ -110,7 +110,7 @@ private: // 构建安装包任务 bool buildPkg(const AM::AppInfo &info); // 安全本地软件包 - bool installLocalPkg(const QString &path); + bool installLocalPkg(const QString &path, QString &err); private: QMutex m_mutex; diff --git a/appmanagermodel.h b/appmanagermodel.h index dec4ce3951f20337872fb828a4b739fe3ee3eda2..a2b3f343c1d3d35535212720d8c34d8542455a4c 100644 --- a/appmanagermodel.h +++ b/appmanagermodel.h @@ -59,11 +59,11 @@ Q_SIGNALS: // 通知安装oh-my-dde void notifyThreadInstallOhMyDDE(); // 安装oh-my-dde完成 - void installOhMyDDEFinished(bool successed); + void installOhMyDDEFinished(bool successed, const QString &err); // 通知安装proc-info-plugin void notifyThreadInstallProcInfoPlugin(); // 安装proc-info-plugin完成 - void installProcInfoPluginFinished(bool successed); + void installProcInfoPluginFinished(bool successed, const QString &err); // 软件安装变动 void appInstalled(const AM::AppInfo &appInfo); void appUpdated(const AM::AppInfo &appInfo); diff --git a/mainwindow.cpp b/mainwindow.cpp index 54dbca75837891855be1a6cc7b1479f6e9a8eddb..dba4d9b8798aee3aca5063e8e82950fa1e1c2a81 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -114,10 +114,10 @@ MainWindow::MainWindow(QWidget *parent) // 安装 DDialog dlg; dlg.setMessage("是否安装oh-my-dde?"); - dlg.addButton("是", true, DDialog::ButtonType::ButtonRecommend); dlg.addButton("否", false, DDialog::ButtonType::ButtonNormal); + dlg.addButton("是", true, DDialog::ButtonType::ButtonRecommend); int ret = dlg.exec(); - if (0 == ret) { + if (1 == ret) { Q_EMIT m_appManagerModel->notifyThreadInstallOhMyDDE(); } } @@ -131,14 +131,20 @@ MainWindow::MainWindow(QWidget *parent) // 安装 DDialog dlg; dlg.setMessage("是否安装dde进程信息插件?"); - dlg.addButton("是", true, DDialog::ButtonType::ButtonRecommend); dlg.addButton("否", false, DDialog::ButtonType::ButtonNormal); + dlg.addButton("是", true, DDialog::ButtonType::ButtonRecommend); int ret = dlg.exec(); - if (0 == ret) { + if (1 == ret) { Q_EMIT m_appManagerModel->notifyThreadInstallProcInfoPlugin(); } } }); + + + // 安装完成时 + connect(m_appManagerModel, &AppManagerModel::installOhMyDDEFinished, this, &MainWindow::onPkgInstallFinished); + connect(m_appManagerModel, &AppManagerModel::installProcInfoPluginFinished, this, &MainWindow::onPkgInstallFinished); + // 下载失败 connect(m_appManagerModel, &AppManagerModel::pkgFileDownloadFailed, this, [this](const PkgInfo &info) { qInfo() << Q_FUNC_INFO << info.downloadUrl << "download failed!"; @@ -184,6 +190,23 @@ void MainWindow::closeEvent(QCloseEvent *event) qApp->exit(); } +void MainWindow::onPkgInstallFinished(bool successed, const QString &err) +{ + qInfo() << Q_FUNC_INFO << successed << err; + if (successed) { + return; + } + + DDialog *dlg = new DDialog(this); + QTextEdit *errEdit = new QTextEdit(this); + errEdit->setText(err); + errEdit->setReadOnly(true); + dlg->addContent(errEdit); + + dlg->exec(); + dlg->deleteLater(); +} + void MainWindow::updateUIByRunningStatus() { bool enable = (RunningStatus::Normal == m_appManagerModel->getRunningStatus()); diff --git a/mainwindow.h b/mainwindow.h index 161955687e3d5926e6eb94587c10cfbceba92d4b..6a4ba94417be710829b56953f15ba63d9d5fdba4 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -21,6 +21,10 @@ protected: virtual void resizeEvent(QResizeEvent *event) override; virtual void closeEvent(QCloseEvent *event) override; +private Q_SLOTS: + // 安装包安装完成时 + void onPkgInstallFinished(bool successed, const QString &err); + private: void updateUIByRunningStatus();