2023-08-11 10:12:46 +08:00
|
|
|
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
|
|
|
|
|
|
#include <QCoreApplication>
|
|
|
|
#include <QDBusInterface>
|
|
|
|
#include <QDBusConnection>
|
|
|
|
#include <QVariantMap>
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
|
|
class Demo : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
Demo()
|
|
|
|
: ApplicationManager(u8"org.deepin.dde.ApplicationManager1",
|
|
|
|
u8"/org/deepin/dde/ApplicationManager1",
|
|
|
|
u8"org.desktopspec.ApplicationManager1")
|
|
|
|
, JobManager(u8"org.deepin.dde.ApplicationManager1",
|
|
|
|
u8"/org/deepin/dde/ApplicationManager1/JobManager1",
|
|
|
|
u8"org.desktopspec.JobManager1")
|
|
|
|
{
|
|
|
|
auto con = JobManager.connection();
|
|
|
|
if (!con.connect(JobManager.service(),
|
|
|
|
JobManager.path(),
|
|
|
|
JobManager.interface(),
|
|
|
|
u8"JobNew",
|
|
|
|
this,
|
2023-08-14 10:50:19 +08:00
|
|
|
SLOT(jobNewForward(QDBusObjectPath, QDBusObjectPath)))) {
|
2023-08-21 16:02:26 +08:00
|
|
|
qFatal("connect JobNew failed.");
|
2023-08-11 10:12:46 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!con.connect(JobManager.service(),
|
|
|
|
JobManager.path(),
|
|
|
|
JobManager.interface(),
|
|
|
|
u8"JobRemoved",
|
|
|
|
this,
|
2023-08-14 10:50:19 +08:00
|
|
|
SLOT(jobRemovedForward(QDBusObjectPath, QString, QVariantList)))) {
|
2023-08-21 16:02:26 +08:00
|
|
|
qFatal("connect JobNew failed.");
|
2023-08-11 10:12:46 +08:00
|
|
|
}
|
2023-08-14 10:50:19 +08:00
|
|
|
|
|
|
|
connect(this, &Demo::applicationLaunched, [](QList<QString> apps) {
|
|
|
|
qInfo() << "application launched:";
|
|
|
|
for (const auto &app : apps) {
|
|
|
|
qInfo() << app;
|
|
|
|
};
|
|
|
|
});
|
2023-08-11 10:12:46 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void launchApp(const QString &appId)
|
|
|
|
{
|
2023-08-14 10:50:19 +08:00
|
|
|
connect(this, &Demo::amJobRemoved, [this](QDBusObjectPath job, QString status, QVariantList result) {
|
|
|
|
if (myJob == job) {
|
|
|
|
qInfo() << "my job" << status << result;
|
|
|
|
}
|
|
|
|
QList<QString> apps;
|
|
|
|
for (const auto &app : result) {
|
|
|
|
apps.append(app.value<QString>());
|
|
|
|
}
|
|
|
|
emit applicationLaunched(apps);
|
|
|
|
});
|
|
|
|
|
|
|
|
auto reply =
|
2023-08-11 10:12:46 +08:00
|
|
|
ApplicationManager.callWithArgumentList(QDBus::Block, "Launch", {appId, QString{""}, QStringList{}, QVariantMap{}});
|
2023-08-14 10:50:19 +08:00
|
|
|
|
|
|
|
if (reply.type() == QDBusMessage::ReplyMessage) {
|
|
|
|
myJob = reply.arguments().first().value<QDBusObjectPath>();
|
|
|
|
}
|
2023-08-11 10:12:46 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public Q_SLOTS:
|
2023-08-14 10:50:19 +08:00
|
|
|
void jobNewForward(QDBusObjectPath job, QDBusObjectPath source)
|
2023-08-11 10:12:46 +08:00
|
|
|
{
|
|
|
|
qInfo() << "Job New ["
|
|
|
|
<< "Job Path:" << job.path() << source.path() << "add this job].";
|
2023-08-14 10:50:19 +08:00
|
|
|
emit amJobNew(job, source);
|
2023-08-11 10:12:46 +08:00
|
|
|
}
|
|
|
|
|
2023-08-14 10:50:19 +08:00
|
|
|
void jobRemovedForward(QDBusObjectPath job, QString status, QVariantList result)
|
2023-08-11 10:12:46 +08:00
|
|
|
{
|
|
|
|
qInfo() << "Job Removed ["
|
|
|
|
<< "Job Path:" << job.path() << "Job Status:" << status << "result:" << result;
|
2023-08-14 10:50:19 +08:00
|
|
|
emit amJobRemoved(job, status, result);
|
2023-08-11 10:12:46 +08:00
|
|
|
}
|
|
|
|
|
2023-08-14 10:50:19 +08:00
|
|
|
Q_SIGNALS:
|
|
|
|
void amJobNew(QDBusObjectPath job, QDBusObjectPath source);
|
|
|
|
void amJobRemoved(QDBusObjectPath job, QString status, QVariantList result);
|
|
|
|
void applicationLaunched(QList<QString> apps);
|
|
|
|
|
2023-08-11 10:12:46 +08:00
|
|
|
private:
|
|
|
|
QDBusInterface ApplicationManager;
|
|
|
|
QDBusInterface JobManager;
|
2023-08-14 10:50:19 +08:00
|
|
|
QDBusObjectPath myJob;
|
2023-08-11 10:12:46 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
QCoreApplication app{argc, argv};
|
|
|
|
Demo demo;
|
|
|
|
demo.launchApp("google-chrome");
|
|
|
|
return QCoreApplication::exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "main.moc"
|