diff options
author | Yann Leboulanger <asterix@lagaule.org> | 2004-01-24 23:32:51 +0300 |
---|---|---|
committer | Yann Leboulanger <asterix@lagaule.org> | 2004-01-24 23:32:51 +0300 |
commit | f913e4cd0e65a7dc916bf2294d6dd148bd60530e (patch) | |
tree | 33ed0a44b914e0f4997fb73a32ef311ad5f327b8 /core | |
parent | b2ec388e4bf936ad6e35ab4f9457d71d7ae6c498 (diff) |
- new configuration File management
- bugfix : message from unknown personne
Diffstat (limited to 'core')
-rw-r--r-- | core/core.py | 122 |
1 files changed, 85 insertions, 37 deletions
diff --git a/core/core.py b/core/core.py index 2d21b4c45..dcb4afd20 100644 --- a/core/core.py +++ b/core/core.py @@ -4,7 +4,6 @@ ## Gajim Team: ## - Yann Le Boulanger <asterix@crans.org> ## - Vincent Hanquez <tab@tuxfamily.org> -## - David Ferlier <david@yazzy.org> ## ## Copyright (C) 2003 Gajim Team ## @@ -40,9 +39,16 @@ class GajimCore: self.connected = 0 self.cfgParser = common.optparser.OptionsParser(CONFPATH) self.hub = common.hub.GajimHub() - self.cfgParser.parseCfgFile() + self.parse() # END __init__ + def parse(self): + self.cfgParser.parseCfgFile() + self.accounts = {} + accts = self.cfgParser.tab['Profile']['accounts'] + for a in string.split(accts, ' '): + self.accounts[a] = self.cfgParser.tab[a] + def messageCB(self, con, msg): """Called when we recieve a message""" self.hub.sendPlugin('MSG', (msg.getFrom().getBasic(), \ @@ -60,17 +66,20 @@ class GajimCore: show = prs.getShow() else: show = 'online' - self.hub.sendPlugin('NOTIFY', \ - (prs.getFrom().getBasic(), show, prs.getStatus(), prs.getFrom().getResource())) + self.hub.sendPlugin('NOTIFY', (prs.getFrom().getBasic(), \ + show, prs.getStatus(), prs.getFrom().getResource())) elif type == 'unavailable': self.hub.sendPlugin('NOTIFY', \ - (prs.getFrom().getBasic(), 'offline', prs.getStatus(), prs.getFrom().getResource())) + (prs.getFrom().getBasic(), 'offline', prs.getStatus(), \ + prs.getFrom().getResource())) elif type == 'subscribe': log.debug("subscribe request from %s" % who) - if self.cfgParser.Core_alwaysauth == 1 or string.find(who, "@") <= 0: + if self.cfgParser.Core['alwaysauth'] == 1 or \ + string.find(who, "@") <= 0: self.con.send(common.jabber.Presence(who, 'subscribed')) if string.find(who, "@") <= 0: - self.hub.sendPlugin('NOTIFY', (who, 'offline', 'offline', prs.getFrom().getResource())) + self.hub.sendPlugin('NOTIFY', (who, 'offline', 'offline', \ + prs.getFrom().getResource())) else: self.hub.sendPlugin('SUBSCRIBE', who) elif type == 'subscribed': @@ -79,7 +88,7 @@ class GajimCore: 'nom':jid.getNode(), 'ressource':jid.getResource()}) self.hub.queueIn.put(('UPDUSER', (jid.getBasic(), \ jid.getNode(), ['general']))) -# self.con.updateRosterItem(jid=jid.getBasic(), name=jid.getNode(), groups=['general']) + #BE CAREFUL : no self.con.updateRosterItem() in a callback log.debug("we are now subscribed to %s" % who) elif type == 'unsubscribe': log.debug("unsubscribe request from %s" % who) @@ -87,17 +96,17 @@ class GajimCore: log.debug("we are now unsubscribed to %s" % who) self.hub.sendPlugin('UNSUBSCRIBED', prs.getFrom().getBasic()) elif type == 'error': -# print "\n\n******** ERROR *******" -# print "From : %s" % prs.getFrom() -# print "To : %s" % prs.getTo() -# print "Status : %s" % prs.getStatus() -# print "Show : %s" % prs.getShow() -# print "X : %s" % prs.getX() -# print "XNode : %s" % prs.getXNode() -# print "XPayload : %s" % prs.getXPayload() -# print "_node : %s" % prs._node.getData() -# print "kids : %s" % prs._node.kids[0].getData() -# print "\n\n" + print "\n\n******** ERROR *******" + #print "From : %s" % prs.getFrom() + #print "To : %s" % prs.getTo() + #print "Status : %s" % prs.getStatus() + #print "Show : %s" % prs.getShow() + #print "X : %s" % prs.getX() + #print "XNode : %s" % prs.getXNode() + #print "XPayload : %s" % prs.getXPayload() + #print "_node : %s" % prs._node.getData() + #print "kids : %s" % prs._node.kids[0].getData() + #print "\n\n" errmsg = prs._node.kids[0].getData() # END presenceCB @@ -112,14 +121,15 @@ class GajimCore: def connect(self, account): """Connect and authentificate to the Jabber server""" - self.cfgParser.parseCfgFile() - hostname = self.cfgParser.__getattr__("%s" % account+"_hostname") - name = self.cfgParser.__getattr__("%s" % account+"_name") - password = self.cfgParser.__getattr__("%s" % account+"_password") - ressource = self.cfgParser.__getattr__("%s" % account+"_ressource") - self.con = common.jabber.Client(host = \ - hostname, debug = [common.jabber.DBG_ALWAYS], log = sys.stderr, connection=common.xmlstream.TCP, port=5222) -# hostname, debug = [common.jabber.DBG_ALWAYS], log = sys.stderr, connection=common.xmlstream.TCP_SSL, port=5223) + hostname = self.cfgParser.tab[account]["hostname"] + name = self.cfgParser.tab[account]["name"] + password = self.cfgParser.tab[account]["password"] + ressource = self.cfgParser.tab[account]["ressource"] + self.con = common.jabber.Client(host = hostname, \ + debug = [common.jabber.DBG_ALWAYS], log = sys.stderr, \ + connection=common.xmlstream.TCP, port=5222) + #debug = [common.jabber.DBG_ALWAYS], log = sys.stderr, \ + #connection=common.xmlstream.TCP_SSL, port=5223) try: self.con.connect() except IOError, e: @@ -151,12 +161,14 @@ class GajimCore: else: log.debug("Couldn't authentificate to %s" % hostname) self.hub.sendPlugin('STATUS', 'offline') - self.hub.sendPlugin('WARNING', 'Authentification failed, check your login and password') + self.hub.sendPlugin('WARNING', \ + 'Authentification failed, check your login and password') return 0 # END connect def mainLoop(self): - """Main Loop : Read the incomming queue to execute commands comming from plugins and process Jabber""" + """Main Loop : Read the incomming queue to execute commands comming from + plugins and process Jabber""" while 1: if not self.hub.queueIn.empty(): ev = self.hub.queueIn.get() @@ -166,6 +178,31 @@ class GajimCore: self.con.disconnect() self.hub.sendPlugin('QUIT', ()) return + #('ASK_CONFIG', section) + elif ev[0] == 'ASK_CONFIG': + if ev[1] == 'accounts': + self.hub.sendPlugin('CONFIG', self.accounts) + else: + self.hub.sendPlugin('CONFIG', \ + self.cfgParser.__getattr__(ev[1])) + #('CONFIG', (section, config)) + elif ev[0] == 'CONFIG': + if ev[1][0] == 'accounts': + #Remove all old accounts + accts = string.split(self.cfgParser.tab\ + ['Profile']['accounts'], ' ') + for a in accts: + del self.cfgParser.tab[a] + #Write all new accounts + accts = ev[1][1].keys() + self.cfgParser.tab['Profile']['accounts'] = \ + string.join(accts) + for a in accts: + self.cfgParser.tab[a] = ev[1][1][a] + else: + self.cfgParser.tab[ev[1][0]] = ev[1][1] + self.cfgParser.writeCfgFile() + #TODO: tell the changes to other plugins #('STATUS', (status, msg, account)) elif ev[0] == 'STATUS': if (ev[1][0] != 'offline') and (self.connected == 0): @@ -198,17 +235,22 @@ class GajimCore: self.con.send(common.jabber.Presence(ev[1], 'unsubscribed')) #('UNSUB', jid) elif ev[0] == 'UNSUB': - delauth = self.cfgParser.Core_delauth - if not delauth: delauth = 1 - delroster = self.cfgParser.Core_delroster - if not delroster: delroster = 1 + if self.cfgParser.Core.has_key('delauth'): + delauth = self.cfgParser.Core['delauth'] + else: + delauth = 1 + if self.cfgParser.Core.has_key('delroster'): + delroster = self.cfgParser.Core['delroster'] + else: + delroster = 1 if delauth: self.con.send(common.jabber.Presence(ev[1], 'unsubscribe')) if delroster: self.con.removeRosterItem(ev[1]) #('UPDUSER', (jid, name, groups)) elif ev[0] == 'UPDUSER': - self.con.updateRosterItem(jid=ev[1][0], name=ev[1][1], groups=ev[1][2]) + self.con.updateRosterItem(jid=ev[1][0], name=ev[1][1], \ + groups=ev[1][2]) elif ev[0] == 'REQ_AGENTS': agents = self.con.requestAgents() self.hub.sendPlugin('AGENTS', agents) @@ -239,7 +281,7 @@ class GajimCore: else: self.hub.sendPlugin('ACC_OK', ev[1]) else: - log.debug("Unknown Command") + log.debug("Unknown Command %s" % ev[0]) elif self.connected == 1: self.con.process(1) time.sleep(0.1) @@ -247,8 +289,9 @@ class GajimCore: # END GajimCore def loadPlugins(gc): - """Load defaults plugins : 'modules' option in section Core in ConfFile and register then to the hub""" - modStr = gc.cfgParser.Core_modules + """Load defaults plugins : plugins in 'modules' option of Core section + in ConfFile and register them to the hub""" + modStr = gc.cfgParser.Core['modules'] if modStr: mods = string.split (modStr, ' ') @@ -266,6 +309,7 @@ def loadPlugins(gc): gc.hub.register(mod, 'AGENT_INFO') gc.hub.register(mod, 'QUIT') gc.hub.register(mod, 'ACC_OK') + gc.hub.register(mod, 'CONFIG') modObj.load() # END loadPLugins @@ -273,6 +317,10 @@ def start(): """Start the Core""" gc = GajimCore() loadPlugins(gc) +################ pr des tests ########### + gc.hub.sendPlugin('NOTIFY', ('aste@lagaule.org', 'online', 'online', 'oleron')) +# gc.hub.sendPlugin('MSG', ('ate@lagaule.org', 'msg')) +######################################### try: gc.mainLoop() except KeyboardInterrupt: |