From 150fd4364e68f953df0adbadfb8f546d7976b032 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20J=C3=BCrgens?= Date: Fri, 4 Nov 2022 23:16:49 +0100 Subject: [PATCH] add `--notify-send` option --- src/main.cpp | 5 ++++- src/mainwindow.cpp | 48 ++++++++++++++++++++++++++++++---------------- src/mainwindow.h | 8 +++++++- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index e2cd74b..df1fec8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,6 +30,9 @@ int main(int argc, char *argv[]) { QCommandLineOption degubOption("remote-debugging", "Open Chromium Remote Debugging on port 9222"); parser.addOption(degubOption); + QCommandLineOption notifySendOption( + "notify-send", "Use notify-send instead of QT/KF5 notifications"); + parser.addOption(notifySendOption); parser.process(app); @@ -46,7 +49,7 @@ int main(int argc, char *argv[]) { "--remote-debugging-port=9222 " + qgetenv("QTWEBENGINE_CHROMIUM_FLAGS")); - MainWindow w; + MainWindow w(parser.isSet(notifySendOption)); w.show(); return app.exec(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index bcf8f57..c43582a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -24,9 +24,11 @@ MainWindow *MainWindow::m_instance = nullptr; -MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { +MainWindow::MainWindow(bool useNotifySend, QWidget *parent) + : QMainWindow(parent) { assert(MainWindow::m_instance == nullptr); MainWindow::m_instance = this; + m_useNotifySend = useNotifySend; setupWebView(); resize(1000, 700); showMaximized(); @@ -40,22 +42,34 @@ void MainWindow::setupWebView() { m_webView = new QWebEngineView(this); m_webView->setPage(page); -#ifdef KNOTIFICATIONS - QWebEngineProfile::defaultProfile()->setNotificationPresenter( - [&](std::unique_ptr notificationInfo) { - KNotification *notification = new KNotification("discordNotification"); - notification->setTitle(notificationInfo->title()); - notification->setText(notificationInfo->message()); - notification->setPixmap(QPixmap::fromImage(notificationInfo->icon())); - notification->setDefaultAction("View"); - connect(notification, &KNotification::defaultActivated, - [&, notificationInfo = std::move(notificationInfo)]() { - notificationInfo->click(); - activateWindow(); - }); - notification->sendEvent(); - }); -#endif + if (m_useKF5Notifications || m_useNotifySend) + QWebEngineProfile::defaultProfile()->setNotificationPresenter( + [&](std::unique_ptr notificationInfo) { + if (m_useNotifySend) { + auto title = notificationInfo->title(); + auto message = notificationInfo->message(); + auto image_path = + QString("/tmp/discord-screenaudio-%1.png").arg(title); + notificationInfo->icon().save(image_path); + QProcess::execute("notify-send", + {"--icon", image_path, "--app-name", + "discord-screenaudio", title, message}); + } else if (m_useKF5Notifications) { + KNotification *notification = + new KNotification("discordNotification"); + notification->setTitle(notificationInfo->title()); + notification->setText(notificationInfo->message()); + notification->setPixmap( + QPixmap::fromImage(notificationInfo->icon())); + notification->setDefaultAction("View"); + connect(notification, &KNotification::defaultActivated, + [&, notificationInfo = std::move(notificationInfo)]() { + notificationInfo->click(); + activateWindow(); + }); + notification->sendEvent(); + } + }); setCentralWidget(m_webView); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 39721c8..e1b991a 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -14,7 +14,7 @@ class MainWindow : public QMainWindow { Q_OBJECT public: - explicit MainWindow(QWidget *parent = nullptr); + explicit MainWindow(bool useNotifySend = false, QWidget *parent = nullptr); static MainWindow *instance(); private: @@ -25,6 +25,12 @@ private: void closeEvent(QCloseEvent *event) override; bool m_wasMaximized; static MainWindow *m_instance; + bool m_useNotifySend; +#ifdef KNOTIFICATIONS + bool m_useKF5Notifications = true; +#else + bool m_useKF5Notifications = false; +#endif private Q_SLOTS: void fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest);