summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/config-example2
-rw-r--r--contrib/pianobar.18
-rw-r--r--src/libpiano/piano.c6
-rw-r--r--src/ui.c33
-rw-r--r--src/ui.h7
-rw-r--r--src/ui_act.c8
6 files changed, 47 insertions, 17 deletions
diff --git a/contrib/config-example b/contrib/config-example
index 6a40937..2986d47 100644
--- a/contrib/config-example
+++ b/contrib/config-example
@@ -57,7 +57,7 @@
#love_icon = <3
#tired_icon = zZ
#format_nowplaying_station = Station %n
-#format_list_song = %i) %a - %t%r
+#format_list_song = %i) %a - %t%r (%d)%@%s
# high-quality audio (192k mp3, for Pandora One subscribers only!)
#audio_quality = high
diff --git a/contrib/pianobar.1 b/contrib/pianobar.1
index 512c55a..98e67be 100644
--- a/contrib/pianobar.1
+++ b/contrib/pianobar.1
@@ -256,6 +256,14 @@ Rating icon
.B %d
Song duration
+.B %@
+
+The at_icon
+
+.B %s
+
+Song’s station, if not the current station.
+
.TP
.B format_msg_none = %s
.TQ
diff --git a/src/libpiano/piano.c b/src/libpiano/piano.c
index 72502f7..a189f34 100644
--- a/src/libpiano/piano.c
+++ b/src/libpiano/piano.c
@@ -219,7 +219,11 @@ void PianoDestroyRequest (PianoRequest_t *req) {
*/
PianoStation_t *PianoFindStationById (PianoStation_t * const stations,
const char * const searchStation) {
- assert (searchStation != NULL);
+ assert (stations != NULL);
+
+ if (searchStation == NULL) {
+ return NULL;
+ }
PianoStation_t *currStation = stations;
PianoListForeachP (currStation) {
diff --git a/src/ui.c b/src/ui.c
index 3b127c4..0d62e6b 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -486,20 +486,21 @@ PianoStation_t *BarUiSelectStation (BarApp_t *app, PianoStation_t *stations,
}
/* let user pick one song
- * @param pianobar settings
+ * @param app
* @param song list
* @param input fds
* @return pointer to selected item in song list or NULL
*/
-PianoSong_t *BarUiSelectSong (const BarSettings_t *settings,
+PianoSong_t *BarUiSelectSong (const BarApp_t * const app,
PianoSong_t *startSong, BarReadlineFds_t *input) {
+ const BarSettings_t * const settings = &app->settings;
PianoSong_t *tmpSong = NULL;
char buf[100];
memset (buf, 0, sizeof (buf));
do {
- BarUiListSongs (settings, startSong, buf);
+ BarUiListSongs (app, startSong, buf);
BarUiMsg (settings, MSG_QUESTION, "Select song: ");
if (BarReadlineStr (buf, sizeof (buf), input, BAR_RL_DEFAULT) == 0) {
@@ -598,7 +599,7 @@ char *BarUiSelectMusicId (BarApp_t *app, PianoStation_t *station,
musicId = strdup (tmpArtist->musicId);
}
} else if (*selectBuf == 't') {
- tmpSong = BarUiSelectSong (&app->settings, searchResult.songs,
+ tmpSong = BarUiSelectSong (app, searchResult.songs,
&app->input);
if (tmpSong != NULL) {
musicId = strdup (tmpSong->musicId);
@@ -606,7 +607,7 @@ char *BarUiSelectMusicId (BarApp_t *app, PianoStation_t *station,
}
} else if (searchResult.songs != NULL) {
/* songs found */
- tmpSong = BarUiSelectSong (&app->settings, searchResult.songs,
+ tmpSong = BarUiSelectSong (app, searchResult.songs,
&app->input);
if (tmpSong != NULL) {
musicId = strdup (tmpSong->musicId);
@@ -757,18 +758,34 @@ void BarUiPrintSong (const BarSettings_t *settings,
* @param artist/song filter string
* @return # of songs
*/
-size_t BarUiListSongs (const BarSettings_t *settings,
+size_t BarUiListSongs (const BarApp_t * const app,
const PianoSong_t *song, const char *filter) {
+ const BarSettings_t * const settings = &app->settings;
size_t i = 0;
PianoListForeachP (song) {
if (filter == NULL ||
(filter != NULL && (BarStrCaseStr (song->artist, filter) != NULL ||
BarStrCaseStr (song->title, filter) != NULL))) {
+ const char * const empty = "";
+ const char *stationName = "(deleted)";
+ const PianoStation_t * const station =
+ PianoFindStationById (app->ph.stations, song->stationId);
+ if (station != NULL) {
+ if (station != app->curStation) {
+ stationName = station->name;
+ } else {
+ stationName = empty;
+ }
+ }
+
char outstr[512], digits[8], duration[8] = "??:??";
const char *vals[] = {digits, song->artist, song->title,
ratingToIcon (settings, song),
- duration};
+ duration,
+ stationName != empty ? settings->atIcon : "",
+ stationName,
+ };
/* pre-format a few strings */
snprintf (digits, sizeof (digits) / sizeof (*digits), "%2zu", i);
@@ -779,7 +796,7 @@ size_t BarUiListSongs (const BarSettings_t *settings,
}
BarUiCustomFormat (outstr, sizeof (outstr), settings->listSongFormat,
- "iatrd", vals);
+ "iatrd@s", vals);
BarUiAppendNewline (outstr, sizeof (outstr));
BarUiMsg (settings, MSG_LIST, "%s", outstr);
}
diff --git a/src/ui.h b/src/ui.h
index 9901e36..9081b71 100644
--- a/src/ui.h
+++ b/src/ui.h
@@ -38,14 +38,15 @@ typedef void (*BarUiSelectStationCallback_t) (BarApp_t *app, char *buf);
void BarUiMsg (const BarSettings_t *, const BarUiMsg_t, const char *, ...) __attribute__((format(printf, 3, 4)));
PianoStation_t *BarUiSelectStation (BarApp_t *, PianoStation_t *, const char *,
BarUiSelectStationCallback_t, bool);
-PianoSong_t *BarUiSelectSong (const BarSettings_t *, PianoSong_t *,
- BarReadlineFds_t *);
+PianoSong_t *BarUiSelectSong (const BarApp_t * const app,
+ PianoSong_t *startSong, BarReadlineFds_t *input);
PianoArtist_t *BarUiSelectArtist (BarApp_t *, PianoArtist_t *);
char *BarUiSelectMusicId (BarApp_t *, PianoStation_t *, const char *);
void BarUiPrintStation (const BarSettings_t *, PianoStation_t *);
void BarUiPrintSong (const BarSettings_t *, const PianoSong_t *,
const PianoStation_t *);
-size_t BarUiListSongs (const BarSettings_t *, const PianoSong_t *, const char *);
+size_t BarUiListSongs (const BarApp_t * const app,
+ const PianoSong_t *song, const char *filter);
void BarUiStartEventCmd (const BarSettings_t *, const char *,
const PianoStation_t *, const PianoSong_t *, const player_t *,
PianoStation_t *, PianoReturn_t, CURLcode);
diff --git a/src/ui_act.c b/src/ui_act.c
index ee43809..2c5f264 100644
--- a/src/ui_act.c
+++ b/src/ui_act.c
@@ -505,7 +505,7 @@ BarUiActCallback(BarUiActTempBanSong) {
BarUiActCallback(BarUiActPrintUpcoming) {
PianoSong_t * const nextSong = PianoListNextP (selSong);
if (nextSong != NULL) {
- BarUiListSongs (&app->settings, nextSong, NULL);
+ BarUiListSongs (app, nextSong, NULL);
} else {
BarUiMsg (&app->settings, MSG_INFO, "No songs in queue.\n");
}
@@ -587,7 +587,7 @@ BarUiActCallback(BarUiActHistory) {
PianoSong_t *histSong;
if (app->songHistory != NULL) {
- histSong = BarUiSelectSong (&app->settings, app->songHistory,
+ histSong = BarUiSelectSong (app, app->songHistory,
&app->input);
if (histSong != NULL) {
BarKeyShortcutId_t action;
@@ -842,7 +842,7 @@ BarUiActCallback(BarUiActManageStation) {
BarUiActDefaultEventcmd ("stationdeleteartistseed");
}
} else if (selectBuf[0] == 's') {
- PianoSong_t *song = BarUiSelectSong (&app->settings,
+ PianoSong_t *song = BarUiSelectSong (app,
reqData.info.songSeeds, &app->input);
if (song != NULL) {
PianoRequestDataDeleteSeed_t subReqData;
@@ -869,7 +869,7 @@ BarUiActCallback(BarUiActManageStation) {
BarUiActDefaultEventcmd ("stationdeletestationseed");
}
} else if (selectBuf[0] == 'f') {
- PianoSong_t *song = BarUiSelectSong (&app->settings,
+ PianoSong_t *song = BarUiSelectSong (app,
reqData.info.feedback, &app->input);
if (song != NULL) {
BarUiMsg (&app->settings, MSG_INFO, "Deleting feedback... ");