From 49ff9a249e4fbc6354810fb56a7488deeacd8cd2 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Thu, 9 Jun 2022 01:48:24 -0400 Subject: remove temp attachment files when theyre actually done being uploaded --- src/components/chatinput.cpp | 17 +++++++++++++++-- src/components/chatinput.hpp | 5 +++++ src/components/chatwindow.cpp | 3 +++ 3 files changed, 23 insertions(+), 2 deletions(-) (limited to 'src/components') diff --git a/src/components/chatinput.cpp b/src/components/chatinput.cpp index 7597bbe..166d04f 100644 --- a/src/components/chatinput.cpp +++ b/src/components/chatinput.cpp @@ -112,6 +112,13 @@ void ChatInputAttachmentContainer::Clear() { m_attachments.clear(); } +void ChatInputAttachmentContainer::ClearNoPurge() { + for (auto *item : m_attachments) { + delete item; + } + m_attachments.clear(); +} + bool ChatInputAttachmentContainer::AddImage(const Glib::RefPtr &pb) { if (m_attachments.size() == 10) return false; @@ -217,8 +224,8 @@ ChatInput::ChatInput() const auto attachments = m_attachments.GetFilePaths(); bool b = m_signal_submit.emit(input, attachments); if (b) { - m_attachments.Clear(); m_attachments_revealer.set_reveal_child(false); + m_attachments.ClearNoPurge(); } return b; }); @@ -232,7 +239,9 @@ ChatInput::ChatInput() show_all_children(); m_input.signal_image_paste().connect([this](const Glib::RefPtr &pb) { - if (m_attachments.AddImage(pb)) + const bool can_attach_files = m_signal_check_permission.emit(Permission::ATTACH_FILES); + + if (can_attach_files && m_attachments.AddImage(pb)) m_attachments_revealer.set_reveal_child(true); }); @@ -266,3 +275,7 @@ ChatInput::type_signal_submit ChatInput::signal_submit() { ChatInput::type_signal_escape ChatInput::signal_escape() { return m_signal_escape; } + +ChatInput::type_signal_check_permission ChatInput::signal_check_permission() { + return m_signal_check_permission; +} diff --git a/src/components/chatinput.hpp b/src/components/chatinput.hpp index 83fde95..bdbac5c 100644 --- a/src/components/chatinput.hpp +++ b/src/components/chatinput.hpp @@ -1,5 +1,6 @@ #pragma once #include +#include "discord/permissions.hpp" class ChatInputAttachmentItem : public Gtk::EventBox { public: @@ -32,6 +33,7 @@ public: ChatInputAttachmentContainer(); void Clear(); + void ClearNoPurge(); bool AddImage(const Glib::RefPtr &pb); [[nodiscard]] std::vector GetFilePaths() const; @@ -98,11 +100,14 @@ public: // maybe this should be reduced to a single struct, its bound to get more complicated (application commands?) using type_signal_submit = sigc::signal>; using type_signal_escape = sigc::signal; + using type_signal_check_permission = sigc::signal; type_signal_submit signal_submit(); type_signal_escape signal_escape(); + type_signal_check_permission signal_check_permission(); private: type_signal_submit m_signal_submit; type_signal_escape m_signal_escape; + type_signal_check_permission m_signal_check_permission; }; diff --git a/src/components/chatwindow.cpp b/src/components/chatwindow.cpp index 46c34d4..52c2a60 100644 --- a/src/components/chatwindow.cpp +++ b/src/components/chatwindow.cpp @@ -47,6 +47,9 @@ ChatWindow::ChatWindow() { m_input->set_valign(Gtk::ALIGN_END); + m_input->signal_check_permission().connect([this](Permission perm) { + return Abaddon::Get().GetDiscordClient().HasSelfChannelPermission(m_active_channel, perm); + }); m_input->signal_submit().connect(sigc::mem_fun(*this, &ChatWindow::OnInputSubmit)); m_input->signal_escape().connect([this]() { if (m_is_replying) -- cgit v1.2.3