#!/usr/bin/python

DEST='wis@localhost:/home/wis/pubwin'
DEST='wis@udev.org:/home/wis/sites/lesuisse.net/www/pubwin'
MATCH='xlogo'
MATCH='Freecell'
MATCH='Aaron'
MATCH='Play money'
OPTIONS='-resize 50% -quality 30'
OPTIONS='-resize 50% -quality 20 -crop 380x200+8+16'
SLEEP=1

import optparse,os,pickle,random,re,signal,stat,sys,time,socket

#----------------------------------------------------------
# Remote ssh side
#----------------------------------------------------------
remote_code="""
import os,pickle,sys
os.chdir('DIR')
while 1:
	obj=pickle.load(sys.stdin)
	for k,v in obj.items():
		fn='%s.jpg'%k.replace('/','_')
		fnt='%s.tmp'%fn
		f=file(fnt,'w')
		f.write(v)
		f.close()
		os.rename(fnt,fn)
"""

def remote_side(dest):
	host,dir=dest.split(":",1)
	code=remote_code.replace("DIR",dir)
	size=len(code)
	cmd=['ssh','-C',host,r'python -c "import sys;exec sys.stdin.read(%s);"'%size]
	(pin,pout)=os.popen2(cmd)
	pin.write(code)
	pin.flush()
	return pin,pout

rin,rout=remote_side(DEST)
winid=None
while 1:
	if not winid:
		print "Looking for",MATCH,time.time()
		cmd=['xwininfo','-root','-tree']
		(pin,pout)=os.popen2(cmd)
		pin.close()
		ls=pout.read()
		pout.close()
		l=ls.split('\n')
		for i in l:
			if i.find(MATCH)!=-1:
				winid=re.findall('\s+(0x[0-9a-f]+)',i)[0]
				print "Winid: ",winid
				break
		else:
			time.sleep(SLEEP*2)
	if winid:
		print "Capturing window",winid,time.time()
		cmd='import -window %s %s jpg:-'%(winid,OPTIONS)
		p=os.popen(cmd,'r')
		buf=p.read()
		if p.close():
			winid=None
			print "Winid: reset"
		else:
			obj={socket.gethostname():buf}
			if len(buf):
				objs=pickle.dumps(obj,-1)
				rin.write(objs)
				rin.flush()
				print "Capture published",time.time()
	time.sleep(SLEEP)

sys.exit()

