From ad3ec244e94b60834e3cd48ca6727d4f45bc4dc3 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 11 Apr 2023 20:06:38 +0400 Subject: [PATCH] Fix pasting file for media replacement. --- .../SourceFiles/boxes/edit_caption_box.cpp | 43 +++++++++++++++++++ Telegram/SourceFiles/boxes/edit_caption_box.h | 6 +++ .../SourceFiles/history/history_widget.cpp | 9 ++++ 3 files changed, 58 insertions(+) diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index 92e59a8a3..1642a3d8a 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -291,6 +291,49 @@ void EditCaptionBox::StartMediaReplace( crl::guard(controller, show)); } +void EditCaptionBox::StartMediaReplace( + not_null controller, + FullMsgId itemId, + Ui::PreparedList &&list, + TextWithTags text, + Fn saved) { + const auto session = &controller->session(); + const auto item = session->data().message(itemId); + if (!item) { + return; + } + const auto type = ComputeAlbumType(item); + const auto showError = [=](tr::phrase<> t) { + controller->showToast({ t(tr::now) }); + }; + const auto checkResult = [=](const Ui::PreparedList &list) { + if (list.files.size() != 1) { + return false; + } + const auto &file = list.files.front(); + const auto mime = file.information->filemime; + if (Core::IsMimeSticker(mime)) { + showError(tr::lng_edit_media_invalid_file); + return false; + } else if (type != Ui::AlbumType::None + && !file.canBeInAlbumType(type)) { + showError(tr::lng_edit_media_album_error); + return false; + } + return true; + }; + if (list.error != Ui::PreparedList::Error::None) { + showError(tr::lng_send_media_invalid_files); + } else if (checkResult(list)) { + controller->show(Box( + controller, + item, + std::move(text), + std::move(list), + std::move(saved))); + } +} + void EditCaptionBox::StartPhotoEdit( not_null controller, std::shared_ptr media, diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.h b/Telegram/SourceFiles/boxes/edit_caption_box.h index ff3924b3d..80a7b0a82 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.h +++ b/Telegram/SourceFiles/boxes/edit_caption_box.h @@ -50,6 +50,12 @@ public: FullMsgId itemId, TextWithTags text, Fn saved); + static void StartMediaReplace( + not_null controller, + FullMsgId itemId, + Ui::PreparedList &&list, + TextWithTags text, + Fn saved); static void StartPhotoEdit( not_null controller, std::shared_ptr media, diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 30bd8cb0e..422818169 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -5182,6 +5182,15 @@ bool HistoryWidget::confirmSendingFiles( Ui::PreparedList &&list, const QString &insertTextOnCancel) { if (_editMsgId) { + if (_canReplaceMedia) { + EditCaptionBox::StartMediaReplace( + controller(), + { _history->peer->id, _editMsgId }, + std::move(list), + _field->getTextWithTags(), + crl::guard(_list, [=] { cancelEdit(); })); + return true; + } controller()->showToast({ tr::lng_edit_caption_attach(tr::now) }); return false; } else if (showSendingFilesError(list)) {