Browse Source

Merge branch 'master' of https://github.com/lesderid/ympd into lesderid-master

Andrew Karpow 6 years ago
parent
commit
ceee8bd90a
8 changed files with 64 additions and 18 deletions
  1. 7 6
      README.md
  2. 2 1
      contrib/init.debian
  3. 1 0
      contrib/ympd.default
  4. 2 1
      contrib/ympd.service
  5. 36 9
      htdocs/js/mpd.js
  6. 6 1
      src/mpd_client.c
  7. 3 0
      src/mpd_client.h
  8. 7 0
      src/ympd.c

+ 7 - 6
README.md

@@ -28,12 +28,13 @@ Run flags
 ```
 Usage: ./ympd [OPTION]...
 
- -h, --host <host>          connect to mpd at host [localhost]
- -p, --port <port>          connect to mpd at port [6600]
- -w, --webport [ip:]<port>  listen interface/port for webserver [8080]
- -u, --user <username>      drop priviliges to user after socket bind
- -V, --version              get version
- --help                     this help
+ -h, --host <host>             connect to mpd at host [localhost]
+ -p, --port <port>             connect to mpd at port [6600]
+ -w, --webport [ip:]<port>     listen interface/port for webserver [8080]
+ -d, --dirbletoken <apitoken>  Dirble API token
+ -u, --user <username>         drop priviliges to user after socket bind
+ -V, --version                 get version
+ --help                        this help
 ```
 
 SSL Support

+ 2 - 1
contrib/init.debian

@@ -24,6 +24,7 @@ YMPD_USER=nobody
 MPD_HOST=localhost
 MPD_PORT=6600
 WEB_PORT=8080
+DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a
 
 
 # Exit if the package is not installed
@@ -35,7 +36,7 @@ WEB_PORT=8080
 # Load the VERBOSE setting and other rcS variables
 [ -f /etc/default/rcS ] && . /etc/default/rcS
 
-DAEMON_OPT="--user $YMPD_USER --mpdpass '$MPD_PASSWORD' --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT"
+DAEMON_OPT="--user $YMPD_USER --mpdpass '$MPD_PASSWORD' --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT --dirbletoken $DIRBLE_API_TOKEN"
 
 do_start()
 {

+ 1 - 0
contrib/ympd.default

@@ -3,3 +3,4 @@ MPD_PORT=6600
 MPD_PASSWORD=
 WEB_PORT=8080
 YMPD_USER=nobody
+DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a

+ 2 - 1
contrib/ympd.service

@@ -8,8 +8,9 @@ Environment=MPD_PORT=6600
 Environment=MPD_PASSWORD=
 Environment=WEB_PORT=8080
 Environment=YMPD_USER=nobody
+Environment=DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a
 EnvironmentFile=/etc/default/ympd
-ExecStart=/usr/bin/ympd --user $YMPD_USER --mpdpass "$MPD_PASSWORD" --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT
+ExecStart=/usr/bin/ympd --user $YMPD_USER --mpdpass "$MPD_PASSWORD" --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT --dirbletoken $DIRBLE_API_TOKE
 Type=simple
 
 [Install]

+ 36 - 9
htdocs/js/mpd.js

@@ -1,6 +1,6 @@
 /* ympd
    (c) 2013-2014 Andrew Karpow <andy@ndyk.de>
-   This project's homepage is: http://www.ympd.org
+   This project's homepage is: https://www.ympd.org
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -30,6 +30,8 @@ var dirble_catid = "";
 var dirble_page = 1;
 var isTouch = Modernizr.touch ? 1 : 0;
 var filter = undefined;
+var dirble_api_token = "";
+var dirble_stations = false;
 
 var app = $.sammy(function() {
 
@@ -130,7 +132,13 @@ var app = $.sammy(function() {
         dirble_catid = this.params['splat'][0];
         dirble_page = this.params['splat'][1];
 
-        dirble_load_stations();
+        dirble_stations = true;
+
+        if(dirble_api_token) {
+            dirble_load_stations();
+        } else {
+            getDirbleApiToken();
+        }
     });
 
 
@@ -147,7 +155,13 @@ var app = $.sammy(function() {
         $('#panel-heading').text("Dirble");
         $('#dirble').addClass('active');
 
-        dirble_load_categories();
+        dirble_stations = false;
+
+        if(dirble_api_token) {
+            dirble_load_categories();
+        } else {
+            getDirbleApiToken();
+        }
     });
 
     this.get("/", function(context) {
@@ -546,6 +560,15 @@ function webSocketConnect() {
                     if(obj.data.passwort_set)
                         $('#mpd_password_set').removeClass('hide');
                     break;
+                case "dirbleapitoken":
+                    dirble_api_token = obj.data;
+                    
+                    if(dirble_stations) {
+                        dirble_load_stations();
+                    } else {
+                        dirble_load_categories();
+                    }
+                    break;
                 case "error":
                     $('.top-right').notify({
                         message:{text: obj.data},
@@ -748,6 +771,10 @@ function getHost() {
     $('#mpd_pw_con').keypress(onEnter);
 }
 
+function getDirbleApiToken() {
+    socket.send('MPD_API_GET_DIRBLEAPITOKEN');
+}
+
 $('#search').submit(function () {
     app.setLocation("#/search/"+$('#search > div > input').val());
     $('#wait').modal('show');
@@ -880,7 +907,7 @@ function dirble_load_categories() {
 
     dirble_page = 1;
 
-    $.getJSON( "http://api.dirble.com/v2/categories?token=2e223c9909593b94fc6577361a", function( data ) {
+    $.getJSON( "https://api.dirble.com/v2/categories?token=" + dirble_api_token, function( data ) {
 
         $('#dirble_loading').addClass('hide');
 
@@ -928,7 +955,7 @@ function dirble_load_categories() {
 
 function dirble_load_stations() {
 
-    $.getJSON( "http://api.dirble.com/v2/category/"+dirble_catid+"/stations?page="+dirble_page+"&per_page=20&token=2e223c9909593b94fc6577361a", function( data ) {
+    $.getJSON( "https://api.dirble.com/v2/category/"+dirble_catid+"/stations?page="+dirble_page+"&per_page=20&token=" + dirble_api_token, function( data ) {
 
         $('#dirble_loading').addClass('hide');
         if (data.length == 20) $('#next').removeClass('hide');
@@ -955,7 +982,7 @@ function dirble_load_stations() {
             click: function() {
                 var _this = $(this);
 
-                $.getJSON( "http://api.dirble.com/v2/station/"+$(this).attr("radioid")+"?token=2e223c9909593b94fc6577361a", function( data ) {
+                $.getJSON( "https://api.dirble.com/v2/station/"+$(this).attr("radioid")+"?token=" + dirble_api_token, function( data ) {
 
                     socket.send("MPD_API_ADD_TRACK," + data.streams[0].stream);
                     $('.top-right').notify({
@@ -973,7 +1000,7 @@ function dirble_load_stations() {
                 "<span class=\"glyphicon glyphicon-play\"></span></a>").find('a').click(function(e) {
                     e.stopPropagation();
 
-                    $.getJSON( "http://api.dirble.com/v2/station/"+_this.attr("radioid")+"?token=2e223c9909593b94fc6577361a", function( data ) {
+                    $.getJSON( "https://api.dirble.com/v2/station/"+_this.attr("radioid")+"?token=" + dirble_api_token, function( data ) {
 
                         socket.send("MPD_API_ADD_PLAY_TRACK," + data.streams[0].stream);
                         $('.top-right').notify({
@@ -994,7 +1021,7 @@ function dirble_load_stations() {
             click: function() {
                 var _this = $(this);
 
-                $.getJSON( "http://api.dirble.com/v2/station/"+$(this).attr("radioid")+"?token=2e223c9909593b94fc6577361a", function( data ) {
+                $.getJSON( "https://api.dirble.com/v2/station/"+$(this).attr("radioid")+"?token=" + dirble_api_token, function( data ) {
 
                     socket.send("MPD_API_ADD_TRACK," + data.streams[0].stream);
                     $('.top-right').notify({
@@ -1012,7 +1039,7 @@ function dirble_load_stations() {
                 "<span class=\"glyphicon glyphicon-play\"></span></a>").find('a').click(function(e) {
                     e.stopPropagation();
 
-                    $.getJSON( "http://api.dirble.com/v2/station/"+_this.attr("radioid")+"?token=2e223c9909593b94fc6577361a", function( data ) {
+                    $.getJSON( "https://api.dirble.com/v2/station/"+_this.attr("radioid")+"?token=" + dirble_api_token, function( data ) {
 
                         socket.send("MPD_API_ADD_PLAY_TRACK," + data.streams[0].stream);
                         $('.top-right').notify({

+ 6 - 1
src/mpd_client.c

@@ -64,7 +64,8 @@ int callback_mpd(struct mg_connection *c)
         return MG_TRUE;
 
     if(mpd.conn_state != MPD_CONNECTED && cmd_id != MPD_API_SET_MPDHOST &&
-        cmd_id != MPD_API_GET_MPDHOST && cmd_id != MPD_API_SET_MPDPASS)
+        cmd_id != MPD_API_GET_MPDHOST && cmd_id != MPD_API_SET_MPDPASS &&
+        cmd_id != MPD_API_GET_DIRBLEAPITOKEN)
         return MG_TRUE;
 
     switch(cmd_id)
@@ -290,6 +291,10 @@ out_host_change:
                 "{\"host\" : \"%s\", \"port\": \"%d\", \"passwort_set\": %s}"
                 "}", mpd.host, mpd.port, mpd.password ? "true" : "false");
             break;
+        case MPD_API_GET_DIRBLEAPITOKEN:
+            n = snprintf(mpd.buf, MAX_SIZE, "{\"type\":\"dirbleapitoken\", \""
+                "data\": \"%s\"}", dirble_api_token);
+            break;
         case MPD_API_SET_MPDPASS:
             p_charbuf = strdup(c->content);
             if(strcmp(strtok(p_charbuf, ","), "MPD_API_SET_MPDPASS"))

+ 3 - 0
src/mpd_client.h

@@ -40,6 +40,7 @@
     X(MPD_API_GET_QUEUE) \
     X(MPD_API_GET_BROWSE) \
     X(MPD_API_GET_MPDHOST) \
+    X(MPD_API_GET_DIRBLEAPITOKEN) \
     X(MPD_API_ADD_TRACK) \
     X(MPD_API_ADD_PLAY_TRACK) \
     X(MPD_API_ADD_PLAYLIST) \
@@ -97,6 +98,8 @@ struct t_mpd {
     unsigned queue_version;
 } mpd;
 
+char dirble_api_token[28];
+
 struct t_mpd_client_session {
     int song_id;
     unsigned queue_version;

+ 7 - 0
src/ympd.c

@@ -80,10 +80,13 @@ int main(int argc, char **argv)
     mpd.port = 6600;
     strcpy(mpd.host, "127.0.0.1");
 
+    strcpy(dirble_api_token, "2e223c9909593b94fc6577361a");
+
     static struct option long_options[] = {
         {"host",         required_argument, 0, 'h'},
         {"port",         required_argument, 0, 'p'},
         {"webport",      required_argument, 0, 'w'},
+        {"dirbletoken",  required_argument, 0, 'd'},
         {"user",         required_argument, 0, 'u'},
         {"version",      no_argument,       0, 'v'},
         {"help",         no_argument,       0,  0 },
@@ -103,6 +106,9 @@ int main(int argc, char **argv)
             case 'w':
                 webport = strdup(optarg);
                 break;
+            case 'd':
+                strncpy(dirble_api_token, optarg, sizeof(dirble_api_token));
+                break;
             case 'u':
                 run_as_user = strdup(optarg);
                 break;
@@ -122,6 +128,7 @@ int main(int argc, char **argv)
                         " -p, --port <port>\t\tconnect to mpd at port [6600]\n"
                         " -w, --webport [ip:]<port>\tlisten interface/port for webserver [8080]\n"
                         " -u, --user <username>\t\tdrop priviliges to user after socket bind\n"
+                        " -d, --dirbletoken <apitoken>\tDirble API token\n"
                         " -V, --version\t\t\tget version\n"
                         " -m, --mpdpass <password>\tspecifies the password to use when connecting to mpd\n"
                         " --help\t\t\t\tthis help\n"