summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2017-10-02 12:12:01 +0200
committerMichał Cichoń <michcic@gmail.com>2018-10-30 12:04:15 +0100
commited3ab2743344dfe2b38427733560b9847d259c8c (patch)
treebba0f0fd3ff661c13c3cb8d65566c73c0a58e13c /src
parentf43a0894cb1386bbb5c0c1f068a4f60192070658 (diff)
downloadpianobar-windows-ed3ab2743344dfe2b38427733560b9847d259c8c.tar.gz
pianobar-windows-ed3ab2743344dfe2b38427733560b9847d259c8c.tar.bz2
pianobar-windows-ed3ab2743344dfe2b38427733560b9847d259c8c.zip
Show station in song lists
Iff song’s station is not the current station. This is only the case for the song history right now. Closes #638
Diffstat (limited to 'src')
-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
4 files changed, 38 insertions, 16 deletions
diff --git a/src/libpiano/piano.c b/src/libpiano/piano.c
index c496ea1..7f1eff9 100644
--- a/src/libpiano/piano.c
+++ b/src/libpiano/piano.c
@@ -214,7 +214,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 30b62f7..c682ca3 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -388,20 +388,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, BarReadline_t rl) {
+ 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), rl, BAR_RL_DEFAULT) == 0) {
@@ -498,7 +499,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->rl);
if (tmpSong != NULL) {
musicId = strdup (tmpSong->musicId);
@@ -506,7 +507,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->rl);
if (tmpSong != NULL) {
musicId = strdup (tmpSong->musicId);
@@ -661,18 +662,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);
@@ -683,7 +700,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 126f6bb..faca48e 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 *,
- BarReadline_t);
+PianoSong_t *BarUiSelectSong (const BarApp_t * const app,
+ PianoSong_t *startSong, BarReadline_t rl);
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 player2_t * const,
PianoStation_t *, PianoReturn_t);
diff --git a/src/ui_act.c b/src/ui_act.c
index a036f19..d834191 100644
--- a/src/ui_act.c
+++ b/src/ui_act.c
@@ -482,7 +482,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");
}
@@ -563,7 +563,7 @@ BarUiActCallback(BarUiActHistory) {
PianoSong_t *histSong;
if (app->songHistory != NULL) {
- histSong = BarUiSelectSong (&app->settings, app->songHistory,
+ histSong = BarUiSelectSong (app, app->songHistory,
app->rl);
if (histSong != NULL) {
BarKeyShortcutId_t action;
@@ -815,7 +815,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->rl);
if (song != NULL) {
PianoRequestDataDeleteSeed_t subReqData;
@@ -842,7 +842,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->rl);
if (song != NULL) {
BarUiMsg (&app->settings, MSG_INFO, "Deleting feedback... ");