From c6182e8923026108957227b41249294abbd85f79 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Mon, 6 Jun 2022 03:55:25 -0400 Subject: only save temporary image when theres room in container --- src/components/chatinput.cpp | 45 +++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) (limited to 'src/components/chatinput.cpp') diff --git a/src/components/chatinput.cpp b/src/components/chatinput.cpp index 6afdd82..94bca22 100644 --- a/src/components/chatinput.cpp +++ b/src/components/chatinput.cpp @@ -70,27 +70,13 @@ bool ChatInputText::CheckHandleClipboardPaste() { if (!clip->wait_is_image_available()) return false; const auto pb = clip->wait_for_image(); - std::array dest_name {}; - if (std::tmpnam(dest_name.data()) == nullptr) { - fprintf(stderr, "failed to get temporary path\n"); - return true; - } - - // stinky - std::filesystem::path part1(std::filesystem::temp_directory_path() / "abaddon-cache"); - std::filesystem::path part2(dest_name.data()); - const auto dest_path = (part1 / part2.relative_path()).string(); + if (pb) { + m_signal_image_paste.emit(pb); - try { - pb->save(dest_path, "png"); - } catch (...) { - fprintf(stderr, "pasted image save error\n"); return true; + } else { + return false; } - - m_signal_image_paste.emit(pb, dest_path); - - return true; } ChatInputText::type_signal_submit ChatInputText::signal_submit() { @@ -123,9 +109,26 @@ void ChatInputAttachmentContainer::Clear() { m_attachments.clear(); } -bool ChatInputAttachmentContainer::AddImage(const Glib::RefPtr &pb, const std::string &path) { +bool ChatInputAttachmentContainer::AddImage(const Glib::RefPtr &pb) { if (m_attachments.size() == 10) return false; + std::array dest_name {}; + if (std::tmpnam(dest_name.data()) == nullptr) { + fprintf(stderr, "failed to get temporary path\n"); + return false; + } + + std::filesystem::path part1(std::filesystem::temp_directory_path() / "abaddon-cache"); + std::filesystem::path part2(dest_name.data()); + const auto path = (part1 / part2.relative_path()).string(); + + try { + pb->save(path, "png"); + } catch (...) { + fprintf(stderr, "pasted image save error\n"); + return false; + } + auto *item = Gtk::make_managed(path, pb); item->show(); item->set_valign(Gtk::ALIGN_CENTER); @@ -223,8 +226,8 @@ ChatInput::ChatInput() add(m_input); show_all_children(); - m_input.signal_image_paste().connect([this](const Glib::RefPtr &pb, const std::string &path) { - if (m_attachments.AddImage(pb, path)) + m_input.signal_image_paste().connect([this](const Glib::RefPtr &pb) { + if (m_attachments.AddImage(pb)) m_attachments_revealer.set_reveal_child(true); }); -- cgit v1.2.3