mirror of
https://gitlab.science.ru.nl/technicie/MarietjeDjango.git
synced 2025-12-09 19:52:20 +01:00
90 lines
3.3 KiB
Python
90 lines
3.3 KiB
Python
from django.shortcuts import render, get_object_or_404, redirect
|
|
|
|
from .counters import upload_counter
|
|
from .models import Song
|
|
from django.views.generic import TemplateView
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.contrib import messages
|
|
|
|
from .services import check_upload_stats, get_reputation, upload_file, UploadException
|
|
|
|
|
|
class UploadView(LoginRequiredMixin, TemplateView):
|
|
template_name = "songs/upload.html"
|
|
|
|
def post(self, request, **kwargs):
|
|
files = request.FILES.getlist("file[]")
|
|
artists = request.POST.getlist("artist[]")
|
|
titles = request.POST.getlist("title[]")
|
|
|
|
for artist in artists:
|
|
if not artist:
|
|
messages.add_message(
|
|
request, messages.ERROR, "Please enter artists which are not empty.", extra_tags="danger"
|
|
)
|
|
return render(request, self.template_name)
|
|
|
|
for title in titles:
|
|
if not title:
|
|
messages.add_message(
|
|
request, messages.ERROR, "Please enter titles which are not empty.", extra_tags="danger"
|
|
)
|
|
return render(request, self.template_name)
|
|
|
|
if not check_upload_stats(request.user):
|
|
reputation = get_reputation(request.user)
|
|
msg = (
|
|
"Queue-to-upload ratio too low. Please queue more during regular opening hours to improve the "
|
|
"ratio. (Ratio: {} ≱ 1.00)"
|
|
)
|
|
messages.add_message(request, messages.ERROR, msg.format(reputation), extra_tags="danger")
|
|
return render(request, self.template_name)
|
|
|
|
uploaded_correctly = 0
|
|
for i, file in enumerate(files):
|
|
try:
|
|
upload_file(file, artists[i], titles[i], request.user)
|
|
uploaded_correctly += 1
|
|
except UploadException:
|
|
messages.add_message(
|
|
request,
|
|
messages.ERROR,
|
|
"File {} could not be uploaded due to an exception that "
|
|
"occurred while contacting the file server, please try "
|
|
"again.".format(titles[i]),
|
|
extra_tags="danger",
|
|
)
|
|
if uploaded_correctly > 0:
|
|
messages.add_message(
|
|
request,
|
|
messages.SUCCESS,
|
|
"{}/{} files uploaded.".format(uploaded_correctly, len(files)),
|
|
extra_tags="success",
|
|
)
|
|
upload_counter.inc()
|
|
return render(request, self.template_name)
|
|
|
|
|
|
class ManageView(LoginRequiredMixin, TemplateView):
|
|
template_name = "songs/manage.html"
|
|
|
|
|
|
class EditView(LoginRequiredMixin, TemplateView):
|
|
template_name = "songs/edit.html"
|
|
|
|
def get(self, request, **kwargs):
|
|
song_id = kwargs.get("song_id")
|
|
song = get_object_or_404(Song, pk=song_id, user=request.user)
|
|
return render(request, self.template_name, {"song": song})
|
|
|
|
def post(self, request, **kwargs):
|
|
song_id = kwargs.get("song_id")
|
|
song = get_object_or_404(Song, pk=song_id, user=request.user)
|
|
|
|
artist = request.POST.get("artist")
|
|
title = request.POST.get("title")
|
|
song.artist = artist
|
|
song.title = title
|
|
song.save()
|
|
return redirect("songs:manage")
|