summary refs log tree commit diff
path: root/src/notifications
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-01 00:23:16 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-01 00:23:16 +0300
commit95ce2ef9207fa86f60e212c1bc54a81008b09a36 (patch)
tree7625cb5dbbe7db46359847df84f85d7e28611a55 /src/notifications
parentFix crash on Windows with out_of_range exception & update docs (diff)
downloadnheko-95ce2ef9207fa86f60e212c1bc54a81008b09a36.tar.xz
Implement dekstop notifications on Windows (#290)
Diffstat (limited to 'src/notifications')
-rw-r--r--src/notifications/ManagerWin.cpp45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/notifications/ManagerWin.cpp b/src/notifications/ManagerWin.cpp

index a913128e..7503e852 100644 --- a/src/notifications/ManagerWin.cpp +++ b/src/notifications/ManagerWin.cpp
@@ -1,7 +1,48 @@ #include "notifications/Manager.h" +#include "wintoastlib.h" + +using namespace WinToastLib; + +class CustomHandler : public IWinToastHandler +{ +public: + void toastActivated() const {} + void toastActivated(int) const {} + void toastFailed() const { std::wcout << L"Error showing current toast" << std::endl; } + void toastDismissed(WinToastDismissalReason) const {} +}; + +namespace { +bool isInitialized = false; + +void +init() +{ + isInitialized = true; + + WinToast::instance()->setAppName(L"Nheko"); + WinToast::instance()->setAppUserModelId(WinToast::configureAUMI(L"nheko", L"nheko")); + if (!WinToast::instance()->initialize()) + std::wcout << "Your system in not compatible with toast notifications\n"; +} +} void -NotificationsManager::postNotification(const QString &, const QString &, const QString &) +NotificationsManager::postNotification(const QString &room, const QString &user, const QString &msg) { - // TODO: To be implemented + if (!isInitialized) + init(); + + auto templ = WinToastTemplate(WinToastTemplate::ImageAndText02); + if (room != user) + templ.setTextField(QString("%1 - %2").arg(user).arg(room).toStdWString(), + WinToastTemplate::FirstLine); + else + templ.setTextField(QString("%1").arg(user).toStdWString(), + WinToastTemplate::FirstLine); + templ.setTextField(QString("%1").arg(msg).toStdWString(), WinToastTemplate::SecondLine); + // TODO: implement room or user avatar + // templ.setImagePath(L"C:/example.png"); + + WinToast::instance()->showToast(templ, new CustomHandler()); }