Mercurial > public > sg101
view gpp/podcast/views.py @ 402:9175392da056
Fixing #198; add a media player to the podcast pages.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 27 Mar 2011 01:51:18 +0000 |
parents | 1ed461fd2030 |
children | 6e425c9b9d16 |
line wrap: on
line source
""" Views for the podcast application. """ import os.path from urlparse import urlparse from django.shortcuts import render_to_response from django.template import RequestContext from django.shortcuts import get_object_or_404 import django.utils.simplejson as json from podcast.models import Channel from podcast.models import Item def get_ext_from_url(url): """ This function returns the extension part of the path from the given url. """ ext = os.path.splitext(urlparse(url).path)[1] if ext.startswith('.'): ext = ext[1:] return ext def jplayer_params(ext, url, alt_ext, alt_url): """ Compute and returns a 2-tuple: (jplayer_media, jplayer_supplied) where jplayer_media: a string representation of the JSON for the jplayer setMedia parameter jplayer_supplied: the string for the jplayer supplied parameter media_list is an input list or tuple of 2-tuples of the form (media_type, url) where media_type is e.g. mp3, m4a, ogg, etc. """ media = dict([(ext, url)]) if alt_ext and alt_url: media[alt_ext] = alt_url # prefer mp4 to mp3 if alt_ext is None: supplied = [ext] elif ext == "m4a": supplied = (ext, alt_ext) else: supplied = (alt_ext, ext) supplied = ", ".join(supplied) return json.dumps(media), supplied def index(request): try: channel = Channel.objects.get(pk=1) except Channel.DoesNotExist: channel = None return render_to_response('podcast/index.html', { 'channel': channel, }, context_instance = RequestContext(request)) def detail(request, id): podcast = get_object_or_404(Item.objects.select_related(), pk = id) ext = get_ext_from_url(podcast.enclosure_url) alt_ext = None if podcast.alt_enclosure_url: alt_ext = get_ext_from_url(podcast.alt_enclosure_url) jplayer_media, jplayer_supplied = jplayer_params(ext, podcast.enclosure_url, alt_ext, podcast.alt_enclosure_url) return render_to_response('podcast/detail.html', { 'channel': podcast.channel, 'podcast': podcast, 'ext': ext, 'alt_ext': alt_ext, 'jplayer_media': jplayer_media, 'jplayer_supplied': jplayer_supplied, }, context_instance = RequestContext(request)) def feed(request): try: channel = Channel.objects.get(pk=1) except Channel.DoesNotExist: channel = None return render_to_response('podcast/feed.xml', { 'channel': channel, }, context_instance = RequestContext(request))