From 6a95a975991c6e619ec27557d6e986ab781ab534 Mon Sep 17 00:00:00 2001 From: ComixHe Date: Tue, 12 Sep 2023 09:58:14 +0800 Subject: [PATCH] refact: use graphical-session.target's InvocationID to determine autostart Signed-off-by: ComixHe --- src/dbus/applicationmanager1service.cpp | 26 +++++++++++++++---------- src/global.h | 22 +++++++++++++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/dbus/applicationmanager1service.cpp b/src/dbus/applicationmanager1service.cpp index cfee1f1..024c2fa 100644 --- a/src/dbus/applicationmanager1service.cpp +++ b/src/dbus/applicationmanager1service.cpp @@ -64,6 +64,10 @@ ApplicationManager1Service::ApplicationManager1Service(std::unique_ptr #include #include +#include #include #include #include @@ -484,4 +485,25 @@ inline FileTimeInfo getFileTimeInfo(const QFileInfo &file) return {mtime, ctime, atime}; } +inline QByteArray getCurrentSessionId() +{ + constexpr auto graphicalTarget = u8"graphical-session.target"; + + auto msg = QDBusMessage::createMethodCall("org.freedesktop.systemd1", + "/org/freedesktop/systemd1/unit/" + escapeToObjectPath(graphicalTarget), + "org.freedesktop.DBus.Properties", + "Get"); + msg << QString{"org.freedesktop.systemd1.Unit"}; + msg << QString{"InvocationID"}; + auto bus = QDBusConnection::sessionBus(); + auto ret = bus.call(msg); + if (ret.type() != QDBusMessage::ReplyMessage) { + qWarning() << "get graphical session Id failed:" << ret.errorMessage(); + return {}; + } + + auto id = ret.arguments().first(); + return id.value().variant().toByteArray(); +} + #endif