X-Git-Url: https://git.mdrn.pl/audio.git/blobdiff_plain/133902ac65400d9a129d0cba3db3392b925d54e6..631597417095f9adeaef8314862c1b9974e960c9:/src/archive/views.py diff --git a/src/archive/views.py b/src/archive/views.py index f1b1c1b..0b5a5ac 100644 --- a/src/archive/views.py +++ b/src/archive/views.py @@ -5,6 +5,7 @@ from urllib.parse import quote from archive import settings from django.contrib.auth.decorators import permission_required +from django.contrib.postgres.search import SearchVector from django.urls import reverse from django.db.models import Q, Max from django.http import Http404, HttpResponse @@ -156,20 +157,9 @@ def move_to_new(request, filename): def publish(request, aid, publish=True): """ mark file for publishing """ audiobook = get_object_or_404(models.Audiobook, id=aid) - tags = { - 'name': audiobook.title, - 'url': audiobook.url, - 'tags': audiobook.new_publish_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(request.user.id, aid, publish).task_id - audiobook.ogg_task = tasks.OggTask.delay(request.user.id, aid, publish).task_id - audiobook.save() - + audiobook.prepare_for_publish() + if publish: + audiobook.publish(request.user) return redirect(file_managed, aid) @@ -229,7 +219,11 @@ def list_publishing(request): class AudiobookList(ListView): - queryset = models.Audiobook.objects.all() + def get_queryset(self): + qs = models.Audiobook.objects.all() + if 's' in self.request.GET: + qs = qs.annotate(s=SearchVector('title', 'slug')).filter(s=self.request.GET['s']) + return qs @permission_required('archive.change_audiobook') @@ -244,12 +238,14 @@ def file_managed(request, id): except IOError: raise Http404 - path = audiobook.source_file.path[len(settings.FILES_PATH):].lstrip('/') + tags = {} + if audiobook.source_file: + path = audiobook.source_file.path[len(settings.FILES_PATH):].lstrip('/') - # for tags update - tags = mutagen.File(audiobook.source_file.path.encode('utf-8')) - if not tags: - tags = {} + # for tags update + tags = mutagen.File(audiobook.source_file.path.encode('utf-8')) + if not tags: + tags = {} form = AudiobookForm(instance=audiobook) user_can_publish = ( @@ -265,6 +261,12 @@ def file_managed(request, id): if set(series.values_list('index', flat=True)) != set(range(1, parts_count + 1)): alerts.append(_('Part indexes are not 1..%(parts_count)d.') % {"parts_count": parts_count}) + from youtube.models import YouTube + youtube = YouTube.objects.first() + youtube_title = youtube.get_title(audiobook) + youtube_description = youtube.get_description(audiobook) + + return render(request, "archive/file_managed.html", locals()) @@ -286,6 +288,39 @@ class BookView(ListView): template_name = 'archive/book.html' def get_queryset(self): - return models.Audiobook.objects.filter(slug=self.kwargs["slug"]).order_by( + qs = models.Audiobook.objects.filter(slug=self.kwargs["slug"]).order_by( "index" ) + last_vol = None + last_vol_sub = None + for b in qs: + if last_vol is None or last_vol.youtube_volume_index != b.youtube_volume_index: + last_vol = b + b.total = 0 + if last_vol_sub is None or b.youtube_volume: + last_vol_sub = last_vol + last_vol_sub.total_for_sub = 0 + last_vol.total += b.duration + last_vol_sub.total_for_sub += b.duration + b.subtotal = last_vol_sub.total_for_sub + return list(qs) + + +@permission_required('archive.change_audiobook') +def book_youtube_volume(request, aid): + audiobook = get_object_or_404(models.Audiobook, id=aid) + slug = audiobook.slug + cur_vol = audiobook.youtube_volume + new_vol = request.POST.get('volume', '') + + audiobook.youtube_volume = new_vol + audiobook.save() + + for a in models.Audiobook.objects.filter(slug=slug, youtube_volume=cur_vol, index__gt=audiobook.index).order_by('index'): + if a.youtube_volume != cur_vol: + break + a.youtube_volume = new_vol + a.save() + + return redirect('book', audiobook.slug) +