Remove corner download if noforwards.

This commit is contained in:
John Preston 2021-11-05 22:32:26 +04:00
parent 96c910190b
commit c849d17667
13 changed files with 59 additions and 50 deletions

View File

@ -1158,12 +1158,14 @@ bool DocumentData::useStreamingLoader() const {
|| isVoiceMessage(); || isVoiceMessage();
} }
bool DocumentData::canBeStreamed() const { bool DocumentData::canBeStreamed(HistoryItem *item) const {
// Streaming couldn't be used with external player // Streaming couldn't be used with external player
// Maybe someone brave will implement this once upon a time... // Maybe someone brave will implement this once upon a time...
return hasRemoteLocation() return hasRemoteLocation()
&& supportsStreaming() && supportsStreaming()
&& (!cUseExternalVideoPlayer() || !isVideoFile()); && (!isVideoFile()
|| !cUseExternalVideoPlayer()
|| (item && !item->history()->peer->allowsForwarding()));
} }
void DocumentData::setInappPlaybackFailed() { void DocumentData::setInappPlaybackFailed() {

View File

@ -233,7 +233,7 @@ public:
[[nodiscard]] Storage::Cache::Key cacheKey() const; [[nodiscard]] Storage::Cache::Key cacheKey() const;
[[nodiscard]] uint8 cacheTag() const; [[nodiscard]] uint8 cacheTag() const;
[[nodiscard]] bool canBeStreamed() const; [[nodiscard]] bool canBeStreamed(HistoryItem *item) const;
[[nodiscard]] auto createStreamingLoader( [[nodiscard]] auto createStreamingLoader(
Data::FileOrigin origin, Data::FileOrigin origin,
bool forceRemoteLoader) const bool forceRemoteLoader) const

View File

@ -348,10 +348,10 @@ float64 DocumentMedia::progress() const {
: (loaded() ? 1. : 0.); : (loaded() ? 1. : 0.);
} }
bool DocumentMedia::canBePlayed() const { bool DocumentMedia::canBePlayed(HistoryItem *item) const {
return !_owner->inappPlaybackFailed() return !_owner->inappPlaybackFailed()
&& _owner->useStreamingLoader() && _owner->useStreamingLoader()
&& (loaded() || _owner->canBeStreamed()); && (loaded() || _owner->canBeStreamed(item));
} }
bool DocumentMedia::thumbnailEnoughForSticker() const { bool DocumentMedia::thumbnailEnoughForSticker() const {

View File

@ -74,7 +74,7 @@ public:
[[nodiscard]] QByteArray bytes() const; [[nodiscard]] QByteArray bytes() const;
[[nodiscard]] bool loaded(bool check = false) const; [[nodiscard]] bool loaded(bool check = false) const;
[[nodiscard]] float64 progress() const; [[nodiscard]] float64 progress() const;
[[nodiscard]] bool canBePlayed() const; [[nodiscard]] bool canBePlayed(HistoryItem *item) const;
void automaticLoad(Data::FileOrigin origin, const HistoryItem *item); void automaticLoad(Data::FileOrigin origin, const HistoryItem *item);

View File

@ -252,7 +252,7 @@ void ResolveDocument(
if (document->isTheme() && media->loaded(true)) { if (document->isTheme() && media->loaded(true)) {
showDocument(); showDocument();
location.accessDisable(); location.accessDisable();
} else if (media->canBePlayed()) { } else if (media->canBePlayed(item)) {
if (document->isAudioFile() if (document->isAudioFile()
|| document->isVoiceMessage() || document->isVoiceMessage()
|| document->isVideoMessage()) { || document->isVideoMessage()) {

View File

@ -74,7 +74,7 @@ bool IsItemGoodForType(const not_null<HistoryItem*> item, Type type) {
|| ((videoType || photoVideoType) && videoDoc) || ((videoType || photoVideoType) && videoDoc)
|| (fileType && (document->isTheme() || (fileType && (document->isTheme()
|| document->isImage() || document->isImage()
|| !document->canBeStreamed())); || !document->canBeStreamed(item)));
} }
} // namespace } // namespace

View File

@ -1302,7 +1302,7 @@ std::unique_ptr<QMimeData> HistoryInner::prepareDrag() {
const auto pressedHandler = ClickHandler::getPressed(); const auto pressedHandler = ClickHandler::getPressed();
if (dynamic_cast<VoiceSeekClickHandler*>(pressedHandler.get()) if (dynamic_cast<VoiceSeekClickHandler*>(pressedHandler.get())
|| !_peer->allowsForwarding()) { || hasCopyRestriction()) {
return nullptr; return nullptr;
} }
@ -1546,7 +1546,7 @@ void HistoryInner::mouseActionFinish(
if (QGuiApplication::clipboard()->supportsSelection() if (QGuiApplication::clipboard()->supportsSelection()
&& !_selected.empty() && !_selected.empty()
&& _selected.cbegin()->second != FullSelection && _selected.cbegin()->second != FullSelection
&& _peer->allowsForwarding()) { && !hasCopyRestriction()) {
const auto [item, selection] = *_selected.cbegin(); const auto [item, selection] = *_selected.cbegin();
if (const auto view = item->mainView()) { if (const auto view = item->mainView()) {
TextUtilities::SetClipboardText( TextUtilities::SetClipboardText(
@ -1725,7 +1725,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
}; };
const auto addPhotoActions = [&](not_null<PhotoData*> photo) { const auto addPhotoActions = [&](not_null<PhotoData*> photo) {
const auto media = photo->activeMediaView(); const auto media = photo->activeMediaView();
if (!photo->isNull() && media && media->loaded() && _peer->allowsForwarding()) { if (!photo->isNull() && media && media->loaded() && !hasCopyRestriction()) {
_menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { _menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] {
savePhotoToFile(photo); savePhotoToFile(photo);
})); }));
@ -1767,16 +1767,18 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
openContextGif(itemId); openContextGif(itemId);
}); });
} }
_menu->addAction(tr::lng_context_save_gif(tr::now), [=] { if (!hasCopyRestriction()) {
saveContextGif(itemId); _menu->addAction(tr::lng_context_save_gif(tr::now), [=] {
}); saveContextGif(itemId);
});
}
} }
if (!document->filepath(true).isEmpty()) { if (!document->filepath(true).isEmpty()) {
_menu->addAction(Platform::IsMac() ? tr::lng_context_show_in_finder(tr::now) : tr::lng_context_show_in_folder(tr::now), [=] { _menu->addAction(Platform::IsMac() ? tr::lng_context_show_in_finder(tr::now) : tr::lng_context_show_in_folder(tr::now), [=] {
showContextInFolder(document); showContextInFolder(document);
}); });
} }
if (_peer->allowsForwarding()) { if (!hasCopyRestriction()) {
_menu->addAction(lnkIsVideo ? tr::lng_context_save_video(tr::now) : (lnkIsVoice ? tr::lng_context_save_audio(tr::now) : (lnkIsAudio ? tr::lng_context_save_audio_file(tr::now) : tr::lng_context_save_file(tr::now))), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { _menu->addAction(lnkIsVideo ? tr::lng_context_save_video(tr::now) : (lnkIsVoice ? tr::lng_context_save_audio(tr::now) : (lnkIsAudio ? tr::lng_context_save_audio_file(tr::now) : tr::lng_context_save_file(tr::now))), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] {
saveDocumentToFile(itemId, document); saveDocumentToFile(itemId, document);
})); }));
@ -1830,7 +1832,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
if (lnkPhoto || lnkDocument) { if (lnkPhoto || lnkDocument) {
const auto item = _dragStateItem; const auto item = _dragStateItem;
const auto itemId = item ? item->fullId() : FullMsgId(); const auto itemId = item ? item->fullId() : FullMsgId();
if (isUponSelected > 0 && _peer->allowsForwarding()) { if (isUponSelected > 0 && !hasCopyRestriction()) {
_menu->addAction( _menu->addAction(
(isUponSelected > 1 (isUponSelected > 1
? tr::lng_context_copy_selected_items(tr::now) ? tr::lng_context_copy_selected_items(tr::now)
@ -1911,7 +1913,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
const auto view = item ? item->mainView() : nullptr; const auto view = item ? item->mainView() : nullptr;
if (isUponSelected > 0) { if (isUponSelected > 0) {
if (_peer->allowsForwarding()) { if (!hasCopyRestriction()) {
_menu->addAction( _menu->addAction(
((isUponSelected > 1) ((isUponSelected > 1)
? tr::lng_context_copy_selected_items(tr::now) ? tr::lng_context_copy_selected_items(tr::now)
@ -1934,7 +1936,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
Api::ToggleFavedSticker(document, itemId); Api::ToggleFavedSticker(document, itemId);
}); });
} }
if (_peer->allowsForwarding()) { if (!hasCopyRestriction()) {
_menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { _menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] {
saveDocumentToFile(itemId, document); saveDocumentToFile(itemId, document);
})); }));
@ -1963,7 +1965,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
if (!item->isService() if (!item->isService()
&& view && view
&& !link && !link
&& _peer->allowsForwarding() && !hasCopyRestriction()
&& (view->hasVisibleText() || mediaHasTextForCopy)) { && (view->hasVisibleText() || mediaHasTextForCopy)) {
_menu->addAction(tr::lng_context_copy_text(tr::now), [=] { _menu->addAction(tr::lng_context_copy_text(tr::now), [=] {
copyContextText(itemId); copyContextText(itemId);
@ -2135,7 +2137,9 @@ void HistoryInner::openContextGif(FullMsgId itemId) {
} }
void HistoryInner::saveContextGif(FullMsgId itemId) { void HistoryInner::saveContextGif(FullMsgId itemId) {
if (const auto item = session().data().message(itemId)) { if (hasCopyRestriction()) {
return;
} else if (const auto item = session().data().message(itemId)) {
if (const auto media = item->media()) { if (const auto media = item->media()) {
if (const auto document = media->document()) { if (const auto document = media->document()) {
Api::ToggleSavedGif(document, item->fullId(), true); Api::ToggleSavedGif(document, item->fullId(), true);

View File

@ -241,7 +241,7 @@ void AddDocumentActions(
OpenGif(list->controller(), contextId); OpenGif(list->controller(), contextId);
}); });
} }
if (document->isGifv()) { if (document->isGifv() && !list->hasCopyRestriction()) {
menu->addAction(tr::lng_context_save_gif(tr::now), [=] { menu->addAction(tr::lng_context_save_gif(tr::now), [=] {
SaveGif(list->controller(), contextId); SaveGif(list->controller(), contextId);
}); });

View File

@ -329,7 +329,7 @@ void Document::draw(
const auto cornerDownload = downloadInCorner(); const auto cornerDownload = downloadInCorner();
if (!_dataMedia->canBePlayed()) { if (!_dataMedia->canBePlayed(_realParent)) {
_dataMedia->automaticLoad(_realParent->fullId(), _realParent); _dataMedia->automaticLoad(_realParent->fullId(), _realParent);
} }
bool loaded = dataLoaded(), displayLoading = _data->displayLoading(); bool loaded = dataLoaded(), displayLoading = _data->displayLoading();
@ -452,8 +452,8 @@ void Document::draw(
return _data->isSongWithCover() return _data->isSongWithCover()
? sti->historyFileThumbPause ? sti->historyFileThumbPause
: stm->historyFilePause; : stm->historyFilePause;
} else if (loaded || _dataMedia->canBePlayed()) { } else if (loaded || _dataMedia->canBePlayed(_realParent)) {
return _dataMedia->canBePlayed() return _dataMedia->canBePlayed(_realParent)
? (_data->isSongWithCover() ? (_data->isSongWithCover()
? sti->historyFileThumbPlay ? sti->historyFileThumbPlay
: stm->historyFilePlay) : stm->historyFilePlay)
@ -593,7 +593,8 @@ void Document::ensureDataMediaCreated() const {
bool Document::downloadInCorner() const { bool Document::downloadInCorner() const {
return _data->isAudioFile() return _data->isAudioFile()
&& _data->canBeStreamed() && _realParent->history()->peer->allowsForwarding()
&& _data->canBeStreamed(_realParent)
&& !_data->inappPlaybackFailed() && !_data->inappPlaybackFailed()
&& _realParent->isRegular(); && _realParent->isRegular();
} }
@ -782,7 +783,7 @@ TextState Document::textState(
&& (!_data->loading() || downloadInCorner()) && (!_data->loading() || downloadInCorner())
&& !_data->uploading() && !_data->uploading()
&& !_data->isNull()) { && !_data->isNull()) {
if (loaded || _dataMedia->canBePlayed()) { if (loaded || _dataMedia->canBePlayed(_realParent)) {
result.link = _openl; result.link = _openl;
} else { } else {
result.link = _savel; result.link = _savel;

View File

@ -264,7 +264,8 @@ QSize Gif::videoSize() const {
bool Gif::downloadInCorner() const { bool Gif::downloadInCorner() const {
return _data->isVideoFile() return _data->isVideoFile()
&& (_data->loading() || !autoplayEnabled()) && (_data->loading() || !autoplayEnabled())
&& _data->canBeStreamed() && _realParent->history()->peer->allowsForwarding()
&& _data->canBeStreamed(_realParent)
&& !_data->inappPlaybackFailed() && !_data->inappPlaybackFailed()
&& !_parent->data()->isSending(); && !_parent->data()->isSending();
} }
@ -288,7 +289,7 @@ void Gif::draw(Painter &p, const PaintContext &context) const {
const auto stm = context.messageStyle(); const auto stm = context.messageStyle();
const auto autoPaused = _parent->delegate()->elementIsGifPaused(); const auto autoPaused = _parent->delegate()->elementIsGifPaused();
const auto cornerDownload = downloadInCorner(); const auto cornerDownload = downloadInCorner();
const auto canBePlayed = _dataMedia->canBePlayed(); const auto canBePlayed = _dataMedia->canBePlayed(_realParent);
const auto autoplay = autoplayEnabled() const auto autoplay = autoplayEnabled()
&& canBePlayed && canBePlayed
&& CanPlayInline(_data); && CanPlayInline(_data);
@ -836,7 +837,7 @@ TextState Gif::textState(QPoint point, StateRequest request) const {
? _cancell ? _cancell
: _realParent->isSending() : _realParent->isSending()
? nullptr ? nullptr
: (dataLoaded() || _dataMedia->canBePlayed()) : (dataLoaded() || _dataMedia->canBePlayed(_realParent))
? _openl ? _openl
: _data->loading() : _data->loading()
? _cancell ? _cancell
@ -917,7 +918,7 @@ void Gif::drawGrouped(
const auto autoPaused = _parent->delegate()->elementIsGifPaused(); const auto autoPaused = _parent->delegate()->elementIsGifPaused();
const auto fullFeatured = fullFeaturedGrouped(sides); const auto fullFeatured = fullFeaturedGrouped(sides);
const auto cornerDownload = fullFeatured && downloadInCorner(); const auto cornerDownload = fullFeatured && downloadInCorner();
const auto canBePlayed = _dataMedia->canBePlayed(); const auto canBePlayed = _dataMedia->canBePlayed(_realParent);
const auto autoplay = fullFeatured const auto autoplay = fullFeatured
&& autoplayEnabled() && autoplayEnabled()
&& canBePlayed && canBePlayed
@ -1109,7 +1110,7 @@ TextState Gif::getStateGrouped(
? _cancell ? _cancell
: _realParent->isSending() : _realParent->isSending()
? nullptr ? nullptr
: (dataLoaded() || _dataMedia->canBePlayed()) : (dataLoaded() || _dataMedia->canBePlayed(_realParent))
? _openl ? _openl
: _data->loading() : _data->loading()
? _cancell ? _cancell
@ -1258,7 +1259,7 @@ void Gif::updateStatusText() const {
statusSize = _data->uploadingData->offset; statusSize = _data->uploadingData->offset;
} else if (!downloadInCorner() && _data->loading()) { } else if (!downloadInCorner() && _data->loading()) {
statusSize = _data->loadOffset(); statusSize = _data->loadOffset();
} else if (dataLoaded() || _dataMedia->canBePlayed()) { } else if (dataLoaded() || _dataMedia->canBePlayed(_realParent)) {
statusSize = Ui::FileStatusSizeLoaded; statusSize = Ui::FileStatusSizeLoaded;
} else { } else {
statusSize = Ui::FileStatusSizeReady; statusSize = Ui::FileStatusSizeReady;
@ -1386,7 +1387,7 @@ void Gif::playAnimation(bool autoplay) {
} }
if (_streamed) { if (_streamed) {
stopAnimation(); stopAnimation();
} else if (_dataMedia->canBePlayed()) { } else if (_dataMedia->canBePlayed(_realParent)) {
if (!autoplayEnabled()) { if (!autoplayEnabled()) {
history()->owner().checkPlayingAnimations(); history()->owner().checkPlayingAnimations();
} }

View File

@ -190,7 +190,7 @@ ClickHandlerPtr ItemBase::getResultPreviewHandler() const {
_result->_content_url, _result->_content_url,
false); false);
} else if (const auto document = _result->_document } else if (const auto document = _result->_document
; document && document->createMediaView()->canBePlayed()) { ; document && document->createMediaView()->canBePlayed(nullptr)) {
return std::make_shared<OpenFileClickHandler>(); return std::make_shared<OpenFileClickHandler>();
} else if (_result->_photo) { } else if (_result->_photo) {
return std::make_shared<OpenFileClickHandler>(); return std::make_shared<OpenFileClickHandler>();

View File

@ -1212,7 +1212,7 @@ bool OverlayWidget::radialAnimationCallback(crl::time now) {
update(radialRect()); update(radialRect());
} }
const auto ready = _document && _documentMedia->loaded(); const auto ready = _document && _documentMedia->loaded();
const auto streamVideo = ready && _documentMedia->canBePlayed(); const auto streamVideo = ready && _documentMedia->canBePlayed(_message);
const auto tryOpenImage = ready const auto tryOpenImage = ready
&& (_document->size < Images::kReadBytesLimit); && (_document->size < Images::kReadBytesLimit);
if (ready && ((tryOpenImage && !_radial.animating()) || streamVideo)) { if (ready && ((tryOpenImage && !_radial.animating()) || streamVideo)) {
@ -1693,7 +1693,7 @@ void OverlayWidget::downloadMedia() {
void OverlayWidget::saveCancel() { void OverlayWidget::saveCancel() {
if (_document && _document->loading()) { if (_document && _document->loading()) {
_document->cancel(); _document->cancel();
if (_documentMedia->canBePlayed()) { if (_documentMedia->canBePlayed(_message)) {
redisplayContent(); redisplayContent();
} }
} }
@ -2429,7 +2429,7 @@ void OverlayWidget::displayDocument(
).toImage()); ).toImage());
} }
} else { } else {
if (_documentMedia->canBePlayed() if (_documentMedia->canBePlayed(_message)
&& initStreaming(continueStreaming)) { && initStreaming(continueStreaming)) {
} else if (_document->isVideoFile()) { } else if (_document->isVideoFile()) {
_documentMedia->automaticLoad(fileOrigin(), _message); _documentMedia->automaticLoad(fileOrigin(), _message);
@ -2577,7 +2577,7 @@ void OverlayWidget::displayFinished() {
} }
bool OverlayWidget::canInitStreaming() const { bool OverlayWidget::canInitStreaming() const {
return (_document && _documentMedia->canBePlayed()) return (_document && _documentMedia->canBePlayed(_message))
|| (_photo && _photo->videoCanBePlayed()); || (_photo && _photo->videoCanBePlayed());
} }
@ -4106,7 +4106,7 @@ void OverlayWidget::preloadData(int delta) {
const auto [i, ok] = documents.emplace( const auto [i, ok] = documents.emplace(
(*document)->createMediaView()); (*document)->createMediaView());
(*i)->thumbnailWanted(fileOrigin(entity)); (*i)->thumbnailWanted(fileOrigin(entity));
if (!(*i)->canBePlayed()) { if (!(*i)->canBePlayed(entity.item)) {
(*i)->automaticLoad(fileOrigin(entity), entity.item); (*i)->automaticLoad(fileOrigin(entity), entity.item);
} }
} }

View File

@ -484,7 +484,7 @@ void Video::paint(Painter &p, const QRect &clip, TextSelection selection, const
if (!selected && !context->selecting && radialOpacity < 1.) { if (!selected && !context->selecting && radialOpacity < 1.) {
if (clip.intersects(QRect(0, _height - st::normalFont->height, _width, st::normalFont->height))) { if (clip.intersects(QRect(0, _height - st::normalFont->height, _width, st::normalFont->height))) {
const auto download = !loaded && !_dataMedia->canBePlayed(); const auto download = !loaded && !_dataMedia->canBePlayed(parent());
const auto &icon = download const auto &icon = download
? (selected ? st::overviewVideoDownloadSelected : st::overviewVideoDownload) ? (selected ? st::overviewVideoDownloadSelected : st::overviewVideoDownload)
: (selected ? st::overviewVideoPlaySelected : st::overviewVideoPlay); : (selected ? st::overviewVideoPlaySelected : st::overviewVideoPlay);
@ -510,7 +510,7 @@ void Video::paint(Painter &p, const QRect &clip, TextSelection selection, const
if (selected) { if (selected) {
p.setBrush(st::msgDateImgBgSelected); p.setBrush(st::msgDateImgBgSelected);
} else { } else {
auto over = ClickHandler::showAsActive((_data->loading() || _data->uploading()) ? _cancell : (loaded || _dataMedia->canBePlayed()) ? _openl : _savel); auto over = ClickHandler::showAsActive((_data->loading() || _data->uploading()) ? _cancell : (loaded || _dataMedia->canBePlayed(parent())) ? _openl : _savel);
p.setBrush(anim::brush(st::msgDateImgBg, st::msgDateImgBgOver, _a_iconOver.value(over ? 1. : 0.))); p.setBrush(anim::brush(st::msgDateImgBg, st::msgDateImgBgOver, _a_iconOver.value(over ? 1. : 0.)));
} }
@ -576,7 +576,7 @@ TextState Video::getState(
ensureDataMediaCreated(); ensureDataMediaCreated();
const auto link = (_data->loading() || _data->uploading()) const auto link = (_data->loading() || _data->uploading())
? _cancell ? _cancell
: (dataLoaded() || _dataMedia->canBePlayed()) : (dataLoaded() || _dataMedia->canBePlayed(parent()))
? _openl ? _openl
: _savel; : _savel;
return { parent(), link }; return { parent(), link };
@ -704,7 +704,7 @@ void Voice::paint(Painter &p, const QRect &clip, TextSelection selection, const
} }
const auto &checkLink = (_data->loading() || _data->uploading()) const auto &checkLink = (_data->loading() || _data->uploading())
? _cancell ? _cancell
: (_dataMedia->canBePlayed() || loaded) : (_dataMedia->canBePlayed(parent()) || loaded)
? _openl ? _openl
: _savel; : _savel;
if (selected) { if (selected) {
@ -732,7 +732,7 @@ void Voice::paint(Painter &p, const QRect &clip, TextSelection selection, const
return &(selected ? _st.voiceCancelSelected : _st.voiceCancel); return &(selected ? _st.voiceCancelSelected : _st.voiceCancel);
} else if (showPause) { } else if (showPause) {
return &(selected ? _st.voicePauseSelected : _st.voicePause); return &(selected ? _st.voicePauseSelected : _st.voicePause);
} else if (_dataMedia->canBePlayed()) { } else if (_dataMedia->canBePlayed(parent())) {
return &(selected ? _st.voicePlaySelected : _st.voicePlay); return &(selected ? _st.voicePlaySelected : _st.voicePlay);
} }
return &(selected return &(selected
@ -802,7 +802,7 @@ TextState Voice::getState(
if (inner.contains(point)) { if (inner.contains(point)) {
const auto link = (_data->loading() || _data->uploading()) const auto link = (_data->loading() || _data->uploading())
? _cancell ? _cancell
: (_dataMedia->canBePlayed() || loaded) : (_dataMedia->canBePlayed(parent()) || loaded)
? _openl ? _openl
: _savel; : _savel;
return { parent(), link }; return { parent(), link };
@ -969,7 +969,8 @@ Document::Document(
bool Document::downloadInCorner() const { bool Document::downloadInCorner() const {
return _data->isAudioFile() return _data->isAudioFile()
&& _data->canBeStreamed() && parent()->history()->peer->allowsForwarding()
&& _data->canBeStreamed(parent())
&& !_data->inappPlaybackFailed() && !_data->inappPlaybackFailed()
&& parent()->isRegular(); && parent()->isRegular();
} }
@ -1033,7 +1034,7 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con
} else { } else {
const auto over = ClickHandler::showAsActive(isLoading const auto over = ClickHandler::showAsActive(isLoading
? _cancell ? _cancell
: (loaded || _dataMedia->canBePlayed()) : (loaded || _dataMedia->canBePlayed(parent()))
? _openl ? _openl
: _savel); : _savel);
p.setBrush(anim::brush( p.setBrush(anim::brush(
@ -1055,7 +1056,7 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con
return &(selected return &(selected
? _st.voicePauseSelected ? _st.voicePauseSelected
: _st.voicePause); : _st.voicePause);
} else if (loaded || _dataMedia->canBePlayed()) { } else if (loaded || _dataMedia->canBePlayed(parent())) {
return &(selected return &(selected
? _st.voicePlaySelected ? _st.voicePlaySelected
: _st.voicePlay); : _st.voicePlay);
@ -1068,7 +1069,7 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con
return &(selected ? _st.songCancelSelected : _st.songCancel); return &(selected ? _st.songCancelSelected : _st.songCancel);
} else if (showPause) { } else if (showPause) {
return &(selected ? _st.songPauseSelected : _st.songPause); return &(selected ? _st.songPauseSelected : _st.songPause);
} else if (loaded || _dataMedia->canBePlayed()) { } else if (loaded || _dataMedia->canBePlayed(parent())) {
return &(selected ? _st.songPlaySelected : _st.songPlay); return &(selected ? _st.songPlaySelected : _st.songPlay);
} }
return &(selected ? _st.songDownloadSelected : _st.songDownload); return &(selected ? _st.songDownloadSelected : _st.songDownload);
@ -1280,7 +1281,7 @@ TextState Document::getState(
const auto link = (!downloadInCorner() const auto link = (!downloadInCorner()
&& (_data->loading() || _data->uploading())) && (_data->loading() || _data->uploading()))
? _cancell ? _cancell
: (loaded || _dataMedia->canBePlayed()) : (loaded || _dataMedia->canBePlayed(parent()))
? _openl ? _openl
: _savel; : _savel;
return { parent(), link }; return { parent(), link };