Wednesday, December 15, 2010 at 1:09 AM.

river2Suite.myRss.buildRss

on buildRss () {
	<<Changes
		<<12/14/10; 11:54:15 AM by DW
			<<Don't set the RSS url, we're making it a preference, not a stat.
		<<12/14/10; 11:44:08 AM by DW
			<<Use adrdata^.myRss.prefs.s3Path.
		<<12/29/09; 7:20:38 PM by DW
			<<Created. 
	local (adrdata = river2suite.init (), rsstext = "", now = clock.now (), maxitems = 25, rssUrl);
	bundle { //build rsstext
		local (indentlevel = 0);
		on add (s) {
			rsstext = rsstext + string.filledstring ("\t", indentlevel) + s + "\r"};
		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 ("<rss version=\"2.0\">"); indentlevel++;
		add ("<channel>"); indentlevel++;
		bundle { //add header elements
			add ("<title>" + encode (adrdata^.myRss.feed.title) + "</title>");
			add ("<link>" + encode (adrdata^.myRss.feed.link) + "</link>");
			add ("<description>" + encode (adrdata^.myRss.feed.description) + "</description>");
			add ("<language>" + encode (adrdata^.myRss.feed.language) + "</language>");
			add ("<pubDate>" + date.netstandardstring (now) + "</pubDate>");
			add ("<lastBuildDate>" + date.netstandardstring (now) + "</lastBuildDate>");
			add ("<generator>" + frontier.getprogramname () + "</generator>");
			with adrdata^.myRss.feed.cloud {
				add ("<cloud domain=\"" + server + "\" port=\"" + port + "\" path=\"" + path + "\" registerProcedure=\"" + registerProcedure + "\" protocol=\"" + protocol + "\" />")}};
		bundle { //add items
			on visit (adritem) {
				add ("<item>"); indentlevel++;
				add ("<title>" + encode (adritem^.text) + "</title>");
				add ("<pubDate>" + date.netstandardstring (adritem^.when) + "</pubDate>");
				add ("<guid isPermalink=\"false\">" + adritem^.guid + "</guid>");
				add ("</item>"); indentlevel--};
			mainresponder.calendar.visitReverseChronologic (@adrdata^.myRss.calendar, @visit)};
		add ("</channel>"); indentlevel--;
		add ("</rss>"); indentlevel--};
	bundle { //save it to S3
		s3.init ();
		<<local (bucket = user.s3.accounts.default.defaultBucket)
		<<rssUrl = s3.newobject ("/" + bucket + "/myRss/rss.xml", rsstext)
		s3.newobject (adrdata^.myRss.prefs.s3Path, rsstext);
		adrdata^.myRss.stats.ctSaves++;
		adrdata^.myRss.stats.whenLastSave = now};
		<<adrdata^.myRss.stats.rssUrl = rssUrl
	return (rssUrl)};
bundle { //test code
	webbrowser.openurl (buildRss ())}



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.