Genre- and collection-specific thumbnails.
[audio.git] / src / youtube / views.py
index 73eecd3..058178f 100644 (file)
@@ -3,6 +3,7 @@ from django.http import HttpResponse
 from django.shortcuts import redirect, get_object_or_404
 from django.urls import reverse
 from django.utils.decorators import method_decorator
+from django.utils.timezone import now
 from django.views import View
 from django.views.decorators.http import require_POST
 from django.views.generic import DetailView
@@ -17,20 +18,23 @@ from . import models, tasks
 @permission_required('archive.change_audiobook')
 def publish(request, aid, publish=True):
     audiobook = get_object_or_404(Audiobook, id=aid)
-    tags = {}
-    #audiobook.set_youtube_tags(tags)
-    audiobook.youtube_status = status.WAITING
-    audiobook.save(update_fields=['youtube_status'])
-    audiobook.youtube_task = tasks.YouTubeTask.delay(request.user.id, aid, publish).task_id
-    audiobook.save(update_fields=['youtube_task'])
+    if audiobook.is_youtube_publishable:
+        audiobook.youtube_status = status.QUEUED
+        audiobook.youtube_queued = now()
+        audiobook.save(update_fields=['youtube_status', 'youtube_queued'])
     return redirect(reverse('file', args=[aid]))
 
 
-def thumbnail(request, aid):
+def thumbnail(request, aid, thumbnail_id=None):
     audiobook = get_object_or_404(Audiobook, id=aid)
-    yt = models.YouTube.objects.first()
-    buf = yt.prepare_thumbnail(audiobook)
-    return HttpResponse(buf.getvalue(), content_type='image/png')
+    if thumbnail_id is None:
+        yt = models.YouTube.objects.first()
+        buf = yt.prepare_thumbnail(audiobook)
+    else:
+        template = get_object_or_404(models.ThumbnailTemplate, id=thumbnail_id)
+        buf = template.generate(audiobook)
+    buf = buf.getvalue() if buf is not None else b''
+    return HttpResponse(buf, content_type='image/png')
 
 
 class Preview(DetailView):
@@ -43,6 +47,7 @@ class Preview(DetailView):
         ctx['data'] = yt.get_data(ctx['object'])
         ctx['title'] = yt.get_title(ctx['object'])
         ctx['description'] = yt.get_description(ctx['object'])
+        ctx['templates'] = models.ThumbnailTemplate.objects.all()
         return ctx
 
 
@@ -54,3 +59,13 @@ class Update(SingleObjectMixin, View):
         yt = models.YouTube.objects.first()
         yt.update_data(self.get_object())
         return redirect(reverse('file', args=[pk]))
+
+
+@method_decorator(permission_required('archive.change_audiobook'), name='dispatch')
+class UpdateThumbnail(SingleObjectMixin, View):
+    model = Audiobook
+
+    def post(self, request, pk):
+        yt = models.YouTube.objects.first()
+        yt.update_thumbnail(self.get_object())
+        return redirect(reverse('file', args=[pk]))