mirror of
https://gitlab.science.ru.nl/technicie/MarietjeDjango.git
synced 2025-12-09 20:52:20 +01:00
Add maximum length a person can queue in a row.
This commit is contained in:
@ -8,6 +8,7 @@ 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
|
||||||
|
from django.conf import settings
|
||||||
from mutagen import File
|
from mutagen import File
|
||||||
|
|
||||||
from marietje.utils import song_to_dict, playlist_song_to_dict, send_to_bertha
|
from marietje.utils import song_to_dict, playlist_song_to_dict, send_to_bertha
|
||||||
@ -211,10 +212,14 @@ def cancel(request):
|
|||||||
def request(request):
|
def request(request):
|
||||||
queue = request.user.queue
|
queue = request.user.queue
|
||||||
song = get_object_or_404(Song, id=request.POST.get('id'), deleted=False)
|
song = get_object_or_404(Song, id=request.POST.get('id'), deleted=False)
|
||||||
queue.request(song, request.user)
|
if queue.request(song, request.user):
|
||||||
|
return JsonResponse({
|
||||||
|
'success': True
|
||||||
|
})
|
||||||
|
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
'success': True
|
'success': False,
|
||||||
|
'message': 'You cannot request more than ' + str(settings.MAX_MINUTES_IN_A_ROW) + ' minutes in a row.'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -144,3 +144,4 @@ BERTHA_HOST = ('hardcoding.nl', 1819)
|
|||||||
|
|
||||||
MAIL_FROM = 'marietje@hardcoding.nl'
|
MAIL_FROM = 'marietje@hardcoding.nl'
|
||||||
|
|
||||||
|
MAX_MINUTES_IN_A_ROW = 20
|
||||||
|
|||||||
@ -32,8 +32,14 @@ $(function () {
|
|||||||
|
|
||||||
$(document).on('click', '[data-song-id]', function () {
|
$(document).on('click', '[data-song-id]', function () {
|
||||||
var songId = $(this).data('song-id');
|
var songId = $(this).data('song-id');
|
||||||
$.post('/api/request', {id: songId, csrfmiddlewaretoken: csrf_token}, function () {
|
$.post('/api/request', {id: songId, csrfmiddlewaretoken: csrf_token}, function (result) {
|
||||||
refreshQueue();
|
if(result.success) {
|
||||||
|
refreshQueue();
|
||||||
|
} else {
|
||||||
|
// Close request table and show message.
|
||||||
|
hideRequestTable();
|
||||||
|
createAlert('danger', result.message);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
$(this).parent().text($(this).text());
|
$(this).parent().text($(this).text());
|
||||||
return false;
|
return false;
|
||||||
@ -117,7 +123,6 @@ $(function () {
|
|||||||
$('#queue-time-header').text(showTimeToPlay ? 'Plays In' : 'Plays At');
|
$('#queue-time-header').text(showTimeToPlay ? 'Plays In' : 'Plays At');
|
||||||
Cookies.set('showtimetoplay', showTimeToPlay ? '1' : '0');
|
Cookies.set('showtimetoplay', showTimeToPlay ? '1' : '0');
|
||||||
});
|
});
|
||||||
|
|
||||||
getSongs();
|
getSongs();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -326,3 +331,14 @@ Number.prototype.timestampToHHMMSS = function () {
|
|||||||
}
|
}
|
||||||
return hours + ':' + minutes + ':' + seconds;
|
return hours + ':' + minutes + ':' + seconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createAlert(type, message) {
|
||||||
|
alertText = '<div class="alert alert-' + type + ' alert-dismissable">'+
|
||||||
|
'<button type="button" class="close" ' +
|
||||||
|
'data-dismiss="alert" aria-hidden="true">' +
|
||||||
|
'×' +
|
||||||
|
'</button>' +
|
||||||
|
message +
|
||||||
|
'</div>';
|
||||||
|
$('body > div.container').prepend(alertText);
|
||||||
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import socket, struct, binascii
|
import socket, struct, binascii
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from queues.models import Queue, Playlist
|
from queues.models import Queue, Playlist
|
||||||
|
from django.http import StreamingHttpResponse
|
||||||
|
|
||||||
|
|
||||||
def song_to_dict(song, hash=False, user=False):
|
def song_to_dict(song, hash=False, user=False):
|
||||||
@ -52,3 +53,20 @@ def get_first_queue():
|
|||||||
queue = Queue(name='Queue', playlist=playlist, random_playlist=random_playlist)
|
queue = Queue(name='Queue', playlist=playlist, random_playlist=random_playlist)
|
||||||
queue.save()
|
queue.save()
|
||||||
return queue
|
return queue
|
||||||
|
|
||||||
|
|
||||||
|
def bertha_stream(hash):
|
||||||
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
sock.connect(settings.BERTHA_HOST)
|
||||||
|
sock.sendall(struct.pack("<B", 2) + binascii.unhexlify(hash))
|
||||||
|
data = sock.recv(4096)
|
||||||
|
while data:
|
||||||
|
yield data
|
||||||
|
data = sock.recv(4096)
|
||||||
|
sock.close()
|
||||||
|
|
||||||
|
|
||||||
|
def get_from_bertha(hash):
|
||||||
|
response = StreamingHttpResponse(bertha_stream(hash))
|
||||||
|
response['Content-Disposition'] = 'attachment; filename="{}"'.format(hash)
|
||||||
|
return response
|
||||||
|
|||||||
@ -111,12 +111,27 @@ class Queue(models.Model):
|
|||||||
return songs[1:]
|
return songs[1:]
|
||||||
|
|
||||||
def request(self, song, user):
|
def request(self, song, user):
|
||||||
order = PlaylistSong.objects.filter(playlist=self.playlist).aggregate(Max('order'))['order__max']
|
playlist_songs = PlaylistSong.objects.filter(playlist=self.playlist, state=0).order_by('order')
|
||||||
|
|
||||||
|
order = 0
|
||||||
|
seconds_in_a_row = 0
|
||||||
|
for playlist_song in playlist_songs:
|
||||||
|
order = playlist_song.order
|
||||||
|
if playlist_song.user != user:
|
||||||
|
seconds_in_a_row = 0
|
||||||
|
else:
|
||||||
|
seconds_in_a_row += playlist_song.song.duration
|
||||||
|
|
||||||
|
if seconds_in_a_row > 0 and seconds_in_a_row + song.duration > settings.MAX_MINUTES_IN_A_ROW * 60\
|
||||||
|
and not user.is_superuser:
|
||||||
|
return False
|
||||||
|
|
||||||
if order is None:
|
if order is None:
|
||||||
order = 0
|
order = 0
|
||||||
order += 1
|
order += 1
|
||||||
playlist_song = PlaylistSong(playlist=self.playlist, song=song, user=user, order=order)
|
playlist_song = PlaylistSong(playlist=self.playlist, song=song, user=user, order=order)
|
||||||
playlist_song.save()
|
playlist_song.save()
|
||||||
|
return True
|
||||||
|
|
||||||
def fill_random_queue(self):
|
def fill_random_queue(self):
|
||||||
song_count = PlaylistSong.objects.filter(playlist_id=self.random_playlist_id, state=0).count()
|
song_count = PlaylistSong.objects.filter(playlist_id=self.random_playlist_id, state=0).count()
|
||||||
|
|||||||
Reference in New Issue
Block a user