diff --git a/toxygen/messenger/messenger.py b/toxygen/messenger/messenger.py index 0768f2b..99d7f2f 100644 --- a/toxygen/messenger/messenger.py +++ b/toxygen/messenger/messenger.py @@ -170,14 +170,20 @@ class Messenger(tox_save.ToxSave): if not text or group_number < 0 or peer_id < 0: return + if text.startswith('/me '): + message_type = TOX_MESSAGE_TYPE['ACTION'] + text = text[4:] + else: + message_type = TOX_MESSAGE_TYPE['NORMAL'] + group_peer_contact = self._contacts_manager.get_or_create_group_peer_contact(group_number, peer_id) group = self._get_group_by_number(group_number) messages = self._split_message(text.encode('utf-8')) t = util.get_unix_time() for message in messages: - self._tox.group_send_private_message(group_number, peer_id, message) + self._tox.group_send_private_message(group_number, peer_id, message_type, message) message_author = MessageAuthor(group.get_self_name(), MESSAGE_AUTHOR['GC_PEER']) - message = OutgoingTextMessage(text, message_author, t, MESSAGE_TYPE['TEXT']) + message = OutgoingTextMessage(text, message_author, t, message_type) group_peer_contact.append_message(message) if not self._contacts_manager.is_contact_active(group_peer_contact): return @@ -185,7 +191,7 @@ class Messenger(tox_save.ToxSave): self._screen.messageEdit.clear() self._screen.messages.scrollToBottom() - def new_group_private_message(self, group_number, message, peer_id): + def new_group_private_message(self, group_number, message_type, message, peer_id): """ Current user gets new message :param message: text of message @@ -194,7 +200,7 @@ class Messenger(tox_save.ToxSave): group = self._get_group_by_number(group_number) peer = group.get_peer_by_id(peer_id) text_message = TextMessage(message, MessageAuthor(peer.name, MESSAGE_AUTHOR['GC_PEER']), - t, MESSAGE_TYPE['TEXT']) + t, message_type) group_peer_contact = self._contacts_manager.get_or_create_group_peer_contact(group_number, peer_id) self._add_message(text_message, group_peer_contact) diff --git a/toxygen/middleware/callbacks.py b/toxygen/middleware/callbacks.py index 323d5d1..9e6059c 100644 --- a/toxygen/middleware/callbacks.py +++ b/toxygen/middleware/callbacks.py @@ -379,9 +379,9 @@ def group_private_message(window, tray, tox, messenger, settings, profile): """ New private message in group chat """ - def wrapped(tox_link, group_number, peer_id, message, length, user_data): + def wrapped(tox_link, group_number, peer_id, message_type, message, length, user_data): message = str(message[:length], 'utf-8') - invoke_in_main_thread(messenger.new_group_private_message, group_number, message, peer_id) + invoke_in_main_thread(messenger.new_group_private_message, group_number, message_type, message, peer_id) if not window.isActiveWindow(): bl = settings['notify_all_gc'] or profile.name in message name = tox.group_peer_get_name(group_number, peer_id) diff --git a/toxygen/ui/peer_screen.py b/toxygen/ui/peer_screen.py index 4145fe1..6850125 100644 --- a/toxygen/ui/peer_screen.py +++ b/toxygen/ui/peer_screen.py @@ -24,13 +24,31 @@ class PeerScreen(CenteredWidget): self.peerNameLabel.setText(self._peer.name) self.ignorePeerCheckBox.setChecked(self._peer.is_muted) self.sendPrivateMessagePushButton.clicked.connect(self._send_private_message) + self.copyPublicKeyPushButton.clicked.connect(self._copy_public_key) + self.roleNameLabel.setText(self._get_role_name()) self._retranslate_ui() def _retranslate_ui(self): self.setWindowTitle(util_ui.tr('Peer details')) self.ignorePeerCheckBox.setText(util_ui.tr('Ignore peer')) + self.roleLabel.setText(util_ui.tr('Role:')) + self.copyPublicKeyPushButton.setText(util_ui.tr('Copy public key')) self.sendPrivateMessagePushButton.setText(util_ui.tr('Send private message')) + def _get_role_name(self): + roles = { + 0: util_ui.tr('Administrator'), + 1: util_ui.tr('Moderator'), + 2: util_ui.tr('User'), + 3: util_ui.tr('Observer') + } + + return roles[self._peer.role] + def _send_private_message(self): self._contacts_manager.add_group_peer(self._group, self._peer) self.close() + + def _copy_public_key(self): + clipboard = QtWidgets.QApplication.clipboard() + clipboard.setText(self._peer.public_key) diff --git a/toxygen/ui/views/peer_screen.ui b/toxygen/ui/views/peer_screen.ui index cf221c0..f719ec6 100644 --- a/toxygen/ui/views/peer_screen.ui +++ b/toxygen/ui/views/peer_screen.ui @@ -7,19 +7,19 @@ 0 0 600 - 400 + 500 600 - 400 + 500 600 - 400 + 500 @@ -31,7 +31,7 @@ 110 10 431 - 41 + 40 @@ -42,7 +42,7 @@ 50 - 120 + 140 500 50 @@ -55,7 +55,7 @@ 50 - 70 + 100 500 23 @@ -68,8 +68,8 @@ 50 - 200 - 521 + 300 + 500 161 @@ -77,6 +77,45 @@ GroupBox + + + + 50 + 60 + 67 + 20 + + + + TextLabel + + + + + + 140 + 60 + 401 + 20 + + + + TextLabel + + + + + + 50 + 210 + 500 + 50 + + + + PushButton + + diff --git a/toxygen/wrapper/tox.py b/toxygen/wrapper/tox.py index 7912103..64b55ea 100644 --- a/toxygen/wrapper/tox.py +++ b/toxygen/wrapper/tox.py @@ -2060,7 +2060,7 @@ class Tox: len(data), byref(error)) return result - def group_send_private_message(self, group_number, peer_id, message): + def group_send_private_message(self, group_number, peer_id, message_type, message): """ Send a text chat message to the specified peer in the specified group. @@ -2079,7 +2079,8 @@ class Tox: """ error = c_int() - result = Tox.libtoxcore.tox_group_send_private_message(self._tox_pointer, group_number, peer_id, message, + result = Tox.libtoxcore.tox_group_send_private_message(self._tox_pointer, group_number, peer_id, + message_type, message, len(message), byref(error)) return result @@ -2135,7 +2136,7 @@ class Tox: This event is triggered when the client receives a private message. """ - c_callback = CFUNCTYPE(None, c_void_p, c_uint32, c_uint32, c_char_p, c_size_t, c_void_p) + c_callback = CFUNCTYPE(None, c_void_p, c_uint32, c_uint32, c_uint8, c_char_p, c_size_t, c_void_p) self.group_private_message_cb = c_callback(callback) Tox.libtoxcore.tox_callback_group_private_message(self._tox_pointer, self.group_private_message_cb, user_data)