From e3b69e4b7f4ad036e7eb6d700ca8b047110d3fca Mon Sep 17 00:00:00 2001
From: olivier <>
Date: Thu, 24 May 2007 16:50:22 +0000
Subject: [PATCH] fix #28: use item id from export filename. WARNING: require
crem data !r3
---
telemeta/models.py | 2 +-
telemeta/templates/collection.m3u | 2 +-
telemeta/templates/collection_xspf.xml | 2 +-
telemeta/templates/inc/mediaitem_list.html | 2 +-
telemeta/templates/mediaitem_detail.html | 4 ++--
telemeta/templates/mediaitem_xspf.xml | 2 +-
telemeta/urls.py | 4 +++-
telemeta/web/base.py | 22 ++++++++++++++--------
8 files changed, 24 insertions(+), 16 deletions(-)
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):
--
2.39.5