diff --git a/marietje/api/views.py b/marietje/api/views.py
index c8c3ce6..b602021 100644
--- a/marietje/api/views.py
+++ b/marietje/api/views.py
@@ -3,6 +3,7 @@ from mutagen.mp3 import MP3
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
+from django.db.models import Q
from django.http import JsonResponse, HttpResponseForbidden
from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_http_methods
@@ -29,12 +30,17 @@ def songs(request):
except:
page = 1
- songs_query = Song.objects.filter(
- deleted=False,
- artist__icontains=request.POST.get('artist', ''),
- title__icontains=request.POST.get('title', ''),
- user__name__icontains=request.POST.get('uploader', '')
- ).order_by('artist', 'title').select_related('user')
+ queries = [Q(deleted=False)]
+ queries.extend([Q(Q(artist__icontains=word) | Q(title__icontains=word) | Q(user__name__icontains=word)) for word in request.POST.get('all', '').split()])
+ queries.extend([Q(artist__icontains=word) for word in request.POST.get('artist', '').split()])
+ queries.extend([Q(title__icontains=word) for word in request.POST.get('title', '').split()])
+ queries.extend([Q(user__name__icontains=word) for word in request.POST.get('uploader', '').split()])
+
+ filter_query = queries.pop()
+ for query in queries:
+ filter_query &= query
+
+ songs_query = Song.objects.filter(filter_query).order_by('artist', 'title').select_related('user')
total = songs_query.count()
paginator = Paginator(songs_query, pagesize)
diff --git a/marietje/marietje/static/js/queue.js b/marietje/marietje/static/js/queue.js
index 7fb5945..09340ba 100644
--- a/marietje/marietje/static/js/queue.js
+++ b/marietje/marietje/static/js/queue.js
@@ -41,7 +41,7 @@ $(function () {
console.log('Page: ' + $(this).val());
});
- $('#search-artist, #search-title, #search-uploader, .pagenum').change(function(){
+ $('#search-all, #search-artist, #search-title, #search-uploader, .pagenum').change(function(){
getSongs();
});
@@ -179,12 +179,13 @@ function refreshQueue()
function getSongs()
{
+ var all = $('#search-all').val();
var artist = $('#search-artist').val();
var title = $('#search-title').val();
var uploader = $('#search-uploader').val();
var page = $('.pagenum').val();
var pagesize = $('.pagesize').val();
- $.post('/api/songs', {artist: artist, title: title, uploader: uploader, page: page, pagesize: pagesize, csrfmiddlewaretoken: csrf_token}, function (result) {
+ $.post('/api/songs', {all: all, artist: artist, title: title, uploader: uploader, page: page, pagesize: pagesize, csrfmiddlewaretoken: csrf_token}, function (result) {
$('#request-table tbody').empty();
songs = result.data;
$.each(songs, function (id, song) {
@@ -211,6 +212,7 @@ function showRequestTable()
$('#queue-container').hide();
$('#request-container').removeClass('hidden');
$('#request-container').show();
+ $('#search-all').focus().select();
requestViewOpen = true;
}
diff --git a/marietje/queues/templates/queues/queue.html b/marietje/queues/templates/queues/queue.html
index ec740f0..d0bdb0d 100644
--- a/marietje/queues/templates/queues/queue.html
+++ b/marietje/queues/templates/queues/queue.html
@@ -8,6 +8,7 @@