Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.upstream.uploadRecentlyTouchedFiles
<<Changes <<12/11/01; 12:50:01 PM by DW <<Wired off. Does nothing. <<12/6/01; 7:48:17 PM by DW <<The callback-calling code was broken, so the callbacks were never getting called, and this broke Weblogs.Com notification. It was passing a list containing a single list of N files, instead of a list of N files. Easy fix, once found. ;-> <<12/6/01; 2:05:29 PM by DW <<Change logging message to be consistent with radio.upstream.uploadchangedfiles. <<12/4/01; 2:48:38 PM by JES <<Maintain adfile^.upstream.flError flag. <<11/27/01; 9:49:12 PM by JES <<Improved the About window messages. <<11/27/01; 6:20:42 PM by JES <<Respect offline status. Call the callbacks once with a list of files, instead of once for each file with a list containing the path to a single file. <<11/27/01; 6:03:18 PM by JES <<Respect user.radio.prefs.upstream.enabled. <<11/27/01; 9:35:28 AM by DW <<Created. Loop over the files in system.temp.radio.recentlyWrittenWwwFiles. <<We're interested in files that are going out via xmlStorageSystem, files that are in the upstream domain of the top level of the www folder. The goal is to optimize the most likely case. If you're going to another upstream folder, or going out through another driver, it'll work, but it will be slower. Other optimizations are possible by further developing this routine. return; //12/11/01; 12:49:58 PM by DW if user.radio.prefs.upstream.enabled { if not tcp.isOffline () { local (startticks = clock.ticks ()); local (adrtable = @system.temp.radio.recentlyWrittenWwwFiles, adrrootspec); bundle { //set adrrootspec local (adrfile); radio.file.getFileAttributes (user.radio.prefs.upstream.folder, @adrfile); radio.upstream.getUpstreamSpec (adrfile, @adrrootspec); if adrrootspec^.type != "xmlStorageSystem" { table.emptytable (adrtable); return}}; local (filelist = {}, adr); for adr in adrtable { local (f = nameof (adr^), adrfile, adrspec); if file.exists (f) { radio.file.getFileAttributes (f, @adrfile); if radio.upstream.getUpstreamSpec (adrfile, @adrspec) { if adrspec == adrrootspec { filelist = filelist + {adrfile}; bundle { //set the relative path local (s = string.delete (f, 1, sizeof (adrfile^.baseUpstreamFolder))); s = string.replaceAll (s, file.getpathchar (), "/"); adrfile^.relativePath = s}; bundle { //set an item in system.temp.radio.recentlyChangedFolders to trigger rebuild of directory.opml if string.lower (file.folderFromPath (f)) == string.lower (adrfile^.baseUpstreamFolder) { if string.lower (file.filefrompath (f)) != string.lower (radio.data.upstream.directoryFileName) { system.temp.radio.recentlyChangedFolders.[adrfile^.baseUpstreamFolder] = clock.now ()}}}}}}}; table.emptytable (adrtable); if sizeof (filelist) > 0 { on runCallbacks (filelist, adrcallbacktable) { local (nomad); try { for nomad in adrcallbacktable { while typeOf (nomad^) == addressType { nomad = nomad^}; try {nomad^ (filelist)}}}}; //site of an outage -- 12/6/01; 7:49:55 PM by DW with adrrootspec^ { local (password = string (user.radio.prefs.passwords.[passwordName]), response); local (relativepathlist = {}, filetextlist = {}, filepathlist = {}); bundle { //fill relativepathlist, filetextlist local (adrfile); for adrfile in filelist { local (f = nameof (adrfile^)); local (relativePath = adrfile^.relativePath); filetextlist = filetextlist + {radio.upstream.getUpstreamText (f, @relativePath)}; adrfile^.upstream.whenLastUploaded = clock.now (); //only try once relativepathlist = relativepathlist + {relativePath}; filepathlist = filepathlist + {f}}}; msg ("Upstreaming " + sizeof (filetextlist) + " files to " + adrrootspec^.server + "..."); local (flerror, message, urllist); try { local (data = adrrootspec^); data.fldebug = false; xmlStorageSystem.writeMultipleFiles (usernum, password, relativepathlist, filetextlist, @response, adrdata:@data, flShowMessages:false); flerror = response.flerror; message = response.message; urllist = response.urllist} else { flerror = true; message = tryerror; urllist = {}}; <<scratchpad.response = response bundle { //record info about the files local (i, adrfile); for i = 1 to sizeof (filelist) { adrfile = filelist [i]; if flerror { adrfile^.upstream.flError = true} else { //no error, increment ctUploads, set url, set flError to false adrfile^.upstream.ctUploads++; adrfile^.upstream.url = urllist [i]; adrfile^.upstream.flError = false}}}; bundle { //run callbacks if defined (radio.upstream.callbacks.upstream) { runCallbacks (filepathlist, @radio.upstream.callbacks.upstream)}; if defined (user.radio.callbacks.upstream) { runCallbacks (filepathlist, @user.radio.callbacks.upstream)}}; bundle { //logging if user.radio.prefs.upstream.logging { local (htmltext = ""); if flerror { htmltext = "Error: " + message} else { local (url); for url in urllist { htmltext = htmltext + "<a href=\"" + url + "\">" + string.nthfield (url, "/", string.countfields (url, "/")) + "</a>, "}; htmltext = sizeof (urllist) + " files: " + string.delete (htmltext, sizeof (htmltext) - 1, 2) + "."}; radio.log.add ("Upstream", htmltext, startticks)}}; msg ("")}}}}
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.