diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index 69c20b3fd4..d83fd49b7f 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -45,6 +45,7 @@ EditCaptionBox::EditCaptionBox( , _msgId(item->fullId()) { Expects(item->media() != nullptr); Expects(item->media()->allowsEditCaption()); + _isAllowedEditMedia = item->media()->allowsEditMedia(); QSize dimensions; auto image = (Image*)nullptr; @@ -331,80 +332,78 @@ void EditCaptionBox::clipCallback(Media::Clip::Notification notification) { } } -void EditCaptionBox::prepare() { - addButton(langFactory(lng_settings_save), [this] { save(); }); - addButton(langFactory(lng_edit_media), [this] { - const auto callback = [=](const FileDialog::OpenResult &result) { - if (result.paths.isEmpty() && result.remoteContent.isEmpty()) { - return; +void EditCaptionBox::createEditMediaButton() { + const auto callback = [=](const FileDialog::OpenResult &result) { + if (result.paths.isEmpty() && result.remoteContent.isEmpty()) { + return; + } + + if (!result.paths.isEmpty()) { + const auto filePath = result.paths.front(); + _newMediaPath = filePath; + _preparedList = Storage::PrepareMediaList( + QStringList(_newMediaPath), + st::sendMediaPreviewSize); + + const auto file = &_preparedList.files.front(); + const auto fileMedia = &file->information->media; + + const auto fileinfo = QFileInfo(_newMediaPath); + const auto filename = fileinfo.fileName(); + _isImage = fileIsImage(filename, Core::MimeTypeForFile(fileinfo).name()); + _isAudio = false; + _animated = false; + _photo = false; + _doc = false; + _gifPreview = nullptr; + _thumbw = _thumbh = _thumbx = 0; + _gifw = _gifh = _gifx = 0; + + auto isGif = false; + _wayWrap->toggle(_isImage, anim::type::instant); + + using Info = FileMediaInformation; + if (const auto image = base::get_if(fileMedia) + && _isImage) { + _photo = true; + } else if (const auto video = + base::get_if(fileMedia)) { + _animated = true; + isGif = video->isGifv; + } else { + auto nameString = filename; + if (const auto song = + base::get_if(fileMedia)) { + nameString = DocumentData::ComposeNameString( + filename, + song->title, + song->performer); + _isAudio = true; + } + setName(nameString, fileinfo.size()); + _doc = true; } - if (!result.paths.isEmpty()) { - const auto filePath = result.paths.front(); - LOG(("FILE PATH: %1").arg(filePath)); - _newMediaPath = filePath; - _preparedList = Storage::PrepareMediaList( - QStringList(_newMediaPath), - st::sendMediaPreviewSize); - - const auto file = &_preparedList.files.front(); - const auto fileMedia = &file->information->media; - - const auto fileinfo = QFileInfo(_newMediaPath); - const auto filename = fileinfo.fileName(); - _isImage = fileIsImage(filename, Core::MimeTypeForFile(fileinfo).name()); - _isAudio = false; - _animated = false; - _photo = false; - _doc = false; - _gifPreview = nullptr; - _thumbw = _thumbh = _thumbx = 0; - _gifw = _gifh = _gifx = 0; - - auto isGif = false; - _wayWrap->toggle(_isImage, anim::type::instant); - - using Info = FileMediaInformation; - if (const auto image = base::get_if(fileMedia) - && _isImage) { - _photo = true; - } else if (const auto video = - base::get_if(fileMedia)) { - _animated = true; - isGif = video->isGifv; - } else { - auto nameString = filename; - if (const auto song = - base::get_if(fileMedia)) { - nameString = DocumentData::ComposeNameString( - filename, - song->title, - song->performer); - _isAudio = true; - } - setName(nameString, fileinfo.size()); - _doc = true; + if (!_doc) { + _thumb = App::pixmapFromImageInPlace( + file->preview.scaled(st::sendMediaPreviewSize, + st::confirmMaxHeight, + Qt::KeepAspectRatio)); + _thumbw = _thumb.width(); + _thumbh = _thumb.height(); + _thumbx = (st::boxWideWidth - _thumbw) / 2; + if (isGif) { + _gifw = _thumbw; + _gifh = _thumbh; + _gifx = _thumbx; + prepareGifPreview(); } - - if (!_doc) { - _thumb = App::pixmapFromImageInPlace( - file->preview.scaled(st::sendMediaPreviewSize, - st::confirmMaxHeight, - Qt::KeepAspectRatio)); - _thumbw = _thumb.width(); - _thumbh = _thumb.height(); - _thumbx = (st::boxWideWidth - _thumbw) / 2; - if (isGif) { - _gifw = _thumbw; - _gifh = _thumbh; - _gifx = _thumbx; - prepareGifPreview(); - } - } - captionResized(); } - }; + captionResized(); + } + }; + addButton(langFactory(lng_edit_media), [=] { const auto filters = QStringList(FileDialog::AllFilesFilter()); FileDialog::GetOpenPath( this, @@ -412,6 +411,15 @@ void EditCaptionBox::prepare() { filters.join(qsl(";;")), crl::guard(this, callback)); }); +} + +void EditCaptionBox::prepare() { + addButton(langFactory(lng_settings_save), [this] { save(); }); + if (_isAllowedEditMedia) { + createEditMediaButton(); + } else { + _newMediaPath = QString(); + } addButton(langFactory(lng_cancel), [this] { closeBox(); }); updateBoxSize(); diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.h b/Telegram/SourceFiles/boxes/edit_caption_box.h index e1e3c921d6..118ebb2805 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.h +++ b/Telegram/SourceFiles/boxes/edit_caption_box.h @@ -66,6 +66,8 @@ private: int errorTopSkip() const; + void createEditMediaButton(); + not_null _controller; FullMsgId _msgId; Image *_thumbnailImage = nullptr; @@ -104,6 +106,7 @@ private: bool _asFile = false; Ui::SlideWrap *_wayWrap = nullptr; QString _newMediaPath; + bool _isAllowedEditMedia = false; QString _error; diff --git a/Telegram/SourceFiles/data/data_media_types.cpp b/Telegram/SourceFiles/data/data_media_types.cpp index 61cdf67e3c..27a14077f8 100644 --- a/Telegram/SourceFiles/data/data_media_types.cpp +++ b/Telegram/SourceFiles/data/data_media_types.cpp @@ -214,6 +214,10 @@ bool Media::allowsEditCaption() const { return false; } +bool Media::allowsEditMedia() const { + return false; +} + bool Media::allowsRevoke() const { return true; } @@ -323,6 +327,10 @@ bool MediaPhoto::allowsEditCaption() const { return true; } +bool MediaPhoto::allowsEditMedia() const { + return true; +} + QString MediaPhoto::errorTextForForward(not_null peer) const { const auto errorKey = Data::RestrictionErrorKey( peer, @@ -648,6 +656,13 @@ bool MediaFile::allowsEditCaption() const { return !_document->isVideoMessage() && !_document->sticker(); } +bool MediaFile::allowsEditMedia() const { + return !_document->isVideoMessage() + && !_document->sticker() + && !_document->isGifv() + && !_document->isVoiceMessage(); +} + bool MediaFile::forwardedBecomesUnread() const { return _document->isVoiceMessage() //|| _document->isVideoFile() diff --git a/Telegram/SourceFiles/data/data_media_types.h b/Telegram/SourceFiles/data/data_media_types.h index 8d63dc60af..81c29aa2b5 100644 --- a/Telegram/SourceFiles/data/data_media_types.h +++ b/Telegram/SourceFiles/data/data_media_types.h @@ -93,6 +93,7 @@ public: virtual bool allowsForward() const; virtual bool allowsEdit() const; virtual bool allowsEditCaption() const; + virtual bool allowsEditMedia() const; virtual bool allowsRevoke() const; virtual bool forwardedBecomesUnread() const; virtual QString errorTextForForward(not_null peer) const; @@ -141,6 +142,7 @@ public: QString pinnedTextSubstring() const override; TextWithEntities clipboardText() const override; bool allowsEditCaption() const override; + bool allowsEditMedia() const override; QString errorTextForForward(not_null peer) const override; bool updateInlineResultMedia(const MTPMessageMedia &media) override; @@ -176,6 +178,7 @@ public: QString pinnedTextSubstring() const override; TextWithEntities clipboardText() const override; bool allowsEditCaption() const override; + bool allowsEditMedia() const override; bool forwardedBecomesUnread() const override; QString errorTextForForward(not_null peer) const override; diff --git a/Telegram/SourceFiles/storage/file_upload.cpp b/Telegram/SourceFiles/storage/file_upload.cpp index 17e34cfb4f..66156880d3 100644 --- a/Telegram/SourceFiles/storage/file_upload.cpp +++ b/Telegram/SourceFiles/storage/file_upload.cpp @@ -313,6 +313,8 @@ void Uploader::sendNext() { if (requestsSent.empty() && docRequestsSent.empty()) { const auto silent = uploadingData.file && uploadingData.file->to.silent; + const auto edit = uploadingData.file && + uploadingData.file->edit; if (uploadingData.type() == SendMediaType::Photo) { auto photoFilename = uploadingData.filename(); if (!photoFilename.endsWith(qstr(".jpg"), Qt::CaseInsensitive)) { @@ -329,7 +331,7 @@ void Uploader::sendNext() { MTP_int(uploadingData.partsCount), MTP_string(photoFilename), MTP_bytes(md5)); - _photoReady.fire({ uploadingId, silent, file, uploadingData.file->edit }); + _photoReady.fire({ uploadingId, silent, file, edit }); } else if (uploadingData.type() == SendMediaType::File || uploadingData.type() == SendMediaType::WallPaper || uploadingData.type() == SendMediaType::Audio) { @@ -363,9 +365,13 @@ void Uploader::sendNext() { silent, file, thumb, - uploadingData.file->edit }); + edit }); } else { - _documentReady.fire({ uploadingId, silent, file, uploadingData.file->edit }); + _documentReady.fire({ + uploadingId, + silent, + file, + edit }); } } else if (uploadingData.type() == SendMediaType::Secure) { _secureReady.fire({