def start_chat(self): self.sender = self.client.account_name self.receiver = self.client_view.lnContact.text() if self.receiver not in self.chats: if is_chat(self.receiver): self.client.outcoming_msg = JIMActionMessage.join_chat( self.client.account_name, self.receiver).as_dict if not self.client_view.lstContacts.findItems( self.receiver, Qt.MatchExactly): self.add_contact_item(self.receiver) self.chat = ChatWindow(self, self.receiver, self.client_view) self.chat.setWindowTitle( CHAT_TITLE.format(self.sender, self.receiver)) self.update_toolbar() self.chat.show() self.chats.update({self.receiver: self.chat}) if self.message_queue.get(self.receiver): while self.message_queue.get(self.receiver): self.update_chat( self.message_queue.get(self.receiver).pop(0)) self.client_view.lstContacts.findItems( self.receiver, Qt.MatchExactly)[0].setBackground(Qt.transparent)
def get_connected(self): try: if self.client.start_session(): self.incoming_message = IncomingMessageThread(self.client) self.incoming_message.get_incoming.connect( self.get_incoming, Qt.QueuedConnection) self.incoming_message.start() self.client.outcoming_msg = JIMActionMessage.presence( self.client.as_dict).as_dict self.client_view.btnConnect.setText( 'Connected as \'{}\'.'.format(self.client.account_name)) self.client_view.statusMessage.clearMessage() self.client_view.btnAdd.setEnabled(True) self.client_view.btnDel.setEnabled(True) self.client_view.btnGetContacts.setEnabled(True) self.client_view.btnChat.setEnabled(True) self.client_view.lstContacts.setEnabled(True) self.client_view.lnContact.setEnabled(True) self.get_contacts() except ConnectionError: self.client_view.statusMessage.showMessage( 'Server {}:{} is unavailable'.format( self.client.server_address, self.client.server_port))
def message_ready(self, chat): _chat = self.chats.get(chat) self.html_parser.feed(_chat.txtNewMessage.toHtml()) _message = self.html_parser.tagged_message if _message: _chat.txtNewMessage.clear() self.client.outcoming_msg = JIMActionMessage.to_user( self.sender, chat, _message).as_dict self.update_chat(_chat, '<b>You:</b> {}'.format(_message))
def del_contact(self): _name = self.client_view.lnContact.text() if _name: self.client.outcoming_msg = JIMActionMessage.del_contact( self.client.account_name, _name).as_dict self.client_view.lnContact.clear() self.del_contact_item() with ClientStore(self.store) as store: store.del_contact(_name)
def add_contact(self): _name = self.client_view.lnContact.text() if _name and not self.client_view.lstContacts.findItems( _name, Qt.MatchExactly) and not is_chat(_name): self.client.outcoming_msg = JIMActionMessage.add_contact( self.client.account_name, _name).as_dict self.client_view.lnContact.clear() self.add_contact_item(_name) elif _name and not self.client_view.lstContacts.findItems( _name, Qt.MatchExactly) and is_chat(_name): # self.client_view.statusMessage.showMessage('To join the chat, please click \'Join\'.'.format(_name), 2000) self.chat_clicked() elif _name: self.client_view.statusMessage.showMessage( '\'{}\' already in contacts.'.format(_name), 2000)
def get_disconnected(self): for chat in self.chats.values(): chat.close() self.client.outcoming_msg = JIMActionMessage.quit().as_dict self.client.end_session() self.client_view.btnConnect.setText('Disconnected. Click to connect') self.client_view.btnAdd.setEnabled(False) self.client_view.btnDel.setEnabled(False) self.client_view.lnContact.setEnabled(False) self.client_view.btnGetContacts.setEnabled(False) self.client_view.btnChat.setText('Chat') self.client_view.btnChat.setEnabled(False) self.client_view.lstContacts.clear() self.client_view.lstContacts.setEnabled(False) if self.incoming_message.isRunning(): self.incoming_message.exit()
def get_contacts(*args): _message, _address, _connection = args _response = [] with ServerStore() as store: _contacts = store.get_contacts(Client(_message.get(FIELD_USERID))) if _contacts: _response = [ JIMResponseMessage({ FIELD_RESPONSE: CODE_ACCEPTED, FIELD_QUANTITY: len(_contacts) }) ] _response.extend( JIMActionMessage.contact_list(c) for c in _contacts) return _response
def get_contacts(self): self.client_view.lstContacts.clear() with ClientStore(self.store) as store: store.clear_contacts() self.client.outcoming_msg = JIMActionMessage.get_contacts( self.client.account_name).as_dict
def end_chat(self, chat): if is_chat(chat): self.client.outcoming_msg = JIMActionMessage.leave_chat( self.client.account_name, chat).as_dict self.client_view.btnChat.setText(ACT_JOIN.capitalize()) self.chats = {k: v for k, v in self.chats.items() if k != chat}