From d1d5312eada1626edab8c64f87ab943b392ca82b Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Tue, 7 Jan 2020 13:41:13 +0300
Subject: [PATCH] Moved searching of sticker mimes to single place.

---
 Telegram/SourceFiles/boxes/edit_caption_box.cpp        |  2 +-
 Telegram/SourceFiles/boxes/send_files_box.cpp          |  8 ++------
 Telegram/SourceFiles/core/mime_type.cpp                |  5 +++++
 Telegram/SourceFiles/core/mime_type.h                  |  2 ++
 Telegram/SourceFiles/data/data_session.cpp             |  4 ++--
 Telegram/SourceFiles/storage/localimageloader.cpp      | 10 +++-------
 Telegram/SourceFiles/storage/storage_media_prepare.cpp |  6 ++----
 7 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp
index fb024a685..7a205edba 100644
--- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp
+++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp
@@ -490,7 +490,7 @@ void EditCaptionBox::createEditMediaButton() {
 	const auto callback = [=](FileDialog::OpenResult &&result) {
 
 		auto isValidFile = [](QString mimeType) {
-			if (mimeType == qstr("image/webp")) {
+			if (Core::IsMimeSticker(mimeType)) {
 				Ui::show(
 					Box<InformBox>(tr::lng_edit_media_invalid_file(tr::now)),
 					Ui::LayerOption::KeepOther);
diff --git a/Telegram/SourceFiles/boxes/send_files_box.cpp b/Telegram/SourceFiles/boxes/send_files_box.cpp
index 2735c9475..9fdc3252c 100644
--- a/Telegram/SourceFiles/boxes/send_files_box.cpp
+++ b/Telegram/SourceFiles/boxes/send_files_box.cpp
@@ -49,8 +49,6 @@ namespace {
 constexpr auto kMinPreviewWidth = 20;
 constexpr auto kShrinkDuration = crl::time(150);
 constexpr auto kDragDuration = crl::time(200);
-const auto kStickerMimeString = qstr("image/webp");
-const auto kAnimatedStickerMimeString = qstr("application/x-tgsticker");
 
 inline bool CanAddUrls(const QList<QUrl> &urls) {
 	return !urls.isEmpty() && ranges::find_if(
@@ -145,7 +143,7 @@ void FileDialogCallback(
 	bool isAlbum,
 	Fn<void(Storage::PreparedList)> callback) {
 	auto isValidFile = [](QString mimeType) {
-		if (mimeType != qstr("image/webp")) {
+		if (!Core::IsMimeSticker(mimeType)) {
 			return true;
 		}
 		Ui::show(
@@ -751,14 +749,12 @@ SingleMediaPreview *SingleMediaPreview::Create(
 			preview.height())) {
 		return nullptr;
 	}
-	const auto sticker = (file.information->filemime == kStickerMimeString)
-		|| (file.information->filemime == kAnimatedStickerMimeString);
 	return Ui::CreateChild<SingleMediaPreview>(
 		parent,
 		controller,
 		preview,
 		animated,
-		sticker,
+		Core::IsMimeSticker(file.information->filemime),
 		animationPreview ? file.path : QString());
 }
 
diff --git a/Telegram/SourceFiles/core/mime_type.cpp b/Telegram/SourceFiles/core/mime_type.cpp
index 24e434ca4..3fb80ab6a 100644
--- a/Telegram/SourceFiles/core/mime_type.cpp
+++ b/Telegram/SourceFiles/core/mime_type.cpp
@@ -102,4 +102,9 @@ MimeType MimeTypeForData(const QByteArray &data) {
 	return MimeType(QMimeDatabase().mimeTypeForData(data));
 }
 
+bool IsMimeSticker(const QString &mime) {
+	return mime == qsl("image/webp")
+		|| mime == qsl("application/x-tgsticker");
+}
+
 } // namespace Core
diff --git a/Telegram/SourceFiles/core/mime_type.h b/Telegram/SourceFiles/core/mime_type.h
index dd7ec2f05..25d30d2b1 100644
--- a/Telegram/SourceFiles/core/mime_type.h
+++ b/Telegram/SourceFiles/core/mime_type.h
@@ -39,4 +39,6 @@ MimeType MimeTypeForName(const QString &mime);
 MimeType MimeTypeForFile(const QFileInfo &file);
 MimeType MimeTypeForData(const QByteArray &data);
 
+bool IsMimeSticker(const QString &mime);
+
 } // namespace Core
diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp
index f2322f43c..1d6420c18 100644
--- a/Telegram/SourceFiles/data/data_session.cpp
+++ b/Telegram/SourceFiles/data/data_session.cpp
@@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include "mainwidget.h"
 #include "api/api_text_entities.h"
 #include "core/application.h"
+#include "core/mime_type.h" // Core::IsMimeSticker
 #include "core/crash_reports.h" // CrashReports::SetAnnotation
 #include "ui/image/image.h"
 #include "ui/image/image_source.h" // Images::LocalFileSource
@@ -2390,8 +2391,7 @@ not_null<DocumentData*> Session::processDocument(
 	case mtpc_document: {
 		const auto &fields = data.c_document();
 		const auto mime = qs(fields.vmime_type());
-		const auto format = (mime == qstr("image/webp")
-			|| mime == qstr("application/x-tgsticker"))
+		const auto format = Core::IsMimeSticker(mime)
 			? "WEBP"
 			: "JPG";
 		return document(
diff --git a/Telegram/SourceFiles/storage/localimageloader.cpp b/Telegram/SourceFiles/storage/localimageloader.cpp
index 2eca96d02..53de99d95 100644
--- a/Telegram/SourceFiles/storage/localimageloader.cpp
+++ b/Telegram/SourceFiles/storage/localimageloader.cpp
@@ -656,9 +656,6 @@ bool FileLoadTask::FillImageInformation(
 }
 
 void FileLoadTask::process() {
-	const auto stickerMime = qsl("image/webp");
-	const auto animatedStickerMime = qsl("application/x-tgsticker");
-
 	_result = std::make_shared<FileLoadResult>(
 		id(),
 		_id,
@@ -700,7 +697,7 @@ void FileLoadTask::process() {
 		if (auto image = base::get_if<FileMediaInformation::Image>(
 				&_information->media)) {
 			fullimage = base::take(image->data);
-			if (filemime != stickerMime && filemime != animatedStickerMime) {
+			if (!Core::IsMimeSticker(filemime)) {
 				fullimage = Images::prepareOpaque(std::move(fullimage));
 			}
 			isAnimation = image->animated;
@@ -719,7 +716,7 @@ void FileLoadTask::process() {
 			}
 			const auto mimeType = Core::MimeTypeForData(_content);
 			filemime = mimeType.name();
-			if (filemime != stickerMime && filemime != animatedStickerMime) {
+			if (!Core::IsMimeSticker(filemime)) {
 				fullimage = Images::prepareOpaque(std::move(fullimage));
 			}
 			if (filemime == "image/jpeg") {
@@ -831,8 +828,7 @@ void FileLoadTask::process() {
 		attributes.push_back(MTP_documentAttributeImageSize(MTP_int(w), MTP_int(h)));
 
 		if (ValidateThumbDimensions(w, h)) {
-			isSticker = (filemime == stickerMime
-				|| filemime == animatedStickerMime)
+			isSticker = Core::IsMimeSticker(filemime)
 				&& (w > 0)
 				&& (h > 0)
 				&& (w <= StickerMaxSize)
diff --git a/Telegram/SourceFiles/storage/storage_media_prepare.cpp b/Telegram/SourceFiles/storage/storage_media_prepare.cpp
index 693a77e84..65c53a0e8 100644
--- a/Telegram/SourceFiles/storage/storage_media_prepare.cpp
+++ b/Telegram/SourceFiles/storage/storage_media_prepare.cpp
@@ -34,9 +34,7 @@ bool HasExtensionFrom(const QString &file, const QStringList &extensions) {
 bool ValidPhotoForAlbum(
 		const FileMediaInformation::Image &image,
 		const QString &mime) {
-	if (image.animated
-		|| mime == qstr("image/webp")
-		|| mime == qstr("application/x-tgsticker")) {
+	if (image.animated || Core::IsMimeSticker(mime)) {
 		return false;
 	}
 	const auto width = image.data.width();
@@ -397,7 +395,7 @@ bool PreparedList::canAddCaption(bool isAlbum, bool compressImages) const {
 		if (files.empty()) {
 			return false;
 		}
-		return (files.front().mime == qstr("image/webp"))
+		return Core::IsMimeSticker(files.front().mime)
 			|| files.front().path.endsWith(
 				qstr(".tgs"),
 				Qt::CaseInsensitive);