diff --git a/README.md b/README.md index 08ef76d..da55299 100644 --- a/README.md +++ b/README.md @@ -28,12 +28,13 @@ Run flags ``` Usage: ./ympd [OPTION]... - -h, --host connect to mpd at host [localhost] - -p, --port connect to mpd at port [6600] - -w, --webport [ip:] listen interface/port for webserver [8080] - -u, --user drop priviliges to user after socket bind - -V, --version get version - --help this help + -h, --host connect to mpd at host [localhost] + -p, --port connect to mpd at port [6600] + -w, --webport [ip:] listen interface/port for webserver [8080] + -d, --dirbletoken Dirble API token + -u, --user drop priviliges to user after socket bind + -V, --version get version + --help this help ``` SSL Support diff --git a/contrib/init.debian b/contrib/init.debian index 163b7ef..943e4de 100755 --- a/contrib/init.debian +++ b/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() { diff --git a/contrib/ympd.default b/contrib/ympd.default index e5e7c74..cb3ca72 100644 --- a/contrib/ympd.default +++ b/contrib/ympd.default @@ -3,3 +3,4 @@ MPD_PORT=6600 MPD_PASSWORD= WEB_PORT=8080 YMPD_USER=nobody +DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a diff --git a/contrib/ympd.service b/contrib/ympd.service index 023b926..7b42ebb 100644 --- a/contrib/ympd.service +++ b/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] diff --git a/htdocs/js/mpd.js b/htdocs/js/mpd.js index 56984aa..5c8a8d1 100644 --- a/htdocs/js/mpd.js +++ b/htdocs/js/mpd.js @@ -1,6 +1,6 @@ /* ympd (c) 2013-2014 Andrew Karpow - 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() { "").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() { "").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({ diff --git a/src/mpd_client.c b/src/mpd_client.c index 1a02490..2911e46 100644 --- a/src/mpd_client.c +++ b/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")) diff --git a/src/mpd_client.h b/src/mpd_client.h index 951869d..447dd56 100644 --- a/src/mpd_client.h +++ b/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; diff --git a/src/ympd.c b/src/ympd.c index 304f5b8..00b82ee 100644 --- a/src/ympd.c +++ b/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 \t\tconnect to mpd at port [6600]\n" " -w, --webport [ip:]\tlisten interface/port for webserver [8080]\n" " -u, --user \t\tdrop priviliges to user after socket bind\n" + " -d, --dirbletoken \tDirble API token\n" " -V, --version\t\t\tget version\n" " -m, --mpdpass \tspecifies the password to use when connecting to mpd\n" " --help\t\t\t\tthis help\n"