mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 00:18:12 +00:00
Generate message.pm_with_url more directly from ids.
We have added people.pm_with_url(message), which computes a PM url from a private message using user ids rather than emails. We call this in add_message_metadata(), since the slugs will be valid even if emails change, so we don't need to compute them on the fly during message rendering.
This commit is contained in:
@@ -225,6 +225,50 @@ people.init();
|
||||
assert.equal(slug, '401,402-group');
|
||||
}());
|
||||
|
||||
initialize();
|
||||
|
||||
(function test_pm_with_url() {
|
||||
var charles = {
|
||||
email: 'charles@example.com',
|
||||
user_id: 451,
|
||||
full_name: 'Charles Dickens',
|
||||
};
|
||||
var maria = {
|
||||
email: 'athens@example.com',
|
||||
user_id: 452,
|
||||
full_name: 'Maria Athens',
|
||||
};
|
||||
people.add(charles);
|
||||
people.add(maria);
|
||||
|
||||
var message = {
|
||||
type: 'private',
|
||||
display_recipient: [
|
||||
{id: maria.user_id},
|
||||
{id: me.user_id},
|
||||
{user_id: charles.user_id},
|
||||
],
|
||||
};
|
||||
assert.equal(people.pm_with_url(message), '#narrow/pm-with/451,452-group');
|
||||
|
||||
message = {
|
||||
type: 'private',
|
||||
display_recipient: [
|
||||
{id: maria.user_id},
|
||||
{user_id: me.user_id},
|
||||
],
|
||||
};
|
||||
assert.equal(people.pm_with_url(message), '#narrow/pm-with/452-athens');
|
||||
|
||||
message = {
|
||||
type: 'private',
|
||||
display_recipient: [
|
||||
{user_id: me.user_id},
|
||||
],
|
||||
};
|
||||
assert.equal(people.pm_with_url(message), '#narrow/pm-with/30-me');
|
||||
}());
|
||||
|
||||
(function test_slugs() {
|
||||
var person = {
|
||||
email: 'deBBie71@example.com',
|
||||
|
||||
@@ -208,7 +208,7 @@ MessageListView.prototype = {
|
||||
message_container.msg.subject);
|
||||
} else {
|
||||
message_container.pm_with_url =
|
||||
narrow.pm_with_uri(message_container.msg.reply_to);
|
||||
message_container.msg.pm_with_url;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -153,6 +153,7 @@ function add_message_metadata(message) {
|
||||
message.reply_to = util.normalize_recipients(
|
||||
exports.get_pm_emails(message));
|
||||
message.display_reply_to = exports.get_pm_full_names(message);
|
||||
message.pm_with_url = people.pm_with_url(message);
|
||||
|
||||
exports.process_message_for_recent_private_messages(message);
|
||||
break;
|
||||
|
||||
@@ -175,6 +175,61 @@ exports.get_recipients = function (user_ids_string) {
|
||||
return names.join(', ');
|
||||
};
|
||||
|
||||
exports.pm_with_user_ids = function (message) {
|
||||
if (message.type !== 'private') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.display_recipient.length === 0) {
|
||||
blueslip.error('Empty recipient list in message');
|
||||
return;
|
||||
}
|
||||
|
||||
var user_ids = _.map(message.display_recipient, function (elem) {
|
||||
return elem.user_id || elem.id;
|
||||
});
|
||||
|
||||
var other_user_ids = _.filter(user_ids, function (user_id) {
|
||||
return !people.is_my_user_id(user_id);
|
||||
});
|
||||
|
||||
if (other_user_ids.length >= 1) {
|
||||
user_ids = other_user_ids;
|
||||
} else {
|
||||
user_ids = [my_user_id];
|
||||
}
|
||||
|
||||
user_ids.sort();
|
||||
|
||||
return user_ids;
|
||||
};
|
||||
|
||||
exports.pm_with_url = function (message) {
|
||||
var user_ids = exports.pm_with_user_ids(message);
|
||||
|
||||
if (!user_ids) {
|
||||
return;
|
||||
}
|
||||
|
||||
var suffix;
|
||||
|
||||
if (user_ids.length > 1) {
|
||||
suffix = 'group';
|
||||
} else {
|
||||
var person = exports.get_person_from_user_id(user_ids[0]);
|
||||
if (person && person.email) {
|
||||
suffix = person.email.split('@')[0].toLowerCase();
|
||||
} else {
|
||||
blueslip.error('Unknown people in message');
|
||||
suffix = 'unk';
|
||||
}
|
||||
}
|
||||
|
||||
var slug = user_ids.join(',') + '-' + suffix;
|
||||
var uri = "#narrow/pm-with/" + slug;
|
||||
return uri;
|
||||
};
|
||||
|
||||
exports.emails_to_slug = function (emails_string) {
|
||||
var slug = exports.emails_strings_to_user_ids_string(emails_string);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user