diff --git a/Telegram/SourceFiles/core/core_settings.cpp b/Telegram/SourceFiles/core/core_settings.cpp index d3f090230..9e1046636 100644 --- a/Telegram/SourceFiles/core/core_settings.cpp +++ b/Telegram/SourceFiles/core/core_settings.cpp @@ -222,7 +222,7 @@ QByteArray Settings::serialize() const { + Serialize::stringSize(_customFontFamily) + sizeof(qint32) * 3 + Serialize::bytearraySize(_tonsiteStorageToken) - + sizeof(qint32) * 4; + + sizeof(qint32) * 5; auto result = QByteArray(); result.reserve(size); @@ -380,7 +380,8 @@ QByteArray Settings::serialize() const { << qint32(_includeMutedCounterFolders ? 1 : 0) << qint32(_ivZoom.current()) << qint32(_skipToastsInFocus ? 1 : 0) - << qint32(_recordVideoMessages ? 1 : 0); + << qint32(_recordVideoMessages ? 1 : 0) + << qint32(_videoQuality); } Ensures(result.size() == size); @@ -507,6 +508,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { qint32 ivZoom = _ivZoom.current(); qint32 skipToastsInFocus = _skipToastsInFocus ? 1 : 0; qint32 recordVideoMessages = _recordVideoMessages ? 1 : 0; + qint32 videoQuality = _videoQuality; stream >> themesAccentColors; if (!stream.atEnd()) { @@ -825,6 +827,9 @@ void Settings::addFromSerialized(const QByteArray &serialized) { if (!stream.atEnd()) { stream >> recordVideoMessages; } + if (!stream.atEnd()) { + stream >> videoQuality; + } if (stream.status() != QDataStream::Ok) { LOG(("App Error: " "Bad data for Core::Settings::constructFromSerialized()")); @@ -1039,6 +1044,9 @@ void Settings::addFromSerialized(const QByteArray &serialized) { _ivZoom = ivZoom; _skipToastsInFocus = (skipToastsInFocus == 1); _recordVideoMessages = (recordVideoMessages == 1); + _videoQuality = (videoQuality >= 0 && videoQuality <= 4320) + ? videoQuality + : 0; } QString Settings::getSoundPath(const QString &key) const { @@ -1429,6 +1437,7 @@ void Settings::resetOnLastLogout() { _ttlVoiceClickTooltipHidden = false; _ivZoom = 100; _recordVideoMessages = false; + _videoQuality = 0; _recentEmojiPreload.clear(); _recentEmoji.clear(); @@ -1572,6 +1581,7 @@ auto Settings::skipTranslationLanguagesValue() const void Settings::setRememberedDeleteMessageOnlyForYou(bool value) { _rememberedDeleteMessageOnlyForYou = value; } + bool Settings::rememberedDeleteMessageOnlyForYou() const { return _rememberedDeleteMessageOnlyForYou; } @@ -1579,9 +1589,11 @@ bool Settings::rememberedDeleteMessageOnlyForYou() const { int Settings::ivZoom() const { return _ivZoom.current(); } + rpl::producer Settings::ivZoomValue() const { return _ivZoom.value(); } + void Settings::setIvZoom(int value) { #ifdef Q_OS_WIN constexpr auto kMin = 25; @@ -1593,4 +1605,12 @@ void Settings::setIvZoom(int value) { _ivZoom = std::clamp(value, kMin, kMax); } +int Settings::videoQuality() const { + return _videoQuality; +} + +void Settings::setVideoQuality(int value) { + _videoQuality = value; +} + } // namespace Core diff --git a/Telegram/SourceFiles/core/core_settings.h b/Telegram/SourceFiles/core/core_settings.h index b1fce992b..30040ee25 100644 --- a/Telegram/SourceFiles/core/core_settings.h +++ b/Telegram/SourceFiles/core/core_settings.h @@ -929,6 +929,9 @@ public: [[nodiscard]] rpl::producer ivZoomValue() const; void setIvZoom(int value); + [[nodiscard]] int videoQuality() const; + void setVideoQuality(int quality); + [[nodiscard]] static bool ThirdColumnByDefault(); [[nodiscard]] static float64 DefaultDialogsWidthRatio(); @@ -1066,6 +1069,7 @@ private: std::optional _weatherInCelsius; QByteArray _tonsiteStorageToken; rpl::variable _ivZoom = 100; + int _videoQuality = 0; bool _tabbedReplacedWithInfo = false; // per-window rpl::event_stream _tabbedReplacedWithInfoValue; // per-window diff --git a/Telegram/SourceFiles/media/streaming/media_streaming_document.cpp b/Telegram/SourceFiles/media/streaming/media_streaming_document.cpp index 27c090443..9e7a083a2 100644 --- a/Telegram/SourceFiles/media/streaming/media_streaming_document.cpp +++ b/Telegram/SourceFiles/media/streaming/media_streaming_document.cpp @@ -192,11 +192,9 @@ void Document::waitingChange(bool waiting) { _radial.start( st::defaultInfiniteRadialAnimation.sineDuration); } - _fading.start( - [=] { waitingCallback(); }, - _waiting ? 0. : 1., - _waiting ? 1. : 0., - duration); + _fading.start([=] { + waitingCallback(); + }, _waiting ? 0. : 1., _waiting ? 1. : 0., duration); }; if (waiting) { if (_radial.animating()) { diff --git a/Telegram/SourceFiles/media/streaming/media_streaming_player.cpp b/Telegram/SourceFiles/media/streaming/media_streaming_player.cpp index 699cbdf58..b4133b0da 100644 --- a/Telegram/SourceFiles/media/streaming/media_streaming_player.cpp +++ b/Telegram/SourceFiles/media/streaming/media_streaming_player.cpp @@ -958,7 +958,9 @@ Media::Player::TrackState Player::prepareLegacyState() const { if (duration > 0) { result.length = duration; } else { - result.length = std::max(crl::time(result.position), crl::time(0)); + result.length = std::max( + crl::time(result.position), + crl::time(0)); } } return result; diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 580d5e120..435e4d8d1 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -489,6 +489,7 @@ OverlayWidget::OverlayWidget() , _widget(_surface->rpWidget()) , _fullscreen(Core::App().settings().mediaViewPosition().maximized == 2) , _windowed(Core::App().settings().mediaViewPosition().maximized == 0) +, _quality(Core::App().settings().videoQuality()) , _layerBg(std::make_unique(_body)) , _docDownload(_body, tr::lng_media_download(tr::now), st::mediaviewFileLink) , _docSaveAs(_body, tr::lng_mediaview_save_as(tr::now), st::mediaviewFileLink) @@ -4436,6 +4437,8 @@ void OverlayWidget::playbackControlsQualityChanged(int quality) { const auto now = _chosenQuality; if (_quality != quality) { _quality = quality; + Core::App().settings().setVideoQuality(quality); + Core::App().saveSettingsDelayed(); if (_document) { _chosenQuality = chooseQuality(); if (_chosenQuality != now) { diff --git a/Telegram/SourceFiles/media/view/media_view_playback_controls.cpp b/Telegram/SourceFiles/media/view/media_view_playback_controls.cpp index 16ca4b8c4..8ec6bd86c 100644 --- a/Telegram/SourceFiles/media/view/media_view_playback_controls.cpp +++ b/Telegram/SourceFiles/media/view/media_view_playback_controls.cpp @@ -34,7 +34,8 @@ PlaybackControls::PlaybackControls( , _playbackProgress(std::make_unique()) , _volumeToggle(this, st::mediaviewVolumeToggle) , _volumeController(this, st::mediaviewPlayback) -, _speedToggle(Media::Audio::SupportsSpeedControl() +, _speedToggle((Media::Audio::SupportsSpeedControl() + || !_delegate->playbackControlsQualities().empty()) ? object_ptr(this, st::mediaviewSpeedButton) : nullptr) , _fullScreenToggle(this, st::mediaviewFullScreenButton)