mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-15 13:47:05 +02:00
Implement loop status/shuffle for MPRIS
This commit is contained in:
parent
4c3835c61c
commit
ffe4208595
3 changed files with 56 additions and 2 deletions
|
@ -19,13 +19,26 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "main/main_account.h"
|
||||
#include "main/main_session.h"
|
||||
#include "media/audio/media_audio.h"
|
||||
#include "media/player/media_player_instance.h"
|
||||
#include "media/streaming/media_streaming_instance.h"
|
||||
#include "media/streaming/media_streaming_player.h"
|
||||
#include "ui/text/format_song_document_name.h"
|
||||
#include "window/window_controller.h"
|
||||
|
||||
namespace Media {
|
||||
namespace {
|
||||
|
||||
[[nodiscard]] auto RepeatModeToLoopStatus(Media::Player::RepeatMode mode) {
|
||||
using Mode = Media::Player::RepeatMode;
|
||||
using Status = base::Platform::SystemMediaControls::LoopStatus;
|
||||
switch (mode) {
|
||||
case Mode::None: return Status::None;
|
||||
case Mode::One: return Status::Track;
|
||||
case Mode::All: return Status::Playlist;
|
||||
}
|
||||
Unexpected("RepeatModeToLoopStatus in SystemMediaControlsManager");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
bool SystemMediaControlsManager::Supported() {
|
||||
return base::Platform::SystemMediaControls::Supported();
|
||||
|
@ -185,6 +198,22 @@ SystemMediaControlsManager::SystemMediaControlsManager(
|
|||
_controls->setIsPreviousEnabled(mediaPlayer->previousAvailable(type));
|
||||
}, _lifetime);
|
||||
|
||||
using Media::Player::RepeatMode;
|
||||
using Media::Player::OrderMode;
|
||||
|
||||
Core::App().settings().playerRepeatModeValue(
|
||||
) | rpl::start_with_next([=](RepeatMode mode) {
|
||||
_controls->setLoopStatus(RepeatModeToLoopStatus(mode));
|
||||
}, _lifetime);
|
||||
|
||||
Core::App().settings().playerOrderModeValue(
|
||||
) | rpl::start_with_next([=](OrderMode mode) {
|
||||
if (mode != OrderMode::Shuffle) {
|
||||
_lastOrderMode = mode;
|
||||
}
|
||||
_controls->setShuffle(mode == OrderMode::Shuffle);
|
||||
}, _lifetime);
|
||||
|
||||
_controls->commandRequests(
|
||||
) | rpl::start_with_next([=](Command command) {
|
||||
switch (command) {
|
||||
|
@ -195,6 +224,29 @@ SystemMediaControlsManager::SystemMediaControlsManager(
|
|||
case Command::Previous: mediaPlayer->previous(type); break;
|
||||
case Command::Stop: mediaPlayer->stop(type); break;
|
||||
case Command::Raise: controller->widget()->showFromTray(); break;
|
||||
case Command::LoopNone: {
|
||||
Core::App().settings().setPlayerRepeatMode(RepeatMode::None);
|
||||
Core::App().saveSettingsDelayed();
|
||||
break;
|
||||
}
|
||||
case Command::LoopTrack: {
|
||||
Core::App().settings().setPlayerRepeatMode(RepeatMode::One);
|
||||
Core::App().saveSettingsDelayed();
|
||||
break;
|
||||
}
|
||||
case Command::LoopPlaylist: {
|
||||
Core::App().settings().setPlayerRepeatMode(RepeatMode::All);
|
||||
Core::App().saveSettingsDelayed();
|
||||
break;
|
||||
}
|
||||
case Command::Shuffle: {
|
||||
const auto current = Core::App().settings().playerOrderMode();
|
||||
Core::App().settings().setPlayerOrderMode((current == OrderMode::Shuffle)
|
||||
? _lastOrderMode
|
||||
: OrderMode::Shuffle);
|
||||
Core::App().saveSettingsDelayed();
|
||||
break;
|
||||
}
|
||||
case Command::Quit: {
|
||||
if (const auto main = controller->widget()->sessionContent()) {
|
||||
main->closeBothPlayers();
|
||||
|
|
|
@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#pragma once
|
||||
|
||||
#include "data/data_audio_msg_id.h"
|
||||
#include "media/player/media_player_instance.h"
|
||||
|
||||
namespace base::Platform {
|
||||
class SystemMediaControls;
|
||||
|
@ -40,6 +41,7 @@ private:
|
|||
std::vector<std::shared_ptr<Data::DocumentMedia>> _cachedMediaView;
|
||||
std::unique_ptr<Media::Streaming::Instance> _streamed;
|
||||
AudioMsgId _lastAudioMsgId;
|
||||
Media::Player::OrderMode _lastOrderMode;
|
||||
|
||||
rpl::lifetime _lifetimeDownload;
|
||||
rpl::lifetime _lifetime;
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit a643b71886ae2947b8db85dfe7b5575c748ce326
|
||||
Subproject commit d985476a6c3aec54790b1310f590a0813d3bd790
|
Loading…
Add table
Reference in a new issue