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
#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 %}
<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>
{% 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 %}
</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>
</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>
<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>
# 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'
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]+)/$',
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 *
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':
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()
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):