From 6e80843b7f9cf988df87b91953fdf84299dc1ab0 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Sun, 18 Jul 2021 16:31:42 +0200 Subject: [PATCH] [Notifications] Also read .flatpak-info for identifying an application Ensures we can properly map Flatpak'd apps to the correct service. --- libnotificationmanager/utils.cpp | 43 +++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/libnotificationmanager/utils.cpp b/libnotificationmanager/utils.cpp index 7d2191223..9142c22fd 100644 --- a/libnotificationmanager/utils.cpp +++ b/libnotificationmanager/utils.cpp @@ -14,7 +14,9 @@ #include #include #include +#include #include +#include #include #include @@ -62,26 +64,37 @@ QString Utils::processNameFromPid(uint pid) return processInfo.name(); } -QString Utils::desktopEntryFromPid(uint pid) +static QString desktopFileHintFromPid(uint pid) { - QFile environFile(QStringLiteral("/proc/%1/environ").arg(QString::number(pid))); - if (!environFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + const QString flatpakInfoPath = QStringLiteral("/proc/%1/root/.flatpak-info").arg(QString::number(pid)); + if (QFileInfo::exists(flatpakInfoPath)) { + QSettings flatpakInfo(flatpakInfoPath, QSettings::IniFormat); + + const QString name = flatpakInfo.value("Application/name").toString(); + if (!name.isEmpty()) { + return name; + } + + // If it's a flatpak, can't be a snap, bail out. return QString(); } - const QByteArray bamfDesktopFileHint = QByteArrayLiteral("BAMF_DESKTOP_FILE_HINT"); - - const auto lines = environFile.readAll().split('\0'); - for (const QByteArray &line : lines) { - const int equalsIdx = line.indexOf('='); - if (equalsIdx <= 0) { - continue; - } + QFile environFile(QStringLiteral("/proc/%1/environ").arg(QString::number(pid))); + if (environFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + const QByteArray bamfDesktopFileHint = QByteArrayLiteral("BAMF_DESKTOP_FILE_HINT"); + + const auto lines = environFile.readAll().split('\0'); + for (const QByteArray &line : lines) { + const int equalsIdx = line.indexOf('='); + if (equalsIdx <= 0) { + continue; + } - const QByteArray key = line.left(equalsIdx); - if (key == bamfDesktopFileHint) { - const QByteArray value = line.mid(equalsIdx + 1); - return value; + const QByteArray key = line.left(equalsIdx); + if (key == bamfDesktopFileHint) { + const QByteArray value = line.mid(equalsIdx + 1); + return value; + } } }