This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch cvix/2.x in repository pyhoca-gui. commit 073d260ea0b829f6be234b33a63d92115631921a Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Wed Feb 5 10:23:48 2014 +0100 CVix: start rewrite of CVix-relevant code --- CVix.py | 384 ++------------------------------------------- icons/CVix/16x16/CVix.png | Bin 486 -> 0 bytes icons/CVix/22x22/CVix.png | Bin 554 -> 0 bytes img/cvix_about.png | Bin 61359 -> 0 bytes 4 files changed, 16 insertions(+), 368 deletions(-) diff --git a/CVix.py b/CVix.py index d605156..337f7b6 100755 --- a/CVix.py +++ b/CVix.py @@ -1,390 +1,38 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2012 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -# Copyright (C) 2010-2012 by Dick Kniep <dick.kniep@lindix.nl> +# Copyright (C) 2010-2013 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de> +# Copyright (C) 2010-2013 by Dick Kniep <dick.kniep@lindix.nl> # # PyHoca GUI is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by +# it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # PyHoca GUI 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. +# GNU Affero General Public License for more details. # -# You should have received a copy of the GNU General Public License +# You should have received a copy of the GNU Affero General Public License # along with this program; if not, write to the # Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. -modules ={} - -import os.path -import subprocess -import sys -import wxversion - -try: - wxversion.select('2.9') -except: pass -try: - wxversion.select('2.8') -except: pass -import wx -import argparse - -import logging, logging.handlers import os -import ConfigParser -import getpass - -import CVix_session_template - -from x2go import X2GOCLIENT_OS as _X2GOCLIENT_OS -from x2go import X2goSessionProfiles - -# Python X2Go modules -from x2go import CURRENT_LOCAL_USER as _CURRENT_LOCAL_USER -from x2go import X2goLogger as _X2goLogger - -# X2Go backends - -from pyhoca.wxgui import __VERSION__ as _version -from pyhoca.wxgui import messages -from pyhoca.wxgui.basepath import locale_basepath -from pyhoca.wxgui import PyHocaGUI +import sys -if _X2GOCLIENT_OS == "Windows": - from x2go import X2GoClientXConfig as _X2GoClientXConfig +from pyhoca.wxgui import * +from pyhoca.wxgui import __VERSION__ __author__ = "Mike Gabriel, Dick Kniep" -__version__ = _version - -PROG_NAME = os.path.basename(sys.argv[0]).replace('.exe', '').replace('.py', '') -PROG_PID = os.getpid() - -# version information -VERSION=_version -VERSION_TEXT=""" -%s[%s] - an X2Go GUI client written in Python ----------------------------------------------------------------------- -developed by Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -sponsored by Dick Kniep <dick.kniep@lindix.nl> (2010-2012) - -VERSION: %s - -""" % (PROG_NAME, PROG_PID, VERSION) - - -if _X2GOCLIENT_OS == 'Windows': - import _winreg - -SESSIONDIR = '.x2goclient' - -ProgramFiles = None -if hasattr(sys, 'frozen') and sys.frozen in ("windows_exe", "console_exe"): - class Win32_Logging(object): - - softspace = 0 - _fname = os.path.join(os.environ['AppData'], PROG_NAME, '%s.log' % PROG_NAME) - _file = None - - def __init__(self, filemode='a'): - self._filemode = filemode - - def write(self, text, **kwargs): - if self._file is None: - try: - try: - os.mkdir(os.path.dirname(self._fname)) - except: - pass - self._file = open(self._fname, self._filemode) - except: - pass - else: - self._file.write(text) - self._file.flush() - - def flush(self): - if self._file is not None: - self._file.flush() - - sys.stdout = Win32_Logging(filemode='w+') - sys.stderr = Win32_Logging(filemode='a') - del Win32_Logging - - try: - OK = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARE\\CVix') - except WindowsError: - m = messages.PyHoca_MessageWindow_Ok(wx.App(), shortmsg='ALREADY_RUNNING', msg='CVix niet opgeslagen in register, waarschijnlijk is de installatie niet gelukt.', title=u'PyHoca-GUI (%s)...' % VERSION, icon='pyhoca-trayicon') - m.ShowModal() - sys.exit(1) - - ProgramFiles, Regtype = _winreg.QueryValueEx(OK, 'Install_Dir') - -import gevent -import gevent.monkey -gevent.monkey.patch_all() -import gettext - - -if _X2GOCLIENT_OS in ('Linux', 'Mac'): - import setproctitle - setproctitle.setproctitle(PROG_NAME) - -if sys.argv[0].startswith('./') or sys.argv[0].startswith('python') or sys.argv[1] == '--debug' or (os.environ.has_key('PYHOCAGUI_DEVELOPMENT') and os.environ['PYHOCAGUI_DEVELOPMENT'] == '1'): - sys.path.insert(0, os.getcwd()) - os.environ['PYHOCAGUI_DEVELOPMENT'] = '1' - ProgramFiles = os.getcwd() - print '### PyHoca-GUI running in development mode ###' - -if not ProgramFiles: - ProgramFiles = '/Program Files/%s' % PROG_NAME - -f = open(os.path.join('CVix_customer'), 'r') -CUSTOMER_HOST = f.read().replace('\n', '').replace('\r', '') -f.close() -CUSTOMER_USER = CUSTOMER_HOST.split('.')[0] -CUSTOMER_KEY = 'CVix/keys/%s.key' % CUSTOMER_USER - -if _X2GOCLIENT_OS == 'Windows': - from pyhoca.wxgui.basepath import nxproxy_binary - os.environ.update({'NXPROXY_BINARY': nxproxy_binary, }) - -def check_running(): - if _X2GOCLIENT_OS in ('Linux', 'Mac'): - p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE) - psA_out = p.communicate() - return psA_out[0].count(PROG_NAME) > 1 - elif _X2GOCLIENT_OS == 'Windows': - import wmi - w = wmi.WMI() - _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 == PROG_NAME]) > 1 - -def configFile(ProgramFiles): - - bdir = os.path.join(os.path.normpath(os.path.expanduser('~')), SESSIONDIR) - sessionFile = os.path.join(bdir, 'sessions') - - session_profiles = X2goSessionProfiles(config_files=[sessionFile]) - - found = False - if 'CVix' in session_profiles.profile_names: - found = True - - if not found: - - profile_config = CVix_session_template.SESSION_PROFILE_TEMPLATE - customized_config = { - 'sshproxyhost': '{hostname}'.format(hostname=CUSTOMER_HOST), - 'sshproxyport': 3389, - 'sshproxyuser': CUSTOMER_USER, - 'sshproxykeyfile': os.path.join(ProgramFiles, CUSTOMER_KEY), - 'icon': os.path.join(ProgramFiles, 'CVix', 'pixmaps', 'CVix.ico'), - 'user': getpass.getuser(), - } - profile_config['export'] = profile_config['export'].format(local_home=os.path.normpath(os.path.expanduser('~'))) - profile_config.update(customized_config) - - session_profiles.add_profile(profile_id=None, **profile_config) - - session_profiles.write_user_config = True - session_profiles.write() - - -class args: - def __init__(self, session_profile='CVix', debug=True, quiet=False, libdebug=True, libdebug_sftpxfer=True, version=False, - remember_username=True, non_interactive=True, auto_connect=False, show_profile_metatypes=False, single_session_profile=False, - tray_icon='CVix', tray_icon_connecting=None, add_to_known_hosts=True, - restricted_trayicon=False, start_on_connect=False, exit_on_disconnect=False, resume_newest_on_connect=True, resume_oldest_on_connect=False, - resume_all_on_connect=False, disconnect_on_suspend=False, disconnect_on_terminate=False, - splash_image=None, disable_splash=True, disable_options=False, - disable_printingprefs=False, disable_profilemanager=False, disable_notifications=False, display=None, logon_window_position=None, - published_applications_no_submenus=10, lang='nl', backend_controlsession=None, backend_terminalsession=None, backend_serversessioninfo=None, - backend_serversessionlist=None, backend_proxy=None, backend_sessionprofiles=None, backend_clientsettings=None, backend_clientprinting=None, - start_xserver=True, preferred_xserver=None, start_pulseaudio=False, client_rootdir=None, sessions_rootdir=None, ssh_rootdir=None,about_image='cvix_about.png'): - self.start_xserver = start_xserver - self.client_rootdir = client_rootdir - self.sessions_rootdir = sessions_rootdir - self.ssh_rootdir = ssh_rootdir - self.preferred_xserver = preferred_xserver - self.start_pulseaudio = start_pulseaudio - self.session_profile = session_profile - self.add_to_known_hosts = add_to_known_hosts - self.debug = debug - self.quiet = quiet - self.libdebug = libdebug - self.libdebug_sftpxfer = libdebug_sftpxfer - self.version = version - self.remember_username = remember_username - self.non_interactive = non_interactive - self.auto_connect = auto_connect - self.show_profile_metatypes = show_profile_metatypes - self.single_session_profile = single_session_profile - self.tray_icon = tray_icon - self.tray_icon_connecting = tray_icon_connecting - self.restricted_trayicon = restricted_trayicon - self.start_on_connect = start_on_connect - self.exit_on_disconnect = exit_on_disconnect - self.resume_newest_on_connect = resume_newest_on_connect - self.resume_oldest_on_connect = resume_oldest_on_connect - self.resume_all_on_connect = resume_all_on_connect - self.disconnect_on_suspend = disconnect_on_suspend - self.disconnect_on_terminate = disconnect_on_terminate - self.splash_image = splash_image - self.disable_splash = disable_splash - self.disable_options = disable_options - self.disable_printingprefs = disable_printingprefs - self.disable_profilemanager = disable_profilemanager - self.disable_notifications = disable_notifications - self.display = display - self.logon_window_position = logon_window_position - self.published_applications_no_submenus = published_applications_no_submenus - self.lang = lang - self.backend_controlsession = backend_controlsession - self.backend_terminalsession = backend_terminalsession - self.backend_serversessioninfo = backend_serversessioninfo - self.backend_serversessionlist = backend_serversessionlist - self.backend_proxy = backend_proxy - self.backend_sessionprofiles = backend_sessionprofiles - self.backend_clientsettings = backend_clientsettings - self.backend_clientprinting = backend_clientprinting - self.about_image = about_image - -def processArgs(debug, libdebug): - global DEBUG - global print_action_args - - a = args(debug=debug, libdebug=libdebug) - logger = _X2goLogger(tag='CVix') - liblogger = _X2goLogger() - - if a.debug: - logger.set_loglevel_debug() - - if a.libdebug: - liblogger.set_loglevel_debug() - - if a.quiet: - logger.set_loglevel_quiet() - liblogger.set_loglevel_quiet() - - if a.libdebug_sftpxfer: - liblogger.enable_debug_sftpxfer() - - if a.single_session_profile and a.session_profile is None: - m = messages.PyHoca_MessageWindow_Ok(wx.App(), shortmsg='SINGLESESSIONS', msg='The --single-session-profile option requires naming of a specific session profile!', title=u'PyHoca-GUI (%s)...' % VERSION, icon='pyhoca-trayicon') - m.ShowModal() - sys.exit(1) - - if a.non_interactive: - if a.session_profile is None: - m = messages.PyHoca_MessageWindow_Ok(wx.App(), shortmsg='SINGLESESSIONS', msg='In non-interactive mode you have to use the --session-profile option (or -P) to specify a certain session profile name!', title=u'PyHoca-GUI (%s)...' % VERSION, icon='pyhoca-trayicon') - m.ShowModal() - sys.exit(1) - a.restricted_trayicon = True - a.auto_connect = True - a.start_on_connect = True - a.resume_all_on_connect = True - a.exit_on_disconnect = True - a.disconnect_on_suspend = True - a.disconnect_on_terminate = True - a.single_session_profile = True - - if a.non_interactive and (a.resume_newest_on_connect or a.resume_oldest_on_connect): - # allow override... - a.resume_all_on_connect = False - - if _X2GOCLIENT_OS == "Windows": - _x = _X2GoClientXConfig() - _known_xservers = _x.known_xservers - _installed_xservers = _x.installed_xservers - - if _X2GOCLIENT_OS == 'Windows' and a.preferred_xserver: - if a.preferred_xserver not in _installed_xservers: - m = messages.PyHoca_MessageWindow_Ok(wx.App(), shortmsg='SINGLESESSIONS', msg='Xserver ,,%s\'\' is not installed on your Windows system' % a.preferred_xserver, title=u'PyHoca-GUI (%s)...' % VERSION, icon='pyhoca-trayicon') - m.ShowModal() - sys.exit(1) - a.start_xserver = a.preferred_xserver - - if _X2GOCLIENT_OS == 'Windows' and a.start_xserver and a.display: - m = messages.PyHoca_MessageWindow_Ok(wx.App(), shortmsg='SINGLESESSIONS', msg='You can tell PyHoca-GUI to handle XServer startup and then specify a DISPLAY environment variable!', title=u'PyHoca-GUI (%s)...' % VERSION, icon='pyhoca-trayicon') - m.ShowModal() - sys.exit(1) - - if a.display: - os.environ.update({'DISPLAY': a.display}) - else: - if _X2GOCLIENT_OS == 'Windows' and not a.start_xserver: - os.environ.update({'DISPLAY': 'localhost:0'}) - - if a.client_rootdir: - a.backend_sessionprofiles='FILE' - a.backend_clientsettings='FILE' - a.backend_clientprinting='FILE' - - return a, logger, liblogger - -def startCVix(loglevel): - """ - Deze functie zorgt er voor dat bij verschillende mensen die gebruik - maken van dezelfde computer en verschillende accounts hebben, - de directory met de juiste instellingen gekopieerd wordt naar - de nieuwe gebruiker. Tevens geeft het info indien er een probleem met - opstarten. - """ - libdbg = dbg = False - if loglevel in ('--debug', '-D'): - libdbg = dbg = True - - a, logger, liblogger = processArgs(debug=dbg, libdebug=libdbg) - - print 'Programma %s' % ProgramFiles - if ProgramFiles is None: - logger.error('CVix gevonden in register, maar de installatiedirectory niet gevonden') - sys.exit(1) - configFile(ProgramFiles) - - if _X2GOCLIENT_OS == 'Windows': - print 'Locale basepath = ' + locale_basepath - print 'languages = ' + a.lang - if a.lang: - lang = gettext.translation('pyhoca-gui', localedir=locale_basepath, languages=[a.lang], ) - else: - lang = gettext.translation('pyhoca-gui', localedir=locale_basepath, languages=['en'], ) - lang.install(unicode=True) - else: - gettext.install('pyhoca-gui', localedir=locale_basepath, unicode=True) - - if check_running(): - sys.stderr.write("\n###############################\n### %s: already running for user %s\n###############################\n" % (PROG_NAME, _CURRENT_LOCAL_USER)) - m = messages.PyHoca_MessageWindow_Ok(wx.App(), shortmsg='ALREADY_RUNNING', title=u'PyHoca-GUI (%s)...' % VERSION, icon='pyhoca-trayicon') - m.ShowModal() - - try: - thisPyHocaGUI = PyHocaGUI(a, logger, liblogger, version=VERSION, appname='CVix') - thisPyHocaGUI.MainLoop() - except KeyboardInterrupt: - thisPyHocaGUI.WakeUpIdle() - thisPyHocaGUI.ExitMainLoop() - except SystemExit: - thisPyHocaGUI.WakeUpIdle() - thisPyHocaGUI.ExitMainLoop() +__version__ = 2.0 if __name__ == '__main__': -# debug options... - mainPath = os.path.normpath(os.path.dirname(sys.argv[0])) - os.chdir(mainPath) - global DEBUG - global print_action_args - ldb = None - if len(sys.argv) > 1: - ldb = sys.argv[1] - - startCVix(ldb) + app = PyHocaGUI_Launcher() + app.setup_progname('CVix') + app.setup_version(__version__) + app.setup_consolelog() + app.setup_process() + app.setup_devmode() + app.main() diff --git a/icons/CVix/16x16/CVix.png b/icons/CVix/16x16/CVix.png deleted file mode 100644 index 52491ef..0000000 Binary files a/icons/CVix/16x16/CVix.png and /dev/null differ diff --git a/icons/CVix/22x22/CVix.png b/icons/CVix/22x22/CVix.png deleted file mode 100644 index 01717af..0000000 Binary files a/icons/CVix/22x22/CVix.png and /dev/null differ diff --git a/img/cvix_about.png b/img/cvix_about.png deleted file mode 100644 index 73fb155..0000000 Binary files a/img/cvix_about.png and /dev/null differ -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/pyhoca-gui.git