messenger refactoring
This commit is contained in:
parent
25de4fa2ef
commit
5f56d630ce
@ -24,7 +24,6 @@ class ContactsManager(ToxSave):
|
||||
self._active_contact_changed = Event()
|
||||
self._sorting = settings['sorting']
|
||||
self._filter_string = ''
|
||||
self._friend_item_height = 40 if settings['compact_mode'] else 70
|
||||
screen.contacts_filter.setCurrentIndex(int(self._sorting))
|
||||
self._history = history
|
||||
self._load_contacts()
|
||||
@ -149,6 +148,9 @@ class ContactsManager(ToxSave):
|
||||
def is_active_a_group(self):
|
||||
return type(self.get_curr_contact()) is GroupChat
|
||||
|
||||
def is_active_a_group_chat_peer(self):
|
||||
return type(self.get_curr_contact()) is GroupPeerContact
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# Filtration
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
@ -198,11 +200,9 @@ class ContactsManager(ToxSave):
|
||||
friend.visibility = (friend.status is not None or sorting not in (1, 4)) and filtered_by_name
|
||||
# show friend even if it's hidden when there any unread messages/actions
|
||||
friend.visibility = friend.visibility or friend.messages or friend.actions
|
||||
# TODO: calculate height
|
||||
if friend.visibility:
|
||||
self._screen.friends_list.item(index).setSizeHint(QtCore.QSize(250, self._friend_item_height))
|
||||
else:
|
||||
self._screen.friends_list.item(index).setSizeHint(QtCore.QSize(250, 0))
|
||||
item = self._screen.friends_list.item(index)
|
||||
item_widget = self._screen.friends_list.itemWidget(item)
|
||||
item.setSizeHint(QtCore.QSize(250, item_widget.height() if friend.visibility else 0))
|
||||
# save soring results
|
||||
self._sorting, self._filter_string = sorting, filter_str
|
||||
self._settings['sorting'] = self._sorting
|
||||
@ -436,7 +436,7 @@ class ContactsManager(ToxSave):
|
||||
util.log('Accept friend request failed! ' + str(ex))
|
||||
|
||||
def can_send_typing_notification(self):
|
||||
return self._settings['typing_notifications'] and self._active_contact + 1
|
||||
return self._settings['typing_notifications'] and not self.is_active_a_group_chat_peer()
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
# Contacts numbers update
|
||||
|
@ -44,14 +44,28 @@ class Messenger(tox_save.ToxSave):
|
||||
|
||||
def send_message(self):
|
||||
text = self._screen.messageEdit.toPlainText()
|
||||
if self._contacts_manager.is_active_a_friend():
|
||||
self.send_message_to_friend(text)
|
||||
elif self._contacts_manager.is_active_a_group():
|
||||
self.send_message_to_group(text)
|
||||
else:
|
||||
self.send_message_to_group_peer(text)
|
||||
|
||||
def send_message_to_friend(self, text, friend_number=None):
|
||||
plugin_command_prefix = '/plugin '
|
||||
if text.startswith(plugin_command_prefix):
|
||||
self._plugin_loader.command(text[len(plugin_command_prefix):])
|
||||
self._screen.messageEdit.clear()
|
||||
return
|
||||
|
||||
action_message_prefix = '/me '
|
||||
if text.startswith(action_message_prefix):
|
||||
message_type = TOX_MESSAGE_TYPE['ACTION']
|
||||
text = text[len(action_message_prefix):]
|
||||
else:
|
||||
message_type = TOX_MESSAGE_TYPE['NORMAL']
|
||||
|
||||
if self._contacts_manager.is_active_a_friend():
|
||||
self.send_message_to_friend(text, message_type)
|
||||
elif self._contacts_manager.is_active_a_group():
|
||||
self.send_message_to_group(text, message_type)
|
||||
elif self._contacts_manager.is_active_a_group_chat_peer():
|
||||
self.send_message_to_group_peer(text, message_type)
|
||||
|
||||
def send_message_to_friend(self, text, message_type, friend_number=None):
|
||||
"""
|
||||
Send message
|
||||
:param text: message text
|
||||
@ -60,19 +74,9 @@ class Messenger(tox_save.ToxSave):
|
||||
if friend_number is None:
|
||||
friend_number = self._contacts_manager.get_active_number()
|
||||
|
||||
if text.startswith('/plugin '):
|
||||
self._plugin_loader.command(text[8:])
|
||||
self._screen.messageEdit.clear()
|
||||
return
|
||||
|
||||
if not text or friend_number < 0:
|
||||
return
|
||||
|
||||
if text.startswith('/me '):
|
||||
message_type = TOX_MESSAGE_TYPE['ACTION']
|
||||
text = text[4:]
|
||||
else:
|
||||
message_type = TOX_MESSAGE_TYPE['NORMAL']
|
||||
friend = self._get_friend_by_number(friend_number)
|
||||
messages = self._split_message(text.encode('utf-8'))
|
||||
t = util.get_unix_time()
|
||||
@ -108,23 +112,13 @@ class Messenger(tox_save.ToxSave):
|
||||
# Messaging - groups
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
def send_message_to_group(self, text, group_number=None):
|
||||
def send_message_to_group(self, text, message_type, group_number=None):
|
||||
if group_number is None:
|
||||
group_number = self._contacts_manager.get_active_number()
|
||||
|
||||
if text.startswith('/plugin '):
|
||||
self._plugin_loader.command(text[8:])
|
||||
self._screen.messageEdit.clear()
|
||||
return
|
||||
|
||||
if not text or group_number < 0:
|
||||
return
|
||||
|
||||
if text.startswith('/me '):
|
||||
message_type = TOX_MESSAGE_TYPE['ACTION']
|
||||
text = text[4:]
|
||||
else:
|
||||
message_type = TOX_MESSAGE_TYPE['NORMAL']
|
||||
group = self._get_group_by_number(group_number)
|
||||
messages = self._split_message(text.encode('utf-8'))
|
||||
t = util.get_unix_time()
|
||||
@ -155,27 +149,16 @@ class Messenger(tox_save.ToxSave):
|
||||
# Messaging - group peers
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
def send_message_to_group_peer(self, text, group_number=None, peer_id=None):
|
||||
def send_message_to_group_peer(self, text, message_type, group_number=None, peer_id=None):
|
||||
if group_number is None or peer_id is None:
|
||||
group_peer_contact = self._contacts_manager.get_curr_contact()
|
||||
peer_id = group_peer_contact.number
|
||||
group = self._get_group_by_public_key(group_peer_contact.group_pk)
|
||||
group_number = group.number
|
||||
|
||||
if text.startswith('/plugin '):
|
||||
self._plugin_loader.command(text[8:])
|
||||
self._screen.messageEdit.clear()
|
||||
return
|
||||
|
||||
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'))
|
||||
@ -220,12 +203,10 @@ class Messenger(tox_save.ToxSave):
|
||||
"""
|
||||
Send typing notification to a friend
|
||||
"""
|
||||
if self._contacts_manager.can_send_typing_notification():
|
||||
try:
|
||||
contact = self._contacts_manager.get_curr_contact()
|
||||
contact.typing_notification_handler.send(self._tox, typing)
|
||||
except:
|
||||
pass
|
||||
if not self._contacts_manager.can_send_typing_notification():
|
||||
return
|
||||
contact = self._contacts_manager.get_curr_contact()
|
||||
contact.typing_notification_handler.send(self._tox, typing)
|
||||
|
||||
def friend_typing(self, friend_number, typing):
|
||||
"""
|
||||
|
@ -589,22 +589,24 @@ class InterfaceSettings(CenteredWidget):
|
||||
|
||||
def import_sm(self):
|
||||
directory = util_ui.directory_dialog(util_ui.tr('Choose folder with smiley pack'))
|
||||
if directory:
|
||||
src = directory + '/'
|
||||
dest = curr_directory() + '/smileys/' + os.path.basename(directory) + '/'
|
||||
copy(src, dest)
|
||||
if not directory:
|
||||
return
|
||||
src = directory + '/'
|
||||
dest = get_smileys_directory() + os.path.basename(directory) + '/'
|
||||
copy(src, dest)
|
||||
|
||||
def new_font(self):
|
||||
font, ok = QtWidgets.QFontDialog.getFont(QtGui.QFont(self._settings['font'], 10), self)
|
||||
if ok:
|
||||
self._settings['font'] = font.family()
|
||||
self._settings.save()
|
||||
util_ui.question()
|
||||
msgBox = QtWidgets.QMessageBox()
|
||||
text = util_ui.tr('Restart app to apply settings')
|
||||
msgBox.setWindowTitle(util_ui.tr('Restart required'))
|
||||
msgBox.setText(text)
|
||||
msgBox.exec_()
|
||||
if not ok:
|
||||
return
|
||||
self._settings['font'] = font.family()
|
||||
self._settings.save()
|
||||
util_ui.question()
|
||||
msgBox = QtWidgets.QMessageBox()
|
||||
text = util_ui.tr('Restart app to apply settings')
|
||||
msgBox.setWindowTitle(util_ui.tr('Restart required'))
|
||||
msgBox.setText(text)
|
||||
msgBox.exec_()
|
||||
|
||||
def select_color(self):
|
||||
col = QtWidgets.QColorDialog.getColor(QtGui.QColor(self._settings['unread_color']))
|
||||
@ -616,10 +618,10 @@ class InterfaceSettings(CenteredWidget):
|
||||
|
||||
def closeEvent(self, event):
|
||||
self._settings['theme'] = str(self.themeSelect.currentText())
|
||||
app = QtWidgets.QApplication.instance()
|
||||
try:
|
||||
theme = self._settings['theme']
|
||||
app = QtWidgets.QApplication.instance()
|
||||
with open(curr_directory() + self._settings.built_in_themes()[theme]) as fl:
|
||||
with open(get_styles_directory() + self._settings.built_in_themes()[theme]) as fl:
|
||||
style = fl.read()
|
||||
app.setStyleSheet(style)
|
||||
except IsADirectoryError:
|
||||
@ -637,7 +639,7 @@ class InterfaceSettings(CenteredWidget):
|
||||
restart = True
|
||||
self._settings['smiley_pack'] = self.smiley_pack.currentText()
|
||||
self._settings['close_to_tray'] = self.close_to_tray.isChecked()
|
||||
smileys.SmileyLoader.get_instance().load_pack()
|
||||
self._smiley_loader.load_pack()
|
||||
language = self.lang_choose.currentText()
|
||||
if self._settings['language'] != language:
|
||||
self._settings['language'] = language
|
||||
|
Loading…
Reference in New Issue
Block a user