Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.upstream.builtinDrivers.xmlStorageSystem.upstream
on upstream (adrfile, adrspec) { <<Changes <<11/18/01; 4:24:11 PM by JES <<Fixed a bug where files would not be upstreamed: The name "password" is not defined. Check file extensions after calling radio.upstream.getUpstreamText, since the file's extension may change when it's rendered. <<11/13/01; 2:19:30 AM by JES <<Don't set temp.radio.recentlyChangedFolders flags here. They apply to all upstream folders, so they're set in radio.upstream.uploadChangedFiles instead. Get the upstream file-text through a call to radio.upstream.getUpstreamFileText. <<10/23/01; 1:47:10 AM by JES <<Changed <account> to <usernum>. Backward compatibility is maintained by radio.upstream.getUpstreamSpec. <<8/14/01; 3:18:47 AM by JES <<Override messages from xml.rpc and tcp.httpClient with more friendly "Upstreaming..." messages. <<7/24/01; 2:17:53 AM by JES <<Call radio.upstream.getServerCapabilities. Only upload the file if it's eligible, according to the data that the server returns. <<radio.upstream.getServerCapabilities will get the capabilities at most once per 24 hours. <<Account-specific storage allocation is ignored. Max file-size and extension are respected. <<6/22/01; 9:23:08 AM by DW <<Created. adrfile points to a sub-table user.radio.settings.files, and adrspec points to an upstream spec derived from a #upstream.xml file whose type is ftp. <<Our job is to upstream the file, set the url. Should be easy! ;-> local (f = nameof (adrfile^)); local (relativePath = adrfile^.relativePath); local (filetext = radio.upstream.getUpstreamText (f, @relativePath)); bundle { //call radio.upstream.getServerCapabilities, and see if the file qualifies for upstreaming local (adrCapabilities = radio.upstream.getServerCapabilities (adrspec)); if adrCapabilities != false { //radio.upstream.getServerCapabilities returns false if the RPC call fails if file.size (f) > adrCapabilities^.maxFileSize { //the file is too big -- return false return (false)}; local (fname = string.nthField (relativePath, '/', string.countFields (relativePath, '/'))); local (extension = string.nthField (fname, '.', string.countFields (fname, '.'))); if not (adrCapabilities^.legalFileExtensions contains extension) { return (false)}}}; <<local (filetext = string (file.readwholefile (f))) local (data = adrspec^); data.fldebug = false; if not defined (data.soapAction) { data.soapAction = ""}; if not defined (data.xmlRpcPath) { data.xmlRpcPath = ""}; with adrspec^ { msg ("Upstreaming '" + relativePath + "' to " + data.server + "..."); xmlStorageSystem.writeFile (usernum, user.radio.prefs.passwords.[passwordName], relativePath, filetext, adrurl:@adrfile^.upstream.url, adrdata:@data, flShowMessages:false); msg ("")}} <<if string.lower (file.filefrompath (f)) != string.lower (radio.data.upstream.directoryFileName) <<system.temp.radio.recentlyChangedFolders.[adrfile^.baseUpstreamFolder] = clock.now () <<bundle //test code <<upstream (@user.radio.settings.files.["Backup:Radio UserLand:www:index.txt"], @system.temp.radio.upstreamSpecCache.["Backup:Radio UserLand:www:#upstream.xml"])
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.