diff --git a/src/appmanagermodel.h b/src/appmanagermodel.h index d6c1d254f64ccb38e736d623d46c9bd9f634de47..f5e55e0d11e52777dd651c1125efff4aa896e340 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 b7b8d0a3135c973c36322daed4edecc73c2b7c19..cac4612360882abe9dcb6a2632cbd6db2d145200 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 8515ef4c378821a86d1a29635a9fcb74ab530d49..d11145ae2cf1e4d64f214108c39acccb7a18a681 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 f703fcdc7d15ecd720c09fa8fd96cee90dc4b4b7..9f257876a62254656778205fa3b1b44eb4171386 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 17b37b5449e7e98b783ee8c64b2192ca0ef27a64..f0ab98d4e6e325b6b3977acc177b884eb68e0fe6 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 90f62ac6b5bab2219f77877cb479f12ca76aade8..d7d3aa82cd43d68f24f8eb26e801701690151770 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);