#/usr/bin/python
#
# Show a GTK menu of Movie Trailers available from Apple
# ------------------------------------------------------
# This little demo code shows you a list of available
# movie trailers and their poster art by querying the
# Apple Movie Trailer RSS feed + Websites.
#
# Copyright (c) 2008-07-27 Thomas Perl <thpinfo.com>
# License: GNU General Public License, Version 3 or newer
#

import threading
import subprocess
import feedparser
import urllib2
import re
import gtk
import os
import hashlib

CACHE = './trailers-cache/'
URL = 'http://images.apple.com/trailers/home/rss/newtrailers.rss'

if not os.path.exists(CACHE):
    os.mkdir(CACHE)

def load_cached(url):
    sha = hashlib.sha1()
    sha.update(url)
    fn = os.path.join(CACHE, sha.hexdigest())
    if os.path.exists(fn):
        return open(fn).read()
    else:
        data = urllib2.urlopen(url).read()
        open(fn, 'w').write(data)
        return data

f = feedparser.parse(URL)

objs = [(e.title, load_cached(e.link)) for e in f.entries]

ls = gtk.ListStore(str, str, gtk.gdk.Pixbuf)

for title, html in objs:
    cover = None
    for match in re.finditer('http://movies\.apple\.com/.*\.jpg', html):
        cover = match.group(0)
    for match in re.finditer('http://movies\.apple\.com/.*\.mov', html):
        if cover is not None:
            image_data = load_cached(cover)
            loader = gtk.gdk.PixbufLoader()
            loader.write(image_data)
            loader.close()
            ls.append([title, match.group(0), loader.get_pixbuf()])

w = gtk.Window()
w.set_title('Apple Movie Trailers')

def cb(treeview, path):
    m = treeview.get_model()
    it = m.get_iter(path)
    url = m.get_value(it, 1)
    threading.Thread(target=subprocess.Popen, args=[['totem', url]]).run()

tv = gtk.IconView(ls)

tv.set_text_column(0)
tv.set_pixbuf_column(2)
tv.connect('item-activated', cb)

sw = gtk.ScrolledWindow()
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.add(tv)
w.add(sw)

w.connect('destroy', gtk.main_quit)
w.maximize()
w.show_all()
w.set_property('icon-name', 'video')
gtk.main()

