Monday, November 08, 2010 at 12:00 AM.
river2Suite.podcasts.downloadOne
on downloadOne (adrinriver) { <<Changes <<11/18/09; 5:49:45 PM by DW <<Somehow we're being called for river items that don't have enclosures. So we check to see if it has one and if not, we don't do anything. <<9/17/09; 5:16:01 AM by DW <<If there's an error limiting the folder size don't die, and log the error. <<9/8/09; 1:42:20 PM by DW <<Change strings to say "enclosure" from "podcast" so it works equally well for pictures. <<9/2/09; 10:21:26 AM by DW <<maxFolderMegs is a podcast pref, not a top-level pref. <<9/1/09; 7:57:31 PM by DW <<Constrain the folder size by adrdata^.prefs.maxFolderMegs. <<8/24/09; 9:14:33 PM by DW <<Delete system.temp.river2.idDownloadThread when completed, allowing another download to begin. <<8/22/09; 6:44:13 PM by DW <<Created. Core podcatcher routine. if defined (adrinriver^.enclosure) { //11/18/09 by DW local (adrdata = river2Suite.init (), startticks = clock.ticks ()); local (adrfeed = river2Suite.initFeed (adrinriver^.feedurl)); river2Suite.initRiverItem (adrinriver); local (feedname = adrfeed^.feedinfo.title); local (folder = adrdata^.prefs.podcasts.downloadFolder, pc = file.getpathchar (), url = adrinriver^.enclosure.url); local (fname = river2Suite.podcasts.cleanFilename (string.nthfield (url, "/", string.countfields (url, "/")))); if fname contains "?" { //9/30/07 by DW fname = string.nthfield (fname, "?", 1)}; local (f = folder + river2Suite.podcasts.cleanFilename (feedname) + pc + fname); file.surefilepath (f); <<dialog.alert (f) try { //download the podcast adrinriver^.podcast.whenDownloadBegan = clock.now (); adrinriver^.podcast.f = f; bundle { //msg local (s = "Downloading enclosure \"" + feedname + "\""); if adrinriver^.enclosure.length != 0 { s = s + ", " + string.gigabytestring (adrinriver^.enclosure.length)}; s = s + "."; msg (s)}; local (urllist = string.urlsplit (url)); local (s = string.httpResultSplit (tcp.httpClient (server:urllist [2], path:urllist [3], ctFollowRedirects:5, flmessages:false))); file.writewholefile (f, s); msg (""); bundle { //if we have a pubdate, set the file dates to that try { if adrinriver^.pubdate != date (0) { file.setcreated (f, adrinriver^.pubdate); file.setmodified (f, adrinriver^.pubdate)}}}; bundle { //log the event local (len = string.gigabytestring (adrinriver^.enclosure.length)); local (s = "Downloaded an <a href=\"" + url + "\">enclosure</a> from <a href=\"" + river2Suite.data.urls.feedPage + string.urlencode (adrinriver^.feedurl) + "\">" + feedname + "</a> to a local <a href=\"" + html.getfileurl (f) + "\">file</a> (" + len + ")."); log2.add (river2Info.name, "Enclosure", s, startticks)}; adrinriver^.podcast.whenDownloadFinished = clock.now (); adrfeed^.stats.ctPodcastDownloads++; adrfeed^.stats.whenLastPodcastDownload = clock.now ()} <<podcatcherSuite.logDownload (adrq) <<bundle //callbacks, 1/21/06 by DW <<local (adrscript) <<for adrscript in @adrdata^.callbacks.afterEnclosureDownload <<while typeof (adrscript^) == addresstype <<adrscript = adrscript^ <<try <<adrscript^ (adrq) else { adrinriver^.podcast.lastError = tryerror}; bundle { //limit the folder size per the pref, log it if there's an error, 9/17/09 by DW local (startticks = clock.ticks ()); try { file.maxFolderSize (folder, adrdata^.prefs.podcasts.maxFolderMegs)} //9/2/09 by DW else { log2.add (river2Info.name, "Enclosure", "Error limiting the folder size after download: " + tryerror, startticks)}}; try {delete (@system.temp.river2.idDownloadThread)}}} //8/24/09 by DW <<bundle //test code <<downloadOne (@config.river2.river.["2009"].["08"].["20"].["0034910"])
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.