From b71062561aa871b35dc0a5e3c61629dda0d04248 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 30 Jul 2020 10:50:12 +0300 Subject: [PATCH] Added ability to drag'n'drop videos in SendFilesBox. --- .../SourceFiles/boxes/edit_caption_box.cpp | 25 +++---------------- Telegram/SourceFiles/boxes/send_files_box.cpp | 11 ++++---- .../storage/storage_media_prepare.cpp | 19 ++++++++++++++ .../storage/storage_media_prepare.h | 1 + 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index 3aec102e99..32f00f56bb 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -91,25 +91,6 @@ auto ListFromMimeData(not_null data) { return result; } -auto CheckMimeData(not_null data, bool isAlbum) { - if (data->urls().size() > 1) { - return false; - } else if (data->hasImage()) { - return true; - } - - if (isAlbum && data->hasUrls()) { - const auto url = data->urls().front(); - if (url.isLocalFile()) { - using namespace Core; - const auto info = QFileInfo(Platform::File::UrlToLocal(url)); - return IsMimeAcceptedForAlbum(MimeTypeForFile(info).name()); - } - } - - return true; -} - } // namespace EditCaptionBox::EditCaptionBox( @@ -663,7 +644,7 @@ void EditCaptionBox::prepare() { if (action == Ui::InputField::MimeAction::Check) { if (!data->hasText() && !_isAllowedEditMedia) { return false; - } else if (CheckMimeData(data, _isAlbum)) { + } else if (Storage::ValidateDragData(data, _isAlbum)) { return true; } return data->hasText(); @@ -766,7 +747,9 @@ void EditCaptionBox::setupEmojiPanel() { void EditCaptionBox::setupDragArea() { auto enterFilter = [=](not_null data) { - return !_isAllowedEditMedia ? false : CheckMimeData(data, _isAlbum); + return !_isAllowedEditMedia + ? false + : Storage::ValidateDragData(data, _isAlbum); }; // Avoid both drag areas appearing at one time. auto computeState = [=](const QMimeData *data) { diff --git a/Telegram/SourceFiles/boxes/send_files_box.cpp b/Telegram/SourceFiles/boxes/send_files_box.cpp index 32ff2af777..73b05d706a 100644 --- a/Telegram/SourceFiles/boxes/send_files_box.cpp +++ b/Telegram/SourceFiles/boxes/send_files_box.cpp @@ -1865,12 +1865,13 @@ void SendFilesBox::prepare() { void SendFilesBox::setupDragArea() { // Avoid both drag areas appearing at one time. auto computeState = [=](const QMimeData *data) { + using DragState = Storage::MimeDataState; const auto state = Storage::ComputeMimeDataState(data); - return (state == Storage::MimeDataState::PhotoFiles) - ? Storage::MimeDataState::Image - : (state == Storage::MimeDataState::Files) - // Temporary enable drag'n'drop only for images. TODO. - ? Storage::MimeDataState::None + return (state == DragState::PhotoFiles) + ? DragState::Image + : (state == DragState::Files + && !Storage::ValidateDragData(data, true)) + ? DragState::None : state; }; const auto areas = DragArea::SetupDragAreaToContainer( diff --git a/Telegram/SourceFiles/storage/storage_media_prepare.cpp b/Telegram/SourceFiles/storage/storage_media_prepare.cpp index 2b0fef409c..d8ff217849 100644 --- a/Telegram/SourceFiles/storage/storage_media_prepare.cpp +++ b/Telegram/SourceFiles/storage/storage_media_prepare.cpp @@ -140,6 +140,25 @@ void PrepareAlbum(PreparedList &result, int previewWidth) { } // namespace +bool ValidateDragData(not_null data, bool isAlbum) { + if (data->urls().size() > 1) { + return false; + } else if (data->hasImage()) { + return true; + } + + if (isAlbum && data->hasUrls()) { + const auto url = data->urls().front(); + if (url.isLocalFile()) { + using namespace Core; + const auto info = QFileInfo(Platform::File::UrlToLocal(url)); + return IsMimeAcceptedForAlbum(MimeTypeForFile(info).name()); + } + } + + return true; +} + bool ValidateThumbDimensions(int width, int height) { return (width > 0) && (height > 0) diff --git a/Telegram/SourceFiles/storage/storage_media_prepare.h b/Telegram/SourceFiles/storage/storage_media_prepare.h index 5ed80d445b..1cdfa3082e 100644 --- a/Telegram/SourceFiles/storage/storage_media_prepare.h +++ b/Telegram/SourceFiles/storage/storage_media_prepare.h @@ -79,6 +79,7 @@ struct PreparedList { }; +bool ValidateDragData(not_null data, bool isAlbum); bool ValidateThumbDimensions(int width, int height); PreparedList PrepareMediaList(const QList &files, int previewWidth); PreparedList PrepareMediaList(const QStringList &files, int previewWidth);