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 5c10bdf..31c00d3 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 --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT" +DAEMON_OPT="--user $YMPD_USER --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 c7bbcda..c74b860 100644 --- a/contrib/ympd.default +++ b/contrib/ympd.default @@ -2,3 +2,4 @@ MPD_HOST=localhost MPD_PORT=6600 WEB_PORT=8080 YMPD_USER=nobody +DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a diff --git a/contrib/ympd.service b/contrib/ympd.service index 2289550..7516818 100644 --- a/contrib/ympd.service +++ b/contrib/ympd.service @@ -7,8 +7,9 @@ Environment=MPD_HOST=localhost Environment=MPD_PORT=6600 Environment=WEB_PORT=8080 Environment=YMPD_USER=nobody +Environment=DIRBLE_API_TOKEN=2e223c9909593b94fc6577361a EnvironmentFile=/etc/default/ympd -ExecStart=/usr/bin/ympd --user $YMPD_USER --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT +ExecStart=/usr/bin/ympd --user $YMPD_USER --webport $WEB_PORT --host $MPD_HOST --port $MPD_PORT --dirbletoken $DIRBLE_API_TOKEN Type=simple [Install] diff --git a/htdocs/js/mpd.js b/htdocs/js/mpd.js index 6000b79..6e57d26 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 @@ -29,6 +29,8 @@ var dirble_selected_cat = ""; var dirble_catid = ""; var dirble_page = 1; var isTouch = Modernizr.touch ? 1 : 0; +var dirble_api_token = ""; +var dirble_stations = false; var app = $.sammy(function() { @@ -127,7 +129,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(); + } }); @@ -144,7 +152,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) { @@ -493,6 +507,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}, @@ -652,6 +675,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'); @@ -784,7 +811,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'); @@ -832,7 +859,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'); @@ -859,7 +886,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({ @@ -877,7 +904,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({ @@ -898,7 +925,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({ @@ -916,7 +943,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 7271984..6894fd5 100644 --- a/src/mpd_client.c +++ b/src/mpd_client.c @@ -63,7 +63,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) @@ -256,6 +257,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 dd78af9..0e11c5a 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) \ @@ -94,6 +95,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 afa25c6..caa02f7 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 }, @@ -102,6 +105,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; @@ -118,6 +124,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" " --help\t\t\t\tthis help\n" , argv[0]);