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 @@
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 @@
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):