def get_narrow_url(user_profile: UserProfile, message: Message, display_recipient: Optional[DisplayRecipientT]=None, stream: Optional[Stream]=None) -> str: """The display_recipient and stream arguments are optional. If not provided, we'll compute them from the message; they exist as a performance optimization for cases where the caller needs those data too. """ if message.recipient.type == Recipient.PERSONAL: assert stream is None assert display_recipient is None return personal_narrow_url( realm=user_profile.realm, sender=message.sender, ) elif message.recipient.type == Recipient.HUDDLE: assert stream is None if display_recipient is None: display_recipient = get_display_recipient(message.recipient) assert display_recipient is not None assert not isinstance(display_recipient, str) other_user_ids = [r['id'] for r in display_recipient if r['id'] != user_profile.id] return huddle_narrow_url( realm=user_profile.realm, other_user_ids=other_user_ids, ) else: assert display_recipient is None if stream is None: stream = Stream.objects.only('id', 'name').get(id=message.recipient.type_id) return topic_narrow_url(user_profile.realm, stream, message.topic_name())
def message_header(user_profile: UserProfile, message: Message) -> Dict[str, Any]: if message.recipient.type == Recipient.PERSONAL: header = "You and %s" % (message.sender.full_name,) html_link = personal_narrow_url( realm=user_profile.realm, sender=message.sender, ) header_html = "<a style='color: #ffffff;' href='%s'>%s</a>" % (html_link, header) elif message.recipient.type == Recipient.HUDDLE: disp_recipient = get_display_recipient(message.recipient) assert not isinstance(disp_recipient, str) other_recipients = [r['full_name'] for r in disp_recipient if r['id'] != user_profile.id] header = "You and %s" % (", ".join(other_recipients),) other_user_ids = [r['id'] for r in disp_recipient if r['id'] != user_profile.id] html_link = huddle_narrow_url( realm=user_profile.realm, other_user_ids=other_user_ids, ) header_html = "<a style='color: #ffffff;' href='%s'>%s</a>" % (html_link, header) else: stream = Stream.objects.only('id', 'name').get(id=message.recipient.type_id) header = "%s > %s" % (stream.name, message.topic_name()) stream_link = stream_narrow_url(user_profile.realm, stream) topic_link = topic_narrow_url(user_profile.realm, stream, message.topic_name()) header_html = "<a href='%s'>%s</a> > <a href='%s'>%s</a>" % ( stream_link, stream.name, topic_link, message.topic_name()) return {"plain": header, "html": header_html, "stream_message": message.recipient.type_name() == "stream"}