def projectListCallback( self, projectList ): QHelper.log( '::CONNECT:QProjectList:projectList', projectList ) projectList = [( k, v.get('title','') ) for k,v in projectList.items()] for project, title in projectList: if not project in self.radioList.keys(): self.radioList[project] = QProject( project, title, self ) self.layout.addWidget( self.radioList[project] )
def getPresence( cls, session, presence ): #print '::ROSTER:STATUS_FOR', presence.getFrom(), str( presence.getFrom() ).split('/')[0] #print '::ROSTER:STATUS', cls._roster.getStatus( presence.getFrom().getStripped() ) contact = str( presence.getFrom() ).split('@')[0] status = presence.getType() or presence.getShow() or 'online' message = presence.getStatus() or '' presence_status = { 'getFrom':presence.getFrom(), 'getFrom.getStripped':presence.getFrom().getStripped(), 'getType':presence.getType(), 'getShow':presence.getShow(), 'getStatus':presence.getStatus() } QHelper.log( '::TRANSPORT:PRESENCE', contact, status, message, LEVEL=QHelper.LOG_LEVEL_DEBUG ) """ print '::PRESENCE:STATUS', { 'getFrom':presence.getFrom(), 'getFrom.getStripped':presence.getFrom().getStripped(), 'getType':presence.getType(), 'getShow':presence.getShow(), 'getStatus':presence.getStatus() } """ cls._contactList[contact] = ( status, message ) if cls.listener and hasattr( cls.listener, 'presenceCallbackHook' ): cls.listener.presenceCallbackHook( contact, status, message ) cls.presenceCallback( contact, status, message )
def __init__( self, parent ): super( self.__class__, self ).__init__( parent ) self.textCursor = QtGui.QTextCursor( self.document() ) self.setReadOnly( 1 ) self.project = None self.connect( QHelper.master(), QtCore.SIGNAL( 'pickedProject' ), self.pickedProjectCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'projectData' ), self.projectDataCallback )
def __init__( self, parent ): super( self.__class__, self ).__init__( '', parent ) self.parent = parent self.contact = None self.__sendMessageOnReturn = True self.connect( QHelper.master(), QtCore.SIGNAL( 'pickedContact' ), self.pickedContactCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'sendMessage' ), self.sendMessageCallback )
def __init__( self ): QForm.__init__( self ) self.setWindowTitle( 'Report' + ' - ' + DBConf.get( 'appname' ) ) self.setWindowTitle( 'Preferences' + ' - ' + DBConf.get( 'appname' ) ) self.resize( 450, 250 ) self.move( 350, 350 ) grid = QtGui.QGridLayout() n = 0 for key, value in DBConf.list(): grid.addWidget( QtGui.QLabel( key ), n, 0 ) grid.addWidget( self.lineEditField( key, str( value ) ), n, 1 ) n += 1 self.submit = QtGui.QPushButton( 'Save', self ) self.submit.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'preferencesSubmit' ) ) ) self.cancel = QtGui.QPushButton( 'Cancel', self ) self.cancel.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'preferencesCancel' ) ) ) hbox = QtGui.QHBoxLayout() hbox.addStretch( 1 ) hbox.addWidget( self.submit ) hbox.addWidget( self.cancel ) buttons = QtGui.QWidget() buttons.setLayout( hbox ) grid.addWidget( buttons, n, 0, 1 ,2 ) self.setLayout( grid ) self.connect( QHelper.master(), QtCore.SIGNAL( 'preferencesSubmit' ), self.preferencesSubmitCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'preferencesCancel' ), self.preferencesCancelCallback )
def pickedContactCallback( self, contact ): QHelper.log( '::CONNECT:QContact:pickedContact', contact ) if self.name == contact: self.selected = True self.update() else: pass
def __init__( self ): QForm.__init__( self ) self.setWindowTitle( 'Report' + ' - ' + DBConf.get( 'appname' ) ) self.resize( 200, 200 ) self.move( 350, 350 ) grid = QtGui.QGridLayout() self.status = QtGui.QLabel( 'Report' ) grid.addWidget( self.status, 0, 0, 2, 2 ) grid.addWidget( QtGui.QLabel( 'Project' ), 2, 0 ) grid.addWidget( self.comboBoxField( 'project' ), 2, 1 ) grid.addWidget( self.lineEditField( 'h', '', 'hours' ), 3, 0 ) grid.addWidget( self.lineEditField( 'm', '', 'minutes' ), 3, 1 ) grid.addWidget( QtGui.QLabel( 'Summary' ), 4, 0, 1, 2 ) grid.addWidget( self.textEditField( 'summary' ), 5, 0, 1, 2 ) self.submit = QtGui.QPushButton( 'Send', self ) self.submit.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'reportSubmit' ) ) ) grid.addWidget( self.submit, 6, 0 ) self.cancel = QtGui.QPushButton( 'Cancel', self ) self.cancel.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'reportCancel' ) ) ) grid.addWidget( self.cancel, 6, 1 ) self.setLayout( grid ) self.connect( QHelper.master(), QtCore.SIGNAL( 'projectList' ), self.projectListCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'reportSubmit' ), self.reportSubmitCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'reportCancel' ), self.reportCancelCallback )
def addContactCallback( self, contact, group ): QHelper.log( '::CONNECT:QContact:addContact', contact ) if self.name == contact: self.group = group group_id = DB.execute( "SELECT `id` FROM `contact_group` WHERE `name`=?", self.group )[0]['id'] if not DB.execute( "INSERT OR IGNORE INTO `contact` ( `name`, `contact_group_id` ) VALUES ( ?, ? )", self.name, group_id ): DB.execute( "UPDATE `contact` SET `contact_group_id`=? WHERE `name`=? )", group_id, self.name ) self.update()
def getMessageCallbackHook( self, sender, message ): QHelper.log( '::ASYNC:CALLBACK:getMessage' ) if self.messageCallbackHandler is not None: self.messageCallbackHandler( sender, message ) self.messageCallbackHandler = None return elif message: self.master.emit( QtCore.SIGNAL( 'receiveMessage' ), sender, message )
def _process( cls, arg=1 ): while 1: try: cls._get_client().Process( arg ) except ValueError as e: QHelper.log( '::TRANSPORT:PROCESS:VALUEERROR', e, LEVEL=QHelper.LOG_LEVEL_ERROR ) cls.serverError( e ) """
def keyPressEvent( self, event ): if event.key() == QtCore.Qt.Key_Shift: self.__sendMessageOnReturn = False elif event.key() == QtCore.Qt.Key_Return: if self.__sendMessageOnReturn: if len( self.toPlainText() ): QHelper.master().emit( QtCore.SIGNAL( 'sendMessage' ), self.contact, self.toPlainText() ) return QtGui.QTextEdit.keyPressEvent( self, event )
def sendMessageCallback( self, contact, message ): QHelper.log( '::CONNECT:QChatDialog:sendMessage', contact, message ) if not self.messagesTime.get( contact, None ): self.messagesTime[contact] = [] if not self.messagesList.get( contact, None ): self.messagesList[contact] = {} DBHistory.set( DBConf.get( 'username' ), contact, message ) ts = time.time() self.messagesTime[contact].append( str( ts ) ) self.messagesList[contact][str( ts )] = { 'ts':str( ts ), 'sender':DBConf.get( 'username' ), 'recipient':contact, 'message':message } self.message( str( ts ), DBConf.get( 'username' ), message )
def pickedContactCallback( self, contact ): QHelper.log( '::CONNECT:QChatDialog:pickedContact', contact ) if not self.messagesTime.get( contact, None ): self.messagesTime[contact] = [] if not self.messagesList.get( contact, None ): self.messagesList[contact] = {} self.parent.setWindowTitle( contact + ' - ' + DBConf.get( 'appname' ) ) self.contact = contact self.clear() for message in self.messages( contact ): self.message( message['ts'], message['sender'], message['message'] )
def __init__( self, parent ): super( self.__class__, self ).__init__( parent ) self.radioList = {} self.projectListItems = {} self.layout = QtGui.QVBoxLayout() self.setLayout( self.layout ) self.connect( QHelper.master(), QtCore.SIGNAL( 'projectList' ), self.projectListCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'pickedProject' ), self.pickedProjectCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'projectData' ), self.projectDataCallback )
def __init__( self, name, title, parent ): super( self.__class__, self ).__init__( name + '['+title+']' ) self.parent = parent self.name = name self.title = title self.connect( QHelper.master(), QtCore.SIGNAL( 'projectList' ), self.projectListCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'pickedProject' ), self.pickedProjectCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'projectData' ), self.projectDataCallback ) self.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'pickedProject' ), self.name ) )
def __init__( self, parent ): super( self.__class__, self ).__init__( parent ) self.messagesTime = {} self.messagesList = {} self.parent = parent self.contact = None self.textCursor = QtGui.QTextCursor( self.document() ) self.setReadOnly( 1 ) self.connect( QHelper.master(), QtCore.SIGNAL( 'pickedContact' ), self.pickedContactCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'sendMessage' ), self.sendMessageCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'receiveMessage' ), self.receiveMessageCallback )
def set( cls, sender, recipient, message, ts=None ): cls.setPath( sender, recipient ) if not ts: ts = time.time() cls.handle()[str( ts )] = { 'ts':str( int( ts ) ), 'sender':QHelper.str( sender ), 'recipient':QHelper.str( recipient ), 'message':QHelper.str( message ) } cls.handle().sync()
def __init__( self, name, status, statusMessage, parent ): #super( self.__class__, self ).__init__( '' ) QtGui.QWidget.__init__( self, parent ) self.setObjectName( 'QContact' ) self.name = name self.parent = parent self.messagesNew = {} self.status = status self.statusMessage = statusMessage self.selected = False self.group = None self.setStyleSheet( 'QWidget#QContact { background:#ddd; color:#333; }' ) self.buttons = QtGui.QWidget( self ) self.nameLabel = QtGui.QLabel( self.name ) self.statusLabel = QtGui.QLabel( self.status ) self.statusLabel.setStyleSheet( 'QLabel { color:#999; }' ) self.messagesLabel = QtGui.QLabel( '' ) self.messagesLabel.setStyleSheet( 'QLabel { color:#000; font-weight:bold; }' ) self.buttons.chatButton = QtGui.QPushButton( 'chat' ) self.buttons.chatButton.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'pickedContact' ), self.name ) ) self.buttons.addButton = QtGui.QPushButton( 'Add to List' ) self.buttons.addButton.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'addContact' ), self.name, 'general' ) ) self.buttons.removeButton = QtGui.QPushButton( 'Remove from List' ) self.buttons.removeButton.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'removeContact' ), self.name ) ) layout = QtGui.QHBoxLayout( self.buttons ) layout.addStretch( 1 ) layout.addWidget( self.buttons.chatButton ) layout.addWidget( self.buttons.addButton ) layout.addWidget( self.buttons.removeButton ) grid = QtGui.QGridLayout( self ) grid.addWidget( self.nameLabel, 0, 0 ) grid.addWidget( self.messagesLabel, 0, 1 ) grid.addWidget( self.statusLabel, 2, 0, 1, 2 ) grid.addWidget( self.buttons, 3, 1 ) self.buttons.hide() self.connect( QHelper.master(), QtCore.SIGNAL( 'sendMessage' ), self.sendMessageCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'receiveMessage' ), self.receiveMessageCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'contactStatus' ), self.contactStatusCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'clickedContact' ), self.clickedContactCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'pickedContact' ), self.pickedContactCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'addContact' ), self.addContactCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'removeContact' ), self.removeContactCallback ) #self.clicked.connect( lambda: QHelper.master().emit( QtCore.SIGNAL( 'pickedContact' ), self.name ) ) self.update()
def clickedContactCallback( self, contact ): QHelper.log( '::CONNECT:QContact:clickedContact', contact ) ts = time.time() if hasattr( self, 'lastClick' ): lastClick = ts - self.lastClick else: lastClick = 999 if lastClick >= 0.5: self.lastClick = ts if ( self.name == contact ) and not self.buttons.isVisible(): self.setStyleSheet( 'QWidget#QContact { background:#fff; color:#333; }' ) self.buttons.show() else: self.buttons.hide() self.setStyleSheet( 'QWidget#QContact { background:#ddd; color:#333; }' )
def __init__( self, parent ): super( self.__class__, self ).__init__( parent ) self.radioList = {} self.contactListItems = {} self.layout = QtGui.QVBoxLayout() self.layout.addStretch( 1 ) #self.layout.setAlignment( QtCore.Qt.AlignTop ) self.setLayout( self.layout ) self.contact = None #self.master.View.contactItem( contact, status ) self.connect( QHelper.master(), QtCore.SIGNAL( 'receiveMessage' ), self.receiveMessageCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'contactStatus' ), self.contactStatusCallback ) self.connect( QHelper.master(), QtCore.SIGNAL( 'pickedContact' ), self.pickedContactCallback ) for row in DB.execute( "SELECT `contact`.*, `contact_group`.`name` FROM `contact`, `contact_group` WHERE `contact`.`contact_group_id`=`contact_group`.`id`" ): self.radioList[row['name']] = QContact( row['name'], 'offline', '', self ) self.layout.addWidget( self.radioList[row['name']] )
def reportSubmitCallback( self ): QHelper.log( '::CONNECT:QReportView:reportSubmit' ) data = self.values() reportData = 'report %sh %sm on %s %s' % ( QHelper.str( data.get( 'h', '0' ) ), QHelper.str( data.get( 'm', '0' ) ), QHelper.str( data.get( 'project', '' ) ), QHelper.str( data.get( 'summary', '' ) ), ) print '::REPORT:MESSAGE', reportData QHelper.master().emit( QtCore.SIGNAL( 'transportSignal' ), 'sendMessage', DBConf.get( 'bot' ), reportData ) self.hide()
def projectDataCallback( self, projectData ): print '::QProjctData', projectData.items() QHelper.log( '::CONNECT:QProjectData:projectData', projectData ) self.clear() data = '<table width="100%" cellspacing="4" cellpadding="0">' n=0 for k, v in projectData.items(): print k,v if QHelper.str( k ) in ['_id', '_rev']: continue n+=1 data += '<tr>' data += '<th style="background:'+(n%2 and '#f6f6f6' or '#fcfcfc')+';">' + str( k ) + '</th>' data += '<td style="">' + self.plain( v ) + '</td>' data += '</tr>' data += '</table>' text = '<span style="font-weight:bold; color:#66f;">[%s]</span><br />%s<br />' % ( self.project, data ) self.write( text ) print '::WROTE'
def _connect( cls, username=None, passwd=None, conf={} ): if username: cls.conf['username'] = username if passwd: cls.conf['passwd'] = passwd if conf.get( 'server', None ): cls.conf['server'] = conf['server'] if conf.get( 'port', None ): cls.conf['port'] = conf['port'] if conf.get( 'nickname', None ): cls.conf['nickname'] = conf['nickname'] QHelper.log( '::TRANSPORT-CONNECT', cls.conf ) """Set up a connection to xmpp server. Authenticate""" #cls._client = xmpp.Client( cls.conf['server'] ) cls._client = xmpp.Client( cls.conf['server'], debug=[] ) cls._client.connect( server=( cls.conf['server'], cls.conf['port'] ) ) cls._status = cls._client.auth( cls.conf['username'], cls.conf['passwd'], cls.conf['nickname'] ) and True if cls._status is None: cls._client = None if cls.listener and hasattr( cls.listener, 'connectErrorCallbackHook' ): cls.listener.connectErrorCallbackHook() cls.connectErrorCallback() return None cls._client.RegisterHandler( 'message', cls.getMessage ) cls._client.RegisterHandler( 'presence', cls.getPresence ) # http://stackoverflow.com/questions/2381597/xmpp-chat-accessing-contacts-status-messages-with-xmpppys-roster cls._client.sendInitPresence( requestRoster=1 ) cls._set_process() cls._get_roster() if cls.listener and hasattr( cls.listener, 'connectSuccessCallbackHook' ): cls.listener.connectSuccessCallbackHook() cls.connectSuccessCallback() return True
def _get_roster( cls ): return if cls._client and not cls._roster: QHelper.log( '::TRANSPORT:GET_ROSTER' ) try: cls._roster = cls._get_client().getRoster() QHelper.log( '::TRANSPORT:GET_ROSTER:OK', cls._roster ) except Exception as e: QHelper.log( '::TRANSPORT:GET_ROSTER:EXCEPTION', e ) return cls._roster
def execute( cls, queryString, *arg ): QHelper.log( '::DB:execute', queryString, arg ) cls.cur().execute( queryString, arg ) if queryString.strip().lower().startswith( 'select' ): # SELECT: return result result = cls.cur().fetchall() QHelper.log( '::DB:select:fetchall', result ) return result else: # write-query: commit after execution cls.conn().commit() rowcount = cls.cur().rowcount lastrowid = cls.cur().lastrowid if queryString.strip().lower().startswith( 'insert' ): # INSERT: return last inserted id QHelper.log( '::DB:insert:rowcount', rowcount ) QHelper.log( '::DB:insert:lastrowid', lastrowid ) return lastrowid else: QHelper.log( '::DB:update:rowcount', rowcount ) QHelper.log( '::DB:update:lastrowid', lastrowid ) return rowcount
def sendMessageCallbackHook( self, recipient, message ): QHelper.log( '::ASYNC:CALLBACK:sendMessage' )
def serverErrorCallbackHook( self, e ): QHelper.log( '::ASYNC:CALLBACK:serverError' ) self.master.emit( QtCore.SIGNAL( 'serverError' ), str( e ) )
def connectErrorCallbackHook( self ): QHelper.log( '::ASYNC:CALLBACK:connectError' ) self.master.emit( QtCore.SIGNAL( 'loginError' ), 'Bad login' )
def connectSuccessCallbackHook( self ): QHelper.log( '::ASYNC:CALLBACK:connectSuccess' ) self.master.emit( QtCore.SIGNAL( 'loginSuccess' ) )
def dbJob( self, callback, *arg ): QHelper.log( '::ASYNC:CONNECT:DB:' + callback, *arg ) assert callback != 'queue' DBRemote.queue( callback, *arg )