summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.c70
-rw-r--r--src/pianobar.14
2 files changed, 74 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 14091ca..6c74c82 100644
--- a/src/main.c
+++ b/src/main.c
@@ -216,6 +216,71 @@ inline void BarUiMsg (char *msg) {
fflush (stdout);
}
+/* browse genre stations and create shared station
+ * @param piano handle
+ */
+void BarStationFromGenre (PianoHandle_t *ph) {
+ int i;
+ PianoGenreCategory_t *curCat;
+ PianoStation_t *curStation;
+
+ /* receive genre stations list if not yet available */
+ if (ph->genreStations == NULL) {
+ BarUiMsg ("Receiving genre stations... ");
+ if (PianoGetGenreStations (ph) != PIANO_RET_OK) {
+ BarUiMsg ("Error.\n");
+ return;
+ } else {
+ BarUiMsg ("Ok.\n");
+ }
+ }
+
+ /* print all available categories */
+ curCat = ph->genreStations;
+ i = 0;
+ while (curCat != NULL) {
+ printf ("%2i) %s\n", i, curCat->name);
+ i++;
+ curCat = curCat->next;
+ }
+ /* select category or exit */
+ if (!BarReadlineInt (NULL, &i)) {
+ BarUiMsg ("Aborted.\n");
+ return;
+ }
+ curCat = ph->genreStations;
+ while (curCat != NULL && i > 0) {
+ curCat = curCat->next;
+ i--;
+ }
+
+ /* print all available stations */
+ curStation = curCat->stations;
+ i = 0;
+ while (curStation != NULL) {
+ printf ("%2i) %s\n", i, curStation->name);
+ i++;
+ curStation = curStation->next;
+ }
+ if (!BarReadlineInt (NULL, &i)) {
+ BarUiMsg ("Aborted.\n");
+ return;
+ }
+ curStation = curCat->stations;
+ while (curStation != NULL && i > 0) {
+ curStation = curStation->next;
+ i--;
+ }
+ /* create station */
+ printf ("Adding shared station \"%s\"... ", curStation->name);
+ fflush (stdout);
+ if (PianoCreateStation (ph, "sh", curStation->id) != PIANO_RET_OK) {
+ BarUiMsg ("Error.\n");
+ } else {
+ BarUiMsg ("Ok.\n");
+ }
+}
+
int main (int argc, char **argv) {
PianoHandle_t ph;
struct aacPlayer player;
@@ -466,6 +531,11 @@ int main (int argc, char **argv) {
}
break;
+ case 'g':
+ /* use genre station */
+ BarStationFromGenre (&ph);
+ break;
+
case 'l':
if (curStation == NULL || curSong == NULL) {
BarUiMsg ("No song playing.\n");
diff --git a/src/pianobar.1 b/src/pianobar.1
index 500b7ae..5cf9983 100644
--- a/src/pianobar.1
+++ b/src/pianobar.1
@@ -35,6 +35,10 @@ artist of your choice.
Delete current station.
.TP
+.B g
+Add genre station provided by pandora.
+
+.TP
.B l
Love currently played song.