jabsync/start.py
2006-02-13 22:07:08 +00:00

162 lines
5.3 KiB
Python
Executable file

#!/usr/bin/env python
# vim: set sw=4 ts=4 si et:
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.get()]
print "Selected : " + trans_proto
if trans_proto == "forget":
# TODO: ajouter regles d'exclusion
zero = 0
else:
# TODO: ajouter transport a la config XML
self._commonTransports[hostName] = trans_proto
zero = 0
return self.giveTransport(hostName)
def get(self):
print "jabsync::get\n"
#get Roster
for account in self._accountList:
roster = account.getRoster()
# fusionner les roster
jid_list = roster.getJIDs()
for jid in jid_list:
print "Getting... "
print jid
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 "\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()