jabsync/start.py
2005-08-16 10:12:25 +00:00

148 lines
4.1 KiB
Python
Executable file

#!/usr/bin/env python
import sys
import os
import string
#from qt import *
from jabber import *
import StringIO
#import time
from account import Account
from config import Config
#from re import *
from optparse import OptionParser
#from threading import *
from xml.sax import saxutils
from xml.sax import make_parser
# for prettyprint
from xml.dom.ext import *
from xml.dom.ext.reader.Sax import *
class Answer:
def __init__(self,question,answerlist):
self._answer=None
while not self._answer:
sys.stderr.write(question)
tmp_ans=raw_input()
if tmp_ans in (answerlist): self._answer=tmp_ans
def get(self):
return self._answer;
class JabSync:
def __init__(self):
# init des var
self._commonJIDs={}
self._commonTransports={}
self._configFile=None
self._config=None
self._accountList=None
self._jabservers={}
def parseCmdLine(self):
parser=OptionParser()
parser.add_option("-c","--config",\
action="store", type="string", dest="filename",\
help="Use file a configuration file",metavar="config")
(options,args)=parser.parse_args()
if options.filename:
self._configFile=options.filename
else:
self._configFile=os.path.join(os.path.expanduser("~"),".jabsync")
print "Configuration file: "+self._configFile
def init(self):
self._config=Config()
self._config.loadFromFile(self._configFile)
self._accountList=self._config.getAccounts()
for account in self._accountList:
account.connect()
agents=account.getAgents()
self._commonTransports.update(agents)
for transport in self._commonTransports.keys():
print "Transport: "+transport
def giveTransport(self,hostName):
if self._jabservers.has_key(hostName):
trans_proto=hostName
return trans_proto
else:
if self._commonTransports.has_key(hostName):
trans_proto=self._commonTransports[hostName]
return trans_proto
else:
# TODO: ask user input
is_jabber=Answer(\
"# ERR : is "+hostName+" a jabber server ? [y/n]\n",\
["y","n"]).get()
if is_jabber == "y":
self._jabservers[hostName]=1
else:
what_tp_ans={\
"a" : "aim",\
"i" : "icq",\
"r" : "irc",\
"g" : "gadu",\
"m" : "msn",\
"p" : "public",\
"v" : "private",\
"y" : "yahoo",\
"-" : "forget"}
what_transport=Answer(\
" Select transport type :\n"+\
" [a]im"+\
" [i]cq"+\
" i[r]c):"+\
" [g]adu"+\
" [m]sn"+\
" [p]ublic:"+\
" pri[v]ate:"+\
" [y]ahoo"+\
" [-] Forget JIDs using this host",\
what_tp_ans.keys())
trans_proto=what_tp_ans[what_transport]
if trans_proto == "forget":
# TODO: ajouter regles d'exclusion
zero=0
else:
# TODO: ajouter transport a la config XML
zero=0
return self.giveTransport(hostName)
def get(self):
#get Roster
for account in self._accountList:
roster=account.getRoster()
# fusionner les roster
jid_list=roster.getJIDs()
for jid in jid_list:
transport=jid.getDomain()
trans_proto=self.giveTransport(transport)
if not self._commonJIDs.has_key(trans_proto):
self._commonJIDs[trans_proto]={}
jid_name=roster.getName(jid)
jid_groups=roster.getGroups(jid)
if not jid_name: jid_name=jid.getNode()
if not self._commonJIDs[trans_proto].has_key(jid.getNode()):
self._commonJIDs[trans_proto][jid.getNode()]=(jid_name,jid_groups)
# print " <- "+jid.getNode()+" @ "+trans_proto+" = "+jid_name
print "\x1B[G <- "+jid.getNode()+" @ "+trans_proto+" = "+jid_name
#upload rosters
def set(self):
for account in self._accountList:
account.setRoster(self._commonJIDs)
def stop(self):
for account in self._accountList:
account.disconnect()
if __name__ == "__main__":
jabsync=JabSync()
jabsync.parseCmdLine()
jabsync.init()
jabsync.get()
jabsync.set()
jabsync.stop()