incoming messages

This commit is contained in:
ingvar1995 2016-07-11 22:47:39 +03:00
parent f13274882a
commit 4f42098d56
4 changed files with 48 additions and 15 deletions

View File

@ -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)

View File

@ -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))

View File

@ -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))

View File

@ -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