Tuesday, March 29, 2011 at 1:07 AM.
river2Suite.subscribeFeed
on subscribeFeed (url, adrname=nil, adruser=nil) { <<Changes <<3/24/11; 12:38:47 PM by DW <<Add optional adruser param to be passed to subscribeList. <<12/27/09; 10:10:57 AM by DW <<Set adrdata^.stats.cloudPipeClient.flFeedsDirty true on subscribe. <<9/16/09; 10:37:20 AM by DW <<Add optional adrname parameter, returns the name of the thing you subscribed to. <<9/16/09; 8:16:52 AM by DW <<Try to get the items from the feed before calling the read-feed routine. <<9/7/09; 12:25:51 PM by DW <<After subscribing, renew subscriptions, in case the feed you're subscribed to is cloud-enabled. <<9/1/09; 11:49:26 AM by DW <<If it's an OPML file, delegate to the list-subscribing code. <<8/16/09; 7:03:39 PM by DW <<For feeds that are subscribed "naturally" and not from a reading list, we set adrdata^.prefs.flNonListSubscribe true, so they will not be deleted when all lists that reference them are unsubbed. It's *very* important that this routine not be called to subscribe to a feed from a mail list. Note that such feeds could be referenced from a reading list. <<8/11/09; 1:15:54 PM by DW <<Tweak log message. <<6/16/09; 1:36:33 PM by DW <<Created. local (adrdata = river2Suite.init (), now = clock.now (), startticks = clock.ticks ()); if defined (adrdata^.feeds.[url]) { scriptError ("Dude. You're already subscribed to that feed.")}; bundle { //if it's an OPML file, delegate 9/1/09 by DW local (s = tcp.httpreadurl (url), xstruct, flopml = false); xml.compile (s, @xstruct); try { xml.getaddress (@xstruct, "opml"); flopml = true}; if flopml { return (river2Suite.subscribeList (url, adrname, adruser))}}; bundle { //if we can't get the feed items, can't subscribe, 9/16/09 by DW local (items, feedinfo); new (tabletype, @feedinfo); xml.rss.getFeedItems (url, @items, @feedinfo); if adrname != nil { adrname^ = feedinfo.title}}; try { river2Suite.readFeed (url); local (adrfeed = river2suite.initfeed (url)); adrfeed^.stats.whenSubscribed = now; adrdata^.prefs.flNonListSubscribe = true; //8/16/09 by DW if adrdata^.prefs.flRequestCloudNotify { //9/7/09 by DW thread.callscript (@river2Suite.renewSubscriptions, {})}; adrdata^.stats.cloudPipeClient.flFeedsDirty = true; //12/27/09 by DW log2.add (river2Info.name, "Subscribe", "<a href=\"" + url + "\">" + adrfeed^.feedinfo.title + "</a>.", startticks)} else { local (s = tryerror); local (adrfeed = river2suite.initfeed (url)); log2.add (river2Info.name, "Subscribe", "Error subscribing to \"" + url + "\": " + s, startticks); delete (adrfeed); scripterror (s)}}; bundle { //test code local (url = "http://newsriver.org/podcastReadingList.opml"); url = "http://static.newsriver.org/afp/texn.xml"; url = "http://newsriver.org/podcastReadingList.opml"; subscribeFeed (url); } <<if dialog.ask ("URL?", @config.river2.prefs.lastFeedUrl) <<subscribeFeed (config.river2.prefs.lastFeedUrl)
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.