Monday, November 08, 2010 at 12:07 AM.

system.verbs.builtins.xml.aggregator.init

<<Changes
	<<1/11/06; 4:35:05 AM by DW
		<<Initialize security sub-table of prefs for RPC handlers.
	<<3/5/03; 1:43:51 PM by JES
		<<In Frontier, initialize adrdata^.prefs.flSaveItemData to true instead of false -- it's needed for features of a modern news aggregator like comment links and permalinks.
	<<11/14/02; 7:06:08 PM by JES
		<<Initialize adrdata^.prefs.flSaveItemData.
	<<4/5/02; 7:50:24 PM by DW
		<<Initialize callback table for scripts that run when a user unsubscribes from afeed.
	<<4/5/02; 4:39:38 PM by DW
		<<Initialize callback table for scripts that run when a user subscribes to a new feed.
	<<1/23/02; 3:38:57 PM by JES
		<<If the aggregator is enabled, always make sure that the everyMinute scheduler script is installed. This fixes a problem in Radio where after a re-install, the aggregator would stop working.
	<<1/12/02; 8:46:05 PM by DW
		<<Instead of initializing aggregatorData.prefs.minuteToRead to 0, initialize it to a random number between 5 and 55. There are already too many people scanning at 0, and I offset by 5 because clocks are not generally synchronized. Thanks to Aaron Swartz for this suggestion. 
		<<http://groups.yahoo.com/group/radio-userland/message/11005
	<<12/27/01; 6:00:32 PM by PBS
		<<Set up flBehindFirewall pref on Frontier. In Radio the pref is at user.radio.prefs.flBehindFirewall. In Frontier the pref is in the adrdata^.prefs table.
	<<12/4/01; 7:20:44 PM by DW
		<<Initialize callback tables for pre and post scan.
	<<12/3/01; 5:50:18 PM by DW
		<<Initialize aggregatorData.prefs.maxErrorsBeforeAutoUnsubscribe.
	<<11/30/01; 1:52:55 PM by DW
		<<Initialize prefs.flScanOnStartup.
	<<11/7/01; 6:52:19 PM by DW
		<<Don't initialize system.temp.aggregator.
		<<Initialize adrdata^.stats.lastRun, which contains all the fields of the old temp table, ctThreads, lastChannelRead, ctNewStories, and status.
	<<10/19/01; 7:51:37 PM by DW
		<<Initialize stuff for hourly archives.
local (adrdata = frontier.openDataFile ("aggregatorData"));
bundle { //stats
	if not defined (adrdata^.stats) {
		new (tabletype, @adrdata^.stats)};
	if not defined (adrdata^.stats.lastRun) {
		new (tabletype, @adrdata^.stats.lastRun)};
	if not defined (adrdata^.stats.lastRun.ctThreads) {
		adrdata^.stats.lastRun.ctThreads = 0};
	if not defined (adrdata^.stats.lastRun.ctNewStories) {
		adrdata^.stats.lastRun.ctNewStories = 0};
	if not defined (adrdata^.stats.lastRun.lastChannelRead) {
		adrdata^.stats.lastRun.lastChannelRead = ""};
	if not defined (adrdata^.stats.lastRun.status) {
		adrdata^.stats.lastRun.status = ""};
	if not defined (adrdata^.stats.lastRun.whenComplete) {
		adrdata^.stats.lastRun.whenComplete = date (0)};
	if not defined (adrdata^.stats.lastRun.flScanRunningNow) {
		adrdata^.stats.lastRun.flScanRunningNow = false}};
bundle { //prefs
	if not defined (adrdata^.prefs) {
		new (tabletype, @adrdata^.prefs)};
	if not defined (adrdata^.prefs.flLogHourlyScan) {
		adrdata^.prefs.flLogHourlyScan = true};
	if not defined (adrdata^.prefs.flLogNotification) {
		adrdata^.prefs.flLogNotification = true};
	if not defined (adrdata^.prefs.flChannelChange) {
		adrdata^.prefs.flChannelChange = true};
	if not defined (adrdata^.prefs.maxThreads) {
		if defined (myUserLandData.prefs.maxThreads) {
			adrdata^.prefs.maxThreads = myUserLandData.prefs.maxThreads}
		else {
			adrdata^.prefs.maxThreads = 2}};
	if not defined (adrdata^.prefs.appSignatureUrl) {
		adrdata^.prefs.appSignatureUrl = "http://frontier.userland.com/xmlAggregator"};
	if not defined (adrdata^.prefs.nextStoryNum) {
		if defined (myUserLandData.prefs.nextStoryNum) {
			adrdata^.prefs.nextStoryNum = myUserLandData.prefs.nextStoryNum}
		else {
			adrdata^.prefs.nextStoryNum = 1}};
	if not defined (adrdata^.prefs.enabled) {
		adrdata^.prefs.enabled = true};
	if not defined (adrdata^.prefs.minuteToRead) {
		if defined (myUserLandData.prefs.minuteToDoHourlyScan) {
			adrdata^.prefs.minuteToRead = myUserLandData.prefs.minuteToDoHourlyScan}
		else {
			adrdata^.prefs.minuteToRead = random (5, 55)}};
	if not defined (adrdata^.prefs.minuteToArchive) {
		if defined (myUserLandData.prefs.minuteToArchive) {
			adrdata^.prefs.minuteToArchive = myUserLandData.prefs.minuteToArchive}
		else {
			adrdata^.prefs.minuteToArchive = 58}};
	if not defined (adrdata^.prefs.hoursBeforeArchive) {
		if defined (myUserLandData.prefs.hoursBetweenArchives) {
			adrdata^.prefs.hoursBeforeArchive = myUserLandData.prefs.hoursBetweenArchives}
		else {
			adrdata^.prefs.hoursBeforeArchive = 24}};
	if not defined (adrdata^.prefs.flArchive) {
		if defined (myUserLandData.prefs.flArchiveStoriesNightly) {
			adrdata^.prefs.flArchive = myUserLandData.prefs.flArchiveStoriesNightly}
		else {
			adrdata^.prefs.flArchive = true}};
	if not defined (adrdata^.prefs.flSaveArchiveXmlFiles) {
		adrdata^.prefs.flSaveArchiveXmlFiles = false};
	if not defined (adrdata^.prefs.flLogArchiveStories) {
		if defined (myUserLandData.prefs.flLogArchiveStories) {
			adrdata^.prefs.flLogArchiveStories = myUserLandData.prefs.flLogArchiveStories}
		else {
			adrdata^.prefs.flLogArchiveStories = true}};
	if not defined (adrdata^.prefs.flScanOnStartup) {
		adrdata^.prefs.flScanOnStartup = false};
	if not defined (adrdata^.prefs.maxErrorsBeforeAutoUnsubscribe) {
		adrdata^.prefs.maxErrorsBeforeAutoUnsubscribe = 24 * 2};
	if not defined (adrdata^.prefs.flSaveItemData) { //JES 11/14/02: passed to xml.rss.readService
		adrdata^.prefs.flSaveItemData = true}; //JES 3/4/03: always init to true -- needed for "modern" aggregator features to work
		<<bundle //old code/notes
			<<11/14/02 JES: The aggregator XML-RPC API returns the title and link along with the item. xml.rss.readService takes an optional parameter, flSaveData, which determines whether to save the title and link in the item sub-table of the compilation.
				<<Previously, the default value for this parameter was false. In Radio, it needs to be passed in as true, so that the aggregator API will get the right data.
				<<We initialize to true in Radio, and false in Frontier. Then in xml.aggregator.subscribeService and xml.aggregator.readService, we pass the value of the pref.
			<<if system.environment.isRadio
				<<adrdata^.prefs.flSaveItemData = true
			<<else
				<<adrdata^.prefs.flSaveItemData = false
	if not system.environment.isRadio { //PBS 12/27/01: set up flBehindFirewall pref on Frontier
		<<In Radio the pref is at user.radio.prefs.flBehindFirewall. In Frontier the pref is in the adrdata^.prefs table.
		if not defined (adrdata^.prefs.flBehindFirewall) {
			adrdata^.prefs.flBehindFirewall = false}};
	bundle { //init security sub-table of prefs for RPC handlers, 1/11/06 by DW
		if not defined (adrdata^.prefs.security) {
			new (tableType, @adrdata^.prefs.security)};
		if not defined (adrdata^.prefs.security.username) {
			adrdata^.prefs.security.username = user.prefs.mailAddress};
		if not defined (adrdata^.prefs.security.password) {
			adrdata^.prefs.security.password = ""};
		if not defined (adrdata^.prefs.security.flRpcInterfaceEnabled) {
			adrdata^.prefs.security.flRpcInterfaceEnabled = false}}};
bundle { //services
	if not defined (adrdata^.services) {
		if defined (myUserLandData.services) {
			adrdata^.services = myUserLandData.services}
		else {
			new (tabletype, @adrdata^.services)}}};
bundle { //stories
	if not defined (adrdata^.stories) {
		if defined (myUserLandData.stories) {
			adrdata^.stories = myUserLandData.stories}
		else {
			new (tabletype, @adrdata^.stories)}}};
bundle { //trash
	if not defined (adrdata^.trash) {
		new (tabletype, @adrdata^.trash)}};
bundle { //cache
	if not defined (adrdata^.cache) {
		new (tabletype, @adrdata^.cache)}};
bundle { //settings
	if not defined (adrdata^.settings) {
		new (tabletype, @adrdata^.settings)}};
bundle { //callbacks
	if not defined (adrdata^.callbacks) {
		new (tabletype, @adrdata^.callbacks)};
	if not defined (adrdata^.callbacks.storyArrived) {
		if defined (myUserLandData.callbacks.storyArrived) {
			adrdata^.callbacks.storyArrived = myUserLandData.callbacks.storyArrived}
		else {
			new (tabletype, @adrdata^.callbacks.storyArrived)}};
	if not defined (adrdata^.callbacks.preScan) {
		new (tabletype, @adrdata^.callbacks.preScan)};
	if not defined (adrdata^.callbacks.postScan) {
		new (tabletype, @adrdata^.callbacks.postScan)};
	if not defined (adrdata^.callbacks.subscribeService) {
		new (tabletype, @adrdata^.callbacks.subscribeService)};
	if not defined (adrdata^.callbacks.unsubscribeService) {
		new (tabletype, @adrdata^.callbacks.unsubscribeService)}};
bundle { //rpcHandlers
	if not defined (user.betty.rpcHandlers.aggregator) {
		user.betty.rpcHandlers.aggregator = @xml.aggregator.rpcHandlers};
	if not defined (user.betty.soapHandlers.aggregator) {
		user.soap.rpcHandlers.aggregator = @xml.aggregator.rpcHandlers}};
bundle { //make sure everyMinute script is installed, if necessary
	<<if not defined (adrdata^.settings.flInstalled)
	if adrdata^.prefs.enabled {
		if not defined (user.scheduler.everyMinute.aggregator) {
			user.scheduler.everyMinute.aggregator = @xml.aggregator.everyMinute}}};
			<<adrdata^.settings.flInstalled = true //only do this once
<<bundle //system.temp.aggregator
	<<if not defined (system.temp.aggregator)
		<<new (tabletype, @system.temp.aggregator)
	<<if not defined (system.temp.aggregator.ctNewStories)
		<<system.temp.aggregator.ctNewStories = 0
	<<if not defined (system.temp.aggregator.ctThreads)
		<<system.temp.aggregator.ctThreads = 0
	<<if not defined (system.temp.aggregator.lastChannelRead)
		<<system.temp.aggregator.lastChannelRead = ""
	<<if not defined (system.temp.aggregator.status)
		<<system.temp.aggregator.status = ""
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.