From 546766fb13987d85f122a0c45a8a56b94b519b69 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 18 Dec 2017 17:13:41 +0400 Subject: [PATCH] Update FullMsgId context in HistoryMedia links. --- Telegram/SourceFiles/data/data_document.h | 10 ++-- Telegram/SourceFiles/data/data_photo.h | 10 ++-- Telegram/SourceFiles/data/data_types.h | 18 +++++++ Telegram/SourceFiles/history/history_item.cpp | 54 ++++++++++++------- Telegram/SourceFiles/history/history_item.h | 5 +- Telegram/SourceFiles/history/history_media.h | 2 +- .../history/history_media_grouped.cpp | 7 +++ .../history/history_media_grouped.h | 1 + .../history/history_media_types.cpp | 41 +++++++++++--- .../SourceFiles/history/history_media_types.h | 19 +++++-- .../SourceFiles/history/history_service.cpp | 36 ++++++++++--- 11 files changed, 149 insertions(+), 54 deletions(-) diff --git a/Telegram/SourceFiles/data/data_document.h b/Telegram/SourceFiles/data/data_document.h index a1e1e0e04f..da218e7078 100644 --- a/Telegram/SourceFiles/data/data_document.h +++ b/Telegram/SourceFiles/data/data_document.h @@ -309,24 +309,20 @@ private: VoiceWaveform documentWaveformDecode(const QByteArray &encoded5bit); QByteArray documentWaveformEncode5bit(const VoiceWaveform &waveform); -class DocumentClickHandler : public LeftButtonClickHandler { +class DocumentClickHandler : public FileClickHandler { public: DocumentClickHandler( not_null document, FullMsgId context = FullMsgId()) - : _document(document) - , _context(context) { + : FileClickHandler(context) + , _document(document) { } not_null document() const { return _document; } - FullMsgId context() const { - return _context; - } private: not_null _document; - FullMsgId _context; }; diff --git a/Telegram/SourceFiles/data/data_photo.h b/Telegram/SourceFiles/data/data_photo.h index d2d3630dd4..3c9a21262a 100644 --- a/Telegram/SourceFiles/data/data_photo.h +++ b/Telegram/SourceFiles/data/data_photo.h @@ -70,14 +70,14 @@ private: }; -class PhotoClickHandler : public LeftButtonClickHandler { +class PhotoClickHandler : public FileClickHandler { public: PhotoClickHandler( not_null photo, FullMsgId context = FullMsgId(), PeerData *peer = nullptr) - : _photo(photo) - , _context(context) + : FileClickHandler(context) + , _photo(photo) , _peer(peer) { } not_null photo() const { @@ -86,13 +86,9 @@ public: PeerData *peer() const { return _peer; } - FullMsgId context() const { - return _context; - } private: not_null _photo; - FullMsgId _context; PeerData *_peer = nullptr; }; diff --git a/Telegram/SourceFiles/data/data_types.h b/Telegram/SourceFiles/data/data_types.h index 1c0abb90de..ae72f0d8d0 100644 --- a/Telegram/SourceFiles/data/data_types.h +++ b/Telegram/SourceFiles/data/data_types.h @@ -390,3 +390,21 @@ struct SendAction { int progress = 0; }; + +class FileClickHandler : public LeftButtonClickHandler { +public: + FileClickHandler(FullMsgId context) : _context(context) { + } + + void setMessageId(FullMsgId context) { + _context = context; + } + + FullMsgId context() const { + return _context; + } + +private: + FullMsgId _context; + +}; diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index 691e3606a6..0098d9b343 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -69,10 +69,13 @@ HistoryTextState::HistoryTextState( , link(link) { } -ReplyMarkupClickHandler::ReplyMarkupClickHandler(const HistoryItem *item, int row, int col) -: _itemId(item->fullId()) +ReplyMarkupClickHandler::ReplyMarkupClickHandler( + int row, + int column, + FullMsgId context) +: _itemId(context) , _row(row) -, _col(col) { +, _column(column) { } // Copy to clipboard support. @@ -104,9 +107,9 @@ const HistoryMessageReplyMarkup::Button *ReplyMarkupClickHandler::getButton() co if (auto item = App::histItemById(_itemId)) { if (auto markup = item->Get()) { if (_row < markup->rows.size()) { - auto &row = markup->rows.at(_row); - if (_col < row.size()) { - return &row.at(_col); + auto &row = markup->rows[_row]; + if (_column < row.size()) { + return &row[_column]; } } } @@ -116,7 +119,7 @@ const HistoryMessageReplyMarkup::Button *ReplyMarkupClickHandler::getButton() co void ReplyMarkupClickHandler::onClickImpl() const { if (auto item = App::histItemById(_itemId)) { - App::activateBotCommand(item, _row, _col); + App::activateBotCommand(item, _row, _column); } } @@ -141,19 +144,27 @@ ReplyKeyboard::ReplyKeyboard( , _a_selected(animation(this, &ReplyKeyboard::step_selected)) , _st(std::move(s)) { if (const auto markup = _item->Get()) { - _rows.reserve(markup->rows.size()); - for (auto i = 0, l = int(markup->rows.size()); i != l; ++i) { - auto &row = markup->rows.at(i); - int s = row.size(); + const auto context = _item->fullId(); + const auto rowCount = int(markup->rows.size()); + _rows.reserve(rowCount); + for (auto i = 0; i != rowCount; ++i) { + const auto &row = markup->rows.at(i); + const auto rowSize = int(row.size()); auto newRow = std::vector