keyboard interrupt

comments
This commit is contained in:
Yann Leboulanger 2004-01-17 15:38:29 +00:00
parent e8b6c78f5e
commit 6b75452557
4 changed files with 85 additions and 11 deletions

View File

@ -131,7 +131,7 @@ class Debug:
# with prefix = chr(27) + '[34m'
# sufix = chr(27) + '[37;1m\n'
#
prefix = 'DEBUG: ',
prefix = color_red + 'DEBUG: ' + color_white,
sufix = '\n',
#
# If you want unix style timestamps,
@ -139,7 +139,7 @@ class Debug:
# 1 before prefix, good when prefix is a string
# 2 after prefix, good when prefix is a color
#
time_stamp = 0,
time_stamp = 2,
#
# flag_show should normaly be of, but can be turned on to get a
# good view of what flags are actually used for calls,

View File

@ -35,6 +35,7 @@ log.setLevel(logging.DEBUG)
CONFPATH = "~/.gajimrc"
class GajimCore:
"""Core"""
def __init__(self):
self.connected = 0
self.cfgParser = common.optparser.OptionsParser(CONFPATH)
@ -43,11 +44,13 @@ class GajimCore:
# END __init__
def messageCB(self, con, msg):
"""Called when we recieve a message"""
self.hub.sendPlugin('MSG', (msg.getFrom().getBasic(), \
msg.getBody()))
# END messageCB
def presenceCB(self, con, prs):
"""Called when we recieve a presence"""
who = str(prs.getFrom())
type = prs.getType()
if type == None: type = 'available'
@ -98,6 +101,7 @@ class GajimCore:
# END presenceCB
def disconnectedCB(self, con):
"""Called when we are disconnected"""
log.debug("disconnectedCB")
if self.connected == 1:
self.connected = 0
@ -106,13 +110,14 @@ class GajimCore:
# END disconenctedCB
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_INIT], 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)
try:
self.con.connect()
@ -121,15 +126,17 @@ class GajimCore:
self.hub.sendPlugin('STATUS', 'offline')
self.hub.sendPlugin('WARNING', "Couldn't connect to %s" % hostname)
return 0
except self.con.socket.gaierror, e:
log.debug("Couldn't connect to %s %s" % (hostname, e))
self.hub.sendPlugin('STATUS', 'offline')
self.hub.sendPlugin('WARNING', "Couldn't connect to %s" % hostname)
return 0
else:
log.debug("Connected to server")
self.con.registerHandler('message', self.messageCB)
self.con.registerHandler('presence', self.presenceCB)
self.con.setDisconnectHandler(self.disconnectedCB)
# self.con.setMessageHandler(self.messageCB)
# self.con.setPresenceHandler(self.presenceCB)
# self.con.setDisconnectHandler(self.disconnectedCB)
#BUG in jabberpy library : if hostname is wrong : "boucle"
if self.con.auth(name, password, ressource):
self.con.requestRoster()
@ -148,6 +155,7 @@ class GajimCore:
# END connect
def mainLoop(self):
"""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()
@ -238,8 +246,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
if modStr :
if modStr:
mods = string.split (modStr, ' ')
for mod in mods:
@ -260,7 +269,15 @@ def loadPlugins(gc):
# END loadPLugins
def start():
"""Start the Core"""
gc = GajimCore()
loadPlugins(gc)
gc.mainLoop()
try:
gc.mainLoop()
except KeyboardInterrupt:
print "Keyboard Interrupt : Bye!"
if self.r.connected:
self.r.con.disconnect()
gc.hub.sendPlugin('QUIT', ())
return 0
# END start

View File

@ -30,6 +30,7 @@ Wbrowser = 0
Waccounts = 0
class user:
"""Informations concerning each users"""
def __init__(self, *args):
if len(args) == 0:
self.jid = ''
@ -57,13 +58,17 @@ class user:
else: raise TypeError, 'bad arguments'
class info_user:
"""Class for user's information window"""
def delete_event(self, widget):
"""close window"""
self.window.destroy()
def add_grp_to_user(self, model, path, iter):
"""Insert user to the group in inter"""
self.user.groups.append(model.get_value(iter, 0))
def on_close(self, widget):
"""Save user's informations and update the roster on the Jabber server"""
for i in self.r.l_contact[self.user.jid]['iter']:
self.r.treestore.remove(i)
self.r.l_contact[self.user.jid]['iter'] = []
@ -75,26 +80,34 @@ class info_user:
self.delete_event(self)
def add_grp(self, model, path, iter, stors):
"""Transfert the iter from stors[0] to stors[1]"""
i = stors[1].append()
stors[1].set(i, 0, stors[0].get_value(iter, 0))
stors[0].remove(iter)
def on_add(self, widget):
"""When Add button is clicked"""
select = self.list1.get_selection()
select.selected_foreach(self.add_grp, (self.store1, self.store2))
def on_remove(self, widget):
"""When Remove button is clicked"""
select = self.list2.get_selection()
select.selected_foreach(self.add_grp, (self.store2, self.store1))
def on_new_key_pressed(self, widget, event):
"""If enter is pressed in new group entry, add the group"""
if event.keyval == gtk.keysyms.Return:
txt = self.entry_new.get_text()
iter = self.store1.append()
self.store1.set(iter, 0, txt)
self.entry_new.set_text('')
return 1
else:
return 0
def init_lists(self):
"""Initialize both available and current listStores"""
#list available
self.store1 = gtk.ListStore(gobject.TYPE_STRING)
for i in self.r.l_group.keys():
@ -127,21 +140,28 @@ class info_user:
self.xml.get_widget('label_id').set_text(user.jid)
self.xml.get_widget('label_resource').set_text(user.resource)
self.xml.get_widget('entry_name').set_text(user.name)
self.xml.get_widget('label_status').set_text(user.show + ' : ' + user.status)
if not user.status:
user.status = ''
self.xml.get_widget('label_status').set_text(user.show + ' : ' + \
user.status)
self.init_lists()
self.xml.signal_connect('gtk_widget_destroy', self.delete_event)
self.xml.signal_connect('on_close_clicked', self.on_close)
self.xml.signal_connect('on_add_clicked', self.on_add)
self.xml.signal_connect('on_remove_clicked', self.on_remove)
self.xml.signal_connect('on_entry_new_key_press_event', self.on_new_key_pressed)
self.xml.signal_connect('on_entry_new_key_press_event', \
self.on_new_key_pressed)
class prefs:
"""Class for Preferences window"""
def delete_event(self, widget):
"""close window"""
self.window.destroy()
def on_color_button_clicked(self, widget):
"""Open a ColorSelectionDialog and change button's color"""
if widget.name == 'colorIn':
color = self.colorIn
da = self.da_in
@ -169,6 +189,7 @@ class prefs:
colorseldlg.destroy()
def write_cfg(self):
"""Save preferences in config File and apply them"""
#Color for incomming messages
colSt = '#'+(hex(self.colorIn.red)+'0')[2:4]\
+(hex(self.colorIn.green)+'0')[2:4]\
@ -235,10 +256,12 @@ class prefs:
self.r.redraw_roster()
def on_ok(self, widget):
"""When Ok button is clicked"""
self.write_cfg()
self.window.destroy()
def __init__(self, roster):
"""Initialize Preference window"""
self.xml = gtk.glade.XML('plugins/gtkgui/gtkgui.glade', 'Prefs')
self.window = self.xml.get_widget("Prefs")
self.r = roster
@ -320,19 +343,25 @@ class prefs:
self.spin_autoxatime.set_value(ti)
self.xml.signal_connect('gtk_widget_destroy', self.delete_event)
self.xml.signal_connect('on_but_col_clicked', self.on_color_button_clicked)
self.xml.signal_connect('on_but_col_clicked', \
self.on_color_button_clicked)
self.xml.signal_connect('on_ok_clicked', self.on_ok)
class away_msg:
"""Class for Away Message Window"""
def delete_event(self, widget):
"""close window"""
self.window.destroy()
self.window.destroy()
def on_ok(self):
"""When Ok button is clicked"""
beg, end = self.txtBuffer.get_bounds()
self.msg = self.txtBuffer.get_text(beg, end, 0)
self.window.destroy()
def run(self):
"""Wait for Ok button to be pressed and return away messsage"""
rep = self.window.run()
if rep == gtk.RESPONSE_OK:
self.on_ok()
@ -347,10 +376,13 @@ class away_msg:
self.xml.signal_connect('gtk_widget_destroy', self.delete_event)
class add:
"""Class for Add user window"""
def delete_event(self, widget):
"""close window"""
self.Wadd.destroy()
def on_subscribe(self, widget):
"""When Subscribe button is clicked"""
who = self.xml.get_widget("entry_who").get_text()
buf = self.xml.get_widget("textview_sub").get_buffer()
start_iter = buf.get_start_iter()
@ -369,7 +401,9 @@ class add:
self.xml.signal_connect('on_button_sub_clicked', self.on_subscribe)
class warning:
"""Class for warning window : print a warning message"""
def delete_event(self, widget):
"""close window"""
self.window.destroy()
def __init__(self, txt):
@ -379,7 +413,9 @@ class warning:
self.xml.signal_connect('gtk_widget_destroy', self.delete_event)
class about:
"""Class for about window"""
def delete_event(self, widget):
"""close window"""
self.Wabout.destroy()
def __init__(self):
@ -388,10 +424,13 @@ class about:
self.xml.signal_connect('gtk_widget_destroy', self.delete_event)
class account_pref:
"""Class for account informations"""
def delete_event(self, widget):
"""close window"""
self.window.destroy()
def init_account(self, infos):
"""Initialize window with defaults values"""
if infos.has_key('name'):
self.xml.get_widget("entry_name").set_text(infos['name'])
if infos.has_key('jid'):
@ -402,6 +441,7 @@ class account_pref:
self.xml.get_widget("entry_ressource").set_text(infos['ressource'])
def on_save_clicked(self, widget):
"""When save button is clicked : Save informations in config file"""
name = self.xml.get_widget("entry_name").get_text()
jid = self.xml.get_widget('entry_jid').get_text()
if (name == ''):
@ -465,25 +505,32 @@ class account_pref:
self.xml.signal_connect('on_save_clicked', self.on_save_clicked)
class accounts:
"""Class for accounts window : lists of accounts"""
def delete_event(self, widget):
"""close window"""
global Waccounts
Waccounts = 0
self.window.destroy()
def init_accounts(self):
"""initialize listStore with existing accounts"""
self.model.clear()
for account in self.accounts:
iter = self.model.append()
self.model.set(iter, 0, account, 1, self.cfgParser.__getattr__("%s" % account+"_hostname"))
def on_row_activated(self, widget):
"""Activate delete and modify buttons when a row is selected"""
self.modButt.set_sensitive(TRUE)
self.delButt.set_sensitive(TRUE)
def on_new_clicked(self, widget):
"""When new button is clicked : open an account information window"""
account_pref(self)
def on_delete_clicked(self, widget):
"""When delete button is clicked :
Remove an account from the listStore and from the config file"""
sel = self.treeview.get_selection()
(mod, iter) = sel.get_selected()
account = self.model.get_value(iter, 0)
@ -496,6 +543,8 @@ class accounts:
self.init_accounts()
def on_modify_clicked(self, widget):
"""When modify button is clicked :
open the account information window for this account"""
infos = {}
sel = self.treeview.get_selection()
(mod, iter) = sel.get_selected()
@ -534,6 +583,7 @@ class accounts:
class confirm:
def delete_event(self, widget):
"""close window"""
self.window.destroy()
def req_usub(self, widget):
@ -554,6 +604,7 @@ class confirm:
class authorize:
def delete_event(self, widget):
"""close window"""
self.window.destroy()
def auth(self, widget):
@ -578,6 +629,7 @@ class authorize:
class agent_reg:
def delete_event(self, widget):
"""close window"""
self.window.destroy()
def draw_table(self):
@ -620,6 +672,7 @@ class agent_reg:
class browser:
def delete_event(self, widget):
"""close window"""
global Wbrowser
Wbrowser = 0
self.window.destroy()
@ -665,6 +718,7 @@ class browser:
class message:
def delete_event(self, widget):
"""close window"""
del self.r.tab_messages[self.user.jid]
self.window.destroy()
@ -1257,6 +1311,8 @@ class plugin:
self.r.cfgParser.parseCfgFile()
if (Waccounts != 0):
Waccounts.init_accounts()
elif ev[0] == 'QUIT':
self.r.on_quit(self)
return 1
def read_sleepy(self):

View File

@ -28,3 +28,4 @@ import common
import core
core.core.start()
print "Core Stopped"