diff --git a/Telegram/SourceFiles/api/api_sending.cpp b/Telegram/SourceFiles/api/api_sending.cpp index 9cfe272f8..291a2675a 100644 --- a/Telegram/SourceFiles/api/api_sending.cpp +++ b/Telegram/SourceFiles/api/api_sending.cpp @@ -456,7 +456,6 @@ void SendConfirmedFile( }()); if (itemToEdit) { - itemToEdit->savePreviousMedia(); auto edition = HistoryMessageEdition(); edition.isEditHide = (flags & MessageFlag::HideEdited); edition.editDate = 0; @@ -468,6 +467,7 @@ void SendConfirmedFile( edition.useSameMarkup = true; edition.useSameReplies = true; edition.useSameReactions = true; + edition.savePreviousMedia = true; itemToEdit->applyEdition(std::move(edition)); } else { const auto viaBotId = UserId(); diff --git a/Telegram/SourceFiles/data/data_scheduled_messages.cpp b/Telegram/SourceFiles/data/data_scheduled_messages.cpp index 820b7c0d2..7f5821b7c 100644 --- a/Telegram/SourceFiles/data/data_scheduled_messages.cpp +++ b/Telegram/SourceFiles/data/data_scheduled_messages.cpp @@ -467,16 +467,17 @@ HistoryItem *ScheduledMessages::append( // probably this message was edited. if (data.is_edit_hide()) { existing->applyEdition(HistoryMessageEdition(_session, data)); + } else { + existing->updateSentContent({ + qs(data.vmessage()), + Api::EntitiesFromMTP( + _session, + data.ventities().value_or_empty()) + }, data.vmedia()); + existing->updateReplyMarkup( + HistoryMessageMarkupData(data.vreply_markup())); + existing->updateForwardedInfo(data.vfwd_from()); } - existing->updateSentContent({ - qs(data.vmessage()), - Api::EntitiesFromMTP( - _session, - data.ventities().value_or_empty()) - }, data.vmedia()); - existing->updateReplyMarkup( - HistoryMessageMarkupData(data.vreply_markup())); - existing->updateForwardedInfo(data.vfwd_from()); existing->updateDate(data.vdate().v); history->owner().requestItemTextRefresh(existing); }, [&](const auto &data) {}); diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index bc0fffeb7..55e1def49 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -1467,6 +1467,12 @@ void HistoryItem::applyEdition(HistoryMessageEdition &&edition) { // } //} + const auto updatingSavedLocalEdit = !edition.savePreviousMedia + && (_savedLocalEditMediaData != nullptr); + if (!_savedLocalEditMediaData && edition.savePreviousMedia) { + savePreviousMedia(); + } + if (edition.isEditHide) { _flags |= MessageFlag::HideEdited; } else { @@ -1486,8 +1492,14 @@ void HistoryItem::applyEdition(HistoryMessageEdition &&edition) { setReplyMarkup(base::take(edition.replyMarkup)); } if (!isLocalUpdateMedia()) { - removeFromSharedMediaIndex(); - refreshMedia(edition.mtpMedia); + if (updatingSavedLocalEdit) { + _savedLocalEditMediaData->media = edition.mtpMedia + ? CreateMedia(this, *edition.mtpMedia) + : nullptr; + } else { + removeFromSharedMediaIndex(); + refreshMedia(edition.mtpMedia); + } } if (!edition.useSameReactions) { updateReactions(edition.mtpReactions); @@ -1498,10 +1510,18 @@ void HistoryItem::applyEdition(HistoryMessageEdition &&edition) { if (!edition.useSameForwards) { setForwardsCount(edition.forwards); } - setText(_media + const auto &checkedMedia = updatingSavedLocalEdit + ? _savedLocalEditMediaData->media + : _media; + auto updatedText = checkedMedia ? edition.textWithEntities - : EnsureNonEmpty(edition.textWithEntities)); - if (!isLocalUpdateMedia()) { + : EnsureNonEmpty(edition.textWithEntities); + if (updatingSavedLocalEdit) { + _savedLocalEditMediaData->text = std::move(updatedText); + } else { + setText(std::move(updatedText)); + } + if (!isLocalUpdateMedia() && !updatingSavedLocalEdit) { indexAsNewItem(); } if (!edition.useSameReplies) { @@ -1650,6 +1670,9 @@ void HistoryItem::applySentMessage( void HistoryItem::updateSentContent( const TextWithEntities &textWithEntities, const MTPMessageMedia *media) { + if (_savedLocalEditMediaData) { + return; + } setText(textWithEntities); if (_flags & MessageFlag::FromInlineBot) { if (!media || !_media || !_media->updateInlineResultMedia(*media)) { diff --git a/Telegram/SourceFiles/history/history_item_edition.h b/Telegram/SourceFiles/history/history_item_edition.h index 2ca37c71a..b24bf8836 100644 --- a/Telegram/SourceFiles/history/history_item_edition.h +++ b/Telegram/SourceFiles/history/history_item_edition.h @@ -29,6 +29,7 @@ struct HistoryMessageEdition { bool useSameReplies = false; bool useSameMarkup = false; bool useSameReactions = false; + bool savePreviousMedia = false; TextWithEntities textWithEntities; HistoryMessageMarkupData replyMarkup; HistoryMessageRepliesData replies;