mirror of
https://github.com/zulip/zulip.git
synced 2025-11-08 16:01:58 +00:00
peer_data: Process partial_subscriber data.
Work towards #34244. This shouldn't change production at all, since we only send partial_subscribers when a dev flag is set.
This commit is contained in:
@@ -6,6 +6,7 @@ import * as sub_store from "./sub_store.ts";
|
|||||||
|
|
||||||
// This maps a stream_id to a LazySet of user_ids who are subscribed.
|
// This maps a stream_id to a LazySet of user_ids who are subscribed.
|
||||||
const stream_subscribers = new Map<number, LazySet>();
|
const stream_subscribers = new Map<number, LazySet>();
|
||||||
|
const fetched_stream_ids = new Set<number>();
|
||||||
|
|
||||||
export function clear_for_testing(): void {
|
export function clear_for_testing(): void {
|
||||||
stream_subscribers.clear();
|
stream_subscribers.clear();
|
||||||
@@ -95,9 +96,12 @@ export function get_subscribers(stream_id: number): number[] {
|
|||||||
return [...subscribers.keys()];
|
return [...subscribers.keys()];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function set_subscribers(stream_id: number, user_ids: number[]): void {
|
export function set_subscribers(stream_id: number, user_ids: number[], full_data = true): void {
|
||||||
const subscribers = new LazySet(user_ids);
|
const subscribers = new LazySet(user_ids);
|
||||||
stream_subscribers.set(stream_id, subscribers);
|
stream_subscribers.set(stream_id, subscribers);
|
||||||
|
if (full_data) {
|
||||||
|
fetched_stream_ids.add(stream_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function add_subscriber(stream_id: number, user_id: number): void {
|
export function add_subscriber(stream_id: number, user_id: number): void {
|
||||||
|
|||||||
@@ -925,7 +925,11 @@ export function create_sub_from_server_data(
|
|||||||
...attrs,
|
...attrs,
|
||||||
};
|
};
|
||||||
|
|
||||||
peer_data.set_subscribers(sub.stream_id, subscriber_user_ids ?? []);
|
if (attrs.partial_subscribers !== undefined) {
|
||||||
|
peer_data.set_subscribers(sub.stream_id, attrs.partial_subscribers, false);
|
||||||
|
} else {
|
||||||
|
peer_data.set_subscribers(sub.stream_id, subscriber_user_ids ?? []);
|
||||||
|
}
|
||||||
|
|
||||||
clean_up_description(sub);
|
clean_up_description(sub);
|
||||||
|
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ export const api_stream_schema = stream_schema.extend({
|
|||||||
|
|
||||||
export const never_subscribed_stream_schema = api_stream_schema.extend({
|
export const never_subscribed_stream_schema = api_stream_schema.extend({
|
||||||
subscribers: z.array(z.number()).optional(),
|
subscribers: z.array(z.number()).optional(),
|
||||||
|
partial_subscribers: z.array(z.number()).optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const stream_properties_schema = stream_specific_notification_settings_schema.extend({
|
export const stream_properties_schema = stream_specific_notification_settings_schema.extend({
|
||||||
@@ -70,6 +71,7 @@ export const api_stream_subscription_schema = api_stream_schema
|
|||||||
.merge(stream_properties_schema)
|
.merge(stream_properties_schema)
|
||||||
.extend({
|
.extend({
|
||||||
subscribers: z.array(z.number()).optional(),
|
subscribers: z.array(z.number()).optional(),
|
||||||
|
partial_subscribers: z.array(z.number()).optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const updatable_stream_properties_schema = api_stream_subscription_schema.extend({
|
export const updatable_stream_properties_schema = api_stream_subscription_schema.extend({
|
||||||
|
|||||||
@@ -1005,6 +1005,7 @@ test("create_sub", () => {
|
|||||||
name: "Antarctica",
|
name: "Antarctica",
|
||||||
subscribed: true,
|
subscribed: true,
|
||||||
color: "#76ce90",
|
color: "#76ce90",
|
||||||
|
partial_subscribers: [1, 2, 3],
|
||||||
};
|
};
|
||||||
|
|
||||||
const india_sub = stream_data.create_sub_from_server_data(india);
|
const india_sub = stream_data.create_sub_from_server_data(india);
|
||||||
@@ -1024,6 +1025,7 @@ test("create_sub", () => {
|
|||||||
const antarctica_sub = stream_data.create_sub_from_server_data(antarctica);
|
const antarctica_sub = stream_data.create_sub_from_server_data(antarctica);
|
||||||
assert.ok(antarctica_sub);
|
assert.ok(antarctica_sub);
|
||||||
assert.equal(antarctica_sub.color, "#76ce90");
|
assert.equal(antarctica_sub.color, "#76ce90");
|
||||||
|
assert.deepEqual(antarctica_sub.partial_subscribers, [1, 2, 3]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("creator_id", ({override}) => {
|
test("creator_id", ({override}) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user