[X2Go-Commits] [pyhoca-gui] 05/05: Add X2Go Session Broker support.
git-admin at x2go.org
git-admin at x2go.org
Tue Mar 18 01:12:13 CET 2014
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch brokerclient
in repository pyhoca-gui.
commit 6f01566e989aa49bbb5b49b8dc03156fe4935c2c
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date: Mon Mar 17 14:11:24 2014 +0100
Add X2Go Session Broker support.
---
debian/changelog | 1 +
man/man1/pyhoca-gui.1 | 32 +++++++++++++++
pyhoca/wxgui/defaults.py | 6 +++
pyhoca/wxgui/frontend.py | 57 ++++++++++++++++++++++++++-
pyhoca/wxgui/launcher.py | 50 +++++++++++++++--------
pyhoca/wxgui/menus_taskbar.py | 85 ++++++++++++++++++++++++++++------------
pyhoca/wxgui/messages.py | 3 +-
pyhoca/wxgui/notify.py | 3 +-
pyhoca/wxgui/profilemanager.py | 26 +++++++-----
9 files changed, 207 insertions(+), 56 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 59e98ba..b699b9a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
pyhoca-gui (0.5.0.0-0x2go1) UNRELEASED; urgency=low
* New upstream version (0.5.0.0):
+ - Add X2Go Session Broker support.
- Adapt to new backend concept found in Python X2Go (>= 0.5.0.0).
- Move most code of the pyhoca-gui executable into a dedicated class
named PyHocaGUI_Launcher.
diff --git a/man/man1/pyhoca-gui.1 b/man/man1/pyhoca-gui.1
index de03803..44fac9c 100644
--- a/man/man1/pyhoca-gui.1
+++ b/man/man1/pyhoca-gui.1
@@ -126,6 +126,38 @@ Disconnect from a server if a session on that server has been terminated.
.TP
\*(T<\fB\-\-display <hostname>:<screennumber>\fR\*(T>
Set the DISPLAY environment variable to <hostname>:<screennumber>.
+
+.SH BROKERAGE OPTIONS
+In case you want to retrieve X2Go session profiles from an X2Go Session Broker use the following options:
+.TP
+\*(T<\fB\-\-broker\-url=<URL>\fR\*(T>
+Specify the <URL> of the X2Go Session Broker. \fBpyhoca\-gui\fR can access http:// and ssh:// style URLs.
+
+Syntax of <URL> for HTTP brokerage:
+
+http(s)://<user>:<password>@<hostname>:<port>/path/to/broker
+
+Syntax of <URL> for SSH brokerage:
+
+ssh://<user>:<password>@<hostname>:<port>/usr/bin/x2gobroker (or any executable that
+provides the broker via SSH).
+
+As a special <URL> you can type "HTTP" or "SSH" and then the application will provide a login window with
+a pre-formatted / schematic URL.
+.TP
+\*(T<\fB\-\-broker\-password <password>\fR\*(T>
+Session broker password for retrieving session profiles from the X2Go Session Broker.
+The cleartext password that has been specified at the command line will be masqueraded in
+the systems process list (Linux, MacOS). On Windows systems the usage of the \-\-broker-password option is
+forbidden.
+.TP
+\*(T<\fB\-\-broker\-name <broker\-name>\fR\*(T>
+Provide a human readable name for the session broker. This name overrides the default broker name ("X2Go Session Broker")
+in the application's menus and notification bubbles.
+.TP
+\*(T<\fB\-\-broker\-autoconnect\fR\*(T>
+If this command line option is given the session broker authentication dialog will appear on application startup.
+
.SH BRANDING OPTIONS
The \fBpyhoca-gui\fR provides some feature that allow to easily brand its appearance. Here some options
for tweaking the \fBpyhoca-gui\fR appearance and behaviour.
diff --git a/pyhoca/wxgui/defaults.py b/pyhoca/wxgui/defaults.py
index 64086e0..cc56778 100644
--- a/pyhoca/wxgui/defaults.py
+++ b/pyhoca/wxgui/defaults.py
@@ -68,6 +68,12 @@ default_options = {
'disconnect_on_terminate': False,
'display': '',
+ # brokerage
+ 'broker_url': '',
+ 'broker_password': '',
+ 'broker_name': 'X2Go Session Broker',
+ 'broker_autoconnect': False,
+
# branding
'splash_image': '',
'about_image': '',
diff --git a/pyhoca/wxgui/frontend.py b/pyhoca/wxgui/frontend.py
index e460a42..b927b83 100644
--- a/pyhoca/wxgui/frontend.py
+++ b/pyhoca/wxgui/frontend.py
@@ -51,6 +51,7 @@ import locale
# PyHoca-GUI modules
import about
import logon
+import brokerlogon
import passphrase
import taskbar
import profilemanager
@@ -212,6 +213,21 @@ class PyHocaGUI(wx.App, x2go.X2GoClient):
if x2go.X2GOCLIENT_OS == 'Windows' and self.args.start_pulseaudio and os.environ.has_key('PYHOCAGUI_DEVELOPMENT') and os.environ['PYHOCAGUI_DEVELOPMENT'] == '1':
_x2goclient_kwargs['pulseaudio_installdir'] = os.path.dirname(basepath.pulseaudio_binary)
+ self.broker_autoconnect = self.args.broker_autoconnect
+ if self.args.broker_url:
+ if self.args.broker_url in ('HTTP', 'SSH'):
+ self.broker_autoconnect = True
+ _x2goclient_kwargs['broker_url'] = self.args.broker_url
+ self.with_brokerage = True
+ else:
+ self.with_brokerage = False
+
+ if self.args.broker_password:
+ _x2goclient_kwargs['broker_password'] = self.args.broker_password
+
+ if self.args.broker_name:
+ self.broker_name = self.args.broker_name
+
try:
if self.args.logon_window_position:
self.logon_window_position_x = int(self.args.logon_window_position.split('x')[0])
@@ -352,13 +368,15 @@ class PyHocaGUI(wx.App, x2go.X2GoClient):
self._pyhoca_logger('opening default session profile %s' % profile_name, loglevel=x2go.log.loglevel_NOTICE)
self._X2GoClient__register_session(profile_name=profile_name, auto_connect=self.auto_connect)
- if self.auto_connect:
+ if self.auto_connect or self.broker_autoconnect:
gevent.spawn(self._auto_connect)
def _auto_connect(self):
"""\
Register all available session profiles on application start.
+ If brokerage is used, handle auto connecting to the broker before that, as well.
+
The auto-registration of all session profiles will trigger the auto-connect feature
implemented in C{X2GoClient} of Python X2Go.
@@ -366,7 +384,12 @@ class PyHocaGUI(wx.App, x2go.X2GoClient):
# wait for splash to appear
if not self.args.disable_splash:
gevent.sleep(1)
- if not self.args.session_profile:
+
+ # auto connect to the broker if requested
+ if self.with_brokerage and self.broker_autoconnect:
+ self.OnBrokerAuthenticate(None)
+
+ if self.auto_connect and not self.args.session_profile:
self._X2GoClient__register_all_session_profiles()
def session_auto_connect(self, session_uuid, **kwargs):
@@ -800,6 +823,36 @@ class PyHocaGUI(wx.App, x2go.X2GoClient):
if not self.is_session_profile(profile_name):
profilemanager.PyHocaGUI_ProfileManager(self, 'ADD_EXPLICITLY', profile_name=profile_name)
+ def OnBrokerAuthenticate(self, evt):
+ """\
+ Gets called if the user requests connecting to a session profile.
+
+ @param evt: event
+ @type evt: C{obj}
+
+ """
+ _broker_logon_window = brokerlogon.PyHocaGUI_BrokerDialogBoxPassword(self, caller=self)
+
+ def OnBrokerDisconnect(self, evt):
+ """\
+ Reset (disconnect from) the broker connection.
+
+ @param evt: event
+ @type evt: C{obj}
+
+ """
+ self._hide_notifications_map = {}
+ self._temp_launching_pubapp_profiles = []
+ self._temp_launching_pubapp_locks = {}
+ self._temp_disabled_profile_names = []
+ self._temp_disabled_session_names = {}
+ self._remember_shared_folders = {}
+
+ for profile_name in self._X2GoClient__client_connected_profiles(return_profile_names=True):
+ self._X2GoClient__disconnect_profile(profile_name)
+
+ self.session_profiles.broker_disconnect()
+
def OnSessionStart(self, evt):
"""\
Gets called if the user requests to start a new X2Go session.
diff --git a/pyhoca/wxgui/launcher.py b/pyhoca/wxgui/launcher.py
index fc3299c..9030ddd 100644
--- a/pyhoca/wxgui/launcher.py
+++ b/pyhoca/wxgui/launcher.py
@@ -86,8 +86,16 @@ VERSION: %s
self.VERSION_TEXT = text
def setup_process(self):
+ PROG_OPTIONS = " ".join(sys.argv[1:]).replace("=", " ").split()
+ try:
+ _broker_password_index = PROG_OPTIONS.index('--broker-password')+1
+ PROG_OPTIONS[_broker_password_index] = "XXXXXXXX"
+ except ValueError:
+ # ignore if --broker-password option is not specified
+ pass
if X2GOCLIENT_OS in ('Linux', 'Mac'):
import setproctitle
+ #setproctitle.setproctitle("%s %s" % (self.PROG_NAME, " ".join(PROG_OPTIONS)))
setproctitle.setproctitle(self.PROG_NAME)
if X2GOCLIENT_OS == 'Windows':
@@ -103,40 +111,42 @@ VERSION: %s
if sys.argv[0].startswith('./') or sys.argv[0].startswith('python'):
sys.path.insert(0, os.getcwd())
os.environ['PYHOCAGUI_DEVELOPMENT'] = '1'
- print '### %s running in development mode ###' % self.PROG_NAME
+ print '### {progname} running in development mode ###'.format(progname=self.PROG_NAME)
basepath.reload_base_paths()
def check_running(self):
if X2GOCLIENT_OS in ('Linux', 'Mac'):
+ _executable = os.path.basename(sys.argv[0]).replace('.exe', '')
+
p = subprocess.Popen(['ps', '-U', CURRENT_LOCAL_USER, '-u', CURRENT_LOCAL_USER], stdout=subprocess.PIPE)
psA_out = p.communicate()
- if psA_out[0].count(self.PROG_NAME) <= 1:
+ if psA_out[0].count(_executable) <= 1:
- if os.path.isdir(os.path.expanduser("~/.x2go/pyhoca-gui/")):
- shutil.rmtree(os.path.expanduser("~/.x2go/pyhoca-gui/"))
+ if os.path.isdir(os.path.expanduser("~/.x2go/{progname}/".format(progname=_executable))):
+ shutil.rmtree(os.path.expanduser("~/.x2go/{progname}/".format(progname=_executable)))
my_pid = str(os.getpid())
- if not os.path.exists(os.path.expanduser("~/.x2go/pyhoca-gui/")):
- os.makedirs(os.path.expanduser("~/.x2go/pyhoca-gui/"))
- my_pidfile = os.path.expanduser("~/.x2go/pyhoca-gui/display.{pid}".format(pid=my_pid))
+ if not os.path.exists(os.path.expanduser("~/.x2go/{progname}/".format(progname=_executable))):
+ os.makedirs(os.path.expanduser("~/.x2go/{progname}/".format(progname=_executable)))
+ my_pidfile = os.path.expanduser("~/.x2go/{progname}/display.{pid}".format(progname=_executable, pid=my_pid))
my_display = os.environ['DISPLAY']
open(my_pidfile, 'w').write(my_display)
already_running_for_this_display = False
- for pidfile in os.listdir(os.path.expanduser("~/.x2go/pyhoca-gui/")):
+ for pidfile in os.listdir(os.path.expanduser("~/.x2go/{progname}/".format(progname=_executable))):
# this is our own pid file...
if my_pidfile.endswith(pidfile):
continue
- display = open(os.path.expanduser("~/.x2go/pyhoca-gui/") + pidfile, 'r').read()
+ display = open(os.path.expanduser("~/.x2go/{progname}/".format(progname=_executable)) + pidfile, 'r').read()
if display.split('.')[0] == my_display.split('.')[0]:
other_pid = pidfile.split('.')[1]
print
- print('One instance of PyHoca-GUI (PID: {other_pid}) is already running for this $DISPLAY {display}'.format(other_pid=other_pid, display=my_display))
+ print('One instance of {progname} (PID: {other_pid}) is already running for this $DISPLAY {display}'.format(progname=_executable, other_pid=other_pid, display=my_display))
return True
@@ -148,7 +158,7 @@ VERSION: %s
_p_names = []
for process in w.Win32_Process():
_p_names.append(process.Name)
- return len([ _p_name for _p_name in _p_names if _p_name == self.PROG_NAME]) > 1
+ return len([ _p_name for _p_name in _p_names if _p_name == _executable]) > 1
def version(self):
@@ -244,6 +254,13 @@ VERSION: %s
{'args':['--published-applications-no-submenus'], 'default': _default_options['published_applications_no_submenus'], 'metavar': '<number>', 'help': 'the number of published applications that will be rendered without submenus', },
]
+ broker_options = [
+ {'args':['-B','--broker-url'], 'default': _default_options['broker_url'], 'help': 'retrieve session profiles via an X2Go Session Broker under the given URL', },
+ {'args':['--broker-password'], 'default': _default_options['broker_password'], 'help': 'password for authenticating against the X2Go Session Broker', },
+ {'args':['--broker-name'], 'default': _default_options['broker_name'], 'help': 'tweak the wording of \'X2Go Session Broker\'', },
+ {'args':['--broker-autoconnect'], 'default': _default_options['broker_autoconnect'], 'action': 'store_true', 'help': 'trigger broker authentication directly after application startup', },
+ ]
+
if X2GOCLIENT_OS == 'Windows':
x2go_gui_options.append(
{'args':['--lang'], 'default': _default_options['lang'], 'metavar': 'LANGUAGE', 'help': 'set the GUI language (currently available: en, de, nl, es)', },
@@ -277,7 +294,8 @@ VERSION: %s
formatter_class=argparse.RawDescriptionHelpFormatter, \
add_help=True, argument_default=None)
p_debugopts = p.add_argument_group('Debug options')
- p_guiopts = p.add_argument_group('%s options' % self.PROG_NAME)
+ p_guiopts = p.add_argument_group('{progname} options'.format(progname=self.PROG_NAME))
+ p_brokeropts = p.add_argument_group('Brokerage options')
p_portableopts = p.add_argument_group('Portable application support')
p_backendopts = p.add_argument_group('Python X2Go backend options (for experts only)')
@@ -286,7 +304,7 @@ VERSION: %s
p_portableopts = p.add_argument_group('File locations for portable setups (MS Windows only)')
_option_groups = ((p_guiopts, x2go_gui_options), (p_debugopts, debug_options), (p_contribopts, contrib_options), (p_portableopts, portable_options), (p_backendopts, backend_options), )
else:
- _option_groups = ((p_guiopts, x2go_gui_options), (p_debugopts, debug_options), (p_portableopts, portable_options), (p_backendopts, backend_options), )
+ _option_groups = ((p_guiopts, x2go_gui_options), (p_brokeropts, broker_options), (p_debugopts, debug_options), (p_portableopts, portable_options), (p_backendopts, backend_options), )
for (p_group, opts) in _option_groups:
required = False
for opt in opts:
@@ -341,7 +359,7 @@ VERSION: %s
a.start_xserver = a.preferred_xserver
if X2GOCLIENT_OS == 'Windows' and a.start_xserver and a.display:
- self.runtime_error('You can tell %s to handle XServer startup and then specify a DISPLAY environment variable!' % self.PROG_NAME, parser=p)
+ self.runtime_error('You can tell %s to handle XServer startup and then specify a DISPLAY environment variable!'.format(progname=self.PROG_NAME), parser=p)
if a.display:
os.environ.update({'DISPLAY': a.display})
@@ -378,9 +396,9 @@ VERSION: %s
if self.check_running():
sys.stderr.write("\n###############################\n### %s: already running for user %s\n###############################\n" % (self.PROG_NAME, CURRENT_LOCAL_USER))
- m = PyHoca_MessageWindow_Ok(wx.App(), shortmsg='ALREADY_RUNNING', title=u'%s (%s)...' % (self.PROG_NAME, self.VERSION), icon='pyhoca-trayicon')
+ m = PyHoca_MessageWindow_Ok(wx.App(), shortmsg='ALREADY_RUNNING', title=u'%s (%s)...' % (self.PROG_NAME, self.VERSION), icon='{progname}_trayicon'.format(progname=self.PROG_NAME))
m.ShowModal()
- version()
+ self.version()
thisPyHocaGUI = None
try:
diff --git a/pyhoca/wxgui/menus_taskbar.py b/pyhoca/wxgui/menus_taskbar.py
index 2a6d3c5..e9a7e96 100644
--- a/pyhoca/wxgui/menus_taskbar.py
+++ b/pyhoca/wxgui/menus_taskbar.py
@@ -72,18 +72,27 @@ class PyHocaGUI_Menu_TaskbarManageProfile(wx.Menu):
self._PyHocaGUI._eventid_profilenames_map[ID_EXPORTPROFILE] = \
self._PyHocaGUI._eventid_profilenames_map[ID_DELETEPROFILE] = profile_name
- self.Append(text=_(u"Edit Profile"), id=ID_EDITPROFILE)
+ if self._PyHocaGUI.session_profiles.is_mutable(profile_name):
+ self.Append(text=_(u"Edit Profile"), id=ID_EDITPROFILE)
+ else:
+ self.Append(text=_(u"View Profile"), id=ID_EDITPROFILE)
+ self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileEdit, id=ID_EDITPROFILE)
+
if not self._PyHocaGUI.args.single_session_profile:
+
self.AppendSeparator()
- self.Append(text=_(u"Use as Template for New Profile"), id=ID_COPYPROFILE)
- self.AppendSeparator()
+
+ if self._PyHocaGUI.session_profiles.is_mutable(profile_name):
+ self.Append(text=_(u"Use as Template for New Profile"), id=ID_COPYPROFILE)
+ self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileCopy, id=ID_COPYPROFILE)
+ self.AppendSeparator()
+
self.Append(text=_(u"Export Profile"), id=ID_EXPORTPROFILE)
- self.Append(text=_(u"Delete Profile"), id=ID_DELETEPROFILE)
+ self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileExport, id=ID_EXPORTPROFILE)
- self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileEdit, id=ID_EDITPROFILE)
- self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileCopy, id=ID_COPYPROFILE)
- self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileExport, id=ID_EXPORTPROFILE)
- self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileDelete, id=ID_DELETEPROFILE)
+ if self._PyHocaGUI.session_profiles.is_mutable(profile_name):
+ self.Append(text=_(u"Delete Profile"), id=ID_DELETEPROFILE)
+ self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileDelete, id=ID_DELETEPROFILE)
class PyHocaGUI_Menu_TaskbarOptionsManager(wx.Menu):
@@ -133,7 +142,9 @@ class PyHocaGUI_Menu_TaskbarOptionsManager(wx.Menu):
if self._PyHocaGUI.profilemanager_disabled:
_maintain_profiles_item.Enable(False)
- else:
+ self.AppendSeparator()
+
+ elif self._PyHocaGUI.session_profiles.has_profile_name(self._PyHocaGUI.args.session_profile):
ID_SINGLEPROFILEMANAGER = wx.NewId()
_maintain_profile_item = self.AppendMenu(id=ID_SINGLEPROFILEMANAGER,
text=_(u'Manage Session Profile'),
@@ -141,8 +152,13 @@ class PyHocaGUI_Menu_TaskbarOptionsManager(wx.Menu):
)
if self._PyHocaGUI.args.session_profile in self._PyHocaGUI.client_connected_profiles(return_profile_names=True):
_maintain_profile_item.Enable(False)
+ self.AppendSeparator()
- self.AppendSeparator()
+ if self._PyHocaGUI.with_brokerage and self._PyHocaGUI.session_profiles.is_broker_authenticated():
+ ID_BROKER_DISCONNECT = wx.NewId()
+ self.Append(id=ID_BROKER_DISCONNECT, text=_(u"Disconnect from session broker"))
+ self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnBrokerDisconnect, id=ID_BROKER_DISCONNECT)
+ self.AppendSeparator()
ID_PRINTINGPREFS = wx.NewId()
_printingprefs_item = self.Append(id=ID_PRINTINGPREFS, text=_(u"Printing Preferences"))
@@ -522,6 +538,7 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu):
wx.Menu.__init__(self)
+ ID_AUTHENTICATE_BROKER=wx.NewId()
ID_CONNECT=wx.NewId()
ID_PUBAPPSESSIONSTART=wx.NewId()
ID_SESSIONSTART=wx.NewId()
@@ -534,7 +551,12 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu):
_foldersharing_disabled = False
- if self._PyHocaGUI.args.single_session_profile and not self._PyHocaGUI.is_session_profile(profile_name):
+ if self._PyHocaGUI.with_brokerage and not self._PyHocaGUI.session_profiles.is_broker_authenticated():
+ _auth_menu_text = _(u'Connect to') + self._PyHocaGUI.broker_name
+ self.Append(id=ID_AUTHENTICATE_BROKER, text=_auth_menu_text)
+ self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnBrokerAuthenticate, id=ID_AUTHENTICATE_BROKER)
+
+ elif self._PyHocaGUI.args.single_session_profile and not self._PyHocaGUI.is_session_profile(profile_name):
connect = self.Append(id=ID_CONNECT, text=_(u'Connect %s') % profile_name)
connect.Enable(False)
else:
@@ -779,7 +801,10 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu):
if not self._PyHocaGUI.restricted_trayicon:
self.AppendSeparator()
- self.Append(id=ID_EDITPROFILEWHILECONNECTED, text=_(u"Customize &profile"))
+ if self._PyHocaGUI.session_profiles.is_mutable(profile_name):
+ self.Append(id=ID_EDITPROFILEWHILECONNECTED, text=_(u"Customize &profile"))
+ else:
+ self.Append(id=ID_EDITPROFILEWHILECONNECTED, text=_(u"View &profile"))
self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileEditWhileConnected, id=ID_EDITPROFILEWHILECONNECTED)
self._PyHocaGUI._eventid_profilenames_map[ID_EDITPROFILEWHILECONNECTED] = \
@@ -876,7 +901,7 @@ class PyHocaGUI_Menu_TaskbarProfileNames(wx.Menu):
wx.Menu.__init__(self)
- if type(caller) == PyHocaGUI_Menu_TaskbarOptionsManager:
+ if type(caller) == PyHocaGUI_Menu_TaskbarOptionsManager and self._PyHocaGUI.session_profiles.supports_mutable_profiles():
ID_ADDPROFILE = wx.NewId()
self.Append(id=ID_ADDPROFILE, text=_(u"Add Profile"))
self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileAdd, id=ID_ADDPROFILE)
@@ -954,7 +979,10 @@ class PyHocaGUI_Menu_TaskbarProfileNames(wx.Menu):
self._PyHocaGUI.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=_this_id)
if not group_name and (not _profile_groups and not _profile_names) and not filter_profiles:
- _dummy = self.Append(text=_(u'No session profiles defined'), id=wx.NewId())
+ if self._PyHocaGUI.with_brokerage:
+ _dummy = self.Append(text=_(u'Session broker is not connected'), id=wx.NewId())
+ else:
+ _dummy = self.Append(text=_(u'No session profiles defined'), id=wx.NewId())
_dummy.Enable(False)
else:
@@ -970,7 +998,7 @@ class PyHocaGUI_Menu_TaskbarProfileNames(wx.Menu):
self.Append(text=_(u'Export Profile Group'), id=_export_id)
self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileExport, id=_export_id)
- if bind_method is None and not group_name:
+ if bind_method is None and not group_name and self._PyHocaGUI.session_profiles.supports_mutable_profiles():
_import_id = wx.NewId()
self.AppendSeparator()
self.Append(text=_(u'Import Session Profiles'), id=_import_id)
@@ -1006,18 +1034,25 @@ class PyHocaGUI_Menu_TaskbarSessionManager(wx.Menu):
wx.Menu.__init__(self)
- ID_AUTHENTICATE = wx.NewId()
+ ID_AUTHENTICATE_SESSION = wx.NewId()
+ ID_AUTHENTICATE_BROKER = wx.NewId()
ID_EXIT = wx.NewId()
- _auth_menu_text = _(u'Connect Server')
- self.AppendMenu(id=ID_AUTHENTICATE,
- text=_auth_menu_text,
- submenu=PyHocaGUI_Menu_TaskbarProfileNames(self._PyHocaGUI,
- caller=self,
- filter_profiles=[],
- disabled_profiles=self._PyHocaGUI.client_connected_profiles(return_profile_names=True) + self._PyHocaGUI._temp_disabled_profile_names,
- bind_method=self._PyHocaGUI.OnSessionAuthenticate))
- self.AppendSeparator()
+ if self._PyHocaGUI.with_brokerage and not self._PyHocaGUI.session_profiles.is_broker_authenticated():
+ _auth_menu_text = _(u'Connect to') + ' ' + self._PyHocaGUI.broker_name
+ self.Append(id=ID_AUTHENTICATE_BROKER, text=_auth_menu_text)
+ self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnBrokerAuthenticate, id=ID_AUTHENTICATE_BROKER)
+ self.AppendSeparator()
+ else:
+ _auth_menu_text = _(u'Connect Server')
+ self.AppendMenu(id=ID_AUTHENTICATE_SESSION,
+ text=_auth_menu_text,
+ submenu=PyHocaGUI_Menu_TaskbarProfileNames(self._PyHocaGUI,
+ caller=self,
+ filter_profiles=[],
+ disabled_profiles=self._PyHocaGUI.client_connected_profiles(return_profile_names=True) + self._PyHocaGUI._temp_disabled_profile_names,
+ bind_method=self._PyHocaGUI.OnSessionAuthenticate))
+ self.AppendSeparator()
_profile_names = self._PyHocaGUI.session_profiles.profile_names
_profile_names.sort()
diff --git a/pyhoca/wxgui/messages.py b/pyhoca/wxgui/messages.py
index 721384d..71656eb 100644
--- a/pyhoca/wxgui/messages.py
+++ b/pyhoca/wxgui/messages.py
@@ -30,8 +30,6 @@ import basepath
# X2Go modules
from x2go.defaults import CURRENT_LOCAL_USER as _CURRENT_LOCAL_USER
-_icons_location = basepath.icons_basepath
-
class PyHoca_MessageWindow(wx.Dialog):
"""\
A simple message window for L{PyHocaGUI}.
@@ -93,6 +91,7 @@ class PyHoca_MessageWindow(wx.Dialog):
wx.Dialog.__init__(self, parent, wx.ID_ANY, )
self.SetTitle('%s' % title)
+ _icons_location = basepath.icons_basepath
if icon:
path_to_icon = os.path.normpath('%s/PyHoca/64x64/%s.png' % (_icons_location, icon))
self.icon = wx.StaticBitmap(self, wx.ID_ANY, wx.Bitmap(path_to_icon, wx.BITMAP_TYPE_ANY))
diff --git a/pyhoca/wxgui/notify.py b/pyhoca/wxgui/notify.py
index 197f70f..8d66cc5 100644
--- a/pyhoca/wxgui/notify.py
+++ b/pyhoca/wxgui/notify.py
@@ -29,8 +29,6 @@ from taskbar import MakeIcon
import x2go.utils as utils
-_icons_location = basepath.icons_basepath
-
class NotSupportedException(exceptions.StandardError): pass
class PyHocaNotificationException(exceptions.StandardError): pass
@@ -126,6 +124,7 @@ class libnotify_NotifierPopup(object):
except KeyError:
pass
+ _icons_location = basepath.icons_basepath
if icon:
icon = 'file://%s/PyHoca/32x32/%s.png' % (_icons_location, icon)
diff --git a/pyhoca/wxgui/profilemanager.py b/pyhoca/wxgui/profilemanager.py
index 130f5f7..1607d2d 100644
--- a/pyhoca/wxgui/profilemanager.py
+++ b/pyhoca/wxgui/profilemanager.py
@@ -165,7 +165,7 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
if _to_host: self.profile_config['host'] = [_to_host]
if _to_port: self.profile_config['sshport'] = int(_to_port)
- self.profile_config['sshproxytunnel'] = 'DEPRECATED_CAN_BE_SAFELY_REMOVE'
+ self.profile_config['sshproxytunnel'] = 'DEPRECATED_CAN_BE_SAFELY_REMOVED'
# we create a backup dict of our profile_config immediately (for being able to reset erroneously made changes)
self.profile_config_orig = copy.deepcopy(self.profile_config)
@@ -185,7 +185,7 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.tab_MediaResources = wx.Panel(self.X2GoTabs, -1)
self.tab_SharedResources = wx.Panel(self.X2GoTabs, -1)
- if not self.session_profiles.is_writable(self.profile_id):
+ if not self.session_profiles.is_mutable(self.profile_id):
self.tab_Profile.Enable(False)
self.tab_Session.Enable(False)
self.tab_Connection.Enable(False)
@@ -380,12 +380,14 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
else:
self.OKButton = wx.Button(self, -1, _(u"Save"))
self.DefaultButton = wx.Button(self, -1, _(u'Reset'))
- self.OKButton.SetDefault()
self.ApplyButton = wx.Button(self, -1, _(u"Apply"))
self.CancelButton = wx.Button(self, -1, _(u"Cancel"))
- if not self.session_profiles.is_writable(self.profile_id):
+ if self.session_profiles.is_mutable(self.profile_id):
+ self.OKButton.SetDefault()
+ else:
self.OKButton.Enable(False)
self.ApplyButton.Enable(False)
+ self.CancelButton.SetDefault()
self.__set_properties()
self.__do_layout()
@@ -446,11 +448,17 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
"""
if self.action == 'ADD':
- self.SetTitle(_(u"PyHoca-GUI Profile Manager - new profile"))
+ self.SetTitle(_(u"%s Profile Manager - new profile") % self._PyHocaGUI.appname)
elif self.action == 'EDIT_CONNECTED':
- self.SetTitle(_(u"PyHoca-GUI Profile Manager - %s (connected)") % self.profile_config['name'])
+ if self._PyHocaGUI.session_profiles.is_mutable(self.profile_config['name']):
+ self.SetTitle(_(u"%s Profile Manager - %s (connected)") % (self._PyHocaGUI.appname, self.profile_config['name']))
+ else:
+ self.SetTitle(_(u"%s Profile Manager - %s (connected, immutable)") % (self._PyHocaGUI.appname, self.profile_config['name']))
else:
- self.SetTitle(_(u"PyHoca-GUI Profile Manager - %s") % self.profile_config['name'])
+ if self._PyHocaGUI.session_profiles.is_mutable(self.profile_config['name']):
+ self.SetTitle(_(u"%s Profile Manager - %s") % (self._PyHocaGUI.appname, self.profile_config['name']))
+ else:
+ self.SetTitle(_(u"%s Profile Manager - %s (immutable)") % (self._PyHocaGUI.appname, self.profile_config['name']))
self.SetFont(wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
self._textfield_height = 30
@@ -1562,7 +1570,7 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.SoundPortLabel.Enable(False)
self.SoundPort.Enable(False)
self.Esd.Enable(False)
- if self.session_profiles.is_writable(self.profile_id):
+ if self.session_profiles.is_mutable(self.profile_id):
self.tab_SharedResources.Enable(True)
self.RDPServer.Enable(False)
_hosts = self.Host.GetValue()
@@ -1620,7 +1628,7 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.DefaultSoundPort.Enable(True)
self.DefaultSoundPort.SetValue(True)
self.Esd.Enable(True)
- if self.session_profiles.is_writable(self.profile_id):
+ if self.session_profiles.is_mutable(self.profile_id):
self.tab_SharedResources.Enable(True)
self.RDPServer.SetValue(self.profile_config_bak['rdpserver'])
self.RDPOptions.SetValue(self.profile_config_bak['rdpoptions'])
--
Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/pyhoca-gui.git
More information about the x2go-commits
mailing list