From: olivier <> Date: Thu, 24 May 2007 16:50:22 +0000 (+0000) Subject: fix #28: use item id from export filename. WARNING: require crem data !r3 X-Git-Tag: 1.1~904 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=e3b69e4b7f4ad036e7eb6d700ca8b047110d3fca;p=telemeta.git fix #28: use item id from export filename. WARNING: require crem data !r3 --- diff --git a/telemeta/models.py b/telemeta/models.py index 00f94a1e..3b9f97ec 100644 --- a/telemeta/models.py +++ b/telemeta/models.py @@ -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 diff --git a/telemeta/templates/collection.m3u b/telemeta/templates/collection.m3u index b849b4e7..7bb028e5 100644 --- a/telemeta/templates/collection.m3u +++ b/telemeta/templates/collection.m3u @@ -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 %} diff --git a/telemeta/templates/collection_xspf.xml b/telemeta/templates/collection_xspf.xml index da067d4a..41a0c190 100644 --- a/telemeta/templates/collection_xspf.xml +++ b/telemeta/templates/collection_xspf.xml @@ -14,7 +14,7 @@ {{ item.title }} mp3 - http://{{ host }}{% url telemeta-item-export item.id|urlencode,"MP3" %} + http://{{ host }}{% url telemeta-item-export item.id|urlencode,"mp3" %} {{ item.get_duration|mul:1000 }} http://{{ host }}{% url telemeta-item-detail item.id|urlencode %} diff --git a/telemeta/templates/inc/mediaitem_list.html b/telemeta/templates/inc/mediaitem_list.html index 13e32a5d..08248e43 100644 --- a/telemeta/templates/inc/mediaitem_list.html +++ b/telemeta/templates/inc/mediaitem_list.html @@ -8,7 +8,7 @@ {% endif %} {% else %} diff --git a/telemeta/templates/mediaitem_detail.html b/telemeta/templates/mediaitem_detail.html index 847620d3..fb73a1c7 100644 --- a/telemeta/templates/mediaitem_detail.html +++ b/telemeta/templates/mediaitem_detail.html @@ -31,7 +31,7 @@

@@ -71,7 +71,7 @@ Download: {% for format in export_formats %} - {{ format }} + {{ format.name }} {% endfor %} {% else %}

No such item

diff --git a/telemeta/templates/mediaitem_xspf.xml b/telemeta/templates/mediaitem_xspf.xml index 38293f54..c1ca2af8 100644 --- a/telemeta/templates/mediaitem_xspf.xml +++ b/telemeta/templates/mediaitem_xspf.xml @@ -5,7 +5,7 @@ {{ item.title }} mp3 - http://{{ host }}{% url telemeta-item-export item.id|urlencode,"MP3" %} + http://{{ host }}{% url telemeta-item-export item.id|urlencode,"mp3" %} {{ item.get_duration|mul:1000 }} http://{{ host }}{% url telemeta-item-detail item.id|urlencode %} diff --git a/telemeta/urls.py b/telemeta/urls.py index 9e24a64d..93966d38 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -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' + i_ex + ')/dc/xml/$', web_view.item_detail, {'format': 'dublin_core_xml'}, name="telemeta-item-dublincore-xml"), - url(r'^items/(?P' + i_ex + ')/download.(?P[0-9A-Z]+)$', + url(r'^items/download/(?P' + i_ex + ').(?P' + + export_extensions + ')$', web_view.item_export, name="telemeta-item-export"), url(r'^items/(?P' + i_ex + ')/visualize/(?P[0-9a-z]+)/$', diff --git a/telemeta/web/base.py b/telemeta/web/base.py index f22425f2..7faa4f48 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -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):