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.