Skip to content

Commit 4378646

Browse files
committed
model: Update index['unread_msgs'] when marking msg read/unread.
Add message to data structure when new message recieved, and remove when marking it as read.
1 parent 70b83ee commit 4378646

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

tests/model/test_model.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1248,7 +1248,9 @@ def test_update_read_status(self, mocker, model, event_op,
12481248
event_message_ids, indexed_ids,
12491249
flags_before, flags_after):
12501250
model.index = dict(messages={msg_id: {'flags': flags_before}
1251-
for msg_id in indexed_ids})
1251+
for msg_id in indexed_ids},
1252+
unread_msgs={msg_id: {}
1253+
for msg_id in event_message_ids})
12521254
event = {
12531255
'messages': event_message_ids,
12541256
'type': 'update_message_flags',
@@ -1279,6 +1281,7 @@ def test_update_read_status(self, mocker, model, event_op,
12791281
if event_op == 'add':
12801282
set_count.assert_called_once_with(list(changed_ids),
12811283
self.controller, -1)
1284+
assert len(model.index['unread_msgs']) == 0
12821285
elif event_op == 'remove':
12831286
set_count.assert_not_called()
12841287

zulipterminal/helper.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ def set_count(id_list: List[int], controller: Any, new_count: int) -> None:
9797
for id in id_list:
9898
msg = messages[id]
9999

100+
100101
if msg['type'] == 'stream':
101102
key = (messages[id]['stream_id'], msg['subject'])
102103
unreads = unread_counts['unread_topics']
@@ -361,6 +362,7 @@ def index_messages(messages: List[Message],
361362
topics_in_stream[msg['subject']] = set()
362363
topics_in_stream[msg['subject']].add(msg['id'])
363364

365+
364366
return index
365367

366368

zulipterminal/model.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,10 @@ def append_message(self, event: Event) -> None:
731731
recipient_stream = response['display_recipient']
732732
narrow_stream = self.narrow[0][1]
733733
append_to_stream = recipient_stream == narrow_stream
734+
unread_data = {'type': response['type'],
735+
'sender_id': response['sender_id'],
736+
'subject': response['subject'],
737+
'display_recipient': recipient_stream}
734738

735739
if append_to_stream and (len(self.narrow) == 1 or
736740
(len(self.narrow) == 2 and
@@ -745,7 +749,10 @@ def append_message(self, event: Event) -> None:
745749
[user['id'] for user in response['display_recipient']])
746750
if narrow_recipients == message_recipients:
747751
self.msg_list.log.append(msg_w)
752+
unread_data = {'type': response['type'],
753+
'display_recipient': message_recipients}
748754
if 'read' not in response['flags']:
755+
self.index['unread_msgs'].update({response['id']: unread_data})
749756
set_count([response['id']], self.controller, 1)
750757
self.controller.update_screen()
751758

@@ -840,8 +847,10 @@ def update_message_flag_status(self, event: Event) -> None:
840847
self.update_rendered_view(message_id)
841848

842849
if event['operation'] == 'add' and flag_to_change == 'read':
843-
set_count(list(message_ids_to_mark & indexed_message_ids),
850+
set_count(list(message_ids_to_mark),
844851
self.controller, -1)
852+
for key in message_ids_to_mark:
853+
self.index['unread_msgs'].pop(key)
845854

846855
def update_rendered_view(self, msg_id: int) -> None:
847856
# Update new content in the rendered view

0 commit comments

Comments
 (0)