2008-08-15 19:31:51 +02:00
# -*- coding:utf-8 -*-
2008-08-15 05:20:23 +02:00
## src/features_window.py
2007-06-27 11:37:31 +02:00
##
2008-08-15 05:20:23 +02:00
## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org>
## Julien Pivotto <roidelapluie AT gmail.com>
## Stefan Bethge <stefan AT lanpartei.de>
## Stephan Erb <steve-e AT h3c.de>
2010-03-11 16:52:36 +01:00
## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org>
2008-08-15 05:20:23 +02:00
## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
2007-06-27 11:37:31 +02:00
##
2007-10-22 13:13:13 +02:00
## This file is part of Gajim.
##
## Gajim is free software; you can redistribute it and/or modify
2007-06-27 11:37:31 +02:00
## it under the terms of the GNU General Public License as published
2007-10-22 13:13:13 +02:00
## by the Free Software Foundation; version 3 only.
2007-06-27 11:37:31 +02:00
##
2007-10-22 13:13:13 +02:00
## Gajim is distributed in the hope that it will be useful,
2007-06-27 11:37:31 +02:00
## but WITHOUT ANY WARRANTY; without even the implied warranty of
2008-08-15 05:20:23 +02:00
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2007-06-27 11:37:31 +02:00
## GNU General Public License for more details.
##
2007-10-22 13:13:13 +02:00
## You should have received a copy of the GNU General Public License
2008-08-15 05:20:23 +02:00
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
2007-10-22 13:13:13 +02:00
##
2007-06-27 11:37:31 +02:00
import os
2007-11-14 20:47:52 +01:00
import sys
2007-06-27 11:37:31 +02:00
import gtk
import gtkgui_helpers
from common import gajim
from common import helpers
2009-07-15 21:02:47 +02:00
from common import kwalletbinding
2010-04-03 13:38:12 +02:00
from common . i18n import Q_
2007-06-27 11:37:31 +02:00
class FeaturesWindow :
2010-02-08 15:08:40 +01:00
"""
Class for features window
"""
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def __init__ ( self ) :
self . xml = gtkgui_helpers . get_gtk_builder ( ' features_window.ui ' )
self . window = self . xml . get_object ( ' features_window ' )
2011-03-20 22:43:01 +01:00
self . window . set_transient_for ( gajim . interface . roster . window )
2010-02-08 15:08:40 +01:00
treeview = self . xml . get_object ( ' features_treeview ' )
self . desc_label = self . xml . get_object ( ' feature_desc_label ' )
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
# {name: (available_function, unix_text, windows_text)}
self . features = {
2011-06-22 20:29:15 +02:00
_ ( ' SSL certificate validation ' ) : ( self . pyopenssl_available ,
_ ( ' A library used to validate server certificates to ensure a secure connection. ' ) ,
_ ( ' Requires python-pyopenssl. ' ) ,
_ ( ' Requires python-pyopenssl. ' ) ) ,
_ ( ' Bonjour / Zeroconf ' ) : ( self . zeroconf_available ,
_ ( ' Serverless chatting with autodetected clients in a local network. ' ) ,
_ ( ' Requires python-avahi. ' ) ,
_ ( ' Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour). ' ) ) ,
_ ( ' Command line ' ) : ( self . dbus_available ,
_ ( ' A script to control Gajim via commandline. ' ) ,
_ ( ' Requires python-dbus. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
_ ( ' OpenGPG message encryption ' ) : ( self . gpg_available ,
_ ( ' Encrypting chat messages with gpg keys. ' ) ,
_ ( ' Requires gpg and python-gnupg (http://code.google.com/p/python-gnupg/). ' ) ,
_ ( ' Requires gpg.exe in PATH. ' ) ) ,
_ ( ' Network-manager ' ) : ( self . network_manager_available ,
_ ( ' Autodetection of network status. ' ) ,
_ ( ' Requires gnome-network-manager and python-dbus. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
_ ( ' Session Management ' ) : ( self . session_management_available ,
_ ( ' Gajim session is stored on logout and restored on login. ' ) ,
_ ( ' Requires python-gnome2. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
_ ( ' Password encryption ' ) : ( self . some_keyring_available ,
_ ( ' Passwords can be stored securely and not just in plaintext. ' ) ,
_ ( ' Requires gnome-keyring and python-gnome2-desktop, or kwalletcli. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
_ ( ' SRV ' ) : ( self . srv_available ,
_ ( ' Ability to connect to servers which are using SRV records. ' ) ,
_ ( ' Requires dnsutils. ' ) ,
_ ( ' Requires nslookup to use SRV records. ' ) ) ,
_ ( ' Spell Checker ' ) : ( self . speller_available ,
_ ( ' Spellchecking of composed messages. ' ) ,
_ ( ' Requires libgtkspell. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
_ ( ' Notification ' ) : ( self . notification_available ,
_ ( ' Passive popups notifying for new events. ' ) ,
_ ( ' Requires python-notify or instead python-dbus in conjunction with notification-daemon. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
_ ( ' Automatic status ' ) : ( self . idle_available ,
_ ( ' Ability to measure idle time, in order to set auto status. ' ) ,
_ ( ' Requires libxss library. ' ) ,
_ ( ' Requires python2.5. ' ) ) ,
_ ( ' LaTeX ' ) : ( self . latex_available ,
_ ( ' Transform LaTeX expressions between $$ $$. ' ) ,
_ ( ' Requires texlive-latex-base and (dvipng or ImageMagick). You have to set \' use_latex \' to True in the Advanced Configuration Editor. ' ) ,
_ ( ' Requires texlive-latex-base and (dvipng or ImageMagick) (All is in MikTeX). You have to set \' use_latex \' to True in the Advanced Configuration Editor. ' ) ) ,
_ ( ' End to End message encryption ' ) : ( self . pycrypto_available ,
_ ( ' Encrypting chat messages. ' ) ,
_ ( ' Requires python-crypto. ' ) ,
_ ( ' Requires python-crypto. ' ) ) ,
_ ( ' RST Generator ' ) : ( self . docutils_available ,
_ ( ' Generate XHTML output from RST code (see http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html). ' ) ,
_ ( ' Requires python-docutils. ' ) ,
_ ( ' Requires python-docutils. ' ) ) ,
_ ( ' Audio / Video ' ) : ( self . farsight_available ,
_ ( ' Ability to start audio and video chat. ' ) ,
_ ( ' Requires python-farsight and gstreamer-plugins-bad. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
2011-08-24 11:04:31 +02:00
_ ( ' UPnP-IGD ' ) : ( self . gupnp_igd_available ,
_ ( ' Ability to request your router to forward port for file transfer. ' ) ,
_ ( ' Requires python-gupnp-igd. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
2011-09-05 22:00:23 +02:00
_ ( ' UPower ' ) : ( self . gupnp_igd_available ,
_ ( ' Ability to disconnect properly just before suspending the machine. ' ) ,
_ ( ' Requires upower and python-dbus. ' ) ,
_ ( ' Feature not available under Windows. ' ) ) ,
2010-02-08 15:08:40 +01:00
}
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
# name, supported
self . model = gtk . ListStore ( str , bool )
treeview . set_model ( self . model )
2007-06-27 11:37:31 +02:00
2010-04-03 13:38:12 +02:00
col = gtk . TreeViewColumn ( Q_ ( ' ?features:Available ' ) )
2010-02-08 15:08:40 +01:00
treeview . append_column ( col )
cell = gtk . CellRendererToggle ( )
cell . set_property ( ' radio ' , True )
col . pack_start ( cell )
col . set_attributes ( cell , active = 1 )
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
col = gtk . TreeViewColumn ( _ ( ' Feature ' ) )
treeview . append_column ( col )
cell = gtk . CellRendererText ( )
col . pack_start ( cell , expand = True )
col . add_attribute ( cell , ' text ' , 0 )
2007-07-07 01:51:41 +02:00
2010-02-08 15:08:40 +01:00
# Fill model
for feature in self . features :
func = self . features [ feature ] [ 0 ]
rep = func ( )
self . model . append ( [ feature , rep ] )
2009-01-11 10:55:39 +01:00
2010-02-08 15:08:40 +01:00
self . model . set_sort_column_id ( 0 , gtk . SORT_ASCENDING )
2009-01-11 10:55:39 +01:00
2010-02-08 15:08:40 +01:00
self . xml . connect_signals ( self )
self . window . show_all ( )
self . xml . get_object ( ' close_button ' ) . grab_focus ( )
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def on_close_button_clicked ( self , widget ) :
self . window . destroy ( )
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def on_features_treeview_cursor_changed ( self , widget ) :
selection = widget . get_selection ( )
if not selection :
return
rows = selection . get_selected_rows ( ) [ 1 ]
if not rows :
return
path = rows [ 0 ]
feature = self . model [ path ] [ 0 ] . decode ( ' utf-8 ' )
text = self . features [ feature ] [ 1 ] + ' \n '
if os . name == ' nt ' :
text = text + self . features [ feature ] [ 3 ]
else :
text = text + self . features [ feature ] [ 2 ]
self . desc_label . set_text ( text )
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def pyopenssl_available ( self ) :
try :
import OpenSSL . SSL
import OpenSSL . crypto
except Exception :
return False
return True
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def zeroconf_available ( self ) :
2010-12-18 09:11:58 +01:00
return gajim . HAVE_ZEROCONF
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def dbus_available ( self ) :
if os . name == ' nt ' :
return False
from common import dbus_support
return dbus_support . supported
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def gpg_available ( self ) :
return gajim . HAVE_GPG
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def network_manager_available ( self ) :
if os . name == ' nt ' :
return False
import network_manager_listener
return network_manager_listener . supported
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def session_management_available ( self ) :
if os . name == ' nt ' :
return False
try :
2010-12-18 09:11:58 +01:00
__import__ ( ' gnome.ui ' )
2010-02-08 15:08:40 +01:00
except Exception :
return False
return True
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def some_keyring_available ( self ) :
if os . name == ' nt ' :
return False
if kwalletbinding . kwallet_available ( ) :
return True
try :
2010-12-18 09:11:58 +01:00
__import__ ( ' gnomekeyring ' )
2010-02-08 15:08:40 +01:00
except Exception :
return False
return True
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def srv_available ( self ) :
2010-10-26 17:28:08 +02:00
if os . name == ' nt ' :
return True
2010-02-08 15:08:40 +01:00
return helpers . is_in_path ( ' nslookup ' )
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def speller_available ( self ) :
if os . name == ' nt ' :
return False
try :
2010-12-18 09:11:58 +01:00
__import__ ( ' gtkspell ' )
2010-02-08 15:08:40 +01:00
except ImportError :
return False
return True
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def notification_available ( self ) :
if os . name == ' nt ' :
return False
from common import dbus_support
if self . dbus_available ( ) and dbus_support . get_notifications_interface ( ) :
return True
try :
2010-12-18 09:11:58 +01:00
__import__ ( ' pynotify ' )
2010-02-08 15:08:40 +01:00
except Exception :
return False
return True
2007-06-27 11:37:31 +02:00
2010-02-08 15:08:40 +01:00
def idle_available ( self ) :
from common import sleepy
return sleepy . SUPPORTED
2007-07-20 01:36:25 +02:00
2010-02-08 15:08:40 +01:00
def latex_available ( self ) :
from common import latex
return latex . check_for_latex_support ( )
2007-08-27 15:46:25 +02:00
2010-02-08 15:08:40 +01:00
def pycrypto_available ( self ) :
return gajim . HAVE_PYCRYPTO
2007-09-02 11:34:21 +02:00
2010-02-08 15:08:40 +01:00
def docutils_available ( self ) :
try :
2010-12-18 09:11:58 +01:00
__import__ ( ' docutils ' )
2010-02-08 15:08:40 +01:00
except Exception :
return False
return True
2007-10-09 19:48:22 +02:00
2010-02-08 15:08:40 +01:00
def farsight_available ( self ) :
return gajim . HAVE_FARSIGHT
2011-08-24 11:04:31 +02:00
def gupnp_igd_available ( self ) :
return gajim . HAVE_UPNP_IGD