Monday, November 08, 2010 at 12:00 AM.
river2Suite.readList
on readList (urlList) { <<Changes <<9/3/09; 4:14:23 AM by DW <<Get the listinfo for the reading list from the OPML. <<8/16/09; 11:02:16 AM by DW <<Created. local (adrdata = river2suite.init (), xmltext = tcp.httpreadurl (urlList), feeds); local (adrlist = river2Suite.initList (urlList), now = clock.now (), startticks = clock.ticks ()); xml.rss.getOpmlFeeds (xmltext, @feeds, @adrlist^.listInfo); on logmebaby (action, url, title) { //gotta log this shit to keep from going crazy local (adrday = mainresponder.calendar.getdayaddress (@adrlist^.calendar, now)); local (adritem = @adrday^.[string.padwithzeros (sizeof (adrday^) + 1, 3)]); new (tabletype, adritem); adritem^.action = action; adritem^.url = url; adritem^.title = title}; bundle { //figure out which feeds disappeared local (i, adroldfeed, url); for i = sizeof (adrlist^.feeds) downto 1 { adroldfeed = @adrlist^.feeds [i]; url = nameof (adroldfeed^); if not defined (feeds.[url]) { //goodbye compadre local (title = adroldfeed^.atts.title); logmebaby ("Unsubbed", url, title); delete (adroldfeed); //delete in the list's feeds table local (adrfeed = river2suite.initfeed (url)); //now find the feed in the global table delete (@adrfeed^.lists.[urlList]); if (sizeof (adrfeed^.lists) == 0) and (not adrfeed^.prefs.flNonListSubscribe) { logmebaby ("Goodbye Feed", url, title); delete (adrfeed)}}}}; bundle { //figure out which feeds are new local (adrnewfeed, url); for adrnewfeed in @feeds { url = nameof (adrnewfeed^); if not defined (adrlist^.feeds.[url]) { //greetings my new amigo logmebaby ("Subbed", url, adrnewfeed^.atts.title); adrlist^.feeds.[url] = adrnewfeed^; bundle { //now deal with the feed in the global table local (flerror = false); if not defined (adrdata^.feeds.[url]) { //we don't already know about the feed! local (startticks = clock.ticks ()); try { river2Suite.readFeed (url); local (adrfeed = river2suite.initfeed (url)); adrfeed^.stats.whenSubscribed = now; adrdata^.prefs.flNonListSubscribe = false; //we only know about it through a list log2.add (river2Info.name, "Subscribe", "<a href=\"" + url + "\">" + adrfeed^.feedinfo.title + "</a>.", startticks)} else { local (s = tryerror, adrfeed = river2suite.initfeed (url)); log2.add (river2Info.name, "Subscribe", "Error subscribing to \"" + url + "\": " + s, startticks); delete (adrfeed); flerror = true}}; if not flerror { local (adrfeed = river2suite.initfeed (url)); adrfeed^.lists.[urlList] = now}}}}}; <<scratchpad.feedsReadingList = adrlist^.feeds adrlist^.stats.ctReads++; adrlist^.stats.whenLastRead = now}; bundle { //test code readList ("http://newsriver.org/podcastReadingList.opml")}
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.