diff options
| author | Louis Burda <quent.burda@gmail.com> | 2022-03-28 17:31:58 +0200 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2022-03-28 17:39:57 +0200 |
| commit | e5a55cc4cd55d33e8bfb50cda1bfbd2526108c13 (patch) | |
| tree | dbf0f6bdf3e127dcd660718cdf538da75042e667 /src | |
| parent | 914add4cedb75bab216b5702e34e71b45005f905 (diff) | |
| download | tmus-e5a55cc4cd55d33e8bfb50cda1bfbd2526108c13.tar.gz tmus-e5a55cc4cd55d33e8bfb50cda1bfbd2526108c13.zip | |
Fix track next selection not lru
Diffstat (limited to 'src')
| -rw-r--r-- | src/data.c | 2 | ||||
| -rw-r--r-- | src/main.c | 7 | ||||
| -rw-r--r-- | src/player.h | 2 | ||||
| -rw-r--r-- | src/player_mpd.c | 23 | ||||
| -rw-r--r-- | src/tui.c | 4 |
5 files changed, 19 insertions, 19 deletions
@@ -180,7 +180,7 @@ path_exists(const char *path) bool make_dir(const char *path) { - return mkdir(path, S_IRWXU | S_IRWXG) == 0; + return mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) == 0; } bool @@ -1,15 +1,8 @@ #include "data.h" -#include "history.h" -#include "list.h" -#include "listnav.h" #include "log.h" #include "mpris.h" -#include "pane.h" #include "player.h" -#include "ref.h" -#include "style.h" #include "tui.h" -#include "util.h" #include <locale.h> diff --git a/src/player.h b/src/player.h index fdecbaf..787821c 100644 --- a/src/player.h +++ b/src/player.h @@ -71,7 +71,7 @@ void player_deinit(void); void player_update(void); -int player_play_track(struct track *track); +int player_play_track(struct track *track, bool new); int player_toggle_pause(void); int player_pause(void); diff --git a/src/player_mpd.c b/src/player_mpd.c index ddc8c13..3a90c57 100644 --- a/src/player_mpd.c +++ b/src/player_mpd.c @@ -43,6 +43,7 @@ static int mpd_handle_status(int status); static bool history_contains(struct track *track, int depth); static struct track *playlist_track_lru(int skip); +static struct track *playlist_track_next_unused(int index); static void player_play_prev(void); static void player_play_next(void); @@ -127,7 +128,7 @@ playlist_track_lru(int skip) if (!history_contains(track, len - 1)) skip -= 1; - if (skip <= 0) break; + if (skip < 0) break; link = link->next; if (!LIST_INNER(link)) @@ -215,7 +216,7 @@ player_play_prev(void) } track = UPCAST(next, struct track, link_hs); - player_play_track(track); + player_play_track(track, false); } void @@ -223,23 +224,24 @@ player_play_next(void) { struct track *next_track; struct link *link; - - next_track = NULL; + bool new_entry; if (player.track && link_inuse(&player.track->link_hs) && LIST_INNER(player.track->link_hs.next)) { next_track = UPCAST(player.track->link_hs.next, struct track, link_hs); + new_entry = false; } else if (!list_empty(&player.queue)) { link = list_pop_front(&player.queue); next_track = UPCAST(link, struct track, link_pq); + new_entry = true; } else { next_track = player_next_from_playlist(); + if (!next_track) goto clear; + new_entry = true; } - if (!next_track) goto clear; - - player_play_track(next_track); + player_play_track(next_track, new_entry); return; clear: @@ -403,10 +405,12 @@ player_update(void) } int -player_play_track(struct track *track) +player_play_track(struct track *track, bool new) { int status; + ASSERT(track != NULL); + status = mpd_run_clear(mpd.conn); mpd_handle_status(status); @@ -422,6 +426,9 @@ player_play_track(struct track *track) if (player.track && !link_inuse(&player.track->link_hs)) player_add_history(player.track); + /* new invocations result in updated history pos */ + if (new) link_pop(&track->link_hs); + player.track = track; return PLAYER_STATUS_OK; @@ -455,7 +455,7 @@ play_selected_track(void) link = list_at(tracks_vis, track_nav.sel); if (!link) return false; track = tracks_vis_track(link); - player_play_track(track); + player_play_track(track, true); return true; } @@ -627,7 +627,7 @@ play_track(const char *query) for (LIST_ITER(&tracks, link)) { track = UPCAST(link, struct track, link); if (!strcmp(track->name, query)) { - player_play_track(track); + player_play_track(track, true); return true; } } |
