Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.rootUpdates.getPendingUpdatesList
on getPendingUpdatesList (adrUpdatesTable, rssUrl, databasesToUpdate) { <<Changes <<8/5/04; 11:09:35 PM by JES <<Change initial whenLastUpdatesRead date to 8/4/04. <<12/17/03; 1:34:37 AM by JES <<Created. Read the RSS fead that lists pending root updates. local (flRead = false); if not defined (adrUpdatesTable^) { new (tableType, adrUpdatesTable)}; if not defined (adrUpdatesTable^.pendingUpdates) { new (tableType, @adrUpdatesTable^.pendingUpdates)}; if not defined (adrUpdatesTable^.whenLastUpdatesRead) { adrUpdatesTable^.whenLastUpdatesRead = date.set (4, 8, 2004, 0, 0, 0)}; if adrUpdatesTable^.whenLastUpdatesRead < date.yesterday (clock.now ()) { //read up to once every 24 hours flRead = true}; if flRead { //read the feature list RSS feed, and populate the pendingUpdates table adrUpdatesTable^.whenLastUpdatesRead = clock.now (); bundle { //read the updates into the pendingUpdates table local (services); new (tableType, @services); //a spoofed temporary services table new (tableType, @services.[rssUrl]); on storyArrivedCallback (adrservice, adrstory) { adrUpdatesTable^.pendingUpdates.[nameOf (adrstory^)] = adrstory^}; new (tableType, @adrUpdatesTable^.pendingUpdates); bundle { //read the RSS feed using xml.rss.readService xml.rss.readService (rssUrl, @services, "http://frontier.userland.com/howToUpdate?hash=" + string.hashmd5 (user.prefs.serialNumber), @storyArrivedCallback, true)}}}; bundle { //delete any updates that we already have local (db, lastUpdate); for db in databasesToUpdate { //get lowest update date -- lowest common denominator try { local (adrprefs = @user.rootUpdates.servers.[db]); if typeOf (lastUpdate) == unknownType { lastUpdate = date (adrprefs^.lastUpdate)} else { if date (adrprefs^.lastUpdate) < lastUpdate { lastUpdate = date (adrprefs^.lastUpdate)}}}}; local (ctupdates = sizeOf (adrUpdatesTable^.pendingUpdates), i); for i = ctupdates downto 1 { //delete updates before lastUpdate local (adr = @adrUpdatesTable^.pendingUpdates[i]); if date (adr^.data.pubDate) < lastUpdate { delete (adr)}}}; return (sizeOf (adrUpdatesTable^.pendingUpdates))}
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.