mirror of https://github.com/zulip/zulip.git
page load: Remove sender_ids in unread messages for streams.
This commit is contained in:
parent
a9501772c1
commit
45f6c8d27f
|
@ -11,6 +11,15 @@ below features are supported.
|
|||
|
||||
## Changes in Zulip 5.0
|
||||
|
||||
=======
|
||||
**Feature level 90**
|
||||
|
||||
* We no longer include `sender_ids` in the `streams` section of
|
||||
`UnreadMessagesResult`, which becomes the `unread_msgs` section of
|
||||
the events that clients fetch when registering events at page
|
||||
load time. (We don't believe this feature has ever been used in
|
||||
a meaningful way.)
|
||||
|
||||
**Feature level 89**
|
||||
|
||||
* [`GET /events`](/api/get-events): Introduced the `user_settings`
|
||||
|
|
|
@ -69,7 +69,6 @@ class RawReactionRow(TypedDict):
|
|||
class RawUnreadStreamDict(TypedDict):
|
||||
stream_id: int
|
||||
topic: str
|
||||
sender_id: int
|
||||
|
||||
|
||||
class RawUnreadPrivateMessageDict(TypedDict):
|
||||
|
@ -871,7 +870,7 @@ def huddle_users(recipient_id: int) -> str:
|
|||
|
||||
|
||||
def aggregate_message_dict(
|
||||
input_dict: Dict[int, Any], lookup_fields: List[str], collect_senders: bool
|
||||
input_dict: Dict[int, Any], lookup_fields: List[str]
|
||||
) -> List[Dict[str, Any]]:
|
||||
lookup_dict: Dict[Tuple[Any, ...], Dict[str, Any]] = {}
|
||||
|
||||
|
@ -879,21 +878,20 @@ def aggregate_message_dict(
|
|||
A concrete example might help explain the inputs here:
|
||||
|
||||
input_dict = {
|
||||
1002: dict(stream_id=5, topic='foo', sender_id=40),
|
||||
1003: dict(stream_id=5, topic='foo', sender_id=41),
|
||||
1004: dict(stream_id=6, topic='baz', sender_id=99),
|
||||
1002: dict(stream_id=5, topic='foo'),
|
||||
1003: dict(stream_id=5, topic='foo'),
|
||||
1004: dict(stream_id=6, topic='baz'),
|
||||
}
|
||||
|
||||
lookup_fields = ['stream_id', 'topic']
|
||||
|
||||
The first time through the loop:
|
||||
attribute_dict = dict(stream_id=5, topic='foo', sender_id=40)
|
||||
lookup_dict = (5, 'foo')
|
||||
attribute_dict = dict(stream_id=5, topic='foo')
|
||||
lookup_key = (5, 'foo')
|
||||
|
||||
lookup_dict = {
|
||||
(5, 'foo'): dict(stream_id=5, topic='foo',
|
||||
unread_message_ids=[1002, 1003],
|
||||
sender_ids=[40, 41],
|
||||
),
|
||||
...
|
||||
}
|
||||
|
@ -901,7 +899,6 @@ def aggregate_message_dict(
|
|||
result = [
|
||||
dict(stream_id=5, topic='foo',
|
||||
unread_message_ids=[1002, 1003],
|
||||
sender_ids=[40, 41],
|
||||
),
|
||||
...
|
||||
]
|
||||
|
@ -914,19 +911,13 @@ def aggregate_message_dict(
|
|||
for f in lookup_fields:
|
||||
obj[f] = attribute_dict[f]
|
||||
obj["unread_message_ids"] = []
|
||||
if collect_senders:
|
||||
obj["sender_ids"] = set()
|
||||
lookup_dict[lookup_key] = obj
|
||||
|
||||
bucket = lookup_dict[lookup_key]
|
||||
bucket["unread_message_ids"].append(message_id)
|
||||
if collect_senders:
|
||||
bucket["sender_ids"].add(attribute_dict["sender_id"])
|
||||
|
||||
for dct in lookup_dict.values():
|
||||
dct["unread_message_ids"].sort()
|
||||
if collect_senders:
|
||||
dct["sender_ids"] = sorted(dct["sender_ids"])
|
||||
|
||||
sorted_keys = sorted(lookup_dict.keys())
|
||||
|
||||
|
@ -1073,7 +1064,6 @@ def extract_unread_data_from_um_rows(
|
|||
stream_dict[message_id] = dict(
|
||||
stream_id=stream_id,
|
||||
topic=topic,
|
||||
sender_id=sender_id,
|
||||
)
|
||||
if not is_row_muted(stream_id, recipient_id, topic):
|
||||
unmuted_stream_msgs.add(message_id)
|
||||
|
@ -1137,7 +1127,6 @@ def aggregate_unread_data(raw_data: RawUnreadMessagesResult) -> UnreadMessagesRe
|
|||
lookup_fields=[
|
||||
"sender_id",
|
||||
],
|
||||
collect_senders=False,
|
||||
)
|
||||
|
||||
stream_objects = aggregate_message_dict(
|
||||
|
@ -1146,7 +1135,6 @@ def aggregate_unread_data(raw_data: RawUnreadMessagesResult) -> UnreadMessagesRe
|
|||
"stream_id",
|
||||
"topic",
|
||||
],
|
||||
collect_senders=True,
|
||||
)
|
||||
|
||||
huddle_objects = aggregate_message_dict(
|
||||
|
@ -1154,7 +1142,6 @@ def aggregate_unread_data(raw_data: RawUnreadMessagesResult) -> UnreadMessagesRe
|
|||
lookup_fields=[
|
||||
"user_ids_string",
|
||||
],
|
||||
collect_senders=False,
|
||||
)
|
||||
|
||||
result: UnreadMessagesResult = dict(
|
||||
|
@ -1187,15 +1174,12 @@ def apply_unread_message_event(
|
|||
else:
|
||||
raise AssertionError("Invalid message type {}".format(message["type"]))
|
||||
|
||||
sender_id = message["sender_id"]
|
||||
|
||||
if message_type == "stream":
|
||||
stream_id = message["stream_id"]
|
||||
topic = message[TOPIC_NAME]
|
||||
state["stream_dict"][message_id] = RawUnreadStreamDict(
|
||||
stream_id=stream_id,
|
||||
topic=topic,
|
||||
sender_id=sender_id,
|
||||
)
|
||||
|
||||
if stream_id not in state["muted_stream_ids"]:
|
||||
|
|
|
@ -8864,13 +8864,6 @@ paths:
|
|||
message with the message_id as the key.
|
||||
additionalProperties: false
|
||||
properties:
|
||||
sender_ids:
|
||||
type: array
|
||||
items:
|
||||
type: integer
|
||||
description: |
|
||||
Array containing the id of the users who have sent recent messages
|
||||
on this stream under the given topic which have been unread by the user.
|
||||
topic:
|
||||
type: string
|
||||
description: |
|
||||
|
|
|
@ -645,7 +645,6 @@ class GetUnreadMsgsTest(ZulipTestCase):
|
|||
self.assertEqual(
|
||||
stream_dict[message_ids["lunch"][0]],
|
||||
dict(
|
||||
sender_id=cordelia.id,
|
||||
stream_id=get_stream("social", realm).id,
|
||||
topic="lunch",
|
||||
),
|
||||
|
@ -870,19 +869,16 @@ class GetUnreadMsgsTest(ZulipTestCase):
|
|||
unread_pm = result["pms"][0]
|
||||
self.assertEqual(unread_pm["sender_id"], sender_id)
|
||||
self.assertEqual(unread_pm["unread_message_ids"], [pm1_message_id, pm2_message_id])
|
||||
self.assertTrue("sender_ids" not in unread_pm)
|
||||
|
||||
unread_stream = result["streams"][0]
|
||||
self.assertEqual(unread_stream["stream_id"], get_stream("Denmark", user_profile.realm).id)
|
||||
self.assertEqual(unread_stream["topic"], "muted-topic")
|
||||
self.assertEqual(unread_stream["unread_message_ids"], [muted_topic_message_id])
|
||||
self.assertEqual(unread_stream["sender_ids"], [sender_id])
|
||||
|
||||
unread_stream = result["streams"][1]
|
||||
self.assertEqual(unread_stream["stream_id"], get_stream("Denmark", user_profile.realm).id)
|
||||
self.assertEqual(unread_stream["topic"], "test")
|
||||
self.assertEqual(unread_stream["unread_message_ids"], [stream_message_id])
|
||||
self.assertEqual(unread_stream["sender_ids"], [sender_id])
|
||||
|
||||
unread_stream = result["streams"][2]
|
||||
self.assertEqual(
|
||||
|
@ -890,7 +886,6 @@ class GetUnreadMsgsTest(ZulipTestCase):
|
|||
)
|
||||
self.assertEqual(unread_stream["topic"], "test")
|
||||
self.assertEqual(unread_stream["unread_message_ids"], [muted_stream_message_id])
|
||||
self.assertEqual(unread_stream["sender_ids"], [sender_id])
|
||||
|
||||
huddle_string = ",".join(
|
||||
str(uid) for uid in sorted([sender_id, user_profile.id, othello.id])
|
||||
|
@ -899,7 +894,6 @@ class GetUnreadMsgsTest(ZulipTestCase):
|
|||
unread_huddle = result["huddles"][0]
|
||||
self.assertEqual(unread_huddle["user_ids_string"], huddle_string)
|
||||
self.assertEqual(unread_huddle["unread_message_ids"], [huddle_message_id])
|
||||
self.assertTrue("sender_ids" not in unread_huddle)
|
||||
|
||||
self.assertEqual(result["mentions"], [])
|
||||
|
||||
|
|
|
@ -83,7 +83,6 @@ from zerver.models import (
|
|||
get_default_stream_groups,
|
||||
get_realm,
|
||||
get_stream,
|
||||
get_system_bot,
|
||||
get_user,
|
||||
get_user_profile_by_id_in_realm,
|
||||
)
|
||||
|
@ -279,7 +278,6 @@ class TestCreateStreams(ZulipTestCase):
|
|||
self.subscribe(iago, announce_stream.name)
|
||||
self.subscribe(hamlet, announce_stream.name)
|
||||
|
||||
notification_bot = get_system_bot(settings.NOTIFICATION_BOT, realm.id)
|
||||
self.login_user(iago)
|
||||
|
||||
initial_message_count = Message.objects.count()
|
||||
|
@ -336,7 +334,6 @@ class TestCreateStreams(ZulipTestCase):
|
|||
|
||||
# According to the code in zerver/views/streams/add_subscriptions_backend
|
||||
# the notification stream message is sent first, then the new stream's message.
|
||||
self.assertEqual(hamlet_unread_messages[0]["sender_ids"][0], notification_bot.id)
|
||||
self.assertEqual(hamlet_unread_messages[1]["stream_id"], stream_id)
|
||||
|
||||
# But it should be marked as read for Iago, the stream creator.
|
||||
|
|
Loading…
Reference in New Issue