markdown: Remove is_me_message UserMessage flags.

This never made sense to be a flag on the UserMessage table, since
it's not per-user state.  And in fact it doesn't need to be in a
database at all, since it's easily computed from content anyway.

Fixes #1099.
This commit is contained in:
Tim Abbott
2017-08-27 09:10:36 -07:00
parent 0f1768d0d1
commit 133f005530
8 changed files with 13 additions and 26 deletions

View File

@@ -318,31 +318,30 @@ var bugdown_data = JSON.parse(fs.readFileSync(path.join(__dirname, '../../zerver
var message = {subject: "No links here", raw_content: input}; var message = {subject: "No links here", raw_content: input};
message.flags = ['read']; message.flags = ['read'];
markdown.apply_markdown(message); markdown.apply_markdown(message);
markdown.add_message_flags(message); markdown.set_is_me_message(message);
assert.equal(message.flags.length, 2); assert.equal(message.is_me_message, true);
assert.equal(message.flags.length, 1);
assert(message.flags.indexOf('read') !== -1); assert(message.flags.indexOf('read') !== -1);
assert(message.flags.indexOf('is_me_message') !== -1);
input = "testing this @**all** @**Cordelia Lear**"; input = "testing this @**all** @**Cordelia Lear**";
message = {subject: "No links here", raw_content: input}; message = {subject: "No links here", raw_content: input};
markdown.apply_markdown(message); markdown.apply_markdown(message);
markdown.add_message_flags(message); markdown.set_is_me_message(message);
assert.equal(message.is_me_message, false);
assert.equal(message.flags.length, 1); assert.equal(message.flags.length, 1);
assert(message.flags.indexOf('mentioned') !== -1); assert(message.flags.indexOf('mentioned') !== -1);
input = "test @all"; input = "test @all";
message = {subject: "No links here", raw_content: input}; message = {subject: "No links here", raw_content: input};
markdown.apply_markdown(message); markdown.apply_markdown(message);
markdown.add_message_flags(message);
assert.equal(message.flags.length, 1); assert.equal(message.flags.length, 1);
assert(message.flags.indexOf('mentioned') !== -1); assert(message.flags.indexOf('mentioned') !== -1);
input = "test @any"; input = "test @any";
message = {subject: "No links here", raw_content: input}; message = {subject: "No links here", raw_content: input};
markdown.apply_markdown(message); markdown.apply_markdown(message);
markdown.add_message_flags(message);
assert.equal(message.flags.length, 0); assert.equal(message.flags.length, 0);
assert(message.flags.indexOf('mentioned') === -1); assert(message.flags.indexOf('mentioned') === -1);
}()); }());

View File

@@ -84,6 +84,7 @@ var message_store = require('js/message_store.js');
type: 'private', type: 'private',
display_recipient: [me, bob, cindy], display_recipient: [me, bob, cindy],
flags: ['has_alert_word'], flags: ['has_alert_word'],
is_me_message: false,
id: 2067, id: 2067,
}; };
message_store.add_message_metadata(message); message_store.add_message_metadata(message);

View File

@@ -105,7 +105,7 @@ function insert_local_message(message_request, local_id) {
message.local_id = local_id; message.local_id = local_id;
message.locally_echoed = true; message.locally_echoed = true;
message.id = message.local_id; message.id = message.local_id;
markdown.add_message_flags(message); markdown.set_is_me_message(message);
markdown.add_subject_links(message); markdown.add_subject_links(message);
waiting_for_id[message.local_id] = message; waiting_for_id[message.local_id] = message;

View File

@@ -76,14 +76,10 @@ exports.apply_markdown = function (message) {
message.content = marked(message.raw_content + '\n\n', options).trim(); message.content = marked(message.raw_content + '\n\n', options).trim();
}; };
exports.add_message_flags = function (message) { exports.set_is_me_message = function (message) {
// Note: mention flags are set in apply_markdown() message.is_me_message = (message.raw_content.indexOf('/me ') === 0 &&
message.content.indexOf('<p>') === 0 &&
if (message.raw_content.indexOf('/me ') === 0 && message.content.lastIndexOf('</p>') === message.content.length - 4);
message.content.indexOf('<p>') === 0 &&
message.content.lastIndexOf('</p>') === message.content.length - 4) {
message.flags.push('is_me_message');
}
}; };
exports.add_subject_links = function (message) { exports.add_subject_links = function (message) {

View File

@@ -102,7 +102,6 @@ exports.set_message_booleans = function (message, flags) {
message.mentioned_me_directly = convert_flag('mentioned'); message.mentioned_me_directly = convert_flag('mentioned');
message.collapsed = convert_flag('collapsed'); message.collapsed = convert_flag('collapsed');
message.alerted = convert_flag('has_alert_word'); message.alerted = convert_flag('has_alert_word');
message.is_me_message = convert_flag('is_me_message');
}; };
exports.add_message_metadata = function (message) { exports.add_message_metadata = function (message) {

View File

@@ -813,7 +813,6 @@ def do_send_messages(messages_maybe_none):
wildcard = message['message'].mentions_wildcard wildcard = message['message'].mentions_wildcard
mentioned_ids = message['message'].mentions_user_ids mentioned_ids = message['message'].mentions_user_ids
ids_with_alert_words = message['message'].user_ids_with_alert_words ids_with_alert_words = message['message'].user_ids_with_alert_words
is_me_message = message['message'].is_me_message
for um in ums_to_create: for um in ums_to_create:
if um.user_profile.id == message['message'].sender.id and \ if um.user_profile.id == message['message'].sender.id and \
@@ -825,8 +824,6 @@ def do_send_messages(messages_maybe_none):
um.flags |= UserMessage.flags.mentioned um.flags |= UserMessage.flags.mentioned
if um.user_profile_id in ids_with_alert_words: if um.user_profile_id in ids_with_alert_words:
um.flags |= UserMessage.flags.has_alert_word um.flags |= UserMessage.flags.has_alert_word
if is_me_message:
um.flags |= UserMessage.flags.is_me_message
user_messages = [] user_messages = []
for um in ums_to_create: for um in ums_to_create:
@@ -2781,9 +2778,6 @@ def update_user_message_flags(message, ums):
update_flag(um, wildcard, UserMessage.flags.wildcard_mentioned) update_flag(um, wildcard, UserMessage.flags.wildcard_mentioned)
is_me_message = getattr(message, 'is_me_message', False)
update_flag(um, is_me_message, UserMessage.flags.is_me_message)
for um in changed_ums: for um in changed_ums:
um.save(update_fields=['flags']) um.save(update_fields=['flags'])

View File

@@ -243,6 +243,7 @@ class MessageDict(object):
obj['content'] = content obj['content'] = content
obj['content_type'] = 'text/x-markdown' obj['content_type'] = 'text/x-markdown'
obj['is_me_message'] = Message.is_status_message(content, rendered_content)
obj['reactions'] = [ReactionDict.build_dict_from_raw_db_row(reaction) obj['reactions'] = [ReactionDict.build_dict_from_raw_db_row(reaction)
for reaction in reactions] for reaction in reactions]
return obj return obj
@@ -314,7 +315,6 @@ def render_markdown(message, content, realm=None, realm_alert_words=None, messag
if message is not None: if message is not None:
message.mentions_wildcard = False message.mentions_wildcard = False
message.is_me_message = False
message.mentions_user_ids = set() message.mentions_user_ids = set()
message.alert_words = set() message.alert_words = set()
message.links_for_preview = set() message.links_for_preview = set()
@@ -349,8 +349,6 @@ def render_markdown(message, content, realm=None, realm_alert_words=None, messag
if set(words).intersection(message.alert_words): if set(words).intersection(message.alert_words):
message.user_ids_with_alert_words.add(user_id) message.user_ids_with_alert_words.add(user_id)
message.is_me_message = Message.is_status_message(content, rendered_content)
return rendered_content return rendered_content
def huddle_users(recipient_id): def huddle_users(recipient_id):

View File

@@ -1290,7 +1290,7 @@ class AbstractUserMessage(ModelReprMixin, models.Model):
user_profile = models.ForeignKey(UserProfile, on_delete=CASCADE) # type: UserProfile user_profile = models.ForeignKey(UserProfile, on_delete=CASCADE) # type: UserProfile
ALL_FLAGS = ['read', 'starred', 'collapsed', 'mentioned', 'wildcard_mentioned', ALL_FLAGS = ['read', 'starred', 'collapsed', 'mentioned', 'wildcard_mentioned',
'summarize_in_home', 'summarize_in_stream', 'force_expand', 'force_collapse', 'summarize_in_home', 'summarize_in_stream', 'force_expand', 'force_collapse',
'has_alert_word', "historical", 'is_me_message'] 'has_alert_word', "historical"]
flags = BitField(flags=ALL_FLAGS, default=0) # type: BitHandler flags = BitField(flags=ALL_FLAGS, default=0) # type: BitHandler
class Meta(object): class Meta(object):