From d02ee92508e1ea39ee794c57fc286bd1d3121fc5 Mon Sep 17 00:00:00 2001 From: ingvar1995 Date: Sat, 4 Jun 2016 22:41:03 +0300 Subject: [PATCH] offline messaging part 2 - read receipts --- src/callbacks.py | 7 ++++++- src/profile.py | 20 ++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/callbacks.py b/src/callbacks.py index f267dad..6fde331 100644 --- a/src/callbacks.py +++ b/src/callbacks.py @@ -110,7 +110,7 @@ def friend_status_message(tox, friend_num, status_message, size, user_data): friend = profile.get_friend_by_number(friend_num) invoke_in_main_thread(friend.set_status_message, status_message) print 'User #{} has new status: {}'.format(friend_num, status_message) - profile.send_messages(friend_num) + invoke_in_main_thread(profile.send_messages, friend_num) if profile.get_active_number() == friend_num: invoke_in_main_thread(profile.set_active) @@ -148,6 +148,10 @@ def friend_request(tox, public_key, message, message_size, user_data): def friend_typing(tox, friend_number, typing, user_data): invoke_in_main_thread(Profile.get_instance().friend_typing, friend_number, typing) + +def friend_read_receipt(tox, friend_number, message_id, user_data): + Profile.get_instance().get_friend_by_number(friend_number).dec_receipt() + # ----------------------------------------------------------------------------------------------------------------- # Callbacks - file transfers # ----------------------------------------------------------------------------------------------------------------- @@ -303,6 +307,7 @@ def init_callbacks(tox, window, tray): tox.callback_friend_status_message(friend_status_message, 0) tox.callback_friend_request(friend_request, 0) tox.callback_friend_typing(friend_typing, 0) + tox.callback_friend_read_receipt(friend_read_receipt, 0) tox.callback_file_recv(tox_file_recv(window, tray), 0) tox.callback_file_recv_chunk(file_recv_chunk, 0) diff --git a/src/profile.py b/src/profile.py index 5b31439..a809cac 100644 --- a/src/profile.py +++ b/src/profile.py @@ -144,6 +144,7 @@ class Friend(Contact): self._corr = [] self._unsaved_messages = 0 self._history_loaded = False + self._receipts = 0 def __del__(self): self.set_visibility(False) @@ -155,6 +156,19 @@ class Friend(Contact): # History support # ----------------------------------------------------------------------------------------------------------------- + def get_receipts(self): + return self._receipts + + receipts = property(get_receipts) + + def inc_receipts(self): + self._receipts += 1 + + def dec_receipt(self): + if self._receipts: + self._receipts -= 1 + self.mark_as_sent(False) + def load_corr(self, first_time=True): """ :param first_time: friend became active, load first part of messages @@ -608,13 +622,11 @@ class Profile(Contact, Singleton): friend = self._friends[self._active_friend] if friend.status is not None: self.split_and_send(friend.number, message_type, text.encode('utf-8')) - owner = MESSAGE_OWNER['ME'] - else: - owner = MESSAGE_OWNER['NOT_SENT'] self.create_message_item(text, curr_time(), self._name, message_type) self._screen.messageEdit.clear() self._messages.scrollToBottom() - friend.append_message(TextMessage(text, owner, time.time(), message_type)) + friend.append_message(TextMessage(text, MESSAGE_OWNER['NOT_SENT'], time.time(), message_type)) + friend.inc_receipts() # ----------------------------------------------------------------------------------------------------------------- # History support