mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-15 21:57:10 +02:00
Support reversed order in the playlist.
This commit is contained in:
parent
4f02f722ae
commit
68378cf8e5
3 changed files with 25 additions and 13 deletions
|
@ -364,12 +364,13 @@ bool Instance::moveInPlaylist(
|
|||
if (!data->playlistIndex) {
|
||||
return false;
|
||||
}
|
||||
const auto newIndex = *data->playlistIndex + delta;
|
||||
const auto newIndex = *data->playlistIndex
|
||||
+ (data->order.current() == OrderMode::Reverse ? -delta : delta);
|
||||
if (const auto item = itemByIndex(data, newIndex)) {
|
||||
if (const auto media = item->media()) {
|
||||
if (const auto document = media->document()) {
|
||||
if (autonext) {
|
||||
_switchToNextStream.fire({
|
||||
_switchToNext.fire({
|
||||
data->current,
|
||||
item->fullId()
|
||||
});
|
||||
|
@ -389,24 +390,35 @@ bool Instance::moveInPlaylist(
|
|||
bool Instance::previousAvailable(AudioMsgId::Type type) const {
|
||||
const auto data = getData(type);
|
||||
Assert(data != nullptr);
|
||||
return data->playlistIndex
|
||||
&& data->playlistSlice
|
||||
&& (*data->playlistIndex > 0);
|
||||
|
||||
if (!data->playlistIndex || !data->playlistSlice) {
|
||||
return false;
|
||||
}
|
||||
return (data->order.current() == OrderMode::Reverse)
|
||||
? (*data->playlistIndex + 1 < data->playlistSlice->size())
|
||||
: (*data->playlistIndex > 0);
|
||||
}
|
||||
|
||||
bool Instance::nextAvailable(AudioMsgId::Type type) const {
|
||||
const auto data = getData(type);
|
||||
Assert(data != nullptr);
|
||||
return data->playlistIndex
|
||||
&& data->playlistSlice
|
||||
&& (*data->playlistIndex + 1 < data->playlistSlice->size());
|
||||
|
||||
if (!data->playlistIndex || !data->playlistSlice) {
|
||||
return false;
|
||||
}
|
||||
return (data->order.current() == OrderMode::Reverse)
|
||||
? (*data->playlistIndex > 0)
|
||||
: (*data->playlistIndex + 1 < data->playlistSlice->size());
|
||||
}
|
||||
|
||||
rpl::producer<> Media::Player::Instance::playlistChanges(
|
||||
AudioMsgId::Type type) const {
|
||||
const auto data = getData(type);
|
||||
Assert(data != nullptr);
|
||||
return data->playlistChanges.events();
|
||||
|
||||
return rpl::merge(
|
||||
data->playlistChanges.events(),
|
||||
data->order.changes() | rpl::to_empty);
|
||||
}
|
||||
|
||||
rpl::producer<> Media::Player::Instance::stops(AudioMsgId::Type type) const {
|
||||
|
|
|
@ -189,7 +189,7 @@ public:
|
|||
};
|
||||
|
||||
[[nodiscard]] rpl::producer<Switch> switchToNextEvents() const {
|
||||
return _switchToNextStream.events();
|
||||
return _switchToNext.events();
|
||||
}
|
||||
[[nodiscard]] rpl::producer<AudioMsgId::Type> tracksFinished() const {
|
||||
return _tracksFinished.events();
|
||||
|
@ -322,7 +322,7 @@ private:
|
|||
Data _voiceData;
|
||||
bool _roundPlaying = false;
|
||||
|
||||
rpl::event_stream<Switch> _switchToNextStream;
|
||||
rpl::event_stream<Switch> _switchToNext;
|
||||
rpl::event_stream<AudioMsgId::Type> _tracksFinished;
|
||||
rpl::event_stream<AudioMsgId::Type> _trackChanged;
|
||||
rpl::event_stream<AudioMsgId::Type> _playerStopped;
|
||||
|
|
|
@ -826,10 +826,10 @@ void Widget::handlePlaylistUpdate() {
|
|||
createPrevNextButtons();
|
||||
_previousTrack->setIconOverride(previousEnabled ? nullptr : &st::mediaPlayerPreviousDisabledIcon);
|
||||
_previousTrack->setRippleColorOverride(previousEnabled ? nullptr : &st::mediaPlayerBg);
|
||||
_previousTrack->setCursor(previousEnabled ? style::cur_pointer : style::cur_default);
|
||||
_previousTrack->setPointerCursor(previousEnabled);
|
||||
_nextTrack->setIconOverride(nextEnabled ? nullptr : &st::mediaPlayerNextDisabledIcon);
|
||||
_nextTrack->setRippleColorOverride(nextEnabled ? nullptr : &st::mediaPlayerBg);
|
||||
_nextTrack->setCursor(nextEnabled ? style::cur_pointer : style::cur_default);
|
||||
_nextTrack->setPointerCursor(nextEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue