summaryrefslogtreecommitdiff
path: root/src/ui_act.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui_act.c')
-rw-r--r--src/ui_act.c70
1 files changed, 68 insertions, 2 deletions
diff --git a/src/ui_act.c b/src/ui_act.c
index 9af34bf..0f73018 100644
--- a/src/ui_act.c
+++ b/src/ui_act.c
@@ -263,8 +263,74 @@ BarUiActCallback(BarUiActExplain) {
/* choose genre station and add it as shared station
*/
BarUiActCallback(BarUiActStationFromGenre) {
- /* use genre station */
- BarStationFromGenre (app);
+ PianoReturn_t pRet;
+ WaitressReturn_t wRet;
+ const PianoGenreCategory_t *curCat;
+ const PianoGenre_t *curGenre;
+ int i;
+
+ /* receive genre stations list if not yet available */
+ if (app->ph.genreStations == NULL) {
+ BarUiMsg (&app->settings, MSG_INFO, "Receiving genre stations... ");
+ const bool ret = BarUiActDefaultPianoCall (
+ PIANO_REQUEST_GET_GENRE_STATIONS, NULL);
+ BarUiActDefaultEventcmd ("stationfetchgenre");
+ if (!ret) {
+ return;
+ }
+ }
+
+ /* print all available categories */
+ curCat = app->ph.genreStations;
+ i = 0;
+ while (curCat != NULL) {
+ BarUiMsg (&app->settings, MSG_LIST, "%2i) %s\n", i, curCat->name);
+ i++;
+ curCat = curCat->next;
+ }
+
+ do {
+ /* select category or exit */
+ BarUiMsg (&app->settings, MSG_QUESTION, "Select category: ");
+ if (BarReadlineInt (&i, &app->input) == 0) {
+ return;
+ }
+ curCat = app->ph.genreStations;
+ while (curCat != NULL && i > 0) {
+ curCat = curCat->next;
+ i--;
+ }
+ } while (curCat == NULL);
+
+ /* print all available stations */
+ curGenre = curCat->genres;
+ i = 0;
+ while (curGenre != NULL) {
+ BarUiMsg (&app->settings, MSG_LIST, "%2i) %s\n", i, curGenre->name);
+ i++;
+ curGenre = curGenre->next;
+ }
+
+ do {
+ BarUiMsg (&app->settings, MSG_QUESTION, "Select genre: ");
+ if (BarReadlineInt (&i, &app->input) == 0) {
+ return;
+ }
+ curGenre = curCat->genres;
+ while (curGenre != NULL && i > 0) {
+ curGenre = curGenre->next;
+ i--;
+ }
+ } while (curGenre == NULL);
+
+ /* create station */
+ PianoRequestDataCreateStation_t reqData;
+ reqData.token = curGenre->musicId;
+ reqData.type = PIANO_MUSICTYPE_INVALID;
+ BarUiMsg (&app->settings, MSG_INFO, "Adding genre station \"%s\"... ",
+ curGenre->name);
+ BarUiActDefaultPianoCall (PIANO_REQUEST_CREATE_STATION, &reqData);
+ BarUiActDefaultEventcmd ("stationaddgenre");
}
/* print verbose song information