diff --git a/Telegram/SourceFiles/data/data_document.cpp b/Telegram/SourceFiles/data/data_document.cpp index f97129f351..7df823b626 100644 --- a/Telegram/SourceFiles/data/data_document.cpp +++ b/Telegram/SourceFiles/data/data_document.cpp @@ -547,7 +547,7 @@ void DocumentData::setVideoQualities( return document->isVideoFile() && !document->dimensions.isEmpty() && !document->inappPlaybackFailed() - && document->useStreamingLoader(nullptr) + && document->useStreamingLoader() && document->canBeStreamed(nullptr); }; ranges::sort( @@ -1533,35 +1533,29 @@ bool DocumentData::hasRemoteLocation() const { return (_dc != 0 && _access != 0); } -bool DocumentData::canVideoBeStreamed(HistoryItem *item) const { - if (!isVideoFile()) { - return false; - } - // Streaming couldn't be used with external player - // Maybe someone brave will implement this once upon a time... - static const auto &ExternalVideoPlayer = base::options::lookup( - Data::kOptionExternalVideoPlayer); - return storyMedia() - || !ExternalVideoPlayer.value() - || (item && !item->allowsForward()); -} - -bool DocumentData::useStreamingLoader(HistoryItem *item) const { +bool DocumentData::useStreamingLoader() const { if (size <= 0) { return false; } else if (const auto info = sticker()) { return info->isWebm(); } return isAnimation() - || canVideoBeStreamed(item) + || isVideoFile() || isAudioFile() || isVoiceMessage(); } bool DocumentData::canBeStreamed(HistoryItem *item) const { + // Streaming couldn't be used with external player + // Maybe someone brave will implement this once upon a time... + static const auto &ExternalVideoPlayer = base::options::lookup( + Data::kOptionExternalVideoPlayer); return hasRemoteLocation() && supportsStreaming() - && (!isVideoFile() || canVideoBeStreamed(item)); + && (!isVideoFile() + || storyMedia() + || !ExternalVideoPlayer.value() + || (item && !item->allowsForward())); } void DocumentData::setInappPlaybackFailed() { @@ -1591,10 +1585,9 @@ StorageFileLocation DocumentData::videoPreloadLocation() const { auto DocumentData::createStreamingLoader( Data::FileOrigin origin, - bool forceRemoteLoader, - HistoryItem *item) const + bool forceRemoteLoader) const -> std::unique_ptr { - if (!useStreamingLoader(item)) { + if (!useStreamingLoader()) { return nullptr; } if (!forceRemoteLoader) { diff --git a/Telegram/SourceFiles/data/data_document.h b/Telegram/SourceFiles/data/data_document.h index 6fd2ba0ed8..b0918a37c8 100644 --- a/Telegram/SourceFiles/data/data_document.h +++ b/Telegram/SourceFiles/data/data_document.h @@ -294,10 +294,9 @@ public: [[nodiscard]] bool canBeStreamed(HistoryItem *item) const; [[nodiscard]] auto createStreamingLoader( Data::FileOrigin origin, - bool forceRemoteLoader, - HistoryItem *item) const + bool forceRemoteLoader) const -> std::unique_ptr; - [[nodiscard]] bool useStreamingLoader(HistoryItem *item) const; + [[nodiscard]] bool useStreamingLoader() const; void setInappPlaybackFailed(); [[nodiscard]] bool inappPlaybackFailed() const; @@ -359,7 +358,6 @@ private: friend class Serialize::Document; [[nodiscard]] LocationType locationType() const; - [[nodiscard]] bool canVideoBeStreamed(HistoryItem *item) const; void validateLottieSticker(); void setMaybeSupportsStreaming(bool supports); void setLoadedInMediaCacheLocation(); diff --git a/Telegram/SourceFiles/data/data_document_media.cpp b/Telegram/SourceFiles/data/data_document_media.cpp index 045c894216..6bf6bc22f1 100644 --- a/Telegram/SourceFiles/data/data_document_media.cpp +++ b/Telegram/SourceFiles/data/data_document_media.cpp @@ -360,7 +360,7 @@ float64 DocumentMedia::progress() const { bool DocumentMedia::canBePlayed(HistoryItem *item) const { return !_owner->inappPlaybackFailed() - && _owner->useStreamingLoader(item) + && _owner->useStreamingLoader() && (loaded() || _owner->canBeStreamed(item)); } diff --git a/Telegram/SourceFiles/data/data_photo.cpp b/Telegram/SourceFiles/data/data_photo.cpp index 8364a3e7ff..0a2d37f8f3 100644 --- a/Telegram/SourceFiles/data/data_photo.cpp +++ b/Telegram/SourceFiles/data/data_photo.cpp @@ -565,8 +565,7 @@ bool PhotoData::videoCanBePlayed() const { auto PhotoData::createStreamingLoader( Data::FileOrigin origin, - bool forceRemoteLoader, - HistoryItem *item) const + bool forceRemoteLoader) const -> std::unique_ptr { if (!hasVideo()) { return nullptr; diff --git a/Telegram/SourceFiles/data/data_photo.h b/Telegram/SourceFiles/data/data_photo.h index d159364171..3cd749a715 100644 --- a/Telegram/SourceFiles/data/data_photo.h +++ b/Telegram/SourceFiles/data/data_photo.h @@ -150,8 +150,7 @@ public: [[nodiscard]] bool videoCanBePlayed() const; [[nodiscard]] auto createStreamingLoader( Data::FileOrigin origin, - bool forceRemoteLoader, - HistoryItem *item) const + bool forceRemoteLoader) const -> std::unique_ptr; [[nodiscard]] bool hasAttachedStickers() const; diff --git a/Telegram/SourceFiles/data/data_streaming.cpp b/Telegram/SourceFiles/data/data_streaming.cpp index 12dcae48bd..658c83807e 100644 --- a/Telegram/SourceFiles/data/data_streaming.cpp +++ b/Telegram/SourceFiles/data/data_streaming.cpp @@ -78,15 +78,6 @@ bool PruneDestroyedAndSet( return {}; } -[[nodiscard]] HistoryItem *LookupContext( - not_null owner, - const FileOrigin &origin) { - if (const auto message = std::get_if(&origin.data)) { - return owner->message(*message); - } - return nullptr; -} - } // namespace Streaming::Streaming(not_null owner) @@ -101,7 +92,6 @@ template base::flat_map, std::weak_ptr> &readers, not_null data, FileOrigin origin, - HistoryItem *context, bool forceRemoteLoader) { const auto i = readers.find(data); if (i != end(readers)) { @@ -111,10 +101,7 @@ template } } } - auto loader = data->createStreamingLoader( - origin, - forceRemoteLoader, - context); + auto loader = data->createStreamingLoader(origin, forceRemoteLoader); if (!loader) { return nullptr; } @@ -146,7 +133,7 @@ template return result; } } - auto reader = sharedReader(readers, data, origin, context); + auto reader = sharedReader(readers, data, origin); if (!reader) { return nullptr; } @@ -188,25 +175,18 @@ std::shared_ptr Streaming::sharedReader( not_null document, FileOrigin origin, bool forceRemoteLoader) { - const auto context = LookupContext(_owner, origin); - return sharedReader( - _fileReaders, - document, - origin, - context, - forceRemoteLoader); + return sharedReader(_fileReaders, document, origin, forceRemoteLoader); } std::shared_ptr Streaming::sharedDocument( not_null document, FileOrigin origin) { - const auto context = LookupContext(_owner, origin); return sharedDocument( _fileDocuments, _fileReaders, document, nullptr, - context, + nullptr, origin); } @@ -228,25 +208,18 @@ std::shared_ptr Streaming::sharedReader( not_null photo, FileOrigin origin, bool forceRemoteLoader) { - const auto context = LookupContext(_owner, origin); - return sharedReader( - _photoReaders, - photo, - origin, - context, - forceRemoteLoader); + return sharedReader(_photoReaders, photo, origin, forceRemoteLoader); } std::shared_ptr Streaming::sharedDocument( not_null photo, FileOrigin origin) { - const auto context = LookupContext(_owner, origin); return sharedDocument( _photoDocuments, _photoReaders, photo, nullptr, - context, + nullptr, origin); } diff --git a/Telegram/SourceFiles/data/data_streaming.h b/Telegram/SourceFiles/data/data_streaming.h index 6799b0fd79..51a6f18549 100644 --- a/Telegram/SourceFiles/data/data_streaming.h +++ b/Telegram/SourceFiles/data/data_streaming.h @@ -11,7 +11,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL class PhotoData; class DocumentData; -class HistoryItem; namespace Media::Streaming { class Reader; @@ -65,7 +64,6 @@ private: base::flat_map, std::weak_ptr> &readers, not_null data, FileOrigin origin, - HistoryItem *context, bool forceRemoteLoader = false); template diff --git a/Telegram/SourceFiles/iv/iv_instance.cpp b/Telegram/SourceFiles/iv/iv_instance.cpp index 1c6f6df3c9..607ab87037 100644 --- a/Telegram/SourceFiles/iv/iv_instance.cpp +++ b/Telegram/SourceFiles/iv/iv_instance.cpp @@ -476,10 +476,7 @@ void Shown::streamFile( requestFail(std::move(request)); return; } - auto loader = document->createStreamingLoader( - fileOrigin(page), - false, - nullptr); + auto loader = document->createStreamingLoader(fileOrigin(page), false); if (!loader) { if (document->size >= Storage::kMaxFileInMemory) { requestFail(std::move(request));