From d94e89a68770cebdc8fc6ea5ab94377d232b44e5 Mon Sep 17 00:00:00 2001 From: Zeeshan Date: Sat, 10 Apr 2021 21:37:51 +0530 Subject: [PATCH] buttons: Add support for opening external links in browser. This commit uses the open_in_browser() function from previous commits and allows opening external links in the browser on pressing ENTER on the MessageLinkButton. After this commit ZT, should be able to narrow to a message if the link is an internal link, and open in browser if the link is an external link. This commit does not handles internal media links in any way currently. Tests amended. --- tests/ui_tools/test_buttons.py | 11 +++++++---- zulipterminal/ui_tools/buttons.py | 2 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/ui_tools/test_buttons.py b/tests/ui_tools/test_buttons.py index 9f1419a0901..6068021ab02 100644 --- a/tests/ui_tools/test_buttons.py +++ b/tests/ui_tools/test_buttons.py @@ -369,11 +369,12 @@ def test_update_widget(self, mocker, caption, expected_cursor_position, @pytest.mark.parametrize([ 'link', 'handle_narrow_link_called', + 'open_in_browser_called', ], [ - (SERVER_URL + '/#narrow/stream/1-Stream-1', True), - (SERVER_URL + '/user_uploads/some/path/image.png', False), - ('https://foo.com', False), + (SERVER_URL + '/#narrow/stream/1-Stream-1', True, False), + (SERVER_URL + '/user_uploads/some/path/image.png', False, False), + ('https://foo.com', False, True), ], ids=[ 'internal_narrow_link', @@ -381,7 +382,8 @@ def test_update_widget(self, mocker, caption, expected_cursor_position, 'external_link', ] ) - def test_handle_link(self, mocker, link, handle_narrow_link_called): + def test_handle_link(self, mocker, link, handle_narrow_link_called, + open_in_browser_called): self.controller.model.server_url = SERVER_URL self.handle_narrow_link = ( mocker.patch(BUTTONS + '.MessageLinkButton.handle_narrow_link') @@ -391,6 +393,7 @@ def test_handle_link(self, mocker, link, handle_narrow_link_called): mocked_button.handle_link() assert self.handle_narrow_link.called == handle_narrow_link_called + assert self.controller.open_in_browser.called == open_in_browser_called @pytest.mark.parametrize('stream_data, expected_response', [ ('206-zulip-terminal', dict(stream_id=206, stream_name=None)), diff --git a/zulipterminal/ui_tools/buttons.py b/zulipterminal/ui_tools/buttons.py index 96ae20e5e2f..4dde1991278 100644 --- a/zulipterminal/ui_tools/buttons.py +++ b/zulipterminal/ui_tools/buttons.py @@ -339,6 +339,8 @@ def handle_link(self, *_: Any) -> None: server_url = self.model.server_url if self.link.startswith(urljoin(server_url, '/#narrow/')): self.handle_narrow_link() + elif not self.link.startswith(urljoin(server_url, '/user_uploads/')): + self.controller.open_in_browser(self.link) @staticmethod def _decode_stream_data(encoded_stream_data: str) -> DecodedStream: