diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index cf58b25b2..c810f69db 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -3374,7 +3374,10 @@ void ApiWrap::sendFiles( std::shared_ptr album, const SendAction &action) { const auto haveCaption = !caption.text.isEmpty(); - if (haveCaption && !list.canAddCaption(album != nullptr)) { + if (haveCaption + && !list.canAddCaption( + album != nullptr, + type == SendMediaType::Photo)) { auto message = MessageToSend(action); message.textWithTags = base::take(caption); message.action.clearDraft = false; diff --git a/Telegram/SourceFiles/boxes/send_files_box.cpp b/Telegram/SourceFiles/boxes/send_files_box.cpp index b5b69d4b4..058835dd8 100644 --- a/Telegram/SourceFiles/boxes/send_files_box.cpp +++ b/Telegram/SourceFiles/boxes/send_files_box.cpp @@ -102,7 +102,9 @@ void FileDialogCallback( rpl::producer FieldPlaceholder( const Ui::PreparedList &list, SendFilesWay way) { - return list.canAddCaption(way.groupFiles() && way.sendImagesAsPhotos()) + return list.canAddCaption( + way.groupFiles() && way.sendImagesAsPhotos(), + way.sendImagesAsPhotos()) ? tr::lng_photo_caption() : tr::lng_photos_comment(); } @@ -390,6 +392,11 @@ void SendFilesBox::refreshAllAfterChanges(int fromItem) { break; } } + { + auto sendWay = _sendWay.current(); + sendWay.setHasCompressedStickers(_list.hasSticker()); + _sendWay = sendWay; + } generatePreviewFrom(fromBlock); _inner->resizeToWidth(st::boxWideWidth); refreshControls(); @@ -427,6 +434,7 @@ void SendFilesBox::openDialogToAddFileToAlbum() { void SendFilesBox::initSendWay() { _sendWay = [&] { auto result = Core::App().settings().sendFilesWay(); + result.setHasCompressedStickers(_list.hasSticker()); if (_sendLimit == SendLimit::One) { result.setGroupFiles(true); return result; @@ -455,7 +463,9 @@ void SendFilesBox::updateCaptionPlaceholder() { return; } const auto way = _sendWay.current(); - if (!_list.canAddCaption(way.groupFiles() && way.sendImagesAsPhotos()) + if (!_list.canAddCaption( + way.groupFiles() && way.sendImagesAsPhotos(), + way.sendImagesAsPhotos()) && _sendLimit == SendLimit::One) { _caption->hide(); if (_emojiToggle) { @@ -668,7 +678,7 @@ void SendFilesBox::updateSendWayControlsVisibility() { _hintLabel->setVisible( _controller->session().settings().photoEditorHintShown() - ? _list.hasSendImagesAsPhotosOption(false) + ? _list.canHaveEditorHintLabel() : false); } @@ -1019,7 +1029,8 @@ bool SendFilesBox::validateLength(const QString &text) const { const auto way = _sendWay.current(); if (remove <= 0 || !_list.canAddCaption( - way.groupFiles() && way.sendImagesAsPhotos())) { + way.groupFiles() && way.sendImagesAsPhotos(), + way.sendImagesAsPhotos())) { return true; } _controller->show(Box(CaptionLimitReachedBox, session, remove)); diff --git a/Telegram/SourceFiles/storage/localimageloader.cpp b/Telegram/SourceFiles/storage/localimageloader.cpp index e4a30665e..f15539d58 100644 --- a/Telegram/SourceFiles/storage/localimageloader.cpp +++ b/Telegram/SourceFiles/storage/localimageloader.cpp @@ -915,7 +915,8 @@ void FileLoadTask::process(Args &&args) { attributes.push_back(MTP_documentAttributeImageSize(MTP_int(w), MTP_int(h))); if (ValidateThumbDimensions(w, h)) { - isSticker = Core::IsMimeSticker(filemime) + isSticker = (_type == SendMediaType::File) + && Core::IsMimeSticker(filemime) && (filesize < Storage::kMaxStickerBytesSize) && (Core::IsMimeStickerAnimated(filemime) || GoodStickerDimensions(w, h)); @@ -936,6 +937,9 @@ void FileLoadTask::process(Args &&args) { attributes.push_back(MTP_documentAttributeAnimated()); } else if (filemime.startsWith(u"image/"_q) && _type != SendMediaType::File) { + if (Core::IsMimeSticker(filemime)) { + fullimage = Images::Opaque(std::move(fullimage)); + } auto medium = (w > 320 || h > 320) ? fullimage.scaled(320, 320, Qt::KeepAspectRatio, Qt::SmoothTransformation) : fullimage; const auto downscaled = (w > 1280 || h > 1280); diff --git a/Telegram/SourceFiles/storage/storage_media_prepare.cpp b/Telegram/SourceFiles/storage/storage_media_prepare.cpp index eedc25746..05876d20b 100644 --- a/Telegram/SourceFiles/storage/storage_media_prepare.cpp +++ b/Telegram/SourceFiles/storage/storage_media_prepare.cpp @@ -145,7 +145,8 @@ MimeDataState ComputeMimeDataState(const QMimeData *data) { return MimeDataState::None; } - const auto imageExtensions = Ui::ImageExtensions(); + auto imageExtensions = Ui::ImageExtensions(); + imageExtensions.push_back(u".webp"_q); auto files = QStringList(); auto allAreSmallImages = true; for (const auto &url : urls) { @@ -303,11 +304,11 @@ void PrepareDetails(PreparedFile &file, int previewWidth) { if (const auto image = std::get_if( &file.information->media)) { Assert(!image->data.isNull()); - if (ValidPhotoForAlbum(*image, file.information->filemime)) { + if (ValidPhotoForAlbum(*image, file.information->filemime) + || Core::IsMimeSticker(file.information->filemime)) { UpdateImageDetails(file, previewWidth); file.type = PreparedFile::Type::Photo; - } else if (Core::IsMimeSticker(file.information->filemime) - || image->animated) { + } else if (image->animated) { file.type = PreparedFile::Type::None; } } else if (const auto video = std::get_if