diff --git a/src/appmanagermodel.cpp b/src/appmanagermodel.cpp index ff6e6abb739f70c3139943678ce4901a7965b1dd..e3d6cb25a623f7113900f77e8fdcbd909d6f5329 100644 --- a/src/appmanagermodel.cpp +++ b/src/appmanagermodel.cpp @@ -224,6 +224,24 @@ void AppManagerModel::startDetachedDesktopExec(const QString &exec) proc.close(); } +void AppManagerModel::showFileItemInFileManager(const QString &urlPath) +{ + if (DSysInfo::isDeepin()) { + QProcess proc; + proc.startDetached("dde-file-manager", {"-n", "--show-item", urlPath}); + proc.close(); + return; + } + + QDBusInterface dbusIface("org.freedesktop.FileManager1" + , "/org/freedesktop/FileManager1" + , "org.freedesktop.FileManager1" + , QDBusConnection::sessionBus()); + if (dbusIface.isValid()) { + dbusIface.call("ShowItems", QStringList{urlPath}, ""); + } +} + void AppManagerModel::onAppInstalled(const AppInfo &appInfo) { popupNormalSysNotify("ccc-app-manager", QString("软件包 %1 已安装").arg(appInfo.pkgName)); diff --git a/src/appmanagermodel.h b/src/appmanagermodel.h index f5e55e0d11e52777dd651c1125efff4aa896e340..f10949d3c677b0c590be60632b711ca96861a838 100644 --- a/src/appmanagermodel.h +++ b/src/appmanagermodel.h @@ -3,8 +3,13 @@ #include "common/appmanagercommon.h" #include "job/appmanagerjob.h" +#include + #include #include +#include + +DCORE_USE_NAMESPACE class QStandardItemModel; @@ -38,6 +43,8 @@ public: // 运行desktop执行命令 void startDetachedDesktopExec(const QString &exec); + void showFileItemInFileManager(const QString &urlPath); + Q_SIGNALS: void runningStatusChanged(RunningStatus status); diff --git a/src/common/appmanagercommon.h b/src/common/appmanagercommon.h index eb6b49531bbba8e1ef7411ceabb911c5eb8b20da..7caa491a388d1e9f6f7874669cb272c2ad6bd10a 100644 --- a/src/common/appmanagercommon.h +++ b/src/common/appmanagercommon.h @@ -3,6 +3,7 @@ #include #include +#include #define ONLY_SHOW_IN_VALUE_DEEPIN "Deepin" #define X_DEEPIN_VENDOR_STR "deepin" @@ -27,6 +28,9 @@ // 时间格式化字符串 #define DATE_TIME_FORMAT_STR "yyyy-MM-dd HH:mm:ss.zzz" +// 包名格式化字符串 +#define PKG_NAME_FORMAT_STR "%1_%2_%3.deb" + namespace AM { // 运行状态 enum RunningStatus { diff --git a/src/dlg/pkgdownloaddlg.cpp b/src/dlg/pkgdownloaddlg.cpp index 681e8fb05406a993119f84bc3e9ba30311520985..6243b50c37209ca5cd98e8b2b151e96ae6de9598 100644 --- a/src/dlg/pkgdownloaddlg.cpp +++ b/src/dlg/pkgdownloaddlg.cpp @@ -231,7 +231,15 @@ void PkgDownloadDlg::initConnection() // 打开目录 connect(m_openDirBtn, &QPushButton::clicked, this, [this](bool) { - QDesktopServices::openUrl(m_model->getDownloadDirPath()); + QString fileName = QString(PKG_NAME_FORMAT_STR) + .arg(m_selectedPkgInfo.pkgName) + .arg(m_selectedPkgInfo.version) + .arg(m_selectedPkgInfo.arch); + + QString path = QString("%1/%2") + .arg(m_model->getDownloadDirPath()) + .arg(fileName); + m_model->showFileItemInFileManager(path); }); connect(m_model, &AppManagerModel::pkgFileDownloadProgressChanged, this, &PkgDownloadDlg::onFileDownloadProgressChanged); diff --git a/src/job/appmanagerjob.cpp b/src/job/appmanagerjob.cpp index 79a4e7b927e4db041e4f9608ef9c4595d70e7bed..7e95fceb5cbb3602a3f690fea930b5ee15c7b05e 100644 --- a/src/job/appmanagerjob.cpp +++ b/src/job/appmanagerjob.cpp @@ -378,7 +378,7 @@ void AppManagerJob::downloadFile(const QString &url) qint64 endOffset = fileSize; // 创建下载路径 - QString fileName = QString("%1_%2_%3.deb") + QString fileName = QString(PKG_NAME_FORMAT_STR) .arg(m_downloadingPkgInfo.pkgName) .arg(m_downloadingPkgInfo.version) .arg(m_downloadingPkgInfo.arch);