Commit 67336cd0 authored by Seb's avatar Seb
Browse files

track tag output

parent 4ebba068
......@@ -21,6 +21,7 @@ setup(
'wagtail>=2.4',
'Django>=1.11',
'django-enumchoicefield>=1.1.0',
'bcp47==0.0.4',
],
extras_require={
'testing': [
......
# Generated by Django 2.2.17 on 2021-01-28 00:22
# Generated by Django 2.2.17 on 2021-01-29 03:21
from django.conf import settings
from django.db import migrations, models
......@@ -17,10 +17,10 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('taggit', '0003_taggeditem_add_unique_index'),
('wagtailcore', '0059_apply_collection_ordering'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('wagtailvideos', '0010_video_ordering'),
('wagtailcore', '0059_apply_collection_ordering'),
('taggit', '0003_taggeditem_add_unique_index'),
]
operations = [
......
This diff is collapsed.
This diff is collapsed.
# Generated by Django 2.2.17 on 2021-01-28 23:40
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('app', '0003_auto_20210129_1006'),
]
operations = [
migrations.DeleteModel(
name='CustomTrack',
),
]
......@@ -16,7 +16,7 @@ INSTALLED_APPS = [
'wagtail.snippets',
'wagtail.images',
'wagtail.documents',
# 'wagtail.contrib.modeladmin',
'wagtail.contrib.modeladmin',
'django.contrib.admin',
'django.contrib.auth',
......
from wagtailvideos import get_video_model_string
from modelcluster.models import ClusterableModel
from modelcluster.fields import ParentalKey
import logging
import mimetypes
import os
......@@ -22,11 +19,15 @@ from django.urls import reverse
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
from enumchoicefield import ChoiceEnum, EnumChoiceField
from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel
from taggit.managers import TaggableManager
from wagtail.core.models import CollectionMember
from wagtail.core.models import CollectionMember, Orderable
from wagtail.search import index
from wagtail.search.queryset import SearchableQuerySetMixin
from wagtailvideos import get_video_model_string
if LooseVersion(wagtail.__version__) >= LooseVersion('2.7'):
from wagtail.admin.models import get_object_usage
else:
......@@ -178,10 +179,6 @@ class AbstractVideo(CollectionMember, index.Indexed, ClusterableModel):
def get_transcode_model(cls):
return cls.transcodes.rel.related_model
@classmethod
def get_track_model(cls):
return cls.tracks.related.related_model
def video_tag(self, attrs=None):
if attrs is None:
attrs = {}
......@@ -200,8 +197,13 @@ class AbstractVideo(CollectionMember, index.Indexed, ClusterableModel):
.format(self.url, mime.guess_type(self.url)[0]))
sources.append("<p>Sorry, your browser doesn't support playback for this video</p>")
tracks = []
if hasattr(self, 'track_listing'):
tracks = [t.track_tag() for t in self.track_listing.tracks.all()]
return mark_safe(
"<video {0}>\n{1}\n</video>".format(flatatt(attrs), "\n".join(sources)))
"<video {0}>\n{1}\n{2}\n</video>".format(flatatt(attrs), "\n".join(sources), "\n".join(tracks)))
def do_transcode(self, media_format, quality):
transcode, created = self.transcodes.get_or_create(
......@@ -295,7 +297,7 @@ class AbstractVideoTranscode(models.Model):
upload_to=get_upload_to)
error_message = models.TextField(blank=True)
@ property
@property
def url(self):
return self.file.url
......@@ -320,13 +322,13 @@ class VideoTranscode(AbstractVideoTranscode):
class TrackListing(ClusterableModel):
video = models.OneToOneField(
get_video_model_string(), on_delete=models.CASCADE,
related_name='tracks')
related_name='track_listing')
def __str__(self):
return self.video.title
class VideoTrack(models.Model):
class VideoTrack(Orderable):
listing = ParentalKey(TrackListing, related_name='tracks', on_delete=models.CASCADE)
# TODO move to TextChoices once django < 3 is dropped
track_kinds = [
......@@ -350,6 +352,18 @@ class VideoTrack(models.Model):
choices=[(v, k) for k, v in bcp47.languages.items()],
default='en', blank=True, help_text='Required if type is "Subtitle"', unique=True)
def track_tag(self):
attrs = {
'kind': self.kind,
'src': self.url,
}
if self.label:
attrs['label'] = self.label
if self.language:
attrs['srclang'] = self.language
return "<track {0}{1}>".format(flatatt(attrs), ' default' if self.sort_order == 0 else '')
def __str__(self):
return "{0} - {1}".format(self.label or self.get_kind_display(), self.get_language_display())
......
......@@ -110,10 +110,10 @@
{% endif %}
{% if tracks_action_url %}
<h2 class="u-text-transform-uppercase">Tracks</h2>
<p>You can add/edit subtitles or accessibility captions for you video. For information about the filetype that should be used see the mozilla docs on <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API">WebVTT</a></p>
{% if video.tracks %}
<p>You can add/edit subtitles or accessibility captions for this video. For information about the filetype that should be used see the mozilla docs on <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API">WebVTT</a></p>
{% if video.track_listing %}
<ul>
{% for track in video.tracks.tracks.all %}
{% for track in video.track_listing.tracks.all %}
<li>{{ track }}</li>
{% endfor %}
</ul>
......
......@@ -16,6 +16,7 @@ from wagtail.search.backends import get_search_backends
from wagtailvideos import ffmpeg, get_video_model, is_modeladmin_installed
from wagtailvideos.forms import VideoTranscodeAdminForm, get_video_form
from wagtailvideos.permissions import permission_policy
from wagtailvideos.models import TrackListing
if LooseVersion(wagtail.__version__) >= LooseVersion('2.7'):
from wagtail.admin.auth import PermissionPolicyChecker
......@@ -119,10 +120,9 @@ def edit(request, video_id):
messages.button(reverse('wagtailvideos:delete', args=(video.id,)), _('Delete'))
])
if is_modeladmin_installed():
tracks_listing = video.tracks
url_helper = AdminURLHelper(Video.get_track_model())
if tracks_listing:
action_url = url_helper.get_action_url('edit', instance_pk=tracks_listing.pk)
url_helper = AdminURLHelper(TrackListing)
if hasattr(video, 'track_listing'):
action_url = url_helper.get_action_url('edit', instance_pk=video.track_listing.pk)
else:
action_url = url_helper.create_url
else:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment