Advanced searching through songs.

This commit is contained in:
Jim Driessen
2017-01-25 01:37:22 +01:00
parent 6601aaeffd
commit 6ceeb30999
4 changed files with 18 additions and 8 deletions

View File

@ -3,6 +3,7 @@ from mutagen.mp3 import MP3
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Q
from django.http import JsonResponse, HttpResponseForbidden from django.http import JsonResponse, HttpResponseForbidden
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_http_methods from django.views.decorators.http import require_http_methods
@ -29,12 +30,17 @@ def songs(request):
except: except:
page = 1 page = 1
songs_query = Song.objects.filter( queries = [Q(deleted=False)]
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()])
artist__icontains=request.POST.get('artist', ''), queries.extend([Q(artist__icontains=word) for word in request.POST.get('artist', '').split()])
title__icontains=request.POST.get('title', ''), queries.extend([Q(title__icontains=word) for word in request.POST.get('title', '').split()])
user__name__icontains=request.POST.get('uploader', '') queries.extend([Q(user__name__icontains=word) for word in request.POST.get('uploader', '').split()])
).order_by('artist', 'title').select_related('user')
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() total = songs_query.count()
paginator = Paginator(songs_query, pagesize) paginator = Paginator(songs_query, pagesize)

View File

@ -41,7 +41,7 @@ $(function () {
console.log('Page: ' + $(this).val()); 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(); getSongs();
}); });
@ -179,12 +179,13 @@ function refreshQueue()
function getSongs() function getSongs()
{ {
var all = $('#search-all').val();
var artist = $('#search-artist').val(); var artist = $('#search-artist').val();
var title = $('#search-title').val(); var title = $('#search-title').val();
var uploader = $('#search-uploader').val(); var uploader = $('#search-uploader').val();
var page = $('.pagenum').val(); var page = $('.pagenum').val();
var pagesize = $('.pagesize').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(); $('#request-table tbody').empty();
songs = result.data; songs = result.data;
$.each(songs, function (id, song) { $.each(songs, function (id, song) {
@ -211,6 +212,7 @@ function showRequestTable()
$('#queue-container').hide(); $('#queue-container').hide();
$('#request-container').removeClass('hidden'); $('#request-container').removeClass('hidden');
$('#request-container').show(); $('#request-container').show();
$('#search-all').focus().select();
requestViewOpen = true; requestViewOpen = true;
} }

View File

@ -8,6 +8,7 @@
<button id="request-button" class="btn btn-primary">Request</button> <button id="request-button" class="btn btn-primary">Request</button>
<br><br> <br><br>
<div id="request-container" class="hidden"> <div id="request-container" class="hidden">
<input id="search-all" class="search-input" type="text">
<div class="table-responsive"> <div class="table-responsive">
<table id="request-table" class="table table-striped"> <table id="request-table" class="table table-striped">
<thead> <thead>

View File

@ -1,6 +1,7 @@
from django.shortcuts import render from django.shortcuts import render
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@login_required @login_required
def index(request): def index(request):
return render(request, 'queues/queue.html') return render(request, 'queues/queue.html')