mirror of
https://github.com/SuperBFG7/ympd
synced 2025-07-05 19:32:52 +00:00
Fix: add sort in uri
This commit is contained in:
parent
70a247b439
commit
34c46d3eb4
@ -39,22 +39,23 @@ var deferredPrompt;
|
|||||||
var dragEl;
|
var dragEl;
|
||||||
var playlistEl;
|
var playlistEl;
|
||||||
var websocketConnected = false;
|
var websocketConnected = false;
|
||||||
|
var appInited = false;
|
||||||
|
|
||||||
var app = {};
|
var app = {};
|
||||||
app.apps = { "Playback": { "state": "0/-/", "scrollPos": 0 },
|
app.apps = { "Playback": { "state": "0/-/-/", "scrollPos": 0 },
|
||||||
"Queue": {
|
"Queue": {
|
||||||
"active": "Current",
|
"active": "Current",
|
||||||
"tabs": { "Current": { "state": "0/any/", "scrollPos": 0 },
|
"tabs": { "Current": { "state": "0/any/-/", "scrollPos": 0 },
|
||||||
"LastPlayed": { "state": "0/any/", "scrollPos": 0 }
|
"LastPlayed": { "state": "0/any/-/", "scrollPos": 0 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Browse": {
|
"Browse": {
|
||||||
"active": "Database",
|
"active": "Database",
|
||||||
"tabs": { "Filesystem": { "state": "0/-/", "scrollPos": 0 },
|
"tabs": { "Filesystem": { "state": "0/-/-/", "scrollPos": 0 },
|
||||||
"Playlists": {
|
"Playlists": {
|
||||||
"active": "All",
|
"active": "All",
|
||||||
"views": { "All": { "state": "0/-/", "scrollPos": 0 },
|
"views": { "All": { "state": "0/-/-/", "scrollPos": 0 },
|
||||||
"Detail": { "state": "0/-/", "scrollPos": 0 }
|
"Detail": { "state": "0/-/-/", "scrollPos": 0 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Database": {
|
"Database": {
|
||||||
@ -64,11 +65,11 @@ app.apps = { "Playback": { "state": "0/-/", "scrollPos": 0 },
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Search": { "state": "0/any/", "scrollPos": 0 }
|
"Search": { "state": "0/any/-/", "scrollPos": 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
app.current = { "app": "Playback", "tab": undefined, "view": undefined, "page": 0, "filter": "", "search": "", "scrollPos": 0 };
|
app.current = { "app": "Playback", "tab": undefined, "view": undefined, "page": 0, "filter": "", "search": "", "sort": "", "scrollPos": 0 };
|
||||||
app.last = { "app": undefined, "tab": undefined, "view": undefined, "filter": "", "search": "", "scrollPos": 0 };
|
app.last = { "app": undefined, "tab": undefined, "view": undefined, "filter": "", "search": "", "sort": "", "scrollPos": 0 };
|
||||||
|
|
||||||
var domCache = {};
|
var domCache = {};
|
||||||
domCache.navbarBottomBtns = document.getElementById('navbar-bottom').getElementsByTagName('div');
|
domCache.navbarBottomBtns = document.getElementById('navbar-bottom').getElementsByTagName('div');
|
||||||
@ -189,7 +190,7 @@ function appRoute() {
|
|||||||
}
|
}
|
||||||
var hash = decodeURI(location.hash);
|
var hash = decodeURI(location.hash);
|
||||||
var params;
|
var params;
|
||||||
if (params = hash.match(/^\#\/(\w+)\/?(\w+)?\/?(\w+)?\!((\d+)\/([^\/]+)\/(.*))$/)) {
|
if (params = hash.match(/^\#\/(\w+)\/?(\w+)?\/?(\w+)?\!((\d+)\/([^\/]+)\/([^\/]+)\/(.*))$/)) {
|
||||||
app.current.app = params[1];
|
app.current.app = params[1];
|
||||||
app.current.tab = params[2];
|
app.current.tab = params[2];
|
||||||
app.current.view = params[3];
|
app.current.view = params[3];
|
||||||
@ -210,7 +211,8 @@ function appRoute() {
|
|||||||
}
|
}
|
||||||
app.current.page = parseInt(params[5]);
|
app.current.page = parseInt(params[5]);
|
||||||
app.current.filter = params[6];
|
app.current.filter = params[6];
|
||||||
app.current.search = params[7];
|
app.current.sort = params[7];
|
||||||
|
app.current.search = params[8];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
appGoto('Playback');
|
appGoto('Playback');
|
||||||
@ -322,13 +324,13 @@ function appRoute() {
|
|||||||
|
|
||||||
if (domCache.searchstr.value.length >= 2 || domCache.searchCrumb.children.length > 0) {
|
if (domCache.searchstr.value.length >= 2 || domCache.searchCrumb.children.length > 0) {
|
||||||
if (settings.featAdvsearch) {
|
if (settings.featAdvsearch) {
|
||||||
var sort = document.getElementById('SearchList').getAttribute('data-sort');
|
var sort = app.current.sort;//document.getElementById('SearchList').getAttribute('data-sort');
|
||||||
var sortdesc = false;
|
var sortdesc = false;
|
||||||
if (sort == '') {
|
if (sort == '-') {
|
||||||
if (settings.tags.includes('Title'))
|
if (settings.tags.includes('Title'))
|
||||||
sort = 'Title';
|
sort = 'Title';
|
||||||
else
|
else
|
||||||
sort = '';
|
sort = '-';
|
||||||
document.getElementById('SearchList').setAttribute('data-sort', sort);
|
document.getElementById('SearchList').setAttribute('data-sort', sort);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -363,6 +365,7 @@ function appRoute() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function appInitStart() {
|
function appInitStart() {
|
||||||
|
appInited = false;
|
||||||
document.getElementsByTagName('header')[0].classList.add('hide');
|
document.getElementsByTagName('header')[0].classList.add('hide');
|
||||||
document.getElementsByTagName('main')[0].classList.add('hide');
|
document.getElementsByTagName('main')[0].classList.add('hide');
|
||||||
document.getElementsByTagName('footer')[0].classList.add('hide');
|
document.getElementsByTagName('footer')[0].classList.add('hide');
|
||||||
@ -385,6 +388,7 @@ function appInitWait() {
|
|||||||
document.getElementsByTagName('main')[0].classList.remove('hide');
|
document.getElementsByTagName('main')[0].classList.remove('hide');
|
||||||
document.getElementsByTagName('footer')[0].classList.remove('hide');
|
document.getElementsByTagName('footer')[0].classList.remove('hide');
|
||||||
modalAppInit.hide();
|
modalAppInit.hide();
|
||||||
|
appInited = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -742,7 +746,7 @@ function appInit() {
|
|||||||
var col = event.target.getAttribute('data-col');
|
var col = event.target.getAttribute('data-col');
|
||||||
if (col == 'Duration')
|
if (col == 'Duration')
|
||||||
return;
|
return;
|
||||||
var sortcol = document.getElementById('SearchList').getAttribute('data-sort');
|
var sortcol = app.current.sort; //document.getElementById('SearchList').getAttribute('data-sort');
|
||||||
var sortdesc = true;
|
var sortdesc = true;
|
||||||
|
|
||||||
if (sortcol == col || sortcol == '-' + col) {
|
if (sortcol == col || sortcol == '-' + col) {
|
||||||
@ -765,9 +769,11 @@ function appInit() {
|
|||||||
var s = document.getElementById('SearchList').getElementsByClassName('sort-dir');
|
var s = document.getElementById('SearchList').getElementsByClassName('sort-dir');
|
||||||
for (var i = 0; i < s.length; i++)
|
for (var i = 0; i < s.length; i++)
|
||||||
s[i].remove();
|
s[i].remove();
|
||||||
document.getElementById('SearchList').setAttribute('data-sort', sortcol);
|
//document.getElementById('SearchList').setAttribute('data-sort', sortcol);
|
||||||
|
app.current.sort = sortcol;
|
||||||
event.target.innerHTML = col + '<span class="sort-dir material-icons pull-right">' + (sortdesc == true ? 'arrow_drop_up' : 'arrow_drop_down') + '</span>';
|
event.target.innerHTML = col + '<span class="sort-dir material-icons pull-right">' + (sortdesc == true ? 'arrow_drop_up' : 'arrow_drop_down') + '</span>';
|
||||||
appRoute();
|
appGoto(app.current.app, app.current.tab, app.current.view, app.current.page + '/' + app.current.filter + '/' + app.current.sort + '/' + app.current.search);
|
||||||
|
//appRoute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
@ -894,10 +900,10 @@ function search(x) {
|
|||||||
expression += ')';
|
expression += ')';
|
||||||
if (expression.length <= 2)
|
if (expression.length <= 2)
|
||||||
expression = '';
|
expression = '';
|
||||||
appGoto('Search', undefined, undefined, '0/' + app.current.filter + '/' + encodeURI(expression));
|
appGoto('Search', undefined, undefined, '0/' + app.current.filter + '/' + app.current.sort + '/' + encodeURI(expression));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
appGoto('Search', undefined, undefined, '0/' + app.current.filter + '/' + x);
|
appGoto('Search', undefined, undefined, '0/' + app.current.filter + '/' + app.current.sort + '/' + x);
|
||||||
}
|
}
|
||||||
|
|
||||||
function dragAndDropTable(table) {
|
function dragAndDropTable(table) {
|
||||||
@ -1122,7 +1128,7 @@ function webSocketConnect() {
|
|||||||
|
|
||||||
socket.onclose = function(){
|
socket.onclose = function(){
|
||||||
console.log('Websocket is disconnected');
|
console.log('Websocket is disconnected');
|
||||||
if (websocketConnected == true) {
|
if (appInited == true) {
|
||||||
//Show modal only if websocket was already connected before
|
//Show modal only if websocket was already connected before
|
||||||
modalConnectionError.show();
|
modalConnectionError.show();
|
||||||
}
|
}
|
||||||
@ -1302,6 +1308,9 @@ function parseSettings() {
|
|||||||
else
|
else
|
||||||
app.apps.Browse.tabs.Database.active = settings.tags[0];
|
app.apps.Browse.tabs.Database.active = settings.tags[0];
|
||||||
}
|
}
|
||||||
|
if (settings.tags.includes('Title')) {
|
||||||
|
app.apps.Search.sort = 'Title';
|
||||||
|
}
|
||||||
|
|
||||||
document.getElementById('selectJukeboxMode').value = settings.jukeboxMode;
|
document.getElementById('selectJukeboxMode').value = settings.jukeboxMode;
|
||||||
document.getElementById('inputJukeboxQueueLength').value = settings.jukeboxQueueLength;
|
document.getElementById('inputJukeboxQueueLength').value = settings.jukeboxQueueLength;
|
||||||
@ -1350,7 +1359,7 @@ function parseSettings() {
|
|||||||
addTagList('searchtags', 'searchtags');
|
addTagList('searchtags', 'searchtags');
|
||||||
|
|
||||||
for (var i = 0; i < settings.tags.length; i++)
|
for (var i = 0; i < settings.tags.length; i++)
|
||||||
app.apps.Browse.tabs.Database.views[settings.tags[i]] = { "state": "0/-/", "scrollPos": 0 };
|
app.apps.Browse.tabs.Database.views[settings.tags[i]] = { "state": "0/-/-/", "scrollPos": 0 };
|
||||||
|
|
||||||
if (settings.featSyscmds) {
|
if (settings.featSyscmds) {
|
||||||
var mainMenuDropdown = document.getElementById('mainMenuDropdown');
|
var mainMenuDropdown = document.getElementById('mainMenuDropdown');
|
||||||
@ -1420,12 +1429,12 @@ function setCols(table, className) {
|
|||||||
}
|
}
|
||||||
document.getElementById(table + 'ColsDropdown').firstChild.innerHTML = tagChks;
|
document.getElementById(table + 'ColsDropdown').firstChild.innerHTML = tagChks;
|
||||||
|
|
||||||
var sort = document.getElementById('SearchList').getAttribute('data-sort');
|
//var sort = document.getElementById('SearchList').getAttribute('data-sort');
|
||||||
if (sort == '') {
|
if (app.current.sort == '-') {
|
||||||
if (settings.featTags)
|
if (settings.featTags)
|
||||||
sort = 'Title';
|
app.current.sort = 'Title';
|
||||||
else
|
else
|
||||||
sort = 'Filename';
|
app.current.sort = 'Filename';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (table != 'Playback') {
|
if (table != 'Playback') {
|
||||||
@ -1439,9 +1448,9 @@ function setCols(table, className) {
|
|||||||
|
|
||||||
if (table == 'Search' && h == sort ) {
|
if (table == 'Search' && h == sort ) {
|
||||||
var sortdesc = false;
|
var sortdesc = false;
|
||||||
if (sort.indexOf('-') == 0) {
|
if (app.current.sort.indexOf('-') == 0) {
|
||||||
sortdesc = true;
|
sortdesc = true;
|
||||||
sort = sort.substring(1);
|
//sort = sort.substring(1);
|
||||||
}
|
}
|
||||||
heading += '<span class="sort-dir material-icons pull-right">' + (sortdesc == true ? 'arrow_drop_up' : 'arrow_drop_down') + '</span>';
|
heading += '<span class="sort-dir material-icons pull-right">' + (sortdesc == true ? 'arrow_drop_up' : 'arrow_drop_down') + '</span>';
|
||||||
}
|
}
|
||||||
@ -2256,7 +2265,7 @@ function gotoBrowse(x) {
|
|||||||
var tag = x.parentNode.getAttribute('data-tag');
|
var tag = x.parentNode.getAttribute('data-tag');
|
||||||
var name = decodeURI(x.parentNode.getAttribute('data-name'));
|
var name = decodeURI(x.parentNode.getAttribute('data-name'));
|
||||||
if (tag != '' && name != '' && name != '-' && settings.browsetags.includes(tag))
|
if (tag != '' && name != '' && name != '-' && settings.browsetags.includes(tag))
|
||||||
appGoto('Browse', 'Database', tag, '0/-/' + name);
|
appGoto('Browse', 'Database', tag, '0/-/-/' + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
function songDetails(uri) {
|
function songDetails(uri) {
|
||||||
@ -2311,7 +2320,7 @@ function execSyscmd(cmd) {
|
|||||||
|
|
||||||
function playlistDetails(uri) {
|
function playlistDetails(uri) {
|
||||||
document.getElementById('BrowsePlaylistsAllList').classList.add('opacity05');
|
document.getElementById('BrowsePlaylistsAllList').classList.add('opacity05');
|
||||||
appGoto('Browse', 'Playlists', 'Detail', '0/-/' + uri);
|
appGoto('Browse', 'Playlists', 'Detail', '0/-/-/' + uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeFromPlaylist(uri, pos) {
|
function removeFromPlaylist(uri, pos) {
|
||||||
@ -3000,7 +3009,7 @@ function gotoPage(x) {
|
|||||||
default:
|
default:
|
||||||
app.current.page = x;
|
app.current.page = x;
|
||||||
}
|
}
|
||||||
appGoto(app.current.app, app.current.tab, app.current.view, app.current.page + '/' + app.current.filter + '/' + app.current.search);
|
appGoto(app.current.app, app.current.tab, app.current.view, app.current.page + '/' + app.current.filter + '/' + app.current.sort + '/' + app.current.search);
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveQueue() {
|
function saveQueue() {
|
||||||
@ -3161,7 +3170,7 @@ function addFilterLetter(x) {
|
|||||||
default:
|
default:
|
||||||
filter = event.target.innerText;
|
filter = event.target.innerText;
|
||||||
}
|
}
|
||||||
appGoto(app.current.app, app.current.tab, app.current.view, '0/' + filter + '/' + app.current.search);
|
appGoto(app.current.app, app.current.tab, app.current.view, '0/' + filter + '/' + app.current.sort + '/' + app.current.search);
|
||||||
}, false);
|
}, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3190,7 +3199,7 @@ function addTagList(el, list) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function gotoTagList() {
|
function gotoTagList() {
|
||||||
appGoto(app.current.app, app.current.tab, app.current.view, '0/-/');
|
appGoto(app.current.app, app.current.tab, app.current.view, '0/-/-/');
|
||||||
}
|
}
|
||||||
|
|
||||||
function openModal(modal) {
|
function openModal(modal) {
|
||||||
|
@ -207,8 +207,9 @@ int main(int argc, char **argv) {
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Debug flag enabled, setting loglevel to debug\n");
|
printf("Debug flag enabled, setting loglevel to debug\n");
|
||||||
config.loglevel = 3;
|
config.loglevel = 3;
|
||||||
loglevel = config.loglevel;
|
|
||||||
#endif
|
#endif
|
||||||
|
printf("Setting loglevel to %ld\n", config.loglevel);
|
||||||
|
loglevel = config.loglevel;
|
||||||
|
|
||||||
signal(SIGTERM, signal_handler);
|
signal(SIGTERM, signal_handler);
|
||||||
signal(SIGINT, signal_handler);
|
signal(SIGINT, signal_handler);
|
||||||
|
@ -219,13 +219,13 @@ static void mpd_client_api(t_config *config, t_mpd_state *mpd_state, void *arg_r
|
|||||||
unsigned int uint_buf1, uint_buf2, uint_rc;
|
unsigned int uint_buf1, uint_buf2, uint_rc;
|
||||||
int je, int_buf1, int_rc;
|
int je, int_buf1, int_rc;
|
||||||
float float_buf;
|
float float_buf;
|
||||||
bool bool_buf;
|
bool bool_buf, rc;
|
||||||
char *p_charbuf1, *p_charbuf2, *p_charbuf3, *p_charbuf4;
|
char *p_charbuf1, *p_charbuf2, *p_charbuf3, *p_charbuf4;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
struct timespec start, end;
|
struct timespec start, end;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LOG_VERBOSE() printf("API request: %.*s\n", request->length, request->data);
|
LOG_VERBOSE() printf("API request (%ld): %.*s\n", request->conn_id, request->length, request->data);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
|
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
|
||||||
@ -318,20 +318,21 @@ static void mpd_client_api(t_config *config, t_mpd_state *mpd_state, void *arg_r
|
|||||||
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"result\", \"data\": \"ok\"}");
|
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"result\", \"data\": \"ok\"}");
|
||||||
break;
|
break;
|
||||||
case MPD_API_SMARTPLS_UPDATE_ALL:
|
case MPD_API_SMARTPLS_UPDATE_ALL:
|
||||||
uint_rc = mpd_client_smartpls_update_all(config, mpd_state);
|
rc = mpd_client_smartpls_update_all(config, mpd_state);
|
||||||
if (uint_rc == 0)
|
if (rc == true)
|
||||||
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"result\", \"data\": \"Smart Playlists updated\"}");
|
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"result\", \"data\": \"Smart Playlists updated\"}");
|
||||||
else
|
else
|
||||||
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"error\", \"data\": \"Smart Playlists update failed\"}");
|
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"error\", \"data\": \"Smart Playlists update failed\"}");
|
||||||
break;
|
break;
|
||||||
case MPD_API_SMARTPLS_SAVE:
|
case MPD_API_SMARTPLS_SAVE:
|
||||||
je = json_scanf(request->data, request->length, "{data: {type: %Q}}", &p_charbuf1);
|
je = json_scanf(request->data, request->length, "{data: {type: %Q}}", &p_charbuf1);
|
||||||
len = 1;
|
len = 0;
|
||||||
|
rc = false;
|
||||||
if (je == 1) {
|
if (je == 1) {
|
||||||
if (strcmp(p_charbuf1, "sticker") == 0) {
|
if (strcmp(p_charbuf1, "sticker") == 0) {
|
||||||
je = json_scanf(request->data, request->length, "{data: {playlist: %Q, sticker: %Q, maxentries: %d}}", &p_charbuf2, &p_charbuf3, &int_buf1);
|
je = json_scanf(request->data, request->length, "{data: {playlist: %Q, sticker: %Q, maxentries: %d}}", &p_charbuf2, &p_charbuf3, &int_buf1);
|
||||||
if (je == 3) {
|
if (je == 3) {
|
||||||
len = mpd_client_smartpls_save(config, mpd_state, p_charbuf1, p_charbuf2, p_charbuf3, NULL, int_buf1, 0);
|
rc = mpd_client_smartpls_save(config, mpd_state, p_charbuf1, p_charbuf2, p_charbuf3, NULL, int_buf1, 0);
|
||||||
free(p_charbuf2);
|
free(p_charbuf2);
|
||||||
free(p_charbuf3);
|
free(p_charbuf3);
|
||||||
}
|
}
|
||||||
@ -339,14 +340,14 @@ static void mpd_client_api(t_config *config, t_mpd_state *mpd_state, void *arg_r
|
|||||||
else if (strcmp(p_charbuf1, "newest") == 0) {
|
else if (strcmp(p_charbuf1, "newest") == 0) {
|
||||||
je = json_scanf(request->data, request->length, "{data: {playlist: %Q, timerange: %d}}", &p_charbuf2, &int_buf1);
|
je = json_scanf(request->data, request->length, "{data: {playlist: %Q, timerange: %d}}", &p_charbuf2, &int_buf1);
|
||||||
if (je == 2) {
|
if (je == 2) {
|
||||||
len = mpd_client_smartpls_save(config, mpd_state, p_charbuf1, p_charbuf2, NULL, NULL, 0, int_buf1);
|
rc = mpd_client_smartpls_save(config, mpd_state, p_charbuf1, p_charbuf2, NULL, NULL, 0, int_buf1);
|
||||||
free(p_charbuf2);
|
free(p_charbuf2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strcmp(p_charbuf1, "search") == 0) {
|
else if (strcmp(p_charbuf1, "search") == 0) {
|
||||||
je = json_scanf(request->data, request->length, "{data: {playlist: %Q, tag: %Q, searchstr: %Q}}", &p_charbuf2, &p_charbuf3, &p_charbuf4);
|
je = json_scanf(request->data, request->length, "{data: {playlist: %Q, tag: %Q, searchstr: %Q}}", &p_charbuf2, &p_charbuf3, &p_charbuf4);
|
||||||
if (je == 3) {
|
if (je == 3) {
|
||||||
len = mpd_client_smartpls_save(config, mpd_state, p_charbuf1, p_charbuf2, p_charbuf3, p_charbuf4, 0, 0);
|
rc = mpd_client_smartpls_save(config, mpd_state, p_charbuf1, p_charbuf2, p_charbuf3, p_charbuf4, 0, 0);
|
||||||
free(p_charbuf2);
|
free(p_charbuf2);
|
||||||
free(p_charbuf3);
|
free(p_charbuf3);
|
||||||
free(p_charbuf4);
|
free(p_charbuf4);
|
||||||
@ -354,10 +355,12 @@ static void mpd_client_api(t_config *config, t_mpd_state *mpd_state, void *arg_r
|
|||||||
}
|
}
|
||||||
free(p_charbuf1);
|
free(p_charbuf1);
|
||||||
}
|
}
|
||||||
if (len == 0)
|
if (rc == true) {
|
||||||
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"result\", \"data\": \"ok\"}");
|
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"result\", \"data\": \"ok\"}");
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"error\", \"data\": \"Saving playlist failed\"}");
|
len = snprintf(buffer, MAX_SIZE, "{\"type\": \"error\", \"data\": \"Saving playlist failed\"}");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MPD_API_SMARTPLS_GET:
|
case MPD_API_SMARTPLS_GET:
|
||||||
je = json_scanf(request->data, request->length, "{data: {playlist: %Q}}", &p_charbuf1);
|
je = json_scanf(request->data, request->length, "{data: {playlist: %Q}}", &p_charbuf1);
|
||||||
@ -2372,7 +2375,7 @@ static int mpd_client_search_adv(t_config *config, t_mpd_state *mpd_state, char
|
|||||||
RETURN_ERROR_AND_RECOVER("mpd_search_add_expression");
|
RETURN_ERROR_AND_RECOVER("mpd_search_add_expression");
|
||||||
|
|
||||||
if (strcmp(plist, "") == 0) {
|
if (strcmp(plist, "") == 0) {
|
||||||
if (sort != NULL && strcmp(sort, "") != 0 && mpd_state->feat_tags == true) {
|
if (sort != NULL && strcmp(sort, "") != 0 && strcmp(sort, "-") != 0 && mpd_state->feat_tags == true) {
|
||||||
if (mpd_search_add_sort_name(mpd_state->conn, sort, sortdesc) == false)
|
if (mpd_search_add_sort_name(mpd_state->conn, sort, sortdesc) == false)
|
||||||
RETURN_ERROR_AND_RECOVER("mpd_search_add_sort_name");
|
RETURN_ERROR_AND_RECOVER("mpd_search_add_sort_name");
|
||||||
}
|
}
|
||||||
@ -2636,7 +2639,7 @@ static bool mpd_client_smartpls_save(t_config *config, t_mpd_state *mpd_state, c
|
|||||||
printf("Error renaming file from %s to %s\n", tmp_file, pl_file);
|
printf("Error renaming file from %s to %s\n", tmp_file, pl_file);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (mpd_client_smartpls_update_sticker(mpd_state, playlist, tag, maxentries) == 1) {
|
else if (mpd_client_smartpls_update_sticker(mpd_state, playlist, tag, maxentries) == false) {
|
||||||
printf("Update of smart playlist %s failed.\n", playlist);
|
printf("Update of smart playlist %s failed.\n", playlist);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2650,7 +2653,7 @@ static bool mpd_client_smartpls_save(t_config *config, t_mpd_state *mpd_state, c
|
|||||||
printf("Error renaming file from %s to %s\n", tmp_file, pl_file);
|
printf("Error renaming file from %s to %s\n", tmp_file, pl_file);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (mpd_client_smartpls_update_newest(config, mpd_state, playlist, timerange) == 1) {
|
else if (mpd_client_smartpls_update_newest(config, mpd_state, playlist, timerange) == false) {
|
||||||
printf("Update of smart playlist %s failed.\n", playlist);
|
printf("Update of smart playlist %s failed.\n", playlist);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2664,7 +2667,7 @@ static bool mpd_client_smartpls_save(t_config *config, t_mpd_state *mpd_state, c
|
|||||||
printf("Error renaming file from %s to %s\n", tmp_file, pl_file);
|
printf("Error renaming file from %s to %s\n", tmp_file, pl_file);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (mpd_client_smartpls_update_search(config, mpd_state, playlist, tag, searchstr) == 1) {
|
else if (mpd_client_smartpls_update_search(config, mpd_state, playlist, tag, searchstr) == false) {
|
||||||
printf("Update of smart playlist %s failed.\n", playlist);
|
printf("Update of smart playlist %s failed.\n", playlist);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2703,30 +2706,39 @@ static bool mpd_client_smartpls_update_all(t_config *config, t_mpd_state *mpd_st
|
|||||||
if (strcmp(smartpltype, "sticker") == 0) {
|
if (strcmp(smartpltype, "sticker") == 0) {
|
||||||
je = json_scanf(content, strlen(content), "{sticker: %Q, maxentries: %d}", &p_charbuf1, &int_buf1);
|
je = json_scanf(content, strlen(content), "{sticker: %Q, maxentries: %d}", &p_charbuf1, &int_buf1);
|
||||||
if (je == 2) {
|
if (je == 2) {
|
||||||
mpd_client_smartpls_update_sticker(mpd_state, ent->d_name, p_charbuf1, int_buf1);
|
if (mpd_client_smartpls_update_sticker(mpd_state, ent->d_name, p_charbuf1, int_buf1) == false) {
|
||||||
|
printf("Update of smart playlist %s failed.\n", ent->d_name);
|
||||||
|
}
|
||||||
free(p_charbuf1);
|
free(p_charbuf1);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
printf("Can't parse smart playlist file %s\n", filename);
|
printf("Can't parse smart playlist file %s\n", filename);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (strcmp(smartpltype, "newest") == 0) {
|
else if (strcmp(smartpltype, "newest") == 0) {
|
||||||
je = json_scanf(content, strlen(content), "{timerange: %d}", &int_buf1);
|
je = json_scanf(content, strlen(content), "{timerange: %d}", &int_buf1);
|
||||||
if (je == 1) {
|
if (je == 1) {
|
||||||
mpd_client_smartpls_update_newest(config, mpd_state, ent->d_name, int_buf1);
|
if (mpd_client_smartpls_update_newest(config, mpd_state, ent->d_name, int_buf1) == false) {
|
||||||
|
printf("Update of smart playlist %s failed.\n", ent->d_name);
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
printf("Can't parse smart playlist file %s\n", filename);
|
printf("Can't parse smart playlist file %s\n", filename);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (strcmp(smartpltype, "search") == 0) {
|
else if (strcmp(smartpltype, "search") == 0) {
|
||||||
je = json_scanf(content, strlen(content), "{tag: %Q, searchstr: %Q}", &p_charbuf1, &p_charbuf2);
|
je = json_scanf(content, strlen(content), "{tag: %Q, searchstr: %Q}", &p_charbuf1, &p_charbuf2);
|
||||||
if (je == 2) {
|
if (je == 2) {
|
||||||
mpd_client_smartpls_update_search(config, mpd_state, ent->d_name, p_charbuf1, p_charbuf2);
|
if (mpd_client_smartpls_update_search(config, mpd_state, ent->d_name, p_charbuf1, p_charbuf2) == false) {
|
||||||
|
printf("Update of smart playlist %s failed.\n", ent->d_name);
|
||||||
|
}
|
||||||
free(p_charbuf1);
|
free(p_charbuf1);
|
||||||
free(p_charbuf2);
|
free(p_charbuf2);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
printf("Can't parse smart playlist file %s\n", filename);
|
printf("Can't parse smart playlist file %s\n", filename);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
free(smartpltype);
|
free(smartpltype);
|
||||||
free(content);
|
free(content);
|
||||||
}
|
}
|
||||||
@ -2775,7 +2787,7 @@ static bool mpd_client_smartpls_update_search(t_config *config, t_mpd_state *mpd
|
|||||||
else {
|
else {
|
||||||
mpd_client_search(config, mpd_state, buffer, searchstr, tag, playlist, 0);
|
mpd_client_search(config, mpd_state, buffer, searchstr, tag, playlist, 0);
|
||||||
}
|
}
|
||||||
LOG_INFO() printf("Updated %s\n", playlist);
|
LOG_INFO() printf("Updated smart playlist %s\n", playlist);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2841,7 +2853,7 @@ static bool mpd_client_smartpls_update_sticker(t_mpd_state *mpd_state, const cha
|
|||||||
current = current->next;
|
current = current->next;
|
||||||
}
|
}
|
||||||
list_free(&add_list);
|
list_free(&add_list);
|
||||||
LOG_INFO() printf("Updated %s with %ld songs, minValue: %ld\n", playlist, i, value_max);
|
LOG_INFO() printf("Updated smart playlist %s with %ld songs, minValue: %ld\n", playlist, i, value_max);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2871,7 +2883,7 @@ static bool mpd_client_smartpls_update_newest(t_config *config, t_mpd_state *mpd
|
|||||||
snprintf(searchstr, 20, "%d", value_max);
|
snprintf(searchstr, 20, "%d", value_max);
|
||||||
mpd_client_search(config, mpd_state, buffer, searchstr, "modified-since", playlist, 0);
|
mpd_client_search(config, mpd_state, buffer, searchstr, "modified-since", playlist, 0);
|
||||||
}
|
}
|
||||||
LOG_INFO() printf("Updated %s\n", playlist);
|
LOG_INFO() printf("Updated smart playlist %s\n", playlist);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ static void ev_handler_redirect(struct mg_connection *nc, int ev, void *ev_data)
|
|||||||
static bool handle_api(long conn_id, const char *request_body, int request_len) {
|
static bool handle_api(long conn_id, const char *request_body, int request_len) {
|
||||||
char *cmd;
|
char *cmd;
|
||||||
|
|
||||||
LOG_VERBOSE() printf("API request: %.*s\n", request_len, request_body);
|
LOG_VERBOSE() printf("API request (%ld): %.*s\n", conn_id, request_len, request_body);
|
||||||
const int je = json_scanf(request_body, request_len, "{cmd: %Q}", &cmd);
|
const int je = json_scanf(request_body, request_len, "{cmd: %Q}", &cmd);
|
||||||
if (je < 1)
|
if (je < 1)
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user