def run(self): if self.ipc is None: return self.running = True # Wait a bit so we ensure IPC thread is running... time.sleep(2) while self.running and self.ipc.running: try: msg = self.ipc.getMessage() if msg is None: break msgId, data = msg logger.debug('Got Message on User Space: {}:{}'.format( msgId, data)) if msgId == ipc.MSG_MESSAGE: module, message, data = data.split('\0') self.message.emit((module, message, data)) elif msgId == ipc.MSG_LOGOFF: self.logoff.emit() elif msgId == ipc.MSG_SCRIPT: self.script.emit(QtCore.QString.fromUtf8(data)) except Exception as e: try: logger.error('Got error on IPC thread {}'.format( utils.exceptionToMessage(e))) except: logger.error( 'Got error on IPC thread (an unicode error??)') if self.ipc.running is False and self.running is True: logger.warn('Lost connection with Service, closing program') self.exit.emit()
def deinitialize(self): for mod in reversed( self.modules): # Deinitialize reversed of initialization try: logger.debug('Deactivating module {}'.format(mod.name)) mod.deactivate() except Exception as e: logger.exception() logger.error("Deactivation of {} failed: {}".format( mod.name, utils.exceptionToMessage(e)))
def initialize(self): # Load modules and activate them # Also, sends "login" event to service self.modules = loadModules(self, client=True) logger.debug('Modules: {}'.format(list(v.name for v in self.modules))) # Send init to all modules validMods = [] for mod in self.modules: try: logger.debug('Activating module {}'.format(mod.name)) mod.activate() validMods.append(mod) except Exception as e: logger.exception() logger.error("Activation of {} failed: {}".format( mod.name, utils.exceptionToMessage(e))) self.modules[:] = validMods # copy instead of assignment # If this is running, it's because he have logged in, inform service of this fact self.ipc.sendLogin(operations.getCurrentUser(), operations.getSessionLanguage())
app = QtGui.QApplication(sys.argv) if not QtGui.QSystemTrayIcon.isSystemTrayAvailable(): # QtGui.QMessageBox.critical(None, "Systray", "I couldn't detect any system tray on this system.") sys.exit(1) # This is important so our app won't close on messages windows (alerts, etc...) QtGui.QApplication.setQuitOnLastWindowClosed(False) try: trayIcon = OGASystemTray(app) except Exception as e: logger.exception() logger.error( 'OGA Service is not running, or it can\'t contact with OGA Server. User Tools stopped: {}' .format(utils.exceptionToMessage(e))) sys.exit(1) try: trayIcon.initialize() # Initialize modules, etc.. except Exception as e: logger.exception() logger.error('Exception initializing OpenGnsys User Agent {}'.format( utils.exceptionToMessage(e))) trayIcon.quit() sys.exit(1) app.aboutToQuit.connect(trayIcon.cleanup) trayIcon.show() # Catch kill and logout user :)