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:
Steve Howell
2017-02-06 11:48:01 -08:00
committed by Tim Abbott
parent 8ed0e09c1f
commit 44f155e7b2
4 changed files with 101 additions and 1 deletions

View File

@@ -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',

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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);