2005-04-18 10:54:47 +02:00
#!/bin/sh
''' : '
2005-05-15 02:00:09 +02:00
exec python - OOt " $0 " $ { 1 + " $@ " }
2005-04-18 10:54:47 +02:00
' ' ' '
## gajim.py
2003-11-30 23:40:24 +01:00
##
2005-12-09 18:15:30 +01:00
## Contributors for this file:
2005-03-16 21:48:56 +01:00
## - Yann Le Boulanger <asterix@lagaule.org>
2005-04-18 13:04:33 +02:00
## - Nikos Kouremenos <kourem@gmail.com>
2005-07-30 16:14:10 +02:00
## - Dimitur Kirov <dkirov@gmail.com>
2005-11-13 02:48:48 +01:00
## - Travis Shirk <travis@pobox.com>
2003-11-30 23:40:24 +01:00
##
2005-12-10 00:30:28 +01:00
## Copyright (C) 2003-2004 Yann Le Boulanger <asterix@lagaule.org>
## Vincent Hanquez <tab@snarc.org>
## Copyright (C) 2005 Yann Le Boulanger <asterix@lagaule.org>
## Vincent Hanquez <tab@snarc.org>
## Nikos Kouremenos <nkour@jabber.org>
## Dimitur Kirov <dkirov@gmail.com>
## Travis Shirk <travis@pobox.com>
## Norman Rasmussen <norman@rasmussen.co.za>
2003-11-30 23:40:24 +01:00
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 2 only.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
2005-11-13 15:55:52 +01:00
2005-05-30 14:53:48 +02:00
import sys
2005-08-16 13:55:29 +02:00
import os
2005-11-10 16:14:17 +01:00
import pygtk
2005-09-07 21:46:09 +02:00
2006-01-06 04:36:07 +01:00
import message_control
2006-01-06 07:59:55 +01:00
from chat_control import ChatControlBase
2005-12-01 18:17:20 +01:00
from common import exceptions
2005-09-21 16:42:29 +02:00
from common import i18n
i18n . init ( )
_ = i18n . _
2005-05-30 14:53:48 +02:00
try :
import gtk
except RuntimeError , msg :
if str ( msg ) == ' could not open display ' :
2005-09-08 10:54:59 +02:00
print >> sys . stderr , _ ( ' Gajim needs Xserver to run. Quiting... ' )
2005-05-30 16:19:14 +02:00
sys . exit ( )
2005-12-01 18:17:20 +01:00
pritext = ' '
2005-09-11 16:20:20 +02:00
if gtk . pygtk_version < ( 2 , 6 , 0 ) :
2005-12-01 18:49:10 +01:00
pritext = _ ( ' Gajim needs PyGTK 2.6 or above ' )
sectext = _ ( ' Gajim needs PyGTK 2.6 or above to run. Quiting... ' )
2005-09-11 16:20:20 +02:00
elif gtk . gtk_version < ( 2 , 6 , 0 ) :
2005-12-01 18:56:31 +01:00
pritext = _ ( ' Gajim needs GTK 2.6 or above ' )
2005-12-01 18:49:10 +01:00
sectext = _ ( ' Gajim needs GTK 2.6 or above to run. Quiting... ' )
2005-09-11 16:20:20 +02:00
2005-09-22 18:30:46 +02:00
try :
import gtk . glade # check if user has libglade (in pygtk and in gtk)
except ImportError :
pritext = _ ( ' GTK+ runtime is missing libglade support ' )
if os . name == ' nt ' :
2005-10-17 17:57:03 +02:00
sectext = _ ( ' Please remove your current GTK+ runtime and install the latest stable version from %s ' ) % ' http://gladewin32.sourceforge.net '
2005-09-22 18:30:46 +02:00
else :
2005-12-27 22:03:02 +01:00
sectext = _ ( ' Please make sure that GTK+ and PyGTK have libglade support in your system. ' )
2005-12-01 18:17:20 +01:00
try :
from common import check_paths
except exceptions . PysqliteNotAvailable , e :
2005-12-01 18:56:31 +01:00
pritext = _ ( ' Gajim needs PySQLite2 to run ' )
2005-12-01 18:17:20 +01:00
sectext = str ( e )
if pritext :
2005-09-22 18:30:46 +02:00
dlg = gtk . MessageDialog ( None ,
gtk . DIALOG_DESTROY_WITH_PARENT | gtk . DIALOG_MODAL ,
gtk . MESSAGE_ERROR , gtk . BUTTONS_OK , message_format = pritext )
dlg . format_secondary_text ( sectext )
dlg . run ( )
dlg . destroy ( )
sys . exit ( )
2005-11-12 22:24:54 +01:00
path = os . getcwd ( )
2005-12-01 18:56:31 +01:00
if ' .svn ' in os . listdir ( path ) or ' _svn ' in os . listdir ( path ) :
2005-11-12 22:24:54 +01:00
# import gtkexcepthook only for those that run svn
# those than run with --verbose run from terminal so no need to care
# about those
import gtkexcepthook
del path
2005-02-28 19:15:48 +01:00
import gobject
2006-02-18 14:14:05 +01:00
# TODO remove this comment
# testing how it works without threads_init
2005-10-03 18:14:41 +02:00
2005-08-12 02:08:04 +02:00
import pango
2005-03-20 18:14:55 +01:00
import sre
2005-04-18 16:05:30 +02:00
import signal
2005-05-14 00:38:48 +02:00
import getopt
2005-06-28 21:03:00 +02:00
import time
2005-12-05 12:13:08 +01:00
import threading
2006-03-10 19:58:28 +01:00
from encodings . punycode import punycode_encode
2005-08-08 16:53:21 +02:00
2005-07-25 16:38:21 +02:00
import gtkgui_helpers
2005-11-11 20:06:48 +01:00
import notify
2005-02-28 19:15:48 +01:00
2005-05-21 18:01:52 +02:00
import common . sleepy
2005-09-09 19:43:39 +02:00
2006-02-03 13:17:34 +01:00
from common . xmpp import idlequeue
from common import nslookup
2005-11-11 20:06:48 +01:00
from common import socks5
2005-05-21 18:01:52 +02:00
from common import gajim
from common import connection
2005-08-10 00:46:13 +02:00
from common import helpers
2005-04-17 00:12:41 +02:00
from common import optparser
2005-04-14 09:05:10 +02:00
2005-05-14 00:38:48 +02:00
profile = ' '
try :
2005-09-07 23:12:30 +02:00
opts , args = getopt . getopt ( sys . argv [ 1 : ] , ' hvp: ' , [ ' help ' , ' verbose ' ,
2005-09-07 21:46:09 +02:00
' profile= ' , ' sm-config-prefix= ' , ' sm-client-id= ' ] )
2005-05-14 00:38:48 +02:00
except getopt . error , msg :
2005-05-28 20:20:27 +02:00
print msg
print ' for help use --help '
sys . exit ( 2 )
2005-05-14 00:38:48 +02:00
for o , a in opts :
2005-05-28 20:20:27 +02:00
if o in ( ' -h ' , ' --help ' ) :
2005-05-30 14:53:48 +02:00
print ' gajim [--help] [--verbose] [--profile name] '
2005-05-30 16:19:14 +02:00
sys . exit ( )
2005-05-28 20:20:27 +02:00
elif o in ( ' -v ' , ' --verbose ' ) :
gajim . verbose = True
elif o in ( ' -p ' , ' --profile ' ) : # gajim --profile name
profile = a
2005-05-14 00:38:48 +02:00
2005-05-20 20:08:24 +02:00
config_filename = os . path . expanduser ( ' ~/.gajim/config ' )
if os . name == ' nt ' :
try :
# Documents and Settings\[User Name]\Application Data\Gajim\logs
config_filename = os . environ [ ' appdata ' ] + ' /Gajim/config '
except KeyError :
2005-05-20 20:13:38 +02:00
# win9x so ./config
config_filename = ' config '
2005-05-20 20:08:24 +02:00
2005-05-14 00:38:48 +02:00
if profile :
2005-05-28 20:20:27 +02:00
config_filename + = ' . %s ' % profile
2005-05-14 00:38:48 +02:00
2005-05-20 20:08:24 +02:00
parser = optparser . OptionsParser ( config_filename )
2005-05-14 00:38:48 +02:00
2005-04-14 19:07:55 +02:00
import roster_window
import systray
import dialogs
2005-11-13 21:25:04 +01:00
import vcard
2005-04-14 19:07:55 +02:00
import config
2005-10-30 10:58:13 +01:00
import disco
2004-06-11 23:36:17 +02:00
2005-04-22 01:20:18 +02:00
GTKGUI_GLADE = ' gtkgui.glade '
2004-06-11 23:36:17 +02:00
2004-03-11 22:14:09 +01:00
2006-02-03 13:17:34 +01:00
class GlibIdleQueue ( idlequeue . IdleQueue ) :
'''
Extends IdleQueue to use glib io_add_wath , instead of select / poll
In another , ` non gui ' implementation of Gajim IdleQueue can be used safetly.
'''
def init_idle ( self ) :
''' this method is called at the end of class constructor.
Creates a dict , which maps file / pipe / sock descriptor to glib event id '''
self . events = { }
if gtk . pygtk_version > = ( 2 , 8 , 0 ) :
# time() is already called in glib, we just get the last value
# overrides IdleQueue.current_time()
self . current_time = lambda : gobject . get_current_time ( )
def add_idle ( self , fd , flags ) :
''' this method is called when we plug a new idle object.
Start listening for events from fd
'''
res = gobject . io_add_watch ( fd , flags , self . process_events ,
priority = gobject . PRIORITY_LOW )
# store the id of the watch, so that we can remove it on unplug
self . events [ fd ] = res
def remove_idle ( self , fd ) :
''' this method is called when we unplug a new idle object.
Stop listening for events from fd
'''
gobject . source_remove ( self . events [ fd ] )
del ( self . events [ fd ] )
def process ( self ) :
self . check_time_events ( )
2005-04-18 16:05:30 +02:00
class Interface :
2004-08-01 18:25:41 +02:00
def handle_event_roster ( self , account , data ) :
2005-04-26 20:45:54 +02:00
#('ROSTER', account, array)
2005-07-22 16:30:35 +02:00
self . roster . fill_contacts_and_groups_dicts ( data , account )
2006-02-19 23:20:45 +01:00
self . roster . add_account_contacts ( account )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' Roster ' , ( account , data ) )
2005-06-24 18:46:45 +02:00
2005-06-07 09:40:15 +02:00
def handle_event_warning ( self , unused , data ) :
#('WARNING', account, (title_text, section_text))
2005-06-10 23:14:16 +02:00
dialogs . WarningDialog ( data [ 0 ] , data [ 1 ] ) . get_response ( )
2005-06-24 18:46:45 +02:00
2005-06-07 09:40:15 +02:00
def handle_event_error ( self , unused , data ) :
#('ERROR', account, (title_text, section_text))
2005-06-10 23:14:16 +02:00
dialogs . ErrorDialog ( data [ 0 ] , data [ 1 ] ) . get_response ( )
2005-06-24 18:46:45 +02:00
def handle_event_information ( self , unused , data ) :
#('INFORMATION', account, (title_text, section_text))
2005-08-14 18:12:36 +02:00
dialogs . InformationDialog ( data [ 0 ] , data [ 1 ] )
2005-09-27 00:29:52 +02:00
2005-10-03 20:19:31 +02:00
def handle_event_ask_new_nick ( self , account , data ) :
#('ASK_NEW_NICK', account, (room_jid, title_text, prompt_text, proposed_nick))
2005-10-02 23:56:38 +02:00
room_jid = data [ 0 ]
title = data [ 1 ]
prompt = data [ 2 ]
2005-10-03 20:19:31 +02:00
proposed_nick = data [ 3 ]
2006-03-15 09:40:19 +01:00
gc_control = self . msg_win_mgr . get_control ( room_jid , account )
2006-01-06 07:59:55 +01:00
if gc_control : # user may close the window before we are here
gc_control . show_change_nick_input_dialog ( title , prompt , proposed_nick )
2005-06-24 18:46:45 +02:00
2005-08-05 15:29:39 +02:00
def handle_event_http_auth ( self , account , data ) :
2005-11-13 02:48:48 +01:00
#('HTTP_AUTH', account, (method, url, transaction_id, iq_obj))
dialog = dialogs . ConfirmationDialog ( _ ( ' HTTP ( %s ) Authorization for %s (id: %s ) ' ) \
% ( data [ 0 ] , data [ 1 ] , data [ 2 ] ) , _ ( ' Do you accept this request? ' ) )
2005-08-05 15:29:39 +02:00
if dialog . get_response ( ) == gtk . RESPONSE_OK :
answer = ' yes '
else :
answer = ' no '
2005-12-07 20:13:26 +01:00
gajim . connections [ account ] . build_http_auth_answer ( data [ 3 ] , answer )
2005-08-05 15:29:39 +02:00
2005-05-10 18:53:28 +02:00
def handle_event_error_answer ( self , account , array ) :
2005-09-19 18:13:45 +02:00
#('ERROR_ANSWER', account, (id, jid_from. errmsg, errcode))
2005-08-03 18:21:23 +02:00
id , jid_from , errmsg , errcode = array
2005-10-27 15:15:03 +02:00
if unicode ( errcode ) in ( ' 403 ' , ' 406 ' ) and id :
2005-08-06 18:18:25 +02:00
# show the error dialog
2005-11-13 16:08:47 +01:00
ft = self . instances [ ' file_transfers ' ]
2005-08-11 22:31:44 +02:00
sid = id
if len ( id ) > 3 and id [ 2 ] == ' _ ' :
sid = id [ 3 : ]
if ft . files_props [ ' s ' ] . has_key ( sid ) :
file_props = ft . files_props [ ' s ' ] [ sid ]
file_props [ ' error ' ] = - 4
self . handle_event_file_request_error ( account ,
( jid_from , file_props ) )
conn = gajim . connections [ account ]
conn . disconnect_transfer ( file_props )
return
2005-08-26 02:52:44 +02:00
elif unicode ( errcode ) == ' 404 ' :
2005-08-06 18:18:25 +02:00
conn = gajim . connections [ account ]
2005-08-11 22:31:44 +02:00
sid = id
if len ( id ) > 3 and id [ 2 ] == ' _ ' :
sid = id [ 3 : ]
if conn . files_props . has_key ( sid ) :
file_props = conn . files_props [ sid ]
self . handle_event_file_send_error ( account ,
( jid_from , file_props ) )
conn . disconnect_transfer ( file_props )
return
2006-03-15 09:40:19 +01:00
ctrl = self . msg_win_mgr . get_control ( jid_from , account )
2006-01-12 00:21:00 +01:00
if ctrl and ctrl . type_id == message_control . TYPE_GC :
ctrl . print_conversation ( ' Error %s : %s ' % ( array [ 2 ] , array [ 1 ] ) )
2005-05-10 18:53:28 +02:00
2005-06-29 14:57:46 +02:00
def handle_event_con_type ( self , account , con_type ) :
# ('CON_TYPE', account, con_type) which can be 'ssl', 'tls', 'tcp'
2005-07-18 23:08:31 +02:00
gajim . con_types [ account ] = con_type
2005-06-29 14:57:46 +02:00
2005-05-12 20:55:01 +02:00
def allow_notif ( self , account ) :
2005-07-18 23:08:31 +02:00
gajim . allow_notifications [ account ] = True
2005-05-12 20:55:01 +02:00
2005-04-06 20:51:54 +02:00
def handle_event_status ( self , account , status ) : # OUR status
2004-06-20 23:58:12 +02:00
#('STATUS', account, status)
2005-10-11 00:46:28 +02:00
model = self . roster . status_combobox . get_model ( )
if status == ' offline ' :
2006-02-04 03:52:36 +01:00
# sensitivity for this menuitem
model [ self . roster . status_message_menuitem_iter ] [ 3 ] = False
2005-07-18 23:08:31 +02:00
gajim . allow_notifications [ account ] = False
2006-02-04 03:52:36 +01:00
2005-10-11 00:46:28 +02:00
else :
gobject . timeout_add ( 30000 , self . allow_notif , account )
2006-02-04 03:52:36 +01:00
# sensitivity for this menuitem
model [ self . roster . status_message_menuitem_iter ] [ 3 ] = True
# Inform all controls for this account of the connection state change
2006-03-15 09:40:19 +01:00
for ctrl in self . msg_win_mgr . get_controls (
2006-02-05 19:42:41 +01:00
type = message_control . TYPE_GC ) :
2006-02-04 03:52:36 +01:00
if ctrl . account == account :
if status == ' offline ' :
ctrl . got_disconnected ( )
else :
# Other code rejoins all GCs, so we don't do it here
if not ctrl . type_id == message_control . TYPE_GC :
ctrl . got_connected ( )
ctrl . parent_win . redraw_tab ( ctrl )
2004-06-20 23:58:12 +02:00
self . roster . on_status_changed ( account , status )
2005-11-07 16:43:47 +01:00
if account in self . show_vcard_when_connect :
jid = gajim . get_jid_from_account ( account )
2005-11-28 17:26:19 +01:00
if not self . instances [ account ] [ ' infos ' ] . has_key ( jid ) :
2005-11-13 16:08:47 +01:00
self . instances [ account ] [ ' infos ' ] [ jid ] = \
2005-11-13 21:25:04 +01:00
vcard . VcardWindow ( jid , account , True )
2005-11-07 16:43:47 +01:00
gajim . connections [ account ] . request_vcard ( jid )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' AccountPresence ' , ( status , account ) )
2004-06-20 23:58:12 +02:00
def handle_event_notify ( self , account , array ) :
2005-09-19 18:13:45 +02:00
#('NOTIFY', account, (jid, status, message, resource, priority, keyID))
2005-07-21 19:00:05 +02:00
# if we're here it means contact changed show
statuss = [ ' offline ' , ' error ' , ' online ' , ' chat ' , ' away ' , ' xa ' , ' dnd ' ,
' invisible ' ]
2005-02-15 00:48:32 +01:00
old_show = 0
2005-04-12 17:30:09 +02:00
new_show = statuss . index ( array [ 1 ] )
2005-03-05 22:02:38 +01:00
jid = array [ 0 ] . split ( ' / ' ) [ 0 ]
2004-10-07 16:43:59 +02:00
keyID = array [ 5 ]
2005-05-29 23:34:01 +02:00
attached_keys = gajim . config . get_per ( ' accounts ' , account ,
' attached_gpg_keys ' ) . split ( )
if jid in attached_keys :
keyID = attached_keys [ attached_keys . index ( jid ) + 1 ]
2004-06-20 23:58:12 +02:00
resource = array [ 3 ]
if not resource :
resource = ' '
priority = array [ 4 ]
2005-04-18 16:05:30 +02:00
if jid . find ( ' @ ' ) < = 0 :
2005-10-11 00:46:28 +02:00
# It must be an agent
2005-03-05 22:02:38 +01:00
ji = jid . replace ( ' @ ' , ' ' )
2004-06-20 23:58:12 +02:00
else :
ji = jid
2005-10-11 00:46:28 +02:00
# Update contact
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
jid_list = gajim . contacts . get_jid_list ( account )
if ji in jid_list :
lcontact = gajim . contacts . get_contacts_from_jid ( account , ji )
2005-11-01 16:28:19 +01:00
contact1 = None
2004-06-20 23:58:12 +02:00
resources = [ ]
2005-11-01 16:28:19 +01:00
for c in lcontact :
2005-11-01 18:14:15 +01:00
resources . append ( c . resource )
2005-11-01 16:28:19 +01:00
if c . resource == resource :
contact1 = c
2004-06-20 23:58:12 +02:00
break
2005-11-01 16:28:19 +01:00
if contact1 :
if contact1 . show in statuss :
old_show = statuss . index ( contact1 . show )
2006-02-24 19:57:10 +01:00
if old_show == new_show and contact1 . status == array [ 2 ] and \
contact1 . priority == priority : # no change
2005-07-19 20:23:27 +02:00
return
2005-02-15 00:48:32 +01:00
else :
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
contact1 = gajim . contacts . get_first_contact_from_jid ( account , ji )
2005-11-01 16:28:19 +01:00
if contact1 . show in statuss :
old_show = statuss . index ( contact1 . show )
if ( resources != [ ' ' ] and ( len ( lcontact ) != 1 or
lcontact [ 0 ] . show != ' offline ' ) ) and jid . find ( ' @ ' ) > 0 :
2005-02-15 00:48:32 +01:00
old_show = 0
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
contact1 = gajim . contacts . copy_contact ( contact1 )
2005-11-01 16:28:19 +01:00
lcontact . append ( contact1 )
contact1 . resource = resource
if contact1 . jid . find ( ' @ ' ) > 0 and len ( lcontact ) == 1 : # It's not an agent
2005-04-12 17:30:09 +02:00
if old_show == 0 and new_show > 1 :
2005-11-01 16:28:19 +01:00
if not contact1 . jid in gajim . newly_added [ account ] :
gajim . newly_added [ account ] . append ( contact1 . jid )
if contact1 . jid in gajim . to_be_removed [ account ] :
gajim . to_be_removed [ account ] . remove ( contact1 . jid )
gobject . timeout_add ( 5000 , self . roster . remove_newly_added ,
contact1 . jid , account )
2006-02-27 00:29:49 +01:00
elif old_show > 1 and new_show == 0 and gajim . connections [ account ] . \
2005-04-14 09:20:14 +02:00
connected > 1 :
2005-11-01 16:28:19 +01:00
if not contact1 . jid in gajim . to_be_removed [ account ] :
gajim . to_be_removed [ account ] . append ( contact1 . jid )
if contact1 . jid in gajim . newly_added [ account ] :
gajim . newly_added [ account ] . remove ( contact1 . jid )
self . roster . draw_contact ( contact1 . jid , account )
2005-10-15 22:49:08 +02:00
if not gajim . awaiting_events [ account ] . has_key ( jid ) :
2005-11-01 16:28:19 +01:00
gobject . timeout_add ( 5000 , self . roster . really_remove_contact ,
contact1 , account )
contact1 . show = array [ 1 ]
contact1 . status = array [ 2 ]
contact1 . priority = priority
contact1 . keyID = keyID
2006-02-22 15:31:01 +01:00
if contact1 . jid not in gajim . newly_added [ account ] :
contact1 . last_status_time = time . localtime ( )
2005-04-18 16:05:30 +02:00
if jid . find ( ' @ ' ) < = 0 :
2005-10-11 00:46:28 +02:00
# It must be an agent
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
if ji in jid_list :
2005-10-11 00:46:28 +02:00
# Update existing iter
2005-04-23 02:37:51 +02:00
self . roster . draw_contact ( ji , account )
2005-09-13 20:46:21 +02:00
elif jid == gajim . get_jid_from_account ( account ) :
2005-10-11 00:46:28 +02:00
# It's another of our resources. We don't need to see that!
2005-09-13 20:46:21 +02:00
return
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
elif ji in jid_list :
2005-10-11 00:46:28 +02:00
# It isn't an agent
2005-10-20 12:21:51 +02:00
# reset chatstate if needed:
2005-11-01 16:28:19 +01:00
# (when contact signs out or has errors)
2005-10-20 12:21:51 +02:00
if array [ 1 ] in ( ' offline ' , ' error ' ) :
2006-03-03 15:41:55 +01:00
contact1 . our_chatstate = contact1 . chatstate = contact1 . composing_jep = None
2005-11-01 16:28:19 +01:00
self . roster . chg_contact_status ( contact1 , array [ 1 ] , array [ 2 ] , account )
2005-10-11 00:46:28 +02:00
# play sound
2005-05-07 17:40:58 +02:00
if old_show < 2 and new_show > 1 :
if gajim . config . get_per ( ' soundevents ' , ' contact_connected ' ,
2005-12-15 12:01:50 +01:00
' enabled ' ) and gajim . allow_notifications [ account ] :
2005-08-10 00:46:13 +02:00
helpers . play_sound ( ' contact_connected ' )
2006-03-10 18:56:03 +01:00
if not gajim . awaiting_events [ account ] . has_key ( jid ) and \
2005-05-21 15:46:23 +02:00
gajim . config . get ( ' notify_on_signin ' ) and \
2005-07-18 23:08:31 +02:00
gajim . allow_notifications [ account ] :
2005-04-19 01:55:13 +02:00
show_notification = False
# check OUR status and if we allow notifications for that status
if gajim . config . get ( ' autopopupaway ' ) : # always notify
show_notification = True
2006-01-12 23:48:49 +01:00
elif gajim . connections [ account ] . connected in ( 2 , 3 ) :
# we're online or chat
2005-04-19 01:55:13 +02:00
show_notification = True
if show_notification :
2006-02-08 01:55:16 +01:00
transport_name = gajim . get_transport_name_from_jid ( jid )
2006-02-08 03:56:58 +01:00
img = None
if transport_name :
img = os . path . join ( gajim . DATA_DIR , ' iconsets ' ,
' transports ' , transport_name , ' 48x48 ' ,
' online.png ' )
if not img or not os . path . isfile ( img ) :
2006-02-08 01:55:16 +01:00
iconset = gajim . config . get ( ' iconset ' )
2006-02-08 03:56:58 +01:00
img = os . path . join ( gajim . DATA_DIR , ' iconsets ' ,
iconset , ' 48x48 ' , ' online.png ' )
2006-02-08 01:55:16 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img ,
jid = jid , suffix = ' _notif_size_colored.png ' )
notify . notify ( _ ( ' Contact Signed In ' ) , jid , account ,
path_to_image = path )
2006-01-12 23:48:49 +01:00
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' ContactPresence ' ,
2005-08-08 16:43:50 +02:00
( account , array ) )
2005-05-11 17:21:13 +02:00
elif old_show > 1 and new_show < 2 :
if gajim . config . get_per ( ' soundevents ' , ' contact_disconnected ' ,
2005-10-31 21:54:40 +01:00
' enabled ' ) :
2005-08-10 00:46:13 +02:00
helpers . play_sound ( ' contact_disconnected ' )
2006-03-10 18:56:03 +01:00
if not gajim . awaiting_events [ account ] . has_key ( jid ) and \
2005-05-21 15:46:23 +02:00
gajim . config . get ( ' notify_on_signout ' ) :
2005-04-19 01:55:13 +02:00
show_notification = False
# check OUR status and if we allow notifications for that status
if gajim . config . get ( ' autopopupaway ' ) : # always notify
show_notification = True
2006-02-08 01:55:16 +01:00
elif gajim . connections [ account ] . connected in ( 2 , 3 ) :
# we're online or chat
2005-04-19 01:55:13 +02:00
show_notification = True
if show_notification :
2006-02-08 01:55:16 +01:00
transport_name = gajim . get_transport_name_from_jid ( jid )
2006-02-08 03:27:14 +01:00
img = None
if transport_name :
img = os . path . join ( gajim . DATA_DIR , ' iconsets ' ,
' transports ' , transport_name , ' 48x48 ' ,
' offline.png ' )
if not img or not os . path . isfile ( img ) :
2006-02-08 01:55:16 +01:00
iconset = gajim . config . get ( ' iconset ' )
2006-02-08 03:27:14 +01:00
img = os . path . join ( gajim . DATA_DIR , ' iconsets ' ,
iconset , ' 48x48 ' , ' offline.png ' )
2006-02-08 01:55:16 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img ,
jid = jid , suffix = ' _notif_size_bw.png ' )
notify . notify ( _ ( ' Contact Signed Out ' ) , jid , account ,
path_to_image = path )
2006-01-20 18:40:45 +01:00
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' ContactAbsence ' , ( account , array ) )
# FIXME: stop non active file transfers
2005-10-04 13:33:57 +02:00
else :
2005-10-04 14:26:09 +02:00
# FIXME: Msn transport (CMSN1.2.1 and PyMSN0.10) doesn't follow the JEP
# remove in 2007
# It's maybe a GC_NOTIFY (specialy for MSN gc)
2005-10-04 13:33:57 +02:00
self . handle_event_gc_notify ( account , ( jid , array [ 1 ] , array [ 2 ] , array [ 3 ] , None , None , None , None , None , None , None ) )
2004-06-21 02:12:25 +02:00
2004-06-20 23:58:12 +02:00
def handle_event_msg ( self , account , array ) :
2005-11-22 01:28:36 +01:00
# ('MSG', account, (jid, msg, time, encrypted, msg_type, subject,
# chatstate))
2005-07-22 02:34:08 +02:00
jid = gajim . get_jid_without_resource ( array [ 0 ] )
2005-10-07 16:01:35 +02:00
resource = gajim . get_resource_from_jid ( array [ 0 ] )
2006-03-15 09:40:19 +01:00
fjid = jid + ' / ' + resource
2005-07-16 11:33:43 +02:00
msg_type = array [ 4 ]
2005-07-21 16:56:39 +02:00
chatstate = array [ 6 ]
2006-03-01 19:16:54 +01:00
msg_id = array [ 7 ]
2006-03-03 15:41:55 +01:00
composing_jep = array [ 8 ]
2005-04-18 16:05:30 +02:00
if jid . find ( ' @ ' ) < = 0 :
2005-03-05 22:02:38 +01:00
jid = jid . replace ( ' @ ' , ' ' )
2005-06-07 18:52:24 +02:00
2005-09-23 23:01:42 +02:00
show_notification = False
if gajim . config . get ( ' notify_on_new_message ' ) :
# check OUR status and if we allow notifications for that status
if gajim . config . get ( ' autopopupaway ' ) : # always show notification
show_notification = True
elif gajim . connections [ account ] . connected in ( 2 , 3 ) : # we're online or chat
show_notification = True
2006-03-15 09:40:19 +01:00
chat_control = self . msg_win_mgr . get_control ( jid , account )
2006-01-14 21:40:48 +01:00
if chat_control and chat_control . type_id == message_control . TYPE_GC :
# it's a Private Message
2005-10-07 16:01:35 +02:00
fjid = array [ 0 ]
2006-03-18 10:22:13 +01:00
room_jid , nick = gajim . get_room_and_nick_from_fjid ( fjid )
2006-03-15 09:40:19 +01:00
if not self . msg_win_mgr . has_window ( fjid , account ) and \
2005-10-15 22:49:08 +02:00
not gajim . awaiting_events [ account ] . has_key ( fjid ) :
2005-09-23 23:01:42 +02:00
if show_notification :
2006-03-18 10:22:13 +01:00
room_name , t = gajim . get_room_name_and_server_from_room_jid (
room_jid )
txt = _ ( ' %(nickname)s in room %(room_name)s has sent you a new '
' message. ' ) % { ' nickname ' : nick , ' room_name ' : room_name }
2006-02-08 01:55:16 +01:00
img = os . path . join ( gajim . DATA_DIR , ' pixmaps ' , ' events ' ,
' priv_msg_recv.png ' )
2006-01-22 00:15:35 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img )
2006-01-20 18:40:45 +01:00
notify . notify ( _ ( ' New Private Message ' ) , fjid , account , ' pm ' , path_to_image = path , text = txt )
2005-09-23 23:01:42 +02:00
2006-01-05 06:51:28 +01:00
chat_control . on_private_message ( nick , array [ 1 ] , array [ 2 ] )
2005-06-07 18:52:24 +02:00
return
2006-01-25 03:43:55 +01:00
# FIXME: This should happen first
2005-04-14 09:05:10 +02:00
if gajim . config . get ( ' ignore_unknown_contacts ' ) and \
Merged revisions 5017-5020,5022-5029 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r5017 | asterix | 2006-01-06 01:55:51 -0700 (Fri, 06 Jan 2006) | 2 lines
use escape for pango markup
........
r5018 | asterix | 2006-01-06 02:21:39 -0700 (Fri, 06 Jan 2006) | 2 lines
missing new contacts function
........
r5019 | asterix | 2006-01-06 11:03:07 -0700 (Fri, 06 Jan 2006) | 2 lines
handle the click on toggle_gpg_encryption menuitem
........
r5020 | asterix | 2006-01-06 11:14:14 -0700 (Fri, 06 Jan 2006) | 2 lines
use the saved size even if a chat window is already opened
........
r5022 | asterix | 2006-01-07 03:43:47 -0700 (Sat, 07 Jan 2006) | 2 lines
we can now resume filetransfert
........
r5023 | asterix | 2006-01-07 03:56:31 -0700 (Sat, 07 Jan 2006) | 2 lines
[Knuckles] Google E-Mail Notification
........
r5024 | asterix | 2006-01-07 04:02:16 -0700 (Sat, 07 Jan 2006) | 2 lines
better string
........
r5025 | asterix | 2006-01-07 04:14:32 -0700 (Sat, 07 Jan 2006) | 2 lines
fix a TB
........
r5026 | asterix | 2006-01-07 05:36:55 -0700 (Sat, 07 Jan 2006) | 2 lines
we can now drag a file on a contact in the roster to send him a file
........
r5027 | asterix | 2006-01-07 06:26:28 -0700 (Sat, 07 Jan 2006) | 2 lines
contact.groups is always a list, even if emtpy
........
r5028 | asterix | 2006-01-07 06:54:30 -0700 (Sat, 07 Jan 2006) | 2 lines
make all buttons insensitive on a category row in disco
........
r5029 | asterix | 2006-01-07 07:19:25 -0700 (Sat, 07 Jan 2006) | 2 lines
auto open groupchat configuration window when we create a new room
........
2006-01-07 18:25:35 +01:00
not gajim . contacts . get_contact ( account , jid ) :
2005-03-11 00:45:10 +01:00
return
2005-04-06 20:51:54 +02:00
2006-03-15 09:40:19 +01:00
# Look for a chat control that has the given resource, or default to one
# without resource
ctrl = self . msg_win_mgr . get_control ( fjid , account )
if ctrl :
chat_control = ctrl
2005-09-08 04:05:46 +02:00
# Handle chat states
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
contact = gajim . contacts . get_first_contact_from_jid ( account , jid )
2006-03-05 10:46:50 +01:00
if contact :
contact . composing_jep = composing_jep
2006-01-05 06:51:28 +01:00
if chat_control and chat_control . type_id == message_control . TYPE_CHAT :
2006-03-01 19:16:54 +01:00
if chatstate is not None : # he or she sent us reply, so he supports jep85 or jep22
2005-11-22 01:28:36 +01:00
contact . chatstate = chatstate
if contact . our_chatstate == ' ask ' : # we were jep85 disco?
contact . our_chatstate = ' active ' # no more
2005-07-21 16:56:39 +02:00
2006-01-25 03:43:55 +01:00
chat_control . handle_incoming_chatstate ( )
2005-09-20 04:24:25 +02:00
elif contact . chatstate != ' active ' :
2006-03-03 15:41:55 +01:00
# got no valid jep85 answer, peer does not support it
2005-07-22 02:34:08 +02:00
contact . chatstate = False
2005-11-22 01:28:36 +01:00
elif contact and chatstate == ' active ' :
2005-09-08 04:05:46 +02:00
# Brand new message, incoming.
2005-11-22 01:28:36 +01:00
contact . our_chatstate = chatstate
contact . chatstate = chatstate
2006-03-01 19:16:54 +01:00
if msg_id : # Do not overwrite an existing msg_id with None
contact . msg_id = msg_id
2005-07-19 21:10:03 +02:00
2005-07-22 02:34:08 +02:00
if not array [ 1 ] : #empty message text
2005-07-19 21:10:03 +02:00
return
2005-04-06 20:51:54 +02:00
first = False
2006-03-15 09:40:19 +01:00
if not chat_control and not gajim . awaiting_events [ account ] . has_key ( jid ) :
2005-04-06 20:51:54 +02:00
first = True
2005-04-17 23:31:18 +02:00
if gajim . config . get ( ' notify_on_new_message ' ) :
2005-04-19 01:55:13 +02:00
show_notification = False
# check OUR status and if we allow notifications for that status
if gajim . config . get ( ' autopopupaway ' ) : # always show notification
show_notification = True
2005-05-11 19:14:10 +02:00
elif gajim . connections [ account ] . connected in ( 2 , 3 ) : # we're online or chat
2005-04-19 01:55:13 +02:00
show_notification = True
if show_notification :
2006-01-20 18:50:01 +01:00
txt = _ ( ' %s has sent you a new message. ' ) % gajim . get_name_from_jid ( account , jid )
2005-07-16 11:33:43 +02:00
if msg_type == ' normal ' : # single message
2006-02-08 01:55:16 +01:00
img = os . path . join ( gajim . DATA_DIR , ' pixmaps ' , ' events ' ,
' single_msg_recv.png ' )
2006-01-22 00:15:35 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img )
2006-01-20 18:40:45 +01:00
notify . notify ( _ ( ' New Single Message ' ) , jid , account , msg_type ,
path_to_image = path , text = txt )
2005-07-16 11:33:43 +02:00
else : # chat message
2006-02-08 01:55:16 +01:00
img = os . path . join ( gajim . DATA_DIR , ' pixmaps ' , ' events ' ,
' chat_msg_recv.png ' )
2006-01-22 00:15:35 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img )
2006-01-20 18:40:45 +01:00
notify . notify ( _ ( ' New Message ' ) , jid , account , msg_type ,
path_to_image = path , text = txt )
2005-07-16 11:33:43 +02:00
2005-07-07 17:41:03 +02:00
# array : (contact, msg, time, encrypted, msg_type, subject)
2005-07-05 23:35:37 +02:00
self . roster . on_message ( jid , array [ 1 ] , array [ 2 ] , account , array [ 3 ] ,
2005-10-07 16:01:35 +02:00
msg_type , array [ 5 ] , resource )
2005-06-03 20:40:43 +02:00
if gajim . config . get_per ( ' soundevents ' , ' first_message_received ' ,
2005-04-16 16:50:26 +02:00
' enabled ' ) and first :
2005-08-10 00:46:13 +02:00
helpers . play_sound ( ' first_message_received ' )
2005-06-03 20:40:43 +02:00
if gajim . config . get_per ( ' soundevents ' , ' next_message_received ' ,
2005-04-16 16:50:26 +02:00
' enabled ' ) and not first :
2005-08-10 00:46:13 +02:00
helpers . play_sound ( ' next_message_received ' )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' NewMessage ' , ( account , array ) )
2005-07-19 21:10:03 +02:00
2004-07-08 21:46:24 +02:00
def handle_event_msgerror ( self , account , array ) :
2005-04-26 00:22:23 +02:00
#('MSGERROR', account, (jid, error_code, error_msg, msg, time))
2005-06-13 00:45:41 +02:00
fjid = array [ 0 ]
2005-06-29 22:50:30 +02:00
jids = fjid . split ( ' / ' , 1 )
2005-06-13 00:45:41 +02:00
jid = jids [ 0 ]
2006-03-15 09:40:19 +01:00
gcs = self . msg_win_mgr . get_controls ( message_control . TYPE_GC )
2006-01-06 07:59:55 +01:00
for gc_control in gcs :
if jid == gc_control . contact . jid :
if len ( jids ) > 1 : # it's a pm
nick = jids [ 1 ]
2006-03-15 09:40:19 +01:00
if not self . msg_win_mgr . get_control ( fjid , account ) :
2006-01-06 07:59:55 +01:00
tv = gc_control . list_treeview
model = tv . get_model ( )
i = gc_control . get_contact_iter ( nick )
if i :
show = model [ i ] [ 3 ]
else :
show = ' offline '
gc_c = gajim . contacts . create_gc_contact ( room_jid = jid ,
name = nick , show = show )
c = gajim . contacts . contact_from_gc_contct ( c )
self . roster . new_chat ( c , account , private_chat = True )
2006-03-15 09:40:19 +01:00
ctrl = self . msg_win_mgr . get_control ( fjid , account )
2006-01-12 00:21:00 +01:00
ctrl . print_conversation ( ' Error %s : %s ' % ( array [ 1 ] , array [ 2 ] ) ,
2006-01-06 07:59:55 +01:00
' status ' )
return
gc_control . print_conversation ( ' Error %s : %s ' % ( array [ 1 ] , array [ 2 ] ) )
if gc_control . parent_win . get_active_jid ( ) == jid :
gc_control . set_subject ( gc_control . subject )
2005-06-13 00:45:41 +02:00
return
2006-01-06 07:59:55 +01:00
2005-04-18 16:05:30 +02:00
if jid . find ( ' @ ' ) < = 0 :
2005-03-05 22:02:38 +01:00
jid = jid . replace ( ' @ ' , ' ' )
2005-04-14 11:38:08 +02:00
self . roster . on_message ( jid , _ ( ' error while sending ' ) + \
2005-09-15 19:33:02 +02:00
' \" %s \" ( %s ) ' % ( array [ 3 ] , array [ 2 ] ) , array [ 4 ] , account , \
msg_type = ' error ' )
2004-07-08 21:46:24 +02:00
2005-02-15 01:10:10 +01:00
def handle_event_msgsent ( self , account , array ) :
2005-07-20 13:39:01 +02:00
#('MSGSENT', account, (jid, msg, keyID))
2005-07-21 17:23:18 +02:00
msg = array [ 1 ]
# do not play sound when standalone chatstate message (eg no msg)
if msg and gajim . config . get_per ( ' soundevents ' , ' message_sent ' , ' enabled ' ) :
2005-08-10 00:46:13 +02:00
helpers . play_sound ( ' message_sent ' )
2005-02-15 01:10:10 +01:00
2004-06-20 23:58:12 +02:00
def handle_event_subscribe ( self , account , array ) :
#('SUBSCRIBE', account, (jid, text))
2005-10-20 13:17:17 +02:00
dialogs . SubscriptionRequestWindow ( array [ 0 ] , array [ 1 ] , account )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' Subscribe ' , ( account , array ) )
2004-06-20 23:58:12 +02:00
def handle_event_subscribed ( self , account , array ) :
2005-02-04 08:58:40 +01:00
#('SUBSCRIBED', account, (jid, resource))
2004-06-20 23:58:12 +02:00
jid = array [ 0 ]
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
if jid in gajim . contacts . get_jid_list ( account ) :
c = gajim . contacts . get_first_contact_from_jid ( account , jid )
2005-07-22 02:01:05 +02:00
c . resource = array [ 1 ]
self . roster . remove_contact ( c , account )
2006-01-19 22:55:01 +01:00
if _ ( ' Not in Roster ' ) in c . groups :
c . groups . remove ( _ ( ' Not in Roster ' ) )
2005-07-22 02:01:05 +02:00
self . roster . add_contact_to_roster ( c . jid , account )
2004-06-20 23:58:12 +02:00
else :
2005-05-29 23:34:01 +02:00
keyID = ' '
attached_keys = gajim . config . get_per ( ' accounts ' , account ,
' attached_gpg_keys ' ) . split ( )
if jid in attached_keys :
keyID = attached_keys [ attached_keys . index ( jid ) + 1 ]
2005-10-12 22:00:59 +02:00
name = jid . split ( ' @ ' , 1 ) [ 0 ]
name = name . split ( ' % ' , 1 ) [ 0 ]
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
contact1 = gajim . contacts . create_contact ( jid = jid , name = name ,
2006-02-07 20:24:19 +01:00
groups = [ ] , show = ' online ' , status = ' online ' ,
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
ask = ' to ' , resource = array [ 1 ] , keyID = keyID )
gajim . contacts . add_contact ( account , contact1 )
2005-07-07 18:38:36 +02:00
self . roster . add_contact_to_roster ( jid , account )
2005-06-10 23:14:16 +02:00
dialogs . InformationDialog ( _ ( ' Authorization accepted ' ) ,
2005-11-12 15:15:32 +01:00
_ ( ' The contact " %s " has authorized you to see his or her status. ' )
2005-08-14 18:12:36 +02:00
% jid )
2006-01-13 06:07:09 +01:00
gajim . connections [ account ] . ack_subscribed ( jid )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' Subscribed ' , ( account , array ) )
2004-06-20 23:58:12 +02:00
def handle_event_unsubscribed ( self , account , jid ) :
2005-06-15 01:31:13 +02:00
dialogs . InformationDialog ( _ ( ' Contact " %s " removed subscription from you ' ) % jid ,
2005-11-12 15:20:20 +01:00
_ ( ' You will always see him or her as offline. ' ) )
2006-01-13 06:07:09 +01:00
# FIXME: Per RFC 3921, we can "deny" ack as well, but the GUI does not show deny
gajim . connections [ account ] . ack_unsubscribed ( jid )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' Unsubscribed ' , ( account , jid ) )
2005-10-30 10:58:13 +01:00
def handle_event_agent_info_error ( self , account , agent ) :
#('AGENT_ERROR_INFO', account, (agent))
try :
gajim . connections [ account ] . services_cache . agent_info_error ( agent )
except AttributeError :
return
def handle_event_agent_items_error ( self , account , agent ) :
#('AGENT_ERROR_INFO', account, (agent))
try :
gajim . connections [ account ] . services_cache . agent_items_error ( agent )
except AttributeError :
return
2004-09-06 16:55:10 +02:00
2005-05-08 22:56:11 +02:00
def handle_event_register_agent_info ( self , account , array ) :
2005-10-05 12:13:31 +02:00
#('REGISTER_AGENT_INFO', account, (agent, infos, is_form))
2005-05-08 22:56:11 +02:00
if array [ 1 ] . has_key ( ' instructions ' ) :
2005-10-20 13:17:17 +02:00
config . ServiceRegistrationWindow ( array [ 0 ] , array [ 1 ] , account ,
2005-10-05 12:13:31 +02:00
array [ 2 ] )
2005-05-08 22:56:11 +02:00
else :
2005-06-10 23:14:16 +02:00
dialogs . ErrorDialog ( _ ( ' Contact with " %s " cannot be established ' \
2005-06-07 03:10:24 +02:00
% array [ 0 ] ) , _ ( ' Check your connection or try again later. ' ) ) . get_response ( )
2005-05-08 22:56:11 +02:00
2005-03-27 12:31:26 +02:00
def handle_event_agent_info_items ( self , account , array ) :
2005-04-23 23:54:12 +02:00
#('AGENT_INFO_ITEMS', account, (agent, node, items))
2005-10-30 10:58:13 +01:00
try :
gajim . connections [ account ] . services_cache . agent_items ( array [ 0 ] ,
array [ 1 ] , array [ 2 ] )
except AttributeError :
return
2005-03-27 12:31:26 +02:00
def handle_event_agent_info_info ( self , account , array ) :
2005-10-30 10:58:13 +01:00
#('AGENT_INFO_INFO', account, (agent, node, identities, features, data))
try :
gajim . connections [ account ] . services_cache . agent_info ( array [ 0 ] ,
array [ 1 ] , array [ 2 ] , array [ 3 ] , array [ 4 ] )
except AttributeError :
return
2005-03-27 12:31:26 +02:00
2004-06-20 23:58:12 +02:00
def handle_event_acc_ok ( self , account , array ) :
2005-11-04 22:27:14 +01:00
#('ACC_OK', account, (config))
2005-11-13 16:08:47 +01:00
if self . instances . has_key ( ' account_creation_wizard ' ) :
self . instances [ ' account_creation_wizard ' ] . acc_is_ok ( array )
2005-11-04 22:27:14 +01:00
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' NewAccount ' , ( account , array ) )
2004-06-20 23:58:12 +02:00
2005-11-04 22:27:14 +01:00
def handle_event_acc_not_ok ( self , account , array ) :
#('ACC_NOT_OK', account, (reason))
2005-11-13 16:08:47 +01:00
if self . instances . has_key ( ' account_creation_wizard ' ) :
self . instances [ ' account_creation_wizard ' ] . acc_is_not_ok ( array )
2005-11-04 22:27:14 +01:00
2004-06-20 23:58:12 +02:00
def handle_event_quit ( self , p1 , p2 ) :
2005-10-20 13:17:17 +02:00
self . roster . quit_gtkgui_interface ( )
2005-04-12 17:30:09 +02:00
2004-06-21 02:12:25 +02:00
def handle_event_myvcard ( self , account , array ) :
2004-06-20 23:58:12 +02:00
nick = ' '
2004-06-21 02:12:25 +02:00
if array . has_key ( ' NICKNAME ' ) :
nick = array [ ' NICKNAME ' ]
2005-06-30 08:16:32 +02:00
if nick :
2005-07-18 23:08:31 +02:00
gajim . nicks [ account ] = nick
2005-11-13 16:08:47 +01:00
if self . instances [ account ] [ ' infos ' ] . has_key ( array [ ' jid ' ] ) :
win = self . instances [ account ] [ ' infos ' ] [ array [ ' jid ' ] ]
2005-11-07 16:43:47 +01:00
win . set_values ( array )
if account in self . show_vcard_when_connect :
win . xml . get_widget ( ' information_notebook ' ) . set_current_page ( - 1 )
win . xml . get_widget ( ' set_avatar_button ' ) . clicked ( )
self . show_vcard_when_connect . remove ( account )
2004-06-20 23:58:12 +02:00
2005-10-03 18:14:41 +02:00
def handle_event_vcard ( self , account , vcard ) :
2005-10-12 22:10:42 +02:00
# ('VCARD', account, data)
2005-10-03 18:14:41 +02:00
''' vcard holds the vcard data '''
jid = vcard [ ' jid ' ]
2005-11-28 17:26:19 +01:00
resource = ' '
if vcard . has_key ( ' resource ' ) :
resource = vcard [ ' resource ' ]
2005-10-03 18:14:41 +02:00
# vcard window
2005-06-26 21:59:34 +02:00
win = None
2005-11-13 16:08:47 +01:00
if self . instances [ account ] [ ' infos ' ] . has_key ( jid ) :
win = self . instances [ account ] [ ' infos ' ] [ jid ]
2005-11-28 17:26:19 +01:00
elif resource and self . instances [ account ] [ ' infos ' ] . has_key (
jid + ' / ' + resource ) :
2005-11-13 16:08:47 +01:00
win = self . instances [ account ] [ ' infos ' ] [ jid + ' / ' + resource ]
2005-06-26 21:40:57 +02:00
if win :
2005-10-30 22:39:09 +01:00
win . set_values ( vcard )
2005-07-20 15:13:52 +02:00
2005-10-03 18:14:41 +02:00
# show avatar in chat
2005-07-20 15:13:52 +02:00
win = None
2006-01-12 00:21:00 +01:00
ctrl = None
2006-03-15 09:40:19 +01:00
if resource and self . msg_win_mgr . has_window (
2006-03-09 19:41:57 +01:00
jid + ' / ' + resource , account ) :
2006-03-15 09:40:19 +01:00
win = self . msg_win_mgr . get_window ( jid + ' / ' + resource ,
2006-03-09 19:41:57 +01:00
account )
ctrl = win . get_control ( jid + ' / ' + resource , account )
2006-03-15 09:40:19 +01:00
elif self . msg_win_mgr . has_window ( jid , account ) :
win = self . msg_win_mgr . get_window ( jid , account )
2006-01-25 03:43:55 +01:00
ctrl = win . get_control ( jid , account )
2006-01-12 00:21:00 +01:00
if win and ctrl . type_id != message_control . TYPE_GC :
ctrl . show_avatar ( )
2006-01-09 00:14:50 +01:00
2006-03-13 14:25:51 +01:00
# Show avatar in roster or gc_roster
2006-03-15 09:40:19 +01:00
gc_ctrl = self . msg_win_mgr . get_control ( jid , account )
2006-03-13 20:00:05 +01:00
if gc_ctrl and gc_ctrl . type_id == message_control . TYPE_GC :
2006-03-13 14:25:51 +01:00
gc_ctrl . draw_avatar ( resource )
else :
self . roster . draw_avatar ( jid , account )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' VcardInfo ' , ( account , vcard ) )
2004-06-20 23:58:12 +02:00
2006-02-22 15:31:01 +01:00
def handle_event_last_status_time ( self , account , array ) :
# ('LAST_STATUS_TIME', account, (jid, resource, seconds, status))
win = None
if self . instances [ account ] [ ' infos ' ] . has_key ( array [ 0 ] ) :
win = self . instances [ account ] [ ' infos ' ] [ array [ 0 ] ]
elif self . instances [ account ] [ ' infos ' ] . has_key ( array [ 0 ] + ' / ' + array [ 1 ] ) :
win = self . instances [ account ] [ ' infos ' ] [ array [ 0 ] + ' / ' + array [ 1 ] ]
if win :
c = gajim . contacts . get_contact ( account , array [ 0 ] , array [ 1 ] )
# c is a list when no resource is given. it probably means that contact
# is offline, so only on Contact instance
if isinstance ( c , list ) :
c = c [ 0 ]
2006-03-01 21:20:00 +01:00
if c : # c can be none if it's a gc contact
c . last_status_time = time . localtime ( time . time ( ) - array [ 2 ] )
if array [ 3 ] :
c . status = array [ 3 ]
win . set_last_status_time ( )
2006-02-22 15:31:01 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' LastStatusTime ' , ( account , array ) )
2005-04-06 22:18:55 +02:00
def handle_event_os_info ( self , account , array ) :
2005-07-20 14:48:11 +02:00
win = None
2005-11-13 16:08:47 +01:00
if self . instances [ account ] [ ' infos ' ] . has_key ( array [ 0 ] ) :
win = self . instances [ account ] [ ' infos ' ] [ array [ 0 ] ]
elif self . instances [ account ] [ ' infos ' ] . has_key ( array [ 0 ] + ' / ' + array [ 1 ] ) :
win = self . instances [ account ] [ ' infos ' ] [ array [ 0 ] + ' / ' + array [ 1 ] ]
2005-07-20 14:48:11 +02:00
if win :
win . set_os_info ( array [ 1 ] , array [ 2 ] , array [ 3 ] )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' OsInfo ' , ( account , array ) )
2005-04-06 22:18:55 +02:00
2005-09-19 18:13:45 +02:00
def handle_event_gc_notify ( self , account , array ) :
2005-12-11 12:22:18 +01:00
#('GC_NOTIFY', account, (room_jid, show, status, nick,
2005-09-19 18:13:45 +02:00
# role, affiliation, jid, reason, actor, statusCode, newNick))
2005-12-11 12:22:18 +01:00
nick = array [ 3 ]
if not nick :
return
room_jid = array [ 0 ]
fjid = room_jid + ' / ' + nick
show = array [ 1 ]
status = array [ 2 ]
# print status in chat window and update status/GPG image
2006-03-15 09:40:19 +01:00
if self . msg_win_mgr . has_window ( fjid , account ) :
ctrl = self . msg_win_mgr . get_control ( fjid , account )
2006-01-12 00:21:00 +01:00
contact = ctrl . contact
2005-12-11 12:22:18 +01:00
contact . show = show
contact . status = status
2006-01-12 00:21:00 +01:00
ctrl . update_ui ( )
2005-12-11 12:22:18 +01:00
uf_show = helpers . get_uf_show ( show )
2006-01-12 00:21:00 +01:00
ctrl . print_conversation ( _ ( ' %s is now %s ( %s ) ' ) % ( nick , uf_show , status ) ,
2006-01-02 02:23:40 +01:00
' status ' )
2006-01-12 00:21:00 +01:00
ctrl . draw_banner ( )
2005-12-11 12:22:18 +01:00
2006-01-09 00:14:50 +01:00
# Get the window and control for the updated status, this may be a PrivateChatControl
2006-03-15 09:40:19 +01:00
control = self . msg_win_mgr . get_control ( room_jid , account )
2006-01-09 00:14:50 +01:00
if control :
control . chg_contact_status ( nick , show , status , array [ 4 ] , array [ 5 ] , array [ 6 ] ,
array [ 7 ] , array [ 8 ] , array [ 9 ] , array [ 10 ] )
# Find any PM chat through this room, and tell it to update.
2006-03-15 09:40:19 +01:00
pm_control = self . msg_win_mgr . get_control ( fjid , account )
2006-01-09 00:14:50 +01:00
if pm_control :
2006-01-25 18:55:32 +01:00
pm_control . parent_win . redraw_tab ( pm_control )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' GCPresence ' , ( account , array ) )
2005-09-19 18:13:45 +02:00
2004-08-05 00:40:22 +02:00
def handle_event_gc_msg ( self , account , array ) :
2005-09-23 23:01:42 +02:00
# ('GC_MSG', account, (jid, msg, time))
2005-06-29 22:50:30 +02:00
jids = array [ 0 ] . split ( ' / ' , 1 )
2005-09-23 23:01:42 +02:00
room_jid = jids [ 0 ]
2006-03-15 09:40:19 +01:00
gc_control = self . msg_win_mgr . get_control ( room_jid , account )
2006-01-05 06:51:28 +01:00
if not gc_control :
2004-08-05 00:40:22 +02:00
return
if len ( jids ) == 1 :
2005-09-23 23:01:42 +02:00
# message from server
nick = ' '
2004-08-05 00:40:22 +02:00
else :
2005-09-23 23:01:42 +02:00
# message from someone
nick = jids [ 1 ]
2006-01-05 06:51:28 +01:00
gc_control . on_message ( nick , array [ 1 ] , array [ 2 ] )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' GCMessage ' , ( account , array ) )
2004-08-05 00:40:22 +02:00
2005-03-04 22:27:45 +01:00
def handle_event_gc_subject ( self , account , array ) :
2006-01-15 14:35:29 +01:00
#('GC_SUBJECT', account, (jid, subject, body))
2005-06-29 22:50:30 +02:00
jids = array [ 0 ] . split ( ' / ' , 1 )
2005-03-04 22:27:45 +01:00
jid = jids [ 0 ]
2006-03-15 09:40:19 +01:00
gc_control = self . msg_win_mgr . get_control ( jid , account )
2006-01-06 07:59:55 +01:00
if not gc_control :
2005-03-04 22:27:45 +01:00
return
2006-01-06 07:59:55 +01:00
gc_control . set_subject ( array [ 1 ] )
2006-01-15 14:35:29 +01:00
# We can receive a subject with a body that contains "X has set the subject to Y" ...
if array [ 2 ] :
gc_control . print_conversation ( array [ 2 ] )
# ... Or the message comes from the occupant who set the subject
elif len ( jids ) > 1 :
2006-01-06 07:59:55 +01:00
gc_control . print_conversation ( ' %s has set the subject to %s ' % ( jids [ 1 ] , array [ 1 ] ) )
2005-03-04 22:27:45 +01:00
2005-04-20 12:21:33 +02:00
def handle_event_gc_config ( self , account , array ) :
#('GC_CONFIG', account, (jid, config)) config is a dict
jid = array [ 0 ] . split ( ' / ' ) [ 0 ]
2005-11-13 16:08:47 +01:00
if not self . instances [ account ] [ ' gc_config ' ] . has_key ( jid ) :
self . instances [ account ] [ ' gc_config ' ] [ jid ] = \
2005-10-20 13:17:17 +02:00
config . GroupchatConfigWindow ( account , jid , array [ 1 ] )
2006-01-16 12:16:06 +01:00
def handle_event_gc_affiliation ( self , account , array ) :
#('GC_AFFILIATION', account, (room_jid, affiliation, list)) list is list
room_jid = array [ 0 ]
if self . instances [ account ] [ ' gc_config ' ] . has_key ( room_jid ) :
self . instances [ account ] [ ' gc_config ' ] [ room_jid ] . affiliation_list_received (
array [ 1 ] , array [ 2 ] )
2005-09-11 17:02:22 +02:00
def handle_event_gc_invitation ( self , account , array ) :
2005-10-04 12:59:11 +02:00
#('GC_INVITATION', (room_jid, jid_from, reason, password))
2005-10-20 13:17:17 +02:00
dialogs . InvitationReceivedDialog ( account , array [ 0 ] , array [ 1 ] ,
2005-10-04 12:59:11 +02:00
array [ 3 ] , array [ 2 ] )
2005-09-11 17:02:22 +02:00
2004-10-10 20:44:38 +02:00
def handle_event_bad_passphrase ( self , account , array ) :
2005-08-30 23:10:14 +02:00
use_gpg_agent = gajim . config . get ( ' use_gpg_agent ' )
if use_gpg_agent :
return
2005-06-18 19:00:54 +02:00
keyID = gajim . config . get_per ( ' accounts ' , account , ' keyid ' )
self . roster . forget_gpg_passphrase ( keyID )
2005-08-02 00:48:58 +02:00
dialogs . WarningDialog ( _ ( ' Your passphrase is incorrect ' ) ,
_ ( ' You are currently connected without your OpenPGP key. ' ) ) . get_response ( )
2004-10-10 20:44:38 +02:00
2004-11-18 18:15:15 +01:00
def handle_event_roster_info ( self , account , array ) :
#('ROSTER_INFO', account, (jid, name, sub, ask, groups))
jid = array [ 0 ]
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
if not jid in gajim . contacts . get_jid_list ( account ) :
2004-11-18 18:15:15 +01:00
return
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
contacts = gajim . contacts . get_contacts_from_jid ( account , jid )
2006-03-12 19:30:01 +01:00
# contact removes us.
name = array [ 1 ]
sub = array [ 2 ]
ask = array [ 3 ]
groups = array [ 4 ]
if ( not sub or sub == ' none ' ) and ( not ask or ask == ' none ' ) and \
not name and not groups :
2005-11-01 16:28:19 +01:00
self . roster . remove_contact ( contacts [ 0 ] , account )
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
gajim . contacts . remove_jid ( account , jid )
2005-11-13 18:43:41 +01:00
#FIXME if it was the only one in its group, remove the group
2004-11-18 18:15:15 +01:00
return
2005-11-01 16:28:19 +01:00
for contact in contacts :
2006-01-10 19:30:57 +01:00
if not name :
name = ' '
contact . name = name
2006-03-12 19:30:01 +01:00
contact . sub = sub
contact . ask = ask
if groups :
contact . groups = groups
2005-04-23 02:37:51 +02:00
self . roster . draw_contact ( jid , account )
2005-11-19 23:01:10 +01:00
if self . remote_ctrl :
self . remote_ctrl . raise_signal ( ' RosterInfo ' , ( account , array ) )
2004-11-18 18:15:15 +01:00
2005-06-11 19:21:30 +02:00
def handle_event_bookmarks ( self , account , bms ) :
2005-08-18 21:06:24 +02:00
# ('BOOKMARKS', account, [{name,jid,autojoin,password,nick}, {}])
# We received a bookmark item from the server (JEP48)
# Auto join GC windows if neccessary
2005-11-16 11:35:11 +01:00
2006-02-19 22:28:41 +01:00
self . roster . actions_menu_needs_rebuild = True
2005-11-16 11:35:11 +01:00
invisible_show = gajim . SHOW_LIST . index ( ' invisible ' )
# do not autojoin if we are invisible
if gajim . connections [ account ] . connected == invisible_show :
return
2005-11-27 13:29:30 +01:00
# join autojoinable rooms
2005-11-27 10:41:48 +01:00
for bm in bms :
if bm [ ' autojoin ' ] in ( ' 1 ' , ' true ' ) :
self . roster . join_gc_room ( account , bm [ ' jid ' ] , bm [ ' nick ' ] ,
bm [ ' password ' ] )
2005-08-06 18:18:25 +02:00
def handle_event_file_send_error ( self , account , array ) :
jid = array [ 0 ]
file_props = array [ 1 ]
2005-11-13 16:08:47 +01:00
ft = self . instances [ ' file_transfers ' ]
2005-08-11 22:31:44 +02:00
ft . set_status ( file_props [ ' type ' ] , file_props [ ' sid ' ] , ' stop ' )
2005-10-19 22:16:22 +02:00
if gajim . popup_window ( account ) :
ft . show_send_error ( file_props )
return
self . add_event ( account , jid , ' file-send-error ' , file_props )
if gajim . show_notification ( account ) :
2006-02-08 01:55:16 +01:00
img = os . path . join ( gajim . DATA_DIR , ' pixmaps ' , ' events ' , ' ft_error.png ' )
2006-01-22 00:15:35 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img )
2005-11-11 20:06:48 +01:00
notify . notify ( _ ( ' File Transfer Error ' ) ,
2006-01-21 10:55:16 +01:00
jid , account , ' file-send-error ' , path , file_props [ ' name ' ] )
2006-01-17 10:01:59 +01:00
2006-01-17 21:23:36 +01:00
def handle_event_gmail_notify ( self , account , array ) :
jid = array [ 0 ]
2006-01-20 18:40:45 +01:00
gmail_new_messages = int ( array [ 1 ] )
Merged revisions 5017-5020,5022-5029 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r5017 | asterix | 2006-01-06 01:55:51 -0700 (Fri, 06 Jan 2006) | 2 lines
use escape for pango markup
........
r5018 | asterix | 2006-01-06 02:21:39 -0700 (Fri, 06 Jan 2006) | 2 lines
missing new contacts function
........
r5019 | asterix | 2006-01-06 11:03:07 -0700 (Fri, 06 Jan 2006) | 2 lines
handle the click on toggle_gpg_encryption menuitem
........
r5020 | asterix | 2006-01-06 11:14:14 -0700 (Fri, 06 Jan 2006) | 2 lines
use the saved size even if a chat window is already opened
........
r5022 | asterix | 2006-01-07 03:43:47 -0700 (Sat, 07 Jan 2006) | 2 lines
we can now resume filetransfert
........
r5023 | asterix | 2006-01-07 03:56:31 -0700 (Sat, 07 Jan 2006) | 2 lines
[Knuckles] Google E-Mail Notification
........
r5024 | asterix | 2006-01-07 04:02:16 -0700 (Sat, 07 Jan 2006) | 2 lines
better string
........
r5025 | asterix | 2006-01-07 04:14:32 -0700 (Sat, 07 Jan 2006) | 2 lines
fix a TB
........
r5026 | asterix | 2006-01-07 05:36:55 -0700 (Sat, 07 Jan 2006) | 2 lines
we can now drag a file on a contact in the roster to send him a file
........
r5027 | asterix | 2006-01-07 06:26:28 -0700 (Sat, 07 Jan 2006) | 2 lines
contact.groups is always a list, even if emtpy
........
r5028 | asterix | 2006-01-07 06:54:30 -0700 (Sat, 07 Jan 2006) | 2 lines
make all buttons insensitive on a category row in disco
........
r5029 | asterix | 2006-01-07 07:19:25 -0700 (Sat, 07 Jan 2006) | 2 lines
auto open groupchat configuration window when we create a new room
........
2006-01-07 18:25:35 +01:00
if gajim . config . get ( ' notify_on_new_gmail_email ' ) :
2006-02-08 01:55:16 +01:00
img = os . path . join ( gajim . DATA_DIR , ' pixmaps ' , ' events ' ,
' single_msg_recv.png ' ) #FIXME: find a better image
2006-01-20 18:40:45 +01:00
txt = i18n . ngettext ( ' You have %d new E-mail message ' , ' You have %d new E-mail messages ' , gmail_new_messages , gmail_new_messages , gmail_new_messages )
txt = _ ( ' %(new_mail_gajim_ui_msg)s on %(gmail_mail_address)s ' ) % { ' new_mail_gajim_ui_msg ' : txt , ' gmail_mail_address ' : jid }
2006-01-22 00:15:35 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img )
2006-01-20 18:40:45 +01:00
notify . notify ( _ ( ' New E-mail ' ) , jid , account , ' gmail ' , path_to_image = path , text = txt )
2005-10-18 22:30:26 +02:00
2006-03-13 14:25:51 +01:00
def save_avatar_files ( self , jid , photo_decoded , puny_nick = None ) :
2006-01-17 10:01:59 +01:00
''' Save the decoded avatar to a separate file, and generate files for dbus notifications '''
2006-03-10 19:58:28 +01:00
puny_jid = punycode_encode ( jid )
path_to_file = os . path . join ( gajim . AVATAR_PATH , puny_jid )
2006-03-13 14:25:51 +01:00
if puny_nick :
path_to_file = os . path . join ( path_to_file , puny_nick )
2006-02-06 17:04:55 +01:00
# remove old avatars
for typ in ( ' jpeg ' , ' png ' ) :
path_to_original_file = path_to_file + ' . ' + typ
if os . path . isfile ( path_to_original_file ) :
os . remove ( path_to_original_file )
2006-01-17 10:01:59 +01:00
pixbuf , typ = gtkgui_helpers . get_pixbuf_from_data ( photo_decoded ,
want_type = True )
2006-02-17 22:52:22 +01:00
if pixbuf is None :
return
2006-02-06 15:04:25 +01:00
if typ not in ( ' jpeg ' , ' png ' ) :
gajim . log . debug ( ' gtkpixbuf cannot save other than jpeg and png formats. saving %s \' avatar as png file (originaly %s ) ' % ( jid , typ ) )
typ = ' png '
path_to_original_file = path_to_file + ' . ' + typ
pixbuf . save ( path_to_original_file , typ )
2006-01-17 10:01:59 +01:00
# Generate and save the resized, color avatar
2006-01-18 17:14:20 +01:00
path_to_normal_file = path_to_file + ' _notif_size_colored.png '
2006-01-17 10:01:59 +01:00
pixbuf = gtkgui_helpers . get_scaled_pixbuf (
gtkgui_helpers . get_pixbuf_from_data ( photo_decoded ) , ' notification ' )
pixbuf . save ( path_to_normal_file , ' png ' )
# Generate and save the resized, black and white avatar
2006-01-18 17:14:20 +01:00
path_to_bw_file = path_to_file + ' _notif_size_bw.png '
2006-01-17 10:01:59 +01:00
bwbuf = gtkgui_helpers . get_scaled_pixbuf (
gtkgui_helpers . make_pixbuf_grayscale ( pixbuf ) , ' notification ' )
bwbuf . save ( path_to_bw_file , ' png ' )
2005-10-18 22:30:26 +02:00
def add_event ( self , account , jid , typ , args ) :
''' add an event to the awaiting_events var '''
# We add it to the awaiting_events queue
# Do we have a queue?
2006-02-27 12:27:53 +01:00
jid = gajim . get_jid_without_resource ( jid )
2005-10-18 22:30:26 +02:00
qs = gajim . awaiting_events [ account ]
no_queue = False
if not qs . has_key ( jid ) :
no_queue = True
qs [ jid ] = [ ]
qs [ jid ] . append ( ( typ , args ) )
self . roster . nb_unread + = 1
self . roster . show_title ( )
if no_queue : # We didn't have a queue: we change icons
self . roster . draw_contact ( jid , account )
if self . systray_enabled :
self . systray . add_jid ( jid , account , typ )
2006-03-02 12:14:45 +01:00
def redraw_roster_systray ( self , account , jid , typ = None ) :
self . roster . nb_unread - = 1
self . roster . show_title ( )
self . roster . draw_contact ( jid , account )
if self . systray_enabled :
self . systray . remove_jid ( jid , account , typ )
2005-10-18 22:30:26 +02:00
def remove_first_event ( self , account , jid , typ = None ) :
qs = gajim . awaiting_events [ account ]
event = gajim . get_first_event ( account , jid , typ )
qs [ jid ] . remove ( event )
# Is it the last event?
if not len ( qs [ jid ] ) :
del qs [ jid ]
2006-03-02 12:14:45 +01:00
self . redraw_roster_systray ( account , jid , typ )
def remove_event ( self , account , jid , event ) :
qs = gajim . awaiting_events [ account ]
if not event in qs [ jid ] :
return
qs [ jid ] . remove ( event )
# Is it the last event?
if not len ( qs [ jid ] ) :
del qs [ jid ]
self . redraw_roster_systray ( account , jid , event [ 0 ] )
2005-10-18 22:30:26 +02:00
2005-08-06 18:18:25 +02:00
def handle_event_file_request_error ( self , account , array ) :
jid = array [ 0 ]
file_props = array [ 1 ]
2005-11-13 16:08:47 +01:00
ft = self . instances [ ' file_transfers ' ]
2005-08-11 22:31:44 +02:00
ft . set_status ( file_props [ ' type ' ] , file_props [ ' sid ' ] , ' stop ' )
2005-10-19 22:16:22 +02:00
errno = file_props [ ' error ' ]
2005-10-18 22:30:26 +02:00
if gajim . popup_window ( account ) :
if errno in ( - 4 , - 5 ) :
ft . show_stopped ( jid , file_props )
else :
ft . show_request_error ( file_props )
return
2005-10-19 22:16:22 +02:00
if errno in ( - 4 , - 5 ) :
msg_type = ' file-error '
else :
msg_type = ' file-request-error '
2005-11-01 18:12:40 +01:00
self . add_event ( account , jid , msg_type , file_props )
2005-10-18 22:30:26 +02:00
if gajim . show_notification ( account ) :
2005-08-06 18:18:25 +02:00
# check if we should be notified
2006-02-08 01:55:16 +01:00
img = os . path . join ( gajim . DATA_DIR , ' pixmaps ' , ' events ' , ' ft_error.png ' )
2006-01-22 00:15:35 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img )
2005-11-11 20:06:48 +01:00
notify . notify ( _ ( ' File Transfer Error ' ) ,
2006-01-21 10:55:16 +01:00
jid , account , msg_type , path , file_props [ ' name ' ] )
2005-10-18 22:30:26 +02:00
2005-07-30 12:20:46 +02:00
def handle_event_file_request ( self , account , array ) :
jid = array [ 0 ]
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
if jid not in gajim . contacts . get_jid_list ( account ) :
2005-07-30 12:20:46 +02:00
return
file_props = array [ 1 ]
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
contact = gajim . contacts . get_first_contact_from_jid ( account , jid )
2005-10-18 11:07:52 +02:00
2005-10-18 22:30:26 +02:00
if gajim . popup_window ( account ) :
2005-11-13 16:08:47 +01:00
self . instances [ ' file_transfers ' ] . show_file_request ( account , contact ,
2005-10-18 11:07:52 +02:00
file_props )
return
2005-10-19 12:39:23 +02:00
self . add_event ( account , jid , ' file-request ' , file_props )
2005-10-18 11:07:52 +02:00
2005-10-18 22:30:26 +02:00
if gajim . show_notification ( account ) :
2006-02-08 01:55:16 +01:00
img = os . path . join ( gajim . DATA_DIR , ' pixmaps ' , ' events ' ,
' ft_request.png ' )
2006-01-20 18:50:01 +01:00
txt = _ ( ' %s wants to send you a file. ' ) % gajim . get_name_from_jid ( account , jid )
2006-01-22 00:15:35 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img )
2006-01-20 18:40:45 +01:00
notify . notify ( _ ( ' File Transfer Request ' ) , jid , account , ' file-request ' , path_to_image = path , text = txt )
2005-10-18 11:07:52 +02:00
2005-08-01 17:02:46 +02:00
def handle_event_file_progress ( self , account , file_props ) :
2005-11-13 16:08:47 +01:00
self . instances [ ' file_transfers ' ] . set_progress ( file_props [ ' type ' ] ,
2005-08-01 17:02:46 +02:00
file_props [ ' sid ' ] , file_props [ ' received-len ' ] )
2005-08-04 13:17:16 +02:00
2005-07-30 16:14:10 +02:00
def handle_event_file_rcv_completed ( self , account , file_props ) :
2005-11-13 16:08:47 +01:00
ft = self . instances [ ' file_transfers ' ]
2005-08-01 17:02:46 +02:00
if file_props [ ' error ' ] == 0 :
ft . set_progress ( file_props [ ' type ' ] , file_props [ ' sid ' ] ,
file_props [ ' received-len ' ] )
else :
ft . set_status ( file_props [ ' type ' ] , file_props [ ' sid ' ] , ' stop ' )
2005-08-04 13:17:16 +02:00
if file_props . has_key ( ' stalled ' ) and file_props [ ' stalled ' ] or \
file_props . has_key ( ' paused ' ) and file_props [ ' paused ' ] :
2005-08-04 09:23:14 +02:00
return
2006-03-02 12:22:27 +01:00
if file_props [ ' type ' ] == ' r ' : # we receive a file
jid = unicode ( file_props [ ' sender ' ] )
else : # we send a file
jid = unicode ( file_props [ ' receiver ' ] )
2005-10-19 23:14:51 +02:00
if gajim . popup_window ( account ) :
2005-08-04 13:17:16 +02:00
if file_props [ ' error ' ] == 0 :
2005-11-01 12:25:01 +01:00
if gajim . config . get ( ' notify_on_file_complete ' ) :
ft . show_completed ( jid , file_props )
2005-08-04 13:17:16 +02:00
elif file_props [ ' error ' ] == - 1 :
2005-10-19 23:14:51 +02:00
ft . show_stopped ( jid , file_props )
return
2005-11-01 12:25:01 +01:00
msg_type = ' '
2005-11-21 10:59:19 +01:00
event_type = ' '
2005-11-01 12:25:01 +01:00
if file_props [ ' error ' ] == 0 and gajim . config . get ( ' notify_on_file_complete ' ) :
2005-10-19 23:14:51 +02:00
msg_type = ' file-completed '
event_type = _ ( ' File Transfer Completed ' )
elif file_props [ ' error ' ] == - 1 :
msg_type = ' file-stopped '
event_type = _ ( ' File Transfer Stopped ' )
2005-11-21 10:59:19 +01:00
2005-12-01 19:03:05 +01:00
if event_type == ' ' :
# FIXME: ugly workaround (this can happen Gajim sent, Gaim recvs)
2005-11-21 10:59:19 +01:00
# this should never happen but it does. see process_result() in socks5.py
# who calls this func (sth is really wrong unless this func is also registered
# as progress_cb
return
2005-10-19 23:14:51 +02:00
2005-11-01 12:25:01 +01:00
if msg_type :
self . add_event ( account , jid , msg_type , file_props )
2006-01-20 18:40:45 +01:00
if file_props is not None :
if file_props [ ' type ' ] == ' r ' :
# get the name of the sender, as it is in the roster
sender = unicode ( file_props [ ' sender ' ] ) . split ( ' / ' ) [ 0 ]
name = gajim . contacts . get_first_contact_from_jid ( account ,
sender ) . get_shown_name ( )
filename = os . path . basename ( file_props [ ' file-name ' ] )
if event_type == _ ( ' File Transfer Completed ' ) :
txt = _ ( ' You successfully received %(filename)s from %(name)s . ' ) \
% { ' filename ' : filename , ' name ' : name }
img = ' ft_done.png '
else : # ft stopped
txt = _ ( ' File transfer of %(filename)s from %(name)s stopped. ' ) \
% { ' filename ' : filename , ' name ' : name }
img = ' ft_stopped.png '
else :
receiver = file_props [ ' receiver ' ]
if hasattr ( receiver , ' jid ' ) :
receiver = receiver . jid
receiver = receiver . split ( ' / ' ) [ 0 ]
# get the name of the contact, as it is in the roster
name = gajim . contacts . get_first_contact_from_jid ( account ,
receiver ) . get_shown_name ( )
filename = os . path . basename ( file_props [ ' file-name ' ] )
if event_type == _ ( ' File Transfer Completed ' ) :
txt = _ ( ' You successfully sent %(filename)s to %(name)s . ' ) \
% { ' filename ' : filename , ' name ' : name }
img = ' ft_done.png '
else : # ft stopped
txt = _ ( ' File transfer of %(filename)s to %(name)s stopped. ' ) \
% { ' filename ' : filename , ' name ' : name }
img = ' ft_stopped.png '
2006-02-08 01:55:16 +01:00
img = os . path . join ( gajim . DATA_DIR , ' pixmaps ' , ' events ' , img )
2006-01-22 00:15:35 +01:00
path = gtkgui_helpers . get_path_to_generic_or_avatar ( img )
2006-01-20 18:40:45 +01:00
else :
txt = ' '
2005-10-19 23:14:51 +02:00
if gajim . config . get ( ' notify_on_file_complete ' ) and \
2005-11-08 17:53:33 +01:00
( gajim . config . get ( ' autopopupaway ' ) or \
gajim . connections [ account ] . connected in ( 2 , 3 ) ) :
# we want to be notified and we are online/chat or we don't mind
# bugged when away/na/busy
2006-01-20 18:40:45 +01:00
notify . notify ( event_type , jid , account , msg_type , path_to_image = path , text = txt )
2005-08-04 22:32:38 +02:00
def handle_event_stanza_arrived ( self , account , stanza ) :
2005-11-13 16:08:47 +01:00
if not self . instances . has_key ( account ) :
2005-08-10 13:52:37 +02:00
return
2005-11-13 16:08:47 +01:00
if self . instances [ account ] . has_key ( ' xml_console ' ) :
self . instances [ account ] [ ' xml_console ' ] . print_stanza ( stanza , ' incoming ' )
2005-08-06 01:43:28 +02:00
def handle_event_stanza_sent ( self , account , stanza ) :
2005-11-13 16:08:47 +01:00
if not self . instances . has_key ( account ) :
2005-08-10 13:52:37 +02:00
return
2005-11-13 16:08:47 +01:00
if self . instances [ account ] . has_key ( ' xml_console ' ) :
self . instances [ account ] [ ' xml_console ' ] . print_stanza ( stanza , ' outgoing ' )
2005-08-04 22:32:38 +02:00
2005-09-10 11:25:06 +02:00
def handle_event_vcard_published ( self , account , array ) :
2005-10-02 23:56:38 +02:00
dialogs . InformationDialog ( _ ( ' vCard publication succeeded ' ) , _ ( ' Your personal information has been published successfully. ' ) )
2005-09-10 11:25:06 +02:00
def handle_event_vcard_not_published ( self , account , array ) :
2005-10-02 23:56:38 +02:00
dialogs . InformationDialog ( _ ( ' vCard publication failed ' ) , _ ( ' There was an error while publishing your personal information, try again later. ' ) )
2005-11-27 13:29:30 +01:00
2005-11-27 13:42:42 +01:00
def handle_event_signed_in ( self , account , empty ) :
2005-11-30 19:19:25 +01:00
''' SIGNED_IN event is emitted when we sign in, so handle it '''
2005-11-27 13:29:30 +01:00
# join already open groupchats
2006-02-19 22:28:41 +01:00
self . roster . actions_menu_needs_rebuild = True
2006-03-15 09:40:19 +01:00
for gc_control in self . msg_win_mgr . get_controls ( message_control . TYPE_GC ) :
2006-01-17 12:05:05 +01:00
if account != gc_control . account :
continue
2006-01-09 01:47:54 +01:00
room_jid = gc_control . room_jid
2006-01-10 02:47:24 +01:00
if gajim . gc_connected [ account ] . has_key ( room_jid ) and \
gajim . gc_connected [ account ] [ room_jid ] :
2005-11-30 18:45:34 +01:00
continue
2006-01-06 07:59:55 +01:00
room , server = gajim . get_room_name_and_server_from_room_jid ( room_jid )
nick = gc_control . nick
2005-11-30 18:45:34 +01:00
password = ' '
if gajim . gc_passwords . has_key ( room_jid ) :
password = gajim . gc_passwords [ room_jid ]
gajim . connections [ account ] . join_gc ( nick , room , server , password )
2005-11-27 13:29:30 +01:00
2006-01-26 12:23:15 +01:00
def handle_event_meta_contacts ( self , account , children_list ) :
gajim . contacts . define_meta_contacts ( account , children_list )
2004-01-20 13:46:27 +01:00
def read_sleepy ( self ) :
2005-07-22 13:07:06 +02:00
''' Check idle status and change that status if needed '''
2004-10-21 00:53:15 +02:00
if not self . sleeper . poll ( ) :
2005-09-11 01:44:53 +02:00
# idle detection is not supported in that OS
return False # stop looping in vain
2004-05-29 06:05:06 +02:00
state = self . sleeper . getState ( )
2005-04-14 09:05:10 +02:00
for account in gajim . connections :
2005-07-19 00:39:59 +02:00
if not gajim . sleeper_state . has_key ( account ) or \
not gajim . sleeper_state [ account ] :
2004-05-29 06:05:06 +02:00
continue
if state == common . sleepy . STATE_AWAKE and \
2005-07-23 13:52:53 +02:00
gajim . sleeper_state [ account ] in ( ' autoaway ' , ' autoxa ' ) :
2005-09-14 02:02:32 +02:00
#we go online
2005-07-22 23:27:04 +02:00
self . roster . send_status ( account , ' online ' ,
2005-09-14 02:02:32 +02:00
gajim . status_before_autoaway [ account ] )
2005-07-22 13:07:06 +02:00
gajim . sleeper_state [ account ] = ' online '
2004-05-29 06:05:06 +02:00
elif state == common . sleepy . STATE_AWAY and \
2005-07-22 13:07:06 +02:00
gajim . sleeper_state [ account ] == ' online ' and \
2005-04-14 09:05:10 +02:00
gajim . config . get ( ' autoaway ' ) :
2005-07-22 23:27:04 +02:00
#we save out online status
gajim . status_before_autoaway [ account ] = \
gajim . connections [ account ] . status
2005-08-30 23:38:59 +02:00
#we go away (no auto status) [we pass True to auto param]
2005-08-06 17:17:20 +02:00
self . roster . send_status ( account , ' away ' ,
2005-09-14 02:02:32 +02:00
gajim . config . get ( ' autoaway_message ' ) , auto = True )
2005-07-22 13:07:06 +02:00
gajim . sleeper_state [ account ] = ' autoaway '
2005-09-11 01:44:53 +02:00
elif state == common . sleepy . STATE_XA and ( \
2005-07-22 13:07:06 +02:00
gajim . sleeper_state [ account ] == ' autoaway ' or \
gajim . sleeper_state [ account ] == ' online ' ) and \
2005-04-14 09:05:10 +02:00
gajim . config . get ( ' autoxa ' ) :
2005-08-30 23:38:59 +02:00
#we go extended away [we pass True to auto param]
2005-08-06 17:17:20 +02:00
self . roster . send_status ( account , ' xa ' ,
2005-09-14 02:02:32 +02:00
gajim . config . get ( ' autoxa_message ' ) , auto = True )
2005-07-22 13:07:06 +02:00
gajim . sleeper_state [ account ] = ' autoxa '
2005-04-18 16:05:30 +02:00
return True # renew timeout (loop for ever)
2003-11-30 23:40:24 +01:00
2004-12-01 21:47:37 +01:00
def autoconnect ( self ) :
2005-04-18 16:05:30 +02:00
''' auto connect at startup '''
2005-07-22 13:07:52 +02:00
ask_message = False
2005-04-14 09:05:10 +02:00
for a in gajim . connections :
if gajim . config . get_per ( ' accounts ' , a , ' autoconnect ' ) :
2005-07-22 13:07:52 +02:00
ask_message = True
2005-04-14 09:05:10 +02:00
break
2005-03-15 21:01:04 +01:00
if ask_message :
2005-05-12 02:22:36 +02:00
message = self . roster . get_status_message ( ' online ' )
2006-01-25 17:27:09 +01:00
if message == None :
2005-03-15 21:01:04 +01:00
return
2005-04-14 09:05:10 +02:00
for a in gajim . connections :
if gajim . config . get_per ( ' accounts ' , a , ' autoconnect ' ) :
2005-05-12 02:22:36 +02:00
self . roster . send_status ( a , ' online ' , message )
2005-04-18 16:05:30 +02:00
return False
2004-12-01 21:47:37 +01:00
2004-12-14 13:57:45 +01:00
def show_systray ( self ) :
self . systray . show_icon ( )
2005-03-28 03:20:47 +02:00
self . systray_enabled = True
2004-12-14 13:57:45 +01:00
def hide_systray ( self ) :
self . systray . hide_icon ( )
2005-03-28 03:20:47 +02:00
self . systray_enabled = False
2005-03-09 22:29:20 +01:00
def image_is_ok ( self , image ) :
if not os . path . exists ( image ) :
return False
img = gtk . Image ( )
try :
img . set_from_file ( image )
except :
2005-06-18 16:57:25 +02:00
return False
2005-06-18 17:57:06 +02:00
t = img . get_storage_type ( )
if t != gtk . IMAGE_PIXBUF and t != gtk . IMAGE_ANIMATION :
2005-03-09 22:29:20 +01:00
return False
return True
2005-03-10 19:20:23 +01:00
2005-03-13 18:04:57 +01:00
def make_regexps ( self ) :
2005-03-10 19:20:23 +01:00
# regexp meta characters are: . ^ $ * + ? { } [ ] \ | ( )
# one escapes the metachars with \
# \S matches anything but ' ' '\t' '\n' '\r' '\f' and '\v'
# \s matches any whitespace character
# \w any alphanumeric character
# \W any non-alphanumeric character
2005-03-10 23:53:40 +01:00
# \b means word boundary. This is a zero-width assertion that
# matches only at the beginning or end of a word.
2005-03-11 03:35:54 +01:00
# ^ matches at the beginning of lines
2005-03-10 23:53:40 +01:00
#
2005-03-10 19:20:23 +01:00
# * means 0 or more times
# + means 1 or more times
2005-03-10 23:53:40 +01:00
# ? means 0 or 1 time
2005-03-10 19:20:23 +01:00
# | means or
# [^*] anything but '*' (inside [] you don't have to escape metachars)
# [^\s*] anything but whitespaces and '*'
2005-03-11 17:24:04 +01:00
# (?<!\S) is a one char lookbehind assertion and asks for any leading whitespace
# and mathces beginning of lines so we have correct formatting detection
2005-03-29 18:16:42 +02:00
# even if the the text is just '*foo*'
2005-03-11 23:52:28 +01:00
# (?!\S) is the same thing but it's a lookahead assertion
2005-08-01 16:38:21 +02:00
# \S*[^\s\W] --> in the matching string don't match ? or ) etc.. if at the end
2005-03-29 23:28:58 +02:00
# so http://be) will match http://be and http://be)be) will match http://be)be
2005-11-01 00:31:18 +01:00
2005-12-09 22:09:42 +01:00
prefixes = ( r ' http:// ' , r ' https:// ' , r ' gopher:// ' , r ' news:// ' , r ' ftp:// ' ,
2006-01-20 14:04:29 +01:00
r ' ed2k:// ' , r ' irc:// ' , r ' magnet: ' , r ' sip: ' , r ' www \ . ' , r ' ftp \ . ' )
2005-11-01 00:33:33 +01:00
# NOTE: it's ok to catch www.gr such stuff exist!
2005-11-01 00:31:18 +01:00
2005-11-27 23:05:10 +01:00
#FIXME: recognize xmpp: and treat it specially
2005-11-01 00:31:18 +01:00
prefix_pattern = ' '
for prefix in prefixes :
prefix_pattern + = prefix + ' | '
2005-11-01 00:48:36 +01:00
prefix_pattern = prefix_pattern [ : - 1 ] # remove last |
2005-11-01 00:31:18 +01:00
prefix_pattern = ' ( ' + prefix_pattern + ' ) '
2006-03-05 21:33:54 +01:00
links = r ' \ b ' + prefix_pattern + r ' \ S*[ \ w \ / \ =]| '
2005-03-10 19:20:23 +01:00
#2nd one: at_least_one_char@at_least_one_char.at_least_one_char
2005-08-01 16:38:21 +02:00
mail = r ' \ bmailto: \ S*[^ \ s \ W]| ' r ' \ b \ S+@ \ S+ \ . \ S*[^ \ s \ W]| '
2005-03-10 19:20:23 +01:00
2005-11-13 22:46:04 +01:00
#detects eg. *b* *bold* *bold bold* test *bold* *bold*! (*bold*)
2005-03-11 13:55:38 +01:00
#doesn't detect (it's a feature :P) * bold* *bold * * bold * test*bold*
2005-11-13 22:46:04 +01:00
formatting = r ' (?<! \ w) ' r ' \ *[^ \ s*] ' r ' ([^*]*[^ \ s*])? ' r ' \ *(?! \ w)| ' \
2005-11-14 22:26:20 +01:00
r ' (?<! \ w| \ <) ' r ' /[^ \ s/] ' r ' ([^/]*[^ \ s/])? ' r ' /(?! \ w)| ' \
2005-11-13 22:50:54 +01:00
r ' (?<! \ w) ' r ' _[^ \ s_] ' r ' ([^_]*[^ \ s_])? ' r ' _(?! \ w) '
2005-03-11 17:24:04 +01:00
2006-03-02 17:05:52 +01:00
basic_pattern = links + mail
if gajim . config . get ( ' ascii_formatting ' ) :
basic_pattern + = formatting
2005-03-13 18:04:57 +01:00
self . basic_pattern_re = sre . compile ( basic_pattern , sre . IGNORECASE )
2005-11-15 15:17:02 +01:00
emoticons_pattern = ' '
2006-03-17 12:11:45 +01:00
if gajim . config . get ( ' emoticons_theme ' ) :
2005-11-15 12:52:40 +01:00
# When an emoticon is bordered by an alpha-numeric character it is NOT
# expanded. e.g., foo:) NO, foo :) YES, (brb) NO, (:)) YES, etc.
2005-11-30 19:35:40 +01:00
# We still allow multiple emoticons side-by-side like :P:P:P
# sort keys by length so :qwe emot is checked before :q
2005-11-15 12:52:40 +01:00
keys = self . emoticons . keys ( )
keys . sort ( self . on_emoticon_sort )
2005-11-30 19:35:40 +01:00
emoticons_pattern_prematch = ' '
emoticons_pattern_postmatch = ' '
emoticon_length = 0
2005-11-15 12:52:40 +01:00
for emoticon in keys : # travel thru emoticons list
emoticon_escaped = sre . escape ( emoticon ) # espace regexp metachars
emoticons_pattern + = emoticon_escaped + ' | ' # | means or in regexp
2005-11-30 19:35:40 +01:00
if ( emoticon_length != len ( emoticon ) ) :
# Build up expressions to match emoticons next to other emoticons
emoticons_pattern_prematch = emoticons_pattern_prematch [ : - 1 ] + ' )|(?<= '
emoticons_pattern_postmatch = emoticons_pattern_postmatch [ : - 1 ] + ' )|(?= '
emoticon_length = len ( emoticon )
emoticons_pattern_prematch + = emoticon_escaped + ' | '
emoticons_pattern_postmatch + = emoticon_escaped + ' | '
# We match from our list of emoticons, but they must either have
2005-12-05 14:25:50 +01:00
# whitespace, or another emoticon next to it to match successfully
# [\w.] alphanumeric and dot (for not matching 8) in (2.8))
2005-11-30 19:35:40 +01:00
emoticons_pattern = ' | ' + \
2005-12-05 14:25:50 +01:00
' (?:(?<![ \ w.] ' + emoticons_pattern_prematch [ : - 1 ] + ' )) ' + \
2005-11-30 19:35:40 +01:00
' (?: ' + emoticons_pattern [ : - 1 ] + ' ) ' + \
2005-12-05 14:25:50 +01:00
' (?:(?![ \ w.] ' + emoticons_pattern_postmatch [ : - 1 ] + ' )) '
2005-11-30 19:35:40 +01:00
2005-11-13 22:46:04 +01:00
# because emoticons match later (in the string) they need to be after
# basic matches that may occur earlier
2005-11-30 19:35:40 +01:00
emot_and_basic_pattern = basic_pattern + emoticons_pattern
2005-11-13 21:47:15 +01:00
self . emot_and_basic_re = sre . compile ( emot_and_basic_pattern , sre . IGNORECASE )
2005-03-13 18:04:57 +01:00
# at least one character in 3 parts (before @, after @, after .)
2005-08-01 16:27:23 +02:00
self . sth_at_sth_dot_sth_re = sre . compile ( r ' \ S+@ \ S+ \ . \ S*[^ \ s)?] ' )
2005-11-27 22:57:41 +01:00
sre . purge ( ) # clear the regular expression cache
2005-03-10 19:20:23 +01:00
2005-11-01 00:48:36 +01:00
def on_emoticon_sort ( self , emot1 , emot2 ) :
2005-09-08 13:25:47 +02:00
len1 = len ( emot1 )
len2 = len ( emot2 )
if len1 < len2 :
return 1
elif len1 > len2 :
return - 1
return 0
2005-03-13 00:43:17 +01:00
def on_launch_browser_mailer ( self , widget , url , kind ) :
2005-08-27 16:26:08 +02:00
helpers . launch_browser_mailer ( kind , url )
2004-12-14 13:57:45 +01:00
2005-11-15 12:52:40 +01:00
def init_emoticons ( self ) :
2006-03-17 12:11:45 +01:00
if not gajim . config . get ( ' emoticons_theme ' ) :
2005-11-15 12:52:40 +01:00
return
2006-03-17 00:37:06 +01:00
2005-11-15 12:52:40 +01:00
#initialize emoticons dictionary and unique images list
self . emoticons_images = list ( )
2005-04-06 20:51:54 +02:00
self . emoticons = dict ( )
2006-03-17 00:37:06 +01:00
emot_theme = gajim . config . get ( ' emoticons_theme ' )
if not emot_theme :
return
path = os . path . join ( gajim . DATA_DIR , ' emoticons ' , emot_theme )
2006-03-17 15:24:58 +01:00
if not os . path . exists ( path ) :
# It's maybe a user theme
path = os . path . join ( gajim . MY_EMOTS_PATH , emot_theme )
if not os . path . exists ( path ) : # theme doesn't exists
return
2006-03-17 00:37:06 +01:00
sys . path . append ( path )
from emoticons import emoticons as emots
2005-04-16 16:50:26 +02:00
for emot in emots :
2006-03-17 00:37:06 +01:00
emot_file = os . path . join ( path , emots [ emot ] )
2005-04-06 20:51:54 +02:00
if not self . image_is_ok ( emot_file ) :
continue
2005-11-15 15:31:27 +01:00
# This avoids duplicated emoticons with the same image eg. :) and :-)
2005-11-15 12:52:40 +01:00
if not emot_file in self . emoticons . values ( ) :
if emot_file . endswith ( ' .gif ' ) :
pix = gtk . gdk . PixbufAnimation ( emot_file )
2006-03-17 00:37:06 +01:00
else :
pix = gtk . gdk . pixbuf_new_from_file ( emot_file )
2005-11-15 12:52:40 +01:00
self . emoticons_images . append ( ( emot , pix ) )
2005-09-08 12:11:30 +02:00
self . emoticons [ emot . upper ( ) ] = emot_file
2006-03-17 00:37:06 +01:00
sys . path . remove ( path )
del emots
2005-11-15 12:52:40 +01:00
2005-11-10 11:16:25 +01:00
def register_handlers ( self ) :
2005-08-09 19:21:35 +02:00
self . handlers = {
' ROSTER ' : self . handle_event_roster ,
' WARNING ' : self . handle_event_warning ,
' ERROR ' : self . handle_event_error ,
' INFORMATION ' : self . handle_event_information ,
' ERROR_ANSWER ' : self . handle_event_error_answer ,
' STATUS ' : self . handle_event_status ,
' NOTIFY ' : self . handle_event_notify ,
' MSG ' : self . handle_event_msg ,
' MSGERROR ' : self . handle_event_msgerror ,
' MSGSENT ' : self . handle_event_msgsent ,
' SUBSCRIBED ' : self . handle_event_subscribed ,
' UNSUBSCRIBED ' : self . handle_event_unsubscribed ,
' SUBSCRIBE ' : self . handle_event_subscribe ,
2005-10-30 10:58:13 +01:00
' AGENT_ERROR_INFO ' : self . handle_event_agent_info_error ,
' AGENT_ERROR_ITEMS ' : self . handle_event_agent_items_error ,
2005-08-09 19:21:35 +02:00
' REGISTER_AGENT_INFO ' : self . handle_event_register_agent_info ,
' AGENT_INFO_ITEMS ' : self . handle_event_agent_info_items ,
' AGENT_INFO_INFO ' : self . handle_event_agent_info_info ,
' QUIT ' : self . handle_event_quit ,
' ACC_OK ' : self . handle_event_acc_ok ,
2005-11-04 22:27:14 +01:00
' ACC_NOT_OK ' : self . handle_event_acc_not_ok ,
2005-08-09 19:21:35 +02:00
' MYVCARD ' : self . handle_event_myvcard ,
' VCARD ' : self . handle_event_vcard ,
2006-02-22 15:31:01 +01:00
' LAST_STATUS_TIME ' : self . handle_event_last_status_time ,
2005-08-09 19:21:35 +02:00
' OS_INFO ' : self . handle_event_os_info ,
2005-09-19 18:13:45 +02:00
' GC_NOTIFY ' : self . handle_event_gc_notify ,
2005-08-09 19:21:35 +02:00
' GC_MSG ' : self . handle_event_gc_msg ,
' GC_SUBJECT ' : self . handle_event_gc_subject ,
' GC_CONFIG ' : self . handle_event_gc_config ,
2005-09-11 17:02:22 +02:00
' GC_INVITATION ' : self . handle_event_gc_invitation ,
2006-01-16 12:16:06 +01:00
' GC_AFFILIATION ' : self . handle_event_gc_affiliation ,
2005-08-09 19:21:35 +02:00
' BAD_PASSPHRASE ' : self . handle_event_bad_passphrase ,
' ROSTER_INFO ' : self . handle_event_roster_info ,
' BOOKMARKS ' : self . handle_event_bookmarks ,
' CON_TYPE ' : self . handle_event_con_type ,
' FILE_REQUEST ' : self . handle_event_file_request ,
Merged revisions 5017-5020,5022-5029 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r5017 | asterix | 2006-01-06 01:55:51 -0700 (Fri, 06 Jan 2006) | 2 lines
use escape for pango markup
........
r5018 | asterix | 2006-01-06 02:21:39 -0700 (Fri, 06 Jan 2006) | 2 lines
missing new contacts function
........
r5019 | asterix | 2006-01-06 11:03:07 -0700 (Fri, 06 Jan 2006) | 2 lines
handle the click on toggle_gpg_encryption menuitem
........
r5020 | asterix | 2006-01-06 11:14:14 -0700 (Fri, 06 Jan 2006) | 2 lines
use the saved size even if a chat window is already opened
........
r5022 | asterix | 2006-01-07 03:43:47 -0700 (Sat, 07 Jan 2006) | 2 lines
we can now resume filetransfert
........
r5023 | asterix | 2006-01-07 03:56:31 -0700 (Sat, 07 Jan 2006) | 2 lines
[Knuckles] Google E-Mail Notification
........
r5024 | asterix | 2006-01-07 04:02:16 -0700 (Sat, 07 Jan 2006) | 2 lines
better string
........
r5025 | asterix | 2006-01-07 04:14:32 -0700 (Sat, 07 Jan 2006) | 2 lines
fix a TB
........
r5026 | asterix | 2006-01-07 05:36:55 -0700 (Sat, 07 Jan 2006) | 2 lines
we can now drag a file on a contact in the roster to send him a file
........
r5027 | asterix | 2006-01-07 06:26:28 -0700 (Sat, 07 Jan 2006) | 2 lines
contact.groups is always a list, even if emtpy
........
r5028 | asterix | 2006-01-07 06:54:30 -0700 (Sat, 07 Jan 2006) | 2 lines
make all buttons insensitive on a category row in disco
........
r5029 | asterix | 2006-01-07 07:19:25 -0700 (Sat, 07 Jan 2006) | 2 lines
auto open groupchat configuration window when we create a new room
........
2006-01-07 18:25:35 +01:00
' GMAIL_NOTIFY ' : self . handle_event_gmail_notify ,
2005-08-09 19:21:35 +02:00
' FILE_REQUEST_ERROR ' : self . handle_event_file_request_error ,
' FILE_SEND_ERROR ' : self . handle_event_file_send_error ,
' STANZA_ARRIVED ' : self . handle_event_stanza_arrived ,
' STANZA_SENT ' : self . handle_event_stanza_sent ,
' HTTP_AUTH ' : self . handle_event_http_auth ,
2005-09-10 11:25:06 +02:00
' VCARD_PUBLISHED ' : self . handle_event_vcard_published ,
' VCARD_NOT_PUBLISHED ' : self . handle_event_vcard_not_published ,
2005-09-27 00:29:52 +02:00
' ASK_NEW_NICK ' : self . handle_event_ask_new_nick ,
2005-11-27 13:42:42 +01:00
' SIGNED_IN ' : self . handle_event_signed_in ,
2006-01-26 12:23:15 +01:00
' META_CONTACTS ' : self . handle_event_meta_contacts ,
2005-08-09 19:21:35 +02:00
}
2006-02-03 13:17:34 +01:00
gajim . handlers = self . handlers
2005-08-09 20:45:16 +02:00
2005-04-14 13:06:58 +02:00
def process_connections ( self ) :
2006-02-06 01:11:45 +01:00
''' called each foo (200) miliseconds. Check for idlequeue timeouts.
2006-02-03 13:17:34 +01:00
'''
gajim . idlequeue . process ( )
2005-12-01 19:03:05 +01:00
return True # renew timeout (loop for ever)
2005-04-14 13:06:58 +02:00
2005-04-16 19:03:21 +02:00
def save_config ( self ) :
2005-11-22 11:56:25 +01:00
err_str = parser . write ( )
if err_str is not None :
print >> sys . stderr , err_str
2005-08-23 11:32:44 +02:00
# it is good to notify the user
2005-11-12 15:17:27 +01:00
# in case he or she cannot see the output of the console
2005-11-22 11:56:25 +01:00
dialogs . ErrorDialog ( _ ( ' Could not save your settings and preferences ' ) ,
err_str ) . get_response ( )
2005-12-01 19:03:05 +01:00
sys . exit ( )
2005-04-16 19:03:21 +02:00
2005-12-11 11:31:42 +01:00
def handle_event ( self , account , jid , typ ) :
w = None
2006-01-06 07:59:55 +01:00
if typ == message_control . TYPE_GC :
2006-03-15 09:40:19 +01:00
w = self . msg_win_mgr . get_window ( jid , account )
2006-01-06 07:59:55 +01:00
elif typ == message_control . TYPE_CHAT :
2006-03-15 09:40:19 +01:00
if self . msg_win_mgr . has_window ( jid , account ) :
w = self . msg_win_mgr . get_window ( jid , account )
2005-12-11 11:31:42 +01:00
else :
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
contact = gajim . contacts . get_first_contact_from_jid ( account , jid )
self . roster . new_chat ( contact , account )
2006-03-15 09:40:19 +01:00
w = self . msg_win_mgr . get_window ( jid , account )
2006-03-14 18:13:34 +01:00
ctrl = w . get_control
gajim . last_message_time [ account ] [ jid ] = 0 # long time ago
2006-01-06 07:59:55 +01:00
elif typ == message_control . TYPE_PM :
2006-03-15 09:40:19 +01:00
if self . msg_win_mgr . has_window ( jid , account ) :
w = self . msg_win_mgr . get_window ( jid , account )
2005-12-11 11:31:42 +01:00
else :
room_jid , nick = jid . split ( ' / ' , 1 )
2006-01-02 02:23:40 +01:00
gc_contact = gajim . contacts . get_gc_contact ( account , room_jid ,
nick )
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
if gc_contact :
show = gc_contact . show
2005-12-13 22:26:31 +01:00
else :
2005-12-13 22:28:02 +01:00
show = ' offline '
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
gc_contact = gajim . contacts . create_gc_contact ( room_jid = room_jid ,
name = nick , show = show )
2006-01-17 23:03:56 +01:00
c = gajim . contacts . contact_from_gc_contact ( gc_contact )
2006-01-06 07:59:55 +01:00
self . roster . new_chat ( c , account , private_chat = True )
2006-03-15 09:40:19 +01:00
w = self . msg_win_mgr . get_window ( jid , account )
2005-12-11 11:31:42 +01:00
elif typ in ( ' normal ' , ' file-request ' , ' file-request-error ' ,
' file-send-error ' , ' file-error ' , ' file-stopped ' , ' file-completed ' ) :
# Get the first single message event
ev = gajim . get_first_event ( account , jid , typ )
# Open the window
self . roster . open_event ( account , jid , ev )
2006-01-28 04:46:47 +01:00
elif typ == ' gmail ' :
2006-01-17 21:23:36 +01:00
if gajim . config . get_per ( ' accounts ' , account , ' savepass ' ) :
url = ( ' http://www.google.com/accounts/ServiceLoginAuth?service=mail&Email= %s &Passwd= %s &continue=https://mail.google.com/mail ' ) % ( gajim . config . get_per ( ' accounts ' , account , ' name ' ) , gajim . config . get_per ( ' accounts ' , account , ' password ' ) )
else :
url = ( ' http://mail.google.com/ ' )
helpers . launch_browser_mailer ( ' url ' , url )
2005-12-11 11:31:42 +01:00
if w :
2006-01-25 03:43:55 +01:00
w . set_active_tab ( jid , account )
2005-12-11 11:31:42 +01:00
w . window . present ( )
w . window . window . focus ( )
2006-01-25 03:43:55 +01:00
ctrl = w . get_control ( jid , account )
2006-01-06 07:59:55 +01:00
# Using isinstance here because we want to catch all derived types
2006-01-12 00:21:00 +01:00
if isinstance ( ctrl , ChatControlBase ) :
tv = ctrl . conv_textview
2006-01-06 07:59:55 +01:00
tv . scroll_to_end ( )
2005-12-11 11:31:42 +01:00
2005-04-12 23:09:06 +02:00
def __init__ ( self ) :
2005-10-20 13:17:17 +02:00
gajim . interface = self
2005-12-31 07:27:22 +01:00
# This is the manager and factory of message windows set by the module
self . msg_win_mgr = None
2005-04-29 11:47:09 +02:00
self . default_values = {
' inmsgcolor ' : gajim . config . get ( ' inmsgcolor ' ) ,
' outmsgcolor ' : gajim . config . get ( ' outmsgcolor ' ) ,
' statusmsgcolor ' : gajim . config . get ( ' statusmsgcolor ' ) ,
2005-12-26 00:48:08 +01:00
' urlmsgcolor ' : gajim . config . get ( ' urlmsgcolor ' ) ,
2005-04-29 11:47:09 +02:00
}
2005-10-03 18:14:41 +02:00
2005-04-29 11:47:09 +02:00
parser . read ( )
2005-06-13 18:53:23 +02:00
# Do not set gajim.verbose to False if -v option was given
if gajim . config . get ( ' verbose ' ) :
gajim . verbose = True
2005-06-14 00:11:09 +02:00
#add default status messages if there is not in the config file
2005-06-01 22:03:37 +02:00
if len ( gajim . config . get_per ( ' statusmsg ' ) ) == 0 :
for msg in gajim . config . statusmsg_default :
gajim . config . add_per ( ' statusmsg ' , msg )
2005-12-01 19:03:05 +01:00
gajim . config . set_per ( ' statusmsg ' , msg , ' message ' ,
gajim . config . statusmsg_default [ msg ] )
2005-06-14 00:11:09 +02:00
#add default themes if there is not in the config file
2005-09-02 16:03:00 +02:00
theme = gajim . config . get ( ' roster_theme ' )
if not theme in gajim . config . get_per ( ' themes ' ) :
2005-10-29 18:56:33 +02:00
gajim . config . set ( ' roster_theme ' , ' green ' )
2005-06-14 00:11:09 +02:00
if len ( gajim . config . get_per ( ' themes ' ) ) == 0 :
2005-12-01 19:03:05 +01:00
d = [ ' accounttextcolor ' , ' accountbgcolor ' , ' accountfont ' ,
' accountfontattrs ' , ' grouptextcolor ' , ' groupbgcolor ' , ' groupfont ' ,
' groupfontattrs ' , ' contacttextcolor ' , ' contactbgcolor ' ,
' contactfont ' , ' contactfontattrs ' , ' bannertextcolor ' ,
' bannerbgcolor ' ]
2005-11-15 12:52:40 +01:00
2005-06-14 00:11:09 +02:00
default = gajim . config . themes_default
2005-08-12 02:08:04 +02:00
for theme_name in default :
gajim . config . add_per ( ' themes ' , theme_name )
theme = default [ theme_name ]
2005-06-14 00:11:09 +02:00
for o in d :
2005-08-12 02:08:04 +02:00
gajim . config . set_per ( ' themes ' , theme_name , o ,
theme [ d . index ( o ) ] )
2005-07-25 16:38:21 +02:00
if gajim . config . get ( ' autodetect_browser_mailer ' ) :
2005-08-05 01:11:55 +02:00
gtkgui_helpers . autodetect_browser_mailer ( )
2005-07-25 16:38:21 +02:00
2005-05-28 20:20:27 +02:00
if gajim . verbose :
2005-05-18 11:17:41 +02:00
gajim . log . setLevel ( gajim . logging . DEBUG )
2005-05-18 09:38:47 +02:00
else :
gajim . log . setLevel ( None )
2006-02-03 23:54:05 +01:00
# pygtk2.8 on win, breaks io_add_watch. We use good old select.select()
if os . name == ' nt ' and gtk . pygtk_version > ( 2 , 8 , 0 ) :
gajim . idlequeue = idlequeue . SelectIdleQueue ( )
else :
# in a nongui implementation, just call:
# gajim.idlequeue = IdleQueue() , and
# gajim.idlequeue.process() each foo miliseconds
gajim . idlequeue = GlibIdleQueue ( )
2006-02-03 13:17:34 +01:00
# resolve and keep current record of resolved hosts
gajim . resolver = nslookup . Resolver ( gajim . idlequeue )
2006-02-06 01:11:45 +01:00
gajim . socks5queue = socks5 . SocksQueue ( gajim . idlequeue ,
self . handle_event_file_rcv_completed ,
self . handle_event_file_progress )
2005-11-10 11:16:25 +01:00
self . register_handlers ( )
2005-04-29 11:47:09 +02:00
for account in gajim . config . get_per ( ' accounts ' ) :
gajim . connections [ account ] = common . connection . Connection ( account )
2005-07-17 23:41:54 +02:00
2005-09-11 15:56:38 +02:00
gtk . about_dialog_set_email_hook ( self . on_launch_browser_mailer , ' mail ' )
gtk . about_dialog_set_url_hook ( self . on_launch_browser_mailer , ' url ' )
2005-10-03 18:14:41 +02:00
2005-11-13 16:08:47 +01:00
self . instances = { ' logs ' : { } }
2005-10-03 18:14:41 +02:00
2005-04-12 23:09:06 +02:00
for a in gajim . connections :
2005-11-13 16:08:47 +01:00
self . instances [ a ] = { ' infos ' : { } , ' disco ' : { } , ' chats ' : { } ,
2005-10-30 10:58:13 +01:00
' gc ' : { } , ' gc_config ' : { } }
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
gajim . contacts . add_account ( a )
2005-07-18 23:08:31 +02:00
gajim . groups [ a ] = { }
2005-08-03 11:23:36 +02:00
gajim . gc_connected [ a ] = { }
2005-07-18 23:08:31 +02:00
gajim . newly_added [ a ] = [ ]
gajim . to_be_removed [ a ] = [ ]
2005-10-15 22:49:08 +02:00
gajim . awaiting_events [ a ] = { }
2005-07-18 23:08:31 +02:00
gajim . nicks [ a ] = gajim . config . get_per ( ' accounts ' , a , ' name ' )
gajim . allow_notifications [ a ] = False
gajim . sleeper_state [ a ] = 0
2005-07-02 13:06:02 +02:00
gajim . encrypted_chats [ a ] = [ ]
2005-07-03 17:27:41 +02:00
gajim . last_message_time [ a ] = { }
2005-07-22 23:27:04 +02:00
gajim . status_before_autoaway [ a ] = ' '
2005-04-12 17:30:09 +02:00
2005-10-20 13:17:17 +02:00
self . roster = roster_window . RosterWindow ( )
2005-11-19 23:01:10 +01:00
2005-11-19 22:45:34 +01:00
if gajim . config . get ( ' remote_control ' ) :
2005-11-19 23:01:10 +01:00
try :
import remote_control
self . remote_ctrl = remote_control . Remote ( )
2005-12-10 13:28:56 +01:00
except :
2005-11-19 23:01:10 +01:00
self . remote_ctrl = None
2005-07-17 23:41:54 +02:00
else :
2005-11-19 23:01:10 +01:00
self . remote_ctrl = None
2005-07-21 10:05:10 +02:00
2005-11-07 16:43:47 +01:00
self . show_vcard_when_connect = [ ]
2005-06-03 19:35:48 +02:00
path_to_file = os . path . join ( gajim . DATA_DIR , ' pixmaps/gajim.png ' )
pix = gtk . gdk . pixbuf_new_from_file ( path_to_file )
gtk . window_set_default_icon ( pix ) # set the icon to all newly opened windows
self . roster . window . set_icon_from_file ( path_to_file ) # and to roster window
self . sleeper = common . sleepy . Sleepy (
2005-09-11 01:44:53 +02:00
gajim . config . get ( ' autoawaytime ' ) * 60 , # make minutes to seconds
2005-04-22 01:20:18 +02:00
gajim . config . get ( ' autoxatime ' ) * 60 )
2005-08-11 15:20:46 +02:00
2005-03-28 03:20:47 +02:00
self . systray_enabled = False
2005-08-11 15:20:46 +02:00
self . systray_capabilities = False
2005-08-23 20:03:18 +02:00
if os . name == ' nt ' :
try :
import systraywin32
except : # user doesn't have trayicon capabilities
pass
else :
self . systray_capabilities = True
2005-10-20 13:17:17 +02:00
self . systray = systraywin32 . SystrayWin32 ( )
2005-08-11 15:20:46 +02:00
else :
2005-03-14 14:25:34 +01:00
try :
2005-08-11 15:20:46 +02:00
import egg . trayicon # use gnomepythonextras trayicon
except :
try :
import trayicon # use the one we distribute
except : # user doesn't have trayicon capabilities
pass
else :
self . systray_capabilities = True
2005-10-20 13:17:17 +02:00
self . systray = systray . Systray ( )
2005-03-14 18:39:18 +01:00
else :
2005-03-29 18:16:42 +02:00
self . systray_capabilities = True
2005-10-20 13:17:17 +02:00
self . systray = systray . Systray ( )
2005-08-11 15:20:46 +02:00
2005-06-06 01:17:59 +02:00
if self . systray_capabilities and gajim . config . get ( ' trayicon ' ) :
2004-12-14 13:57:45 +01:00
self . show_systray ( )
2005-04-17 01:15:03 +02:00
2005-11-15 12:52:40 +01:00
self . init_emoticons ( )
self . make_regexps ( )
2005-03-26 22:09:49 +01:00
# get instances for windows/dialogs that will show_all()/hide()
2005-11-13 16:08:47 +01:00
self . instances [ ' file_transfers ' ] = dialogs . FileTransfersWindow ( )
2005-04-14 09:58:54 +02:00
for account in gajim . connections :
2005-12-01 19:03:05 +01:00
self . instances [ account ] [ ' xml_console ' ] = dialogs . XMLConsoleWindow (
account )
2005-03-10 19:29:03 +01:00
2005-03-15 11:20:10 +01:00
gobject . timeout_add ( 100 , self . autoconnect )
2005-04-14 19:07:55 +02:00
gobject . timeout_add ( 200 , self . process_connections )
2005-04-18 16:05:30 +02:00
gobject . timeout_add ( 500 , self . read_sleepy )
2003-11-30 23:40:24 +01:00
2005-12-15 13:03:57 +01:00
def test_migration ( migration ) :
if not migration . PROCESSING :
dialog = gtk . Dialog ( )
dialog = gtk . MessageDialog ( None ,
gtk . DIALOG_DESTROY_WITH_PARENT | gtk . DIALOG_MODAL ,
Merged revisions 4987-4989,4991-4996,4999,5003 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4987 | nk | 2006-01-03 04:00:51 -0700 (Tue, 03 Jan 2006) | 1 line
commit 48x48 transport online/offline imgs by Grenshad (I pngcrushed them)
........
r4988 | nk | 2006-01-03 04:32:01 -0700 (Tue, 03 Jan 2006) | 1 line
icon in notification window not always jabber now. MSN if he uses msn etc. thanks stian barmen for helping me test
........
r4989 | nk | 2006-01-03 04:40:44 -0700 (Tue, 03 Jan 2006) | 1 line
all strings I got report about them, are not translatable; pot/po update
........
r4991 | asterix | 2006-01-03 08:08:21 -0700 (Tue, 03 Jan 2006) | 2 lines
don't remove the jid entry in _contacts[account] when we remove a contact
........
r4992 | asterix | 2006-01-03 08:18:30 -0700 (Tue, 03 Jan 2006) | 2 lines
fix logic
........
r4993 | asterix | 2006-01-03 09:04:14 -0700 (Tue, 03 Jan 2006) | 2 lines
a GC_Contact can have a resource if we knoe his real JID
........
r4994 | asterix | 2006-01-03 09:32:58 -0700 (Tue, 03 Jan 2006) | 2 lines
missing argument in create_gc_contact
........
r4995 | asterix | 2006-01-03 10:36:41 -0700 (Tue, 03 Jan 2006) | 2 lines
we save gc_contact vcard instance in instances[self.account]['infos'][Fake_jid]
........
r4996 | asterix | 2006-01-03 11:17:43 -0700 (Tue, 03 Jan 2006) | 2 lines
in DataForm, a field of type 'list-single' can have no <value> element. Create a default one in such a case to prevent TB
........
r4999 | asterix | 2006-01-04 05:52:26 -0700 (Wed, 04 Jan 2006) | 2 lines
prevent TB when we move a contact that was in no group
........
r5003 | asterix | 2006-01-04 09:03:42 -0700 (Wed, 04 Jan 2006) | 2 lines
handle correctly unlabeled option values in DataForms
........
2006-01-05 04:17:36 +01:00
gtk . MESSAGE_ERROR , gtk . BUTTONS_OK ,
message_format = _ ( ' GUI Migration failed ' ) )
2005-12-15 13:03:57 +01:00
Merged revisions 4987-4989,4991-4996,4999,5003 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4987 | nk | 2006-01-03 04:00:51 -0700 (Tue, 03 Jan 2006) | 1 line
commit 48x48 transport online/offline imgs by Grenshad (I pngcrushed them)
........
r4988 | nk | 2006-01-03 04:32:01 -0700 (Tue, 03 Jan 2006) | 1 line
icon in notification window not always jabber now. MSN if he uses msn etc. thanks stian barmen for helping me test
........
r4989 | nk | 2006-01-03 04:40:44 -0700 (Tue, 03 Jan 2006) | 1 line
all strings I got report about them, are not translatable; pot/po update
........
r4991 | asterix | 2006-01-03 08:08:21 -0700 (Tue, 03 Jan 2006) | 2 lines
don't remove the jid entry in _contacts[account] when we remove a contact
........
r4992 | asterix | 2006-01-03 08:18:30 -0700 (Tue, 03 Jan 2006) | 2 lines
fix logic
........
r4993 | asterix | 2006-01-03 09:04:14 -0700 (Tue, 03 Jan 2006) | 2 lines
a GC_Contact can have a resource if we knoe his real JID
........
r4994 | asterix | 2006-01-03 09:32:58 -0700 (Tue, 03 Jan 2006) | 2 lines
missing argument in create_gc_contact
........
r4995 | asterix | 2006-01-03 10:36:41 -0700 (Tue, 03 Jan 2006) | 2 lines
we save gc_contact vcard instance in instances[self.account]['infos'][Fake_jid]
........
r4996 | asterix | 2006-01-03 11:17:43 -0700 (Tue, 03 Jan 2006) | 2 lines
in DataForm, a field of type 'list-single' can have no <value> element. Create a default one in such a case to prevent TB
........
r4999 | asterix | 2006-01-04 05:52:26 -0700 (Wed, 04 Jan 2006) | 2 lines
prevent TB when we move a contact that was in no group
........
r5003 | asterix | 2006-01-04 09:03:42 -0700 (Wed, 04 Jan 2006) | 2 lines
handle correctly unlabeled option values in DataForms
........
2006-01-05 04:17:36 +01:00
dialog . format_secondary_text (
_ ( ' Logs migration through graphical interface failed. The migration process will start in the background. Please wait a few minutes for Gajim to start. ' ) )
2005-12-15 13:03:57 +01:00
dialog . run ( )
dialog . destroy ( )
2005-12-15 20:12:13 +01:00
gtk . main_quit ( )
2005-12-15 13:03:57 +01:00
2005-12-05 12:13:08 +01:00
def wait_migration ( migration ) :
if not migration . DONE :
2005-12-06 00:25:02 +01:00
return True # loop for ever
2005-12-05 12:13:08 +01:00
dialog . done ( _ ( ' Logs have been successfully migrated to the database. ' ) )
dialog . dialog . run ( )
dialog . dialog . destroy ( )
gtk . main_quit ( )
2005-04-12 23:09:06 +02:00
if __name__ == ' __main__ ' :
2005-04-18 16:05:30 +02:00
signal . signal ( signal . SIGINT , signal . SIG_DFL ) # ^C exits the application
2005-10-10 15:12:28 +02:00
if os . name != ' nt ' :
2005-10-10 15:15:32 +02:00
# Session Management support
2005-10-10 15:12:28 +02:00
try :
import gnome . ui
except ImportError :
print >> sys . stderr , _ ( ' Session Management support not available (missing gnome.ui module) ' )
else :
def die_cb ( cli ) :
gtk . main_quit ( )
gnome . program_init ( ' gajim ' , gajim . version )
cli = gnome . ui . master_client ( )
cli . connect ( ' die ' , die_cb )
path_to_gajim_script = gtkgui_helpers . get_abspath_for_script ( ' gajim ' )
2005-09-07 23:12:30 +02:00
if path_to_gajim_script :
2005-10-10 15:12:28 +02:00
argv = [ path_to_gajim_script ]
# FIXME: remove this typeerror catch when gnome python is old and
# not bad patched by distro men [2.12.0 + should not need all that
# NORMALLY]
try :
cli . set_restart_command ( argv )
except TypeError :
cli . set_restart_command ( len ( argv ) , argv )
2005-10-13 21:44:33 +02:00
2006-01-20 18:36:22 +01:00
gtkgui_helpers . possibly_set_gajim_as_xmpp_handler ( )
2005-09-07 23:12:30 +02:00
2005-12-06 00:25:02 +01:00
# Migrate old logs if we have such olds logs
2005-12-05 12:13:08 +01:00
from common import logger
LOG_DB_PATH = logger . LOG_DB_PATH
2005-12-06 00:25:02 +01:00
if not os . path . exists ( LOG_DB_PATH ) :
2005-12-05 12:13:08 +01:00
from common import migrate_logs_to_dot9_db
2005-12-06 00:25:02 +01:00
if os . path . isdir ( migrate_logs_to_dot9_db . PATH_TO_LOGS_BASE_DIR ) :
import Queue
q = Queue . Queue ( 100 )
m = migrate_logs_to_dot9_db . Migration ( )
2006-02-08 03:27:14 +01:00
dialog = dialogs . ProgressDialog ( _ ( ' Migrating Logs... ' ) ,
_ ( ' Please wait while logs are being migrated... ' ) , q )
2005-12-06 00:25:02 +01:00
t = threading . Thread ( target = m . migrate , args = ( q , ) )
t . start ( )
2005-12-15 20:12:13 +01:00
id = gobject . timeout_add ( 500 , wait_migration , m )
# In 1 seconds, we test if migration began
gobject . timeout_add ( 1000 , test_migration , m )
2005-12-06 00:25:02 +01:00
gtk . main ( )
2005-12-15 20:12:13 +01:00
if not m . DONE :
# stop test_migration handler
gobject . source_remove ( id )
# destroy the migration window
dialog . dialog . destroy ( )
# Force GTK to really destroy the window
while gtk . events_pending ( ) :
gtk . main_iteration ( False )
2006-01-11 08:42:30 +01:00
# We can't use a SQLite object in another thread than the one in
# which it was created, so create a new Migration instance
del m
m = migrate_logs_to_dot9_db . Migration ( )
2005-12-15 20:12:13 +01:00
m . migrate ( )
2005-12-07 21:20:48 +01:00
# Init logger values (self.con/cur, jid_already_in)
2005-12-08 10:46:59 +01:00
gajim . logger . init_vars ( )
2005-12-02 18:19:04 +01:00
check_paths . check_and_possibly_create_paths ( )
2005-12-02 12:18:00 +01:00
2005-04-18 16:05:30 +02:00
Interface ( )
2005-04-12 23:09:06 +02:00
gtk . main ( )