mirror of
https://github.com/SuperBFG7/ympd
synced 2025-05-23 01:24:08 +00:00
Added search queue function
This commit is contained in:
parent
222ee460d6
commit
d773dfb745
@ -122,6 +122,9 @@
|
|||||||
<span class="material-icons">save</span>
|
<span class="material-icons">save</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
<form id="searchqueue" role="search" class="btn btn-secondary">
|
||||||
|
<input type="text" class="form-control" placeholder="Search"/>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table id="queueList" class="table table-hover">
|
<table id="queueList" class="table table-hover">
|
||||||
@ -145,9 +148,9 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<ul class="pagination justify-content-center">
|
<ul id="queuePagination" class="pagination justify-content-center hide">
|
||||||
<li id="queuePrev" class="page-item hide"><a class="page-link text-secondary" href="">Previous</a></li>
|
<li id="queuePrev" class="page-item disabled"><a class="page-link text-secondary" href="">Previous</a></li>
|
||||||
<li id="queueNext" class="page-item hide"><a class="page-link text-secondary" href="">Next</a></li>
|
<li id="queueNext" class="page-item disabled"><a class="page-link text-secondary" href="">Next</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -186,9 +189,9 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<ul class="pagination justify-content-center">
|
<ul id="browsePagination" class="pagination justify-content-center hide">
|
||||||
<li id="browsePrev" class="page-item hide"><a class="page-link text-secondary" href="">Previous</a></li>
|
<li id="browsePrev" class="page-item disabled"><a class="page-link text-secondary" href="">Previous</a></li>
|
||||||
<li id="browseNext" class="page-item hide"><a class="page-link text-secondary" href="">Next</a></li>
|
<li id="browseNext" class="page-item disabled"><a class="page-link text-secondary" href="">Next</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -45,7 +45,7 @@ var app = $.sammy(function() {
|
|||||||
$('#cardQueue').addClass('hide');
|
$('#cardQueue').addClass('hide');
|
||||||
$('#cardBrowse').addClass('hide');
|
$('#cardBrowse').addClass('hide');
|
||||||
$('#cardSearch').addClass('hide');
|
$('#cardSearch').addClass('hide');
|
||||||
$('.page-item').addClass('hide');
|
$('.pagination').addClass('hide');
|
||||||
pagination = 0;
|
pagination = 0;
|
||||||
browsepath = '';
|
browsepath = '';
|
||||||
}
|
}
|
||||||
@ -200,6 +200,8 @@ function webSocketConnect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (obj.type) {
|
switch (obj.type) {
|
||||||
|
case 'queuesearch':
|
||||||
|
//Do the same as queue
|
||||||
case 'queue':
|
case 'queue':
|
||||||
if(current_app !== 'queue')
|
if(current_app !== 'queue')
|
||||||
break;
|
break;
|
||||||
@ -220,6 +222,15 @@ function webSocketConnect() {
|
|||||||
|
|
||||||
$('#queueList > tbody').empty();
|
$('#queueList > tbody').empty();
|
||||||
for (var song in obj.data) {
|
for (var song in obj.data) {
|
||||||
|
if (obj.data[song].type == 'wrap') {
|
||||||
|
$('#'+current_app+'List > tbody').append(
|
||||||
|
"<tr><td><span class=\"material-icons\">error_outline</span></td>" +
|
||||||
|
"<td colspan=\"3\">Too many results, please refine your search!</td>" +
|
||||||
|
"<td></td><td></td></tr>"
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
var minutes = Math.floor(obj.data[song].duration / 60);
|
var minutes = Math.floor(obj.data[song].duration / 60);
|
||||||
var seconds = obj.data[song].duration - minutes * 60;
|
var seconds = obj.data[song].duration - minutes * 60;
|
||||||
|
|
||||||
@ -231,11 +242,17 @@ function webSocketConnect() {
|
|||||||
"<td>"+ minutes + ":" + (seconds < 10 ? '0' : '') + seconds +
|
"<td>"+ minutes + ":" + (seconds < 10 ? '0' : '') + seconds +
|
||||||
"</td><td></td></tr>");
|
"</td><td></td></tr>");
|
||||||
}
|
}
|
||||||
|
if (obj.type == 'queue') {
|
||||||
|
if(obj.data.length && obj.data[obj.data.length-1].pos + 1 >= pagination + MAX_ELEMENTS_PER_PAGE) {
|
||||||
|
$('#queueNext').removeClass('disabled');
|
||||||
|
$('#queuePagination').removeClass('hide');
|
||||||
|
}
|
||||||
|
if(pagination > 0) {
|
||||||
|
$('#queuePrev').removeClass('disabled');
|
||||||
|
$('#queuePagination').removeClass('hide');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(obj.data.length && obj.data[obj.data.length-1].pos + 1 >= pagination + MAX_ELEMENTS_PER_PAGE)
|
|
||||||
$('#queueNext').removeClass('hide');
|
|
||||||
if(pagination > 0)
|
|
||||||
$('#queuePrev').removeClass('hide');
|
|
||||||
if ( isTouch ) {
|
if ( isTouch ) {
|
||||||
$('#queueList > tbody > tr > td:last-child').append(
|
$('#queueList > tbody > tr > td:last-child').append(
|
||||||
"<a class=\"pull-right btn-group-hover color-darkgrey\" href=\"#/\" " +
|
"<a class=\"pull-right btn-group-hover color-darkgrey\" href=\"#/\" " +
|
||||||
@ -345,7 +362,8 @@ function webSocketConnect() {
|
|||||||
break;
|
break;
|
||||||
case 'wrap':
|
case 'wrap':
|
||||||
if(current_app == 'browse') {
|
if(current_app == 'browse') {
|
||||||
$('#browseNext').removeClass('hide');
|
$('#browseNext').removeClass('disabled');
|
||||||
|
$('#browsePagination').removeClass('hide');
|
||||||
} else {
|
} else {
|
||||||
$('#'+current_app+'List > tbody').append(
|
$('#'+current_app+'List > tbody').append(
|
||||||
"<tr><td><span class=\"material-icons\">error_outline</span></td>" +
|
"<tr><td><span class=\"material-icons\">error_outline</span></td>" +
|
||||||
@ -356,8 +374,10 @@ function webSocketConnect() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pagination > 0)
|
if(pagination > 0) {
|
||||||
$('#browsePrev').removeClass('hide');
|
$('#browsePrev').removeClass('disabled');
|
||||||
|
$('#browsePagination').removeClass('hide');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -705,6 +725,22 @@ $('#search').submit(function () {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#searchqueue > input').keyup(function (event) {
|
||||||
|
// if ( event.which == 13 ) {
|
||||||
|
var searchstr=$('#searchqueue > input').val();
|
||||||
|
if (searchstr.length > 3) {
|
||||||
|
socket.send('MPD_API_SEARCH_QUEUE,' + searchstr);
|
||||||
|
}
|
||||||
|
else if (searchstr.length == 0) {
|
||||||
|
socket.send('MPD_API_GET_QUEUE,0');
|
||||||
|
}
|
||||||
|
// }
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#searchqueue').submit(function () {
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
$('.page-link').on('click', function (e) {
|
$('.page-link').on('click', function (e) {
|
||||||
|
|
||||||
switch ($(this).text()) {
|
switch ($(this).text()) {
|
||||||
|
@ -66,13 +66,11 @@ int callback_mpd(struct mg_connection *c)
|
|||||||
int int_buf;
|
int int_buf;
|
||||||
char *p_charbuf = NULL, *token;
|
char *p_charbuf = NULL, *token;
|
||||||
|
|
||||||
|
// fprintf(stdout,"%s\n",c->content);
|
||||||
|
|
||||||
if(cmd_id == -1)
|
if(cmd_id == -1)
|
||||||
return MG_TRUE;
|
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)
|
|
||||||
// return MG_TRUE;
|
|
||||||
|
|
||||||
switch(cmd_id)
|
switch(cmd_id)
|
||||||
{
|
{
|
||||||
case MPD_API_UPDATE_DB:
|
case MPD_API_UPDATE_DB:
|
||||||
@ -234,6 +232,20 @@ out_playlist:
|
|||||||
out_save_queue:
|
out_save_queue:
|
||||||
free(p_charbuf);
|
free(p_charbuf);
|
||||||
break;
|
break;
|
||||||
|
case MPD_API_SEARCH_QUEUE:
|
||||||
|
p_charbuf = strdup(c->content);
|
||||||
|
if(strcmp(strtok(p_charbuf, ","), "MPD_API_SEARCH_QUEUE"))
|
||||||
|
goto out_search_queue;
|
||||||
|
|
||||||
|
if((token = strtok(NULL, ",")) == NULL)
|
||||||
|
goto out_search_queue;
|
||||||
|
|
||||||
|
free(p_charbuf);
|
||||||
|
p_charbuf = strdup(c->content);
|
||||||
|
n = mpd_search_queue(mpd.buf, get_arg1(p_charbuf));
|
||||||
|
out_search_queue:
|
||||||
|
free(p_charbuf);
|
||||||
|
break;
|
||||||
case MPD_API_SEARCH:
|
case MPD_API_SEARCH:
|
||||||
p_charbuf = strdup(c->content);
|
p_charbuf = strdup(c->content);
|
||||||
if(strcmp(strtok(p_charbuf, ","), "MPD_API_SEARCH"))
|
if(strcmp(strtok(p_charbuf, ","), "MPD_API_SEARCH"))
|
||||||
@ -628,10 +640,6 @@ int mpd_put_queue(char *buffer, unsigned int offset)
|
|||||||
cur += json_emit_quoted_str(cur, end - cur, mpd_get_album(song));
|
cur += json_emit_quoted_str(cur, end - cur, mpd_get_album(song));
|
||||||
cur += json_emit_raw_str(cur, end - cur, ",\"title\":");
|
cur += json_emit_raw_str(cur, end - cur, ",\"title\":");
|
||||||
cur += json_emit_quoted_str(cur, end - cur, mpd_get_title(song));
|
cur += json_emit_quoted_str(cur, end - cur, mpd_get_title(song));
|
||||||
cur += json_emit_raw_str(cur, end - cur, ",\"artist\":");
|
|
||||||
cur += json_emit_quoted_str(cur, end - cur, mpd_get_artist(song));
|
|
||||||
cur += json_emit_raw_str(cur, end - cur, ",\"album\":");
|
|
||||||
cur += json_emit_quoted_str(cur, end - cur, mpd_get_album(song));
|
|
||||||
cur += json_emit_raw_str(cur, end - cur, "},");
|
cur += json_emit_raw_str(cur, end - cur, "},");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -764,10 +772,58 @@ int mpd_search(char *buffer, char *searchstr)
|
|||||||
cur += json_emit_int(cur, end - cur, mpd_song_get_duration(song));
|
cur += json_emit_int(cur, end - cur, mpd_song_get_duration(song));
|
||||||
cur += json_emit_raw_str(cur, end - cur, ",\"title\":");
|
cur += json_emit_raw_str(cur, end - cur, ",\"title\":");
|
||||||
cur += json_emit_quoted_str(cur, end - cur, mpd_get_title(song));
|
cur += json_emit_quoted_str(cur, end - cur, mpd_get_title(song));
|
||||||
cur += json_emit_raw_str(cur, end - cur, ",\"artist\":");
|
cur += json_emit_raw_str(cur, end - cur, "},");
|
||||||
cur += json_emit_quoted_str(cur, end - cur, mpd_get_artist(song));
|
mpd_song_free(song);
|
||||||
|
|
||||||
|
/* Maximum results */
|
||||||
|
if(i++ >= 300)
|
||||||
|
{
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"wrap\"},");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove last ',' */
|
||||||
|
cur--;
|
||||||
|
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, "]}");
|
||||||
|
}
|
||||||
|
return cur - buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mpd_search_queue(char *buffer, char *searchstr)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
char *cur = buffer;
|
||||||
|
const char *end = buffer + MAX_SIZE;
|
||||||
|
struct mpd_song *song;
|
||||||
|
|
||||||
|
if(mpd_search_queue_songs(mpd.conn, false) == false)
|
||||||
|
RETURN_ERROR_AND_RECOVER("mpd_search_queue_songs");
|
||||||
|
else if(mpd_search_add_any_tag_constraint(mpd.conn, MPD_OPERATOR_DEFAULT, searchstr) == false)
|
||||||
|
RETURN_ERROR_AND_RECOVER("mpd_search_add_any_tag_constraint");
|
||||||
|
else if(mpd_search_commit(mpd.conn) == false)
|
||||||
|
RETURN_ERROR_AND_RECOVER("mpd_search_commit");
|
||||||
|
else {
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"queuesearch\",\"data\":[ ");
|
||||||
|
|
||||||
|
while((song = mpd_recv_song(mpd.conn)) != NULL) {
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, "{\"type\":\"song\",\"uri\":");
|
||||||
|
cur += json_emit_quoted_str(cur, end - cur, mpd_song_get_uri(song));
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, ",\"id\":");
|
||||||
|
cur += json_emit_int(cur, end - cur, mpd_song_get_id(song));
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, ",\"pos\":");
|
||||||
|
cur += json_emit_int(cur, end - cur, mpd_song_get_pos(song));
|
||||||
cur += json_emit_raw_str(cur, end - cur, ",\"album\":");
|
cur += json_emit_raw_str(cur, end - cur, ",\"album\":");
|
||||||
cur += json_emit_quoted_str(cur, end - cur, mpd_get_album(song));
|
cur += json_emit_quoted_str(cur, end - cur, mpd_get_album(song));
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, ",\"artist\":");
|
||||||
|
cur += json_emit_quoted_str(cur, end - cur, mpd_get_artist(song));
|
||||||
|
// cur += json_emit_raw_str(cur, end - cur, ",\"album_artist\":");
|
||||||
|
// cur += json_emit_quoted_str(cur, end - cur, mpd_get_album_artist(song));
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, ",\"duration\":");
|
||||||
|
cur += json_emit_int(cur, end - cur, mpd_song_get_duration(song));
|
||||||
|
cur += json_emit_raw_str(cur, end - cur, ",\"title\":");
|
||||||
|
cur += json_emit_quoted_str(cur, end - cur, mpd_get_title(song));
|
||||||
cur += json_emit_raw_str(cur, end - cur, "},");
|
cur += json_emit_raw_str(cur, end - cur, "},");
|
||||||
mpd_song_free(song);
|
mpd_song_free(song);
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@
|
|||||||
X(MPD_API_RM_RANGE) \
|
X(MPD_API_RM_RANGE) \
|
||||||
X(MPD_API_RM_ALL) \
|
X(MPD_API_RM_ALL) \
|
||||||
X(MPD_API_MOVE_TRACK) \
|
X(MPD_API_MOVE_TRACK) \
|
||||||
|
X(MPD_API_SEARCH_QUEUE) \
|
||||||
X(MPD_API_SEARCH) \
|
X(MPD_API_SEARCH) \
|
||||||
X(MPD_API_SEND_MESSAGE) \
|
X(MPD_API_SEND_MESSAGE) \
|
||||||
X(MPD_API_SET_VOLUME) \
|
X(MPD_API_SET_VOLUME) \
|
||||||
@ -120,6 +121,7 @@ int mpd_put_current_song(char *buffer);
|
|||||||
int mpd_put_queue(char *buffer, unsigned int offset);
|
int mpd_put_queue(char *buffer, unsigned int offset);
|
||||||
int mpd_put_browse(char *buffer, char *path, unsigned int offset);
|
int mpd_put_browse(char *buffer, char *path, unsigned int offset);
|
||||||
int mpd_search(char *buffer, char *searchstr);
|
int mpd_search(char *buffer, char *searchstr);
|
||||||
|
int mpd_search_queue(char *buffer, char *searchstr);
|
||||||
void mpd_disconnect();
|
void mpd_disconnect();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user