diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/player.h | 3 | ||||
| -rw-r--r-- | src/player_mpd.c | 9 | ||||
| -rw-r--r-- | src/tui.c | 10 |
3 files changed, 18 insertions, 4 deletions
diff --git a/src/player.h b/src/player.h index 94f361d..fdecbaf 100644 --- a/src/player.h +++ b/src/player.h @@ -40,6 +40,9 @@ struct player { /* last used track */ struct track *track; + /* player track name (not necessarily from player.track) */ + char *track_name; + /* player has a track is loaded (not necessarily player.track) */ bool loaded; diff --git a/src/player_mpd.c b/src/player_mpd.c index 71f78ef..c270fda 100644 --- a/src/player_mpd.c +++ b/src/player_mpd.c @@ -230,6 +230,7 @@ player_init(void) list_init(&player.queue); player.track = NULL; + player.track_name = NULL; player.loaded = 0; player.autoplay = true; @@ -251,7 +252,9 @@ player_deinit(void) list_clear(&player.playlist); list_clear(&player.queue); list_clear(&player.history); - if (player.status) free(player.status); + + free(player.status); + free(player.track_name); if (mpd.conn) mpd_connection_free(mpd.conn); } @@ -315,11 +318,15 @@ player_update(void) current_song = mpd_run_current_song(mpd.conn); if (current_song) { + player.track_name = strdup(mpd_song_get_uri(current_song)); + OOM_CHECK(player.track_name); player.loaded = true; player.time_pos = mpd_status_get_elapsed_time(status); player.time_end = mpd_song_get_duration(current_song); mpd_song_free(current_song); } else { + free(player.track_name); + player.track_name = NULL; player.loaded = false; player.time_pos = 0; player.time_end = 0; @@ -56,7 +56,6 @@ static void tag_pane_vis(struct pane *pane, int sel); static bool play_selected_track(void); static bool seek_playing_track_tag(void); static bool seek_playing_track(void); - static void delete_selected_track(void); static bool track_pane_input(wint_t c); @@ -763,9 +762,14 @@ cmd_pane_vis(struct pane *pane, int sel) /* track name */ style_on(pane->win, STYLE_TITLE); pane_clearln(pane, 0); - if (player.loaded && player.track) { + if (player.loaded) { strbuf_clear(&line); - strbuf_append(&line, " %s", player.track->name); + if (player.track) + strbuf_append(&line, " %s", player.track->name); + else if (player.track_name) + strbuf_append(&line, " %s", player.track_name); + else + strbuf_append(&line, "<UNKNOWN>"); pane_writeln(pane, 0, line.buf); } style_off(pane->win, STYLE_TITLE); |
