Monday, April 04, 2011 at 1:06 AM.

rssCloudSuite.buildChangesXML

on buildChangesXML () {
	<<Changes
		<<3/13/11; 10:49:50 AM by DW
			<<Respect adrdata^.prefs.enableChangesXML.
		<<10/20/09; 1:23:09 PM by DW
			<<Track adrdata^.stats.whenLastChangesBuild.
		<<9/4/09; 9:24:23 PM by DW
			<<Keep duplicates out of changes.xml.
		<<9/4/09; 11:07:09 AM by DW
			<<Build changes.xml. Cribbed from twitterCalendar.root.
		<<1/22/09; 11:33:52 AM by DW
			<<Created.
	local (adrdata = rssCloudSuite.init (), now = clock.now ());
	
	bundle { //keep the changes table within the size constraint
		while sizeof (adrdata^.changes) > adrdata^.prefs.maxChangesXML {
			delete (@adrdata^.changes [1])}};
	
	local (ctbuilds = ++adrdata^.stats.ctChangesBuilds);
	adrdata^.stats.whenLastChangesBuild = now; //10/20/09 by DW
	
	local (xmltext = "", indentlevel = 0);
	bundle { //fill xmltext
		on add (s) {
			xmltext = xmltext + (string.filledstring ("\t", indentlevel) + s + "\r\n");};
		on encode (s) {
			if system.environment.isMac {
				return (xml.entityEncode (latinToMac.macToLatin (s), true))}
			else {
				return (xml.entityEncode (s, true))}};
		add ("<?xml version=\"1.0\"?>");
		add ("<!-- changes.xml generated by " + frontier.getprogramname () + " on " + now + " Pacific -->");
		add ("<weblogUpdates version=\"2\" updated=\"" + date.netstandardstring (now) + "\" count=\"" + ctbuilds + "\">"); indentlevel++;
		local (i, visited);
		new (tabletype, @visited);
		for i = sizeof (adrdata^.changes) downto 1 {
			local (adrchange = @adrdata^.changes [i]);
			local (url = adrchange^.url);
			if not defined (visited.[url]) {
				visited.[url] = true;
				local (ctsecs = number (now - adrchange^.when));
				add ("<weblog name=\"" + encode (adrchange^.name) + "\" url=\"" + encode (adrchange^.url) + "\" when=\"" + ctsecs + "\" />")}};
		add ("</weblogUpdates>"); indentlevel--};
		<<scratchpad.visited = visited
	bundle { //save the file
		if adrdata^.prefs.enableChangesXML { //3/13/11 by DW
			local (basepath = adrdata^.prefs.s3ChangesPath);
			s3.newobject (basepath + "changes.xml", xmltext);
			s3.newobject (basepath + file.getdatepath ("/") + date.hour () + ".xml", xmltext)}}};
bundle { //test code
	buildChangesXML ()}



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.