Monday, November 08, 2010 at 12:07 AM.
system.verbs.builtins.xml.aggregator.updateSubscriptions
on updateSubscriptions (flSubscribeAll = false) { <<Changes <<12/27/01; 5:55:13 PM by PBS <<If this is Frontier, check the firewall pref at adrdata^.prefs.flBehindFirewall since user.radio is not defined. <<12/9/01; 10:41:43 AM by DW <<Respect user.radio.prefs.flBehindFirewall. <<People behind firewalls cannot receive notifications. <<No point requesting them. <<1/7/01; 12:36:24 PM by DW <<Add support for HTTP-POST notification. <<1/6/01; 8:46:28 PM by DW <<Logging code is controlled by a preference. <<1/6/01; 3:46:22 PM by JES <<Changed the value of the 1st and 3rd parameters in the SOAP implementation to supply the correct actionURI and methodName. <<1/5/01; 7:54:01 PM by DW <<Add SOAP implementation. <<1/5/01; 7:24:13 PM by DW <<Add a boolean parameter, if true, we resubscribe to all, our IP address might have changed. <<1/5/01; 5:32:13 PM by DW <<Created. Send a request to receive notification for channels that support clouds. <<Only send a request once every twenty-four hours. local (adrdata = xml.aggregator.init ()); local (flBehindFirewall = false); if system.environment.isRadio { //PBS 12/27/01: flBehindFirewall pref is in different places for Radio and Frontier flBehindFirewall = user.radio.prefs.flBehindFirewall} else { flBehindFirewall = adrdata^.prefs.flBehindFirewall}; if not flBehindFirewall { local (startticks = clock.ticks (), htmltext = ""); local (adrservice, now = clock.now (), twentyfourhours = 24 * 60 * 60); for adrservice in @adrdata^.services { if defined (adrservice^.compilation) { if defined (adrservice^.compilation.cloud) { <<edit (adrservice) local (flsubscribe = true); if not flSubscribeAll { if defined (adrservice^.timeLastSubscribe) { if (now - adrservice^.timeLastSubscribe) < twentyfourhours { flsubscribe = false}}}; if flsubscribe { with adrservice^.compilation.cloud { try { local (url = nameof (adrservice^)); if protocol == "xml-rpc" { local (params = {"aggregator.channelChanged", user.inetd.config.http.port, "/RPC2", "xml-rpc", {url}}); betty.rpc.client (domain, port, registerProcedure, @params, rpcPath: path)}; if protocol == "soap" { local (params = {"channelChanged", user.inetd.config.http.port, "/aggregator", "soap", {url}}); soap.rpc.client (path, registerProcedure, @params, domain, port)}; <<if protocol == "http-post" <<local (args) <<new (tabletype, @args) <<args.target = url <<args.responder = "http://" + tcp.dns.getmydottedid () + ":" + user.inetd.config.http.port + "/myUserLand/remotePostAllowed/channelChanged.wsf" <<tcp.httpClient ("POST", domain, port, path, data:webserver.encodeargs (@args), datatype:"application/x-www-form-urlencoded") htmltext = htmltext + "<a href=\"" + url + "\">" + adrservice^.compilation.channeltitle + "</a> "}}; adrservice^.timeLastSubscribe = now}}}}; if adrdata^.prefs.flLogNotification { if htmltext != "" { try {radio.log.add ("Please notify", htmltext, startticks)}}}}} <<bundle //test code <<updateSubscriptions (true)
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.