Tuesday, August 18, 2009 at 7:31 PM.

newsRiverSuite.init

<<Changes
	<<8/17/08; 10:28:17 AM by DW
		<<Eliminate hard-coding of hook into the OPML Editor's updating mechanism, there's a higher-level method in place now.
	<<8/17/08; 10:15:59 AM by DW
		<<Initialize the folder for portable rivers to be a subfolder of the app's folder, not in the folder managed by the folderwatcher component of dotOpml.root.
	<<8/2/08; 8:16:07 PM by DW
		<<1. Hook into the opmlEditor's centralized updating code. 2. Also, don't try to initialize elements of dotOpmlSuite if it's not present.
	<<7/19/07; 8:22:23 PM by DW
		<<Initialize afterDownloadQueue callback.
	<<3/31/07; 5:42:12 PM by DW
		<<On some systems we don't want to install a handler on port 5335, esp systems that are running Radio (whose web server runs on that port). So we introduce a preference that allows you to turn off installing a handler on that port.
	<<8/26/06; 7:59:41 PM by DW
		<<Initialize data for portable rivers.
	<<8/12/06; 8:35:46 PM by DW
		<<Added a newsRiver-level callback that runs just before the story text is added to the page, allows you to do custom string substitutions on the story text. This is how I'm making it so that NY Times stories link to the print version of the story, which reads well on my BlackBerry screen.
	<<5/13/06; 9:15:53 PM by DW
		<<Init prefs for automatic export of mySubscriptions.opml.
	<<1/25/06; 8:14:30 AM by DW
		<<Hook into wsf responder with callback.
	<<1/24/06; 10:40:45 AM by DW
		<<Security prefs.
	<<1/22/06; 6:53:24 AM by DW
		<<Install an inetd for port 5335.
	<<1/18/06; 2:21:36 PM by DW
		<<Initialize podcatcher.
	<<1/11/06; 7:06:01 AM by DW
		<<Create system.temp.newsRiver.
	<<1/3/06; 3:29:24 PM by DW
		<<Change the appSignatureUrl to "http://www.newsriver.org/".
	<<12/29/05; 7:52:00 PM by DW
		<<Install a post-scan callback that updates newsRiver.root.
local (adrdata = xml.aggregator.init ());
bundle { //appSignatureUrl
	if adrdata^.prefs.appSignatureUrl == "http://frontier.userland.com/xmlAggregator" {
		adrdata^.prefs.appSignatureUrl = "http://www.newsriver.org/"};
	if adrdata^.prefs.appSignatureUrl == "http://support.opml.org/newsRiver" {
		adrdata^.prefs.appSignatureUrl = "http://www.newsriver.org/"};
	if adrdata^.prefs.appSignatureUrl == "http://support.opml.org/whatIsNewsRiver" {
		adrdata^.prefs.appSignatureUrl = "http://www.newsriver.org/"}};
bundle { //newsRiver prefs
	if not defined (adrdata^.newsRiver) {
		new (tabletype, @adrdata^.newsRiver)};
	if not defined (adrdata^.newsRiver.ctStoriesOnNewsPage) {
		adrdata^.newsRiver.ctStoriesOnNewsPage = 250};
	if not defined (adrdata^.newsRiverflCacheNewsItemsPage) {
		adrdata^.newsRiver.flCacheNewsItemsPage = true};
	if not defined (adrdata^.newsRiver.flNewsPageDeleteCheckboxesDefault) {
		adrdata^.newsRiver.flNewsPageDeleteCheckboxesDefault = false};
	if not defined (adrdata^.newsRiver.flNewsPageReturnAfterPost) {
		adrdata^.newsRiver.flNewsPageReturnAfterPost = true};
	if not defined (adrdata^.newsRiver.flItemCheckboxes) {
		adrdata^.newsRiver.flItemCheckboxes = true};
	if not defined (adrdata^.newsRiver.flAutoSubscriptionExport) {
		adrdata^.newsRiver.flAutoSubscriptionExport = false};
	if not defined (adrdata^.newsRiver.flPublicSubscriptionExport) {
		adrdata^.newsRiver.flPublicSubscriptionExport = false};
	if not defined (adrdata^.newsRiver.flSubscriptionListDirty) {
		adrdata^.newsRiver.flSubscriptionListDirty = false};
	if not defined (adrdata^.newsRiver.flCleanStoryText) { //8/26/06; 6:17:19 AM by DW
		adrdata^.newsRiver.flCleanStoryText = false};
	if not defined (adrdata^.newsRiver.flEliminateDuplicateStories) { //8/26/06; 3:33:59 PM by DW
		adrdata^.newsRiver.flEliminateDuplicateStories = false};
	bundle { //portableRivers, 8/26/06; 8:29:31 PM by DW
		if not defined (adrdata^.newsRiver.portableRivers) {
			new (tabletype, @adrdata^.newsRiver.portableRivers)};
		if not defined (adrdata^.newsRiver.portableRivers.enabled) {
			adrdata^.newsRiver.portableRivers.enabled = false};
		if not defined (adrdata^.newsRiver.portableRivers.folder) { //8/17/08 by DW
			local (pc = file.getpathchar ());
			adrdata^.newsRiver.portableRivers.folder = frontier.pathstring + "portableRiver" + pc};
			<<adrdata^.newsRiver.portableRivers.folder = dotOpmlData.folderwatcher.prefs.folder + "portableRiver" + pc
		if not defined (adrdata^.newsRiver.portableRivers.site) {
			adrdata^.newsRiver.portableRivers.site = newsRiverData.portableWebsite};
		if not defined (aggregatorData.callbacks.postScan.portableRivers) {
			aggregatorData.callbacks.postScan.portableRivers = @aggregatorData.newsRiver.portableRivers.site.["#tools"].staticRender}};
	if not defined (adrdata^.newsRiver.readingLists) {
		new (tabletype, @adrdata^.newsRiver.readingLists)};
	bundle { //podcatcher
		if not defined (adrdata^.newsRiver.podcatcher) {
			new (tabletype, @adrdata^.newsRiver.podcatcher)};
		if not defined (adrdata^.newsRiver.podcatcher.prefs) {
			new (tabletype, @adrdata^.newsRiver.podcatcher.prefs)};
		if not defined (adrdata^.newsRiver.podcatcher.prefs.enabled) {
			adrdata^.newsRiver.podcatcher.prefs.enabled = false};
		if not defined (adrdata^.callbacks.storyArrived.podcatcher) {
			adrdata^.callbacks.storyArrived.podcatcher = @newsRiverSuite.podcatcher.storyArrivedCallback};
		if not defined (adrdata^.newsRiver.podcatcher.queue) {
			new (tabletype, @adrdata^.newsRiver.podcatcher.queue)};
		if not defined (adrdata^.newsRiver.podcatcher.downloads) {
			new (tabletype, @adrdata^.newsRiver.podcatcher.downloads)};
		if not defined (adrdata^.newsRiver.podcatcher.prefs.queueSerialNum) {
			adrdata^.newsRiver.podcatcher.prefs.queueSerialNum = 1};
		if not defined (adrdata^.newsRiver.podcatcher.prefs.folder) {
			adrdata^.newsRiver.podcatcher.prefs.folder = frontier.pathstring + "Enclosures" + file.getpathchar ()};
		if not defined (adrdata^.newsRiver.podcatcher.prefs.flReclaimBytes) {
			adrdata^.newsRiver.podcatcher.prefs.flReclaimBytes = false};
		if not defined (adrdata^.newsRiver.podcatcher.prefs.ctBytesForEnclosures) {
			adrdata^.newsRiver.podcatcher.prefs.ctBytesForEnclosures = 1024 * 1024 * 1024}; //1GB
		if not defined (adrdata^.newsRiver.podcatcher.prefs.hourToStartDownloads) {
			adrdata^.newsRiver.podcatcher.prefs.hourToStartDownloads = 1};
		if not defined (adrdata^.newsRiver.podcatcher.prefs.hourToStopDownloads) {
			adrdata^.newsRiver.podcatcher.prefs.hourToStopDownloads = 5};
		if not defined (adrdata^.newsRiver.podcatcher.prefs.flOutlineEnclosures) {
			adrdata^.newsRiver.podcatcher.prefs.flOutlineEnclosures = true};
		if not defined (adrdata^.newsRiver.podcatcher.log) {
			new (outlinetype, @adrdata^.newsRiver.podcatcher.log)}};
	bundle { //security
		if not defined (adrdata^.newsRiver.security) {
			new (tabletype, @adrdata^.newsRiver.security)};
		if not defined (adrdata^.newsRiver.security.allowRemoteViewing) {
			adrdata^.newsRiver.security.allowRemoteViewing = false};
		if not defined (adrdata^.newsRiver.security.allowRemotePost) {
			adrdata^.newsRiver.security.allowRemotePost = false};
		if not defined (adrdata^.newsRiver.security.requireRemoteLogin) {
			adrdata^.newsRiver.security.requireRemoteLogin = true}}};
bundle { //callbacks
	if not defined (adrdata^.newsRiver.callbacks) {
		new (tabletype, @adrdata^.newsRiver.callbacks)};
	if not defined (adrdata^.newsRiver.callbacks.afterEnclosureDownload) {
		new (tabletype, @adrdata^.newsRiver.callbacks.afterEnclosureDownload)};
	if not defined (adrdata^.newsRiver.callbacks.pdaStoryTextProcess) { //8/12/06 by DW
		new (tabletype, @adrdata^.newsRiver.callbacks.pdaStoryTextProcess)};
	if not defined (adrdata^.newsRiver.callbacks.afterDownloadQueue) { //7/19/07 by DW
		new (tabletype, @adrdata^.newsRiver.callbacks.afterDownloadQueue)}};
bundle { //inetd handler
	if not defined (adrdata^.newsRiver.flRunOnPort5335) {
		adrdata^.newsRiver.flRunOnPort5335 = true};
	local (adrd = @user.inetd.config.http5335);
	if adrdata^.newsRiver.flRunOnPort5335 {
		if not defined (adrd^) {
			new (tabletype, adrd);
			adrd^.count = 30;
			adrd^.daemon = @system.verbs.builtins.webserver.server;
			adrd^.noWait = true;
			adrd^.port = 5335;
			adrd^.startup = true;
			adrd^.timeout = 30;
			adrd^.comment = "Installed by newsRiverSuite.init.";
			inetd.startOne (adrd)}}
	else {
		if defined (adrd^) {
			try {inetd.stopone (adrd)};
			delete (adrd)}}};
bundle { //hook into wsf responder
	local (adrtable = @user.webserver.callbacks.wsfMasterControl);
	if not defined (adrtable^) {
		new (tabletype, adrtable)};
	if not defined (adrtable^.newsRiver) {
		adrtable^.newsRiver = @newsRiverSuite.wsfMasterControl}};
if defined (dotOpmlSuite) { //8/2/08 by DW
	if not defined (dotOpmlSuite.mdiWindow.images.newsRiver) {
		dotOpmlSuite.mdiWindow.images.newsRiver = @newsRiverData.images};
	if not defined (dotOpmlSuite.mdiWindow.pages.newsRiver) {
		dotOpmlSuite.mdiWindow.pages.newsRiver = @newsRiverSuite.pages}};
bundle { //Install a post-scan callback that updates newsRiver.root.
	if not defined (adrdata^.callbacks.postScan.updateNewsRiverRoot) {
		adrdata^.callbacks.postScan.updateNewsRiverRoot = @newsRiverSuite.updateAfterScan}};
bundle { //hook into the opmlEditor's centralized updating code, 8/2/08 by DW
	opmlEditor.addToolToUpdates (@newsRiverInfo)};
bundle { //system.temp.newsRiver
	if not defined (system.temp.newsRiver) {
		new (tabletype, @system.temp.newsRiver)}};
return (adrdata)



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.