mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 08:26:11 +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');
|
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() {
|
(function test_slugs() {
|
||||||
var person = {
|
var person = {
|
||||||
email: 'deBBie71@example.com',
|
email: 'deBBie71@example.com',
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ MessageListView.prototype = {
|
|||||||
message_container.msg.subject);
|
message_container.msg.subject);
|
||||||
} else {
|
} else {
|
||||||
message_container.pm_with_url =
|
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(
|
message.reply_to = util.normalize_recipients(
|
||||||
exports.get_pm_emails(message));
|
exports.get_pm_emails(message));
|
||||||
message.display_reply_to = exports.get_pm_full_names(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);
|
exports.process_message_for_recent_private_messages(message);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -175,6 +175,61 @@ exports.get_recipients = function (user_ids_string) {
|
|||||||
return names.join(', ');
|
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) {
|
exports.emails_to_slug = function (emails_string) {
|
||||||
var slug = exports.emails_strings_to_user_ids_string(emails_string);
|
var slug = exports.emails_strings_to_user_ids_string(emails_string);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user