From ca5f343ac1067eb34b524572c3f4ca609abbce1b Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Tue, 28 Feb 2023 23:04:40 -0500 Subject: add null implementation for non-gio notifier --- src/notifications/notifier_null.cpp | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/notifications/notifier_null.cpp (limited to 'src/notifications/notifier_null.cpp') diff --git a/src/notifications/notifier_null.cpp b/src/notifications/notifier_null.cpp new file mode 100644 index 0000000..98a7e16 --- /dev/null +++ b/src/notifications/notifier_null.cpp @@ -0,0 +1,5 @@ +#include "notifier.hpp" + +Notifier::Notifier() {} + +void Notifier::Notify(const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action) {} -- cgit v1.2.3 From 0620e51617a88cc46584766e4919176f92f50ffa Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Mon, 6 Mar 2023 23:28:07 -0500 Subject: add destructor to dummy notifier --- src/notifications/notifier_null.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/notifications/notifier_null.cpp') diff --git a/src/notifications/notifier_null.cpp b/src/notifications/notifier_null.cpp index 98a7e16..90571dd 100644 --- a/src/notifications/notifier_null.cpp +++ b/src/notifications/notifier_null.cpp @@ -2,4 +2,6 @@ Notifier::Notifier() {} +Notifier::~Notifier() {} + void Notifier::Notify(const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action) {} -- cgit v1.2.3 From 3889991e16958d9c25bcc982a70aa232b3c16e9a Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Fri, 10 Mar 2023 03:11:03 -0500 Subject: fix null notifier again maybe --- src/notifications/notifier_null.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/notifications/notifier_null.cpp') diff --git a/src/notifications/notifier_null.cpp b/src/notifications/notifier_null.cpp index 90571dd..356d04d 100644 --- a/src/notifications/notifier_null.cpp +++ b/src/notifications/notifier_null.cpp @@ -4,4 +4,4 @@ Notifier::Notifier() {} Notifier::~Notifier() {} -void Notifier::Notify(const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action) {} +void Notifier::Notify(const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action, const std::string &icon_path) {} -- cgit v1.2.3 From 02f7bfefe3185a38f8935b31c68857b986d709ac Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Thu, 16 Mar 2023 21:15:56 -0400 Subject: withdraw notifications on channel open --- src/abaddon.cpp | 2 ++ src/notifications/notifications.cpp | 15 +++++++++++++-- src/notifications/notifications.hpp | 4 ++++ src/notifications/notifier.hpp | 3 ++- src/notifications/notifier_gio.cpp | 8 ++++++-- src/notifications/notifier_null.cpp | 4 +++- 6 files changed, 30 insertions(+), 6 deletions(-) (limited to 'src/notifications/notifier_null.cpp') diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 200183b..e234520 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -733,6 +733,8 @@ void Abaddon::ActionChannelOpened(Snowflake id, bool expand_to) { } if (id == m_main_window->GetChatActiveChannel()) return; + m_notifications.WithdrawChannel(id); + m_main_window->GetChatWindow()->SetTopic(""); const auto channel = m_discord.GetChannel(id); diff --git a/src/notifications/notifications.cpp b/src/notifications/notifications.cpp index fc7a2d6..5b834ce 100644 --- a/src/notifications/notifications.cpp +++ b/src/notifications/notifications.cpp @@ -99,12 +99,23 @@ void Notifications::CheckMessage(const Message &message) { // notify messages in DMs const auto channel = discord.GetChannel(message.ChannelID); if (channel->IsDM()) { + m_chan_notifications[message.ChannelID].push_back(message.ID); NotifyMessageDM(message); } else if (CheckGuildMessage(message)) { + m_chan_notifications[message.ChannelID].push_back(message.ID); NotifyMessageGuild(message); } } +void Notifications::WithdrawChannel(Snowflake channel_id) { + if (auto it = m_chan_notifications.find(channel_id); it != m_chan_notifications.end()) { + for (const auto notification_id : it->second) { + m_notifier.Withdraw(std::to_string(notification_id)); + } + it->second.clear(); + } +} + Glib::ustring Sanitize(const Message &message) { auto buf = Gtk::TextBuffer::create(); Gtk::TextBuffer::iterator begin, end; @@ -123,7 +134,7 @@ void Notifications::NotifyMessageDM(const Message &message) { const auto body = Sanitize(message); Abaddon::Get().GetImageManager().GetCache().GetFileFromURL(message.Author.GetAvatarURL("png", "64"), [=](const std::string &path) { - m_notifier.Notify(title, body, default_action, path); + m_notifier.Notify(std::to_string(message.ID), title, body, default_action, path); }); } @@ -146,7 +157,7 @@ void Notifications::NotifyMessageGuild(const Message &message) { } const auto body = Sanitize(message); Abaddon::Get().GetImageManager().GetCache().GetFileFromURL(message.Author.GetAvatarURL("png", "64"), [=](const std::string &path) { - m_notifier.Notify(title, body, default_action, path); + m_notifier.Notify(std::to_string(message.ID), title, body, default_action, path); }); } diff --git a/src/notifications/notifications.hpp b/src/notifications/notifications.hpp index 5498938..b4ea584 100644 --- a/src/notifications/notifications.hpp +++ b/src/notifications/notifications.hpp @@ -1,5 +1,7 @@ #pragma once #include "notifier.hpp" +#include +#include class Message; @@ -8,6 +10,7 @@ public: Notifications(); void CheckMessage(const Message &message); + void WithdrawChannel(Snowflake channel_id); private: void NotifyMessageDM(const Message &message); @@ -16,4 +19,5 @@ private: [[nodiscard]] bool IsDND() const; Notifier m_notifier; + std::map> m_chan_notifications; }; diff --git a/src/notifications/notifier.hpp b/src/notifications/notifier.hpp index bed7495..cd3eb71 100644 --- a/src/notifications/notifier.hpp +++ b/src/notifications/notifier.hpp @@ -11,7 +11,8 @@ public: Notifier(); ~Notifier(); - void Notify(const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action, const std::string &icon_path); + void Notify(const Glib::ustring &id, const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action, const std::string &icon_path); + void Withdraw(const Glib::ustring &id); private: #ifdef ENABLE_NOTIFICATION_SOUNDS diff --git a/src/notifications/notifier_gio.cpp b/src/notifications/notifier_gio.cpp index e5335d0..ed17ad1 100644 --- a/src/notifications/notifier_gio.cpp +++ b/src/notifications/notifier_gio.cpp @@ -18,7 +18,7 @@ Notifier::~Notifier() { #endif } -void Notifier::Notify(const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action, const std::string &icon_path) { +void Notifier::Notify(const Glib::ustring &id, const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action, const std::string &icon_path) { auto n = Gio::Notification::create(title); n->set_body(text); n->set_default_action(default_action); @@ -29,7 +29,7 @@ void Notifier::Notify(const Glib::ustring &title, const Glib::ustring &text, con auto *icon = g_file_icon_new(file); g_notification_set_icon(n->gobj(), icon); - Abaddon::Get().GetApp()->send_notification(n); + Abaddon::Get().GetApp()->send_notification(id, n); g_object_unref(icon); g_object_unref(file); @@ -38,3 +38,7 @@ void Notifier::Notify(const Glib::ustring &title, const Glib::ustring &text, con ma_engine_play_sound(&m_engine, Abaddon::Get().GetResPath("/sound/message.mp3").c_str(), nullptr); #endif } + +void Notifier::Withdraw(const Glib::ustring &id) { + Abaddon::Get().GetApp()->withdraw_notification(id); +} diff --git a/src/notifications/notifier_null.cpp b/src/notifications/notifier_null.cpp index 356d04d..1da99fd 100644 --- a/src/notifications/notifier_null.cpp +++ b/src/notifications/notifier_null.cpp @@ -4,4 +4,6 @@ Notifier::Notifier() {} Notifier::~Notifier() {} -void Notifier::Notify(const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action, const std::string &icon_path) {} +void Notifier::Notify(const Glib::ustring &id, const Glib::ustring &title, const Glib::ustring &text, const Glib::ustring &default_action, const std::string &icon_path) {} + +void Notifier::Withdraw(const Glib::ustring &id) {} -- cgit v1.2.3