Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.tcp.im.builtinDrivers.jabber.code.everyMinute
<<Changes:
<<5/13/02; 11:04:24 PM by JB
<<Changelog created. This script cleans out the id tables and maintains the system.temp.jabber.connection connection.
on shouldJabberBeOn ( ) {
<<Decides whether the framework-maintained Jabber connection should be off or on. true for on, false for off.
if tcp.isOffline() {
return false};
if not defined ( user.im.jabber.flActive ) or user.im.jabber.flActive == false {
return false};
if defined(user.im.jabber.prefs.forceActive) and user.im.jabber.prefs.forceActive {
// FIXME: Remove this if it's unused
return true};
// we have to see if there are any handlers
local ( handlerTable = @user.im.jabber.handlers["system.temp.jabber.connection"] );
if not defined (handlerTable^) {
return false};
// any handlers?
for handlers in handlerTable {
if sizeOf ( handlers^ ) > 0 {
return true}};
// no reason to turn the connection on
return false};
local ( jabberOn );
try {
jabberOn = shouldJabberBeOn()}
else {
jabberOn = false};
if jabberOn { // ensure the connection exists
if not defined ( system.temp.jabber.connection ) {
try {
tcp.im.builtinDrivers.jabber.code.openConnection(loginTimeout: 60*30)}}} // wait only 30 seconds, since we run every 60...
else { // shut the connection down, if one exists
try {
for connection in @system.temp.jabber.connections {
jabber.closeConnection()}}};
local ( i, idTbl );
for i = sizeOf ( system.temp.jabber.idTables ) downto 1 { // cleanup the id tables
idTbl = @system.temp.jabber.idTables[i];
if typeOf ( idTbl^ ) == tableType {
if defined (idTbl^.expireTime) {
if clock.now() > idTbl^.expireTime {
tcp.im.builtinDrivers.jabber.code.idTables.delete ( idTbl )}}
else {
tcp.im.builtinDrivers.jabber.code.idTables.delete ( idTbl )}}}; // tables without expire times are illegal
return;
<<bundle //commented code
<<if not defined ( user.im.jabber.lastXSSSubUpdate )
<<user.im.jabber.lastXSSSubUpdate = date(0)
<<if defined ( user.im.jabber.prefs ) and not defined ( user.im.jabber.prefs.acceptXSSpubs ) // run only if a previous init has run
<<jabber.init()
<<if jabberOn and user.im.jabber.prefs.acceptXSSpubs and clock.now() - user.im.jabber.lastXSSSubUpdate > 24*60*60 and defined(system.temp.jabber.connection) // refresh subscriptions
<<for subscription in @aggregatorData.services
<<local ( url = nameOf ( subscription^ ) )
<<if defined ( subscription^.compilation.cloud )
<<with subscription^.compilation.cloud
<<tcp.im.builtinDrivers.jabber.code.messages.pubsubSubscribe(user.im.jabber.prefs.xssBridge, protocol + "@" + domain + ":" + port + path + "/" + registerProcedure, url)
<<radio.log.add("Jabber", "Adding in jabber subscriptions.", clock.ticks())
<<user.im.jabber.lastXSSSubUpdate = clock.now()
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.