Newer
Older
From be14d07c405b49628be6aa0eb450d896ddd3b54f Mon Sep 17 00:00:00 2001
From: Lukas Holecek <hluk@email.cz>
Date: Sun, 15 Nov 2020 19:06:53 +0100
Subject: [PATCH] Support updating Snore notifications
---
src/notifybysnore.cpp | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/src/notifybysnore.cpp b/src/notifybysnore.cpp
--- a/src/notifybysnore.cpp
+++ b/src/notifybysnore.cpp
@@ -60,7 +60,7 @@ NotifyBySnore::NotifyBySnore(QObject *parent)
m_server.listen(QString::number(qHash(qApp->applicationDirPath())));
connect(&m_server, &QLocalServer::newConnection, this, [this]() {
QLocalSocket *responseSocket = m_server.nextPendingConnection();
- connect(responseSocket, &QLocalSocket::readyRead, [this, responseSocket]() {
+ connect(responseSocket, &QLocalSocket::readyRead, this, [this, responseSocket](){
const QByteArray rawNotificationResponse = responseSocket->readAll();
responseSocket->deleteLater();
@@ -169,9 +169,20 @@ void NotifyBySnore::notifyDeferred(KNotification *notification)
// handle the icon for toast notification
const QString iconPath = m_iconDir.path() + QLatin1Char('/') + QString::number(notification->id());
+ const bool deleteNewIcon = !QFile::exists(iconPath);
const bool hasIcon = (notification->pixmap().isNull()) ? qApp->windowIcon().pixmap(1024, 1024).save(iconPath, "PNG") //
: notification->pixmap().save(iconPath, "PNG");
if (hasIcon) {
+ qCDebug(LOG_KNOTIFICATIONS) << "Created temporary icon" << iconPath;
+ if (deleteNewIcon) {
+ connect(notification, &KNotification::destroyed, [iconPath](){
+ if (QFile::remove(iconPath)) {
+ qCDebug(LOG_KNOTIFICATIONS) << "Deleted temporary icon" << iconPath;
+ } else {
+ qCDebug(LOG_KNOTIFICATIONS) << "Failed to delete temporary icon" << iconPath;
+ }
+ });
+ }
snoretoastArgsList << QStringLiteral("-p") << iconPath;
}
@@ -189,19 +200,20 @@ void NotifyBySnore::notifyDeferred(KNotification *notification)
const auto data = snoretoastProcess->readAllStandardOutput();
qCDebug(LOG_KNOTIFICATIONS) << "SnoreToast process stdout:" << snoretoastArgsList << data;
- connect(snoretoastProcess, &QProcess::errorOccurred, this, [this, snoretoastProcess, snoretoastArgsList, iconPath](QProcess::ProcessError error) {
+ QPointer<KNotification> maybeNotification = notification;
+ connect(snoretoastProcess, &QProcess::errorOccurred, this, [this, snoretoastProcess, maybeNotification, snoretoastArgsList, iconPath](QProcess::ProcessError error) {
qCWarning(LOG_KNOTIFICATIONS) << "SnoreToast process errored:" << snoretoastArgsList << error;
snoretoastProcess->deleteLater();
- QFile::remove(iconPath);
+ close(maybeNotification);
connect(snoretoastProcess,
QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this,
- [this, snoretoastProcess, snoretoastArgsList, iconPath](int exitCode, QProcess::ExitStatus exitStatus) {
+ [this, snoretoastProcess, maybeNotification, snoretoastArgsList, iconPath](int exitCode, QProcess::ExitStatus exitStatus) {
qCDebug(LOG_KNOTIFICATIONS) << "SnoreToast process finished:" << snoretoastArgsList;
qCDebug(LOG_KNOTIFICATIONS) << "code:" << exitCode << "status:" << exitStatus;
snoretoastProcess->deleteLater();
- QFile::remove(iconPath);
+ close(maybeNotification);
qCDebug(LOG_KNOTIFICATIONS) << "SnoreToast process starting:" << snoretoastArgsList;
@@ -210,6 +222,9 @@ void NotifyBySnore::notifyDeferred(KNotification *notification)
void NotifyBySnore::close(KNotification *notification)
{
+ if (notification == nullptr)
+ return;
+
qCDebug(LOG_KNOTIFICATIONS) << "Requested to close notification with ID:" << notification->id();
if (m_notifications.constFind(notification->id()) == m_notifications.constEnd()) {
qCWarning(LOG_KNOTIFICATIONS) << "Couldn't find the notification in m_notifications. Nothing to close.";
@@ -228,7 +243,5 @@ void NotifyBySnore::close(KNotification *notification)
void NotifyBySnore::update(KNotification *notification, KNotifyConfig *config)
{
- Q_UNUSED(notification);
- Q_UNUSED(config);
- qCWarning(LOG_KNOTIFICATIONS) << "updating a notification is not supported yet.";
+ notify(notification, config);
}
--
2.30.2