Remove unused fields, add more project settings.
[audio.git] / src / archive / views.py
index f1b1c1b..4865203 100644 (file)
@@ -5,6 +5,7 @@ from urllib.parse import quote
 
 from archive import settings
 from django.contrib.auth.decorators import permission_required
 
 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
 from django.urls import reverse
 from django.db.models import Q, Max
 from django.http import Http404, HttpResponse
@@ -156,20 +157,7 @@ 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)
 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.publish(request.user, publish=publish)
     return redirect(file_managed, aid)
 
 
     return redirect(file_managed, aid)
 
 
@@ -229,7 +217,11 @@ def list_publishing(request):
 
 
 class AudiobookList(ListView):
 
 
 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')
 
 
 @permission_required('archive.change_audiobook')
@@ -244,12 +236,14 @@ def file_managed(request, id):
             except IOError:
                 raise Http404
 
             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 = (
     form = AudiobookForm(instance=audiobook)
 
     user_can_publish = (
@@ -265,6 +259,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})
 
         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())
 
 
     return render(request, "archive/file_managed.html", locals())
 
 
@@ -286,6 +286,39 @@ class BookView(ListView):
     template_name = 'archive/book.html'
 
     def get_queryset(self):
     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"
         )
             "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)
+