From 6d560bf3d355a0d3209bbcccd02a60b0009c317c Mon Sep 17 00:00:00 2001 From: keke <243768648@qq.com> Date: Sat, 18 Mar 2023 22:38:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B8=A6=E4=BE=9D=E8=B5=96=E6=89=93?= =?UTF-8?q?=E5=8C=85=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/appmanagermodel.h | 2 +- src/appmanagerwidget.cpp | 27 +++++++++++++++++++++++---- src/common/appmanagercommon.cpp | 2 +- src/common/appmanagercommon.h | 1 + src/job/appmanagerjob.cpp | 11 +++++++---- src/job/appmanagerjob.h | 2 +- 6 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/appmanagermodel.h b/src/appmanagermodel.h index d6c1d25..f5e55e0 100644 --- a/src/appmanagermodel.h +++ b/src/appmanagermodel.h @@ -53,7 +53,7 @@ Q_SIGNALS: // 通知卸载包 void notifyThreadUninstallPkg(const QString &pkgName); // 通知构建安装包 - void notifyThreadBuildPkg(const AM::AppInfo &info); + void notifyThreadBuildPkg(const AM::AppInfo &info, bool withDepends); // 构建安装包任务完成 void buildPkgTaskFinished(bool successed, const AM::AppInfo &info); // 通知安装oh-my-dde diff --git a/src/appmanagerwidget.cpp b/src/appmanagerwidget.cpp index b7b8d0a..cac4612 100644 --- a/src/appmanagerwidget.cpp +++ b/src/appmanagerwidget.cpp @@ -312,10 +312,18 @@ AppManagerWidget::AppManagerWidget(AppManagerModel *model, QWidget *parent) firstLineBottomLayout->addWidget(getPkgFromSrvBtn); firstLineBottomLayout->addSpacing(10); + // 跳转到应用商店菜单 + QAction *buildPkgAction = new QAction("不包含依赖", this); + buildPkgAction->setCheckable(false); + QAction *buildPkgWithDependsAction = new QAction("包含依赖(实验)", this); + buildPkgWithDependsAction->setCheckable(false); + QMenu *buildPkgMenu = new QMenu(this); + buildPkgMenu->addAction(buildPkgAction); + buildPkgMenu->addAction(buildPkgWithDependsAction); QPushButton *getPkgFromLocalBtn = new QPushButton("离线获取安装包", this); + getPkgFromLocalBtn->setMenu(buildPkgMenu); getPkgFromLocalBtn->setMaximumWidth(170); firstLineBottomLayout->addWidget(getPkgFromLocalBtn); - firstLineBottomLayout->addSpacing(10); // 左置顶 firstLineBottomLayout->addStretch(1); @@ -423,10 +431,21 @@ AppManagerWidget::AppManagerWidget(AppManagerModel *model, QWidget *parent) }); // 离线获取安装包 - connect(getPkgFromLocalBtn, &QPushButton::clicked, this, [this](bool) { + connect(buildPkgMenu, &QMenu::triggered, this, [buildPkgAction, buildPkgWithDependsAction, this](QAction *action) { + bool withDepends = false; + QString msg; + if (action == buildPkgAction) { + withDepends = false; + msg = "是否开始离线获取安装包?"; + } else if (action == buildPkgWithDependsAction) { + withDepends = true; + msg = "是否开始连同依赖一起构建安装包?\n" + "(这种方法不能绝对保证打包程序的功能正常,是一种备用方案,请谨慎使用)"; + } + // 确认窗口 DDialog confirmDlg(this); - confirmDlg.setMessage("是否开始离线获取安装包?"); + confirmDlg.setMessage(msg); // 取消按钮 confirmDlg.addButton("取消", false); @@ -439,7 +458,7 @@ AppManagerWidget::AppManagerWidget(AppManagerModel *model, QWidget *parent) return; } - Q_EMIT this->m_model->notifyThreadBuildPkg(m_showingAppInfo); + Q_EMIT this->m_model->notifyThreadBuildPkg(m_showingAppInfo, withDepends); DDialog *dlg = new DDialog(this); dlg->setCloseButtonVisible(false); QString title = QString("%1安装包构建中...").arg(m_showingAppInfo.pkgName); diff --git a/src/common/appmanagercommon.cpp b/src/common/appmanagercommon.cpp index 8515ef4..d11145a 100644 --- a/src/common/appmanagercommon.cpp +++ b/src/common/appmanagercommon.cpp @@ -49,7 +49,7 @@ AM::PinyinInfo AM::getPinYinInfoFromStr(const QString &words) void AM::popupNormalSysNotify(const QString &summary, const QString &body) { QProcess proc; - proc.startDetached("notify-send", {"-a", "com.github.ccc-app-manager", summary, body}); + proc.startDetached("notify-send", {"-a", MY_PKG_NAME, summary, body}); } // 移除字符串结尾的"0"和"." diff --git a/src/common/appmanagercommon.h b/src/common/appmanagercommon.h index f703fcd..9f25787 100644 --- a/src/common/appmanagercommon.h +++ b/src/common/appmanagercommon.h @@ -8,6 +8,7 @@ #define X_DEEPIN_VENDOR_STR "deepin" // 应用默认图标 #define APP_THEME_ICON_DEFAULT "application-x-executable" +#define MY_PKG_NAME "com.github.ccc-app-manager" // 列表数据角色定义 #define AM_LIST_VIEW_ITEM_DATA_ROLE_PKG_NAME Dtk::ItemDataRole::UserRole + 1 diff --git a/src/job/appmanagerjob.cpp b/src/job/appmanagerjob.cpp index 17b37b5..f0ab98d 100644 --- a/src/job/appmanagerjob.cpp +++ b/src/job/appmanagerjob.cpp @@ -238,7 +238,9 @@ AppManagerJob::AppManagerJob(QObject *parent) const QString &desktopPath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); m_downloadDirPath = QString("%1/downloadedPkg").arg(desktopPath); - m_pkgBuildCacheDirPath = "/tmp/pkg-build-cache"; + m_pkgBuildCacheDirPath = QString("/tmp/%1/%2/pkg-build-cache") + .arg(MY_PKG_NAME) + .arg(QDir::home().dirName()); m_pkgBuildDirPath = QString("%1/pkgBuild").arg(desktopPath); } @@ -439,9 +441,9 @@ void AppManagerJob::onFileDownloadFinished() Q_EMIT pkgFileDownloadFinished(m_downloadingPkgInfo); } -void AppManagerJob::startBuildPkgTask(const AppInfo &info) +void AppManagerJob::startBuildPkgTask(const AppInfo &info, bool withDepends) { - bool successed = buildPkg(info.installedPkgInfo); + bool successed = buildPkg(info.installedPkgInfo, withDepends); Q_EMIT buildPkgTaskFinished(successed, info); } @@ -1137,7 +1139,8 @@ bool AppManagerJob::buildPkg(const PkgInfo &pkgInfo, bool withDepend) return false; } } - if (!pkgBuildCacheDir.mkdir(m_pkgBuildCacheDirPath)) { + + if (!pkgBuildCacheDir.mkpath(m_pkgBuildCacheDirPath)) { qCritical() << Q_FUNC_INFO << m_pkgBuildCacheDirPath << "create failed!"; return false; } diff --git a/src/job/appmanagerjob.h b/src/job/appmanagerjob.h index 90f62ac..d7d3aa8 100644 --- a/src/job/appmanagerjob.h +++ b/src/job/appmanagerjob.h @@ -49,7 +49,7 @@ public Q_SLOTS: void onDownloadProgressChanged(qint64, qint64); void onFileDownloadFinished(); // 开始构建安装包任务 - void startBuildPkgTask(const AM::AppInfo &info); + void startBuildPkgTask(const AM::AppInfo &info, bool withDepends); // 开始搜索任务 void startSearchTask(const QString &text); -- Gitee