Added ability to drag'n'drop videos in SendFilesBox.

This commit is contained in:
23rd 2020-07-30 10:50:12 +03:00 committed by John Preston
parent 2576312cd4
commit b71062561a
4 changed files with 30 additions and 26 deletions

View file

@ -91,25 +91,6 @@ auto ListFromMimeData(not_null<const QMimeData*> data) {
return result;
}
auto CheckMimeData(not_null<const QMimeData*> 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<const QMimeData*> 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) {

View file

@ -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(

View file

@ -140,6 +140,25 @@ void PrepareAlbum(PreparedList &result, int previewWidth) {
} // namespace
bool ValidateDragData(not_null<const QMimeData*> 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)

View file

@ -79,6 +79,7 @@ struct PreparedList {
};
bool ValidateDragData(not_null<const QMimeData*> data, bool isAlbum);
bool ValidateThumbDimensions(int width, int height);
PreparedList PrepareMediaList(const QList<QUrl> &files, int previewWidth);
PreparedList PrepareMediaList(const QStringList &files, int previewWidth);