]> git.parisson.com Git - telemeta.git/commitdiff
* resource children form as checkbox
authoryomguy <yomguy@parisson.com>
Thu, 2 Feb 2012 15:16:19 +0000 (16:16 +0100)
committeryomguy <yomguy@parisson.com>
Thu, 2 Feb 2012 15:16:19 +0000 (16:16 +0100)
* add webm streaming support
* experimental HTML5 video support (webm only)
* please update timeside from dev master branch

example/sandbox_sqlite/settings.py
telemeta/admin.py
telemeta/forms/media.py
telemeta/models/media.py
telemeta/templates/telemeta/mediaitem_detail.html
telemeta/templatetags/telemeta_utils.py
telemeta/views/base.py

index 52a07d1fa510afd239515a1a0eb93c3a35ac06ac..caf727a92d8e97ddb18b4b88413850f532cb2ea1 100644 (file)
@@ -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
index 3edbd968aba7b297f3fc4d920bdece8e57dd39a0..d99517285fdd6639e4b47bd67ea1b07c1ada057f 100644 (file)
@@ -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']
index 798d1671e17d36cba93cc122bd538d5e41737f5b..c176439308639c78c6fd6ae74bdeb119c6fb4240 100644 (file)
@@ -32,7 +32,7 @@
 #
 # Authors: Guillaume Pellerin <yomguy@parisson.com>
 
-
+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
 
index 940a53085d4b23f1c78576cdc30bae5a229208e3..65cd01c73cb807abdb5e88c1ea45af6841d74b1e 100644 (file)
@@ -595,6 +595,11 @@ class DublinCoreToFormatMetadata(object):
                         'relation': 'album',
                         'all': 'all',
                        },
+                    'webm': {
+                        'creator': 'artist',
+                        'relation': 'album',
+                        'all': 'all',
+                       },
                     }
 
     def __init__(self, format):
index 927da5fc5d7f6d7f656888d2b14c13aecd839edf..9cd33f6790d37ba93ea90fd2bdf5cbf64de8ee1d 100644 (file)
@@ -103,6 +103,8 @@ Item : <a href="{% url telemeta-item-detail item.public_id %}">{{ item }}</a>
 {% block content %}
 <div class="{% if item.file %}{% if public_access or perms.telemeta.can_play_all_items %}with-rightcol{% endif %}{% endif %}">
     {% if item.file %}
+
+
     {% if public_access or perms.telemeta.can_play_all_items %}
     <div id="player_maximized" class="ts-skin-lab">
         <a href="#" class="toggle">Minimize</a>
@@ -118,6 +120,14 @@ Item : <a href="{% url telemeta-item-detail item.public_id %}">{{ item }}</a>
             </div>
         </div>
 
+    {% if "video" in mime_type %}
+    <div>
+        <video width="362" controls="controls" preload="auto">
+        <source src="{% url telemeta-item-export item.public_id mime_type|mime_to_ext %}" type="{{ mime_type }}" />
+        </video>
+    </div>
+    {% endif %}
+
         <!-- </div> -->
         <div id="tabs_container">
             <!-- this div will be hidden when everything is fully loaded-->
index ff38074c1b3561addef874def104553f1c0fa139..6aa86846d4584b90c5ec889cdd51b927c3cf72ac 100644 (file)
@@ -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]
+
index a2174d9c1fae75a66cbc973628e4ef105000e36f..5d8cc67e9cfba22ed4de12b905608069fba90009 100644 (file)
@@ -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()