From c2b047fdc9850dac144efb71af5f79d32e2d4975 Mon Sep 17 00:00:00 2001 From: iaom Date: Tue, 18 Apr 2023 10:52:18 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=9F=A5=E8=AE=BE=E7=BD=AE=E6=8E=92?= =?UTF-8?q?=E9=99=A4/etc/xdg/autostart=E7=9B=AE=E5=BD=95=E4=B8=8B=E7=9A=84?= =?UTF-8?q?desktop=E6=96=87=E4=BB=B6=EF=BC=9B=20=E5=A2=9E=E5=8A=A0desktop?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E8=BD=AC=E5=85=A8=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: iaom --- .../notification-settings/settings-manager.cpp | 14 ++++++++++++-- libukui-notification/utils.cpp | 11 ++++++++++- libukui-notification/utils.h | 1 + .../notification-server-application.cpp | 2 +- notification-server/server.cpp | 11 ++++++++--- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/libukui-notification/notification-settings/settings-manager.cpp b/libukui-notification/notification-settings/settings-manager.cpp index 8f4e4ca..a991777 100644 --- a/libukui-notification/notification-settings/settings-manager.cpp +++ b/libukui-notification/notification-settings/settings-manager.cpp @@ -159,7 +159,9 @@ void SettingsManagerPrivate::updateSettingsFile() QStringList SettingsManagerPrivate::getAppInfo() { - return m_applicationInfo->getInfo(UkuiSearch::ApplicationProperties{}).keys(); + + return m_applicationInfo->getInfo(UkuiSearch::ApplicationProperties{}, + UkuiSearch::ApplicationPropertyMap{{UkuiSearch::ApplicationProperty::AutoStart, 0}}).keys(); } void SettingsManagerPrivate::initSettingsData(QJsonObject &data) @@ -185,9 +187,17 @@ void SettingsManagerPrivate::initSettingsData(QJsonObject &data) void SettingsManagerPrivate::desktopFileAdd(const QStringList &data) { QJsonObject applicationsSettings = m_settingsData.value(QStringLiteral("Applications")).toObject(); + bool needUpdate = false; for (const QString &desktopPath : data) { - applicationsSettings.insert(desktopPath, m_applicationDefaultSettings); + if(m_applicationInfo->getInfo(desktopPath, UkuiSearch::ApplicationProperty::AutoStart).toInt() == 0) { + applicationsSettings.insert(desktopPath, m_applicationDefaultSettings); + needUpdate = true; + } } + if(!needUpdate) { + return; + } + m_settingsData.insert(QStringLiteral("Applications"), applicationsSettings); QLockFile lockFile(SETTINGS_FILE_PATH + QStringLiteral("ukui-notification-settings.json.lock")); diff --git a/libukui-notification/utils.cpp b/libukui-notification/utils.cpp index 13acda8..73bada9 100644 --- a/libukui-notification/utils.cpp +++ b/libukui-notification/utils.cpp @@ -23,14 +23,16 @@ #include #include using namespace UkuiNotification; +static UkuiSearch::ApplicationInfo s_applicationInfo; QString Utils::desktopEntryFromPid(uint pid) { QString desktop; - if(UkuiSearch::ApplicationInfo().tranPidToDesktopFp(pid, desktop)) { + if(s_applicationInfo.tranPidToDesktopFp(pid, desktop)) { return desktop; } return {}; } + QString Utils::displayFromPid(uint pid) { QFile environFile(QStringLiteral("/proc/%1/environ").arg(QString::number(pid))); @@ -50,4 +52,11 @@ QString Utils::displayFromPid(uint pid) } } return {}; +} + +QString Utils::desktopEntryFromName(const QString& desktopFileName) +{ + QString desktopFilePathName; + s_applicationInfo.desktopFilePathFromName(desktopFileName, desktopFilePathName); + return desktopFilePathName; } \ No newline at end of file diff --git a/libukui-notification/utils.h b/libukui-notification/utils.h index a03d5f7..d248884 100644 --- a/libukui-notification/utils.h +++ b/libukui-notification/utils.h @@ -24,6 +24,7 @@ namespace UkuiNotification { namespace Utils { QString desktopEntryFromPid(uint pid); QString displayFromPid(uint pid); + QString desktopEntryFromName(const QString& desktopFileName); } } #endif //UKUI_NOTIFICATION_UTILS_H diff --git a/notification-server/notification-server-application.cpp b/notification-server/notification-server-application.cpp index c923e18..1ee2ed1 100644 --- a/notification-server/notification-server-application.cpp +++ b/notification-server/notification-server-application.cpp @@ -34,7 +34,7 @@ NotificationServerApplication::NotificationServerApplication(int &argc, char **a }); Server::self().init(); } - parseCmd(this->arguments().join(" ").toUtf8(), !isRunning()); + parseCmd(arguments().join(" ").toUtf8(), !isRunning()); } NotificationServerApplication::~NotificationServerApplication() diff --git a/notification-server/server.cpp b/notification-server/server.cpp index 0947c14..f1580cc 100644 --- a/notification-server/server.cpp +++ b/notification-server/server.cpp @@ -67,10 +67,15 @@ uint ServerPrivate::Notify(const QString &app_name, uint replaces_id, const QStr if(newHints.value(QStringLiteral("x-ukui-display")).toString().isEmpty() && pid > 0) { newHints.insert(QStringLiteral("x-ukui-display"), UkuiNotification::Utils::displayFromPid(pid)); } - //todo 如果desktop-entry只有文件名,需要获取全路径 - if(newHints.value(QStringLiteral("desktop-entry")).toString().isEmpty() && pid > 0) { - newHints.insert(QStringLiteral("desktop-entry"), UkuiNotification::Utils::desktopEntryFromPid(pid)); + //如果desktop-entry只有文件名,需要获取全路径 + QString desktopEntry = newHints.value(QStringLiteral("desktop-entry")).toString(); + if(!desktopEntry.isEmpty()) { + desktopEntry = UkuiNotification::Utils::desktopEntryFromName(desktopEntry); } + if(desktopEntry.isEmpty() && pid > 0) { + desktopEntry = UkuiNotification::Utils::desktopEntryFromPid(pid); + } + newHints.insert(QStringLiteral("desktop-entry"), desktopEntry); qDebug() << "New message received:" << app_name << id << app_icon << summary << body << actions << hints << timeout << "new hints" << newHints;