def __unicode__(self):
return self.code
+ @property
+ def public_id(self):
+ return self.code
+
def has_mediafile(self):
"Tell wether this collection has any media files attached to its items"
items = self.items.all()
objects = query.MediaItemManager()
- def _keywords(self):
+ @property
+ def keywords(self):
return ContextKeyword.objects.filter(mediaitemkeyword__item = self)
- keywords = property(_keywords)
+
+ @property
+ def public_id(self):
+ if self.code:
+ return self.code
+ return self.id
class Meta(MetaCore):
db_table = 'media_items'
return self.get_query_set().none(*args, **kwargs)
def get(self, **kwargs):
- if kwargs.has_key('code_or_id'):
+ if kwargs.has_key('public_id'):
try:
args = kwargs.copy()
- args['code'] = kwargs['code_or_id']
- args.pop('code_or_id')
+ args['code'] = kwargs['public_id']
+ args.pop('public_id')
return super(CoreManager, self).get(**args)
except ObjectDoesNotExist:
args = kwargs.copy()
- args['id'] = kwargs['code_or_id']
- args.pop('code_or_id')
+ args['id'] = kwargs['public_id']
+ args.pop('public_id')
return super(CoreManager, self).get(**args)
return super(CoreManager, self).get(**kwargs)
#EXTM3U{% load telemeta_utils %}{% for item in collection.items.all %}
#EXTINF:{{ item.get_duration }},{{ item.title }}
-http://{{ host }}{% url telemeta-item-export item|code_or_id,"mp3" %}{% endfor %}
+http://{{ host }}{% url telemeta-item-export item.public_id,"mp3" %}{% endfor %}
\r
{% block submenu %}\r
<h3>Collection: {{ collection.title }}</h3>\r
- <div><a href="{% url telemeta-collection-dublincore collection.code %}">Dublin Core</a></div>\r
+ <div><a href="{% url telemeta-collection-dublincore collection.public_id %}">Dublin Core</a></div>\r
{% endblock %}\r
\r
{% block content %}\r
<div id="rightcol">\r
<div id="collection_player">\r
<p><b>Listen to this collection</b>\r
- (<a href="{% url telemeta-collection-m3u collection.code %}">M3U</a>,\r
- <a href="{% url telemeta-collection-xspf collection.code %}">XSPF</a>)</p>\r
+ (<a href="{% url telemeta-collection-m3u collection.public_id %}">M3U</a>,\r
+ <a href="{% url telemeta-collection-xspf collection.public_id %}">XSPF</a>)</p>\r
{% if 0 %} {# Use 1/0 for alternate player #}\r
<!-- This is the XSPF Web Music Player, under the BSD license, \r
from: http://musicplayer.sourceforge.net/-->\r
<object type="application/x-shockwave-flash" width="362" height="200"\r
- data="{% url telemeta-swf "xspf_player.swf" %}?playlist_url={% url telemeta-collection-xspf collection.code %}">\r
+ data="{% url telemeta-swf "xspf_player.swf" %}?playlist_url={% url telemeta-collection-xspf collection.public_id %}">\r
<param name="movie" \r
- value="{% url telemeta-swf "xspf_player.swf" %}?playlist_url={% url telemeta-collection-xspf collection.code %}" />\r
+ value="{% url telemeta-swf "xspf_player.swf" %}?playlist_url={% url telemeta-collection-xspf collection.public_id %}" />\r
</object>\r
{% else %}\r
<!-- This is Jeroen Wijering's Flash MP3 Player, \r
</p>\r
<script type="text/javascript">\r
var so = new SWFObject('{% url telemeta-swf "mp3player.swf" %}','playlist','362','200','7');\r
- so.addVariable("file","{% url telemeta-collection-xspf collection.code %}");\r
+ so.addVariable("file","{% url telemeta-collection-xspf collection.public_id %}");\r
so.addVariable("displayheight","0");\r
so.write('collection_player_c');\r
</script> \r
{% if collection %}
{% block submenu %}
<h3>Collection: {{ collection.title }}</h3>
- <div><a href="{% url telemeta-collection-detail collection.code %}">Normal View</a></div>
+ <div><a href="{% url telemeta-collection-detail collection.public_id %}">Normal View</a></div>
{% endblock %}
{% block content %}
{% with collection.to_dublincore.flatten as dc %}
<creator>{{ dc.creator }}</creator>
<title>{{ dc.title }}</title>
- <info>http://{{ host }}{% url telemeta-collection-detail collection.code %}</info>
+ <info>http://{{ host }}{% url telemeta-collection-detail collection.public_id %}</info>
{% endwith %}
{% endblock %}
<track>
<title>{{ item.title }}</title>
<meta rel="type">mp3</meta>
- <location>http://{{ host }}{% url telemeta-item-export item|code_or_id,"mp3" %}</location>
+ <location>http://{{ host }}{% url telemeta-item-export item.public_id,"mp3" %}</location>
<duration>{{ item.get_duration|mul:1000 }}</duration>
- <info>http://{{ host }}{% url telemeta-item-detail item|code_or_id %}</info>
+ <info>http://{{ host }}{% url telemeta-item-detail item.public_id %}</info>
</track>
{% endfor %}
{% endblock %}
{% endif %}
<ul>
{% for p in collections %}
- <li><a href="{% url telemeta-collection-detail p.code %}">{{ p.title }}</a>
+ <li><a href="{% url telemeta-collection-detail p.public_id %}">{{ p.title }}</a>
</li>
{% endfor %}
{% if more_collections %} <li>[...]</li> {% endif %}
<dd>
{% if element.related|is_item or element.related|is_collection %}
{% if element.related|is_item %}
- <a href="{% url telemeta-item-dublincore element.related|code_or_id %}">{{ element.value }}</a>
+ <a href="{% url telemeta-item-dublincore element.related.public_id %}">{{ element.value }}</a>
{% else %}
- <a href="{% url telemeta-collection-dublincore element.related.code %}">{{ element.value }}</a>
+ <a href="{% url telemeta-collection-dublincore element.related.public_id %}">{{ element.value }}</a>
{% endif %}
{% else %}
{{ element.value }}
{% endif %}
<ul>
{% for p in items %}
- <li><a href="{% url telemeta-item-detail p|code_or_id %}">{{ p.title }}</a></li>
+ <li><a href="{% url telemeta-item-detail p.public_id %}">{{ p.title }}</a></li>
{% endfor %}
{% if more_items %} <li>[...]</li> {% endif %}
</ul>
soundManager.url = '{% url telemeta-swf "./" %}';\r
soundManager.flashVersion = 9;\r
soundManager.debugMode = false;\r
-set_player_image_url('{% url telemeta-item-visualize item|code_or_id,visualizer_id,"WIDTH","HEIGHT" %}');\r
+set_player_image_url('{% url telemeta-item-visualize item.public_id,visualizer_id,"WIDTH","HEIGHT" %}');\r
load_player({{ item.get_duration }});\r
</script>\r
\r
{% if item %}\r
{% block submenu %}\r
<h3>Item : {{ item.title }}</h3>\r
- <div><a href="{% url telemeta-item-dublincore item|code_or_id %}">Dublin Core</a></div>\r
+ <div><a href="{% url telemeta-item-dublincore item.public_id %}">Dublin Core</a></div>\r
{% endblock %}\r
\r
{% block content %}\r
<div class="ts-viewer">\r
<div class="ts-wave">\r
<div class="ts-image-container">\r
- <a href="{% url telemeta-item-export item|code_or_id,"mp3" %}">\r
- <img class="ts-image" src="{% url telemeta-item-visualize item|code_or_id,visualizer_id,360,130 %}" \r
+ <a href="{% url telemeta-item-export item.public_id,"mp3" %}">\r
+ <img class="ts-image" src="{% url telemeta-item-visualize item.public_id,visualizer_id,360,130 %}" \r
alt="" /></a>\r
</div>\r
</div> \r
-->\r
<select id="visualizer_id" name="visualizer_id">\r
{% for v in visualizers %}\r
- <option value="{% url telemeta-item-visualize item|code_or_id,v.id,"WIDTH","HEIGHT" %}">\r
+ <option value="{% url telemeta-item-visualize item.public_id,v.id,"WIDTH","HEIGHT" %}">\r
{{v.name}}</option>\r
{% endfor %}\r
</select>\r
<div class="exporter">\r
<p>Download:\r
{% for format in export_formats %}\r
- <a href="{% url telemeta-item-export item|code_or_id,format.extension %}">{{ format.name }}</a>\r
+ <a href="{% url telemeta-item-export item.public_id,format.extension %}">{{ format.name }}</a>\r
{% endfor %}</p>\r
</div>\r
\r
{% if item.dates_enregistr %}<dt>Date d'enregistrement</dt><dd>{{ item.dates_enregistr }}</dd>{% endif %}\r
{% if item.title %}<dt>Titre</dt><dd>{{ item.title }}</dd>{% endif %}\r
{% if item.transcrip_trad %}<dt>Traduction du titre</dt><dd>{{ item.transcrip_trad }}</dd>{% endif %}\r
- <dt>Collection</dt><dd><a href="{% url telemeta-collection-detail item.collection.code %}">{{ item.collection.title }}</a></dd>\r
+ <dt>Collection</dt><dd><a href="{% url telemeta-collection-detail item.collection.public_id %}">{{ item.collection.title }}</a></dd>\r
{% if item.duree %}<dt>Durée</dt><dd>{{ item.duree }}</dd>{% endif %}\r
{% if item.collection.ispublished and item.Ref %}\r
<dt>Ref</dt><dd>{{ item.Ref }}</dd>\r
<track>
<title>{{ item.title }}</title>
<meta rel="type">mp3</meta>
- <location>http://{{ host }}{% url telemeta-item-export item|code_or_id,"mp3" %}</location>
+ <location>http://{{ host }}{% url telemeta-item-export item.public_id,"mp3" %}</location>
<duration>{{ item.get_duration|mul:1000 }}</duration>
- <info>http://{{ host }}{% url telemeta-item-detail item|code_or_id %}</info>
+ <info>http://{{ host }}{% url telemeta-item-detail item.public_id %}</info>
</track>
{% endblock %}
url(r'^items/$', 'django.views.generic.list_detail.object_list',
dict(all_items, paginate_by=20, template_name="telemeta/mediaitem_list.html"),
name="telemeta-items"),
- url(r'^items/(?P<item_key>[A-Z0-9_]+)/$', web_view.item_detail,
+ url(r'^items/(?P<public_id>[A-Z0-9_]+)/$', web_view.item_detail,
name="telemeta-item-detail"),
- url(r'^items/(?P<item_key>[A-Z0-9_]+)/dc/$', web_view.item_detail,
+ url(r'^items/(?P<public_id>[A-Z0-9_]+)/dc/$', web_view.item_detail,
{'template': 'telemeta/mediaitem_detail_dc.html'},
name="telemeta-item-dublincore"),
- url(r'^items/(?P<item_key>[A-Z0-9_]+)/dc/xml/$', web_view.item_detail,
+ url(r'^items/(?P<public_id>[A-Z0-9_]+)/dc/xml/$', web_view.item_detail,
{'format': 'dublin_core_xml'},
name="telemeta-item-dublincore-xml"),
- url(r'^items/download/(?P<item_key>[A-Z0-9_]+)\.(?P<extension>'
+ url(r'^items/download/(?P<public_id>[A-Z0-9_]+)\.(?P<extension>'
+ export_extensions + ')$',
web_view.item_export,
name="telemeta-item-export"),
- url(r'^items/(?P<item_key>[A-Z0-9_]+)/visualize/(?P<visualizer_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$',
+ url(r'^items/(?P<public_id>[A-Z0-9_]+)/visualize/(?P<visualizer_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$',
web_view.item_visualize,
name="telemeta-item-visualize"),
- url(r'^items/(?P<item_key>[A-Z0-9_]+)/item_xspf.xml$',
+ url(r'^items/(?P<public_id>[A-Z0-9_]+)/item_xspf.xml$',
web_view.item_playlist,
dict(template="telemeta/mediaitem_xspf.xml", mimetype="application/xspf+xml"),
name="telemeta-item-xspf"),
url(r'^collections/?page=(?P<page>[0-9]+)$',
'django.views.generic.list_detail.object_list',
dict(all_collections, paginate_by=20)),
- url(r'^collections/(?P<code>[A-Z0-9_]+)/$', web_view.collection_detail,
+ url(r'^collections/(?P<public_id>[A-Z0-9_]+)/$', web_view.collection_detail,
dict(template="telemeta/collection_detail.html"), name="telemeta-collection-detail"),
- url(r'^collections/(?P<code>[A-Z0-9_]+)/dc/$', web_view.collection_detail,
+ url(r'^collections/(?P<public_id>[A-Z0-9_]+)/dc/$', web_view.collection_detail,
dict(template="telemeta/collection_detail_dc.html"), name="telemeta-collection-dublincore"),
- url(r'^collections/(?P<code>[A-Z0-9_]+)/collection_xspf.xml$',
+ url(r'^collections/(?P<public_id>[A-Z0-9_]+)/collection_xspf.xml$',
web_view.collection_playlist,
dict(template="telemeta/collection_xspf.xml", mimetype="application/xspf+xml"),
name="telemeta-collection-xspf"),
- url(r'^collections/(?P<code>[A-Z0-9_]+)/collection.m3u$',
+ url(r'^collections/(?P<public_id>[A-Z0-9_]+)/collection.m3u$',
web_view.collection_playlist,
dict(template="telemeta/collection.m3u", mimetype="audio/mpegurl"),
name="telemeta-collection-m3u"),
context = Context({})
return HttpResponse(template.render(context))
- def collection_detail(self, request, code, template=''):
- collection = MediaCollection.objects.get(code=code)
+ def collection_detail(self, request, public_id, template=''):
+ collection = MediaCollection.objects.get(public_id=public_id)
return render_to_response(template, {'collection': collection})
- def item_detail(self, request, item_key, template='telemeta/mediaitem_detail.html'):
+ def item_detail(self, request, public_id, template='telemeta/mediaitem_detail.html'):
"""Show the details of a given item"""
- item = MediaItem.objects.get(code_or_id=item_key)
+ item = MediaItem.objects.get(public_id=public_id)
formats = []
for exporter in self.exporters:
'visualizers': visualizers, 'visualizer_id': visualizer_id,
'analysers': analyzers, 'vamp_plugins': vamp_plugin_list})
- def item_visualize(self, request, item_key, visualizer_id, width, height):
+ def item_visualize(self, request, public_id, visualizer_id, width, height):
for visualizer in self.visualizers:
if visualizer.get_id() == visualizer_id:
break
if visualizer.get_id() != visualizer_id:
raise Http404
- item = MediaItem.objects.get(code_or_id=item_key)
+ item = MediaItem.objects.get(public_id=public_id)
visualizer.set_colors((255,255,255), 'purple')
stream = visualizer.render(item, width=int(width), height=int(height))
list.append(exporter.get_file_extension())
return list
- def item_export(self, request, item_key, extension):
+ def item_export(self, request, public_id, extension):
"""Export a given media item in the specified format (OGG, FLAC, ...)"""
for exporter in self.exporters:
if exporter.get_file_extension() == extension:
exporter.set_cache_dir(settings.TELEMETA_EXPORT_CACHE_DIR)
- item = MediaItem.objects.get(code_or_id=item_key)
+ item = MediaItem.objects.get(public_id=public_id)
infile = item.file.path
metadata = item.to_dublincore().flatten()
return self.edit_enumeration(request, enumeration_id)
- def collection_playlist(self, request, code, template, mimetype):
+ def collection_playlist(self, request, public_id, template, mimetype):
try:
- collection = MediaCollection.objects.get(code=code)
+ collection = MediaCollection.objects.get(public_id=public_id)
except ObjectDoesNotExist:
raise Http404
context = Context({'collection': collection, 'host': request.META['HTTP_HOST']})
return HttpResponse(template.render(context), mimetype=mimetype)
- def item_playlist(self, request, item_key, template, mimetype):
+ def item_playlist(self, request, public_id, template, mimetype):
try:
- item = MediaItem.objects.get(code_or_id=item_key)
+ item = MediaItem.objects.get(public_id=public_id)
except ObjectDoesNotExist:
raise Http404