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))