]> git.parisson.com Git - telemeta.git/commitdiff
fix #28: use item id from export filename. WARNING: require crem data !r3
authorolivier <>
Thu, 24 May 2007 16:50:22 +0000 (16:50 +0000)
committerolivier <>
Thu, 24 May 2007 16:50:22 +0000 (16:50 +0000)
telemeta/models.py
telemeta/templates/collection.m3u
telemeta/templates/collection_xspf.xml
telemeta/templates/inc/mediaitem_list.html
telemeta/templates/mediaitem_detail.html
telemeta/templates/mediaitem_xspf.xml
telemeta/urls.py
telemeta/web/base.py

index 00f94a1e404317e6aef5d966bb9e9a33dbaadeb0..3b9f97ec6949173d2c30244b3f01aaef8b47a163 100644 (file)
@@ -19,7 +19,7 @@ from telemeta import dublincore as dc
 from xml.dom.minidom import getDOMImplementation
 
 # Regular (sub) expression for matching/validating media objects IDs
-media_id_regex = r'[0-9A-Za-z._:%?-]+'
+media_id_regex = r'[0-9A-Za-z._-]+'
 
 class MediaModel(Component):
     pass
index b849b4e77dede6e38ff987d39a59f39a4ad2ad90..7bb028e5c5e64ba9d7ff112e63aae48605358a47 100644 (file)
@@ -1,3 +1,3 @@
 #EXTM3U{% load telemeta_utils %}{% for item in collection.items.all %}
 #EXTINF:{{ item.get_duration }},{{ item.title }}
-http://{{ host }}{% url telemeta-item-export item.id|urlencode,"MP3" %}{% endfor %}
+http://{{ host }}{% url telemeta-item-export item.id|urlencode,"mp3" %}{% endfor %}
index da067d4acd41e8b84d2c144d6e68e5571bfb2a8a..41a0c19052de2eed483492528492debf8efab6d7 100644 (file)
@@ -14,7 +14,7 @@
     <track>
       <title>{{ item.title }}</title>
       <meta rel="type">mp3</meta>
-      <location>http://{{ host }}{% url telemeta-item-export item.id|urlencode,"MP3" %}</location>
+      <location>http://{{ host }}{% url telemeta-item-export item.id|urlencode,"mp3" %}</location>
       <duration>{{ item.get_duration|mul:1000 }}</duration>
       <info>http://{{ host }}{% url telemeta-item-detail item.id|urlencode %}</info>
     </track>
index 13e32a5dac20a3b97f50502387496789227e7f38..08248e4368b814f9c8b315380a65579c76e85f78 100644 (file)
@@ -8,7 +8,7 @@
     {% endif %}
     <ul>
     {% for p in items %}
-        <li><a href="{% url telemeta-item-detail p.id %}">{{ p.title }}</a></li>
+        <li><a href="{% url telemeta-item-detail p.id|urlencode %}">{{ p.title }}</a></li>
     {% endfor %}
     </ul>
 {% else %}
index 847620d3aa77eabca99106a7b93fcb9fa70e789e..fb73a1c7a8590bd0f04390568ea1b87ef2e5ce31 100644 (file)
@@ -31,7 +31,7 @@
         </p>
         <script type="text/javascript">
           var so = new SWFObject('{% url telemeta-swf "mp3player.swf" %}','line','300','20','7');
-          so.addVariable("file","{% url telemeta-item-export item.id|urlencode,"MP3" %}");
+          so.addVariable("file","{% url telemeta-item-export item.id|urlencode,"mp3" %}");
           so.addVariable("type","mp3");
           so.write('item_player_c');
         </script>
@@ -71,7 +71,7 @@
   </ul>
   Download:
   {% for format in export_formats %}
-      <a href="{% url telemeta-item-export item.id|urlencode,format %}">{{ format }}</a>
+      <a href="{% url telemeta-item-export item.id|urlencode,format.extension %}">{{ format.name }}</a>
   {% endfor %}
 {% else %}
     <p>No such item</p>
index 38293f54078cc451260835b3bf39e0631a0a558c..c1ca2af8d103ed959a6147484d16bc2dbd4b95ae 100644 (file)
@@ -5,7 +5,7 @@
     <track>
       <title>{{ item.title }}</title>
       <meta rel="type">mp3</meta>
-      <location>http://{{ host }}{% url telemeta-item-export item.id|urlencode,"MP3" %}</location>
+      <location>http://{{ host }}{% url telemeta-item-export item.id|urlencode,"mp3" %}</location>
       <duration>{{ item.get_duration|mul:1000 }}</duration>
       <info>http://{{ host }}{% url telemeta-item-detail item.id|urlencode %}</info>
     </track>
index 9e24a64dac787b3f4c880f7843c24388e88c6e90..93966d38f44171c9f13f2677eb0ce877fb28d1ba 100644 (file)
@@ -24,6 +24,7 @@ all_collections = { 'queryset': MediaCollection.objects.all(), }
 # ID's regular expressions
 i_ex = MediaItem.id_regex
 c_ex = MediaCollection.id_regex
+export_extensions = "|".join(web_view.list_export_extensions())
 
 htdocs = os.path.dirname(__file__) + '/htdocs'
 
@@ -42,7 +43,8 @@ urlpatterns = patterns('',
     url(r'^items/(?P<item_id>' + i_ex + ')/dc/xml/$', web_view.item_detail, 
         {'format': 'dublin_core_xml'},
         name="telemeta-item-dublincore-xml"),
-    url(r'^items/(?P<item_id>' + i_ex + ')/download.(?P<format>[0-9A-Z]+)$', 
+    url(r'^items/download/(?P<item_id>' + i_ex + ').(?P<extension>' 
+            + export_extensions + ')$', 
         web_view.item_export,
         name="telemeta-item-export"),
     url(r'^items/(?P<item_id>' + i_ex + ')/visualize/(?P<visualizer_id>[0-9a-z]+)/$', 
index f22425f23c7c3eec2705aa712c80fc79a35d8fdc..7faa4f4847075abb1dd490734579f27f1cc5ccad 100644 (file)
@@ -21,7 +21,7 @@ from django.conf import settings
 import telemeta
 from telemeta.models import MediaItem
 from telemeta.models import MediaCollection
-from telemeta.core import *
+from telemeta.core import Component, ExtensionPoint
 from telemeta.export import *
 from telemeta.visualization import *
 
@@ -43,7 +43,7 @@ class WebView(Component):
         item = MediaItem.objects.get(pk=item_id)
         formats = []
         for exporter in self.exporters:
-            formats.append(exporter.get_format())
+            formats.append({'name': exporter.get_format(), 'extension': exporter.get_file_extension()})
         visualizers = []
         for visualizer in self.visualizers:
             visualizers.append({'name':visualizer.get_name(), 'id': 
@@ -71,14 +71,21 @@ class WebView(Component):
         response = HttpResponse(stream, mimetype = 'image/png')
         return response
 
-    def item_export(self, request, item_id, format):                    
+    def list_export_extensions(self):
+        "Return the recognized item export file extensions, as a list"
+        list = []
+        for exporter in self.exporters:
+            list.append(exporter.get_file_extension())
+        return list
+
+    def item_export(self, request, item_id, extension):                    
         """Export a given media item in the specified format (OGG, FLAC, ...)"""
         for exporter in self.exporters:
-            if exporter.get_format() == format:
+            if exporter.get_file_extension() == extension:
                 break
 
-        if exporter.get_format() != format:
-            raise Http404
+        if exporter.get_file_extension() != extension:
+            raise Http404('Unknown export file extension: %s' % extension)
 
         mime_type = exporter.get_mime_type()
 
@@ -91,8 +98,7 @@ class WebView(Component):
         stream = exporter.process(item.id, infile, metadata)
 
         response = HttpResponse(stream, mimetype = mime_type)
-        response['Content-Disposition'] = 'attachment; filename="download.' + \
-                    exporter.get_file_extension() + '"'
+        response['Content-Disposition'] = 'attachment'
         return response
 
     def quick_search(self, request):