From 89e1291d866cea0b796d853f3eb5b10d9f08e9d1 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 29 Mar 2019 15:06:40 +0300 Subject: [PATCH] Added confirming only images and videos when edit album item. - Added hiding of checkbox when edit album item. --- Telegram/SourceFiles/boxes/edit_caption_box.cpp | 16 ++++++++++++++-- Telegram/SourceFiles/boxes/edit_caption_box.h | 1 + Telegram/SourceFiles/data/data_document.cpp | 16 ++++++++++++++++ Telegram/SourceFiles/data/data_document.h | 1 + 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index d83fd49b7f..0ce7b206b4 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -46,6 +46,7 @@ EditCaptionBox::EditCaptionBox( Expects(item->media() != nullptr); Expects(item->media()->allowsEditCaption()); _isAllowedEditMedia = item->media()->allowsEditMedia(); + _isNotAlbum = !item->groupId(); QSize dimensions; auto image = (Image*)nullptr; @@ -350,6 +351,15 @@ void EditCaptionBox::createEditMediaButton() { const auto fileinfo = QFileInfo(_newMediaPath); const auto filename = fileinfo.fileName(); + + if (!_isNotAlbum) { + // This check only for users, who chose not valid file with absolute path. + if (!fileIsValidForAlbum(filename, Core::MimeTypeForFile(fileinfo).name())) { + _newMediaPath = QString(); + return; + } + } + _isImage = fileIsImage(filename, Core::MimeTypeForFile(fileinfo).name()); _isAudio = false; _animated = false; @@ -360,7 +370,7 @@ void EditCaptionBox::createEditMediaButton() { _gifw = _gifh = _gifx = 0; auto isGif = false; - _wayWrap->toggle(_isImage, anim::type::instant); + _wayWrap->toggle(_isImage && _isNotAlbum, anim::type::instant); using Info = FileMediaInformation; if (const auto image = base::get_if(fileMedia) @@ -404,7 +414,9 @@ void EditCaptionBox::createEditMediaButton() { }; addButton(langFactory(lng_edit_media), [=] { - const auto filters = QStringList(FileDialog::AllFilesFilter()); + const auto filters = _isNotAlbum + ? QStringList(FileDialog::AllFilesFilter()) + : QStringList(qsl("Image and Video Files (*.png *.jpg *.mp4)")); FileDialog::GetOpenPath( this, lang(lng_choose_file), diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.h b/Telegram/SourceFiles/boxes/edit_caption_box.h index 118ebb2805..3e1bc176c2 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.h +++ b/Telegram/SourceFiles/boxes/edit_caption_box.h @@ -107,6 +107,7 @@ private: Ui::SlideWrap *_wayWrap = nullptr; QString _newMediaPath; bool _isAllowedEditMedia = false; + bool _isNotAlbum; QString _error; diff --git a/Telegram/SourceFiles/data/data_document.cpp b/Telegram/SourceFiles/data/data_document.cpp index b1a7443f11..671a61f6cd 100644 --- a/Telegram/SourceFiles/data/data_document.cpp +++ b/Telegram/SourceFiles/data/data_document.cpp @@ -122,6 +122,22 @@ bool fileIsImage(const QString &name, const QString &mime) { return false; } +bool fileIsValidForAlbum(const QString &name, const QString &mime) { + QString lowermime = mime.toLower(), namelower = name.toLower(); + if (lowermime.startsWith(qstr("video/mp4")) + || lowermime.startsWith(qstr("image/jpeg")) + || lowermime.startsWith(qstr("image/jpg")) + || lowermime.startsWith(qstr("image/png"))) { + return true; + } else if (namelower.endsWith(qstr(".mp4")) + || namelower.endsWith(qstr(".jpg")) + || namelower.endsWith(qstr(".jpeg")) + || namelower.endsWith(qstr(".png"))) { + return true; + } + return false; +} + QString FileNameUnsafe( const QString &title, const QString &filter, diff --git a/Telegram/SourceFiles/data/data_document.h b/Telegram/SourceFiles/data/data_document.h index 3092ae4ee2..4ec0afdfc5 100644 --- a/Telegram/SourceFiles/data/data_document.h +++ b/Telegram/SourceFiles/data/data_document.h @@ -72,6 +72,7 @@ struct VoiceData : public DocumentAdditionalData { }; bool fileIsImage(const QString &name, const QString &mime); +bool fileIsValidForAlbum(const QString &name, const QString &mime); namespace Serialize { class Document;