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.