From 4f42098d56c78535bc37dea081a29f4950534f49 Mon Sep 17 00:00:00 2001 From: ingvar1995 Date: Mon, 11 Jul 2016 22:47:39 +0300 Subject: [PATCH] incoming messages --- toxygen/callbacks.py | 22 ++++++++++++++++++++-- toxygen/menu.py | 11 ++++++++--- toxygen/profile.py | 27 ++++++++++++++++++--------- toxygen/settings.py | 3 ++- 4 files changed, 48 insertions(+), 15 deletions(-) diff --git a/toxygen/callbacks.py b/toxygen/callbacks.py index 0ce0fd6..d961ea2 100644 --- a/toxygen/callbacks.py +++ b/toxygen/callbacks.py @@ -291,8 +291,23 @@ def callback_audio(toxav, friend_number, samples, audio_samples_per_channel, aud # Callbacks - group chats # ----------------------------------------------------------------------------------------------------------------- -def group_message(tox, group_number, peer_id, message, length, user_data): - pass +def group_message(window, tray): + """ + New message from friend + """ + def wrapped(tox, group_number, peer_id, message_type, message, length, user_data): + profile = Profile.get_instance() + settings = Settings.get_instance() + message = str(message, 'utf-8') + invoke_in_main_thread(profile.new_message, group_number, message_type, message, True) + if not window.isActiveWindow(): + bl = settings['notify_all_gc'] or profile.name in message + if settings['notifications'] and profile.status != TOX_USER_STATUS['BUSY'] and not settings.locked and bl: + invoke_in_main_thread(tray_notification, '', message, tray, window) # TODO: friend name + if (settings['sound_notifications'] or bl) and profile.status != TOX_USER_STATUS['BUSY']: + sound_notification(SOUND_NOTIFICATION['MESSAGE']) + invoke_in_main_thread(tray.setIcon, QtGui.QIcon(curr_directory() + '/images/icon_new_messages.png')) + return wrapped def group_invite(tox, friend_number, invite_data, length, user_data): @@ -337,3 +352,6 @@ def init_callbacks(tox, window, tray): tox.callback_friend_lossless_packet(lossless_packet, 0) tox.callback_friend_lossy_packet(lossy_packet, 0) + tox.callback_group_message(group_message(window, tray), 0) + tox.callback_group_invite(group_invite, 0) + diff --git a/toxygen/menu.py b/toxygen/menu.py index c4b53a9..6989fae 100644 --- a/toxygen/menu.py +++ b/toxygen/menu.py @@ -560,28 +560,33 @@ class NotificationsSettings(CenteredWidget): def initUI(self): self.setObjectName("notificationsForm") - self.resize(350, 180) - self.setMinimumSize(QtCore.QSize(350, 180)) - self.setMaximumSize(QtCore.QSize(350, 180)) + self.resize(350, 200) + self.setMinimumSize(QtCore.QSize(350, 200)) + self.setMaximumSize(QtCore.QSize(350, 200)) self.enableNotifications = QtGui.QCheckBox(self) self.enableNotifications.setGeometry(QtCore.QRect(10, 20, 340, 18)) self.callsSound = QtGui.QCheckBox(self) self.callsSound.setGeometry(QtCore.QRect(10, 120, 340, 18)) self.soundNotifications = QtGui.QCheckBox(self) self.soundNotifications.setGeometry(QtCore.QRect(10, 70, 340, 18)) + self.gcNotifications = QtGui.QCheckBox(self) + self.gcNotifications.setGeometry(QtCore.QRect(10, 170, 340, 18)) font = QtGui.QFont() font.setPointSize(12) self.callsSound.setFont(font) self.soundNotifications.setFont(font) self.enableNotifications.setFont(font) + self.gcNotifications.setFont(font) s = Settings.get_instance() self.enableNotifications.setChecked(s['notifications']) self.soundNotifications.setChecked(s['sound_notifications']) self.callsSound.setChecked(s['calls_sound']) + self.gcNotifications.setChecked(s['notify_all_gc']) self.retranslateUi() QtCore.QMetaObject.connectSlotsByName(self) def retranslateUi(self): + self.gcNotifications.setText(QtGui.QApplication.translate("notificationsForm", "Enable group chat notifications", None, QtGui.QApplication.UnicodeUTF8)) self.setWindowTitle(QtGui.QApplication.translate("notificationsForm", "Notification settings", None, QtGui.QApplication.UnicodeUTF8)) self.enableNotifications.setText(QtGui.QApplication.translate("notificationsForm", "Enable notifications", None, QtGui.QApplication.UnicodeUTF8)) self.callsSound.setText(QtGui.QApplication.translate("notificationsForm", "Enable call\'s sound", None, QtGui.QApplication.UnicodeUTF8)) diff --git a/toxygen/profile.py b/toxygen/profile.py index 0403c0b..fd6ed7b 100644 --- a/toxygen/profile.py +++ b/toxygen/profile.py @@ -41,6 +41,7 @@ class Profile(basecontact.BaseContact, Singleton): self._call = calls.AV(tox.AV) # object with data about calls self._incoming_calls = set() self._load_history = True + self._gc_invites = {} # dict of gc invites. key - friend number, value - list of gc data settings = Settings.get_instance() self._show_online = settings['show_online_friends'] screen.online_contacts.setCurrentIndex(int(self._show_online)) @@ -383,25 +384,28 @@ class Profile(basecontact.BaseContact, Singleton): else: self._tox.group_send_message(number, message_type, message) - def new_message(self, friend_num, message_type, message): + def new_message(self, num, message_type, message, is_group=False): """ Current user gets new message - :param friend_num: friend_num of friend who sent message + :param num: num of friend or gc who sent message :param message_type: message type - plain text or action message (/me) :param message: text of message + :param is_group: is group chat message or not """ - if friend_num == self.get_active_number(): # add message to list + if num == self.get_active_number() and is_group != self.is_active_a_friend(): # add message to list t = time.time() self.create_message_item(message, t, MESSAGE_OWNER['FRIEND'], message_type) self._messages.scrollToBottom() self._friends_and_gc[self._active_friend_or_gc].append_message( TextMessage(message, MESSAGE_OWNER['FRIEND'], t, message_type)) else: - friend = self.get_friend_by_number(friend_num) - friend.inc_messages() - friend.append_message( - TextMessage(message, MESSAGE_OWNER['FRIEND'], time.time(), message_type)) - if not friend.visibility: + if is_group: + friend_or_gc = self.get_gc_by_number(num) + else: + friend_or_gc = self.get_friend_by_number(num) + friend_or_gc.inc_messages() + friend_or_gc.append_message(TextMessage(message, MESSAGE_OWNER['FRIEND'], time.time(), message_type)) + if not friend_or_gc.visibility: self.update_filtration() def send_message(self, text, number=None, is_gc=False): @@ -1241,7 +1245,7 @@ class Profile(basecontact.BaseContact, Singleton): self.add_gc(num) def process_group_invite(self, friend_num, data): - # TODO: add info to list and support password + # TODO: support password try: text = QtGui.QApplication.translate('MainWindow', 'User {} invites you to group', None, QtGui.QApplication.UnicodeUTF8) @@ -1253,6 +1257,11 @@ class Profile(basecontact.BaseContact, Singleton): data = self._tox.get_savedata() ProfileHelper.get_instance().save_profile(data) self.add_gc(num) + elif reply != QtGui.QMessageBox.No: + if friend_num in self._gc_invites: + self._gc_invites[friend_num].append(data) + else: + self._gc_invites[friend_num] = data except Exception as ex: # something is wrong log('Accept group chat invite failed! ' + str(ex)) diff --git a/toxygen/settings.py b/toxygen/settings.py index f4c7746..627a4ed 100644 --- a/toxygen/settings.py +++ b/toxygen/settings.py @@ -126,7 +126,8 @@ class Settings(dict, Singleton): 'unread_color': 'red', 'save_unsent_only': False, 'compact_mode': False, - 'show_welcome_screen': True + 'show_welcome_screen': True, + 'notify_all_gc': False } @staticmethod