Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.upstream.builtinDrivers.ftp.configPage
on configPage (adrfolder, adrspec) { 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")}; "upstreamSettings" { pta^.method = "GET"}}}}}; //tell the prefs browser not to treat this as a POST if adrspec == nil { //get default settings adrdata^.username = string.nthField (user.prefs.mailAddress, '@', 1); adrdata^.passwordName = nameOf (user.radio.prefs.passwords[1]); local (server = string.nthField (user.prefs.mailAddress, '@', 2)); while string.countFields (server, '.') > 2 { server = server - (string.nthField (server, '.', 1) + ".")}; adrdata^.server = "ftp." + server; adrdata^.path = ""; adrdata^.url = "http://www." + server + "/" + adrdata^.username + "/"} else { //get settings from the cached spec adrdata^.username = adrspec^.username; adrdata^.passwordName = adrspec^.passwordName; adrdata^.server = adrspec^.server; adrdata^.path = adrspec^.path; adrdata^.url = adrspec^.url}; 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 ("prefsWizardUpstreamFtp.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, username, passwordName, server, path, url)}}; bundle { //try to connect to the server, report error messages try { with adrdata^ { local (adrconnection = tcp.ftp.openConnection (server, username, user.radio.prefs.passwords.[passwordName], true)); tcp.ftp.closeConnection (adrconnection); htmltext = "<p><font color=\"darkblue\">Upstream settings have been saved, and your account has been verified.</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 { //report the error htmltext = "<p><font color=\"red\">Error connecting to the server: " + tryError + "</font></p>\r" + htmltext}; msg ("")}; //clear the About window 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.