mirror of
https://github.com/zulip/zulip.git
synced 2025-11-14 10:57:58 +00:00
Expand get_unread_ids() to all local narrows.
This commit makes it so that any query for which we do a local filter leads to us examining the full list of unread message ids in our cache to find a potentially unread message that passes the filter. This can often allow us to more immediately jump to a new narrow with an appropriately selected message. Fixes #9319
This commit is contained in:
@@ -71,13 +71,21 @@ run_test('get_unread_ids', () => {
|
|||||||
assert.equal(unread_ids, undefined);
|
assert.equal(unread_ids, undefined);
|
||||||
|
|
||||||
terms = [
|
terms = [
|
||||||
{operator: 'bogus_operator', operand: 'me@example.com'},
|
{operator: 'search', operand: 'whatever'},
|
||||||
];
|
];
|
||||||
set_filter(terms);
|
set_filter(terms);
|
||||||
unread_ids = candidate_ids();
|
unread_ids = candidate_ids();
|
||||||
assert.equal(unread_ids, undefined);
|
assert.equal(unread_ids, undefined);
|
||||||
assert_unread_info({flavor: 'cannot_compute'});
|
assert_unread_info({flavor: 'cannot_compute'});
|
||||||
|
|
||||||
|
terms = [
|
||||||
|
{operator: 'bogus_operator', operand: 'me@example.com'},
|
||||||
|
];
|
||||||
|
set_filter(terms);
|
||||||
|
unread_ids = candidate_ids();
|
||||||
|
assert.deepEqual(unread_ids, []);
|
||||||
|
assert_unread_info({flavor: 'not_found'});
|
||||||
|
|
||||||
terms = [
|
terms = [
|
||||||
{operator: 'stream', operand: 'bogus'},
|
{operator: 'stream', operand: 'bogus'},
|
||||||
];
|
];
|
||||||
@@ -169,6 +177,15 @@ run_test('get_unread_ids', () => {
|
|||||||
unread_ids = candidate_ids();
|
unread_ids = candidate_ids();
|
||||||
assert.deepEqual(unread_ids, [private_msg.id]);
|
assert.deepEqual(unread_ids, [private_msg.id]);
|
||||||
|
|
||||||
|
// For a negated search, our candidate ids will be all
|
||||||
|
// unread messages, even ones that don't pass the filter.
|
||||||
|
terms = [
|
||||||
|
{operator: 'is', operand: 'private', negated: true},
|
||||||
|
];
|
||||||
|
set_filter(terms);
|
||||||
|
unread_ids = candidate_ids();
|
||||||
|
assert.deepEqual(unread_ids, [stream_msg.id, private_msg.id]);
|
||||||
|
|
||||||
terms = [
|
terms = [
|
||||||
{operator: 'pm-with', operand: 'bob@example.com'},
|
{operator: 'pm-with', operand: 'bob@example.com'},
|
||||||
];
|
];
|
||||||
@@ -200,3 +217,18 @@ run_test('get_unread_ids', () => {
|
|||||||
flavor: 'cannot_compute',
|
flavor: 'cannot_compute',
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
run_test('defensive code', () => {
|
||||||
|
// Test defensive code. We actually avoid calling
|
||||||
|
// _possible_unread_message_ids for any case where we
|
||||||
|
// couldn't compute the unread message ids, but that
|
||||||
|
// invariant is hard to future-proof.
|
||||||
|
narrow_state._possible_unread_message_ids = () => undefined;
|
||||||
|
var terms = [
|
||||||
|
{operator: 'some-unhandled-case', operand: 'whatever'},
|
||||||
|
];
|
||||||
|
set_filter(terms);
|
||||||
|
assert_unread_info({
|
||||||
|
flavor: 'cannot_compute',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -273,6 +273,10 @@ exports._possible_unread_message_ids = function () {
|
|||||||
return unread.get_all_msg_ids();
|
return unread.get_all_msg_ids();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (current_filter.can_apply_locally()) {
|
||||||
|
return unread.get_all_msg_ids();
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user