diff --git a/src/core/player.cpp b/src/core/player.cpp index bd0a107cd..9bda1dec0 100644 --- a/src/core/player.cpp +++ b/src/core/player.cpp @@ -292,7 +292,6 @@ void Player::RestartOrPrevious() { void Player::Stop(bool stop_after) { engine_->Stop(stop_after); - app_->playlist_manager()->active()->set_current_row(-1); current_item_.reset(); } diff --git a/src/networkremote/outgoingdatacreator.cpp b/src/networkremote/outgoingdatacreator.cpp index 3081c5d6a..f8c22eb30 100644 --- a/src/networkremote/outgoingdatacreator.cpp +++ b/src/networkremote/outgoingdatacreator.cpp @@ -75,8 +75,7 @@ void OutgoingDataCreator::SetClients(QList* clients) { SLOT(ResultsAvailable(int, SearchProvider::ResultList)), Qt::QueuedConnection); - connect(app_->global_search(), - SIGNAL(SearchFinished(int)), + connect(app_->global_search(), SIGNAL(SearchFinished(int)), SLOT(SearchFinished(int))); } @@ -130,8 +129,8 @@ void OutgoingDataCreator::CheckEnabledProviders() { } } -SongInfoProvider* OutgoingDataCreator::ProviderByName(const QString& name) - const { +SongInfoProvider* OutgoingDataCreator::ProviderByName( + const QString& name) const { for (SongInfoProvider* provider : fetcher_->providers()) { if (UltimateLyricsProvider* lyrics = qobject_cast(provider)) { @@ -495,6 +494,9 @@ void OutgoingDataCreator::SendRepeatMode(PlaylistSequence::RepeatMode mode) { case PlaylistSequence::Repeat_Playlist: msg.mutable_repeat()->set_repeat_mode(pb::remote::Repeat_Playlist); break; + case PlaylistSequence::Repeat_OneByOne: + msg.mutable_repeat()->set_repeat_mode(pb::remote::Repeat_OneByOne); + break; } SendDataToClients(&msg); @@ -653,14 +655,16 @@ void OutgoingDataCreator::SendKitten(const QImage& kitten) { } } -void OutgoingDataCreator::DoGlobalSearch(const QString &query, RemoteClient *client) { +void OutgoingDataCreator::DoGlobalSearch(const QString& query, + RemoteClient* client) { int id = app_->global_search()->SearchAsync(query); GlobalSearchRequest request(id, query, client); global_search_result_map_.insert(id, request); } -void OutgoingDataCreator::ResultsAvailable(int id, const SearchProvider::ResultList& results) { +void OutgoingDataCreator::ResultsAvailable( + int id, const SearchProvider::ResultList& results) { if (!global_search_result_map_.contains(id)) return; GlobalSearchRequest search_request = global_search_result_map_.value(id); @@ -668,12 +672,14 @@ void OutgoingDataCreator::ResultsAvailable(int id, const SearchProvider::ResultL QImage null_img; pb::remote::Message msg; - pb::remote::ResponseGlobalSearch* response = msg.mutable_response_global_search(); + pb::remote::ResponseGlobalSearch* response = + msg.mutable_response_global_search(); msg.set_type(pb::remote::GLOBAL_SEARCH_RESULT); response->set_id(search_request.id_); response->set_query(DataCommaSizeFromQString(search_request.query_)); - response->set_search_provider(DataCommaSizeFromQString(results.first().provider_->name())); + response->set_search_provider( + DataCommaSizeFromQString(results.first().provider_->name())); // Append the icon QImage icon_image(results.first().provider_->icon().pixmap(48, 48).toImage()); diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index 564cfb57a..dcb0897d3 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -1684,6 +1684,11 @@ void Playlist::ClearStreamMetadata() { } bool Playlist::stop_after_current() const { + PlaylistSequence::RepeatMode repeat_mode = playlist_sequence_->repeat_mode(); + if (repeat_mode == PlaylistSequence::Repeat_OneByOne) { + return true; + } + return stop_after_.isValid() && current_item_index_.isValid() && stop_after_.row() == current_item_index_.row(); } diff --git a/src/playlist/playlistsequence.cpp b/src/playlist/playlistsequence.cpp index d93c43b40..43cfe0162 100644 --- a/src/playlist/playlistsequence.cpp +++ b/src/playlist/playlistsequence.cpp @@ -52,6 +52,7 @@ PlaylistSequence::PlaylistSequence(QWidget* parent, SettingsProvider* settings) repeat_group->addAction(ui_->action_repeat_track); repeat_group->addAction(ui_->action_repeat_album); repeat_group->addAction(ui_->action_repeat_playlist); + repeat_group->addAction(ui_->action_repeat_onebyone); repeat_menu_->addActions(repeat_group->actions()); ui_->repeat->setMenu(repeat_menu_); @@ -118,6 +119,7 @@ void PlaylistSequence::RepeatActionTriggered(QAction* action) { if (action == ui_->action_repeat_track) mode = Repeat_Track; if (action == ui_->action_repeat_album) mode = Repeat_Album; if (action == ui_->action_repeat_playlist) mode = Repeat_Playlist; + if (action == ui_->action_repeat_onebyone) mode = Repeat_OneByOne; SetRepeatMode(mode); } @@ -147,6 +149,9 @@ void PlaylistSequence::SetRepeatMode(RepeatMode mode) { case Repeat_Playlist: ui_->action_repeat_playlist->setChecked(true); break; + case Repeat_OneByOne: + ui_->action_repeat_onebyone->setChecked(true); + break; } if (mode != repeat_mode_) { @@ -237,6 +242,9 @@ void PlaylistSequence::CycleRepeatMode() { mode = Repeat_Playlist; break; case Repeat_Playlist: + mode = Repeat_OneByOne; + break; + case Repeat_OneByOne: break; } diff --git a/src/playlist/playlistsequence.h b/src/playlist/playlistsequence.h index a5b841a78..4fadfa5aa 100644 --- a/src/playlist/playlistsequence.h +++ b/src/playlist/playlistsequence.h @@ -40,6 +40,7 @@ class PlaylistSequence : public QWidget { Repeat_Track = 1, Repeat_Album = 2, Repeat_Playlist = 3, + Repeat_OneByOne = 4 }; enum ShuffleMode { Shuffle_Off = 0, diff --git a/src/widgets/osd.cpp b/src/widgets/osd.cpp index a1cbf117e..8bb636dbe 100644 --- a/src/widgets/osd.cpp +++ b/src/widgets/osd.cpp @@ -314,6 +314,9 @@ void OSD::RepeatModeChanged(PlaylistSequence::RepeatMode mode) { case PlaylistSequence::Repeat_Playlist: current_mode = tr("Repeat playlist"); break; + case PlaylistSequence::Repeat_OneByOne: + current_mode = tr("Stop after every track"); + break; } ShowMessage(QCoreApplication::applicationName(), current_mode); }