diff podcast/views.py @ 581:ee87ea74d46b

For Django 1.4, rearranged project structure for new manage.py.
author Brian Neal <bgneal@gmail.com>
date Sat, 05 May 2012 17:10:48 -0500
parents gpp/podcast/views.py@6e425c9b9d16
children 89b240fe9297
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/podcast/views.py	Sat May 05 17:10:48 2012 -0500
@@ -0,0 +1,104 @@
+"""
+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
+
+    if channel:
+        channel.items = Item.objects.filter(channel=channel)
+
+    return render_to_response('podcast/feed.xml', {
+        'channel': channel,
+        },
+        context_instance = RequestContext(request))