Add duration to audiobook model.
authorRadek Czajka <rczajka@rczajka.pl>
Thu, 21 Jan 2021 11:50:17 +0000 (12:50 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Thu, 21 Jan 2021 11:50:17 +0000 (12:50 +0100)
src/archive/admin.py
src/archive/forms.py
src/archive/migrations/0019_auto_20210121_1249.py [new file with mode: 0644]
src/archive/models.py
src/archive/templates/archive/file_managed.html

index 279c6dc..d9b662b 100644 (file)
@@ -5,10 +5,11 @@ admin.site.register(Project)
 
 
 class AudiobookAdmin(admin.ModelAdmin):
-    list_display = ["title", "slug", "index", "part_name", "license", "youtube_volume"]
+    list_display = ["title", "slug", "index", "part_name", "duration", "license", "youtube_volume"]
     list_filter = ["license"]
     search_fields = ["title", "slug", "part_name", "youtube_volume"]
     list_editable = ["youtube_volume"]
+    readonly_fields = ['duration']
 
 
 admin.site.register(Audiobook, AudiobookAdmin)
index 22c426e..3b68c28 100644 (file)
@@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _
 import mutagen
 from django.utils.encoding import force_bytes
 
+from youtube.utils import get_duration
 from archive.models import Audiobook
 from archive.settings import FILES_PATH, NEW_PATH
 from archive.utils import ExistingFile, sha1_file
@@ -31,6 +32,7 @@ class AudiobookForm(forms.ModelForm):
             # save the file in model
 
             abs_path = os.path.join(NEW_PATH, path)
+            m.duration = get_duration(abs_path)
             m.source_file.save(
                 path,
                 ExistingFile(abs_path))
diff --git a/src/archive/migrations/0019_auto_20210121_1249.py b/src/archive/migrations/0019_auto_20210121_1249.py
new file mode 100644 (file)
index 0000000..9790f1c
--- /dev/null
@@ -0,0 +1,33 @@
+# Generated by Django 3.1.2 on 2021-01-21 12:49
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('archive', '0018_auto_20200703_1718'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='audiobook',
+            name='duration',
+            field=models.FloatField(editable=False, null=True),
+        ),
+        migrations.AlterField(
+            model_name='audiobook',
+            name='mp3_status',
+            field=models.SmallIntegerField(choices=[(5, 'Queued'), (10, 'Waiting'), (20, 'Encoding'), (30, 'Tagging'), (40, 'Converting audio'), (50, 'Converting video'), (60, 'Assembling audio'), (70, 'Assembling video'), (80, 'Joining audio and video'), (100, 'Sending'), (110, 'Setting thumbnail')], editable=False, null=True),
+        ),
+        migrations.AlterField(
+            model_name='audiobook',
+            name='ogg_status',
+            field=models.SmallIntegerField(choices=[(5, 'Queued'), (10, 'Waiting'), (20, 'Encoding'), (30, 'Tagging'), (40, 'Converting audio'), (50, 'Converting video'), (60, 'Assembling audio'), (70, 'Assembling video'), (80, 'Joining audio and video'), (100, 'Sending'), (110, 'Setting thumbnail')], editable=False, null=True),
+        ),
+        migrations.AlterField(
+            model_name='audiobook',
+            name='youtube_status',
+            field=models.SmallIntegerField(choices=[(5, 'Queued'), (10, 'Waiting'), (20, 'Encoding'), (30, 'Tagging'), (40, 'Converting audio'), (50, 'Converting video'), (60, 'Assembling audio'), (70, 'Assembling video'), (80, 'Joining audio and video'), (100, 'Sending'), (110, 'Setting thumbnail')], editable=False, null=True),
+        ),
+    ]
index 3be61d4..11917b8 100644 (file)
@@ -63,6 +63,7 @@ class Audiobook(models.Model):
     source_file = models.FileField(upload_to=source_upload_to, max_length=255, 
             verbose_name=_('source file'), editable=False)
     source_sha1 = models.CharField(max_length=40, editable=False)
+    duration = models.FloatField(null=True, editable=False)
 
     title = models.CharField(max_length=255, verbose_name=_('title'))
     part_name = models.CharField(max_length=255, verbose_name=_('part name'), help_text=_('eg. chapter in a novel'),
index d6e8be8..60d6b6c 100644 (file)
@@ -20,7 +20,7 @@
   <div class="col-xl-7">
     <div class="card mt-4">
       <div class="card-header">
-        <h2><a href="{% url 'book' audiobook.slug %}" %}">{{ audiobook.title }}</a></h2>
+        <h2>{% if audiobook.slug %}<a href="{% url 'book' audiobook.slug %}" %}">{% endif %}{{ audiobook.title }}{% if audiobook.slug %}</a>{% endif %}</h2>
       </div>
       <div class="card-body">
         <form method='post' action='.'>
   </div>
   <div class="card-body">
     <p>Last modified: {{ audiobook.modified }}</p>
-    <p>Plik źródłowy: <a href='{% url "download" audiobook.id %}'>{{ path }}</a>
+    <p>Plik źródłowy: <a href='{{ audiobook.source_file.url }}'>{{ path }}</a>
       (sha1: <tt>{{ audiobook.source_sha1 }}</tt>).
     </p>
     {% multiple_tags_table tags %}