Saturday, April 09, 2011 at 1:08 AM.

radio2Suite.buildCommunityOpml

on buildCommunityOpml () {
	<<Changes
		<<4/8/11; 4:36:52 PM by DW
			<<The River2 user we were creating had static rendering turned on. I don't see the point (or a comment) so I'm turning it off.
		<<3/6/11; 10:17:00 AM by DW
			<<Create a River2 user for Radio2, subscribed to the community OPML.
		<<3/5/11; 12:31:23 PM by DW
			<<Automatically subscribe to the community list in River2 if enabled.
		<<3/3/11; 10:29:20 AM by DW
			<<Add logging code. 
		<<3/2/11; 8:58:33 PM by DW
			<<Created. 
	local (adrdata = radio2suite.init (), now = clock.now (), adruser, adrfeed, startticks = clock.ticks ());
	local (xmltext = "", indentlevel = 0, title = radio2Suite.data.strings.communityReadingListTitle, urlReadingList);
	on add (s) {
		xmltext = xmltext + 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 ("<opml version=\"2.0\">"); indentlevel++;
	bundle { //<head> section
		add ("<head>"); indentlevel++;
		add ("<title>" + encode (title) + "</title>");
		<<add ("<dateCreated>" + date.netstandardstring (now) + "</dateCreated>")
		add ("</head>"); indentlevel--};
	bundle { //<body> section
		add ("<body>"); indentlevel++;
		for adruser in @adrdata^.users {
			for adrfeed in @adruser^.feeds {
				if defined (adrfeed^.stats.feedurl) {
					add ("<outline text=\"" + encode (adrfeed^.prefs.title) + "\" description=\"" + encode (adrfeed^.prefs.description) + "\" htmlUrl=\"" + encode (adrfeed^.prefs.link) + "\" language=\"" + adrfeed^.prefs.language + "\" title=\"" + encode (adrfeed^.prefs.title) + "\" type=\"rss\" version=\"RSS2\" xmlUrl=\"" + encode (adrfeed^.stats.feedurl) + "\" />")}}};
		add ("</body>"); indentlevel--};
	add ("</opml>"); indentlevel--;
	bundle { //save the file
		local (fname = "communityReadingList.opml");
		s3.newobject (adrdata^.prefs.s3path + fname, xmltext, "text/plain");
		urlReadingList = adrdata^.prefs.s3url + fname;
		adrdata^.stats.urlCommunityReadingList = urlReadingList;
		adrdata^.stats.ctCommunityOpmlBuilds++;
		adrdata^.stats.whenLastCommunityOpmlBuild = now};
	bundle { //log it
		local (s = "Rebuilt community OPML <a href=\"" + urlReadingList + "\">reading list</a>.");
		log2.add (radio2Suite.data.strings.logname, "OPML", s, startticks)};
	bundle { //subscribe in River2 if pref is set, 3/5/11 by DW
		if adrdata^.prefs.flRiver2SubscribeCommunityOPML {
			local (adrdata = river2suite.init ());
			local (adrlist =@adrdata^.lists.[urlReadingList]);
			if not defined (adrlist^) {
				local (startticks = clock.ticks ());
				try {
					river2Suite.subscribeList (urlReadingList);
					local (s = "Subscribed to the community <a href=\"" + urlReadingList + "\">readling list</a> in River2.");
					log2.add (radio2Suite.data.strings.logname, "OPML", s, startticks)}
				else {
					local (s = "Error subscribing to the community <a href=\"" + urlReadingList + "\">readling list</a> in River2:" + tryerror);
					log2.add (radio2Suite.data.strings.logname, "OPML", s, startticks)}};
			local (adruser = @adrdata^.users.radio2);
			if not defined (adruser^) {
				river2suite.inituser (adruser);
				adruser^.prefs.password = string.getrandompassword (8);
				adruser^.prefs.urlReadingList = urlReadingList;
				adruser^.prefs.static.enabled = false; //4/8/11 by DW
				adruser^.prefs.beautifulRiver.flBeautifulIsIndex = true}}};
	return (xmltext)};
bundle { //test code
	local (ctticks = clock.ticks ());
	buildCommunityOpml ();
	dialog.alert (clock.ticks () - ctticks)}



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.