#!/usr/bin/env python

def gen_urls(url, rand_arg):
	if rand_arg:
		import random

		while True:
			yield url + "?%f" % (random.random(), )
	
	else:
		while True:
			yield url
#	yield "http://www.parisrama.com/webcam1.jpg?%f" % (random.random(), )

def gen_jpgs(urls):
	import urllib2
	for url in urls:
		try:
			f = urllib2.urlopen(url)
			data = f.read()
			f.close()

			yield data
		
		except Exception, e:
			print e

def gen_imgs(jpgs):
	import StringIO
	import PIL.Image

	for jpg in jpgs:
		s = StringIO.StringIO()
		s.write(jpg)
		s.seek(0)

		try:
			img = PIL.Image.open(s)

			yield img

		except Exception, e:
			print e

		s.close()

def gen_temp_jpgs(imgs, fn = "/tmp/tmp.jpg"):
	for img in imgs:
		try:
			img.save(fn)

			yield fn

		except Exception, e:
			print e

def set_desktop_wallpaper(fn, gconftool = "gconftool-2"):
	import os
	os.system("%s -s -t string /desktop/gnome/background/picture_filename %s" % (gconftool, fn, ))

def usage():
	import sys

	print "USAGE: %s [-h|--help] [(-l|--laps)=LAPS] URL" % (sys.argv[0], )
	print 
	print "  -h,--help           Display helps."
	print "  -r,--randarg        Add a random argument to the URL to avoid caching."
	print "  -l,--laps=LAPS      Set refresh laps time in seconds. Default, 30s."
	print
	print "Example: %s -l 5 -r http://www.parisrama.com/webcam1.jpg" % (sys.argv[0], )
	print "Please visit http://gawgle.net/"

if __name__ == "__main__":
	import time
	import sys
	import getopt
	import itertools

	print "Gnome Webcam Wallpaper 0.1.0 - Quick-ugly-coded by Gawen (http://gawgle.net)"
	print

	laps = 30
	rand_arg = False
	url = None
	gconftool = "gconftool-2"

	try:
		opts, args = getopt.getopt(sys.argv[1:], "hl:u:rg:", ("help", "laps", "url", "randarg", "gconftool", ))

	except getopt.GetoptError:
		usage()
		sys.exit(-1)
	
	for opt, arg in opts:
		if opt in ("-h", "--help"):
			usage()
			sys.exit(0)

		elif opt in ("-l", "--laps"):
			laps = int(arg)

		elif opt in ("-u", "--url"):
			url = arg

		elif opt in ("-r", "--randarg"):
			rand_arg = True

		elif opt in ("-g", "--gconftool"):
			gconftool = arg

	if not args:
		print "ERROR: you shall specify an URL."
		usage()
		sys.exit(-1)
	
	url = args[0]

	urls = gen_urls(url = url, rand_arg = rand_arg)
	jpgs = gen_jpgs(urls)
	imgs = gen_imgs(jpgs)
	jpg_fns = gen_temp_jpgs(imgs)
	
	c = itertools.cycle("-\|/")
	i = 0

	for jpg_fn in jpg_fns:
		set_desktop_wallpaper(jpg_fn, gconftool = gconftool)
		print "Refreshed %s" % (c.next())
		time.sleep(laps)

