From dd9e317257687a7f67b2e29d2429a02afcc3756c Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 30 Mar 2022 14:08:36 +0400 Subject: [PATCH] Recover after a streaming error. --- .../media/streaming/media_streaming_document.cpp | 9 +++++++-- .../media/streaming/media_streaming_document.h | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/media/streaming/media_streaming_document.cpp b/Telegram/SourceFiles/media/streaming/media_streaming_document.cpp index d936acc04..039b76261 100644 --- a/Telegram/SourceFiles/media/streaming/media_streaming_document.cpp +++ b/Telegram/SourceFiles/media/streaming/media_streaming_document.cpp @@ -62,12 +62,17 @@ Document::Document( , _radial( [=] { waitingCallback(); }, st::defaultInfiniteRadialAnimation) { - _player.updates( + resubscribe(); +} + +void Document::resubscribe() { + _subscription = _player.updates( ) | rpl::start_with_next_error([=](Update &&update) { handleUpdate(std::move(update)); }, [=](Streaming::Error &&error) { handleError(std::move(error)); - }, _player.lifetime()); + resubscribe(); + }); } Player &Document::player() { diff --git a/Telegram/SourceFiles/media/streaming/media_streaming_document.h b/Telegram/SourceFiles/media/streaming/media_streaming_document.h index 1d4dfb160..f192aebb1 100644 --- a/Telegram/SourceFiles/media/streaming/media_streaming_document.h +++ b/Telegram/SourceFiles/media/streaming/media_streaming_document.h @@ -62,12 +62,15 @@ private: void waitingChange(bool waiting); void validateGoodThumbnail(); + void resubscribe(); DocumentData *_document = nullptr; PhotoData *_photo = nullptr; Player _player; Information _info; + rpl::lifetime _subscription; + bool _waiting = false; mutable Ui::InfiniteRadialAnimation _radial; Ui::Animations::Simple _fading;