private messages - types

This commit is contained in:
ingvar1995 2018-07-22 19:39:42 +03:00
parent eba7e0c0dc
commit 5e1f060fac
5 changed files with 81 additions and 17 deletions

View File

@ -170,14 +170,20 @@ class Messenger(tox_save.ToxSave):
if not text or group_number < 0 or peer_id < 0: if not text or group_number < 0 or peer_id < 0:
return 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_peer_contact = self._contacts_manager.get_or_create_group_peer_contact(group_number, peer_id)
group = self._get_group_by_number(group_number) group = self._get_group_by_number(group_number)
messages = self._split_message(text.encode('utf-8')) messages = self._split_message(text.encode('utf-8'))
t = util.get_unix_time() t = util.get_unix_time()
for message in messages: 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_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) group_peer_contact.append_message(message)
if not self._contacts_manager.is_contact_active(group_peer_contact): if not self._contacts_manager.is_contact_active(group_peer_contact):
return return
@ -185,7 +191,7 @@ class Messenger(tox_save.ToxSave):
self._screen.messageEdit.clear() self._screen.messageEdit.clear()
self._screen.messages.scrollToBottom() 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 Current user gets new message
:param message: text of message :param message: text of message
@ -194,7 +200,7 @@ class Messenger(tox_save.ToxSave):
group = self._get_group_by_number(group_number) group = self._get_group_by_number(group_number)
peer = group.get_peer_by_id(peer_id) peer = group.get_peer_by_id(peer_id)
text_message = TextMessage(message, MessageAuthor(peer.name, MESSAGE_AUTHOR['GC_PEER']), 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) group_peer_contact = self._contacts_manager.get_or_create_group_peer_contact(group_number, peer_id)
self._add_message(text_message, group_peer_contact) self._add_message(text_message, group_peer_contact)

View File

@ -379,9 +379,9 @@ def group_private_message(window, tray, tox, messenger, settings, profile):
""" """
New private message in group chat 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') 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(): if not window.isActiveWindow():
bl = settings['notify_all_gc'] or profile.name in message bl = settings['notify_all_gc'] or profile.name in message
name = tox.group_peer_get_name(group_number, peer_id) name = tox.group_peer_get_name(group_number, peer_id)

View File

@ -24,13 +24,31 @@ class PeerScreen(CenteredWidget):
self.peerNameLabel.setText(self._peer.name) self.peerNameLabel.setText(self._peer.name)
self.ignorePeerCheckBox.setChecked(self._peer.is_muted) self.ignorePeerCheckBox.setChecked(self._peer.is_muted)
self.sendPrivateMessagePushButton.clicked.connect(self._send_private_message) 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() self._retranslate_ui()
def _retranslate_ui(self): def _retranslate_ui(self):
self.setWindowTitle(util_ui.tr('Peer details')) self.setWindowTitle(util_ui.tr('Peer details'))
self.ignorePeerCheckBox.setText(util_ui.tr('Ignore peer')) 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')) 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): def _send_private_message(self):
self._contacts_manager.add_group_peer(self._group, self._peer) self._contacts_manager.add_group_peer(self._group, self._peer)
self.close() self.close()
def _copy_public_key(self):
clipboard = QtWidgets.QApplication.clipboard()
clipboard.setText(self._peer.public_key)

View File

@ -7,19 +7,19 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>600</width> <width>600</width>
<height>400</height> <height>500</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>600</width> <width>600</width>
<height>400</height> <height>500</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>600</width> <width>600</width>
<height>400</height> <height>500</height>
</size> </size>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -31,7 +31,7 @@
<x>110</x> <x>110</x>
<y>10</y> <y>10</y>
<width>431</width> <width>431</width>
<height>41</height> <height>40</height>
</rect> </rect>
</property> </property>
<property name="text"> <property name="text">
@ -42,7 +42,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>50</x> <x>50</x>
<y>120</y> <y>140</y>
<width>500</width> <width>500</width>
<height>50</height> <height>50</height>
</rect> </rect>
@ -55,7 +55,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>50</x> <x>50</x>
<y>70</y> <y>100</y>
<width>500</width> <width>500</width>
<height>23</height> <height>23</height>
</rect> </rect>
@ -68,8 +68,8 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>50</x> <x>50</x>
<y>200</y> <y>300</y>
<width>521</width> <width>500</width>
<height>161</height> <height>161</height>
</rect> </rect>
</property> </property>
@ -77,6 +77,45 @@
<string>GroupBox</string> <string>GroupBox</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="roleLabel">
<property name="geometry">
<rect>
<x>50</x>
<y>60</y>
<width>67</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
<widget class="QLabel" name="roleNameLabel">
<property name="geometry">
<rect>
<x>140</x>
<y>60</y>
<width>401</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
<widget class="QPushButton" name="copyPublicKeyPushButton">
<property name="geometry">
<rect>
<x>50</x>
<y>210</y>
<width>500</width>
<height>50</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>

View File

@ -2060,7 +2060,7 @@ class Tox:
len(data), byref(error)) len(data), byref(error))
return result 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. Send a text chat message to the specified peer in the specified group.
@ -2079,7 +2079,8 @@ class Tox:
""" """
error = c_int() 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)) len(message), byref(error))
return result return result
@ -2135,7 +2136,7 @@ class Tox:
This event is triggered when the client receives a private message. 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) 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) Tox.libtoxcore.tox_callback_group_private_message(self._tox_pointer, self.group_private_message_cb, user_data)