Skip to content

Commit 39a7fce

Browse files
zee-bitpunchaganpreetmishra
authored andcommitted
keys/views: Enable viewing of a message in the web-browser with new key.
This commit connects this functionality with a new VIEW_IN_BROWSER key ('v'). Any message can now be viewed in the browser by pressing the key from the MessageInfo view. Regenerated hotkeys.md. Test added. Co-authored-by: Puneeth Chaganti <[email protected]> Co-authored-by: Preet Mishra <[email protected]>
1 parent 1e9799d commit 39a7fce

File tree

4 files changed

+32
-3
lines changed

4 files changed

+32
-3
lines changed

docs/hotkeys.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
|Add/remove star status of the current message|<kbd>ctrl</kbd> + <kbd>s</kbd> / <kbd>*</kbd>|
5656
|Show/hide message information|<kbd>i</kbd>|
5757
|Show/hide edit history (from message information)|<kbd>e</kbd>|
58+
|View current message in browser (from message information)|<kbd>v</kbd>|
5859

5960
## Stream list actions
6061
|Command|Key Combination|

tests/ui_tools/test_popups.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -580,8 +580,18 @@ def test_keypress_exit_popup(self, key, widget_size):
580580
self.msg_info_view.keypress(size, key)
581581
assert self.controller.exit_popup.called
582582

583+
@pytest.mark.parametrize("key", keys_for_command("VIEW_IN_BROWSER"))
584+
def test_keypress_view_in_browser(self, mocker, widget_size, message_fixture, key):
585+
size = widget_size(self.msg_info_view)
586+
self.msg_info_view.server_url = "https://chat.zulip.org/"
587+
mocker.patch(VIEWS + ".near_message_url")
588+
589+
self.msg_info_view.keypress(size, key)
590+
591+
assert self.controller.open_in_browser.called
592+
583593
def test_height_noreactions(self):
584-
expected_height = 3
594+
expected_height = 4
585595
assert self.msg_info_view.height == expected_height
586596

587597
# FIXME This is the same parametrize as MessageBox:test_reactions_view
@@ -644,8 +654,9 @@ def test_height_reactions(self, message_fixture, to_vary_in_each_message):
644654
OrderedDict(),
645655
list(),
646656
)
647-
# 9 = 3 labels + 1 blank line + 1 'Reactions' (category) + 4 reactions.
648-
expected_height = 9
657+
# 10 = 4 labels + 1 blank line + 1 'Reactions' (category)
658+
# + 4 reactions (excluding 'Message Links').
659+
expected_height = 10
649660
assert self.msg_info_view.height == expected_height
650661

651662
@pytest.mark.parametrize(

zulipterminal/config/keys.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,13 @@ class KeyBinding(TypedDict, total=False):
236236
'excluded_from_random_tips': True,
237237
'key_category': 'msg_actions',
238238
}),
239+
('VIEW_IN_BROWSER', {
240+
'keys': ['v'],
241+
'help_text':
242+
'View current message in browser (from message information)',
243+
'excluded_from_random_tips': True,
244+
'key_category': 'msg_actions',
245+
}),
239246
('STREAM_DESC', {
240247
'keys': ['i'],
241248
'help_text': 'Show/hide stream information & modify settings',

zulipterminal/ui_tools/views.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
)
2626
from zulipterminal.config.ui_mappings import EDIT_MODE_CAPTIONS
2727
from zulipterminal.helper import Message, asynch, match_stream, match_user
28+
from zulipterminal.server_url import near_message_url
2829
from zulipterminal.ui_tools.boxes import MessageBox, PanelSearchBox
2930
from zulipterminal.ui_tools.buttons import (
3031
HomeButton,
@@ -1297,9 +1298,11 @@ def __init__(
12971298
self.topic_links = topic_links
12981299
self.message_links = message_links
12991300
self.time_mentions = time_mentions
1301+
self.server_url = controller.model.server_url
13001302
date_and_time = controller.model.formatted_local_time(
13011303
msg["timestamp"], show_seconds=True, show_year=True
13021304
)
1305+
view_in_browser_keys = ", ".join(map(repr, keys_for_command("VIEW_IN_BROWSER")))
13031306

13041307
msg_info = [
13051308
(
@@ -1308,6 +1311,10 @@ def __init__(
13081311
("Date & Time", date_and_time),
13091312
("Sender", msg["sender_full_name"]),
13101313
("Sender's Email ID", msg["sender_email"]),
1314+
(
1315+
"View message in browser",
1316+
f"Press {view_in_browser_keys} to view message in browser",
1317+
),
13111318
],
13121319
),
13131320
]
@@ -1410,6 +1417,9 @@ def keypress(self, size: urwid_Size, key: str) -> str:
14101417
message_links=self.message_links,
14111418
time_mentions=self.time_mentions,
14121419
)
1420+
elif is_command_key("VIEW_IN_BROWSER", key):
1421+
url = near_message_url(self.server_url[:-1], self.msg)
1422+
self.controller.open_in_browser(url)
14131423
return super().keypress(size, key)
14141424

14151425

0 commit comments

Comments
 (0)