Monday, November 08, 2010 at 12:07 AM.
system.verbs.builtins.xml.aggregator.menuCommands.importSubscriptions
<<Changes <<12/30/05; 7:45:29 AM by DW <<Handle structured lists. <<Don't die if a node doesn't have an xmlUrl attribute. <<Should work with BlogLines's OPML list format (they have a 2-level structure). <<12/28/05; 8:35:41 PM by DW <<Return true if we did a scan, false otherwise. This allows the caller to put up a dialog saying that the scan is complete, and offer to display the new items. <<2/2/02; 4:23:16 PM by JES <<Pass a 0 to file.getFileDialog, for the type parameter instead of nil. Fixes a bug where files could not be opened on MacOS X. <<11/25/01; 9:13:34 AM by DW <<Created. local (f); if file.getfiledialog ("Choose a subscriptions file:", @f, 0) { local (adrdata = xml.aggregator.init ()); local (xmltext = file.readwholefile (f), xstruct); xml.compile (xmltext, @xstruct); local (adropml = xml.getAddress (@xstruct, "opml")); local (adrbody = xml.getAddress (adropml, "body")); local (ctimports = 0); on dolevel (adroutline) { local (adr); for adr in adroutline { if string.lower (nameof (adr^)) contains "outline" { local (adratts = @adr^.["/atts"]); if defined (adratts^) { if defined (adratts^.xmlUrl) { local (adrservice = @adrdata^.services.[adratts^.xmlUrl]); msg (adratts^.xmlUrl); if not defined (adrservice^) { new (tabletype, adrservice); ctimports++}}}; dolevel (adr)}}}; //recurse dolevel (adrbody); if ctimports > 0 { if dialog.yesno (ctimports + " services were imported, would you like to do a scan now?") { window.about (); xml.aggregator.readAllServices (); return (true)}} else { dialog.alert ("All the services in the subscription file were already in your subscription list.")}}; return (false)
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.