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


on afterScan () {
		<<4/1/11; 7:43:39 PM by DW
			<<If no files were rebuilt, no need to log it. :-)
		<<3/27/11; 1:46:15 PM by DW
			<<New pref adrdata^.prefs.static.flBuildMainUser determines if the static pages for the "main" user gets built. In the next rev of River2 this user is virtually non-existent (maybe totally) so I defaulted this to false. 
		<<3/27/11; 11:37:17 AM by DW
			<<Get time readings.
		<<2/8/11; 8:58:56 AM by DW
			<<Respect flBeautifulIsIndex.
		<<2/4/11; 4:53:31 PM by DW
			<<Build beautiful rivers.
		<<12/5/10; 4:44:28 PM by DW
			<<Build the JSON versions of the news flow.
		<<11/17/10; 2:47:50 PM by DW
			<<Log the static builds.
		<<11/7/10; 4:23:21 PM by DW
			<<Call river2Suite.static.bindReadingListToUser before building static pages for each user. This way a reading list can be associated with a user, and completely determine the feeds the user follows. Makes managing lots of static pages from one River2 server possible just using the outliner to subscribe and unsubscribe.
		<<5/4/10; 10:26:17 AM by DW
			<<Build index.opml and index.js.
		<<5/4/10; 5:47:21 AM by DW
			<<Build the JavaScript include for each user if the feature is enabled.
		<<4/27/10; 10:13:51 AM by DW
			<<Save the OPML file for each user who has the feature enabled.
		<<3/26/10; 8:27:37 AM by DW
			<<Render a static page for each user who has the feature enabled.
		<<3/17/10; 8:22:15 PM by DW
	local (adrdata = river2suite.init (), startticks = clock.ticks (), ctfiles = 0, fldebug = false);
	on addtimingnote (s) { //debugging code
		if fldebug {
			local (tc = clock.ticks (), secs = string.formatDouble (double (tc - lastticks) / 60, 2));
			op.insert (s + " -- " + secs + " secs.", insertdir); insertdir = down;
			lastticks = clock.ticks ()}};
	if fldebug {
		local (adrtimingoutline = @scratchpad.timingoutline, lastticks = clock.ticks (), insertdir = right);
		new (outlinetype, adrtimingoutline);
		target.set (adrtimingoutline); edit (adrtimingoutline);
		op.setlinetext (string.popfilefromaddress (this))};
	if adrdata^.prefs.static.flBuildMainUser { //3/27/11 by DW
		if not adrdata^.prefs.beautifulRiver.flBeautifulIsIndex {
			river2Suite.static.buildOnePage (@river2Website.index); ctfiles++; addtimingnote ("Built plain home page")};
		river2Suite.static.buildOpml (nil); ctfiles++; addtimingnote ("Main OPML"); //build index.opml -- 5/4/10 by DW
		river2Suite.static.buildJavaScriptInclude (nil); ctfiles++; addtimingnote ("Main JavaScript include");
		river2Suite.static.buildJsonNews (nil); ctfiles++; addtimingnote ("Main JSON news");
		river2Suite.static.buildBeautifulRiver (nil); ctfiles++; addtimingnote ("Main beautiful river")}; //2/4/11 by DW
	local (updates = adrdata^.stats.updatedFeeds); //3/27/11 by DW
	new (tabletype, @adrdata^.stats.updatedFeeds);
	for adruser in @adrdata^.users {
		river2suite.inituser (adruser);
		river2Suite.static.bindReadingListToUser (adruser); //11/7/10 by DW
		if adruser^.prefs.static.enabled {
			if river2Suite.static.userNeedsBuild (adruser, @updates) { //3/27/11 by DW
				local (username = nameof (adruser^));
				if not adruser^.prefs.beautifulRiver.flBeautifulIsIndex {
					river2Suite.static.buildOnePage (@river2Website.index, adruser); ctfiles++; addtimingnote (username + " plain home page")};
				river2Suite.static.buildOpml (adruser); ctfiles++; addtimingnote (username + " OPML"); //4/27/10 by DW
				if adruser^.prefs.static.flBuildJavaScriptInclude {
					river2Suite.static.buildJavaScriptInclude (adruser); ctfiles++; addtimingnote (username + " JavaScript include")}; //5/4/10 by DW
				river2Suite.static.buildJsonNews (adruser); ctfiles++; addtimingnote (username + " JSON news"); //5/4/10 by DW
				river2Suite.static.buildBeautifulRiver (adruser); ctfiles++; addtimingnote (username + " beautiful river")}}}; //2/4/11 by DW
	if ctfiles > 0 { //4/1/11 by DW
		log2.add (, "Static", "Built " + ctfiles + " static files.", startticks)}};
bundle { //test code
	afterScan ()}

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.