#!/usr/bin/env python import sys, os, pwd from calculate.consolegui import qt from importlib import reload from calculate.consolegui.application.more import getRunProc, owner, _print import builtins as __builtin__ import dbus import dbus.mainloop.glib reload(sys) # always utf-8 in py3 # sys.setdefaultencoding("utf-8") from calculate.lib.cl_lang import setLocalTranslate setLocalTranslate('console_gui',sys.modules[__name__]) import signal signal.signal(signal.SIGINT, signal.SIG_DFL) def main(): from calculate.consolegui.application.ConnectionTabs import (ToolTabWidget, parse, SelectedMethodWgt) from calculate.consolegui.application.dbus_service import (DBUS_MAINAPP, DBUS_NAME, DBUS_METHOD_APP, DBusWidget, dbus_updater_hide_tray) __builtin__.__dict__['_print'] = _print host, port, args = None, None, None parser = parse() args = parser.parse_args() if args.help: parser.print_help() sys.exit(0) sym_link = os.path.basename(sys.argv[0]) if sym_link != 'cl-console-gui' and sym_link.startswith("cl-console-gui-"): args.method = sym_link[len("cl-console-gui-"):].replace("-","_") if args.method: app = qt.QApplication(sys.argv) app.setQuitOnLastWindowClosed(True) ex = SelectedMethodWgt(app, args) if args.method == 'update': dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) session_bus = dbus.SessionBus() # Export the service name = dbus.service.BusName(DBUS_NAME, session_bus) # Export the object widget = DBusWidget(session_bus, DBUS_METHOD_APP % args.method, ex) sys.exit(app.exec_()) if args.host: host = args.host if args.port: port = args.port # Enable glib main loop support dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) # Get the session bus try: bus = dbus.SessionBus() except dbus.exceptions.DBusException as e: bus = None if not os.getuid(): _print (_('The user must not be root')) else: print(e) sys.exit(1) iface = None try: # Get the remote object remote_object = bus.get_object(DBUS_NAME, DBUS_MAINAPP) # Get the remote interface for the remote object iface = dbus.Interface(remote_object, DBUS_NAME) except dbus.DBusException: pass app = qt.QApplication(sys.argv) app.setApplicationName(_("Calculate Console")) second = False for run_commands in (x for x in getRunProc() if 'cl-console-gui' in x[0]): if 'python' in run_commands[0]: if not '--method' in run_commands[0] and pwd.getpwuid(os.getuid())\ .pw_name == owner(run_commands[1]): if second: print('Client already running') if iface: # Call some methods of the remote interface iface.show() sys.exit(0) else: second = True # Do not complete the program then last window is closed dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) session_bus = dbus.SessionBus() app.setQuitOnLastWindowClosed(False) ex = ToolTabWidget(app, args = args, host = host, port = port) # Export the service name = dbus.service.BusName(DBUS_NAME, session_bus) # Export the object widget = DBusWidget(session_bus, DBUS_MAINAPP, ex) sys.exit(app.exec_()) if __name__=='__main__': main()