diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index 47309847b2..d82d07946e 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -1014,47 +1014,13 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_copy_selected), [this] { copySelectedText(); }); } else { if (item && !isUponSelected) { - auto mediaHasTextForCopy = false; - if (auto media = view->media()) { - mediaHasTextForCopy = media->hasTextForCopy(); - if (media->type() == MediaTypeWebPage && static_cast(media)->attach()) { - media = static_cast(media)->attach(); - } - if (media->type() == MediaTypeSticker) { - if (const auto document = media->getDocument()) { - if (document->sticker() && document->sticker()->set.type() != mtpc_inputStickerSetEmpty) { - _menu->addAction(lang(document->isStickerSetInstalled() ? lng_context_pack_info : lng_context_pack_add), [=] { - showStickerPackInfo(document); - }); - } - _menu->addAction(lang(lng_context_save_image), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [this, document] { - saveDocumentToFile(document); - })); - } - } else if (media->type() == MediaTypeGif && !link) { - if (auto document = media->getDocument()) { - if (document->loading()) { - _menu->addAction(lang(lng_context_cancel_download), [=] { - cancelContextDownload(document); - }); - } else { - if (document->isGifv()) { - if (!cAutoPlayGif()) { - _menu->addAction(lang(lng_context_open_gif), [=] { - openContextGif(itemId); - }); - } - } - if (!document->filepath(DocumentData::FilePathResolveChecked).isEmpty()) { - _menu->addAction(lang((cPlatform() == dbipMac || cPlatform() == dbipMacOld) ? lng_context_show_in_finder : lng_context_show_in_folder), [=] { - showContextInFolder(document); - }); - } - _menu->addAction(lang(lng_context_save_file), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [this, document] { - saveDocumentToFile(document); - })); - } - } + const auto media = view->media(); + const auto mediaHasTextForCopy = media && media->hasTextForCopy(); + if (const auto document = media ? media->getDocument() : nullptr) { + if (document->sticker()) { + _menu->addAction(lang(lng_context_save_image), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [this, document] { + saveDocumentToFile(document); + })); } } if (msg && !link && (view->hasVisibleText() || mediaHasTextForCopy)) { diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index c40245f26e..257c05463c 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -1629,29 +1629,13 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { } else { addItemActions(item); if (item && !isUponSelected) { - auto mediaHasTextForCopy = false; - if (auto media = (view ? view->media() : nullptr)) { - mediaHasTextForCopy = media->hasTextForCopy(); - if (media->type() == MediaTypeWebPage && static_cast(media)->attach()) { - media = static_cast(media)->attach(); - } - if (media->type() == MediaTypeSticker) { - if (auto document = media->getDocument()) { - if (document->sticker() && document->sticker()->set.type() != mtpc_inputStickerSetEmpty) { - _menu->addAction(lang(document->isStickerSetInstalled() ? lng_context_pack_info : lng_context_pack_add), [=] { - showStickerPackInfo(document); - }); - _menu->addAction(lang(Stickers::IsFaved(document) ? lng_faved_stickers_remove : lng_faved_stickers_add), [=] { - Auth().api().toggleFavedSticker( - document, - itemId, - !Stickers::IsFaved(document)); - }); - } - _menu->addAction(lang(lng_context_save_image), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { - saveDocumentToFile(itemId, document); - })); - } + const auto media = (view ? view->media() : nullptr); + const auto mediaHasTextForCopy = media && media->hasTextForCopy(); + if (const auto document = media ? media->getDocument() : nullptr) { + if (document->sticker()) { + _menu->addAction(lang(lng_context_save_image), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { + saveDocumentToFile(itemId, document); + })); } } if (msg && view && !link && (view->hasVisibleText() || mediaHasTextForCopy)) { diff --git a/Telegram/SourceFiles/history/media/history_media.h b/Telegram/SourceFiles/history/media/history_media.h index 829aa8bbe5..50e3a2956c 100644 --- a/Telegram/SourceFiles/history/media/history_media.h +++ b/Telegram/SourceFiles/history/media/history_media.h @@ -37,25 +37,6 @@ enum class MediaInBubbleState { Bottom, }; -enum HistoryMediaType : char { - MediaTypePhoto, - MediaTypeVideo, - MediaTypeContact, - MediaTypeCall, - MediaTypeFile, - MediaTypeGif, - MediaTypeSticker, - MediaTypeLocation, - MediaTypeWebPage, - MediaTypeMusicFile, - MediaTypeVoiceFile, - MediaTypeGame, - MediaTypeInvoice, - MediaTypeGrouped, - - MediaTypeCount -}; - class HistoryMedia : public HistoryView::Object { public: using Element = HistoryView::Element; @@ -66,8 +47,6 @@ public: HistoryMedia(not_null parent) : _parent(parent) { } - virtual HistoryMediaType type() const = 0; - virtual TextWithEntities selectedText(TextSelection selection) const { return TextWithEntities(); } diff --git a/Telegram/SourceFiles/history/media/history_media_call.h b/Telegram/SourceFiles/history/media/history_media_call.h index bb6bcc358c..855bf1a906 100644 --- a/Telegram/SourceFiles/history/media/history_media_call.h +++ b/Telegram/SourceFiles/history/media/history_media_call.h @@ -20,10 +20,6 @@ public: not_null parent, not_null call); - HistoryMediaType type() const override { - return MediaTypeCall; - } - void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; TextState textState(QPoint point, StateRequest request) const override; diff --git a/Telegram/SourceFiles/history/media/history_media_contact.h b/Telegram/SourceFiles/history/media/history_media_contact.h index 9062418496..98349120cc 100644 --- a/Telegram/SourceFiles/history/media/history_media_contact.h +++ b/Telegram/SourceFiles/history/media/history_media_contact.h @@ -19,10 +19,6 @@ public: const QString &phone); ~HistoryContact(); - HistoryMediaType type() const override { - return MediaTypeContact; - } - void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; TextState textState(QPoint point, StateRequest request) const override; diff --git a/Telegram/SourceFiles/history/media/history_media_document.cpp b/Telegram/SourceFiles/history/media/history_media_document.cpp index 581c0eb42d..0631777e59 100644 --- a/Telegram/SourceFiles/history/media/history_media_document.cpp +++ b/Telegram/SourceFiles/history/media/history_media_document.cpp @@ -51,14 +51,6 @@ HistoryDocument::HistoryDocument( } } -HistoryMediaType HistoryDocument::type() const { - return _data->isVoiceMessage() - ? MediaTypeVoiceFile - : (_data->isSong() - ? MediaTypeMusicFile - : MediaTypeFile); -} - float64 HistoryDocument::dataProgress() const { return _data->progress(); } diff --git a/Telegram/SourceFiles/history/media/history_media_document.h b/Telegram/SourceFiles/history/media/history_media_document.h index 07ce6b89d8..cfbea5252a 100644 --- a/Telegram/SourceFiles/history/media/history_media_document.h +++ b/Telegram/SourceFiles/history/media/history_media_document.h @@ -20,8 +20,6 @@ public: not_null parent, not_null document); - HistoryMediaType type() const override; - void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; TextState textState(QPoint point, StateRequest request) const override; void updatePressed(QPoint point) override; diff --git a/Telegram/SourceFiles/history/media/history_media_game.h b/Telegram/SourceFiles/history/media/history_media_game.h index a9cc3a7666..6f4ebc73e1 100644 --- a/Telegram/SourceFiles/history/media/history_media_game.h +++ b/Telegram/SourceFiles/history/media/history_media_game.h @@ -18,10 +18,6 @@ public: not_null data, const TextWithEntities &consumed); - HistoryMediaType type() const override { - return MediaTypeGame; - } - void refreshParentId(not_null realParent) override; void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; diff --git a/Telegram/SourceFiles/history/media/history_media_gif.h b/Telegram/SourceFiles/history/media/history_media_gif.h index ad0f78f930..1852d926e1 100644 --- a/Telegram/SourceFiles/history/media/history_media_gif.h +++ b/Telegram/SourceFiles/history/media/history_media_gif.h @@ -29,10 +29,6 @@ public: not_null parent, not_null document); - HistoryMediaType type() const override { - return MediaTypeGif; - } - void refreshParentId(not_null realParent) override; void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; diff --git a/Telegram/SourceFiles/history/media/history_media_grouped.h b/Telegram/SourceFiles/history/media/history_media_grouped.h index 211c81507f..413c199d19 100644 --- a/Telegram/SourceFiles/history/media/history_media_grouped.h +++ b/Telegram/SourceFiles/history/media/history_media_grouped.h @@ -26,10 +26,6 @@ public: not_null parent, const std::vector> &items); - HistoryMediaType type() const override { - return MediaTypeGrouped; - } - void refreshParentId(not_null realParent) override; void draw( diff --git a/Telegram/SourceFiles/history/media/history_media_invoice.h b/Telegram/SourceFiles/history/media/history_media_invoice.h index 36c9d73f75..f249756d50 100644 --- a/Telegram/SourceFiles/history/media/history_media_invoice.h +++ b/Telegram/SourceFiles/history/media/history_media_invoice.h @@ -19,10 +19,6 @@ public: not_null parent, not_null invoice); - HistoryMediaType type() const override { - return MediaTypeInvoice; - } - void refreshParentId(not_null realParent) override; MsgId getReceiptMsgId() const { diff --git a/Telegram/SourceFiles/history/media/history_media_location.h b/Telegram/SourceFiles/history/media/history_media_location.h index 1fcbd0b2c9..35031e99ee 100644 --- a/Telegram/SourceFiles/history/media/history_media_location.h +++ b/Telegram/SourceFiles/history/media/history_media_location.h @@ -20,10 +20,6 @@ public: const QString &title = QString(), const QString &description = QString()); - HistoryMediaType type() const override { - return MediaTypeLocation; - } - void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; TextState textState(QPoint point, StateRequest request) const override; diff --git a/Telegram/SourceFiles/history/media/history_media_photo.h b/Telegram/SourceFiles/history/media/history_media_photo.h index 019ce379e2..c1415a6466 100644 --- a/Telegram/SourceFiles/history/media/history_media_photo.h +++ b/Telegram/SourceFiles/history/media/history_media_photo.h @@ -21,10 +21,6 @@ public: not_null photo, int width); - HistoryMediaType type() const override { - return MediaTypePhoto; - } - void draw(Painter &p, const QRect &clip, TextSelection selection, TimeMs ms) const override; TextState textState(QPoint point, StateRequest request) const override; diff --git a/Telegram/SourceFiles/history/media/history_media_sticker.h b/Telegram/SourceFiles/history/media/history_media_sticker.h index 8d84df6a1d..f021019890 100644 --- a/Telegram/SourceFiles/history/media/history_media_sticker.h +++ b/Telegram/SourceFiles/history/media/history_media_sticker.h @@ -19,10 +19,6 @@ public: not_null parent, not_null document); - HistoryMediaType type() const override { - return MediaTypeSticker; - } - void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; TextState textState(QPoint point, StateRequest request) const override; diff --git a/Telegram/SourceFiles/history/media/history_media_video.h b/Telegram/SourceFiles/history/media/history_media_video.h index 34e463aa31..c968e08911 100644 --- a/Telegram/SourceFiles/history/media/history_media_video.h +++ b/Telegram/SourceFiles/history/media/history_media_video.h @@ -16,10 +16,6 @@ public: not_null realParent, not_null document); - HistoryMediaType type() const override { - return MediaTypeVideo; - } - void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; TextState textState(QPoint point, StateRequest request) const override; diff --git a/Telegram/SourceFiles/history/media/history_media_web_page.cpp b/Telegram/SourceFiles/history/media/history_media_web_page.cpp index 6c0f44ba9d..e7ed6d71d6 100644 --- a/Telegram/SourceFiles/history/media/history_media_web_page.cpp +++ b/Telegram/SourceFiles/history/media/history_media_web_page.cpp @@ -477,7 +477,9 @@ void HistoryWebPage::draw(Painter &p, const QRect &r, TextSelection selection, T auto pixheight = _attach->height(); if (_data->type == WebPageType::Video - && _attach->type() == MediaTypePhoto) { + && _collage.empty() + && _data->photo + && !_data->document) { if (_attach->isReadyForOpen()) { if (_data->siteName == qstr("YouTube")) { st::youtubeIcon.paint(p, (pixwidth - st::youtubeIcon.width()) / 2, (pixheight - st::youtubeIcon.height()) / 2, width()); diff --git a/Telegram/SourceFiles/history/media/history_media_web_page.h b/Telegram/SourceFiles/history/media/history_media_web_page.h index 8c91d034d6..830da78a1b 100644 --- a/Telegram/SourceFiles/history/media/history_media_web_page.h +++ b/Telegram/SourceFiles/history/media/history_media_web_page.h @@ -19,10 +19,6 @@ public: not_null parent, not_null data); - HistoryMediaType type() const override { - return MediaTypeWebPage; - } - void refreshParentId(not_null realParent) override; void draw(Painter &p, const QRect &r, TextSelection selection, TimeMs ms) const override; diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index 351d80fd14..ab469c35a3 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -479,18 +479,10 @@ base::unique_qptr FillContextMenu( AddToggleGroupingAction(result, linkPeer->peer()); } } else if (!request.overSelection && view && !hasSelection) { - auto media = view->media(); + const auto media = view->media(); const auto mediaHasTextForCopy = media && media->hasTextForCopy(); - if (media) { - if (media->type() == MediaTypeWebPage - && static_cast(media)->attach()) { - media = static_cast(media)->attach(); - } - if (media->type() == MediaTypeSticker) { - if (const auto document = media->getDocument()) { - AddDocumentActions(result, document, view->data()->fullId()); - } - } + if (const auto document = media ? media->getDocument() : nullptr) { + AddDocumentActions(result, document, view->data()->fullId()); } if (!link && (view->hasVisibleText() || mediaHasTextForCopy)) { const auto asGroup = (request.pointState != PointState::GroupPart); diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index ef8460c789..1eca6e6f30 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -7,10 +7,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "history/view/history_view_list_widget.h" -#include "history/media/history_media.h" #include "history/history_message.h" #include "history/history_item_components.h" #include "history/history_item_text.h" +#include "history/media/history_media.h" +#include "history/media/history_media_sticker.h" #include "history/view/history_view_context_menu.h" #include "history/view/history_view_element.h" #include "history/view/history_view_message.h" @@ -880,8 +881,8 @@ bool ListWidget::requiredToStartDragging( not_null view) const { if (_mouseCursorState == CursorState::Date) { return true; - } else if (const auto media = view->media()) { - return media->type() == MediaTypeSticker; + } else if (dynamic_cast(view->media()) != nullptr) { + return true; } return false; }