From 41427039904815063f29c79d68ce4064cacb311e Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 10 Dec 2023 04:53:44 +0100 Subject: [PATCH] Try to make windows notifications prettier --- .ci/windows/build.bat | 2 +- CMakeLists.txt | 8 ++++---- src/notifications/Manager.h | 6 ++++-- src/notifications/ManagerLinux.cpp | 3 ++- src/notifications/ManagerWin.cpp | 28 ++++++++++++++++++++++++---- 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/.ci/windows/build.bat b/.ci/windows/build.bat index a79e2360..d74a2ea6 100644 --- a/.ci/windows/build.bat +++ b/.ci/windows/build.bat @@ -15,7 +15,7 @@ echo %DATE% call "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Auxiliary/Build/vcvarsall.bat" x64 -cmake -G "Visual Studio 17 2022" -A x64 -S. -Bbuild -DHUNTER_ROOT="C:\hunter" -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=ON -DUSE_BUNDLED_KDSINGLEAPPLICATION=ON -DCMAKE_BUILD_TYPE=Release -DHUNTER_CONFIGURATION_TYPES=Release +cmake -G "Visual Studio 17 2022" -A x64 -S. -Bbuild -DHUNTER_ROOT="C:\hunter" -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=ON -DUSE_BUNDLED_KDSINGLEAPPLICATION=ON -DKDSingleApplication_STATIC=ON -DCMAKE_BUILD_TYPE=Release -DHUNTER_CONFIGURATION_TYPES=Release cmake --build build --config Release diff --git a/CMakeLists.txt b/CMakeLists.txt index 525a3592..af50aff8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -647,14 +647,14 @@ if(APPLE) endif() elseif(WIN32) file(DOWNLOAD - "https://raw.githubusercontent.com/mohabouje/WinToast/41ed1c58d5dce0ee9c01dbdeac05be45358d4f57/src/wintoastlib.cpp" + "https://raw.githubusercontent.com/mohabouje/WinToast/v1.3.0/src/wintoastlib.cpp" ${PROJECT_SOURCE_DIR}/src/wintoastlib.cpp - EXPECTED_HASH SHA256=1A1A7CE41C1052B12946798F4A6C67CE1FAD209C967F5ED4D720B173527E2073) + EXPECTED_HASH SHA256=1ddf8ee2604e1757d383a2f60d4d597c4f5d9496369e6a22586cedf4af77ca8f) file(DOWNLOAD - "https://raw.githubusercontent.com/mohabouje/WinToast/41ed1c58d5dce0ee9c01dbdeac05be45358d4f57/src/wintoastlib.h" + "https://raw.githubusercontent.com/mohabouje/WinToast/v1.3.0/include/wintoastlib.h" ${PROJECT_SOURCE_DIR}/src/wintoastlib.h - EXPECTED_HASH SHA256=b4481023c5782733795838be22bf1a75f45d87458cd4d9a5a75f664a146eea11) + EXPECTED_HASH SHA256=08cb30d28db9c851d3d4259ae6108ce7dafa966957df6735a06cd55e0716fded) set(SRC_FILES ${SRC_FILES} src/notifications/ManagerWin.cpp src/wintoastlib.cpp src/wintoastlib.h) else() diff --git a/src/notifications/Manager.h b/src/notifications/Manager.h index fbebfcba..0efc9445 100644 --- a/src/notifications/Manager.h +++ b/src/notifications/Manager.h @@ -93,8 +93,10 @@ public: #if defined(Q_OS_WINDOWS) private: - void - systemPostNotification(const QString &line1, const QString &line2, const QString &iconPath); + void systemPostNotification(const QString &line1, + const QString &line2, + const QString &iconPath, + const QString &bodyImagePath); #endif // these slots are platform specific (D-Bus only) diff --git a/src/notifications/ManagerLinux.cpp b/src/notifications/ManagerLinux.cpp index b181fdc3..11a7c1a1 100644 --- a/src/notifications/ManagerLinux.cpp +++ b/src/notifications/ManagerLinux.cpp @@ -114,7 +114,8 @@ NotificationsManager::postNotification(const mtx::responses::Notification ¬if if (hasMarkup_) { if (hasImages_ && - mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Image) { + (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Image || + mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Image)) { MxcImageProvider::download( QString::fromStdString(mtx::accessors::url(notification.event)) .remove(QStringLiteral("mxc://")), diff --git a/src/notifications/ManagerWin.cpp b/src/notifications/ManagerWin.cpp index 8d200abc..87c49e3c 100644 --- a/src/notifications/ManagerWin.cpp +++ b/src/notifications/ManagerWin.cpp @@ -13,6 +13,7 @@ #include "Cache.h" #include "EventAccessors.h" +#include "MxcImageProvider.h" #include "Utils.h" using namespace WinToastLib; @@ -34,9 +35,9 @@ init() { isInitialized = true; - WinToast::instance()->setAppName(L"Nheko"); WinToast::instance()->setAppUserModelId( WinToast::configureAUMI(L"NhekoReborn", L"in.nheko.Nheko")); + WinToast::instance()->setAppName(L"Nheko"); if (!WinToast::instance()->initialize()) std::wcout << "Your system is not compatible with toast notifications\n"; } @@ -61,20 +62,35 @@ NotificationsManager::postNotification(const mtx::responses::Notification ¬if } return template_.arg(utils::stripReplyFallbacks(notification.event, {}, {}).quoted_body); - }; + }(); auto iconPath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + room_name + "-room-avatar.png"; if (!icon.save(iconPath)) iconPath.clear(); - systemPostNotification(room_name, formatNotification(), iconPath); + if (mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Image || + mtx::accessors::msg_type(notification.event) == mtx::events::MessageType::Image) { + MxcImageProvider::download( + QString::fromStdString(mtx::accessors::url(notification.event)) + .remove(QStringLiteral("mxc://")), + QSize(200, 80), + [this, room_name, formatNotification, iconPath](QString, QSize, QImage, QString imgPath) { + if (imgPath.isEmpty()) + systemPostNotification(room_name, formatNotification, iconPath, ""); + else + systemPostNotification(room_name, formatNotification, iconPath, imgPath); + }); + } else { + systemPostNotification(room_name, formatNotification, iconPath, ""); + } } void NotificationsManager::systemPostNotification(const QString &line1, const QString &line2, - const QString &iconPath) + const QString &iconPath, + const QString &bodyImagePath) { if (!isInitialized) init(); @@ -85,6 +101,10 @@ NotificationsManager::systemPostNotification(const QString &line1, if (!iconPath.isNull()) templ.setImagePath(iconPath.toStdWString()); + if (!bodyImagePath.isNull()) + templ.setHeroImagePath(bodyImagePath.toStdWString(), true); + + templ.setAudioPath(WinToastTemplate::IM); WinToast::instance()->showToast(templ, new CustomHandler()); }