From 0e4d85a5e5b3e8d8ae61abb0c376f1f25d62cb39 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 29 Mar 2019 17:50:49 +0300 Subject: [PATCH] Added handler for MESSAGE_NOT_MODIFIED error when edit media. --- Telegram/SourceFiles/apiwrap.cpp | 26 ++++++++++++++++--- Telegram/SourceFiles/history/history_item.h | 1 + .../SourceFiles/history/history_message.cpp | 1 - .../SourceFiles/history/history_message.h | 3 +++ 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 46a52da5ba..70b2b3b375 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -4640,8 +4640,17 @@ void ApiWrap::editUploadedPhoto( media, MTPReplyMarkup(), sentEntities - )).done([=](const MTPUpdates &result) { LOG(("APPLY.")); applyUpdates(result); - }).fail([=](const RPCError &error) { LOG(("FAIL.")); + )).done([=](const MTPUpdates &result) { + item->clearSavedMedia(); + applyUpdates(result); + }).fail([=](const RPCError &error) { + QString err = error.type(); + if (err == qstr("MESSAGE_NOT_MODIFIED")) { + item->returnSavedMedia(); + _session->data().sendHistoryChangeNotifications(); + } else { + sendMessageFail(error); + } }).send(); } } @@ -4694,8 +4703,17 @@ void ApiWrap::editUploadedDocument( media, MTPReplyMarkup(), sentEntities - )).done([=](const MTPUpdates &result) { LOG(("APPLY.")); applyUpdates(result); - }).fail([=](const RPCError &error) { LOG(("FAIL.")); + )).done([=](const MTPUpdates &result) { + item->clearSavedMedia(); + applyUpdates(result); + }).fail([=](const RPCError &error) { + QString err = error.type(); + if (err == qstr("MESSAGE_NOT_MODIFIED")) { + item->returnSavedMedia(); + _session->data().sendHistoryChangeNotifications(); + } else { + sendMessageFail(error); + } }).send(); } } diff --git a/Telegram/SourceFiles/history/history_item.h b/Telegram/SourceFiles/history/history_item.h index 8ba04954be..55f37d8525 100644 --- a/Telegram/SourceFiles/history/history_item.h +++ b/Telegram/SourceFiles/history/history_item.h @@ -132,6 +132,7 @@ public: // For edit media in history_message. virtual void returnSavedMedia() {}; + virtual void clearSavedMedia() {}; // Zero result means this message is not self-destructing right now. virtual crl::time getSelfDestructIn(crl::time now) { diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index abf9c71ce4..9f570e826c 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -742,7 +742,6 @@ QString FormatViewsCount(int views) { void HistoryMessage::refreshMedia(const MTPMessageMedia *media) { _media = nullptr; - _savedMedia = nullptr; if (media) { setMedia(*media); } diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index 036ad4bff6..4ebba7c025 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -90,6 +90,9 @@ public: void refreshMedia(const MTPMessageMedia *media); void refreshSentMedia(const MTPMessageMedia *media); void returnSavedMedia() override; + void clearSavedMedia() { + _savedMedia = nullptr; + } void setMedia(const MTPMessageMedia &media); static std::unique_ptr CreateMedia( not_null item,