X-Git-Url: https://git.mdrn.pl/audio.git/blobdiff_plain/eee35e00bf0d0eb3d2a9f08f72c7052962fecbf6..87b88f4b3401e02b42ae96d7aaf99ba016571c0b:/src/archive/views.py diff --git a/src/archive/views.py b/src/archive/views.py index b5850a0..4ea199a 100644 --- a/src/archive/views.py +++ b/src/archive/views.py @@ -1,14 +1,11 @@ -# Create your views here. - from datetime import datetime import os import os.path -from urllib import quote +from urllib.parse import quote from archive import settings -from django.contrib.auth import logout from django.contrib.auth.decorators import permission_required -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db.models import Q, Max from django.http import Http404, HttpResponse from django.shortcuts import render, redirect, get_object_or_404 @@ -35,8 +32,8 @@ def list_new(request): def file_new(request, filename): division = 'new' - filepath = filename.encode('utf-8') - root_filepath = os.path.join(settings.NEW_PATH, filename.encode('utf-8')) + filepath = filename + root_filepath = os.path.join(settings.NEW_PATH, filename) if request.POST: form = AudiobookForm(request.POST) if form.is_valid(): @@ -65,7 +62,7 @@ def file_new(request, filename): d[tag] = None if not request.POST: - form = AudiobookForm(d) + form = AudiobookForm(initial=d) return render(request, "archive/file_new.html", locals()) @@ -166,13 +163,13 @@ def publish(request, aid, publish=True): 'url': audiobook.url, 'tags': audiobook.new_publish_tags(), } - audiobook.mp3_tags = tags - audiobook.ogg_tags = tags + audiobook.set_mp3_tags(tags) + audiobook.set_ogg_tags(tags) audiobook.mp3_status = audiobook.ogg_status = status.WAITING audiobook.save() # isn't there a race here? - audiobook.mp3_task = tasks.Mp3Task.delay(aid, publish).task_id - audiobook.ogg_task = tasks.OggTask.delay(aid, publish).task_id + audiobook.mp3_task = tasks.Mp3Task.delay(request.user.id, aid, publish).task_id + audiobook.ogg_task = tasks.OggTask.delay(request.user.id, aid, publish).task_id audiobook.save() return redirect(file_managed, aid) @@ -186,23 +183,29 @@ def cancel_publishing(request, aid): # TODO: cancel tasks audiobook.mp3_status = None audiobook.ogg_status = None + audiobook.youtube_status = None audiobook.save() return redirect(file_managed, aid) def download(request, aid, which="source"): - if which not in ("source", "mp3", "ogg"): + if which not in ("source", "mp3", "ogg", 'mkv'): raise Http404 audiobook = get_object_or_404(models.Audiobook, id=aid) - file_ = getattr(audiobook, "%s_file" % which) + field = which + if which == 'mkv': + field = 'youtube' + file_ = getattr(audiobook, "%s_file" % field) if not file_: raise Http404 ext = file_.path.rsplit('.', 1)[-1] - response = HttpResponse(mimetype='application/force-download') + response = HttpResponse(content_type='application/force-download') response['Content-Disposition'] = "attachment; filename*=UTF-8''%s.%s" % ( quote(audiobook.title.encode('utf-8'), safe=''), ext) - response['X-Sendfile'] = file_.path.encode('utf-8') + with open(file_.path, 'rb') as f: + response.write(f.read()) + #response['X-Sendfile'] = file_.path.encode('utf-8') return response @@ -216,15 +219,18 @@ def list_unpublished(request): def list_publishing(request): division = 'publishing' - objects = models.Audiobook.objects.exclude(mp3_status=None, ogg_status=None) + objects = models.Audiobook.objects.exclude(mp3_status=None, ogg_status=None, youtube_status=None) objects_by_status = {} for o in objects: + statuses = set() if o.mp3_status: - k = o.mp3_status, o.get_mp3_status_display() - objects_by_status.setdefault(k, []).append(o) - if o.ogg_status and o.ogg_status != o.mp3_status: - k = o.ogg_status, o.get_ogg_status_display() - objects_by_status.setdefault(k, []).append(o) + statuses.add((o.mp3_status, o.get_mp3_status_display())) + if o.ogg_status: + statuses.add((o.ogg_status, o.get_ogg_status_display())) + if o.youtube_status: + statuses.add((o.youtube_status, o.get_youtube_status_display())) + for status in statuses: + objects_by_status.setdefault(status, []).append(o) status_objects = sorted(objects_by_status.items(), reverse=True) return render(request, "archive/list_publishing.html", locals()) @@ -258,6 +264,21 @@ def file_managed(request, id): tags = {} form = AudiobookForm(instance=audiobook) + user_can_publish = ( + request.user.is_authenticated and + request.user.oauthconnection_set.filter(access=True).exists()) + + alerts = [] + series = models.Audiobook.objects.filter(url=audiobook.url) + real = series.count() + if real != audiobook.parts_count: + alerts.append(_('Parts number inconsitent. Declared number: %(declared)d. Real number: %(real)d') % {"declared": audiobook.parts_count, "real": real}) + if audiobook.parts_count > 1: + if not audiobook.index: + alerts.append(_('There is more than one part, but index is not set.')) + if set(series.values_list('index', flat=True)) != set(range(1, audiobook.parts_count + 1)): + alerts.append(_('Part indexes are not 1..%(parts_count)d.') % {"parts_count": audiobook.parts_count}) + return render(request, "archive/file_managed.html", locals())