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

system.verbs.builtins.radio.utilities.getConfigInfo

on getConfigInfo (flIncludeHeader=true) {
	<<Changes
		<<12/14/01; 11:45:31 AM by JES
			<<Synchronized logging info with prefs.
		<<11/23/01; 4:40:53 PM by JES
			<<Changed user.radio.prefs.newsPageDeleteCheckboxesDefault to user.radio.prefs.flNewsPageDeleteCheckboxesDefault.
		<<10/24/01; 3:06:50 PM by PBS
			<<Adapted from script in myUserLand.root.
		<<2/25/01; 6:12:23 PM by JES
			<<Bug fix: myUserLandData.prefs.serviceListUrl is no longer defined. Don't try to email it. Send the value of myUserLandData.serviceLists.userlandAggregator instead.
		<<2/24/01; 1:58:41 AM by JES
			<<Fixed terminology mismatch; changed Blog Publish to Weblog Publish.
		<<2/23/01; 6:26:33 PM by PBS
			<<Don't email passwords.
		<<2/12/01; 4:21:12 PM by JES
			<<Added lots of new prefs. Changed email address to user.prefs.mailAddress.
			<<bundle //old code
				<<add ("Radio version: " + Frontier.version ())
				<<add ("IP address: " + tcp.dns.getMyDottedId ())
				<<add ("Radio folder: " + file.folderfrompath (frontier.getprogrampath ()))
				<<addOnOff ("Upstreaming", user.playlist.data.upstream.enabled)
				<<add ("www folder: " + user.playlist.prefs.wwwfolder)
				<<add ("www folder url: " + user.playlist.prefs.wwwUpstreamFolderUrl)
				<<addOnOff ("Web server", inetd.isDaemonRunning (@user.inetd.config.http))
				<<add ("Port: " + user.inetd.config.http.port)
	local (mailtext = "", indentlevel = 0);
	local (fldebug = false); //should false except when you're working on the script
	on add (s) {
		mailtext = mailtext + string.filledstring ("   ", indentlevel) + s + "\r\n"};
	on addOnOff (label, bool) {
		local (s = label + ": ");
		if bool {
			s = s + "On"}
		else {
			s = s + "Off"};
		add (s)};
	
	add ("Radio UserLand configuration on " + clock.now () + "."); indentlevel++;
	add ("");
	bundle { //Installation information
		if flIncludeHeader {
			add ("Installation information:"); indentlevel++;
			add ("");
			add ("Radio version: " + Frontier.version ());
			local (os = "Windows");
			if system.environment.isMac {
				if system.environment.isCarbon {
					os = "Mac OS X"}
				else {
					os = "Mac OS"}};
			add ("Operating System: " + os);
			local (osVersion = system.environment.osVersionString);
			if system.environment.isCarbon {
				osVersion = string.replace (osVersion, "16", "10")};
			add ("OS Version: " + osVersion);
			add ("IP address: " + tcp.dns.getMyDottedId ());
			add ("Radio folder: " + file.folderfrompath (frontier.getprogrampath ()));
			add (""); indentlevel--}};
	bundle { //About you and your computer
		add ("About you and your computer:"); indentlevel++;
		add ("");
		add ("Name: " + user.prefs.name);
		if defined (user.radio.prefs.usernum) {
			add ("Usernum: " + user.radio.prefs.usernum)}
		else {
			add ("Usernum: [undefined]")};
		add ("Organization: " + user.prefs.organization);
		add ("Mail address: " + user.prefs.mailAddress);
		add ("Outgoing mail server: " + user.prefs.mailHost);
		add ("Web server folder: " + user.radio.prefs.wwwFolder);
		addOnOff ("Web server", inetd.isDaemonRunning (@user.inetd.config.http));
		add ("Port: " + user.inetd.config.http.port);
		addOnOff ("Web server (5335)", inetd.isDaemonRunning (@user.inetd.config.http2));
		add ("Log folder: " + user.log.prefs.folder);
		add (""); indentlevel--};
	bundle { //Weblog prefs
		if defined (weblogData) {
			local (adrBlog = @weblogData);
			bundle { //Basic info
				add ("Weblog -- Basic info:"); indentlevel++;
				add ("");
				add ("Title: " + adrblog^.prefs.title);
				add ("Description: " + string (adrblog^.prefs.description));
				add ("Your name: " + adrblog^.prefs.authorName);
				add ("Mail address: " + adrblog^.prefs.authorMailAddress);
				add ("Home page path: " + adrblog^.prefs.homePageFilePath);
				add ("RSS file path: " + adrblog^.prefs.rssFilePath);
				add ("Number of days on home page: " + adrblog^.prefs.ctDaysToDisplay);
				add ("Number of items on editing page: " + adrblog^.prefs.viewing.ctPosts);
				addOnOff ("List your weblog on the UserLand updates page", adrblog^.prefs.flPublicBlog);
				addOnOff ("Show category checkboxes on editing page", adrblog^.prefs.flCategoryCheckboxes);
				add (""); indentlevel--};
			bundle { //Mail-to-weblog
				add ("Weblog -- Mail-to-Weblog:"); indentlevel++;
				add ("");
				addOnOff ("Enabled", weblogData.prefs.mailPosting.enabled);
				add ("POP server: " + weblogData.prefs.mailPosting.server);
				add ("Account name: " + weblogData.prefs.mailPosting.account);
				add (""); indentlevel--}}};
	bundle { //Safety and performance
		add ("Safety and performance:"); indentlevel++;
		add ("");
		addOnOff ("Save changed databases every minute", user.radio.prefs.flSaveDatabasesEveryMinute);
		add (""); indentlevel--};
	bundle { //Aggregator
		add ("News reading and scanning:");  indentlevel++;
		add ("");
		if defined (aggregatorData) {
			addOnOff ("Enabled", aggregatorData.prefs.enabled);
			add ("Scan at x minutes into the hour: " + aggregatorData.prefs.minuteToRead);
			add ("# stories on home page: " + user.radio.prefs.ctStoriesOnNewsPage);
			add ("# Channels to read at once: " + aggregatorData.prefs.maxThreads);
			addOnOff ("Cache stories list", user.radio.prefs.flCacheNewsItemsPage);
			addOnOff ("Delete old stories", aggregatorData.prefs.flArchive);
			add ("Archive stories older than: " + aggregatorData.prefs.hoursBeforeArchive);
			add ("Delete old stories at x minutes into the hour: " + aggregatorData.prefs.minuteToArchive);
			addOnOff ("Archive as XML", aggregatorData.prefs.flSaveArchiveXmlFiles);
			addOnOff ("Maintain subscriptions.opml", user.radio.prefs.flSaveServicesXml);
			addOnOff ("Checkboxes checked by default", user.radio.prefs.flNewsPageDeleteCheckboxesDefault);
			if defined (aggregatorData.trash) {
				add ("# items in trash: " + sizeOf (aggregatorData.trash))};
			if defined (aggregatorData.stories) {
				add ("# items in stories: " + sizeOf (aggregatorData.stories))};
			if defined (aggregatorData.services) {
				add ("# items in stories: " + sizeOf (aggregatorData.services))}};
		add (""); indentlevel--};
	bundle { //Remote access
		add ("Remote access: "); indentlevel++;
		add ("");
		addOnOff ("Remote access enabled", user.radio.prefs.security.allowRemoteViewing);
		addOnOff ("Remote posts enabled", user.radio.prefs.security.allowRemotePost);
		addOnOff ("Remote access security", user.radio.prefs.security.requireRemoteLogin);
		add ("Remote access username: " + user.radio.prefs.security.remoteUsername);
		<<add ("Remote access password: " + user.radio.prefs.security.remotePassword)
		add (""); indentlevel--};
	<<bundle //Hourly tasks
		<<add ("Hourly tasks:"); indentlevel++
		<<add ("")
		<<add ("Scan for news at " + myUserLandData.prefs.minuteToDoHourlyScan + " minutes into the hour.")
		<<add ("Scan for new sources at " + myUserLandData.prefs.minuteToReadServiceLists + " minutes into the hour.")
		<<add ("Get Weblogs.Com changes at " + myUserLandData.prefs.minuteToReadWeblogsCom + " minutes into the hour.")
		<<add (""); indentlevel--
	bundle { //Downloads
		add ("Downloading enclosures:"); indentlevel++;
		add ("");
		addOnOff ("Download enclosures overnight", user.radio.prefs.enclosures.flDownloadsEnabled);
		add ("Start downloading at " + user.radio.prefs.enclosures.hourToStartDownloads + " AM.");
		add ("Stop downloading at " + user.radio.prefs.enclosures.hourToStopDownloads + " AM.");
		addOnOff ("Create outline", user.radio.prefs.enclosures.flOutlineEnclosures);
		add ("Folder: " + user.radio.prefs.enclosures.enclosureFolder);
		if defined (weblogData) {
			addOnOff ("Add enclosures to your own channels", weblogData.prefs.flEnclosureField)};
		add (""); indentlevel--};
	bundle { //Logging
		add ("Event logging:"); indentlevel++;
		add ("");
		addOnOff ("Logging", user.radio.prefs.flAddToDailyLogDatabase);
		addOnOff ("Upstream", user.radio.prefs.upstream.logging);
		addOnOff ("Weblog publish", user.radio.prefs.flLogWeblogPublish);
		addOnOff ("Hourly scan", aggregatorData.prefs.flLogHourlyScan);
		addOnOff ("Weblogs.Com ping", user.radio.prefs.flLogWeblogsComPing);
		addOnOff ("Please notify", aggregatorData.prefs.flLogNotification);
		addOnOff ("Channel change", aggregatorData.prefs.flChannelChange);
		addOnOff ("Enclosure download", user.radio.prefs.enclosures.flLogDownloads);
		addOnOff ("Archive", aggregatorData.prefs.flLogArchiveStories);
		addOnOff ("Nightly update", user.radio.prefs.flLogNightlyUpdate);
		addOnOff ("Read global glossary", user.radio.prefs.glossary.logging);
		addOnOff ("Read HotList", user.radio.prefs.flLogHotlistReload);
		add (""); indentlevel--};
	bundle { //RSS output
		add ("RSS output files:"); indentlevel++;
		add ("");
		if defined (weblogData) {
			add ("Managing editor: " + weblogData.prefs.managingEditor);
			add ("Webmaster: " + weblogData.prefs.webmaster);
			add ("Maximum items per channel: " + weblogData.prefs.maxOutputItemsPerChannel)};
		add (""); indentlevel--};
	bundle { //Proxy server
		add ("Proxy server:"); indentlevel++;
		add ("");
		add ("Domain: " + user.webbrowser.proxy.domain);
		add ("Port: " + user.webbrowser.proxy.port);
		add ("Username: " + user.webbrowser.proxy.username);
		<<add ("Password: " + user.webbrowser.proxy.password)
		add (""); indentlevel--};
	bundle { //Upstreaming
		add ("Upstreaming servers:"); indentlevel++;
		add ("");
		addOnOff ("Upstreaming", user.radio.prefs.upstream.enabled);
		add ("Folder: " + user.radio.prefs.upstream.folder);
		addOnOff ("Logging", user.radio.prefs.upstream.logging);
		<<add ("Account (email address): " + user.playlist.prefs.account.email)
		<<add ("Password: " + user.playlist.prefs.account.password)
		<<add ("Server: " + playlist.data.upstream.server)
		<<add ("Port: " + playlist.data.upstream.port)
		<<add ("Procedure: " + playlist.data.upstream.saveprocedure)
		local (adr);
		for adr in @user.radio.prefs.upstream.servers {
			local (name = nameOf (adr^));
			add ("");
			add ("Server: " + name);
			try {add ("XML URL: " + adr^.serverCapabilities.xmlFolderUrl)};
			try {add ("Folder URL: " + adr^.serverCapabilities.yourUpstreamFolderUrl)}};
		add (""); indentlevel--};
	<<bundle //Miscellaneous
		<<add ("Miscellaneous:"); indentlevel++
		<<add ("")
		<<add ("Number of news items on home page: " + myUserLandData.prefs.ctStoriesOnHomePage)
		<<add ("Service list URL: " + myUserLandData.serviceLists.userlandAggregator)
		<<add ("Glossary URL: " + myUserLandData.prefs.glossaryUrl)
		<<add (""); indentlevel--
	bundle { //Installed tools
		add ("Installed tools:"); indentlevel++;
		add ("");
		local (adrItem);
		for adrItem in @user.tools.databases {
			if adrItem^.flInstalled {
				add (nameOf (adrItem^))}};
		add (""); indentlevel--};
	bundle { //Open Databases
		add ("Open Databases:"); indentlevel++;
		add ("");
		on visit (f) {
			local (fname = file.fileFromPath (f));
			local (folder = file.folderFromPath (f));
			local (folderName = file.fileFromPath (folder));
			folderName = string.popTrailing (folderName, file.getPathChar ());
			local (size = string.megabyteString (file.size (f)));
			add (folderName + "/" + fname + ": " + size)};
		table.visitOpenDatabases (@visit);
		add (""); indentlevel--};
	bundle { //Tools folder contents
		add ("Tools folder:"); indentlevel++;
		add ("");
		local (f);
		fileloop (f in Frontier.tools.getToolsFolderPath ()) {
			local (fname = file.fileFromPath (f));
			local (size = string.megabyteString (file.size (f)));
			add (fname + ": " + size)};
		add (""); indentlevel--};
	bundle { //agents
		add ("Agents:"); indentlevel++;
		add ("");
		local (adrItem);
		for adrItem in @system.agents {
			add (nameOf (adrItem^))};
		add (""); indentlevel--};
	bundle { //threads
		add ("Threads:"); indentlevel++;
		add ("");
		local (adrItem);
		for adrItem in @user.scheduler.threads {
			local (flDefined = true, flEnabled = true);
			if not defined (adrItem^) {
				flDefined = false}
			else {
				if not (adrItem^^.enabled) {
					flEnabled = false}};
			local (threadName = nameOf (adrItem^));
			if not flDefined {
				add (threadName + ": [not defined]")}
			else {
				if not flEnabled {
					add (threadName + ": [disabled]")}
				else {
					add (threadName + ": " + adrItem^)}}};
		add (""); indentlevel--};
	bundle { //XML-RPC
		add ("XML-RPC:"); indentlevel++;
		add ("");
		local (ctOutgoingAsynchMessages = 0);
		if defined (user.betty.queueOutgoing.table) {
			ctOutgoingAsynchMessages = sizeOf (user.betty.queueOutgoing.table)};
		addOnOff ("Allow by IP Only", user.betty.prefs.flAllowByIPOnly);
		addOnOff ("Keep Asynch Client Log", user.betty.prefs.flKeepAsynchClientLog);
		addOnOff ("Keep Server Log", user.betty.prefs.flKeepServerLog);
		add ("RPC Client Default Path: " + user.betty.prefs.rpcClientDefaultPath);
		add ("RPC Client Default Timeout: " + user.betty.prefs.rpcClientDefaultTimeout);
		add ("# Pending Asynch Messages: " + ctOutgoingAsynchMessages);
		add ("");
		add ("Handlers:"); indentlevel++;
		add ("");
		local (adr);
		for adr in @user.betty.rpcHandlers {
			local (name = nameOf (adr^));
			local (type = typeOf (adr^));
			local (val = "");
			case type {
				tableType {
					val = sizeOf (adr^) + " items"};
				scriptType {
					val = sizeOf (adr^) + " lines"};
				addressType {
					val = adr^}};
			if val == "" {
				add (name)}
			else {
				add (name + ": " + val)}};
		add ("");
		indentlevel--;
		addOnOff ("RPC2 responder enabled", defined (user.webserver.responders.RPC2.enabled) and user.webserver.responders.RPC2.enabled);
		add (""); indentlevel--};
	bundle { //SOAP
		add ("SOAP:"); indentlevel++;
		add ("");
		add ("RPC Client Default Timeout: " + user.soap.prefs.rpcClientDefaultTimeout);
		add ("");
		add ("Handlers:"); indentlevel++;
		add ("");
		local (adr);
		for adr in @user.soap.rpcHandlers {
			local (name = nameOf (adr^));
			local (type = typeOf (adr^));
			local (val = "");
			case type {
				tableType {
					val = sizeOf (adr^) + " items"};
				scriptType {
					val = sizeOf (adr^) + " lines"};
				addressType {
					val = adr^}};
			if val == "" {
				add (name)}
			else {
				add (name + ": " + val)}};
		add ("");
		indentlevel--;
		addOnOff ("SOAP responder enabled", defined (user.webserver.responders.soap.enabled) and user.webserver.responders.soap.enabled);
		add (""); indentlevel--};
	bundle { //Responders
		add ("Responders:"); indentlevel++;
		add ("");
		local (adr);
		for adr in @user.webserver.responders {
			local (name = nameOf (adr^));
			while (typeOf (adr^) == addressType) {
				adr = adr^};
			local (flEnabled = adr^.enabled);
			addOnOff (name, flEnabled)};
		add (""); indentlevel--};
	bundle { //Webserver stats
		add ("Webserver stats:"); indentlevel++;
		add ("");
		add ("Hits: " + user.webserver.stats.hits);
		add ("Max connections: " + user.webserver.stats.maxConnections);
		add ("Max memory available: " + user.webserver.stats.maxMemAvail);
		add ("Min memory available: " + user.webserver.stats.minMemAvail);
		add ("Up since: " + user.webserver.stats.upSince);
		if defined (user.webserver.stats.wormHits) {
			add ("Worm hits: " + user.webserver.stats.wormHits)};
		add (""); indentlevel--};
	bundle { //Webserver prefs
		add ("Webserver prefs:"); indentlevel++;
		add ("");
		add ("Default responder: " + user.webserver.prefs.defaultResponder);
		addOnOff ("Debugging", user.webserver.prefs.fldebug);
		addOnOff ("Domain stats", user.webserver.prefs.flDomainStats);
		addOnOff ("DNS Lookups", user.webserver.prefs.flUseDns);
		add (""); indentlevel--};
	bundle { //Webserver prefilters
		add ("Webserver PreFilters:"); indentlevel++;
		add ("");
		local (adrItem);
		for adrItem in @user.webserver.preFilters {
			if typeOf (adrItem^) == addressType {
				add (nameOf (adrItem^) + ": " + adrItem^)}
			else {
				add (nameOf (adrItem^))}};
		add (""); indentlevel--};
	bundle { //Webserver postfilters
		add ("Webserver PostFilters:"); indentlevel++;
		add ("");
		local (adrItem);
		for adrItem in @user.webserver.postFilters {
			if typeOf (adrItem^) == addressType {
				add (nameOf (adrItem^) + ": " + adrItem^)}
			else {
				add (nameOf (adrItem^))}};
		add (""); indentlevel--};
	
	if fldebug {
		wp.newTextObject (mailText, @temp.radioConfiguration);
		edit (@temp.radioConfiguration)};
	
	return (mailText)}



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.