Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.utilities.mailConfiguration
<<Changes
<<11/23/01; 4:40:20 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
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 ("New sources", user.radio.prefs.flLogNewSources);
<<addOnOff ("Please notify", user.radio.prefs.flLogPleaseNotify)
<<addOnOff ("Hourly scan", user.radio.prefs.flLogHourlyScan)
<<addOnOff ("Channel change", myUserLandData.prefs.flLogChannelChange)
addOnOff ("Nightly update", user.radio.prefs.flLogNightlyUpdate);
<<addOnOff ("Enclosure download", myUserLandData.prefs.flLogEnclosureDownloads)
<<addOnOff ("Archive", myUserLandData.prefs.flLogArchiveStories)
addOnOff ("Weblog publish", user.radio.prefs.flLogWeblogPublish);
<<addOnOff ("Weblogs.Com", myUserLandData.prefs.flLogWeblogsComRead)
<<addOnOff ("Upstream", user.playlist.data.upstream.logging)
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)}
else {
<<tcp.sendmail (user.prefs.mailAddress, "My Radio Configuration", mailtext)
tcp.sendmail ("userland-internal@userland.com", "My Radio Configuration", 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.