Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.upstream.builtinDrivers.xmlStorageSystem.configPage
on configPage (adrfolder, adrspec) {
<<Changes
<<10/23/01; 1:45:35 AM by JES
<<Changed <account> to <usernum>. Don't register with the server here. You must be registered already.
local (pta = html.getPageTableAddress ());
pta^.title = "Upstream Settings";
local (htmltext = "");
on add (s) {
htmltext = htmltext + s + "\r"};
local (adrdata = @temp.radio.upstreamSettingsForm); //temp storage for the prefs browser
new (tableType, adrdata);
bundle { //cleanup items in the pageTable for the prefs browser
if pta^.method == "POST" {
local (adrargs = @pta^.radioResponder.postArgs);
if defined (adrargs^.command) {
case adrargs^.command {
"postUpstreamSettings" { //clean up custom items in the post args
delete (@adrargs^.command);
table.rename (@adrargs^.passwordName, "temp.radio.upstreamSettingsForm.passwordName");
table.rename (@adrargs^.rpcProtocol, "temp.radio.upstreamSettingsForm.protocol")};
"upstreamSettings" {
pta^.method = "GET"}}}}}; //tell the prefs browser not to treat this as a POST
if adrspec == nil { //get default settings
if defined (user.radio.prefs.usernum) {
adrdata^.usernum = user.radio.prefs.usernum}
else { //empty string
adrdata^.usernum = ""};
adrdata^.name = user.prefs.name;
adrdata^.passwordName = nameOf (user.radio.prefs.passwords[1]);
local (adrdefaults = @xmlStorageSystem.data);
adrdata^.server = adrdefaults^.server;
adrdata^.port = adrdefaults^.port;
adrdata^.protocol = adrdefaults^.protocol;
adrdata^.rpcPath = adrdefaults^.rpcPath;
adrdata^.soapAction = adrdefaults^.soapAction}
else { //get settings from the cached spec
if defined (adrdata^.usernum) {
adrdata^.usernum = usernum}
else { //Grandfather in old element names, if present. Otherwise default to user.radio.prefs.usernum, or the empty string.
if defined (adrdata^.account) {
adrdata^.usernum = adrspec^.account}
else {
if defined (adrdata^.email) { //support the older #upsteram.xml spec
adrdata^.usernum = adrspec^.email}
else {
if defined (user.radio.prefs.usernum) {
adrdata^.usernum = user.radio.prefs.usernum}
else {
adrdata^.usernum = ""}}}};
adrdata^.name = adrspec^.name;
adrdata^.passwordName = adrspec^.passwordName;
adrdata^.server = adrspec^.server;
adrdata^.port = adrspec^.port;
adrdata^.protocol = adrspec^.protocol;
if defined (adrspec^.xmlRpcPath) { //legacy support for old xmlRpcPath element
adrdata^.rpcPath = adrspec^.xmlRpcPath};
if defined (adrspec^.rpcPath) {
adrdata^.rpcPath = adrspec^.rpcPath};
adrdata^.soapAction = adrspec^.soapAction};
local (folder = nameOf (adrfolder^), folderlink);
bundle { //build folderlink
local (parentfolder = file.folderfrompath (user.radio.prefs.wwwfolder));
local (foldername = string.replaceall (string.delete (folder, 1, sizeof (parentfolder)), file.getpathchar (), "/"));
local (folderpath = string.replaceall (string.delete (folder, 1, sizeof (user.radio.prefs.wwwfolder)), file.getpathchar (), "/"));
folderpath = string.replaceAll (folderpath, file.getPathChar (), "/");
folderlink = "<a href=\"/" + folderpath + "?folderView=1\">" + foldername + "</a>"};
htmltext = string.replace (radio.prefs.browser ("prefsWizardUpstreamXss.opml"), "[[folder]]", folderlink);
if pta^.method == "POST" { //handle a post of the prefs form
local (adrargs = @pta^.radioResponder.postArgs);
bundle { //write out the #upstream.xml file
local (f = folder + radio.data.fileNames.upstreamFileName);
local (adrdriver = parentOf (this^));
with adrdata^ {
adrdriver^.saveUpstreamSpec (f, usernum, name, passwordName, protocol, server, port, rpcPath, soapAction)}};
<<bundle //register with the server
<<with adrdata^
<<local (greeting)
<<try //trap errors
<<local (spec = adrspec^)
<<spec.fldebug = false
<<if xmlStorageSystem.register (account, user.radio.prefs.passwords.[passwordname], name, @greeting, @spec)
<<htmltext = "<p><font color=\"darkblue\">The server said: " + greeting + "</font></p>\r" + htmltext
<<bundle //invalidate the cache for all files in this folder
<<local (adr)
<<for adr in @user.radio.settings.files
<<local (name = nameOf (adr^))
<<if name beginsWith folder
<<adr^.modified = date (0)
<<adr^.upstream.url = ""
<<adr^.upstream.whenLastUploaded = date (0)
<<else //the server reported an error
<<htmltext = "<p><font color=\"red\">The server reported an error: " + greeting + "</font></p>\r" + htmltext
<<else //show the error to the user
<<htmltext = "<p><font color=\"red\">Error connecting to the server: " + tryError + "</font></p>\r" + htmltext
delete (adrdata)}; //delete temporary storage
return (htmltext)}
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.