feat: filter service and scope by subState and app
prefix
Signed-off-by: ComixHe <heyuming@deepin.org>
This commit is contained in:
parent
b0dd943e1d
commit
26a0b67157
@ -57,6 +57,10 @@ ApplicationManager1Service::ApplicationManager1Service(std::unique_ptr<Identifie
|
|||||||
|
|
||||||
void ApplicationManager1Service::addInstanceToApplication(const QString &unitName, const QDBusObjectPath &systemdUnitPath)
|
void ApplicationManager1Service::addInstanceToApplication(const QString &unitName, const QDBusObjectPath &systemdUnitPath)
|
||||||
{
|
{
|
||||||
|
if (!isApplication(systemdUnitPath)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto pair = processUnitName(unitName);
|
auto pair = processUnitName(unitName);
|
||||||
auto appId = pair.first;
|
auto appId = pair.first;
|
||||||
auto instanceId = pair.second;
|
auto instanceId = pair.second;
|
||||||
@ -78,12 +82,14 @@ void ApplicationManager1Service::addInstanceToApplication(const QString &unitNam
|
|||||||
if (!(*appIt)->addOneInstance(instanceId, applicationPath, systemdUnitPath.path())) [[likely]] {
|
if (!(*appIt)->addOneInstance(instanceId, applicationPath, systemdUnitPath.path())) [[likely]] {
|
||||||
qCritical() << "add Instance failed:" << applicationPath << unitName << systemdUnitPath.path();
|
qCritical() << "add Instance failed:" << applicationPath << unitName << systemdUnitPath.path();
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationManager1Service::removeInstanceFromApplication(const QString &unitName, const QDBusObjectPath &systemdUnitPath)
|
void ApplicationManager1Service::removeInstanceFromApplication(const QString &unitName, const QDBusObjectPath &systemdUnitPath)
|
||||||
{
|
{
|
||||||
|
if (!isApplication(systemdUnitPath)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto pair = processUnitName(unitName);
|
auto pair = processUnitName(unitName);
|
||||||
auto appId = pair.first;
|
auto appId = pair.first;
|
||||||
auto instanceId = pair.second;
|
auto instanceId = pair.second;
|
||||||
@ -145,10 +151,14 @@ void ApplicationManager1Service::scanInstances() noexcept
|
|||||||
QList<SystemdUnitDBusMessage> units;
|
QList<SystemdUnitDBusMessage> units;
|
||||||
v.value<QDBusArgument>() >> units;
|
v.value<QDBusArgument>() >> units;
|
||||||
for (const auto &unit : units) {
|
for (const auto &unit : units) {
|
||||||
// FIXME(black_desk): Should check this unit is active or not.
|
if (!isApplication(unit.objectPath)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (unit.subState == "running") {
|
||||||
this->addInstanceToApplication(unit.name, unit.objectPath);
|
this->addInstanceToApplication(unit.name, unit.objectPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QList<QDBusObjectPath> ApplicationManager1Service::list() const
|
QList<QDBusObjectPath> ApplicationManager1Service::list() const
|
||||||
{
|
{
|
||||||
|
13
src/global.h
13
src/global.h
@ -39,6 +39,7 @@ Q_DECLARE_METATYPE(PropMap)
|
|||||||
struct SystemdUnitDBusMessage
|
struct SystemdUnitDBusMessage
|
||||||
{
|
{
|
||||||
QString name;
|
QString name;
|
||||||
|
QString subState;
|
||||||
QDBusObjectPath objectPath;
|
QDBusObjectPath objectPath;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ inline const QDBusArgument &operator>>(const QDBusArgument &argument, QList<Syst
|
|||||||
uint32_t _uint;
|
uint32_t _uint;
|
||||||
QDBusObjectPath _path;
|
QDBusObjectPath _path;
|
||||||
SystemdUnitDBusMessage unit;
|
SystemdUnitDBusMessage unit;
|
||||||
argument >> unit.name >> _str >> _str >> _str >> _str >> _str >> unit.objectPath >> _uint >> _str >> _path;
|
argument >> unit.name >> _str >> _str >> _str >> unit.subState >> _str >> unit.objectPath >> _uint >> _str >> _path;
|
||||||
units.push_back(unit);
|
units.push_back(unit);
|
||||||
argument.endStructure();
|
argument.endStructure();
|
||||||
}
|
}
|
||||||
@ -421,9 +422,13 @@ inline QStringList getAutoStartDirs()
|
|||||||
return XDGConfigDirs;
|
return XDGConfigDirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool isApplication(const QDBusObjectPath &path)
|
||||||
|
{
|
||||||
|
return path.path().split('/').last().startsWith("app");
|
||||||
|
}
|
||||||
|
|
||||||
inline QPair<QString, QString> processUnitName(const QString &unitName)
|
inline QPair<QString, QString> processUnitName(const QString &unitName)
|
||||||
{
|
{
|
||||||
// FIXME: rewrite, using regexp.
|
|
||||||
QString instanceId;
|
QString instanceId;
|
||||||
QString applicationId;
|
QString applicationId;
|
||||||
|
|
||||||
@ -443,10 +448,6 @@ inline QPair<QString, QString> processUnitName(const QString &unitName)
|
|||||||
auto app = unitName.sliced(0, lastDotIndex);
|
auto app = unitName.sliced(0, lastDotIndex);
|
||||||
|
|
||||||
auto components = app.split('-');
|
auto components = app.split('-');
|
||||||
if (components.size() < 2) {
|
|
||||||
qDebug() << unitName << "is not a xdg application ignore";
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
instanceId = components.takeLast();
|
instanceId = components.takeLast();
|
||||||
applicationId = components.takeLast();
|
applicationId = components.takeLast();
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user