incoming messages
This commit is contained in:
parent
f13274882a
commit
4f42098d56
4 changed files with 48 additions and 15 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue