mirror of
https://github.com/zulip/zulip.git
synced 2025-11-17 04:12:02 +00:00
url_encoding: Add support for with message links.
We abstract away "near" vs "with" from the function names and allow callers to specify whether they want a conversation_link, ie, use the "with" operator. The default choice is "near".
This commit is contained in:
@@ -79,7 +79,7 @@ from zerver.lib.topic import (
|
||||
)
|
||||
from zerver.lib.topic_link_util import get_stream_topic_link_syntax
|
||||
from zerver.lib.types import DirectMessageEditRequest, EditHistoryEvent, StreamMessageEditRequest
|
||||
from zerver.lib.url_encoding import near_stream_message_url
|
||||
from zerver.lib.url_encoding import stream_message_url
|
||||
from zerver.lib.user_message import bulk_insert_all_ums
|
||||
from zerver.lib.user_topics import get_users_with_user_topic_visibility_policy
|
||||
from zerver.lib.widget import is_widget_message
|
||||
@@ -337,7 +337,7 @@ def send_message_moved_breadcrumbs(
|
||||
"display_recipient": new_stream.name,
|
||||
"topic": new_topic_name,
|
||||
}
|
||||
moved_message_link = near_stream_message_url(target_message.realm, message)
|
||||
moved_message_link = stream_message_url(target_message.realm, message)
|
||||
|
||||
if new_thread_notification_string is not None:
|
||||
with override_language(new_stream.realm.default_language):
|
||||
|
||||
@@ -18,7 +18,7 @@ from zerver.lib.message_cache import MessageDict
|
||||
from zerver.lib.outgoing_http import OutgoingSession
|
||||
from zerver.lib.queue import retry_event
|
||||
from zerver.lib.topic import get_topic_from_message_info
|
||||
from zerver.lib.url_encoding import near_message_url
|
||||
from zerver.lib.url_encoding import message_link_url
|
||||
from zerver.lib.users import check_can_access_user, check_user_can_access_all_users
|
||||
from zerver.models import Realm, Service, UserProfile
|
||||
from zerver.models.bots import GENERIC_INTERFACE, SLACK_INTERFACE
|
||||
@@ -245,7 +245,7 @@ def get_message_url(event: dict[str, Any]) -> str:
|
||||
message = event["message"]
|
||||
realm = bot_user.realm
|
||||
|
||||
return near_message_url(
|
||||
return message_link_url(
|
||||
realm=realm,
|
||||
message=message,
|
||||
)
|
||||
|
||||
@@ -6,7 +6,7 @@ from zerver.lib.mention import silent_mention_syntax_for_user
|
||||
from zerver.lib.message import truncate_content
|
||||
from zerver.lib.message_cache import MessageDict
|
||||
from zerver.lib.topic_link_util import get_message_link_syntax
|
||||
from zerver.lib.url_encoding import near_message_url
|
||||
from zerver.lib.url_encoding import message_link_url
|
||||
from zerver.models import Message, Stream, UserProfile
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ def get_reminder_formatted_content(message: Message, current_user: UserProfile)
|
||||
content += "\n\n"
|
||||
content += _("{user_silent_mention} [said]({conversation_url}):").format(
|
||||
user_silent_mention=silent_mention_syntax_for_user(message.sender),
|
||||
conversation_url=near_message_url(current_user.realm, MessageDict.wide_dict(message)),
|
||||
conversation_url=message_link_url(current_user.realm, MessageDict.wide_dict(message)),
|
||||
)
|
||||
content += "\n"
|
||||
fence = get_unused_fence(content)
|
||||
|
||||
@@ -48,22 +48,32 @@ def topic_narrow_url(*, realm: Realm, stream: Stream, topic_name: str) -> str:
|
||||
return f"{base_url}{encode_stream(stream.id, stream.name)}/topic/{hash_util_encode(topic_name)}"
|
||||
|
||||
|
||||
def near_message_url(realm: Realm, message: dict[str, Any]) -> str:
|
||||
def message_link_url(
|
||||
realm: Realm, message: dict[str, Any], *, conversation_link: bool = False
|
||||
) -> str:
|
||||
if message["type"] == "stream":
|
||||
url = near_stream_message_url(
|
||||
url = stream_message_url(
|
||||
realm=realm,
|
||||
message=message,
|
||||
conversation_link=conversation_link,
|
||||
)
|
||||
return url
|
||||
|
||||
url = near_pm_message_url(
|
||||
url = pm_message_url(
|
||||
realm=realm,
|
||||
message=message,
|
||||
conversation_link=conversation_link,
|
||||
)
|
||||
return url
|
||||
|
||||
|
||||
def near_stream_message_url(realm: Realm, message: dict[str, Any]) -> str:
|
||||
def stream_message_url(
|
||||
realm: Realm, message: dict[str, Any], *, conversation_link: bool = False
|
||||
) -> str:
|
||||
if conversation_link:
|
||||
with_or_near = "with"
|
||||
else:
|
||||
with_or_near = "near"
|
||||
message_id = str(message["id"])
|
||||
stream_id = message["stream_id"]
|
||||
stream_name = message["display_recipient"]
|
||||
@@ -78,14 +88,21 @@ def near_stream_message_url(realm: Realm, message: dict[str, Any]) -> str:
|
||||
encoded_stream,
|
||||
"topic",
|
||||
encoded_topic_name,
|
||||
"near",
|
||||
with_or_near,
|
||||
message_id,
|
||||
]
|
||||
full_url = "/".join(parts)
|
||||
return full_url
|
||||
|
||||
|
||||
def near_pm_message_url(realm: Realm, message: dict[str, Any]) -> str:
|
||||
def pm_message_url(
|
||||
realm: Realm, message: dict[str, Any], *, conversation_link: bool = False
|
||||
) -> str:
|
||||
if conversation_link:
|
||||
with_or_near = "with"
|
||||
else:
|
||||
with_or_near = "near"
|
||||
|
||||
message_id = str(message["id"])
|
||||
str_user_ids = [str(recipient["id"]) for recipient in message["display_recipient"]]
|
||||
|
||||
@@ -98,7 +115,7 @@ def near_pm_message_url(realm: Realm, message: dict[str, Any]) -> str:
|
||||
"#narrow",
|
||||
"dm",
|
||||
pm_str,
|
||||
"near",
|
||||
with_or_near,
|
||||
message_id,
|
||||
]
|
||||
full_url = "/".join(parts)
|
||||
|
||||
@@ -51,7 +51,7 @@ from zerver.lib.test_helpers import HostRequestMock, get_user_messages, queries_
|
||||
from zerver.lib.topic import MATCH_TOPIC, RESOLVED_TOPIC_PREFIX, TOPIC_NAME, messages_for_topic
|
||||
from zerver.lib.types import UserDisplayRecipient
|
||||
from zerver.lib.upload import create_attachment
|
||||
from zerver.lib.url_encoding import near_message_url
|
||||
from zerver.lib.url_encoding import message_link_url
|
||||
from zerver.lib.user_groups import get_recursive_membership_groups
|
||||
from zerver.lib.user_topics import set_topic_visibility_policy
|
||||
from zerver.models import (
|
||||
@@ -5637,8 +5637,8 @@ class MessageVisibilityTest(ZulipTestCase):
|
||||
m.assert_called_once_with(realm)
|
||||
|
||||
|
||||
class PersonalMessagesNearTest(ZulipTestCase):
|
||||
def test_near_pm_message_url(self) -> None:
|
||||
class PersonalMessagesTest(ZulipTestCase):
|
||||
def test_pm_message_url(self) -> None:
|
||||
realm = get_realm("zulip")
|
||||
message = dict(
|
||||
type="personal",
|
||||
@@ -5648,8 +5648,15 @@ class PersonalMessagesNearTest(ZulipTestCase):
|
||||
dict(id=80),
|
||||
],
|
||||
)
|
||||
url = near_message_url(
|
||||
url = message_link_url(
|
||||
realm=realm,
|
||||
message=message,
|
||||
)
|
||||
self.assertEqual(url, "http://zulip.testserver/#narrow/dm/77,80-pm/near/555")
|
||||
|
||||
url = message_link_url(
|
||||
realm=realm,
|
||||
message=message,
|
||||
conversation_link=True,
|
||||
)
|
||||
self.assertEqual(url, "http://zulip.testserver/#narrow/dm/77,80-pm/with/555")
|
||||
|
||||
@@ -20,7 +20,7 @@ from zerver.lib.test_classes import ZulipTestCase, get_topic_messages
|
||||
from zerver.lib.test_helpers import queries_captured
|
||||
from zerver.lib.topic import RESOLVED_TOPIC_PREFIX
|
||||
from zerver.lib.types import UserGroupMembersData
|
||||
from zerver.lib.url_encoding import near_stream_message_url
|
||||
from zerver.lib.url_encoding import stream_message_url
|
||||
from zerver.lib.user_groups import UserGroupMembershipDetails
|
||||
from zerver.models import Message, NamedUserGroup, Stream, UserMessage, UserProfile
|
||||
from zerver.models.groups import SystemGroups
|
||||
@@ -717,7 +717,7 @@ class MessageMoveStreamTest(ZulipTestCase):
|
||||
"display_recipient": new_stream.name,
|
||||
"topic": "test",
|
||||
}
|
||||
moved_message_link = near_stream_message_url(messages[1].realm, message)
|
||||
moved_message_link = stream_message_url(messages[1].realm, message)
|
||||
self.assert_length(messages, 2)
|
||||
self.assertEqual(messages[0].id, msg_id_later)
|
||||
self.assertEqual(
|
||||
@@ -762,7 +762,7 @@ class MessageMoveStreamTest(ZulipTestCase):
|
||||
"display_recipient": new_stream.name,
|
||||
"topic": "test",
|
||||
}
|
||||
moved_message_link = near_stream_message_url(messages[2].realm, message)
|
||||
moved_message_link = stream_message_url(messages[2].realm, message)
|
||||
self.assert_length(messages, 3)
|
||||
self.assertEqual(messages[0].id, msg_id_later)
|
||||
self.assertEqual(
|
||||
@@ -1597,7 +1597,7 @@ class MessageMoveStreamTest(ZulipTestCase):
|
||||
"display_recipient": stream.name,
|
||||
"topic": "edited",
|
||||
}
|
||||
moved_message_link = near_stream_message_url(messages[1].realm, message)
|
||||
moved_message_link = stream_message_url(messages[1].realm, message)
|
||||
self.assert_length(messages, 2)
|
||||
self.assertEqual(messages[0].content, "First")
|
||||
self.assertEqual(
|
||||
@@ -1644,7 +1644,7 @@ class MessageMoveStreamTest(ZulipTestCase):
|
||||
"display_recipient": stream.name,
|
||||
"topic": "edited",
|
||||
}
|
||||
moved_message_link = near_stream_message_url(messages[0].realm, message)
|
||||
moved_message_link = stream_message_url(messages[0].realm, message)
|
||||
self.assert_length(messages, 2)
|
||||
self.assertEqual(messages[0].content, "First")
|
||||
self.assertEqual(
|
||||
|
||||
@@ -17,7 +17,7 @@ from zerver.lib.outgoing_webhook import (
|
||||
)
|
||||
from zerver.lib.test_classes import ZulipTestCase
|
||||
from zerver.lib.topic import TOPIC_NAME
|
||||
from zerver.lib.url_encoding import near_message_url
|
||||
from zerver.lib.url_encoding import message_link_url
|
||||
from zerver.lib.users import add_service
|
||||
from zerver.models import Recipient, Service, UserProfile
|
||||
from zerver.models.realms import get_realm
|
||||
@@ -518,7 +518,7 @@ class TestOutgoingWebhookMessaging(ZulipTestCase):
|
||||
"id": message_id,
|
||||
"type": "",
|
||||
}
|
||||
message_url = near_message_url(realm, message)
|
||||
message_url = message_link_url(realm, message)
|
||||
|
||||
last_message = self.get_last_message()
|
||||
self.assertEqual(
|
||||
@@ -602,7 +602,7 @@ class TestOutgoingWebhookMessaging(ZulipTestCase):
|
||||
"id": sent_message_id,
|
||||
"type": "stream",
|
||||
}
|
||||
message_url = near_message_url(realm, message_dict)
|
||||
message_url = message_link_url(realm, message_dict)
|
||||
self.assertEqual(
|
||||
last_message.content,
|
||||
f"[A message]({message_url}) to your bot @_**{bot.full_name}** triggered an outgoing webhook.\n"
|
||||
|
||||
Reference in New Issue
Block a user