Skip to content

Commit

Permalink
feat: [Dependence] Added the ability to view details
Browse files Browse the repository at this point in the history
as title

Log: view installtion details
  • Loading branch information
Kakueeen authored and deepin-mozart committed Aug 5, 2024
1 parent e416b16 commit 80c8786
Showing 1 changed file with 57 additions and 5 deletions.
62 changes: 57 additions & 5 deletions src/plugins/core/depend/dependencemanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,38 @@

#include "dependencemanager.h"
#include "notify/notificationmanager.h"
#include "uicontroller/controller.h"

#include "base/baseitemdelegate.h"

#include <DDialog>
#include <DLabel>

#include <QListView>
#include <QStringListModel>
#include <QMap>
#include <QTimer>
#include <QDebug>
#include <QMutexLocker>
#include <QtConcurrent>
#include <QVBoxLayout>

#include <functional>

const char CancelActionID[] { "cancel" };
const char ViewDetails[] { "view_details" };
const char InstallActionID[] { "install_default" };

DWIDGET_USE_NAMESPACE

class DependenceManagerPrivate : public QObject
{
public:
void init();
void notify();
void installHander(const QString &actId, const InstallInfo &info);
void handleActionInvoke(const QString &actId, const InstallInfo &info);
void install(const InstallInfo &info);
void showDetails(const InstallInfo &info);
void checkInstalled(const QString &plugin, const QString &name, const QStringList &packageList);

public:
Expand All @@ -47,29 +61,67 @@ void DependenceManagerPrivate::notify()
notifyTimer.start();

QStringList actionList { CancelActionID, DependenceManager::tr("Cancel"),
ViewDetails, DependenceManager::tr("View Details"),
InstallActionID, DependenceManager::tr("Install") };

QMutexLocker lk(&mutex);
while (!infoList.isEmpty()) {
const auto &info = infoList.takeFirst();
auto cb = std::bind(&DependenceManagerPrivate::installHander, this, _1, info);
auto cb = std::bind(&DependenceManagerPrivate::handleActionInvoke, this, _1, info);
QString msg = DependenceManager::tr("Request to install some dependency packages. "
"Do you want to install them?");
NotificationManager::instance()->notify(0, info.plugin, msg, actionList, cb);
}
}

void DependenceManagerPrivate::installHander(const QString &actId, const InstallInfo &info)
void DependenceManagerPrivate::handleActionInvoke(const QString &actId, const InstallInfo &info)
{
if (actId != InstallActionID)
return;
if (actId == InstallActionID)
install(info);
else if (actId == ViewDetails)
showDetails(info);
}

void DependenceManagerPrivate::install(const InstallInfo &info)
{
if (!installerMap.contains(info.installer))
return;

installerMap[info.installer]->install(info);
}

void DependenceManagerPrivate::showDetails(const InstallInfo &info)
{
DDialog dlg(Controller::instance()->mainWindow());
dlg.setIcon(QIcon::fromTheme("ide"));
dlg.setWindowTitle(DependenceManager::tr("Installation Details"));
dlg.addButton(DependenceManager::tr("Cancel", "button"));
dlg.addButton(DependenceManager::tr("Install", "button"), true, DDialog::ButtonRecommend);

QWidget *widget = new QWidget(&dlg);
QVBoxLayout *layout = new QVBoxLayout(widget);
layout->setContentsMargins(0, 0, 0, 0);

DLabel *label = new DLabel(DependenceManager::tr("Installation package list:"));
label->setWordWrap(true);

QListView *view = new QListView(&dlg);
QStringListModel *model = new QStringListModel(view);
model->setStringList(info.packageList);
view->setModel(model);
view->setEditTriggers(QListView::NoEditTriggers);
view->setFrameShape(QFrame::NoFrame);
view->setItemDelegate(new BaseItemDelegate(view));
view->setSizeAdjustPolicy(QListView::AdjustToContents);

layout->addWidget(label);
layout->addWidget(view, 1);
dlg.addContent(widget);
int code = dlg.exec();
if (code == 1)
install(info);
}

void DependenceManagerPrivate::checkInstalled(const QString &plugin, const QString &name, const QStringList &packageList)
{
QStringList list;
Expand Down

0 comments on commit 80c8786

Please sign in to comment.