Fixed editing other messages when media is edited.

- Added new condition for skipping message in History::lastSentMessage.
 - Added reset of _savedMedia in HistoryMessage destructor.
This commit is contained in:
23rd 2019-04-01 09:54:48 +03:00 committed by John Preston
parent f3102573ea
commit 5554867553
2 changed files with 8 additions and 1 deletions

View File

@ -2607,6 +2607,10 @@ HistoryItem *History::lastSentMessage() const {
for (const auto &block : ranges::view::reverse(blocks)) { for (const auto &block : ranges::view::reverse(blocks)) {
for (const auto &message : ranges::view::reverse(block->messages)) { for (const auto &message : ranges::view::reverse(block->messages)) {
const auto item = message->data(); const auto item = message->data();
// Skip if message is editing media.
if (item->isEditingMedia()) {
continue;
}
// Skip if message is video message or sticker. // Skip if message is video message or sticker.
if (const auto media = item->media()) { if (const auto media = item->media()) {
// Skip only if media is not webpage. // Skip only if media is not webpage.

View File

@ -619,7 +619,8 @@ bool HistoryMessage::allowsEdit(TimeId now) const {
return canStopPoll() return canStopPoll()
&& !isTooOldForEdit(now) && !isTooOldForEdit(now)
&& (!_media || _media->allowsEdit()) && (!_media || _media->allowsEdit())
&& !isUnsupportedMessage(); && !isUnsupportedMessage()
&& !_isEditingMedia;
} }
bool HistoryMessage::uploading() const { bool HistoryMessage::uploading() const {
@ -768,6 +769,7 @@ void HistoryMessage::returnSavedMedia() {
} else { } else {
history()->owner().requestItemViewRefresh(this); history()->owner().requestItemViewRefresh(this);
} }
_isEditingMedia = false;
} }
void HistoryMessage::setMedia(const MTPMessageMedia &media) { void HistoryMessage::setMedia(const MTPMessageMedia &media) {
@ -1166,6 +1168,7 @@ std::unique_ptr<HistoryView::Element> HistoryMessage::createView(
HistoryMessage::~HistoryMessage() { HistoryMessage::~HistoryMessage() {
_media.reset(); _media.reset();
_savedMedia.reset();
if (auto reply = Get<HistoryMessageReply>()) { if (auto reply = Get<HistoryMessageReply>()) {
reply->clearData(this); reply->clearData(this);
} }