mirror of
https://gitlab.science.ru.nl/technicie/MarietjeDjango.git
synced 2025-12-09 22:02:20 +01:00
Advanced searching through songs.
This commit is contained in:
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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')
|
||||||
|
|||||||
Reference in New Issue
Block a user