Skip to content

Commit ade3ceb

Browse files
committed
buttons/views: Show reaction_count in EmojiPicker view.
The EmojiPicker view now shows the count of reactions of a particular emoji, beside emoji_name. The emoji_list is also sorted in descending order of emoji_count, then in ascending order of emoji_names, if the count is equal. The search mechanism is also refactored to use the generate_emoji_buttons function to generate the updated list of emoji for every new search text. Tests amended.
1 parent 619dc32 commit ade3ceb

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

tests/ui_tools/test_buttons.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,8 @@ def test_init_emoji_button(self, mocker, width, emoji_name,
328328
controller.model.has_user_reacted_to_msg = mocker.Mock(
329329
return_value=False
330330
)
331+
update_widget = mocker.patch(
332+
BUTTONS + '.EmojiButton.update_widget')
331333
top_button = mocker.patch(TOPBUTTON + '.__init__')
332334
emoji_button = EmojiButton(controller, width, emoji_name,
333335
message, count)
@@ -360,7 +362,7 @@ def test_keypress_emoji_button(self, mocker, key, widget_size):
360362
update_widget = mocker.patch(
361363
BUTTONS + '.EmojiButton.update_widget')
362364
emoji_button = EmojiButton(controller, 20, 'thumbs_up',
363-
message)
365+
message, 2)
364366
size = widget_size(emoji_button)
365367

366368
emoji_button.keypress(size, key)

zulipterminal/ui_tools/buttons.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -323,8 +323,10 @@ def __init__(self, controller: Any, width: int, emoji_name: str,
323323
prefix_character='',
324324
show_function=self._toggle_message_reaction,
325325
width=width)
326-
if self.has_user_reacted_to_msg():
327-
self.update_widget((None, f' {CHECK_MARK} '), None)
326+
327+
self.update_widget(
328+
(None, self.get_update_widget_text(
329+
self.has_user_reacted_to_msg())), None)
328330

329331
def _toggle_message_reaction(self) -> None:
330332
self.controller.model.toggle_message_reaction(
@@ -334,13 +336,22 @@ def has_user_reacted_to_msg(self) -> bool:
334336
return self.controller.model.has_user_reacted_to_msg(
335337
self.emoji_name, self.message)
336338

339+
def get_update_widget_text(self, user_reacted: bool) -> str:
340+
count_text = (str(self.reaction_count)
341+
if self.reaction_count > 0 else '')
342+
reacted_check = CHECK_MARK if user_reacted else ''
343+
return f' {reacted_check} {count_text} '
344+
337345
def keypress(self, size: urwid_Size, key: str) -> Optional[str]:
346+
# Note that this is called before toggle_message_reaction.
338347
if is_command_key('ENTER', key):
339-
# Note that this is called before toggle_message_reaction.
340-
if self.has_user_reacted_to_msg():
341-
self.update_widget((None, ''), None)
342-
else:
343-
self.update_widget((None, f' {CHECK_MARK} '), None)
348+
self.reaction_count = (
349+
(self.reaction_count - 1)
350+
if self.has_user_reacted_to_msg()
351+
else (self.reaction_count + 1))
352+
self.update_widget(
353+
(None, self.get_update_widget_text(
354+
not self.has_user_reacted_to_msg())), None)
344355
return super().keypress(size, key)
345356

346357

zulipterminal/ui_tools/views.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,15 +1591,17 @@ def update_emoji_list(self, search_box: Any=None,
15911591

15921592
with self.search_lock:
15931593
if new_text and new_text != self.emoji_search.search_text:
1594-
self.emojis_display = [
1595-
searched_emoji for searched_emoji in self.emoji_buttons
1594+
emoji_names_searched = [
1595+
searched_emoji.emoji_name
1596+
for searched_emoji in self.emoji_buttons
15961597
if match_emoji(searched_emoji.emoji_name, new_text)
15971598
]
1599+
self.emojis_display = self.generate_emoji_buttons(
1600+
emoji_names_searched)
15981601
else:
15991602
self.emojis_display = self.emoji_buttons
16001603

16011604
self.empty_search = (len(self.emojis_display) == 0)
1602-
16031605
body_content = self.emojis_display
16041606
if self.empty_search:
16051607
body_content = [self.emoji_search.search_error]

0 commit comments

Comments
 (0)