mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 05:53:43 +00:00
Extract exclude_muting_conditions() in messages.py
(imported from commit 97144097406377eb40383c7d1314c74dd713719c)
This commit is contained in:
committed by
Jessica McKellar
parent
f47a3c62e8
commit
9d21787cd7
@@ -367,6 +367,26 @@ def ok_to_include_history(narrow, realm):
|
||||
|
||||
return include_history
|
||||
|
||||
def exclude_muting_conditions(user_profile):
|
||||
muted_topics = ujson.loads(user_profile.muted_topics)
|
||||
if muted_topics:
|
||||
muted_streams = bulk_get_streams(user_profile.realm,
|
||||
[muted[0] for muted in muted_topics])
|
||||
muted_recipients = bulk_get_recipients(Recipient.STREAM,
|
||||
[stream.id for stream in muted_streams.itervalues()])
|
||||
recipient_map = dict((s.name.lower(), muted_recipients[s.id].id)
|
||||
for s in muted_streams.itervalues())
|
||||
|
||||
def mute_cond(muted):
|
||||
stream_cond = column("recipient_id") == recipient_map[muted[0].lower()]
|
||||
topic_cond = func.upper(column("subject")) == func.upper(muted[1])
|
||||
return and_(stream_cond, topic_cond)
|
||||
|
||||
condition = not_(or_(*map(mute_cond, muted_topics)))
|
||||
return [condition]
|
||||
|
||||
return []
|
||||
|
||||
@has_request_variables
|
||||
def get_old_messages_backend(request, user_profile,
|
||||
anchor = REQ(converter=int),
|
||||
@@ -432,18 +452,9 @@ def get_old_messages_backend(request, user_profile,
|
||||
|
||||
# We exclude messages on muted topics when finding the first unread
|
||||
# message in this narrow
|
||||
muted_topics = ujson.loads(user_profile.muted_topics)
|
||||
if muted_topics:
|
||||
muted_streams = bulk_get_streams(user_profile.realm,
|
||||
[muted[0] for muted in muted_topics])
|
||||
muted_recipients = bulk_get_recipients(Recipient.STREAM,
|
||||
[stream.id for stream in muted_streams.itervalues()])
|
||||
recipient_map = dict((s.name.lower(), muted_recipients[s.id].id)
|
||||
for s in muted_streams.itervalues())
|
||||
condition = and_(condition,
|
||||
not_(or_(*[and_(column("recipient_id") == recipient_map[muted[0].lower()],
|
||||
func.upper(column("subject")) == func.upper(muted[1]))
|
||||
for muted in muted_topics])))
|
||||
muting_conditions = exclude_muting_conditions(user_profile)
|
||||
if muting_conditions:
|
||||
condition = and_(condition, *muting_conditions)
|
||||
|
||||
first_unread_query = query.where(condition)
|
||||
first_unread_query = first_unread_query.order_by(inner_msg_id_col.asc()).limit(1)
|
||||
|
||||
Reference in New Issue
Block a user