Correctly apply editions to media-edit-in-progress.

This commit is contained in:
John Preston 2023-08-10 18:10:58 +03:00
parent 21b06f390c
commit dfe36f638b
4 changed files with 40 additions and 15 deletions

View file

@ -456,7 +456,6 @@ void SendConfirmedFile(
}()); }());
if (itemToEdit) { if (itemToEdit) {
itemToEdit->savePreviousMedia();
auto edition = HistoryMessageEdition(); auto edition = HistoryMessageEdition();
edition.isEditHide = (flags & MessageFlag::HideEdited); edition.isEditHide = (flags & MessageFlag::HideEdited);
edition.editDate = 0; edition.editDate = 0;
@ -468,6 +467,7 @@ void SendConfirmedFile(
edition.useSameMarkup = true; edition.useSameMarkup = true;
edition.useSameReplies = true; edition.useSameReplies = true;
edition.useSameReactions = true; edition.useSameReactions = true;
edition.savePreviousMedia = true;
itemToEdit->applyEdition(std::move(edition)); itemToEdit->applyEdition(std::move(edition));
} else { } else {
const auto viaBotId = UserId(); const auto viaBotId = UserId();

View file

@ -467,16 +467,17 @@ HistoryItem *ScheduledMessages::append(
// probably this message was edited. // probably this message was edited.
if (data.is_edit_hide()) { if (data.is_edit_hide()) {
existing->applyEdition(HistoryMessageEdition(_session, data)); 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); existing->updateDate(data.vdate().v);
history->owner().requestItemTextRefresh(existing); history->owner().requestItemTextRefresh(existing);
}, [&](const auto &data) {}); }, [&](const auto &data) {});

View file

@ -1467,6 +1467,12 @@ void HistoryItem::applyEdition(HistoryMessageEdition &&edition) {
// } // }
//} //}
const auto updatingSavedLocalEdit = !edition.savePreviousMedia
&& (_savedLocalEditMediaData != nullptr);
if (!_savedLocalEditMediaData && edition.savePreviousMedia) {
savePreviousMedia();
}
if (edition.isEditHide) { if (edition.isEditHide) {
_flags |= MessageFlag::HideEdited; _flags |= MessageFlag::HideEdited;
} else { } else {
@ -1486,8 +1492,14 @@ void HistoryItem::applyEdition(HistoryMessageEdition &&edition) {
setReplyMarkup(base::take(edition.replyMarkup)); setReplyMarkup(base::take(edition.replyMarkup));
} }
if (!isLocalUpdateMedia()) { if (!isLocalUpdateMedia()) {
removeFromSharedMediaIndex(); if (updatingSavedLocalEdit) {
refreshMedia(edition.mtpMedia); _savedLocalEditMediaData->media = edition.mtpMedia
? CreateMedia(this, *edition.mtpMedia)
: nullptr;
} else {
removeFromSharedMediaIndex();
refreshMedia(edition.mtpMedia);
}
} }
if (!edition.useSameReactions) { if (!edition.useSameReactions) {
updateReactions(edition.mtpReactions); updateReactions(edition.mtpReactions);
@ -1498,10 +1510,18 @@ void HistoryItem::applyEdition(HistoryMessageEdition &&edition) {
if (!edition.useSameForwards) { if (!edition.useSameForwards) {
setForwardsCount(edition.forwards); setForwardsCount(edition.forwards);
} }
setText(_media const auto &checkedMedia = updatingSavedLocalEdit
? _savedLocalEditMediaData->media
: _media;
auto updatedText = checkedMedia
? edition.textWithEntities ? edition.textWithEntities
: EnsureNonEmpty(edition.textWithEntities)); : EnsureNonEmpty(edition.textWithEntities);
if (!isLocalUpdateMedia()) { if (updatingSavedLocalEdit) {
_savedLocalEditMediaData->text = std::move(updatedText);
} else {
setText(std::move(updatedText));
}
if (!isLocalUpdateMedia() && !updatingSavedLocalEdit) {
indexAsNewItem(); indexAsNewItem();
} }
if (!edition.useSameReplies) { if (!edition.useSameReplies) {
@ -1650,6 +1670,9 @@ void HistoryItem::applySentMessage(
void HistoryItem::updateSentContent( void HistoryItem::updateSentContent(
const TextWithEntities &textWithEntities, const TextWithEntities &textWithEntities,
const MTPMessageMedia *media) { const MTPMessageMedia *media) {
if (_savedLocalEditMediaData) {
return;
}
setText(textWithEntities); setText(textWithEntities);
if (_flags & MessageFlag::FromInlineBot) { if (_flags & MessageFlag::FromInlineBot) {
if (!media || !_media || !_media->updateInlineResultMedia(*media)) { if (!media || !_media || !_media->updateInlineResultMedia(*media)) {

View file

@ -29,6 +29,7 @@ struct HistoryMessageEdition {
bool useSameReplies = false; bool useSameReplies = false;
bool useSameMarkup = false; bool useSameMarkup = false;
bool useSameReactions = false; bool useSameReactions = false;
bool savePreviousMedia = false;
TextWithEntities textWithEntities; TextWithEntities textWithEntities;
HistoryMessageMarkupData replyMarkup; HistoryMessageMarkupData replyMarkup;
HistoryMessageRepliesData replies; HistoryMessageRepliesData replies;