Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.outliner.requestNotifications
<<Changes
<<8/29/02; 11:28:37 PM by JES
<<Add the server to the Jabber user ID when requestion notification over Jabber.
<<8/27/02; 2:12:12 AM by JES
<<Update IM-based subscriptions every 24 hours.
<<3/27/02; 2:17:31 AM by JES
<<Created. Make an xmlStorageSystem.requestNotification RPC call for each subscribed outline, for which notification has not been requested within the last 24 hours.
local (adrdata = radio.outliner.init ());
local (userinfo); new (tableType, @userinfo);
bundle { //build userinfo table
userinfo.subscriberName = user.prefs.name;
userinfo.subscriberWeblogUrl = radio.weblog.getUrl ();
local (outlineUrl = radio.upstream.getFileUrl (radio.outliner.getMyOutlineFile ()));
userinfo.subscriberOutlineUrl = outlineUrl};
local (adrsub, now = clock.now (), twentyfourhours = 24 * 60 * 60, threehours = 3 * 60 * 60);
if user.radio.outliner.prefs.messaging.flEnabled {
local (userinfo);
bundle { //set up a userinfo table
new (tableType, @userinfo);
userinfo.name = user.prefs.name;
userinfo.email = user.prefs.mailAddress;
local (f = radio.outliner.getMyOutlineFile ());
local (adrfile);
radio.file.getfileattributes (f, @adrfile);
userinfo.opmlUrl = adrfile^.upstream.url;
userinfo.url = radio.weblog.getUrl ()};
on subscribeToOutlinesForProtocol (protocol, myname) {
local (adrsubs = @adrdata^.subscriptions);
local (adr);
for adr in adrsubs {
if not defined (adr^.whenLastImSubscribe) {
adr^.whenLastImSubscribe = date (0)};
local (flsubscribe = true);
if (now - adr^.whenLastImSubscribe) < threehours {
flsubscribe = false};
if flsubscribe {
if defined (adr^.imRegisterProcedure) {
if adr^.imRegisterProcedure.protocol == protocol {
local (adrdriver);
try { //RPI is asynch -- no error messages
if tcp.im.findDriver (protocol, @adrdriver) { //make sure the protocol is handled
with adr^.imRegisterProcedure {
tcp.im.rpi.client (protocol, username, procedure, {protocol, "radioOutliner.opmlChanged", myname, userinfo})}}}
else {
msg (this + ": " + tryError)};
adr^.whenLastImSubscribe = now}}}}};
if adrdata^.prefs.messaging.flAimEnabled {
subscribeToOutlinesForProtocol ("aim", user.im.aim.username)};
if adrdata^.prefs.messaging.flJabberEnabled {
subscribeToOutlinesForProtocol ("jabber", user.im.jabber.username + "@" + user.im.jabber.host)}};
if not user.radio.prefs.flBehindFirewall {
local (startticks = clock.ticks (), htmltext = "");
for adrsub in @adrdata^.subscriptions {
if not defined (adrsub^.whenLastSubscribe) {
adrsub^.whenLastSubscribe = date (0)};
local (flsubscribe = true);
if defined (adrsub^.whenLastSubscribe) {
if (now - adrsub^.whenLastSubscribe) < twentyfourhours {
flsubscribe = false}};
if flsubscribe {
try {
if defined (adrsub^.cloudInfo) {
local (url = nameOf (adrsub^));
if adrsub^.cloudInfo.registerProcedure == "xmlStorageSystem.rssPleaseNotify" { //temporary workaround until people have all updated
adrsub^.cloudInfo.registerProcedure = "xmlStorageSystem.requestNotification"};
with adrsub^.cloudInfo {
case protocol {
"xml-rpc" {
local (params = {"radioOutliner.opmlChanged", user.inetd.config.http.port, "/RPC2", "xml-rpc", {url}, userinfo});
betty.rpc.client (domain, port, registerProcedure, @params, rpcPath: path)};
"soap" {
local (params = {"opmlChanged", user.inetd.config.http.port, "/radioOutliner", "soap", {url}, userinfo});
soap.rpc.client (path, registerProcedure, @params, domain, port)}}};
adrsub^.whenLastSubscribe = now;
htmltext = htmltext + "<a href=\"" + url + "\">" + adrsub^.author + "</a> "}}}};
if adrdata^.prefs.flLogNotificationRequests {
if htmltext != "" {
radio.log.add ("Outliner please notify", htmltext, startticks)}}}
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.