2005-04-13 09:41:44 +00:00
## config.py
2004-05-15 16:50:38 +00:00
##
2005-12-09 17:15:30 +00:00
## Contributors for this file:
2005-03-29 16:37:59 +00:00
## - Yann Le Boulanger <asterix@lagaule.org>
## - Nikos Kouremenos <kourem@gmail.com>
2005-12-09 17:18:16 +00:00
## - Vincent Hanquez <tab@snarc.org>
2004-05-15 16:50:38 +00:00
##
2005-12-09 23:30:28 +00: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>
2004-05-15 16:50:38 +00: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.
##
import gtk
2005-03-01 13:46:22 +00:00
import gtk . glade
import gobject
import os
2005-08-30 21:03:23 +00:00
import sys
2005-06-08 22:05:45 +00:00
import common . config
2004-05-28 04:20:30 +00:00
import common . sleepy
2005-04-18 14:05:30 +00:00
2005-07-25 14:38:21 +00:00
import gtkgui_helpers
2005-04-18 14:05:30 +00:00
import dialogs
2005-11-13 20:25:04 +00:00
import vcard
2005-04-18 16:40:10 +00:00
import cell_renderer_image
2005-05-26 00:07:49 +00:00
try :
import gtkspell
2005-11-30 22:22:22 +00:00
HAS_GTK_SPELL = True
2005-05-26 00:07:49 +00:00
except :
2005-11-30 22:22:22 +00:00
HAS_GTK_SPELL = False
2005-05-26 00:07:49 +00:00
2005-06-24 14:28:00 +00:00
from gajim import Contact
2005-08-09 11:34:36 +00:00
from common import helpers
2005-04-14 17:07:55 +00:00
from common import gajim
2005-04-14 07:42:26 +00:00
from common import connection
2004-05-16 23:47:14 +00:00
from common import i18n
2005-04-18 14:05:30 +00:00
2004-05-16 23:47:14 +00:00
_ = i18n . _
APP = i18n . APP
gtk . glade . bindtextdomain ( APP , i18n . DIR )
gtk . glade . textdomain ( APP )
2004-05-15 16:50:38 +00:00
2005-04-21 23:20:18 +00:00
GTKGUI_GLADE = ' gtkgui.glade '
2004-05-15 16:50:38 +00:00
2005-06-10 21:14:16 +00:00
#---------- PreferencesWindow class -------------#
class PreferencesWindow :
2005-04-18 12:17:43 +00:00
''' Class for Preferences window '''
2005-12-06 12:45:32 +00:00
2005-03-29 23:52:26 +00:00
def on_preferences_window_delete_event ( self , widget , event ) :
2005-03-26 21:09:49 +00:00
self . window . hide ( )
2005-03-29 23:52:26 +00:00
return True # do NOT destroy the window
2005-12-06 12:45:32 +00:00
2005-03-26 21:09:49 +00:00
def on_close_button_clicked ( self , widget ) :
2005-04-12 15:30:09 +00:00
self . window . hide ( )
2005-03-29 23:52:26 +00:00
2005-10-20 11:17:17 +00:00
def __init__ ( self ) :
2005-05-10 15:39:35 +00:00
''' Initialize Preferences window '''
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' preferences_window ' , APP )
self . window = self . xml . get_widget ( ' preferences_window ' )
self . iconset_combobox = self . xml . get_widget ( ' iconset_combobox ' )
2005-12-01 18:16:30 +00:00
self . notify_on_new_message_radiobutton = self . xml . get_widget (
' notify_on_new_message_radiobutton ' )
self . popup_new_message_radiobutton = self . xml . get_widget (
' popup_new_message_radiobutton ' )
self . notify_on_signin_checkbutton = self . xml . get_widget (
' notify_on_signin_checkbutton ' )
self . notify_on_signout_checkbutton = self . xml . get_widget (
' notify_on_signout_checkbutton ' )
self . auto_popup_away_checkbutton = self . xml . get_widget (
' auto_popup_away_checkbutton ' )
2005-05-10 15:39:35 +00:00
self . auto_away_checkbutton = self . xml . get_widget ( ' auto_away_checkbutton ' )
2005-12-01 18:16:30 +00:00
self . auto_away_time_spinbutton = self . xml . get_widget (
' auto_away_time_spinbutton ' )
self . auto_away_message_entry = self . xml . get_widget (
' auto_away_message_entry ' )
2005-05-10 15:39:35 +00:00
self . auto_xa_checkbutton = self . xml . get_widget ( ' auto_xa_checkbutton ' )
2005-08-16 20:24:56 +00:00
self . auto_xa_time_spinbutton = self . xml . get_widget (
' auto_xa_time_spinbutton ' )
2005-08-06 15:17:20 +00:00
self . auto_xa_message_entry = self . xml . get_widget ( ' auto_xa_message_entry ' )
2005-05-10 15:39:35 +00:00
self . trayicon_checkbutton = self . xml . get_widget ( ' trayicon_checkbutton ' )
self . notebook = self . xml . get_widget ( ' preferences_notebook ' )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
#trayicon
2005-10-20 11:17:17 +00:00
if gajim . interface . systray_capabilities :
2005-05-10 15:39:35 +00:00
st = gajim . config . get ( ' trayicon ' )
self . trayicon_checkbutton . set_active ( st )
2005-04-29 15:01:44 +00:00
else :
2005-08-16 20:24:56 +00:00
self . trayicon_checkbutton . set_sensitive ( False )
2005-04-12 15:30:09 +00:00
2005-05-10 15:39:35 +00:00
#Save position
st = gajim . config . get ( ' saveposition ' )
self . xml . get_widget ( ' save_position_checkbutton ' ) . set_active ( st )
2005-12-06 12:45:32 +00:00
2005-05-29 18:41:13 +00:00
# Sort contacts by show
st = gajim . config . get ( ' sort_by_show ' )
self . xml . get_widget ( ' sort_by_show_checkbutton ' ) . set_active ( st )
2005-12-06 12:45:32 +00:00
2005-11-08 13:04:59 +00:00
# Display avatars in roster
st = gajim . config . get ( ' show_avatars_in_roster ' )
self . xml . get_widget ( ' show_avatars_in_roster_checkbutton ' ) . set_active ( st )
2005-12-06 12:45:32 +00:00
2005-11-06 14:30:17 +00:00
# Display status msg under contact name in roster
st = gajim . config . get ( ' show_status_msgs_in_roster ' )
2005-12-01 18:16:30 +00:00
self . xml . get_widget ( ' show_status_msgs_in_roster_checkbutton ' ) . set_active (
st )
2005-12-06 12:45:32 +00:00
2005-05-29 18:41:13 +00:00
2005-05-10 15:39:35 +00:00
#Use emoticons
st = gajim . config . get ( ' useemoticons ' )
self . xml . get_widget ( ' use_emoticons_checkbutton ' ) . set_active ( st )
self . xml . get_widget ( ' add_remove_emoticons_button ' ) . set_sensitive ( st )
2005-03-26 21:09:49 +00:00
2005-05-10 15:39:35 +00:00
#iconset
2005-06-09 22:29:06 +00:00
iconsets_list = os . listdir ( os . path . join ( gajim . DATA_DIR , ' iconsets ' ) )
2005-06-21 15:54:18 +00:00
# new model, image in 0, string in 1
model = gtk . ListStore ( gtk . Image , str )
renderer_image = cell_renderer_image . CellRendererImage ( )
renderer_text = gtk . CellRendererText ( )
2005-06-23 16:31:35 +00:00
renderer_text . set_property ( ' xpad ' , 5 )
2005-12-01 18:16:30 +00:00
self . iconset_combobox . pack_start ( renderer_image , expand = False )
self . iconset_combobox . pack_start ( renderer_text , expand = True )
self . iconset_combobox . set_attributes ( renderer_text , text = 1 )
2005-06-21 15:54:18 +00:00
self . iconset_combobox . add_attribute ( renderer_image , ' image ' , 0 )
2005-05-10 15:39:35 +00:00
self . iconset_combobox . set_model ( model )
l = [ ]
for dir in iconsets_list :
if dir != ' .svn ' and dir != ' transports ' :
l . append ( dir )
if l . count == 0 :
l . append ( ' ' )
2005-10-27 12:47:54 +00:00
for i in xrange ( len ( l ) ) :
2005-06-21 15:54:18 +00:00
preview = gtk . Image ( )
files = [ ]
files . append ( os . path . join ( gajim . DATA_DIR , ' iconsets ' , l [ i ] , ' 16x16 ' , ' online.png ' ) )
files . append ( os . path . join ( gajim . DATA_DIR , ' iconsets ' , l [ i ] , ' 16x16 ' , ' online.gif ' ) )
for file in files :
if os . path . exists ( file ) :
preview . set_from_file ( file )
model . append ( [ preview , l [ i ] ] )
2005-05-10 15:39:35 +00:00
if gajim . config . get ( ' iconset ' ) == l [ i ] :
self . iconset_combobox . set_active ( i )
2005-05-25 17:13:50 +00:00
# Use transports iconsets
st = gajim . config . get ( ' use_transports_iconsets ' )
self . xml . get_widget ( ' transports_iconsets_checkbutton ' ) . set_active ( st )
2005-08-07 15:32:35 +00:00
# Themes
2005-05-10 15:39:35 +00:00
theme_combobox = self . xml . get_widget ( ' theme_combobox ' )
cell = gtk . CellRendererText ( )
theme_combobox . pack_start ( cell , True )
2005-12-06 12:45:32 +00:00
theme_combobox . add_attribute ( cell , ' text ' , 0 )
2005-06-18 13:48:43 +00:00
model = gtk . ListStore ( str )
2005-05-10 15:39:35 +00:00
theme_combobox . set_model ( model )
#use tabbed chat window
st = gajim . config . get ( ' usetabbedchat ' )
self . xml . get_widget ( ' use_tabbed_chat_window_checkbutton ' ) . set_active ( st )
2005-12-06 12:45:32 +00:00
2005-05-26 00:07:49 +00:00
#use speller
2005-06-04 12:52:16 +00:00
if os . name == ' nt ' :
self . xml . get_widget ( ' speller_checkbutton ' ) . set_no_show_all ( True )
2005-05-26 00:07:49 +00:00
else :
2005-11-30 22:22:22 +00:00
if HAS_GTK_SPELL :
2005-06-04 12:52:16 +00:00
st = gajim . config . get ( ' use_speller ' )
self . xml . get_widget ( ' speller_checkbutton ' ) . set_active ( st )
else :
self . xml . get_widget ( ' speller_checkbutton ' ) . set_sensitive ( False )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
#Print time
2005-07-24 20:29:32 +00:00
st = gajim . config . get ( ' print_ichat_every_foo_minutes ' )
text = _ ( ' Every %s _minutes ' ) % st
self . xml . get_widget ( ' time_sometimes_radiobutton ' ) . set_label ( text )
2005-05-10 15:39:35 +00:00
if gajim . config . get ( ' print_time ' ) == ' never ' :
self . xml . get_widget ( ' time_never_radiobutton ' ) . set_active ( True )
elif gajim . config . get ( ' print_time ' ) == ' sometimes ' :
self . xml . get_widget ( ' time_sometimes_radiobutton ' ) . set_active ( True )
2005-04-17 09:05:58 +00:00
else :
2005-05-10 15:39:35 +00:00
self . xml . get_widget ( ' time_always_radiobutton ' ) . set_active ( True )
2005-04-17 09:05:58 +00:00
2005-05-10 15:39:35 +00:00
#before time
st = gajim . config . get ( ' before_time ' )
self . xml . get_widget ( ' before_time_entry ' ) . set_text ( st )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
#after time
st = gajim . config . get ( ' after_time ' )
self . xml . get_widget ( ' after_time_entry ' ) . set_text ( st )
2005-03-06 15:14:34 +00:00
2005-05-10 15:39:35 +00:00
#before nickname
st = gajim . config . get ( ' before_nickname ' )
self . xml . get_widget ( ' before_nickname_entry ' ) . set_text ( st )
2005-03-06 15:14:34 +00:00
2005-05-10 15:39:35 +00:00
#after nickanme
st = gajim . config . get ( ' after_nickname ' )
self . xml . get_widget ( ' after_nickname_entry ' ) . set_text ( st )
2005-03-06 15:14:34 +00:00
2005-05-10 15:39:35 +00:00
#Color for incomming messages
colSt = gajim . config . get ( ' inmsgcolor ' )
2005-06-04 12:52:16 +00:00
self . xml . get_widget ( ' incoming_msg_colorbutton ' ) . set_color (
2005-05-10 15:39:35 +00:00
gtk . gdk . color_parse ( colSt ) )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
#Color for outgoing messages
colSt = gajim . config . get ( ' outmsgcolor ' )
2005-06-04 12:52:16 +00:00
self . xml . get_widget ( ' outgoing_msg_colorbutton ' ) . set_color (
2005-05-10 15:39:35 +00:00
gtk . gdk . color_parse ( colSt ) )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
#Color for status messages
colSt = gajim . config . get ( ' statusmsgcolor ' )
2005-06-04 12:52:16 +00:00
self . xml . get_widget ( ' status_msg_colorbutton ' ) . set_color (
2005-05-10 15:39:35 +00:00
gtk . gdk . color_parse ( colSt ) )
2005-04-22 01:05:31 +00:00
2005-08-07 18:58:36 +00:00
#Font for messages
font = gajim . config . get ( ' conversation_font ' )
2005-08-11 22:06:26 +00:00
# try to set default font for the current desktop env
if font == ' ' :
font = gtkgui_helpers . get_default_font ( )
if font is None :
font = ' Sans 10 '
2005-08-26 12:08:14 +00:00
gajim . config . set ( ' conversation_font ' , font )
2005-08-07 18:58:36 +00:00
self . xml . get_widget ( ' conversation_fontbutton ' ) . set_font_name ( font )
2005-05-10 15:39:35 +00:00
# on new message
only_in_roster = True
if gajim . config . get ( ' notify_on_new_message ' ) :
2005-07-21 21:03:36 +00:00
self . xml . get_widget ( ' notify_on_new_message_radiobutton ' ) . set_active (
True )
2005-05-10 15:39:35 +00:00
only_in_roster = False
if gajim . config . get ( ' autopopup ' ) :
self . xml . get_widget ( ' popup_new_message_radiobutton ' ) . set_active ( True )
only_in_roster = False
if only_in_roster :
self . xml . get_widget ( ' only_in_roster_radiobutton ' ) . set_active ( True )
2005-04-29 15:01:44 +00:00
2005-05-10 15:39:35 +00:00
#notify on online statuses
2005-05-21 13:46:23 +00:00
st = gajim . config . get ( ' notify_on_signin ' )
self . notify_on_signin_checkbutton . set_active ( st )
2005-05-10 15:39:35 +00:00
#notify on offline statuses
2005-05-21 13:46:23 +00:00
st = gajim . config . get ( ' notify_on_signout ' )
self . notify_on_signout_checkbutton . set_active ( st )
2005-05-10 15:39:35 +00:00
#autopopupaway
st = gajim . config . get ( ' autopopupaway ' )
self . auto_popup_away_checkbutton . set_active ( st )
#Ignore messages from unknown contacts
self . xml . get_widget ( ' ignore_events_from_unknown_contacts_checkbutton ' ) . \
set_active ( gajim . config . get ( ' ignore_unknown_contacts ' ) )
2005-12-06 12:45:32 +00:00
2005-07-19 22:57:37 +00:00
# send chat state notifications
2005-08-07 20:58:44 +00:00
st = gajim . config . get ( ' chat_state_notifications ' )
combo = self . xml . get_widget ( ' chat_states_combobox ' )
2005-08-09 13:27:31 +00:00
if st == ' all ' :
2005-08-08 21:12:58 +00:00
combo . set_active ( 0 )
2005-08-09 13:27:31 +00:00
elif st == ' composing_only ' :
combo . set_active ( 1 )
2005-08-07 20:58:44 +00:00
else : # disabled
2005-08-09 13:27:31 +00:00
combo . set_active ( 2 )
2005-05-10 15:39:35 +00:00
#sounds
2005-05-17 15:04:54 +00:00
if os . name == ' nt ' : # if windows, player must not become visible on show_all
2005-05-28 22:42:08 +00:00
soundplayer_hbox = self . xml . get_widget ( ' soundplayer_hbox ' )
soundplayer_hbox . set_no_show_all ( True )
2005-05-10 15:39:35 +00:00
if gajim . config . get ( ' sounds_on ' ) :
self . xml . get_widget ( ' play_sounds_checkbutton ' ) . set_active ( True )
else :
self . xml . get_widget ( ' soundplayer_hbox ' ) . set_sensitive ( False )
self . xml . get_widget ( ' sounds_scrolledwindow ' ) . set_sensitive ( False )
self . xml . get_widget ( ' browse_sounds_hbox ' ) . set_sensitive ( False )
2005-08-09 11:34:36 +00:00
# sound player
player = gajim . config . get ( ' soundplayer ' )
2005-08-25 20:31:49 +00:00
self . xml . get_widget ( ' soundplayer_entry ' ) . set_text ( player )
2005-08-09 11:34:36 +00:00
if player == ' ' : # only on first time Gajim starts
2005-09-06 15:55:27 +00:00
commands = ( ' aplay ' , ' play ' , ' esdplay ' , ' artsplay ' )
2005-08-09 11:34:36 +00:00
for command in commands :
if helpers . is_in_path ( command ) :
self . xml . get_widget ( ' soundplayer_entry ' ) . set_text ( command )
2005-08-21 19:09:31 +00:00
gajim . config . set ( ' soundplayer ' , command )
2005-08-09 11:34:36 +00:00
break
2005-05-10 15:39:35 +00:00
#sounds treeview
self . sound_tree = self . xml . get_widget ( ' sounds_treeview ' )
2005-06-18 14:17:26 +00:00
model = gtk . ListStore ( str , bool , str )
2005-05-10 15:39:35 +00:00
self . sound_tree . set_model ( model )
col = gtk . TreeViewColumn ( _ ( ' Active ' ) )
self . sound_tree . append_column ( col )
renderer = gtk . CellRendererToggle ( )
renderer . set_property ( ' activatable ' , True )
renderer . connect ( ' toggled ' , self . sound_toggled_cb )
col . pack_start ( renderer )
col . set_attributes ( renderer , active = 1 )
col = gtk . TreeViewColumn ( _ ( ' Event ' ) )
self . sound_tree . append_column ( col )
renderer = gtk . CellRendererText ( )
col . pack_start ( renderer )
col . set_attributes ( renderer , text = 0 )
col = gtk . TreeViewColumn ( _ ( ' Sound ' ) )
self . sound_tree . append_column ( col )
renderer = gtk . CellRendererText ( )
col . pack_start ( renderer )
col . set_attributes ( renderer , text = 2 )
self . fill_sound_treeview ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
#Autoaway
st = gajim . config . get ( ' autoaway ' )
self . auto_away_checkbutton . set_active ( st )
#Autoawaytime
st = gajim . config . get ( ' autoawaytime ' )
self . auto_away_time_spinbutton . set_value ( st )
self . auto_away_time_spinbutton . set_sensitive ( gajim . config . get ( ' autoaway ' ) )
2005-08-06 15:17:20 +00:00
#autoaway message
st = gajim . config . get ( ' autoaway_message ' )
self . auto_away_message_entry . set_text ( st )
self . auto_away_message_entry . set_sensitive ( gajim . config . get ( ' autoaway ' ) )
2005-05-10 15:39:35 +00:00
#Autoxa
st = gajim . config . get ( ' autoxa ' )
self . auto_xa_checkbutton . set_active ( st )
#Autoxatime
st = gajim . config . get ( ' autoxatime ' )
self . auto_xa_time_spinbutton . set_value ( st )
self . auto_xa_time_spinbutton . set_sensitive ( gajim . config . get ( ' autoxa ' ) )
2005-08-06 15:17:20 +00:00
#autoxa message
st = gajim . config . get ( ' autoxa_message ' )
self . auto_xa_message_entry . set_text ( st )
self . auto_xa_message_entry . set_sensitive ( gajim . config . get ( ' autoxa ' ) )
2005-05-10 15:39:35 +00:00
#ask_status when online / offline
st = gajim . config . get ( ' ask_online_status ' )
self . xml . get_widget ( ' prompt_online_status_message_checkbutton ' ) . \
set_active ( st )
st = gajim . config . get ( ' ask_offline_status ' )
self . xml . get_widget ( ' prompt_offline_status_message_checkbutton ' ) . \
set_active ( st )
#Status messages
self . msg_tree = self . xml . get_widget ( ' msg_treeview ' )
2005-06-18 13:48:43 +00:00
model = gtk . ListStore ( str , str )
2005-05-10 15:39:35 +00:00
self . msg_tree . set_model ( model )
col = gtk . TreeViewColumn ( ' name ' )
self . msg_tree . append_column ( col )
renderer = gtk . CellRendererText ( )
col . pack_start ( renderer , True )
col . set_attributes ( renderer , text = 0 )
renderer . connect ( ' edited ' , self . on_msg_cell_edited )
renderer . set_property ( ' editable ' , True )
self . fill_msg_treeview ( )
buf = self . xml . get_widget ( ' msg_textview ' ) . get_buffer ( )
buf . connect ( ' changed ' , self . on_msg_textview_changed )
#open links with
2005-05-17 15:04:54 +00:00
if os . name == ' nt ' :
2005-08-09 15:30:45 +00:00
self . applications_frame = self . xml . get_widget ( ' applications_frame ' )
self . applications_frame . set_no_show_all ( True )
2005-08-11 11:41:50 +00:00
self . applications_frame . hide ( )
2005-05-17 15:04:54 +00:00
else :
2005-12-06 17:43:21 +00:00
self . applications_combobox = self . xml . get_widget (
' applications_combobox ' )
2005-07-25 14:38:21 +00:00
if gajim . config . get ( ' autodetect_browser_mailer ' ) :
2005-08-09 15:30:45 +00:00
self . applications_combobox . set_active ( 0 )
2005-08-04 23:11:55 +00:00
gtkgui_helpers . autodetect_browser_mailer ( )
2005-07-25 14:38:21 +00:00
# autodetect_browser_mailer is now False.
# so user has 'Always Use GNOME/KDE' or Custom
elif gajim . config . get ( ' openwith ' ) == ' gnome-open ' :
2005-08-09 15:30:45 +00:00
self . applications_combobox . set_active ( 1 )
2005-05-17 15:04:54 +00:00
elif gajim . config . get ( ' openwith ' ) == ' kfmclient exec ' :
2005-08-09 15:30:45 +00:00
self . applications_combobox . set_active ( 2 )
2005-07-25 14:38:21 +00:00
elif gajim . config . get ( ' openwith ' ) == ' custom ' :
2005-08-09 15:30:45 +00:00
self . applications_combobox . set_active ( 3 )
2005-05-17 15:04:54 +00:00
self . xml . get_widget ( ' custom_apps_frame ' ) . set_sensitive ( True )
2005-05-20 15:05:22 +00:00
self . xml . get_widget ( ' custom_browser_entry ' ) . set_text (
2005-05-17 15:04:54 +00:00
gajim . config . get ( ' custombrowser ' ) )
2005-05-20 15:05:22 +00:00
self . xml . get_widget ( ' custom_mail_client_entry ' ) . set_text (
2005-05-17 15:04:54 +00:00
gajim . config . get ( ' custommailapp ' ) )
2005-08-09 15:30:45 +00:00
self . xml . get_widget ( ' custom_file_manager_entry ' ) . set_text (
2005-08-09 15:37:11 +00:00
gajim . config . get ( ' custom_file_manager ' ) )
2005-12-06 12:45:32 +00:00
2005-11-23 23:28:26 +00:00
# log status changes of contacts
st = gajim . config . get ( ' log_contact_status_changes ' )
self . xml . get_widget ( ' log_show_changes_checkbutton ' ) . set_active ( st )
2005-12-06 12:45:32 +00:00
2005-07-17 22:52:15 +00:00
# send os info
2005-05-10 15:39:35 +00:00
st = gajim . config . get ( ' send_os_info ' )
self . xml . get_widget ( ' send_os_info_checkbutton ' ) . set_active ( st )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
self . xml . signal_autoconnect ( self )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
self . sound_tree . get_model ( ) . connect ( ' row-changed ' ,
self . on_sounds_treemodel_row_changed )
self . msg_tree . get_model ( ) . connect ( ' row-changed ' ,
self . on_msg_treemodel_row_changed )
self . msg_tree . get_model ( ) . connect ( ' row-deleted ' ,
self . on_msg_treemodel_row_deleted )
def on_preferences_window_show ( self , widget ) :
2005-07-24 21:05:44 +00:00
self . update_preferences_window ( )
2005-05-10 15:39:35 +00:00
self . notebook . set_current_page ( 0 )
2005-12-06 12:45:32 +00:00
2005-07-24 21:05:44 +00:00
def update_preferences_window ( self ) :
2005-07-24 20:29:32 +00:00
st = gajim . config . get ( ' print_ichat_every_foo_minutes ' )
text = _ ( ' Every %s _minutes ' ) % st
self . xml . get_widget ( ' time_sometimes_radiobutton ' ) . set_label ( text )
2005-08-07 15:32:35 +00:00
#Themes
theme_combobox = self . xml . get_widget ( ' theme_combobox ' )
model = theme_combobox . get_model ( )
model . clear ( )
i = 0
2005-09-01 13:47:50 +00:00
for config_theme in gajim . config . get_per ( ' themes ' ) :
theme = config_theme . replace ( ' _ ' , ' ' )
model . append ( [ theme ] )
if gajim . config . get ( ' roster_theme ' ) == config_theme :
2005-08-07 15:32:35 +00:00
theme_combobox . set_active ( i )
i + = 1
self . on_theme_combobox_changed ( theme_combobox )
2005-07-24 21:05:44 +00:00
#FIXME: move code from __init__ here
2005-05-10 15:39:35 +00:00
def on_preferences_window_key_press_event ( self , widget , event ) :
2005-05-26 00:07:49 +00:00
if event . keyval == gtk . keysyms . Escape :
2005-05-10 15:39:35 +00:00
self . window . hide ( )
2005-10-29 16:56:33 +00:00
def on_checkbutton_toggled ( self , widget , config_name ,
2005-05-10 15:39:35 +00:00
change_sensitivity_widgets = None ) :
gajim . config . set ( config_name , widget . get_active ( ) )
2005-05-26 00:07:49 +00:00
if change_sensitivity_widgets :
2005-05-10 15:39:35 +00:00
for w in change_sensitivity_widgets :
w . set_sensitive ( widget . get_active ( ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-05-10 15:39:35 +00:00
def on_trayicon_checkbutton_toggled ( self , widget ) :
if widget . get_active ( ) :
gajim . config . set ( ' trayicon ' , True )
2005-10-20 11:17:17 +00:00
gajim . interface . show_systray ( )
2005-05-10 15:39:35 +00:00
else :
gajim . config . set ( ' trayicon ' , False )
2005-10-20 11:17:17 +00:00
gajim . interface . hide_systray ( )
2005-06-05 23:17:59 +00:00
gajim . config . set ( ' show_roster_on_startup ' , True ) # no tray, show roster!
2005-10-20 11:17:17 +00:00
gajim . interface . roster . draw_roster ( )
gajim . interface . save_config ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_save_position_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' saveposition ' )
2005-12-06 12:45:32 +00:00
2005-05-29 18:41:13 +00:00
def on_sort_by_show_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' sort_by_show ' )
2005-10-20 11:17:17 +00:00
gajim . interface . roster . draw_roster ( )
2005-12-06 12:45:32 +00:00
2005-11-06 14:30:17 +00:00
def on_show_status_msgs_in_roster_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' show_status_msgs_in_roster ' )
gajim . interface . roster . draw_roster ( )
2005-11-15 09:08:08 +00:00
for account in gajim . connections :
gcs = gajim . interface . instances [ account ] [ ' gc ' ]
if gcs . has_key ( ' tabbed ' ) :
gcs [ ' tabbed ' ] . draw_all_roster ( )
else :
for room_jid in gcs :
gcs [ room_jid ] . draw_all_roster ( )
2005-12-06 12:45:32 +00:00
2005-11-08 13:04:59 +00:00
def on_show_avatars_in_roster_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' show_avatars_in_roster ' )
gajim . interface . roster . draw_roster ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_use_emoticons_checkbutton_toggled ( self , widget ) :
2005-12-06 12:45:32 +00:00
self . on_checkbutton_toggled ( widget , ' useemoticons ' ,
2005-05-10 15:39:35 +00:00
[ self . xml . get_widget ( ' add_remove_emoticons_button ' ) ] )
2005-11-17 17:08:56 +00:00
gajim . interface . init_emoticons ( )
gajim . interface . make_regexps ( )
self . toggle_emoticons ( )
2005-11-15 11:52:40 +00:00
2005-11-17 17:08:56 +00:00
def toggle_emoticons ( self ) :
''' Update emoticons state in Opened Chat Windows '''
2005-11-15 11:52:40 +00:00
for a in gajim . connections :
for kind in ( ' chats ' , ' gc ' ) :
windows = gajim . interface . instances [ a ] [ kind ]
if windows . has_key ( ' tabbed ' ) :
2005-11-17 17:08:56 +00:00
windows [ ' tabbed ' ] . toggle_emoticons ( )
2005-11-15 11:52:40 +00:00
else :
for jid in windows . keys ( ) :
2005-11-17 17:08:56 +00:00
windows [ jid ] . toggle_emoticons ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_add_remove_emoticons_button_clicked ( self , widget ) :
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' manage_emots ' ) :
gajim . interface . instances [ ' manage_emots ' ] . window . present ( )
2005-05-10 15:39:35 +00:00
else :
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ ' manage_emots ' ] = ManageEmoticonsWindow ( )
2005-05-10 15:39:35 +00:00
def on_iconset_combobox_changed ( self , widget ) :
model = widget . get_model ( )
active = widget . get_active ( )
2005-08-26 00:52:44 +00:00
icon_string = model [ active ] [ 1 ] . decode ( ' utf-8 ' )
2005-05-10 15:39:35 +00:00
gajim . config . set ( ' iconset ' , icon_string )
2005-10-20 11:17:17 +00:00
gajim . interface . roster . reload_jabber_state_images ( )
gajim . interface . save_config ( )
2005-12-06 12:45:32 +00:00
2005-05-25 17:13:50 +00:00
def on_transports_iconsets_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' use_transports_iconsets ' )
2005-10-20 11:17:17 +00:00
gajim . interface . roster . draw_roster ( )
2005-06-08 23:17:40 +00:00
2005-06-09 22:29:06 +00:00
def on_manage_theme_button_clicked ( self , widget ) :
2005-10-20 11:17:17 +00:00
dialogs . GajimThemesWindow ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_theme_combobox_changed ( self , widget ) :
model = widget . get_model ( )
active = widget . get_active ( )
2005-09-01 13:47:50 +00:00
config_theme = model [ active ] [ 0 ] . decode ( ' utf-8 ' ) . replace ( ' ' , ' _ ' )
2005-12-06 12:45:32 +00:00
2005-09-01 13:47:50 +00:00
gajim . config . set ( ' roster_theme ' , config_theme )
2005-06-10 19:31:38 +00:00
2005-06-07 21:28:21 +00:00
# begin repainting themed widgets throughout
2005-10-20 11:17:17 +00:00
gajim . interface . roster . repaint_themed_widgets ( )
gajim . interface . roster . change_roster_style ( None )
gajim . interface . save_config ( )
2005-04-28 14:38:36 +00:00
def merge_windows ( self , kind ) :
for acct in gajim . connections :
2005-12-06 17:43:21 +00:00
# save buffers and close windows
2005-04-28 14:38:36 +00:00
buf1 = { }
buf2 = { }
saved_var = { }
2005-11-13 15:08:47 +00:00
windows = gajim . interface . instances [ acct ] [ kind ]
2005-04-28 14:55:57 +00:00
jids = windows . keys ( )
2005-04-28 14:38:36 +00:00
for jid in jids :
2005-04-28 14:55:57 +00:00
window = windows [ jid ]
2005-12-01 14:07:29 +00:00
buf1 [ jid ] = window . conversation_textviews [ jid ] . get_buffer ( )
buf2 [ jid ] = window . message_textviews [ jid ] . get_buffer ( )
2005-04-28 14:55:57 +00:00
saved_var [ jid ] = window . save_var ( jid )
window . window . destroy ( )
2005-12-06 17:43:21 +00:00
# open new tabbed chat windows
2005-04-28 14:38:36 +00:00
for jid in jids :
2005-04-28 14:55:57 +00:00
if kind == ' chats ' :
2005-08-06 10:20:04 +00:00
c = gajim . get_contact_instance_with_highest_priority ( acct , jid )
2005-10-20 11:17:17 +00:00
gajim . interface . roster . new_chat ( c , acct )
2005-04-28 15:48:20 +00:00
if kind == ' gc ' :
2005-10-20 11:17:17 +00:00
gajim . interface . roster . new_room ( jid , saved_var [ jid ] [ ' nick ' ] , acct )
2005-04-28 14:55:57 +00:00
window = windows [ jid ]
2005-12-01 14:07:29 +00:00
window . conversation_textviews [ jid ] . set_buffer ( buf1 [ jid ] )
window . message_textviews [ jid ] . set_buffer ( buf2 [ jid ] )
2005-04-28 14:55:57 +00:00
window . load_var ( jid , saved_var [ jid ] )
2005-04-28 14:38:36 +00:00
def split_windows ( self , kind ) :
for acct in gajim . connections :
2005-12-06 17:43:21 +00:00
# save buffers and close tabbed chat windows
2005-05-10 15:39:35 +00:00
buf1 = { }
buf2 = { }
saved_var = { }
2005-11-13 15:08:47 +00:00
windows = gajim . interface . instances [ acct ] [ kind ]
2005-05-10 15:39:35 +00:00
jids = windows . keys ( )
if not ' tabbed ' in jids :
continue
jids . remove ( ' tabbed ' )
for jid in jids :
window = windows [ jid ]
2005-12-01 14:07:29 +00:00
buf1 [ jid ] = window . conversation_textviews [ jid ] . get_buffer ( )
buf2 [ jid ] = window . message_textviews [ jid ] . get_buffer ( )
2005-05-10 15:39:35 +00:00
saved_var [ jid ] = window . save_var ( jid )
windows [ ' tabbed ' ] . window . destroy ( )
2005-12-06 17:43:21 +00:00
# open new tabbed chat windows
2005-05-10 15:39:35 +00:00
for jid in jids :
if kind == ' chats ' :
2005-08-06 10:20:04 +00:00
c = gajim . get_contact_instance_with_highest_priority ( acct , jid )
2005-10-20 11:17:17 +00:00
gajim . interface . roster . new_chat ( c , acct )
2005-05-10 15:39:35 +00:00
if kind == ' gc ' :
2005-10-20 11:17:17 +00:00
gajim . interface . roster . new_room ( jid , saved_var [ jid ] [ ' nick ' ] , acct )
2005-05-10 15:39:35 +00:00
window = windows [ jid ]
2005-12-01 14:07:29 +00:00
window . conversation_textviews [ jid ] . set_buffer ( buf1 [ jid ] )
window . message_textviews [ jid ] . set_buffer ( buf2 [ jid ] )
2005-05-10 15:39:35 +00:00
window . load_var ( jid , saved_var [ jid ] )
2005-03-09 10:26:57 +00:00
2005-05-10 15:39:35 +00:00
def on_use_tabbed_chat_window_checkbutton_toggled ( self , widget ) :
2005-11-01 15:35:00 +00:00
self . on_checkbutton_toggled ( widget , ' usetabbedchat ' )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
if widget . get_active ( ) :
self . merge_windows ( ' chats ' )
self . merge_windows ( ' gc ' )
2005-03-09 10:26:57 +00:00
else :
2005-05-10 15:39:35 +00:00
self . split_windows ( ' chats ' )
self . split_windows ( ' gc ' )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-05-26 00:07:49 +00:00
def apply_speller ( self , kind ) :
for acct in gajim . connections :
2005-11-13 15:08:47 +00:00
windows = gajim . interface . instances [ acct ] [ kind ]
2005-05-26 00:07:49 +00:00
jids = windows . keys ( )
for jid in jids :
2005-05-26 00:29:22 +00:00
if jid == ' tabbed ' :
continue
2005-05-26 00:07:49 +00:00
window = windows [ jid ]
2005-12-01 14:07:29 +00:00
textview = window . message_textviews [ jid ]
2005-05-26 00:07:49 +00:00
gtkspell . Spell ( textview )
def remove_speller ( self , kind ) :
for acct in gajim . connections :
2005-11-13 15:08:47 +00:00
windows = gajim . interface . instances [ acct ] [ kind ]
2005-05-26 00:07:49 +00:00
jids = windows . keys ( )
for jid in jids :
2005-05-26 00:29:22 +00:00
if jid == ' tabbed ' :
continue
2005-05-26 00:07:49 +00:00
window = windows [ jid ]
2005-12-01 14:07:29 +00:00
textview = window . message_textviews [ jid ]
2005-05-26 00:07:49 +00:00
spell_obj = gtkspell . get_from_text_view ( textview )
if spell_obj :
spell_obj . detach ( )
def on_speller_checkbutton_toggled ( self , widget ) :
active = widget . get_active ( )
gajim . config . set ( ' use_speller ' , active )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-05-26 00:07:49 +00:00
if active :
self . apply_speller ( ' chats ' )
self . apply_speller ( ' gc ' )
else :
self . remove_speller ( ' chats ' )
self . remove_speller ( ' gc ' )
2005-05-10 15:39:35 +00:00
def update_print_time ( self ) :
''' Update time in Opened Chat Windows '''
for a in gajim . connections :
2005-11-13 15:08:47 +00:00
window = gajim . interface . instances [ a ] [ ' chats ' ]
2005-05-10 15:39:35 +00:00
if window . has_key ( ' tabbed ' ) :
window [ ' tabbed ' ] . update_print_time ( )
else :
for jid in window . keys ( ) :
window [ jid ] . update_print_time ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_time_never_radiobutton_toggled ( self , widget ) :
if widget . get_active ( ) :
gajim . config . set ( ' print_time ' , ' never ' )
self . update_print_time ( )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-03-09 10:26:57 +00:00
2005-05-10 15:39:35 +00:00
def on_time_sometimes_radiobutton_toggled ( self , widget ) :
if widget . get_active ( ) :
gajim . config . set ( ' print_time ' , ' sometimes ' )
self . update_print_time ( )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-03-09 10:26:57 +00:00
2005-05-10 15:39:35 +00:00
def on_time_always_radiobutton_toggled ( self , widget ) :
if widget . get_active ( ) :
gajim . config . set ( ' print_time ' , ' always ' )
self . update_print_time ( )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-03-09 10:26:57 +00:00
2005-05-10 15:39:35 +00:00
def on_before_time_entry_focus_out_event ( self , widget , event ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' before_time ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_after_time_entry_focus_out_event ( self , widget , event ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' after_time ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-04-06 18:51:54 +00:00
2005-05-10 15:39:35 +00:00
def on_before_nickname_entry_focus_out_event ( self , widget , event ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' before_nickname ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-04-06 18:51:54 +00:00
2005-05-10 15:39:35 +00:00
def on_after_nickname_entry_focus_out_event ( self , widget , event ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' after_nickname ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-03-29 16:37:59 +00:00
2005-05-10 15:39:35 +00:00
def update_text_tags ( self ) :
''' Update color tags in Opened Chat Windows '''
for a in gajim . connections :
2005-10-27 13:15:03 +00:00
for kind in ( ' chats ' , ' gc ' ) :
2005-11-13 15:08:47 +00:00
windows = gajim . interface . instances [ a ] [ kind ]
2005-08-07 18:58:36 +00:00
if windows . has_key ( ' tabbed ' ) :
windows [ ' tabbed ' ] . update_tags ( )
else :
for jid in windows . keys ( ) :
windows [ jid ] . update_tags ( )
2005-12-06 12:45:32 +00:00
2005-08-07 18:58:36 +00:00
def update_text_font ( self ) :
''' Update text font in Opened Chat Windows '''
for a in gajim . connections :
2005-10-27 13:15:03 +00:00
for kind in ( ' chats ' , ' gc ' ) :
2005-11-13 15:08:47 +00:00
windows = gajim . interface . instances [ a ] [ kind ]
2005-08-07 18:58:36 +00:00
if windows . has_key ( ' tabbed ' ) :
windows [ ' tabbed ' ] . update_font ( )
else :
for jid in windows . keys ( ) :
windows [ jid ] . update_font ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_preference_widget_color_set ( self , widget , text ) :
color = widget . get_color ( )
2005-12-01 18:16:30 +00:00
color_string = gtkgui_helpers . make_color_string ( color )
2005-05-10 15:39:35 +00:00
gajim . config . set ( text , color_string )
self . update_text_tags ( )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-08-07 18:58:36 +00:00
def on_preference_widget_font_set ( self , widget , text ) :
font = widget . get_font_name ( )
2005-08-26 12:08:14 +00:00
gajim . config . set ( text , font )
2005-08-07 18:58:36 +00:00
self . update_text_font ( )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_incoming_msg_colorbutton_color_set ( self , widget ) :
self . on_preference_widget_color_set ( widget , ' inmsgcolor ' )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_outgoing_msg_colorbutton_color_set ( self , widget ) :
self . on_preference_widget_color_set ( widget , ' outmsgcolor ' )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_status_msg_colorbutton_color_set ( self , widget ) :
self . on_preference_widget_color_set ( widget , ' statusmsgcolor ' )
2005-12-06 12:45:32 +00:00
2005-08-07 18:58:36 +00:00
def on_conversation_fontbutton_font_set ( self , widget ) :
self . on_preference_widget_font_set ( widget , ' conversation_font ' )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_reset_colors_button_clicked ( self , widget ) :
2005-10-27 13:15:03 +00:00
for i in ( ' inmsgcolor ' , ' outmsgcolor ' , ' statusmsgcolor ' ) :
2005-10-20 11:17:17 +00:00
gajim . config . set ( i , gajim . interface . default_values [ i ] )
2005-03-08 14:08:46 +00:00
2005-05-10 15:39:35 +00:00
self . xml . get_widget ( ' incoming_msg_colorbutton ' ) . set_color ( \
gtk . gdk . color_parse ( gajim . config . get ( ' inmsgcolor ' ) ) )
self . xml . get_widget ( ' outgoing_msg_colorbutton ' ) . set_color ( \
gtk . gdk . color_parse ( gajim . config . get ( ' outmsgcolor ' ) ) )
self . xml . get_widget ( ' status_msg_colorbutton ' ) . set_color ( \
gtk . gdk . color_parse ( gajim . config . get ( ' statusmsgcolor ' ) ) )
self . update_text_tags ( )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-04-17 09:05:58 +00:00
2005-05-10 15:39:35 +00:00
def on_notify_on_new_message_radiobutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' notify_on_new_message ' ,
[ self . auto_popup_away_checkbutton ] )
2004-10-13 21:46:10 +00:00
2005-05-10 15:39:35 +00:00
def on_popup_new_message_radiobutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' autopopup ' ,
[ self . auto_popup_away_checkbutton ] )
2005-04-29 13:04:06 +00:00
2005-05-10 15:39:35 +00:00
def on_only_in_roster_radiobutton_toggled ( self , widget ) :
if widget . get_active ( ) :
self . auto_popup_away_checkbutton . set_sensitive ( False )
2005-04-29 13:04:06 +00:00
2005-05-21 13:46:23 +00:00
def on_notify_on_signin_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' notify_on_signin ' )
2005-04-02 19:52:00 +00:00
2005-05-21 13:46:23 +00:00
def on_notify_on_signout_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' notify_on_signout ' )
2005-04-02 19:52:00 +00:00
2005-05-10 15:39:35 +00:00
def on_auto_popup_away_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' autopopupaway ' )
2005-04-02 19:52:00 +00:00
2005-05-10 15:39:35 +00:00
def on_ignore_events_from_unknown_contacts_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' ignore_unknown_contacts ' )
2005-02-05 17:18:49 +00:00
2005-08-07 20:58:44 +00:00
def on_chat_states_combobox_changed ( self , widget ) :
active = widget . get_active ( )
2005-08-09 13:27:31 +00:00
if active == 0 : # all
2005-08-07 20:58:44 +00:00
gajim . config . set ( ' chat_state_notifications ' , ' all ' )
2005-08-09 13:27:31 +00:00
elif active == 1 : # only composing
gajim . config . set ( ' chat_state_notifications ' , ' composing_only ' )
2005-08-07 20:58:44 +00:00
else : # disabled
gajim . config . set ( ' chat_state_notifications ' , ' disabled ' )
2005-12-06 12:45:32 +00:00
2005-07-19 22:57:37 +00:00
2005-05-10 15:39:35 +00:00
def on_play_sounds_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' sounds_on ' ,
[ self . xml . get_widget ( ' soundplayer_hbox ' ) ,
self . xml . get_widget ( ' sounds_scrolledwindow ' ) ,
self . xml . get_widget ( ' browse_sounds_hbox ' ) ] )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_soundplayer_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' soundplayer ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_prompt_online_status_message_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' ask_online_status ' )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_prompt_offline_status_message_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' ask_offline_status ' )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_sounds_treemodel_row_changed ( self , model , path , iter ) :
2005-08-26 00:52:44 +00:00
sound_event = model . get_value ( iter , 0 ) . decode ( ' utf-8 ' )
2005-05-10 15:39:35 +00:00
gajim . config . set_per ( ' soundevents ' , sound_event , ' enabled ' ,
bool ( model [ path ] [ 1 ] ) )
gajim . config . set_per ( ' soundevents ' , sound_event , ' path ' ,
2005-08-26 00:52:44 +00:00
model [ iter ] [ 2 ] . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-03-08 14:08:46 +00:00
2005-05-10 15:39:35 +00:00
def on_auto_away_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' autoaway ' ,
2005-08-06 15:17:20 +00:00
[ self . auto_away_time_spinbutton , self . auto_away_message_entry ] )
2005-04-16 23:15:03 +00:00
2005-05-10 15:39:35 +00:00
def on_auto_away_time_spinbutton_value_changed ( self , widget ) :
aat = widget . get_value_as_int ( )
gajim . config . set ( ' autoawaytime ' , aat )
2005-10-20 11:17:17 +00:00
gajim . interface . sleeper = common . sleepy . Sleepy (
2005-05-10 15:39:35 +00:00
gajim . config . get ( ' autoawaytime ' ) * 60 ,
gajim . config . get ( ' autoxatime ' ) * 60 )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-04-16 23:15:03 +00:00
2005-08-06 15:17:20 +00:00
def on_auto_away_message_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' autoaway_message ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-08-06 15:17:20 +00:00
2005-05-10 15:39:35 +00:00
def on_auto_xa_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' autoxa ' ,
2005-08-06 15:17:20 +00:00
[ self . auto_xa_time_spinbutton , self . auto_xa_message_entry ] )
2005-03-08 14:08:46 +00:00
2005-05-10 15:39:35 +00:00
def on_auto_xa_time_spinbutton_value_changed ( self , widget ) :
axt = widget . get_value_as_int ( )
gajim . config . set ( ' autoxatime ' , axt )
2005-10-20 11:17:17 +00:00
gajim . interface . sleeper = common . sleepy . Sleepy (
2005-05-10 15:39:35 +00:00
gajim . config . get ( ' autoawaytime ' ) * 60 ,
gajim . config . get ( ' autoxatime ' ) * 60 )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-03-08 14:08:46 +00:00
2005-08-06 15:17:20 +00:00
def on_auto_xa_message_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' autoxa_message ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-08-06 15:17:20 +00:00
2005-05-10 15:39:35 +00:00
def save_status_messages ( self , model ) :
for msg in gajim . config . get_per ( ' statusmsg ' ) :
gajim . config . del_per ( ' statusmsg ' , msg )
iter = model . get_iter_first ( )
while iter :
2005-11-10 15:14:03 +00:00
val = model [ iter ] [ 0 ] . decode ( ' utf-8 ' )
2005-05-10 15:39:35 +00:00
gajim . config . add_per ( ' statusmsg ' , val )
2005-11-10 15:14:03 +00:00
if model [ iter ] [ 1 ] is None : # here is the MESSAGE
# so when we press New this func is called by
# on_msg_treemodel_row_changed but message is None
# (hasn't been added yet) so do not TB
return
2005-12-01 20:11:48 +00:00
msg = helpers . to_one_line ( model [ iter ] [ 1 ] . decode ( ' utf-8 ' ) )
gajim . config . set_per ( ' statusmsg ' , val , ' message ' , msg )
2005-05-10 15:39:35 +00:00
iter = model . iter_next ( iter )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-03-21 21:01:03 +00:00
2005-05-10 15:39:35 +00:00
def on_msg_treemodel_row_changed ( self , model , path , iter ) :
self . save_status_messages ( model )
2005-06-01 20:01:11 +00:00
def on_msg_treemodel_row_deleted ( self , model , path ) :
2005-05-10 15:39:35 +00:00
self . save_status_messages ( model )
2005-08-09 15:30:45 +00:00
def on_applications_combobox_changed ( self , widget ) :
2005-07-25 14:38:21 +00:00
gajim . config . set ( ' autodetect_browser_mailer ' , False )
2005-07-27 12:22:17 +00:00
if widget . get_active ( ) == 3 :
2005-05-10 15:39:35 +00:00
self . xml . get_widget ( ' custom_apps_frame ' ) . set_sensitive ( True )
gajim . config . set ( ' openwith ' , ' custom ' )
2005-04-12 15:30:09 +00:00
else :
2005-05-10 15:39:35 +00:00
if widget . get_active ( ) == 0 :
2005-07-25 14:38:21 +00:00
gajim . config . set ( ' autodetect_browser_mailer ' , True )
elif widget . get_active ( ) == 1 :
2005-05-10 15:39:35 +00:00
gajim . config . set ( ' openwith ' , ' gnome-open ' )
2005-07-25 14:38:21 +00:00
elif widget . get_active ( ) == 2 :
2005-05-10 15:39:35 +00:00
gajim . config . set ( ' openwith ' , ' kfmclient exec ' )
self . xml . get_widget ( ' custom_apps_frame ' ) . set_sensitive ( False )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-05-10 15:39:35 +00:00
def on_custom_browser_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' custombrowser ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-05-10 15:39:35 +00:00
def on_custom_mail_client_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' custommailapp ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-05-10 15:39:35 +00:00
2005-08-09 15:30:45 +00:00
def on_custom_file_manager_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
gajim . config . set ( ' custom_file_manager ' , widget . get_text ( ) . decode ( ' utf-8 ' ) )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-08-09 15:30:45 +00:00
2005-11-23 23:28:26 +00:00
def on_log_show_changes_checkbutton_toggled ( self , widget ) :
self . on_checkbutton_toggled ( widget , ' log_contact_status_changes ' )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_send_os_info_checkbutton_toggled ( self , widget ) :
2005-11-23 23:28:26 +00:00
self . on_checkbutton_toggled ( widget , ' send_os_info ' )
2005-04-12 15:30:09 +00:00
2005-05-10 15:39:35 +00:00
def fill_msg_treeview ( self ) :
self . xml . get_widget ( ' delete_msg_button ' ) . set_sensitive ( False )
model = self . msg_tree . get_model ( )
model . clear ( )
for msg in gajim . config . get_per ( ' statusmsg ' ) :
iter = model . append ( )
val = gajim . config . get_per ( ' statusmsg ' , msg , ' message ' )
2005-12-01 20:11:48 +00:00
val = helpers . from_one_line ( val )
2005-05-10 15:39:35 +00:00
model . set ( iter , 0 , msg , 1 , val )
2005-02-14 22:30:04 +00:00
2005-05-10 15:39:35 +00:00
def on_msg_cell_edited ( self , cell , row , new_text ) :
model = self . msg_tree . get_model ( )
iter = model . get_iter_from_string ( row )
model . set_value ( iter , 0 , new_text )
2005-02-14 22:30:04 +00:00
2005-05-10 15:39:35 +00:00
def on_msg_treeview_cursor_changed ( self , widget , data = None ) :
( model , iter ) = self . msg_tree . get_selection ( ) . get_selected ( )
if not iter :
return
self . xml . get_widget ( ' delete_msg_button ' ) . set_sensitive ( True )
buf = self . xml . get_widget ( ' msg_textview ' ) . get_buffer ( )
name = model . get_value ( iter , 0 )
2005-08-07 11:44:50 +00:00
msg = model [ iter ] [ 1 ]
2005-05-10 15:39:35 +00:00
buf . set_text ( msg )
2005-02-14 22:30:04 +00:00
2005-05-10 15:39:35 +00:00
def on_new_msg_button_clicked ( self , widget , data = None ) :
model = self . msg_tree . get_model ( )
iter = model . append ( )
2005-07-29 17:47:37 +00:00
model . set ( iter , 0 , _ ( ' status message title ' ) , 1 , _ ( ' status message text ' ) )
2004-05-15 16:50:38 +00:00
2005-05-10 15:39:35 +00:00
def on_delete_msg_button_clicked ( self , widget , data = None ) :
( model , iter ) = self . msg_tree . get_selection ( ) . get_selected ( )
if not iter :
return
buf = self . xml . get_widget ( ' msg_textview ' ) . get_buffer ( )
model . remove ( iter )
buf . set_text ( ' ' )
self . xml . get_widget ( ' delete_msg_button ' ) . set_sensitive ( False )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_msg_textview_changed ( self , widget , data = None ) :
( model , iter ) = self . msg_tree . get_selection ( ) . get_selected ( )
if not iter :
return
buf = self . xml . get_widget ( ' msg_textview ' ) . get_buffer ( )
first_iter , end_iter = buf . get_bounds ( )
name = model . get_value ( iter , 0 )
model . set_value ( iter , 1 , buf . get_text ( first_iter , end_iter ) )
2005-12-06 12:45:32 +00:00
2005-05-10 15:39:35 +00:00
def on_msg_treeview_key_press_event ( self , widget , event ) :
if event . keyval == gtk . keysyms . Delete :
self . on_delete_msg_button_clicked ( widget )
2004-05-15 16:50:38 +00:00
2005-05-10 15:39:35 +00:00
def sound_toggled_cb ( self , cell , path ) :
model = self . sound_tree . get_model ( )
model [ path ] [ 1 ] = not model [ path ] [ 1 ]
2004-05-15 16:50:38 +00:00
2005-05-10 15:39:35 +00:00
def fill_sound_treeview ( self ) :
sounds = gajim . config . get_per ( ' soundevents ' )
model = self . sound_tree . get_model ( )
model . clear ( )
for sound in sounds :
2005-11-23 23:28:26 +00:00
val = gajim . config . get_per ( ' soundevents ' , sound , ' enabled ' )
path = gajim . config . get_per ( ' soundevents ' , sound , ' path ' )
2005-05-10 15:39:35 +00:00
iter = model . append ( ( sound , val , path ) )
2004-05-15 16:50:38 +00:00
2005-05-10 15:39:35 +00:00
def on_treeview_sounds_cursor_changed ( self , widget , data = None ) :
( model , iter ) = self . sound_tree . get_selection ( ) . get_selected ( )
sounds_entry = self . xml . get_widget ( ' sounds_entry ' )
if not iter :
sounds_entry . set_text ( ' ' )
return
2005-08-07 11:44:50 +00:00
str = model [ iter ] [ 2 ]
2005-05-10 15:39:35 +00:00
sounds_entry . set_text ( str )
2005-03-08 14:08:46 +00:00
2005-05-10 15:39:35 +00:00
def on_button_sounds_clicked ( self , widget , data = None ) :
( model , iter ) = self . sound_tree . get_selection ( ) . get_selected ( )
if not iter :
return
2005-08-26 00:52:44 +00:00
file = model [ iter ] [ 2 ] . decode ( ' utf-8 ' )
2005-05-17 11:55:30 +00:00
dialog = gtk . FileChooserDialog ( _ ( ' Choose Sound ' ) , None ,
2005-05-10 15:39:35 +00:00
gtk . FILE_CHOOSER_ACTION_OPEN ,
( gtk . STOCK_CANCEL , gtk . RESPONSE_CANCEL ,
gtk . STOCK_OPEN , gtk . RESPONSE_OK ) )
dialog . set_default_response ( gtk . RESPONSE_OK )
2005-08-23 13:22:14 +00:00
last_sounds_dir = gajim . config . get ( ' last_sounds_dir ' )
if last_sounds_dir and os . path . isdir ( ' last_sounds_dir ' ) :
dialog . set_current_folder ( last_sounds_dir )
else :
home_dir = os . path . expanduser ( ' ~ ' )
dialog . set_current_folder ( home_dir )
2004-10-25 22:02:16 +00:00
2005-05-10 15:39:35 +00:00
filter = gtk . FileFilter ( )
filter . set_name ( _ ( ' All files ' ) )
filter . add_pattern ( ' * ' )
dialog . add_filter ( filter )
2004-11-04 01:03:17 +00:00
2005-05-10 15:39:35 +00:00
filter = gtk . FileFilter ( )
filter . set_name ( _ ( ' Wav Sounds ' ) )
filter . add_pattern ( ' *.wav ' )
dialog . add_filter ( filter )
dialog . set_filter ( filter )
file = os . path . join ( os . getcwd ( ) , file )
dialog . set_filename ( file )
file = ' '
while True :
response = dialog . run ( )
if response != gtk . RESPONSE_OK :
break
file = dialog . get_filename ( )
2005-10-21 13:21:31 +00:00
try :
file = file . decode ( sys . getfilesystemencoding ( ) )
except :
pass
2005-05-10 15:39:35 +00:00
if os . path . exists ( file ) :
break
dialog . destroy ( )
if file :
2005-08-23 13:22:14 +00:00
directory = os . path . dirname ( file )
gajim . config . set ( ' last_sounds_dir ' , directory )
2005-05-10 15:39:35 +00:00
self . xml . get_widget ( ' sounds_entry ' ) . set_text ( file )
model . set_value ( iter , 2 , file )
model . set_value ( iter , 1 , 1 )
2005-04-06 18:51:54 +00:00
2005-06-06 15:03:41 +00:00
def on_sounds_entry_changed ( self , widget ) :
path_to_file = widget . get_text ( )
model , iter = self . sound_tree . get_selection ( ) . get_selected ( )
model . set_value ( iter , 2 , path_to_file )
model . set_value ( iter , 1 , 1 )
2005-05-10 15:39:35 +00:00
def on_open_advanced_editor_button_clicked ( self , widget , data = None ) :
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' advanced_config ' ) :
gajim . interface . instances [ ' advanced_config ' ] . window . present ( )
2005-05-10 15:39:35 +00:00
else :
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ ' advanced_config ' ] = \
2005-10-21 17:49:35 +00:00
dialogs . AdvancedConfigurationWindow ( )
2004-05-15 16:50:38 +00:00
2005-06-10 21:14:16 +00:00
#---------- AccountModificationWindow class -------------#
class AccountModificationWindow :
2005-04-18 12:17:43 +00:00
''' Class for account informations '''
2005-03-07 17:01:56 +00:00
def on_account_modification_window_destroy ( self , widget ) :
2005-04-18 12:17:43 +00:00
''' close window '''
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( self . account ) :
if gajim . interface . instances [ self . account ] . has_key ( ' account_modification ' ) :
del gajim . interface . instances [ self . account ] [ ' account_modification ' ]
2005-04-20 16:35:40 +00:00
return
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' account_modification ' ) :
del gajim . interface . instances [ ' account_modification ' ]
2005-12-06 12:45:32 +00:00
2005-04-17 18:36:09 +00:00
def on_cancel_button_clicked ( self , widget ) :
2005-04-12 15:30:09 +00:00
self . window . destroy ( )
2004-05-15 16:50:38 +00:00
2005-11-03 10:32:26 +00:00
def __init__ ( self , account ) :
2005-05-10 15:39:35 +00:00
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' account_modification_window ' , APP )
self . window = self . xml . get_widget ( ' account_modification_window ' )
self . account = account
2005-06-09 09:32:19 +00:00
# init proxy list
self . update_proxy_list ( )
2005-05-10 15:39:35 +00:00
self . xml . signal_autoconnect ( self )
2005-11-03 10:32:26 +00:00
self . init_account ( )
self . xml . get_widget ( ' save_button ' ) . grab_focus ( )
2005-05-10 15:39:35 +00:00
self . window . show_all ( )
2005-04-06 18:51:54 +00:00
def on_checkbutton_toggled ( self , widget , widgets ) :
2005-04-18 12:17:43 +00:00
''' set or unset sensitivity of widgets when widget is toggled '''
2005-04-06 18:51:54 +00:00
for w in widgets :
w . set_sensitive ( widget . get_active ( ) )
2005-04-22 01:05:31 +00:00
def init_account_gpg ( self ) :
keyid = gajim . config . get_per ( ' accounts ' , self . account , ' keyid ' )
2005-05-09 19:52:43 +00:00
keyname = gajim . config . get_per ( ' accounts ' , self . account , ' keyname ' )
2005-04-22 01:05:31 +00:00
savegpgpass = gajim . config . get_per ( ' accounts ' , self . account ,
2005-05-09 19:52:43 +00:00
' savegpgpass ' )
2005-04-22 01:05:31 +00:00
if not keyid or not gajim . config . get ( ' usegpg ' ) :
return
2005-04-24 15:47:53 +00:00
self . xml . get_widget ( ' gpg_key_label ' ) . set_text ( keyid )
2005-04-22 01:05:31 +00:00
self . xml . get_widget ( ' gpg_name_label ' ) . set_text ( keyname )
gpg_save_password_checkbutton = \
self . xml . get_widget ( ' gpg_save_password_checkbutton ' )
gpg_save_password_checkbutton . set_sensitive ( True )
gpg_save_password_checkbutton . set_active ( savegpgpass )
if savegpgpass :
entry = self . xml . get_widget ( ' gpg_password_entry ' )
entry . set_sensitive ( True )
gpgpassword = gajim . config . get_per ( ' accounts ' ,
self . account , ' gpgpassword ' )
entry . set_text ( gpgpassword )
2005-04-12 15:30:09 +00:00
2005-06-08 22:05:45 +00:00
def update_proxy_list ( self ) :
2005-06-09 09:32:19 +00:00
if self . account :
our_proxy = gajim . config . get_per ( ' accounts ' , self . account , ' proxy ' )
else :
our_proxy = ' '
2005-06-08 22:05:45 +00:00
if not our_proxy :
our_proxy = ' None '
self . proxy_combobox = self . xml . get_widget ( ' proxies_combobox ' )
2005-06-18 13:48:43 +00:00
model = gtk . ListStore ( str )
2005-06-08 22:05:45 +00:00
self . proxy_combobox . set_model ( model )
l = gajim . config . get_per ( ' proxies ' )
l . insert ( 0 , ' None ' )
2005-10-27 12:47:54 +00:00
for i in xrange ( len ( l ) ) :
2005-06-08 22:05:45 +00:00
model . append ( [ l [ i ] ] )
if our_proxy == l [ i ] :
self . proxy_combobox . set_active ( i )
2005-04-14 23:00:25 +00:00
def init_account ( self ) :
2005-04-18 12:17:43 +00:00
''' Initialize window with defaults values '''
2005-04-14 23:00:25 +00:00
self . xml . get_widget ( ' name_entry ' ) . set_text ( self . account )
2005-04-22 01:05:31 +00:00
jid = gajim . config . get_per ( ' accounts ' , self . account , ' name ' ) \
+ ' @ ' + gajim . config . get_per ( ' accounts ' ,
2005-10-20 08:48:19 +00:00
self . account , ' hostname ' )
2005-04-14 23:00:25 +00:00
self . xml . get_widget ( ' jid_entry ' ) . set_text ( jid )
2005-06-18 14:17:26 +00:00
self . xml . get_widget ( ' save_password_checkbutton ' ) . set_active (
2005-04-14 23:00:25 +00:00
gajim . config . get_per ( ' accounts ' , self . account , ' savepass ' ) )
if gajim . config . get_per ( ' accounts ' , self . account , ' savepass ' ) :
2005-04-22 01:05:31 +00:00
passstr = gajim . config . get_per ( ' accounts ' ,
self . account , ' password ' )
2005-04-14 23:00:25 +00:00
password_entry = self . xml . get_widget ( ' password_entry ' )
password_entry . set_sensitive ( True )
2005-04-22 01:05:31 +00:00
password_entry . set_text ( passstr )
2005-06-18 14:17:26 +00:00
self . xml . get_widget ( ' resource_entry ' ) . set_text ( gajim . config . get_per (
2005-04-14 23:00:25 +00:00
' accounts ' , self . account , ' resource ' ) )
self . xml . get_widget ( ' priority_spinbutton ' ) . set_value ( gajim . config . \
get_per ( ' accounts ' , self . account , ' priority ' ) )
2005-06-08 15:48:53 +00:00
2005-05-30 11:01:08 +00:00
usessl = gajim . config . get_per ( ' accounts ' , self . account , ' usessl ' )
self . xml . get_widget ( ' use_ssl_checkbutton ' ) . set_active ( usessl )
2005-12-06 12:45:32 +00:00
2005-07-25 00:31:20 +00:00
self . xml . get_widget ( ' send_keepalive_checkbutton ' ) . set_active (
gajim . config . get_per ( ' accounts ' , self . account ,
' keep_alives_enabled ' ) )
2005-05-09 19:52:43 +00:00
2005-06-14 10:26:01 +00:00
use_custom_host = gajim . config . get_per ( ' accounts ' , self . account ,
' use_custom_host ' )
self . xml . get_widget ( ' custom_host_port_checkbutton ' ) . set_active (
use_custom_host )
custom_host = gajim . config . get_per ( ' accounts ' , self . account ,
2005-10-20 08:48:19 +00:00
' custom_host ' )
2005-06-14 10:26:01 +00:00
if not custom_host :
custom_host = gajim . config . get_per ( ' accounts ' ,
2005-10-20 08:48:19 +00:00
self . account , ' hostname ' )
2005-06-14 10:26:01 +00:00
self . xml . get_widget ( ' custom_host_entry ' ) . set_text ( custom_host )
custom_port = gajim . config . get_per ( ' accounts ' , self . account ,
2005-10-19 20:18:09 +00:00
' custom_port ' )
2005-06-14 10:26:01 +00:00
if not custom_port :
custom_port = 5222
2005-08-26 00:52:44 +00:00
self . xml . get_widget ( ' custom_port_entry ' ) . set_text ( unicode ( custom_port ) )
2005-06-13 21:16:41 +00:00
2005-02-28 22:09:21 +00:00
gpg_key_label = self . xml . get_widget ( ' gpg_key_label ' )
2005-04-22 01:05:31 +00:00
if gajim . config . get ( ' usegpg ' ) :
2005-04-23 17:40:43 +00:00
self . init_account_gpg ( )
2005-04-22 01:05:31 +00:00
else :
2005-05-30 14:16:41 +00:00
gpg_key_label . set_text ( _ ( ' OpenPGP is not usable in this computer ' ) )
2005-02-28 22:09:21 +00:00
self . xml . get_widget ( ' gpg_choose_button ' ) . set_sensitive ( False )
2005-04-14 23:00:25 +00:00
self . xml . get_widget ( ' autoconnect_checkbutton ' ) . set_active ( gajim . config . \
get_per ( ' accounts ' , self . account , ' autoconnect ' ) )
2005-09-05 13:28:09 +00:00
self . xml . get_widget ( ' autoreconnect_checkbutton ' ) . set_active ( gajim . config . \
get_per ( ' accounts ' , self . account , ' autoreconnect ' ) )
2005-06-18 14:17:26 +00:00
2005-11-03 10:32:26 +00:00
self . xml . get_widget ( ' sync_with_global_status_checkbutton ' ) . set_active (
gajim . config . get_per ( ' accounts ' , self . account ,
' sync_with_global_status ' ) )
self . xml . get_widget ( ' autoconnect_checkbutton ' ) . set_active (
gajim . config . get_per ( ' accounts ' , self . account , ' autoconnect ' ) )
2005-06-07 01:10:24 +00:00
list_no_log_for = gajim . config . get_per ( ' accounts ' , self . account ,
2005-04-14 23:00:25 +00:00
' no_log_for ' ) . split ( )
if self . account in list_no_log_for :
self . xml . get_widget ( ' log_history_checkbutton ' ) . set_active ( 0 )
2004-05-15 16:50:38 +00:00
2005-02-28 22:09:21 +00:00
def on_save_button_clicked ( self , widget ) :
2005-04-18 12:17:43 +00:00
''' When save button is clicked: Save information in config file '''
2005-05-10 09:20:35 +00:00
config = { }
2005-08-26 00:52:44 +00:00
name = self . xml . get_widget ( ' name_entry ' ) . get_text ( ) . decode ( ' utf-8 ' )
2005-04-14 07:20:14 +00:00
if gajim . connections . has_key ( self . account ) :
2005-04-22 01:05:31 +00:00
if name != self . account and \
gajim . connections [ self . account ] . connected != 0 :
2005-07-18 16:40:12 +00:00
dialogs . ErrorDialog ( _ ( ' You are currently connected to the server ' ) ,
2005-11-03 10:32:26 +00:00
_ ( ' To change the account name, you must be disconnected. ' ) ) . get_response ( )
2005-03-31 12:17:07 +00:00
return
2005-05-10 09:20:35 +00:00
if ( name == ' ' ) :
2005-06-10 21:14:16 +00:00
dialogs . ErrorDialog ( _ ( ' Invalid account name ' ) ,
2005-07-18 16:40:12 +00:00
_ ( ' Account name cannot be empty. ' ) ) . get_response ( )
2005-05-10 09:20:35 +00:00
return
if name . find ( ' ' ) != - 1 :
2005-06-10 21:14:16 +00:00
dialogs . ErrorDialog ( _ ( ' Invalid account name ' ) ,
2005-07-18 16:40:12 +00:00
_ ( ' Account name cannot contain spaces. ' ) ) . get_response ( )
2005-05-10 09:20:35 +00:00
return
2005-08-26 00:52:44 +00:00
jid = self . xml . get_widget ( ' jid_entry ' ) . get_text ( ) . decode ( ' utf-8 ' )
2005-11-03 14:46:56 +00:00
# check if jid is conform to RFC and stringprep it
try :
jid = helpers . parse_jid ( jid )
except helpers . InvalidFormat , s :
2005-11-03 22:37:21 +00:00
pritext = _ ( ' Invalid Jabber ID ' )
dialogs . ErrorDialog ( pritext , str ( s ) ) . get_response ( )
return
n , hn = jid . split ( ' @ ' , 1 )
if not n :
pritext = _ ( ' Invalid Jabber ID ' )
sectext = _ ( ' A Jabber ID must be in the form " user@servername " . ' )
dialogs . ErrorDialog ( pritext , sectext ) . get_response ( )
2005-11-03 14:46:56 +00:00
return
resource = self . xml . get_widget ( ' resource_entry ' ) . get_text ( ) . decode ( ' utf-8 ' )
try :
resource = helpers . parse_resource ( resource )
except helpers . InvalidFormat , s :
2005-11-03 22:37:21 +00:00
pritext = _ ( ' Invalid Jabber ID ' )
dialogs . ErrorDialog ( pritext , ( s ) ) . get_response ( )
2005-05-10 09:20:35 +00:00
return
2005-11-03 14:46:56 +00:00
2005-05-10 09:20:35 +00:00
config [ ' savepass ' ] = self . xml . get_widget (
' save_password_checkbutton ' ) . get_active ( )
2005-11-03 10:32:26 +00:00
config [ ' password ' ] = self . xml . get_widget ( ' password_entry ' ) . get_text ( ) . \
decode ( ' utf-8 ' )
2005-11-03 14:46:56 +00:00
config [ ' resource ' ] = resource
2005-05-10 09:20:35 +00:00
config [ ' priority ' ] = self . xml . get_widget ( ' priority_spinbutton ' ) . \
get_value_as_int ( )
config [ ' autoconnect ' ] = self . xml . get_widget ( ' autoconnect_checkbutton ' ) . \
get_active ( )
2005-09-05 13:28:09 +00:00
config [ ' autoreconnect ' ] = self . xml . get_widget ( ' autoreconnect_checkbutton ' ) . \
get_active ( )
2005-03-06 19:19:21 +00:00
2005-04-14 23:00:25 +00:00
if self . account :
2005-04-22 01:05:31 +00:00
list_no_log_for = gajim . config . get_per ( ' accounts ' ,
self . account , ' no_log_for ' ) . split ( )
2005-04-14 23:00:25 +00:00
else :
list_no_log_for = [ ]
2005-03-06 19:19:21 +00:00
if self . account in list_no_log_for :
list_no_log_for . remove ( self . account )
if not self . xml . get_widget ( ' log_history_checkbutton ' ) . get_active ( ) :
list_no_log_for . append ( name )
2005-05-10 09:20:35 +00:00
config [ ' no_log_for ' ] = ' ' . join ( list_no_log_for )
2005-12-06 12:45:32 +00:00
2005-05-10 09:20:35 +00:00
config [ ' sync_with_global_status ' ] = self . xml . get_widget (
2005-04-21 17:43:47 +00:00
' sync_with_global_status_checkbutton ' ) . get_active ( )
2005-12-06 12:45:32 +00:00
2005-06-08 15:48:53 +00:00
active = self . proxy_combobox . get_active ( )
2005-08-26 00:52:44 +00:00
proxy = self . proxy_combobox . get_model ( ) [ active ] [ 0 ] . decode ( ' utf-8 ' )
2005-06-08 15:48:53 +00:00
if proxy == ' None ' :
proxy = ' '
config [ ' proxy ' ] = proxy
2005-12-06 12:45:32 +00:00
2005-05-30 11:01:08 +00:00
config [ ' usessl ' ] = self . xml . get_widget ( ' use_ssl_checkbutton ' ) . get_active ( )
2005-10-19 18:47:09 +00:00
config [ ' name ' ] = n
2005-10-20 08:48:19 +00:00
config [ ' hostname ' ] = hn
2005-06-14 10:26:01 +00:00
config [ ' use_custom_host ' ] = self . xml . get_widget (
' custom_host_port_checkbutton ' ) . get_active ( )
custom_port = self . xml . get_widget ( ' custom_port_entry ' ) . get_text ( )
try :
custom_port = int ( custom_port )
except :
dialogs . ErrorDialog ( _ ( ' Invalid entry ' ) ,
_ ( ' Custom port must be a port number. ' ) ) . get_response ( )
return
config [ ' custom_port ' ] = custom_port
config [ ' custom_host ' ] = self . xml . get_widget (
2005-10-20 08:48:19 +00:00
' custom_host_entry ' ) . get_text ( ) . decode ( ' utf-8 ' )
2005-06-13 21:16:41 +00:00
2005-08-26 00:52:44 +00:00
config [ ' keyname ' ] = self . xml . get_widget ( ' gpg_name_label ' ) . get_text ( ) . decode ( ' utf-8 ' )
2005-05-10 09:20:35 +00:00
if config [ ' keyname ' ] == ' ' : #no key selected
config [ ' keyid ' ] = ' '
config [ ' savegpgpass ' ] = False
config [ ' gpgpassword ' ] = ' '
2004-10-10 18:44:38 +00:00
else :
2005-08-26 00:52:44 +00:00
config [ ' keyid ' ] = self . xml . get_widget ( ' gpg_key_label ' ) . get_text ( ) . decode ( ' utf-8 ' )
2005-05-10 09:20:35 +00:00
config [ ' savegpgpass ' ] = self . xml . get_widget (
2005-04-21 17:43:47 +00:00
' gpg_save_password_checkbutton ' ) . get_active ( )
2005-11-15 18:12:22 +00:00
config [ ' gpgpassword ' ] = self . xml . get_widget ( ' gpg_password_entry '
) . get_text ( ) . decode ( ' utf-8 ' )
2005-11-03 10:32:26 +00:00
#if we modify the name of the account
if name != self . account :
#update variables
2005-11-15 18:12:22 +00:00
gajim . interface . instances [ name ] = gajim . interface . instances [ self . account ]
2005-11-03 10:32:26 +00:00
gajim . awaiting_events [ name ] = gajim . awaiting_events [ self . account ]
gajim . nicks [ name ] = gajim . nicks [ self . account ]
gajim . allow_notifications [ name ] = \
gajim . allow_notifications [ self . account ]
gajim . groups [ name ] = gajim . groups [ self . account ]
gajim . contacts [ name ] = gajim . contacts [ self . account ]
gajim . gc_contacts [ name ] = gajim . gc_contacts [ self . account ]
gajim . gc_connected [ name ] = gajim . gc_connected [ self . account ]
gajim . newly_added [ name ] = gajim . newly_added [ self . account ]
gajim . to_be_removed [ name ] = gajim . to_be_removed [ self . account ]
gajim . sleeper_state [ name ] = gajim . sleeper_state [ self . account ]
gajim . encrypted_chats [ name ] = gajim . encrypted_chats [ self . account ]
gajim . last_message_time [ name ] = \
gajim . last_message_time [ self . account ]
gajim . status_before_autoaway [ name ] = \
gajim . status_before_autoaway [ self . account ]
gajim . events_for_ui [ name ] = gajim . events_for_ui [ self . account ]
#upgrade account variable in opened windows
for kind in ( ' infos ' , ' disco ' , ' chats ' , ' gc ' , ' gc_config ' ) :
2005-11-13 15:08:47 +00:00
for j in gajim . interface . instances [ name ] [ kind ] :
gajim . interface . instances [ name ] [ kind ] [ j ] . account = name
2005-11-03 10:32:26 +00:00
#upgrade account in systray
if gajim . interface . systray_enabled :
for list in gajim . interface . systray . jids :
if list [ 0 ] == self . account :
list [ 0 ] = name
2005-11-13 15:08:47 +00:00
del gajim . interface . instances [ self . account ]
2005-11-03 10:32:26 +00:00
del gajim . awaiting_events [ self . account ]
del gajim . nicks [ self . account ]
del gajim . allow_notifications [ self . account ]
del gajim . groups [ self . account ]
del gajim . contacts [ self . account ]
del gajim . gc_contacts [ self . account ]
del gajim . gc_connected [ self . account ]
del gajim . newly_added [ self . account ]
del gajim . to_be_removed [ self . account ]
del gajim . sleeper_state [ self . account ]
del gajim . encrypted_chats [ self . account ]
del gajim . last_message_time [ self . account ]
del gajim . status_before_autoaway [ self . account ]
del gajim . events_for_ui [ self . account ]
gajim . connections [ self . account ] . name = name
gajim . connections [ name ] = gajim . connections [ self . account ]
del gajim . connections [ self . account ]
gajim . config . del_per ( ' accounts ' , self . account )
gajim . config . add_per ( ' accounts ' , name )
self . account = name
2005-12-06 12:45:32 +00:00
2005-05-10 09:20:35 +00:00
for opt in config :
gajim . config . set_per ( ' accounts ' , name , opt , config [ opt ] )
if config [ ' savepass ' ] :
gajim . connections [ name ] . password = config [ ' password ' ]
2005-11-05 11:21:41 +00:00
else :
gajim . connections [ name ] . password = None
2004-05-15 16:50:38 +00:00
#refresh accounts window
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' accounts ' ) :
gajim . interface . instances [ ' accounts ' ] . init_accounts ( )
2004-05-15 16:50:38 +00:00
#refresh roster
2005-10-20 11:17:17 +00:00
gajim . interface . roster . draw_roster ( )
gajim . interface . save_config ( )
2005-04-12 15:30:09 +00:00
self . window . destroy ( )
2004-05-15 16:50:38 +00:00
2005-03-04 13:10:00 +00:00
def on_change_password_button_clicked ( self , widget ) :
2005-07-18 11:03:53 +00:00
try :
2005-10-20 11:17:17 +00:00
dialog = dialogs . ChangePasswordDialog ( self . account )
2005-12-06 12:45:32 +00:00
except RuntimeError :
2005-07-18 14:15:33 +00:00
#if we showed ErrorDialog, there will not be dialog instance
2005-07-18 11:03:53 +00:00
return
2005-12-06 12:45:32 +00:00
2005-03-04 13:10:00 +00:00
new_password = dialog . run ( )
if new_password != - 1 :
2005-10-30 16:50:05 +00:00
gajim . connections [ self . account ] . change_password ( new_password )
2005-03-04 13:10:00 +00:00
if self . xml . get_widget ( ' save_password_checkbutton ' ) . get_active ( ) :
self . xml . get_widget ( ' password_entry ' ) . set_text ( new_password )
2005-02-28 22:09:21 +00:00
def on_edit_details_button_clicked ( self , widget ) :
2005-11-13 15:08:47 +00:00
if not gajim . interface . instances . has_key ( self . account ) :
2005-06-10 21:14:16 +00:00
dialogs . ErrorDialog ( _ ( ' No such account available ' ) ,
2005-06-07 01:10:24 +00:00
_ ( ' You must create your account before editing your personal information. ' ) ) . get_response ( )
2005-03-07 21:03:48 +00:00
return
2005-08-26 00:52:44 +00:00
jid = self . xml . get_widget ( ' jid_entry ' ) . get_text ( ) . decode ( ' utf-8 ' )
2005-07-18 21:16:31 +00:00
2005-07-18 21:26:42 +00:00
# show error dialog if account is newly created (not in gajim.connections)
2005-07-18 21:16:31 +00:00
if not gajim . connections . has_key ( self . account ) or \
2005-07-18 21:26:42 +00:00
gajim . connections [ self . account ] . connected < 2 :
2005-06-10 21:14:16 +00:00
dialogs . ErrorDialog ( _ ( ' You are not connected to the server ' ) ,
2005-07-18 21:26:42 +00:00
_ ( ' Without a connection, you can not edit your personal information. ' )
) . get_response ( )
2005-03-07 21:03:48 +00:00
return
2005-12-06 12:45:32 +00:00
2005-11-08 17:18:22 +00:00
# in infos the key jid is OUR jid so we save the vcardwindow instance there
2005-11-13 15:08:47 +00:00
if gajim . interface . instances [ self . account ] [ ' infos ' ] . has_key ( jid ) :
gajim . interface . instances [ self . account ] [ ' infos ' ] [ jid ] . window . present ( )
2005-11-08 17:18:22 +00:00
else :
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ self . account ] [ ' infos ' ] [ jid ] = \
2005-11-13 20:25:04 +00:00
vcard . VcardWindow ( jid , self . account , True )
2005-04-14 09:38:08 +00:00
gajim . connections [ self . account ] . request_vcard ( jid )
2005-06-08 22:05:45 +00:00
def on_manage_proxies_button_clicked ( self , widget ) :
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' manage_proxies ' ) :
gajim . interface . instances [ ' manage_proxies ' ] . window . present ( )
2005-06-08 22:05:45 +00:00
else :
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ ' manage_proxies ' ] = \
2005-10-20 11:17:17 +00:00
ManageProxiesWindow ( )
2005-06-08 22:05:45 +00:00
2005-04-21 23:20:18 +00:00
def on_gpg_choose_button_clicked ( self , widget , data = None ) :
2005-07-18 14:16:55 +00:00
if gajim . connections . has_key ( self . account ) :
secret_keys = gajim . connections [ self . account ] . ask_gpg_secrete_keys ( )
# self.account is None and/or gajim.connections is {}
else :
from common import GnuPG
if GnuPG . USE_GPG :
2005-07-20 13:55:50 +00:00
secret_keys = GnuPG . GnuPG ( ) . get_secret_keys ( )
2005-07-18 14:16:55 +00:00
else :
secret_keys = [ ]
2005-04-12 21:09:06 +00:00
if not secret_keys :
2005-06-10 21:14:16 +00:00
dialogs . ErrorDialog ( _ ( ' Failed to get secret keys ' ) ,
2005-08-12 12:10:27 +00:00
_ ( ' There was a problem retrieving your OpenPGP secret keys. ' ) ) . get_response ( )
2005-04-12 21:09:06 +00:00
return
secret_keys [ ' None ' ] = ' None '
2005-07-22 22:49:03 +00:00
instance = dialogs . ChooseGPGKeyDialog ( _ ( ' Passphrase ' ) ,
_ ( ' Choose your OpenPGP key ' ) , secret_keys )
2005-08-02 16:27:25 +00:00
keyID = instance . run ( )
2005-07-22 22:49:03 +00:00
if keyID is None :
2004-10-10 18:44:38 +00:00
return
2005-04-22 01:05:31 +00:00
checkbutton = self . xml . get_widget ( ' gpg_save_password_checkbutton ' )
2005-02-28 22:09:21 +00:00
gpg_key_label = self . xml . get_widget ( ' gpg_key_label ' )
gpg_name_label = self . xml . get_widget ( ' gpg_name_label ' )
2004-10-10 18:44:38 +00:00
if keyID [ 0 ] == ' None ' :
2005-02-28 22:09:21 +00:00
gpg_key_label . set_text ( _ ( ' No key selected ' ) )
gpg_name_label . set_text ( ' ' )
2005-04-22 01:05:31 +00:00
checkbutton . set_sensitive ( False )
2005-02-28 22:09:21 +00:00
self . xml . get_widget ( ' gpg_password_entry ' ) . set_sensitive ( False )
2004-10-10 18:44:38 +00:00
else :
2005-02-28 22:09:21 +00:00
gpg_key_label . set_text ( keyID [ 0 ] )
gpg_name_label . set_text ( keyID [ 1 ] )
2005-04-22 01:05:31 +00:00
checkbutton . set_sensitive ( True )
checkbutton . set_active ( False )
2005-02-28 22:09:21 +00:00
self . xml . get_widget ( ' gpg_password_entry ' ) . set_text ( ' ' )
2004-11-01 13:41:00 +00:00
2005-02-28 22:09:21 +00:00
def on_checkbutton_toggled_and_clear ( self , widget , widgets ) :
self . on_checkbutton_toggled ( widget , widgets )
2004-11-01 13:41:00 +00:00
for w in widgets :
if not widget . get_active ( ) :
w . set_text ( ' ' )
2004-10-10 18:44:38 +00:00
2005-06-13 21:16:41 +00:00
def on_use_ssl_checkbutton_toggled ( self , widget ) :
isactive = widget . get_active ( )
if isactive :
self . xml . get_widget ( ' custom_port_entry ' ) . set_text ( ' 5223 ' )
else :
self . xml . get_widget ( ' custom_port_entry ' ) . set_text ( ' 5222 ' )
2005-06-25 23:25:17 +00:00
def on_send_keepalive_checkbutton_toggled ( self , widget ) :
isactive = widget . get_active ( )
gajim . config . set_per ( ' accounts ' , self . account ,
' keep_alives_enabled ' , isactive )
2005-12-06 12:45:32 +00:00
2005-06-13 10:57:49 +00:00
def on_custom_host_port_checkbutton_toggled ( self , widget ) :
isactive = widget . get_active ( )
self . xml . get_widget ( ' custom_host_port_hbox ' ) . set_sensitive ( isactive )
2005-02-28 22:09:21 +00:00
def on_gpg_save_password_checkbutton_toggled ( self , widget ) :
2005-06-08 13:45:30 +00:00
self . on_checkbutton_toggled_and_clear ( widget , [
2005-02-28 22:09:21 +00:00
self . xml . get_widget ( ' gpg_password_entry ' ) ] )
def on_save_password_checkbutton_toggled ( self , widget ) :
2005-06-08 13:45:30 +00:00
self . on_checkbutton_toggled_and_clear ( widget ,
2005-02-28 22:09:21 +00:00
[ self . xml . get_widget ( ' password_entry ' ) ] )
2005-03-11 00:32:41 +00:00
self . xml . get_widget ( ' password_entry ' ) . grab_focus ( )
2005-02-24 22:16:21 +00:00
2005-06-10 21:14:16 +00:00
#---------- ManageProxiesWindow class -------------#
class ManageProxiesWindow :
2005-10-20 11:17:17 +00:00
def __init__ ( self ) :
2005-06-08 22:05:45 +00:00
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' manage_proxies_window ' , APP )
self . window = self . xml . get_widget ( ' manage_proxies_window ' )
self . proxies_treeview = self . xml . get_widget ( ' proxies_treeview ' )
self . proxyname_entry = self . xml . get_widget ( ' proxyname_entry ' )
self . init_list ( )
self . xml . signal_autoconnect ( self )
self . window . show_all ( )
def fill_proxies_treeview ( self ) :
model = self . proxies_treeview . get_model ( )
model . clear ( )
iter = model . append ( )
model . set ( iter , 0 , ' None ' )
for p in gajim . config . get_per ( ' proxies ' ) :
iter = model . append ( )
model . set ( iter , 0 , p )
def init_list ( self ) :
self . xml . get_widget ( ' remove_proxy_button ' ) . set_sensitive ( False )
self . xml . get_widget ( ' proxytype_combobox ' ) . set_sensitive ( False )
self . xml . get_widget ( ' proxy_table ' ) . set_sensitive ( False )
2005-06-18 13:48:43 +00:00
model = gtk . ListStore ( str )
2005-06-08 22:05:45 +00:00
self . proxies_treeview . set_model ( model )
col = gtk . TreeViewColumn ( ' Proxies ' )
self . proxies_treeview . append_column ( col )
renderer = gtk . CellRendererText ( )
col . pack_start ( renderer , True )
col . set_attributes ( renderer , text = 0 )
self . fill_proxies_treeview ( )
self . xml . get_widget ( ' proxytype_combobox ' ) . set_active ( 0 )
def on_manage_proxies_window_destroy ( self , widget ) :
for account in gajim . connections :
2005-11-13 15:08:47 +00:00
if gajim . interface . instances [ account ] . has_key ( ' account_modification ' ) :
gajim . interface . instances [ account ] [ ' account_modification ' ] . \
2005-06-08 22:05:45 +00:00
update_proxy_list ( )
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' account_modification ' ) :
gajim . interface . instances [ ' account_modification ' ] . update_proxy_list ( )
2005-12-06 12:45:32 +00:00
del gajim . interface . instances [ ' manage_proxies ' ]
2005-06-08 22:05:45 +00:00
def on_add_proxy_button_clicked ( self , widget ) :
model = self . proxies_treeview . get_model ( )
proxies = gajim . config . get_per ( ' proxies ' )
i = 1
2005-08-26 00:52:44 +00:00
while ( ' proxy ' + unicode ( i ) ) in proxies :
2005-06-08 22:05:45 +00:00
i + = 1
iter = model . append ( )
2005-08-26 00:52:44 +00:00
model . set ( iter , 0 , ' proxy ' + unicode ( i ) )
gajim . config . add_per ( ' proxies ' , ' proxy ' + unicode ( i ) )
2005-06-08 22:05:45 +00:00
def on_remove_proxy_button_clicked ( self , widget ) :
( model , iter ) = self . proxies_treeview . get_selection ( ) . get_selected ( )
if not iter :
return
2005-10-07 13:37:04 +00:00
proxy = model [ iter ] [ 0 ] . decode ( ' utf-8 ' )
2005-06-08 22:05:45 +00:00
model . remove ( iter )
gajim . config . del_per ( ' proxies ' , proxy )
self . xml . get_widget ( ' remove_proxy_button ' ) . set_sensitive ( False )
def on_close_button_clicked ( self , widget ) :
self . window . destroy ( )
2005-12-06 12:45:32 +00:00
2005-06-08 22:05:45 +00:00
def on_useauth_checkbutton_toggled ( self , widget ) :
act = widget . get_active ( )
self . xml . get_widget ( ' proxyuser_entry ' ) . set_sensitive ( act )
self . xml . get_widget ( ' proxypass_entry ' ) . set_sensitive ( act )
def on_proxies_treeview_cursor_changed ( self , widget ) :
2005-10-07 13:37:04 +00:00
#FIXME: check if off proxy settings are correct (see http://trac.gajim.org/changeset/1921#file2 line 1221
2005-06-08 22:05:45 +00:00
( model , iter ) = widget . get_selection ( ) . get_selected ( )
if not iter :
return
2005-10-07 13:37:04 +00:00
proxy = model [ iter ] [ 0 ]
2005-06-08 22:05:45 +00:00
self . xml . get_widget ( ' proxyname_entry ' ) . set_text ( proxy )
proxyhost_entry = self . xml . get_widget ( ' proxyhost_entry ' )
proxyport_entry = self . xml . get_widget ( ' proxyport_entry ' )
proxyuser_entry = self . xml . get_widget ( ' proxyuser_entry ' )
proxypass_entry = self . xml . get_widget ( ' proxypass_entry ' )
useauth_checkbutton = self . xml . get_widget ( ' useauth_checkbutton ' )
proxyhost_entry . set_text ( ' ' )
proxyport_entry . set_text ( ' ' )
proxyuser_entry . set_text ( ' ' )
proxypass_entry . set_text ( ' ' )
useauth_checkbutton . set_active ( False )
self . on_useauth_checkbutton_toggled ( useauth_checkbutton )
2005-10-07 13:37:04 +00:00
if proxy == ' None ' : # special proxy None
2005-06-08 22:05:45 +00:00
self . proxyname_entry . set_editable ( False )
2005-10-07 13:37:04 +00:00
self . xml . get_widget ( ' remove_proxy_button ' ) . set_sensitive ( False )
2005-06-08 22:05:45 +00:00
self . xml . get_widget ( ' proxytype_combobox ' ) . set_sensitive ( False )
self . xml . get_widget ( ' proxy_table ' ) . set_sensitive ( False )
else :
self . proxyname_entry . set_editable ( True )
2005-10-07 13:37:04 +00:00
self . xml . get_widget ( ' remove_proxy_button ' ) . set_sensitive ( True )
2005-06-08 22:05:45 +00:00
self . xml . get_widget ( ' proxytype_combobox ' ) . set_sensitive ( True )
self . xml . get_widget ( ' proxy_table ' ) . set_sensitive ( True )
proxyhost_entry . set_text ( gajim . config . get_per ( ' proxies ' , proxy ,
' host ' ) )
2005-08-26 00:52:44 +00:00
proxyport_entry . set_text ( unicode ( gajim . config . get_per ( ' proxies ' ,
proxy , ' port ' ) ) )
2005-06-08 22:05:45 +00:00
proxyuser_entry . set_text ( gajim . config . get_per ( ' proxies ' , proxy ,
' user ' ) )
proxypass_entry . set_text ( gajim . config . get_per ( ' proxies ' , proxy ,
' pass ' ) )
2005-10-07 13:37:04 +00:00
#FIXME: if we have several proxy types, set the combobox
2005-06-08 22:05:45 +00:00
if gajim . config . get_per ( ' proxies ' , proxy , ' user ' ) :
useauth_checkbutton . set_active ( True )
def on_proxies_treeview_key_press_event ( self , widget , event ) :
if event . keyval == gtk . keysyms . Delete :
self . on_remove_proxy_button_clicked ( widget )
def on_proxyname_entry_changed ( self , widget ) :
( model , iter ) = self . proxies_treeview . get_selection ( ) . get_selected ( )
if not iter :
return
2005-08-26 00:52:44 +00:00
old_name = model . get_value ( iter , 0 ) . decode ( ' utf-8 ' )
new_name = widget . get_text ( ) . decode ( ' utf-8 ' )
2005-06-08 22:05:45 +00:00
if new_name == ' ' :
return
if new_name == old_name :
return
config = gajim . config . get_per ( ' proxies ' , old_name )
gajim . config . del_per ( ' proxies ' , old_name )
gajim . config . add_per ( ' proxies ' , new_name )
for option in config :
gajim . config . set_per ( ' proxies ' , new_name , option ,
config [ option ] [ common . config . OPT_VAL ] )
model . set_value ( iter , 0 , new_name )
def on_proxytype_combobox_changed ( self , widget ) :
2005-10-07 13:37:04 +00:00
#FIXME: if we have several proxy types take them into account
2005-06-08 22:05:45 +00:00
pass
def on_proxyhost_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
value = widget . get_text ( ) . decode ( ' utf-8 ' )
proxy = self . proxyname_entry . get_text ( ) . decode ( ' utf-8 ' )
2005-06-08 22:05:45 +00:00
gajim . config . set_per ( ' proxies ' , proxy , ' host ' , value )
def on_proxyport_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
value = widget . get_text ( ) . decode ( ' utf-8 ' )
proxy = self . proxyname_entry . get_text ( ) . decode ( ' utf-8 ' )
2005-06-08 22:05:45 +00:00
gajim . config . set_per ( ' proxies ' , proxy , ' port ' , value )
def on_proxyuser_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
value = widget . get_text ( ) . decode ( ' utf-8 ' )
proxy = self . proxyname_entry . get_text ( ) . decode ( ' utf-8 ' )
2005-06-08 22:05:45 +00:00
gajim . config . set_per ( ' proxies ' , proxy , ' user ' , value )
def on_proxypass_entry_changed ( self , widget ) :
2005-08-26 00:52:44 +00:00
value = widget . get_text ( ) . decode ( ' utf-8 ' )
proxy = self . proxyname_entry . get_text ( ) . decode ( ' utf-8 ' )
2005-06-08 22:05:45 +00:00
gajim . config . set_per ( ' proxies ' , proxy , ' pass ' , value )
2005-06-10 21:14:16 +00:00
#---------- AccountsWindow class -------------#
class AccountsWindow :
2005-05-26 00:07:49 +00:00
''' Class for accounts window: list of accounts '''
2005-04-02 20:35:33 +00:00
def on_accounts_window_destroy ( self , widget ) :
2005-12-06 12:45:32 +00:00
del gajim . interface . instances [ ' accounts ' ]
2005-03-29 17:49:10 +00:00
2005-03-01 18:00:34 +00:00
def on_close_button_clicked ( self , widget ) :
2005-04-12 15:30:09 +00:00
self . window . destroy ( )
2005-04-02 20:35:33 +00:00
2005-10-20 11:17:17 +00:00
def __init__ ( self ) :
2005-05-26 00:07:49 +00:00
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' accounts_window ' , APP )
self . window = self . xml . get_widget ( ' accounts_window ' )
self . accounts_treeview = self . xml . get_widget ( ' accounts_treeview ' )
self . modify_button = self . xml . get_widget ( ' modify_button ' )
self . remove_button = self . xml . get_widget ( ' remove_button ' )
2005-11-20 12:48:10 +00:00
model = gtk . ListStore ( str , str , bool )
2005-05-26 00:07:49 +00:00
self . accounts_treeview . set_model ( model )
#columns
renderer = gtk . CellRendererText ( )
self . accounts_treeview . insert_column_with_attributes ( - 1 ,
_ ( ' Name ' ) , renderer , text = 0 )
renderer = gtk . CellRendererText ( )
self . accounts_treeview . insert_column_with_attributes ( - 1 ,
_ ( ' Server ' ) , renderer , text = 1 )
self . xml . signal_autoconnect ( self )
self . init_accounts ( )
self . window . show_all ( )
2005-11-29 17:13:13 +00:00
#Merge accounts
st = gajim . config . get ( ' mergeaccounts ' )
self . xml . get_widget ( ' merge_checkbutton ' ) . set_active ( st )
2005-05-26 00:07:49 +00:00
def on_accounts_window_key_press_event ( self , widget , event ) :
if event . keyval == gtk . keysyms . Escape :
2005-12-06 12:45:32 +00:00
self . window . destroy ( )
2005-05-26 00:07:49 +00:00
2004-05-15 16:50:38 +00:00
def init_accounts ( self ) :
2005-04-18 12:17:43 +00:00
''' initialize listStore with existing accounts '''
2005-03-11 01:10:30 +00:00
self . modify_button . set_sensitive ( False )
2005-04-19 22:29:38 +00:00
self . remove_button . set_sensitive ( False )
2005-02-28 17:45:06 +00:00
model = self . accounts_treeview . get_model ( )
2004-05-15 16:50:38 +00:00
model . clear ( )
2005-04-14 07:05:10 +00:00
for account in gajim . connections :
2004-05-15 16:50:38 +00:00
iter = model . append ( )
2005-09-11 00:32:58 +00:00
model . set ( iter , 0 , account , 1 , gajim . get_hostname_from_account ( account ) )
2004-05-15 16:50:38 +00:00
2005-03-01 18:27:21 +00:00
def on_accounts_treeview_cursor_changed ( self , widget ) :
2005-04-18 12:17:43 +00:00
''' Activate delete and modify buttons when a row is selected '''
2005-03-11 01:10:30 +00:00
self . modify_button . set_sensitive ( True )
2005-04-19 22:29:38 +00:00
self . remove_button . set_sensitive ( True )
2004-05-15 16:50:38 +00:00
2005-03-01 18:00:34 +00:00
def on_new_button_clicked ( self , widget ) :
2005-05-26 00:07:49 +00:00
''' When new button is clicked: open an account information window '''
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' account_creation_wizard ' ) :
2005-12-06 12:45:32 +00:00
gajim . interface . instances [ ' account_creation_wizard ' ] . window . present ( )
2005-04-17 20:18:50 +00:00
else :
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ ' account_creation_wizard ' ] = \
2005-11-03 09:33:22 +00:00
AccountCreationWizardWindow ( )
2005-04-17 20:18:50 +00:00
2005-04-19 22:29:38 +00:00
def on_remove_button_clicked ( self , widget ) :
2005-05-26 00:07:49 +00:00
''' When delete button is clicked:
2005-04-18 12:17:43 +00:00
Remove an account from the listStore and from the config file '''
2005-02-28 17:45:06 +00:00
sel = self . accounts_treeview . get_selection ( )
2004-05-15 16:50:38 +00:00
( model , iter ) = sel . get_selected ( )
2005-04-22 01:05:31 +00:00
if not iter :
return
2005-08-26 00:52:44 +00:00
account = model . get_value ( iter , 0 ) . decode ( ' utf-8 ' )
2005-11-13 15:08:47 +00:00
if gajim . interface . instances [ account ] . has_key ( ' remove_account ' ) :
gajim . interface . instances [ account ] [ ' remove_account ' ] . window . present ( )
2005-04-19 23:43:58 +00:00
else :
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ account ] [ ' remove_account ' ] = \
2005-10-20 11:17:17 +00:00
RemoveAccountWindow ( account )
2004-05-15 16:50:38 +00:00
2005-03-01 18:00:34 +00:00
def on_modify_button_clicked ( self , widget ) :
2005-04-18 12:17:43 +00:00
''' When modify button is clicked:
open / show the account modification window for this account '''
2005-04-17 20:18:50 +00:00
sel = self . accounts_treeview . get_selection ( )
( model , iter ) = sel . get_selected ( )
2005-04-22 01:05:31 +00:00
if not iter :
return
2005-10-04 07:12:30 +00:00
account = model [ iter ] [ 0 ] . decode ( ' utf-8 ' )
self . show_modification_window ( account )
def on_accounts_treeview_row_activated ( self , widget , path , column ) :
model = widget . get_model ( )
iter = model . get_iter ( path )
account = model [ iter ] [ 0 ] . decode ( ' utf-8 ' )
self . show_modification_window ( account )
def show_modification_window ( self , account ) :
2005-11-13 15:08:47 +00:00
if gajim . interface . instances [ account ] . has_key ( ' account_modification ' ) :
gajim . interface . instances [ account ] [ ' account_modification ' ] . window . present ( )
2005-03-11 01:10:30 +00:00
else :
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ account ] [ ' account_modification ' ] = \
2005-10-20 11:17:17 +00:00
AccountModificationWindow ( account )
2004-05-15 16:50:38 +00:00
2005-11-29 17:13:13 +00:00
def on_merge_checkbutton_toggled ( self , widget ) :
gajim . config . set ( ' mergeaccounts ' , widget . get_active ( ) )
gajim . interface . save_config ( )
gajim . interface . roster . regroup = gajim . config . get ( ' mergeaccounts ' )
gajim . interface . roster . draw_roster ( )
2005-10-05 10:13:31 +00:00
class DataFormWindow :
2005-10-20 11:17:17 +00:00
def __init__ ( self , account , config ) :
2005-10-05 10:13:31 +00:00
self . account = account
self . config = config
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' data_form_window ' , APP )
self . window = self . xml . get_widget ( ' data_form_window ' )
self . config_table = self . xml . get_widget ( ' config_table ' )
self . fill_table ( )
self . xml . signal_autoconnect ( self )
self . window . show_all ( )
def on_data_form_window_destroy ( self , widget ) :
pass
def on_close_button_clicked ( self , widget ) :
self . window . destroy ( )
2005-12-06 12:45:32 +00:00
2005-10-05 10:13:31 +00:00
def on_checkbutton_toggled ( self , widget , index ) :
self . config [ index ] [ ' values ' ] [ 0 ] = widget . get_active ( )
2005-11-22 23:10:08 +00:00
def on_checkbutton_toggled2 ( self , widget , index1 , index2 ) :
val = self . config [ index1 ] [ ' options ' ] [ index2 ] [ ' values ' ] [ 0 ]
if widget . get_active ( ) and val not in self . config [ index1 ] [ ' values ' ] :
self . config [ index1 ] [ ' values ' ] . append ( val )
elif not widget . get_active ( ) and val in self . config [ index1 ] [ ' values ' ] :
self . config [ index1 ] [ ' values ' ] . remove ( val )
2005-10-05 10:13:31 +00:00
def on_combobox_changed ( self , widget , index ) :
self . config [ index ] [ ' values ' ] [ 0 ] = self . config [ index ] [ ' options ' ] [ \
widget . get_active ( ) ] [ ' values ' ] [ 0 ]
def on_entry_changed ( self , widget , index ) :
self . config [ index ] [ ' values ' ] [ 0 ] = widget . get_text ( ) . decode ( ' utf-8 ' )
def on_textbuffer_changed ( self , widget , index ) :
begin , end = widget . get_bounds ( )
self . config [ index ] [ ' values ' ] [ 0 ] = widget . get_text ( begin , end )
2005-12-06 12:45:32 +00:00
2005-10-05 10:13:31 +00:00
def fill_table ( self ) :
2005-11-22 23:10:08 +00:00
''' see JEP0004 '''
2005-10-05 10:13:31 +00:00
if self . config . has_key ( ' title ' ) :
self . window . set_title ( self . config [ ' title ' ] )
if self . config . has_key ( ' instructions ' ) :
self . xml . get_widget ( ' instructions_label ' ) . set_text (
self . config [ ' instructions ' ] )
i = 0
while self . config . has_key ( i ) :
if not self . config [ i ] . has_key ( ' type ' ) :
i + = 1
continue
ctype = self . config [ i ] [ ' type ' ]
if ctype == ' hidden ' :
i + = 1
continue
nbrows = self . config_table . get_property ( ' n-rows ' )
self . config_table . resize ( nbrows + 1 , 2 )
if self . config [ i ] . has_key ( ' label ' ) :
label = gtk . Label ( self . config [ i ] [ ' label ' ] )
label . set_alignment ( 0.0 , 0.5 )
2005-12-06 12:45:32 +00:00
self . config_table . attach ( label , 0 , 1 , nbrows , nbrows + 1 ,
2005-10-05 10:13:31 +00:00
gtk . FILL | gtk . SHRINK )
desc = None
if self . config [ i ] . has_key ( ' desc ' ) :
desc = self . config [ i ] [ ' desc ' ]
max = 1
if ctype == ' boolean ' :
widget = gtk . CheckButton ( desc , False )
widget . set_active ( self . config [ i ] [ ' values ' ] [ 0 ] )
widget . connect ( ' toggled ' , self . on_checkbutton_toggled , i )
max = 2
elif ctype == ' fixed ' :
widget = gtk . Label ( ' \n ' . join ( self . config [ i ] [ ' values ' ] ) )
widget . set_alignment ( 0.0 , 0.5 )
max = 4
elif ctype == ' jid-multi ' :
#TODO
widget = gtk . Label ( ' ' )
elif ctype == ' jid-single ' :
#TODO
widget = gtk . Label ( ' ' )
elif ctype == ' list-multi ' :
2005-11-22 23:10:08 +00:00
j = 0
widget = gtk . Table ( 1 , 1 )
while self . config [ i ] [ ' options ' ] . has_key ( j ) :
widget . resize ( j + 1 , 1 )
child = gtk . CheckButton ( self . config [ i ] [ ' options ' ] [ j ] [ ' label ' ] ,
False )
if self . config [ i ] [ ' options ' ] [ j ] [ ' values ' ] [ 0 ] in self . config [ i ] [ ' values ' ] :
child . set_active ( True )
child . connect ( ' toggled ' , self . on_checkbutton_toggled2 , i , j )
widget . attach ( child , 0 , 1 , j , j + 1 )
j + = 1
max = 4
2005-10-05 10:13:31 +00:00
elif ctype == ' list-single ' :
widget = gtk . combo_box_new_text ( )
widget . connect ( ' changed ' , self . on_combobox_changed , i )
index = 0
j = 0
while self . config [ i ] [ ' options ' ] . has_key ( j ) :
if self . config [ i ] [ ' options ' ] [ j ] [ ' values ' ] [ 0 ] == \
self . config [ i ] [ ' values ' ] [ 0 ] :
index = j
widget . append_text ( self . config [ i ] [ ' options ' ] [ j ] [ ' label ' ] )
j + = 1
widget . set_active ( index )
max = 3
elif ctype == ' text-multi ' :
widget = gtk . TextView ( )
widget . get_buffer ( ) . connect ( ' changed ' , self . on_textbuffer_changed , \
i )
widget . get_buffer ( ) . set_text ( ' \n ' . join ( self . config [ i ] [ ' values ' ] ) )
max = 4
elif ctype == ' text-private ' :
widget = gtk . Entry ( )
widget . connect ( ' changed ' , self . on_entry_changed , i )
if not self . config [ i ] . has_key ( ' values ' ) :
self . config [ i ] [ ' values ' ] = [ ' ' ]
widget . set_text ( self . config [ i ] [ ' values ' ] [ 0 ] )
widget . set_visibility ( False )
max = 3
elif ctype == ' text-single ' :
widget = gtk . Entry ( )
widget . connect ( ' changed ' , self . on_entry_changed , i )
if not self . config [ i ] . has_key ( ' values ' ) :
self . config [ i ] [ ' values ' ] = [ ' ' ]
2005-11-20 12:23:17 +00:00
widget . set_text ( self . config [ i ] [ ' values ' ] [ 0 ] )
2005-10-05 10:13:31 +00:00
max = 3
i + = 1
if max < 4 :
self . config_table . attach ( widget , 1 , max ,
nbrows , nbrows + 1 ,
gtk . FILL | gtk . SHRINK )
widget = gtk . Label ( )
self . config_table . attach ( widget , max , 4 ,
nbrows , nbrows + 1 )
else :
self . config_table . attach ( widget , 1 , max ,
nbrows , nbrows + 1 )
self . config_table . show_all ( )
class ServiceRegistrationWindow ( DataFormWindow ) :
2005-04-18 12:17:43 +00:00
''' Class for Service registration window:
Window that appears when we want to subscribe to a service '''
2005-03-02 13:11:21 +00:00
def on_cancel_button_clicked ( self , widget ) :
2005-04-12 15:30:09 +00:00
self . window . destroy ( )
2005-10-05 10:13:31 +00:00
2004-05-15 16:50:38 +00:00
def draw_table ( self ) :
2005-04-18 12:17:43 +00:00
''' Draw the table in the window '''
2004-05-15 16:50:38 +00:00
nbrow = 0
table = self . xml . get_widget ( ' table ' )
for name in self . infos . keys ( ) :
2005-10-27 13:15:03 +00:00
if name in ( ' key ' , ' instructions ' , ' x ' , ' registered ' ) :
2005-04-20 18:04:26 +00:00
continue
2005-06-08 22:08:53 +00:00
if not name :
continue
2005-04-20 18:04:26 +00:00
nbrow = nbrow + 1
table . resize ( rows = nbrow , columns = 2 )
label = gtk . Label ( name . capitalize ( ) + ' : ' )
table . attach ( label , 0 , 1 , nbrow - 1 , nbrow , 0 , 0 , 0 , 0 )
entry = gtk . Entry ( )
2005-05-22 01:45:06 +00:00
entry . set_activates_default ( True )
2005-06-12 21:22:54 +00:00
if self . infos [ name ] :
entry . set_text ( self . infos [ name ] )
2005-05-22 11:54:09 +00:00
if name == ' password ' :
entry . set_visibility ( False )
2005-04-20 18:04:26 +00:00
table . attach ( entry , 1 , 2 , nbrow - 1 , nbrow , 0 , 0 , 0 , 0 )
self . entries [ name ] = entry
if nbrow == 1 :
entry . grab_focus ( )
2004-05-15 16:50:38 +00:00
table . show_all ( )
2005-10-05 10:13:31 +00:00
def add_transport_to_roster ( self ) :
user1 = Contact ( jid = self . service , name = self . service ,
groups = [ _ ( ' Transports ' ) ] , show = ' offline ' , status = ' offline ' ,
sub = ' from ' )
gajim . contacts [ self . account ] [ self . service ] = [ user1 ]
2005-10-20 11:17:17 +00:00
gajim . interface . roster . add_contact_to_roster ( self . service , self . account )
2005-10-05 10:13:31 +00:00
2005-03-02 13:11:21 +00:00
def on_ok_button_clicked ( self , widget ) :
2005-05-20 15:05:22 +00:00
''' When Ok button is clicked:
2005-04-18 12:17:43 +00:00
send registration info to the core '''
2004-05-15 16:50:38 +00:00
for name in self . entries . keys ( ) :
2005-08-26 00:52:44 +00:00
self . infos [ name ] = self . entries [ name ] . get_text ( ) . decode ( ' utf-8 ' )
2005-05-25 22:15:28 +00:00
if self . infos . has_key ( ' instructions ' ) :
del self . infos [ ' instructions ' ]
if self . infos . has_key ( ' registered ' ) :
del self . infos [ ' registered ' ]
else :
2005-10-05 10:13:31 +00:00
self . add_transport_to_roster ( )
2005-04-26 18:45:54 +00:00
gajim . connections [ self . account ] . register_agent ( self . service , self . infos )
2005-04-12 15:30:09 +00:00
self . window . destroy ( )
2005-10-05 10:13:31 +00:00
def on_apply_button_clicked ( self , widget ) :
# We press apply button of the FormDataWindow
if self . infos . has_key ( ' registered ' ) :
del self . infos [ ' registered ' ]
else :
self . add_transport_to_roster ( )
gajim . connections [ self . account ] . register_agent ( self . service , self . infos ,
True ) # True is for is_form
self . window . destroy ( )
2005-10-20 11:17:17 +00:00
def __init__ ( self , service , infos , account , is_form ) :
2005-03-28 01:05:28 +00:00
self . service = service
2004-05-15 16:50:38 +00:00
self . infos = infos
self . account = account
2005-10-05 10:13:31 +00:00
if is_form :
2005-10-20 11:17:17 +00:00
DataFormWindow . __init__ ( self , account , infos )
2005-05-25 22:27:40 +00:00
else :
2005-10-05 10:13:31 +00:00
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' service_registration_window ' , APP )
self . window = self . xml . get_widget ( ' service_registration_window ' )
if infos . has_key ( ' registered ' ) :
self . window . set_title ( _ ( ' Edit %s ' % service ) )
else :
self . window . set_title ( _ ( ' Register to %s ' % service ) )
self . xml . get_widget ( ' label ' ) . set_text ( infos [ ' instructions ' ] )
self . entries = { }
self . draw_table ( )
self . xml . signal_autoconnect ( self )
self . window . show_all ( )
2004-05-15 16:50:38 +00:00
2005-06-10 21:14:16 +00:00
#---------- ManageEmoticonsWindow class -------------#
class ManageEmoticonsWindow :
2005-10-20 11:17:17 +00:00
def __init__ ( self ) :
2005-06-11 16:15:01 +00:00
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' manage_emoticons_window ' , APP )
self . window = self . xml . get_widget ( ' manage_emoticons_window ' )
2005-04-06 18:51:54 +00:00
#emoticons
self . emot_tree = self . xml . get_widget ( ' emoticons_treeview ' )
2005-06-18 13:48:43 +00:00
model = gtk . ListStore ( str , str , gtk . Image )
2005-06-18 15:18:15 +00:00
model . set_sort_column_id ( 0 , gtk . SORT_ASCENDING )
2005-04-06 18:51:54 +00:00
self . emot_tree . set_model ( model )
2005-04-06 19:46:39 +00:00
col = gtk . TreeViewColumn ( _ ( ' Text ' ) )
2005-04-06 18:51:54 +00:00
self . emot_tree . append_column ( col )
renderer = gtk . CellRendererText ( )
renderer . connect ( ' edited ' , self . on_emot_cell_edited )
renderer . set_property ( ' editable ' , True )
col . pack_start ( renderer , True )
2005-04-21 23:20:18 +00:00
col . set_attributes ( renderer , text = 0 )
2005-04-06 18:51:54 +00:00
col = gtk . TreeViewColumn ( _ ( ' Image ' ) )
self . emot_tree . append_column ( col )
2005-04-18 14:05:30 +00:00
renderer = cell_renderer_image . CellRendererImage ( )
2005-04-06 18:51:54 +00:00
col . pack_start ( renderer , expand = False )
col . add_attribute ( renderer , ' image ' , 2 )
2005-12-06 12:45:32 +00:00
2005-04-06 18:51:54 +00:00
self . fill_emot_treeview ( )
2005-12-06 12:45:32 +00:00
self . emot_tree . get_model ( ) . connect ( ' row-changed ' ,
2005-04-06 18:51:54 +00:00
self . on_emoticons_treemodel_row_changed )
2005-11-13 14:55:52 +00:00
self . window . show_all ( )
2005-04-06 18:51:54 +00:00
self . xml . signal_autoconnect ( self )
2005-11-13 14:55:52 +00:00
def on_manage_emoticons_window_destroy ( self , widget ) :
2005-11-15 11:52:40 +00:00
gajim . interface . init_emoticons ( ) # update emoticons
2005-11-13 14:55:52 +00:00
# remove us from open windows
2005-11-13 15:08:47 +00:00
del gajim . interface . instances [ ' manage_emots ' ]
2005-12-06 12:45:32 +00:00
2005-04-06 18:51:54 +00:00
def on_close_button_clicked ( self , widget ) :
2005-11-13 14:55:52 +00:00
self . window . destroy ( )
2005-04-06 18:51:54 +00:00
def on_emoticons_treemodel_row_changed ( self , model , path , iter ) :
2005-04-16 14:50:26 +00:00
emots = gajim . config . get_per ( ' emoticons ' )
2005-08-26 00:52:44 +00:00
emot = model . get_value ( iter , 0 ) . decode ( ' utf-8 ' ) . upper ( )
2005-04-16 14:50:26 +00:00
if not emot in emots :
gajim . config . add_per ( ' emoticons ' , emot )
2005-11-16 13:03:50 +00:00
gajim . interface . init_emoticons ( ) # update emoticons
2005-09-05 14:02:36 +00:00
image = model [ iter ] [ 1 ]
if image :
image = image . decode ( ' utf-8 ' )
gajim . config . set_per ( ' emoticons ' , emot , ' path ' , image )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-04-06 18:51:54 +00:00
def image_is_ok ( self , image ) :
if not os . path . exists ( image ) :
2005-06-18 14:28:35 +00:00
return False
2005-04-06 18:51:54 +00:00
img = gtk . Image ( )
try :
img . set_from_file ( image )
except :
2005-06-18 14:28:35 +00:00
return False
2005-06-18 15:57:06 +00:00
t = img . get_storage_type ( )
if t == gtk . IMAGE_PIXBUF :
pix = img . get_pixbuf ( )
elif t == gtk . IMAGE_ANIMATION :
pix = img . get_animation ( ) . get_static_image ( )
else :
2005-06-18 14:28:35 +00:00
return False
2005-04-22 01:05:31 +00:00
2005-04-06 18:51:54 +00:00
if pix . get_width ( ) > 24 or pix . get_height ( ) > 24 :
2005-06-18 14:28:35 +00:00
dialogs . ErrorDialog ( _ ( ' Image is too big ' ) , _ ( ' Image for emoticon has to be less than or equal to 24 pixels in width and 24 in height. ' ) ) . get_response ( )
return False
return True
2005-04-06 18:51:54 +00:00
def fill_emot_treeview ( self ) :
model = self . emot_tree . get_model ( )
model . clear ( )
2005-04-16 14:50:26 +00:00
emots = gajim . config . get_per ( ' emoticons ' )
for emot in emots :
file = gajim . config . get_per ( ' emoticons ' , emot , ' path ' )
iter = model . append ( ( emot , file , None ) )
2005-04-06 18:51:54 +00:00
if not os . path . exists ( file ) :
continue
img = gtk . Image ( )
img . show ( )
if file . find ( ' .gif ' ) != - 1 :
pix = gtk . gdk . PixbufAnimation ( file )
img . set_from_animation ( pix )
else :
pix = gtk . gdk . pixbuf_new_from_file ( file )
img . set_from_pixbuf ( pix )
model . set ( iter , 2 , img )
def on_emot_cell_edited ( self , cell , row , new_text ) :
2005-06-21 10:03:45 +00:00
emots = gajim . config . get_per ( ' emoticons ' )
2005-04-06 18:51:54 +00:00
model = self . emot_tree . get_model ( )
iter = model . get_iter_from_string ( row )
2005-08-26 00:52:44 +00:00
old_text = model . get_value ( iter , 0 ) . decode ( ' utf-8 ' )
2005-06-21 10:03:45 +00:00
if old_text in emots :
gajim . config . del_per ( ' emoticons ' , old_text )
2005-09-05 21:48:39 +00:00
emots = gajim . config . get_per ( ' emoticons ' )
2005-08-26 00:52:44 +00:00
emot = new_text . decode ( ' utf-8 ' ) . upper ( )
2005-06-21 10:03:45 +00:00
if emot in emots :
model . remove ( iter )
else :
gajim . config . add_per ( ' emoticons ' , emot )
2005-11-16 13:03:50 +00:00
gajim . interface . init_emoticons ( ) # update emoticons
2005-06-21 10:03:45 +00:00
gajim . config . set_per ( ' emoticons ' , emot , ' path ' ,
2005-08-26 00:52:44 +00:00
model [ iter ] [ 1 ] . decode ( ' utf-8 ' ) )
2005-09-05 13:59:41 +00:00
model [ iter ] [ 0 ] = emot
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-04-06 18:51:54 +00:00
2005-06-10 19:03:32 +00:00
def update_preview ( self , widget ) :
path_to_file = widget . get_preview_filename ( )
2005-09-05 13:59:41 +00:00
if path_to_file is None or os . path . isdir ( path_to_file ) :
# nothing to preview or directory
# make sure you clean image do show nothing
widget . get_preview_widget ( ) . set_from_file ( None )
2005-09-05 13:35:45 +00:00
return
try :
pixbuf = gtk . gdk . pixbuf_new_from_file_at_size ( path_to_file , 32 , 32 )
except ( gobject . GError , TypeError ) :
return
widget . get_preview_widget ( ) . set_from_pixbuf ( pixbuf )
2005-06-10 19:03:32 +00:00
2005-06-21 08:58:45 +00:00
def on_set_image_button_clicked ( self , widget , data = None ) :
2005-04-06 18:51:54 +00:00
( model , iter ) = self . emot_tree . get_selection ( ) . get_selected ( )
if not iter :
return
2005-08-26 00:52:44 +00:00
file = model [ iter ] [ 1 ] . decode ( ' utf-8 ' )
2005-07-18 17:18:25 +00:00
dialog = gtk . FileChooserDialog ( _ ( ' Choose Image ' ) , None ,
2005-04-22 01:05:31 +00:00
gtk . FILE_CHOOSER_ACTION_OPEN ,
( gtk . STOCK_CANCEL , gtk . RESPONSE_CANCEL ,
gtk . STOCK_OPEN , gtk . RESPONSE_OK ) )
2005-04-06 18:51:54 +00:00
dialog . set_default_response ( gtk . RESPONSE_OK )
2005-08-23 13:22:14 +00:00
last_emoticons_dir = gajim . config . get ( ' last_emoticons_dir ' )
if last_emoticons_dir and os . path . isdir ( ' last_emoticons_dir ' ) :
dialog . set_current_folder ( last_emoticons_dir )
else :
home_dir = os . path . expanduser ( ' ~ ' )
dialog . set_current_folder ( home_dir )
2005-04-06 18:51:54 +00:00
filter = gtk . FileFilter ( )
2005-06-10 19:03:32 +00:00
filter . set_name ( _ ( ' All files ' ) )
2005-04-18 12:17:43 +00:00
filter . add_pattern ( ' * ' )
2005-04-06 18:51:54 +00:00
dialog . add_filter ( filter )
filter = gtk . FileFilter ( )
2005-06-10 19:03:32 +00:00
filter . set_name ( _ ( ' Images ' ) )
2005-04-18 12:17:43 +00:00
filter . add_mime_type ( ' image/png ' )
filter . add_mime_type ( ' image/jpeg ' )
filter . add_mime_type ( ' image/gif ' )
2005-11-14 15:54:13 +00:00
filter . add_mime_type ( ' image/tiff ' )
filter . add_mime_type ( ' image/x-xpixmap ' ) # xpm
2005-04-06 18:51:54 +00:00
dialog . add_filter ( filter )
dialog . set_filter ( filter )
2005-06-10 19:03:32 +00:00
dialog . set_use_preview_label ( False )
dialog . set_preview_widget ( gtk . Image ( ) )
dialog . connect ( ' selection-changed ' , self . update_preview )
2005-04-06 18:51:54 +00:00
file = os . path . join ( os . getcwd ( ) , file )
dialog . set_filename ( file )
2005-12-06 12:45:32 +00:00
file = ' '
2005-04-22 15:56:33 +00:00
ok = False
while not ok :
2005-04-06 18:51:54 +00:00
response = dialog . run ( )
if response == gtk . RESPONSE_OK :
file = dialog . get_filename ( )
2005-10-21 13:21:31 +00:00
try :
file = file . decode ( sys . getfilesystemencoding ( ) )
except :
pass
2005-04-06 18:51:54 +00:00
if self . image_is_ok ( file ) :
2005-04-22 15:56:33 +00:00
ok = True
2005-04-06 18:51:54 +00:00
else :
2005-06-18 17:33:53 +00:00
file = None
2005-04-22 15:56:33 +00:00
ok = True
2005-04-06 18:51:54 +00:00
dialog . destroy ( )
if file :
2005-08-23 13:22:14 +00:00
directory = os . path . dirname ( file )
gajim . config . set ( ' last_emoticons_dir ' , directory )
2005-04-06 18:51:54 +00:00
model . set_value ( iter , 1 , file )
img = gtk . Image ( )
img . show ( )
if file . find ( ' .gif ' ) != - 1 :
pix = gtk . gdk . PixbufAnimation ( file )
img . set_from_animation ( pix )
else :
pix = gtk . gdk . pixbuf_new_from_file ( file )
img . set_from_pixbuf ( pix )
model . set ( iter , 2 , img )
2005-06-21 10:03:45 +00:00
2005-06-21 08:58:45 +00:00
def on_button_new_emoticon_clicked ( self , widget , data = None ) :
2005-04-06 18:51:54 +00:00
model = self . emot_tree . get_model ( )
iter = model . append ( )
2005-06-21 10:03:45 +00:00
model . set ( iter , 0 , ' EMOTICON ' , 1 , ' ' )
2005-04-06 18:51:54 +00:00
col = self . emot_tree . get_column ( 0 )
self . emot_tree . set_cursor ( model . get_path ( iter ) , col , True )
2005-06-21 08:58:45 +00:00
def on_button_remove_emoticon_clicked ( self , widget , data = None ) :
2005-04-06 18:51:54 +00:00
( model , iter ) = self . emot_tree . get_selection ( ) . get_selected ( )
if not iter :
return
2005-08-26 00:52:44 +00:00
gajim . config . del_per ( ' emoticons ' , model . get_value ( iter , 0 ) . decode ( ' utf-8 ' ) )
2005-11-16 13:03:50 +00:00
gajim . interface . init_emoticons ( ) # update emoticons
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-04-06 18:51:54 +00:00
model . remove ( iter )
def on_emoticons_treeview_key_press_event ( self , widget , event ) :
if event . keyval == gtk . keysyms . Delete :
self . on_button_remove_emoticon_clicked ( widget )
2005-10-05 09:18:32 +00:00
class GroupchatConfigWindow ( DataFormWindow ) :
''' GroupchatConfigWindow class '''
2005-10-20 11:17:17 +00:00
def __init__ ( self , account , room_jid , config ) :
DataFormWindow . __init__ ( self , account , config )
2005-10-05 09:18:32 +00:00
self . room_jid = room_jid
def on_data_form_window_destroy ( self , widget ) :
2005-11-13 15:08:47 +00:00
del gajim . interface . instances [ self . account ] [ ' gc_config ' ] [ self . room_jid ]
2005-10-05 09:18:32 +00:00
def on_apply_button_clicked ( self , widget ) :
gajim . connections [ self . account ] . send_gc_config ( self . room_jid , self . config )
self . window . destroy ( )
2005-06-10 21:14:16 +00:00
#---------- RemoveAccountWindow class -------------#
class RemoveAccountWindow :
2005-04-19 23:43:58 +00:00
''' ask for removing from gajim only or from gajim and server too
and do removing of the account given '''
2005-12-06 12:45:32 +00:00
2005-04-19 23:43:58 +00:00
def on_remove_account_window_destroy ( self , widget ) :
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( self . account ) :
del gajim . interface . instances [ self . account ] [ ' remove_account ' ]
2005-04-19 23:43:58 +00:00
def on_cancel_button_clicked ( self , widget ) :
self . window . destroy ( )
2005-12-06 12:45:32 +00:00
2005-10-20 11:17:17 +00:00
def __init__ ( self , account ) :
2005-04-19 23:43:58 +00:00
self . account = account
xml = gtk . glade . XML ( GTKGUI_GLADE , ' remove_account_window ' , APP )
self . window = xml . get_widget ( ' remove_account_window ' )
2005-05-20 15:05:22 +00:00
self . remove_and_unregister_radiobutton = xml . get_widget (
2005-04-19 23:43:58 +00:00
' remove_and_unregister_radiobutton ' )
self . window . set_title ( _ ( ' Removing %s account ' ) % self . account )
xml . signal_autoconnect ( self )
self . window . show_all ( )
def on_remove_button_clicked ( self , widget ) :
2005-05-20 15:05:22 +00:00
if gajim . connections [ self . account ] . connected :
2005-06-10 21:14:16 +00:00
dialog = dialogs . ConfirmationDialog (
2005-06-07 01:10:24 +00:00
_ ( ' Account " %s " is connected to the server ' % self . account ) ,
_ ( ' If you remove it, the connection will be lost. ' ) )
if dialog . get_response ( ) != gtk . RESPONSE_OK :
2005-05-20 15:05:22 +00:00
return
2005-04-19 23:43:58 +00:00
gajim . connections [ self . account ] . change_status ( ' offline ' , ' offline ' )
2005-12-06 12:45:32 +00:00
if self . remove_and_unregister_radiobutton . get_active ( ) :
2005-12-10 16:18:37 +00:00
if not gajim . connections [ self . account ] . password :
passphrase = ' '
w = dialogs . PassphraseDialog (
_ ( ' Password Required ' ) ,
_ ( ' Enter your password for account %s ' ) % self . account ,
_ ( ' Save password ' ) )
passphrase , save = w . run ( )
if passphrase == - 1 :
# We don't remove account cause we canceled pw window
return
gajim . connections [ self . account ] . password = passphrase
2005-05-07 14:45:50 +00:00
gajim . connections [ self . account ] . unregister_account ( )
2005-11-14 10:49:07 +00:00
# Close all opened windows
2005-11-14 13:30:36 +00:00
gajim . interface . roster . close_all ( gajim . interface . instances [ self . account ] )
2005-04-19 23:43:58 +00:00
del gajim . connections [ self . account ]
gajim . config . del_per ( ' accounts ' , self . account )
2005-10-20 11:17:17 +00:00
gajim . interface . save_config ( )
2005-11-13 15:08:47 +00:00
del gajim . interface . instances [ self . account ]
2005-10-15 20:49:08 +00:00
del gajim . awaiting_events [ self . account ]
2005-07-18 21:08:31 +00:00
del gajim . nicks [ self . account ]
del gajim . allow_notifications [ self . account ]
del gajim . groups [ self . account ]
del gajim . contacts [ self . account ]
2005-07-25 20:04:24 +00:00
del gajim . gc_contacts [ self . account ]
2005-08-03 09:23:36 +00:00
del gajim . gc_connected [ self . account ]
2005-07-18 21:08:31 +00:00
del gajim . to_be_removed [ self . account ]
del gajim . newly_added [ self . account ]
del gajim . sleeper_state [ self . account ]
del gajim . encrypted_chats [ self . account ]
del gajim . last_message_time [ self . account ]
2005-07-22 21:27:04 +00:00
del gajim . status_before_autoaway [ self . account ]
2005-08-09 17:21:35 +00:00
del gajim . events_for_ui [ self . account ]
2005-10-20 11:17:17 +00:00
gajim . interface . roster . draw_roster ( )
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' accounts ' ) :
gajim . interface . instances [ ' accounts ' ] . init_accounts ( )
2005-04-19 23:43:58 +00:00
self . window . destroy ( )
2005-06-09 20:35:44 +00:00
#---------- ManageBookmarksWindow class -------------#
class ManageBookmarksWindow :
2005-10-20 11:17:17 +00:00
def __init__ ( self ) :
2005-06-09 20:35:44 +00:00
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' manage_bookmarks_window ' , APP )
self . window = self . xml . get_widget ( ' manage_bookmarks_window ' )
#Account-JID, RoomName, Room-JID, Autojoin, Passowrd, Nick
2005-06-11 14:14:50 +00:00
self . treestore = gtk . TreeStore ( str , str , str , bool , str , str )
2005-06-09 20:35:44 +00:00
#Store bookmarks in treeview.
for account in gajim . connections :
2005-06-11 14:14:50 +00:00
if gajim . connections [ account ] . connected < = 1 :
continue
2005-06-09 20:35:44 +00:00
iter = self . treestore . append ( None , [ None , account , None ,
None , None , None ] )
for bookmark in gajim . connections [ account ] . bookmarks :
2005-06-11 16:15:01 +00:00
if bookmark [ ' name ' ] == ' ' :
2005-08-18 19:06:24 +00:00
# No name was given for this bookmark.
# Use the first part of JID instead...
2005-06-09 20:35:44 +00:00
name = bookmark [ ' jid ' ] . split ( " @ " ) [ 0 ]
bookmark [ ' name ' ] = name
2005-06-11 14:14:50 +00:00
2005-08-18 19:06:24 +00:00
# make '1', '0', 'true', 'false' (or other) to True/False
autojoin = helpers . from_xs_boolean_to_python_boolean (
bookmark [ ' autojoin ' ] )
2005-12-06 12:45:32 +00:00
2005-06-09 20:35:44 +00:00
self . treestore . append ( iter , [
account ,
bookmark [ ' name ' ] ,
bookmark [ ' jid ' ] ,
2005-06-11 14:14:50 +00:00
autojoin ,
2005-06-09 20:35:44 +00:00
bookmark [ ' password ' ] ,
bookmark [ ' nick ' ] ] )
self . view = self . xml . get_widget ( ' bookmarks_treeview ' )
self . view . set_model ( self . treestore )
2005-06-10 16:45:54 +00:00
self . view . expand_all ( )
2005-12-06 12:45:32 +00:00
2005-06-09 20:35:44 +00:00
renderer = gtk . CellRendererText ( )
2005-06-10 13:37:56 +00:00
column = gtk . TreeViewColumn ( ' Bookmarks ' , renderer , text = 1 )
2005-06-09 20:35:44 +00:00
self . view . append_column ( column )
2005-06-12 16:39:04 +00:00
2005-06-09 20:35:44 +00:00
self . selection = self . view . get_selection ( )
2005-06-10 13:37:56 +00:00
self . selection . connect ( ' changed ' , self . bookmark_selected )
2005-06-09 20:35:44 +00:00
#Prepare input fields
self . title_entry = self . xml . get_widget ( ' title_entry ' )
2005-06-10 15:45:09 +00:00
self . title_entry . connect ( ' changed ' , self . on_title_entry_changed )
2005-06-09 20:35:44 +00:00
self . nick_entry = self . xml . get_widget ( ' nick_entry ' )
2005-06-10 15:45:09 +00:00
self . nick_entry . connect ( ' changed ' , self . on_nick_entry_changed )
2005-06-09 20:35:44 +00:00
self . server_entry = self . xml . get_widget ( ' server_entry ' )
2005-06-10 15:45:09 +00:00
self . server_entry . connect ( ' changed ' , self . on_server_entry_changed )
2005-06-09 20:35:44 +00:00
self . room_entry = self . xml . get_widget ( ' room_entry ' )
2005-06-10 15:45:09 +00:00
self . room_entry . connect ( ' changed ' , self . on_room_entry_changed )
2005-06-09 20:35:44 +00:00
self . pass_entry = self . xml . get_widget ( ' pass_entry ' )
2005-06-10 15:45:09 +00:00
self . pass_entry . connect ( ' changed ' , self . on_pass_entry_changed )
2005-06-09 20:35:44 +00:00
self . autojoin_checkbutton = self . xml . get_widget ( ' autojoin_checkbutton ' )
2005-12-06 12:45:32 +00:00
2005-06-09 20:35:44 +00:00
self . xml . signal_autoconnect ( self )
self . window . show_all ( )
2005-12-06 12:45:32 +00:00
2005-06-12 16:39:04 +00:00
def on_bookmarks_treeview_button_press_event ( self , widget , event ) :
( model , iter ) = self . selection . get_selected ( )
if not iter :
2005-08-07 11:44:50 +00:00
# Removed a bookmark before
2005-06-12 16:39:04 +00:00
return
if model . iter_parent ( iter ) :
2005-08-07 11:44:50 +00:00
# The currently selected node is a bookmark
2005-06-12 17:33:38 +00:00
return not self . check_valid_bookmark ( )
2005-06-12 16:39:04 +00:00
def on_manage_bookmarks_window_destroy ( self , widget , event ) :
2005-11-13 15:08:47 +00:00
del gajim . interface . instances [ ' manage_bookmarks ' ]
2005-06-09 20:35:44 +00:00
def on_add_bookmark_button_clicked ( self , widget ) :
2005-06-10 13:37:56 +00:00
'''
2005-06-09 20:35:44 +00:00
Add a new bookmark .
2005-06-10 13:37:56 +00:00
'''
2005-12-06 12:45:32 +00:00
# Get the account that is currently used
2005-08-07 11:44:50 +00:00
# (the parent of the currently selected item)
2005-06-09 20:35:44 +00:00
( model , iter ) = self . selection . get_selected ( )
2005-08-07 11:44:50 +00:00
if not iter : # Nothing selected, do nothing
2005-06-09 21:05:58 +00:00
return
2005-06-09 20:35:44 +00:00
parent = model . iter_parent ( iter )
2005-06-10 18:40:19 +00:00
if parent :
2005-08-07 11:44:50 +00:00
# We got a bookmark selected, so we add_to the parent
2005-06-10 18:40:19 +00:00
add_to = parent
else :
2005-08-07 11:44:50 +00:00
# No parent, so we got an account -> add to this.
2005-06-09 20:35:44 +00:00
add_to = iter
2005-06-10 13:37:56 +00:00
account = model . get_value ( add_to , 1 )
2005-06-11 14:14:50 +00:00
self . treestore . append ( add_to , [ account , _ ( ' New Room ' ) , ' ' , False , ' ' , ' ' ] )
2005-06-10 16:45:54 +00:00
self . view . expand_row ( model . get_path ( add_to ) , True )
2005-06-09 20:35:44 +00:00
def on_remove_bookmark_button_clicked ( self , widget ) :
2005-06-10 13:37:56 +00:00
'''
2005-06-09 20:35:44 +00:00
Remove selected bookmark .
2005-06-10 13:37:56 +00:00
'''
2005-06-09 20:35:44 +00:00
( model , iter ) = self . selection . get_selected ( )
2005-08-07 11:44:50 +00:00
if not iter : # Nothing selected
2005-06-09 20:35:44 +00:00
return
2005-06-10 18:40:19 +00:00
2005-06-09 21:05:58 +00:00
if not model . iter_parent ( iter ) :
2005-08-07 11:44:50 +00:00
# Don't remove account iters
2005-06-09 20:35:44 +00:00
return
model . remove ( iter )
self . clear_fields ( )
2005-06-12 16:39:04 +00:00
def check_valid_bookmark ( self ) :
'''
Check if all neccessary fields are entered correctly .
'''
( model , iter ) = self . selection . get_selected ( )
if not model . iter_parent ( iter ) :
#Account data can't be changed
return
2005-08-26 00:52:44 +00:00
if self . server_entry . get_text ( ) . decode ( ' utf-8 ' ) == ' ' or self . room_entry . get_text ( ) . decode ( ' utf-8 ' ) == ' ' :
2005-06-12 19:17:06 +00:00
dialogs . ErrorDialog ( _ ( ' This bookmark has invalid data ' ) ,
_ ( ' Please be sure to fill out server and room fields or remove this bookmark. ' ) ) . get_response ( )
2005-06-12 16:39:04 +00:00
return False
return True
2005-06-09 20:35:44 +00:00
def on_ok_button_clicked ( self , widget ) :
2005-06-10 13:37:56 +00:00
'''
2005-06-09 20:35:44 +00:00
Parse the treestore data into our new bookmarks array ,
then send the new bookmarks to the server .
2005-06-10 13:37:56 +00:00
'''
2005-06-12 16:39:04 +00:00
( model , iter ) = self . selection . get_selected ( )
if iter and model . iter_parent ( iter ) :
#bookmark selected, check it
if not self . check_valid_bookmark ( ) :
return
2005-06-10 15:45:09 +00:00
for account in self . treestore :
2005-08-26 23:03:22 +00:00
account_unicode = account [ 1 ] . decode ( ' utf-8 ' )
gajim . connections [ account_unicode ] . bookmarks = [ ]
2005-06-10 18:40:19 +00:00
2005-06-10 15:45:09 +00:00
for bm in account . iterchildren ( ) :
2005-06-10 18:40:19 +00:00
#Convert True/False/None to '1' or '0'
2005-08-26 00:52:44 +00:00
autojoin = unicode ( int ( bm [ 3 ] ) )
2005-12-06 12:45:32 +00:00
2005-06-10 18:40:19 +00:00
#create the bookmark-dict
2005-06-11 14:14:50 +00:00
bmdict = { ' name ' : bm [ 1 ] , ' jid ' : bm [ 2 ] , ' autojoin ' : autojoin ,
2005-06-12 16:39:04 +00:00
' password ' : bm [ 4 ] , ' nick ' : bm [ 5 ] }
2005-12-06 12:45:32 +00:00
2005-08-26 23:03:22 +00:00
gajim . connections [ account_unicode ] . bookmarks . append ( bmdict )
2005-06-10 15:45:09 +00:00
2005-08-26 23:03:22 +00:00
gajim . connections [ account_unicode ] . store_bookmarks ( )
2005-10-20 11:17:17 +00:00
gajim . interface . roster . make_menu ( )
2005-06-10 15:45:09 +00:00
self . window . destroy ( )
2005-06-09 20:35:44 +00:00
def on_cancel_button_clicked ( self , widget ) :
2005-06-10 15:45:09 +00:00
self . window . destroy ( )
2005-06-09 20:35:44 +00:00
def bookmark_selected ( self , selection ) :
2005-06-10 13:37:56 +00:00
'''
2005-06-09 20:35:44 +00:00
Fill in the bookmark ' s data into the fields.
2005-06-10 13:37:56 +00:00
'''
2005-06-09 20:35:44 +00:00
( model , iter ) = selection . get_selected ( )
if not iter :
#After removing the last bookmark for one account
#this will be None, so we will just:
return
2005-06-12 16:39:04 +00:00
2005-06-10 18:40:19 +00:00
widgets = [ self . title_entry , self . nick_entry , self . room_entry ,
self . server_entry , self . pass_entry , self . autojoin_checkbutton ]
if model . iter_parent ( iter ) :
#make the fields sensitive
for field in widgets :
field . set_sensitive ( True )
else :
2005-06-09 20:35:44 +00:00
#Top-level has no data (it's the account fields)
2005-06-10 18:40:19 +00:00
#clear fields & make them insensitive
2005-06-09 20:35:44 +00:00
self . clear_fields ( )
2005-06-10 18:40:19 +00:00
for field in widgets :
field . set_sensitive ( False )
2005-06-09 20:35:44 +00:00
return
2005-06-12 16:39:04 +00:00
2005-06-09 20:35:44 +00:00
#Fill in the data for childs
2005-08-07 11:44:50 +00:00
self . title_entry . set_text ( model [ iter ] [ 1 ] )
2005-08-26 00:52:44 +00:00
room_jid = model [ iter ] [ 2 ] . decode ( ' utf-8 ' )
2005-06-09 20:35:44 +00:00
try :
2005-06-10 13:37:56 +00:00
( room , server ) = room_jid . split ( ' @ ' )
2005-06-09 20:35:44 +00:00
except ValueError :
#We just added this one
room = ' '
server = ' '
self . room_entry . set_text ( room )
self . server_entry . set_text ( server )
2005-12-06 12:45:32 +00:00
2005-08-07 11:44:50 +00:00
self . autojoin_checkbutton . set_active ( model [ iter ] [ 3 ] )
self . pass_entry . set_text ( model [ iter ] [ 4 ] )
self . nick_entry . set_text ( model [ iter ] [ 5 ] )
2005-06-09 20:35:44 +00:00
2005-06-10 15:45:09 +00:00
def on_title_entry_changed ( self , widget ) :
( model , iter ) = self . selection . get_selected ( )
if iter : #After removing a bookmark, we got nothing selected
2005-06-10 16:45:54 +00:00
if model . iter_parent ( iter ) :
#Don't clear the title field for account nodes
2005-08-07 11:44:50 +00:00
model [ iter ] [ 1 ] = self . title_entry . get_text ( )
2005-06-10 15:45:09 +00:00
def on_nick_entry_changed ( self , widget ) :
( model , iter ) = self . selection . get_selected ( )
if iter :
2005-08-07 11:44:50 +00:00
model [ iter ] [ 5 ] = self . nick_entry . get_text ( )
2005-12-06 12:45:32 +00:00
2005-06-10 15:45:09 +00:00
def on_server_entry_changed ( self , widget ) :
( model , iter ) = self . selection . get_selected ( )
if iter :
2005-08-26 00:52:44 +00:00
room_jid = self . room_entry . get_text ( ) . decode ( ' utf-8 ' ) + ' @ ' + \
self . server_entry . get_text ( ) . decode ( ' utf-8 ' )
2005-08-07 11:44:50 +00:00
model [ iter ] [ 2 ] = room_jid
2005-06-10 15:45:09 +00:00
def on_room_entry_changed ( self , widget ) :
( model , iter ) = self . selection . get_selected ( )
if iter :
2005-08-26 00:52:44 +00:00
room_jid = self . room_entry . get_text ( ) . decode ( ' utf-8 ' ) + ' @ ' + \
self . server_entry . get_text ( ) . decode ( ' utf-8 ' )
2005-08-07 11:44:50 +00:00
model [ iter ] [ 2 ] = room_jid
2005-06-10 15:45:09 +00:00
def on_pass_entry_changed ( self , widget ) :
( model , iter ) = self . selection . get_selected ( )
if iter :
2005-08-07 11:44:50 +00:00
model [ iter ] [ 4 ] = self . pass_entry . get_text ( )
2005-06-10 15:45:09 +00:00
def on_autojoin_checkbutton_toggled ( self , widget ) :
( model , iter ) = self . selection . get_selected ( )
if iter :
2005-08-07 11:44:50 +00:00
model [ iter ] [ 3 ] = self . autojoin_checkbutton . get_active ( )
2005-06-10 15:45:09 +00:00
2005-06-09 20:35:44 +00:00
def clear_fields ( self ) :
2005-06-10 18:40:19 +00:00
widgets = [ self . title_entry , self . nick_entry , self . room_entry ,
self . server_entry , self . pass_entry ]
for field in widgets :
field . set_text ( ' ' )
2005-06-09 21:05:58 +00:00
self . autojoin_checkbutton . set_active ( False )
2005-08-06 23:39:53 +00:00
2005-11-03 09:27:45 +00:00
class AccountCreationWizardWindow :
2005-10-20 11:17:17 +00:00
def __init__ ( self ) :
2005-11-03 22:57:54 +00:00
self . xml = gtk . glade . XML ( GTKGUI_GLADE , ' account_creation_wizard_window ' ,
APP )
2005-11-03 22:47:26 +00:00
self . window = self . xml . get_widget ( ' account_creation_wizard_window ' )
2005-08-06 23:39:53 +00:00
2005-11-05 11:33:41 +00:00
# Connect events from comboboxentry.child
2005-11-03 21:50:23 +00:00
server_comboboxentry = self . xml . get_widget ( ' server_comboboxentry ' )
2005-09-18 15:03:04 +00:00
server_comboboxentry . child . connect ( ' key_press_event ' ,
self . on_server_comboboxentry_key_press_event )
# parse servers.xml
2005-09-18 18:30:16 +00:00
servers_xml = os . path . join ( gajim . DATA_DIR , ' other ' , ' servers.xml ' )
2005-12-06 12:45:32 +00:00
servers = gtkgui_helpers . parse_server_xml ( servers_xml )
2005-09-18 15:03:04 +00:00
servers_model = gtk . ListStore ( str , int )
for server in servers :
servers_model . append ( ( str ( server [ 0 ] ) , int ( server [ 1 ] ) ) )
2005-12-06 12:45:32 +00:00
2005-09-18 18:30:16 +00:00
# Put servers into comboboxentries
2005-09-18 15:03:04 +00:00
server_comboboxentry . set_model ( servers_model )
server_comboboxentry . set_text_column ( 0 )
2005-08-06 23:39:53 +00:00
2005-09-18 15:03:04 +00:00
# Generic widgets
self . notebook = self . xml . get_widget ( ' notebook ' )
2005-11-04 21:27:14 +00:00
self . cancel_button = self . xml . get_widget ( ' cancel_button ' )
2005-08-06 23:39:53 +00:00
self . back_button = self . xml . get_widget ( ' back_button ' )
2005-11-04 21:27:14 +00:00
self . forward_button = self . xml . get_widget ( ' forward_button ' )
2005-08-06 23:39:53 +00:00
self . finish_button = self . xml . get_widget ( ' finish_button ' )
2005-11-03 10:32:26 +00:00
self . advanced_button = self . xml . get_widget ( ' advanced_button ' )
2005-08-06 23:39:53 +00:00
self . finish_label = self . xml . get_widget ( ' finish_label ' )
2005-11-04 21:27:14 +00:00
self . go_online_checkbutton = self . xml . get_widget ( ' go_online_checkbutton ' )
2005-11-05 11:28:19 +00:00
self . progressbar = self . xml . get_widget ( ' progressbar ' )
2005-08-06 23:39:53 +00:00
2005-11-24 12:39:21 +00:00
# some vars
2005-11-05 11:28:19 +00:00
self . update_progressbar_timeout_id = None
2005-12-06 12:45:32 +00:00
2005-11-04 21:27:14 +00:00
self . notebook . set_current_page ( 0 )
2005-11-03 10:32:26 +00:00
self . advanced_button . set_no_show_all ( True )
self . xml . signal_autoconnect ( self )
self . window . show_all ( )
2005-11-03 22:12:00 +00:00
def on_wizard_window_destroy ( self , widget ) :
2005-11-13 15:08:47 +00:00
del gajim . interface . instances [ ' account_creation_wizard ' ]
2005-11-03 22:12:00 +00:00
2005-12-06 12:45:32 +00:00
def on_register_server_features_button_clicked ( self , widget ) :
2005-09-18 18:30:16 +00:00
helpers . launch_browser_mailer ( ' url ' , ' http://www.jabber.org/network/ ' )
2005-08-06 23:39:53 +00:00
def on_save_password_checkbutton_toggled ( self , widget ) :
2005-11-03 21:50:23 +00:00
self . xml . get_widget ( ' pass_entry ' ) . grab_focus ( )
2005-08-06 23:39:53 +00:00
def on_cancel_button_clicked ( self , widget ) :
self . window . destroy ( )
def on_back_button_clicked ( self , widget ) :
if self . notebook . get_current_page ( ) == 1 :
self . notebook . set_current_page ( 0 )
2005-11-04 21:27:14 +00:00
self . back_button . set_sensitive ( False )
elif self . notebook . get_current_page ( ) == 3 : # finish page
self . forward_button . show ( )
self . notebook . set_current_page ( 1 ) # Goto parameters page
2005-08-06 23:39:53 +00:00
2005-11-03 21:50:23 +00:00
def get_widgets ( self ) :
2005-12-06 12:45:32 +00:00
widgets = { }
2005-10-27 13:15:03 +00:00
for widget in (
2005-11-05 11:28:19 +00:00
' username_entry ' ,
2005-09-18 15:03:04 +00:00
' server_comboboxentry ' ,
' pass_entry ' ,
' save_password_checkbutton ' ,
' proxyhost_entry ' ,
' proxyport_entry ' ,
' proxyuser_entry ' ,
' proxypass_entry ' ,
2005-10-27 13:15:03 +00:00
' jid_label ' ) :
2005-11-03 21:50:23 +00:00
widgets [ widget ] = self . xml . get_widget ( widget )
2005-09-18 15:03:04 +00:00
return widgets
2005-08-06 23:39:53 +00:00
def on_forward_button_clicked ( self , widget ) :
cur_page = self . notebook . get_current_page ( )
2005-09-18 15:03:04 +00:00
2005-08-06 23:39:53 +00:00
if cur_page == 0 :
widget = self . xml . get_widget ( ' use_existing_account_radiobutton ' )
if widget . get_active ( ) :
2005-11-03 21:50:23 +00:00
self . modify = True
self . xml . get_widget ( ' server_features_button ' ) . hide ( )
2005-08-06 23:39:53 +00:00
else :
2005-11-03 21:50:23 +00:00
self . modify = False
self . xml . get_widget ( ' server_features_button ' ) . show ( )
self . notebook . set_current_page ( 1 )
2005-08-06 23:39:53 +00:00
self . back_button . set_sensitive ( True )
2005-09-18 15:03:04 +00:00
return
2005-12-06 12:45:32 +00:00
2005-08-06 23:39:53 +00:00
else :
2005-11-03 21:50:23 +00:00
widgets = self . get_widgets ( )
2005-11-05 11:28:19 +00:00
username = widgets [ ' username_entry ' ] . get_text ( ) . decode ( ' utf-8 ' )
2005-11-03 22:37:21 +00:00
if not username :
2005-11-05 11:28:19 +00:00
pritext = _ ( ' Invalid username ' )
sectext = _ ( ' You must provide a username to configure this account. ' )
2005-11-03 22:37:21 +00:00
dialogs . ErrorDialog ( pritext , sectext ) . get_response ( )
return
2005-09-18 15:03:04 +00:00
server = widgets [ ' server_comboboxentry ' ] . child . get_text ( )
savepass = widgets [ ' save_password_checkbutton ' ] . get_active ( )
password = widgets [ ' pass_entry ' ] . get_text ( )
2005-11-03 21:50:23 +00:00
2005-11-03 22:37:21 +00:00
if not self . modify and password == ' ' :
dialogs . ErrorDialog ( _ ( ' Invalid password ' ) ,
_ ( ' You must enter a password for the new account. ' ) ) . get_response ( )
return
2005-11-03 14:46:56 +00:00
jid = username + ' @ ' + server
# check if jid is conform to RFC and stringprep it
try :
jid = helpers . parse_jid ( jid )
except helpers . InvalidFormat , s :
2005-11-03 22:37:21 +00:00
pritext = _ ( ' Invalid Jabber ID ' )
2005-11-03 22:15:40 +00:00
dialogs . ErrorDialog ( pritext , str ( s ) ) . get_response ( )
2005-11-03 14:46:56 +00:00
return
2005-11-05 11:30:42 +00:00
self . account = server
i = 1
while self . account in gajim . connections :
self . account = server + str ( i )
i + = 1
2005-11-03 14:46:56 +00:00
username , server = gajim . get_room_name_and_server_from_room_jid ( jid )
2005-11-04 21:27:14 +00:00
self . save_account ( username , server , savepass , password )
self . cancel_button . hide ( )
2005-11-03 14:46:56 +00:00
self . back_button . hide ( )
2005-11-04 21:27:14 +00:00
self . forward_button . hide ( )
if self . modify :
2005-11-09 17:08:09 +00:00
finish_text = ' <big><b> %s </b></big> \n \n %s ' % (
_ ( ' Account has been added successfully ' ) ,
_ ( ' You can set advanced account options by pressing Advanced button, or later by clicking in Accounts menuitem under Edit menu from the main window. ' ) )
self . finish_label . set_markup ( finish_text )
2005-11-04 21:27:14 +00:00
self . finish_button . set_sensitive ( True )
self . finish_button . set_property ( ' has-default ' , True )
self . advanced_button . show ( )
self . go_online_checkbutton . show ( )
img = self . xml . get_widget ( ' finish_image ' )
img . set_from_stock ( gtk . STOCK_APPLY , gtk . ICON_SIZE_DIALOG )
self . notebook . set_current_page ( 3 ) # show finish page
else :
self . notebook . set_current_page ( 2 ) # show creqting page
2005-11-05 11:28:19 +00:00
self . update_progressbar_timeout_id = gobject . timeout_add ( 100 ,
self . update_progressbar )
def update_progressbar ( self ) :
self . progressbar . pulse ( )
return True # loop forever
2005-11-04 21:27:14 +00:00
def acc_is_ok ( self , config ) :
''' Account creation succeeded '''
con = gajim . connections [ self . account ]
self . create_vars ( config )
self . finish_button . set_sensitive ( True )
self . finish_button . set_property ( ' has-default ' , True )
self . advanced_button . show ( )
self . go_online_checkbutton . show ( )
img = self . xml . get_widget ( ' finish_image ' )
img . set_from_stock ( gtk . STOCK_APPLY , gtk . ICON_SIZE_DIALOG )
2005-12-06 12:45:32 +00:00
finish_text = ' <big><b> %s </b></big> \n \n %s ' % (
2005-11-09 17:08:09 +00:00
_ ( ' Your new account has been created successfully ' ) ,
2005-11-21 10:09:31 +00:00
_ ( ' You can set advanced account options by pressing Advanced button, or later by clicking in Accounts menuitem under Edit menu from the main window. ' ) )
2005-11-09 17:08:09 +00:00
self . finish_label . set_markup ( finish_text )
2005-11-04 21:27:14 +00:00
self . notebook . set_current_page ( 3 ) # show finish page
2005-12-06 12:45:32 +00:00
2005-11-05 11:28:19 +00:00
if self . update_progressbar_timeout_id is not None :
gobject . source_remove ( self . update_progressbar_timeout_id )
2005-11-04 21:27:14 +00:00
def acc_is_not_ok ( self , reason ) :
''' Account creation failed '''
self . back_button . show ( )
self . cancel_button . show ( )
self . go_online_checkbutton . hide ( )
img = self . xml . get_widget ( ' finish_image ' )
img . set_from_stock ( gtk . STOCK_DIALOG_ERROR , gtk . ICON_SIZE_DIALOG )
2005-11-09 17:08:09 +00:00
finish_text = ' <big><b> %s </b></big> \n \n %s ' % ( _ ( ' An error occured during account creation ' ) , reason )
self . finish_label . set_markup ( finish_text )
2005-11-04 21:27:14 +00:00
self . notebook . set_current_page ( 3 ) # show finish page
2005-08-06 23:39:53 +00:00
2005-11-03 10:32:26 +00:00
def on_advanced_button_clicked ( self , widget ) :
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ self . account ] [ ' account_modification ' ] = \
2005-11-03 10:32:26 +00:00
AccountModificationWindow ( self . account )
self . window . destroy ( )
2005-08-06 23:39:53 +00:00
def on_finish_button_clicked ( self , widget ) :
2005-11-04 21:27:14 +00:00
go_online = self . xml . get_widget ( ' go_online_checkbutton ' ) . get_active ( )
2005-11-07 15:43:47 +00:00
show_vcard = self . xml . get_widget ( ' show_vcard_checkbutton ' ) . get_active ( )
2005-08-06 23:39:53 +00:00
self . window . destroy ( )
2005-11-07 15:43:47 +00:00
if show_vcard :
gajim . interface . show_vcard_when_connect . append ( self . account )
2005-11-03 22:12:00 +00:00
if go_online :
gajim . interface . roster . send_status ( self . account , ' online ' , ' ' )
2005-08-06 23:39:53 +00:00
2005-11-05 11:28:19 +00:00
def on_username_entry_changed ( self , widget ) :
2005-09-18 15:03:04 +00:00
self . update_jid ( widget )
2005-08-06 23:39:53 +00:00
2005-09-18 15:03:04 +00:00
def on_server_comboboxentry_changed ( self , widget ) :
self . update_jid ( widget )
2005-08-06 23:39:53 +00:00
2005-11-05 11:28:19 +00:00
def on_username_entry_key_press_event ( self , widget , event ) :
2005-09-18 18:30:16 +00:00
# Check for pressed @ and jump to combobox if found
2005-08-06 23:39:53 +00:00
if event . keyval == gtk . keysyms . at :
2005-11-03 21:50:23 +00:00
combobox = self . xml . get_widget ( ' server_comboboxentry ' )
combobox . grab_focus ( )
combobox . child . set_position ( - 1 )
2005-09-18 15:03:04 +00:00
return True
def on_server_comboboxentry_key_press_event ( self , widget , event ) :
2005-09-18 18:30:16 +00:00
# If backspace is pressed in empty field, return to the nick entry field
2005-10-21 21:50:44 +00:00
backspace = event . keyval == gtk . keysyms . BackSpace
2005-11-03 21:50:23 +00:00
combobox = self . xml . get_widget ( ' server_comboboxentry ' )
empty = len ( combobox . get_active_text ( ) ) == 0
2005-10-21 21:50:44 +00:00
if backspace and empty :
2005-11-05 11:28:19 +00:00
username_entry = self . xml . get_widget ( ' username_entry ' )
username_entry . grab_focus ( )
username_entry . set_position ( - 1 )
2005-08-06 23:39:53 +00:00
return True
2005-09-18 15:03:04 +00:00
def update_jid ( self , widget ) :
2005-11-05 11:28:19 +00:00
username_entry = self . xml . get_widget ( ' username_entry ' )
name = username_entry . get_text ( ) . decode ( ' utf-8 ' )
2005-11-03 21:50:23 +00:00
combobox = self . xml . get_widget ( ' server_comboboxentry ' )
server = combobox . get_active_text ( )
jid_label = self . xml . get_widget ( ' jid_label ' )
2005-08-06 23:39:53 +00:00
if len ( name ) == 0 or len ( server ) == 0 :
2005-11-03 21:50:23 +00:00
jid_label . set_label ( ' ' )
2005-08-06 23:39:53 +00:00
else :
2005-10-21 21:50:44 +00:00
string = ' <span background= " lightyellow " > %s @ %s </span> ' % ( name , server )
2005-11-03 21:50:23 +00:00
jid_label . set_label ( string )
2005-09-18 15:03:04 +00:00
2005-11-04 21:27:14 +00:00
def save_account ( self , login , server , savepass , password ) :
2005-09-18 18:30:16 +00:00
config = { }
2005-11-03 12:20:17 +00:00
config [ ' name ' ] = login
2005-09-18 15:03:04 +00:00
config [ ' hostname ' ] = server
config [ ' savepass ' ] = savepass
config [ ' password ' ] = password
config [ ' resource ' ] = ' Gajim '
config [ ' priority ' ] = 5
2005-11-24 12:39:21 +00:00
config [ ' autoconnect ' ] = True
2005-09-18 15:03:04 +00:00
config [ ' no_log_for ' ] = ' '
2005-11-24 12:39:21 +00:00
config [ ' sync_with_global_status ' ] = True
2005-09-18 15:03:04 +00:00
config [ ' proxy ' ] = ' '
config [ ' usessl ' ] = False
config [ ' use_custom_host ' ] = False
config [ ' custom_port ' ] = 0
config [ ' custom_host ' ] = ' '
config [ ' keyname ' ] = ' '
config [ ' keyid ' ] = ' '
config [ ' savegpgpass ' ] = False
config [ ' gpgpassword ' ] = ' '
2005-11-04 21:27:14 +00:00
if self . account in gajim . connections :
2005-09-18 15:03:04 +00:00
dialogs . ErrorDialog ( _ ( ' Account name is in use ' ) ,
_ ( ' You already have an account using this name. ' ) ) . get_response ( )
return
2005-11-04 21:27:14 +00:00
con = connection . Connection ( self . account )
2005-11-05 11:21:41 +00:00
if savepass :
con . password = password
2005-11-04 21:27:14 +00:00
gajim . events_for_ui [ self . account ] = [ ]
2005-11-03 21:50:23 +00:00
if not self . modify :
2005-11-04 21:27:14 +00:00
con . new_account ( self . account , config )
2005-09-18 15:03:04 +00:00
return
2005-11-04 21:27:14 +00:00
gajim . connections [ self . account ] = con
self . create_vars ( config )
def create_vars ( self , config ) :
gajim . config . add_per ( ' accounts ' , self . account )
2005-09-18 15:03:04 +00:00
for opt in config :
2005-11-04 21:27:14 +00:00
gajim . config . set_per ( ' accounts ' , self . account , opt , config [ opt ] )
2005-09-18 18:30:16 +00:00
# update variables
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ self . account ] = { ' infos ' : { } , ' disco ' : { } ,
2005-11-04 21:27:14 +00:00
' chats ' : { } , ' gc ' : { } , ' gc_config ' : { } }
2005-11-13 15:08:47 +00:00
gajim . interface . instances [ self . account ] [ ' xml_console ' ] = \
2005-11-04 21:27:14 +00:00
dialogs . XMLConsoleWindow ( self . account )
gajim . awaiting_events [ self . account ] = { }
gajim . connections [ self . account ] . connected = 0
gajim . groups [ self . account ] = { }
gajim . contacts [ self . account ] = { }
gajim . gc_contacts [ self . account ] = { }
gajim . gc_connected [ self . account ] = { }
gajim . newly_added [ self . account ] = [ ]
gajim . to_be_removed [ self . account ] = [ ]
gajim . nicks [ self . account ] = config [ ' name ' ]
gajim . allow_notifications [ self . account ] = False
gajim . sleeper_state [ self . account ] = ' off '
gajim . encrypted_chats [ self . account ] = [ ]
gajim . last_message_time [ self . account ] = { }
gajim . status_before_autoaway [ self . account ] = ' '
gajim . events_for_ui [ self . account ] = [ ]
2005-09-18 18:30:16 +00:00
# refresh accounts window
2005-11-13 15:08:47 +00:00
if gajim . interface . instances . has_key ( ' accounts ' ) :
gajim . interface . instances [ ' accounts ' ] . init_accounts ( )
2005-09-18 18:30:16 +00:00
# refresh roster
2005-10-20 11:17:17 +00:00
gajim . interface . roster . draw_roster ( )
gajim . interface . save_config ( )