#Changes
	#11/11/02; by Phillip Pearson <pp@myelin.co.nz>
		#Ported to Python
	#11/9/02; 9:44:41 AM by DW
		#Designed to run every minute, prepare a static HTML file with the latest headlines, every hour, just after the Radio aggregator runs. Basically a demo for Radio-Dev'ers.

import os.path
import pickle
import xmlrpclib
import time

#local (adrdata = @user.aggyBaby);
#if not defined (adrdata^) {
#	new (tabletype, adrdata);
#	adrdata^.whenLastBuild = date (0);
#	new (tabletype, @adrdata^.items);
#	adrdata^.template = aggybaby.data.virginTemplate;
#	adrdata^.htmlfile = "c:\\program files\\radio userland\\www\\userland\\aggyBaby.html";
#	adrdata^.ctChecks = 0;
#	adrdata^.ctBuilds = 0};

class Data:
	def __init__( self ):
		self.whenLastBuild = 0
		self.items = {}
		self.template = open( 'aggyBabyTemplate.html' ).read()
		self.htmlfile = 'aggyBaby.html'
		self.ctChecks = 0
		self.ctBuilds = 0
		self.rpcUrl = 'http://127.0.0.1:5335/RPC2'
		self.login = raw_input( 'Enter your login name: ' )
		self.password = raw_input( 'Enter your password: ' )
	def Server( self ):
		return xmlrpclib.Server( self.rpcUrl )

def main():
	if os.path.isfile( 'ag.dat' ):
		data = pickle.load( open( 'ag.dat' ) )
	else:
		data = Data()
	
	#adrdata^.lastScanInfo = aggregator.getLastScanInfo ();
	aggregator = data.Server().aggregator
	data.lastScanInfo = aggregator.getLastScanInfo( data.login, data.password )
	
	#adrdata^.ctChecks++;
	data.ctChecks += 1
	
	#if adrdata^.whenLastBuild < adrdata^.lastScanInfo.whenComplete { //needs a rebuild
	if data.whenLastBuild < data.lastScanInfo['whenComplete']:
		#if not adrdata^.lastScanInfo.flScanRunningNow { //wait for the scan to complete
		if not data.lastScanInfo['flScanRunningNow']: #wait for the scan to complete
			#local (newitems = aggregator.getRecentItems (adrdata^.lastScanInfo.ctNewItems), adr);
			newitems = aggregator.getRecentItems( data.login, data.password, data.lastScanInfo['ctNewItems'] )
			print "new items",newitems
			
			#for adr in @newitems {
				#adrdata^.items.[nameof (adr^)] = adr^};
			for key,item in newitems.items():
				data.items[key] = item
	
			#bundle { //delete any that are older than 24 hours
			if 1:
				#local (i, onedayago = clock.now () - (60 * 60 * 24));
				onedayago = time.time() - 60 * 60 * 24
				#for i = sizeof (adrdata^.items) downto 1 {
				for key,item in data.items.items():
					#adr = @adrdata^.items [i];
					#if adr^.when <= onedayago {
					if item['when'] <= onedayago:
						#delete (adr)}}};
						del data.items[key]
			
			#bundle { //build the static page
			if 1:
				#local (htmltext = "", indentlevel = 0);
				htmltext = []
				indentlevel = 0
				
				#on add (s) {
					#htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r"};
				add = htmltext.append
				
				#local (i, lasttitle = "");
				lasttitle = ''
				#for i = sizeof (adrdata^.items) downto 1 {
				itemkeys = data.items.keys()
				itemkeys.sort()
				itemkeys.reverse()
				for key in itemkeys:
					#adr = @adrdata^.items [i];
					item = data.items[key]
					#if adr^.channelTitle != lasttitle {
					if item['channelTitle'] != lasttitle:
						#add ("<h4>" + adr^.channelTitle + "   (" + date.timestring (adr^.when, true) + ")</h4>");
						add( "<h4>" + item['channelTitle'] + "   (" + item['when'].value + ")</h4>" )
						#lasttitle = adr^.channelTitle};
						lasttitle = item['channelTitle']
					#add ("<p>" + adr^.itemText + "</p>")};
					add( "<p>" + item['itemText'] + "</p>" )
				#htmltext = string.replace (string (adrdata^.template), "<%bodytext%>", htmltext);
				htmltext = data.template.replace( '<%bodytext%>', ''.join( htmltext ) )
				
				#file.surefilepath (adrdata^.htmlfile);
				#file.writeWholeFile (adrdata^.htmlfile, htmltext);
				open( data.htmlfile, 'w' ).write( htmltext )
				#adrdata^.whenLastBuild = adrdata^.lastScanInfo.whenComplete};
				data.whenLastBuild = data.lastScanInfo['whenComplete']
			#adrdata^.ctBuilds++
			data.ctBuilds += 1
			#bundle { //send an email
			if 1:
				#tcp.sendmail (user.prefs.mailaddress, this, "Rebuilt the aggyBaby page, here's the URL:\r\r" + user.aggyBaby.htmlurl + "\r\rPretty fast, eh?\r\r" + clock.now ())}}}
				print "Rebuilt page at URL", data.htmlfile

if __name__ == '__main__':
	main()
	