From: yomguy Date: Thu, 2 Feb 2012 15:16:19 +0000 (+0100) Subject: * resource children form as checkbox X-Git-Tag: 1.3.9~16 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=d5b2406d6d4e59326c50cf66ea3912596d0da4df;p=telemeta.git * resource children form as checkbox * add webm streaming support * experimental HTML5 video support (webm only) * please update timeside from dev master branch --- diff --git a/example/sandbox_sqlite/settings.py b/example/sandbox_sqlite/settings.py index 52a07d1f..caf727a9 100644 --- a/example/sandbox_sqlite/settings.py +++ b/example/sandbox_sqlite/settings.py @@ -121,7 +121,7 @@ TELEMETA_EXPORT_CACHE_DIR = TELEMETA_CACHE_DIR + "/export" TELEMETA_DATA_CACHE_DIR = TELEMETA_CACHE_DIR + "/data" TELEMETA_DOWNLOAD_ENABLED = True -TELEMETA_STREAMING_FORMATS = ('mp3', 'ogg') +TELEMETA_STREAMING_FORMATS = ('mp3', 'ogg', 'webm') TELEMETA_PUBLIC_ACCESS_PERIOD = 51 AUTH_PROFILE_MODULE = 'telemeta.userprofile' SESSION_EXPIRE_AT_BROWSER_CLOSE = False diff --git a/telemeta/admin.py b/telemeta/admin.py index 3edbd968..d9951728 100644 --- a/telemeta/admin.py +++ b/telemeta/admin.py @@ -5,7 +5,7 @@ from telemeta.models.location import * from telemeta.models.language import * from telemeta.models.system import * from django.contrib import admin - +from django.forms import CheckboxSelectMultiple class MediaFondsAdmin(admin.ModelAdmin): search_fields = ['title', 'code'] @@ -14,6 +14,9 @@ class MediaFondsAdmin(admin.ModelAdmin): class MediaCorpusAdmin(admin.ModelAdmin): search_fields = ['title', 'code'] ordering = ['code'] + formfield_overrides = { + models.ManyToManyField: {'widget': CheckboxSelectMultiple} + } class MediaCollectionAdmin(admin.ModelAdmin): search_fields = ['title', 'code'] diff --git a/telemeta/forms/media.py b/telemeta/forms/media.py index 798d1671..c1764393 100644 --- a/telemeta/forms/media.py +++ b/telemeta/forms/media.py @@ -32,7 +32,7 @@ # # Authors: Guillaume Pellerin - +import django.forms as forms from django.forms import ModelForm from telemeta.models import * @@ -45,6 +45,8 @@ class MediaFondsRelatedForm(ModelForm): model = MediaFondsRelated class MediaCorpusForm(ModelForm): + children = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=MediaCollection.objects.all()) + class Meta: model = MediaCorpus diff --git a/telemeta/models/media.py b/telemeta/models/media.py index 940a5308..65cd01c7 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -595,6 +595,11 @@ class DublinCoreToFormatMetadata(object): 'relation': 'album', 'all': 'all', }, + 'webm': { + 'creator': 'artist', + 'relation': 'album', + 'all': 'all', + }, } def __init__(self, format): diff --git a/telemeta/templates/telemeta/mediaitem_detail.html b/telemeta/templates/telemeta/mediaitem_detail.html index 927da5fc..9cd33f67 100644 --- a/telemeta/templates/telemeta/mediaitem_detail.html +++ b/telemeta/templates/telemeta/mediaitem_detail.html @@ -103,6 +103,8 @@ Item : {{ item }} {% block content %}
{% if item.file %} + + {% if public_access or perms.telemeta.can_play_all_items %}
Minimize @@ -118,6 +120,14 @@ Item : {{ item }}
+ {% if "video" in mime_type %} +
+ +
+ {% endif %} +
diff --git a/telemeta/templatetags/telemeta_utils.py b/telemeta/templatetags/telemeta_utils.py index ff38074c..6aa86846 100644 --- a/telemeta/templatetags/telemeta_utils.py +++ b/telemeta/templatetags/telemeta_utils.py @@ -376,3 +376,9 @@ def to_utf8(word): @stringfilter def capitalize(value): return value.capitalize() + +@register.filter +@stringfilter +def mime_to_ext(mime): + return mime.split('/')[1] + diff --git a/telemeta/views/base.py b/telemeta/views/base.py index a2174d9c..5d8cc67e 100644 --- a/telemeta/views/base.py +++ b/telemeta/views/base.py @@ -589,7 +589,8 @@ class ItemView(object): grapher_id = 'waveform' previous, next = self.item_previous_next(item) - self.item_analyze(item) + mime_type = self.item_analyze(item) + print mime_type playlists = get_playlists(request) public_access = get_public_access(item.public_access, str(item.recorded_from_date).split('-')[0], str(item.recorded_to_date).split('-')[0]) @@ -603,7 +604,7 @@ class ItemView(object): 'audio_export_enabled': getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', True), 'previous' : previous, 'next' : next, 'marker': marker_id, 'playlists' : playlists, 'public_access': public_access, 'width': width, 'height': height, - 'related_media': related_media, + 'related_media': related_media, 'mime_type': mime_type, }) @method_decorator(permission_required('telemeta.change_mediaitem')) @@ -626,7 +627,7 @@ class ItemView(object): grapher_id = 'waveform' previous, next = self.item_previous_next(item) - self.item_analyze(item) + mime_type = self.item_analyze(item) if request.method == 'POST': form = MediaItemForm(data=request.POST, files=request.FILES, instance=item) @@ -653,7 +654,7 @@ class ItemView(object): {'item': item, 'export_formats': formats, 'visualizers': graphers, 'visualizer_id': grapher_id, 'audio_export_enabled': getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', True), "form": form, - 'previous' : previous, 'next' : next, + 'previous' : previous, 'next' : next, 'mime_type': mime_type, }) def related_media_item_stream(self, request, item_public_id, media_id): @@ -749,17 +750,19 @@ class ItemView(object): def item_analyze(self, item): analyses = MediaItemAnalysis.objects.filter(item=item) + mime_type = '' if analyses: - if not item.approx_duration: - for analysis in analyses: - if analysis.id == 'duration': - value = analysis.value - time = value.split(':') - time[2] = time[2].split('.')[0] - time = ':'.join(time) - item.approx_duration = str(time) - item.save() + for analysis in analyses: + if not item.approx_duration and analysis.analyzer_id == 'duration': + value = analysis.value + time = value.split(':') + time[2] = time[2].split('.')[0] + time = ':'.join(time) + item.approx_duration = str(time) + item.save() + if analysis.analyzer_id == 'mime_type': + mime_type = analysis.value else: analyzers = [] analyzers_sub = [] @@ -805,6 +808,8 @@ class ItemView(object): unit=analyzer.unit(), value=str(value)) analysis.save() + return mime_type + def item_analyze_xml(self, request, public_id): item = MediaItem.objects.get(public_id=public_id) analyses = MediaItemAnalysis.objects.filter(item=item) @@ -888,11 +893,10 @@ class ItemView(object): else: flag = flag[0] - analyzers = self.item_analyze(item) - if analyzers: - for analyzer in analyzers: - if analyzer['id'] == 'mime_type': - format = analyzer['value'] + mime_type = self.item_analyze(item) + if mime_type: + format = mime_type + else: decoder = timeside.decoder.FileDecoder(audio) format = decoder.format()