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 @@