From 3e22ada8891985efc501e87d0190ee35c3cfd8c8 Mon Sep 17 00:00:00 2001
From: John Preston <johnprestonmail@gmail.com>
Date: Tue, 18 Dec 2018 15:06:57 +0400
Subject: [PATCH] Remove HistoryMediaType type-tag.

---
 .../admin_log/history_admin_log_inner.cpp     | 48 +++----------------
 .../history/history_inner_widget.cpp          | 30 +++---------
 .../SourceFiles/history/media/history_media.h | 21 --------
 .../history/media/history_media_call.h        |  4 --
 .../history/media/history_media_contact.h     |  4 --
 .../history/media/history_media_document.cpp  |  8 ----
 .../history/media/history_media_document.h    |  2 -
 .../history/media/history_media_game.h        |  4 --
 .../history/media/history_media_gif.h         |  4 --
 .../history/media/history_media_grouped.h     |  4 --
 .../history/media/history_media_invoice.h     |  4 --
 .../history/media/history_media_location.h    |  4 --
 .../history/media/history_media_photo.h       |  4 --
 .../history/media/history_media_sticker.h     |  4 --
 .../history/media/history_media_video.h       |  4 --
 .../history/media/history_media_web_page.cpp  |  4 +-
 .../history/media/history_media_web_page.h    |  4 --
 .../view/history_view_context_menu.cpp        | 14 ++----
 .../history/view/history_view_list_widget.cpp |  7 +--
 19 files changed, 24 insertions(+), 154 deletions(-)

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 47309847b..d82d07946 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<HistoryWebPage*>(media)->attach()) {
-						media = static_cast<HistoryWebPage*>(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 c40245f26..257c05463 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<HistoryWebPage*>(media)->attach()) {
-						media = static_cast<HistoryWebPage*>(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 829aa8bbe..50e3a2956 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<Element*> 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 bb6bcc358..855bf1a90 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<Element*> parent,
 		not_null<Data::Call*> 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 906241849..98349120c 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 581c0eb42..0631777e5 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 07ce6b89d..cfbea5252 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<Element*> parent,
 		not_null<DocumentData*> 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 a9cc3a766..6f4ebc73e 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<GameData*> data,
 		const TextWithEntities &consumed);
 
-	HistoryMediaType type() const override {
-		return MediaTypeGame;
-	}
-
 	void refreshParentId(not_null<HistoryItem*> 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 ad0f78f93..1852d926e 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<Element*> parent,
 		not_null<DocumentData*> document);
 
-	HistoryMediaType type() const override {
-		return MediaTypeGif;
-	}
-
 	void refreshParentId(not_null<HistoryItem*> 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 211c81507..413c199d1 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<Element*> parent,
 		const std::vector<not_null<HistoryItem*>> &items);
 
-	HistoryMediaType type() const override {
-		return MediaTypeGrouped;
-	}
-
 	void refreshParentId(not_null<HistoryItem*> 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 36c9d73f7..f249756d5 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<Element*> parent,
 		not_null<Data::Invoice*> invoice);
 
-	HistoryMediaType type() const override {
-		return MediaTypeInvoice;
-	}
-
 	void refreshParentId(not_null<HistoryItem*> 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 1fcbd0b2c..35031e99e 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 019ce379e..c1415a646 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<PhotoData*> 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 8d84df6a1..f02101989 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<Element*> parent,
 		not_null<DocumentData*> 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 34e463aa3..c968e0891 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<HistoryItem*> realParent,
 		not_null<DocumentData*> 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 6c0f44ba9..e7ed6d71d 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 8c91d034d..830da78a1 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<Element*> parent,
 		not_null<WebPageData*> data);
 
-	HistoryMediaType type() const override {
-		return MediaTypeWebPage;
-	}
-
 	void refreshParentId(not_null<HistoryItem*> 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 351d80fd1..ab469c35a 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<Ui::PopupMenu> 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<HistoryWebPage*>(media)->attach()) {
-				media = static_cast<HistoryWebPage*>(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 ef8460c78..1eca6e6f3 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<Element*> view) const {
 	if (_mouseCursorState == CursorState::Date) {
 		return true;
-	} else if (const auto media = view->media()) {
-		return media->type() == MediaTypeSticker;
+	} else if (dynamic_cast<HistorySticker*>(view->media()) != nullptr) {
+		return true;
 	}
 	return false;
 }