stream_data: Track web public streams in current org.

This commit tracks all available web-public stream_ids in org.
This commit is contained in:
Pratik Chanda
2025-06-29 15:29:35 +05:30
committed by Tim Abbott
parent ec82c543fe
commit b0eefb8a31
2 changed files with 21 additions and 1 deletions

View File

@@ -124,6 +124,7 @@ let stream_info: BinaryDict<StreamSubscription>;
const stream_ids_by_name = new FoldDict<number>(); const stream_ids_by_name = new FoldDict<number>();
const stream_ids_by_old_names = new FoldDict<number>(); const stream_ids_by_old_names = new FoldDict<number>();
const default_stream_ids = new Set<number>(); const default_stream_ids = new Set<number>();
const realm_web_public_stream_ids = new Set<number>();
export function clear_subscriptions(): void { export function clear_subscriptions(): void {
// This function is only used once at page load, and then // This function is only used once at page load, and then
@@ -167,6 +168,9 @@ export function add_sub(sub: StreamSubscription): void {
// We use create_streams for new streams in live-update events. // We use create_streams for new streams in live-update events.
stream_info.set(sub.stream_id, sub); stream_info.set(sub.stream_id, sub);
stream_ids_by_name.set(sub.name, sub.stream_id); stream_ids_by_name.set(sub.name, sub.stream_id);
if (sub.is_web_public) {
realm_web_public_stream_ids.add(sub.stream_id);
}
sub_store.add_hydrated_sub(sub.stream_id, sub); sub_store.add_hydrated_sub(sub.stream_id, sub);
} }
@@ -326,6 +330,7 @@ export function delete_sub(stream_id: number): void {
} }
sub_store.delete_sub(stream_id); sub_store.delete_sub(stream_id);
realm_web_public_stream_ids.delete(stream_id);
stream_info.delete(stream_id); stream_info.delete(stream_id);
} }
@@ -434,6 +439,11 @@ export function update_stream_privacy(
sub.invite_only = values.invite_only; sub.invite_only = values.invite_only;
sub.history_public_to_subscribers = values.history_public_to_subscribers; sub.history_public_to_subscribers = values.history_public_to_subscribers;
sub.is_web_public = values.is_web_public; sub.is_web_public = values.is_web_public;
if (sub.is_web_public) {
realm_web_public_stream_ids.add(sub.stream_id);
} else {
realm_web_public_stream_ids.delete(sub.stream_id);
}
} }
export function update_message_retention_setting( export function update_message_retention_setting(
@@ -1084,6 +1094,9 @@ export function create_sub_from_server_data(
clean_up_description(sub); clean_up_description(sub);
stream_info.set(sub.stream_id, sub); stream_info.set(sub.stream_id, sub);
if (sub.is_web_public) {
realm_web_public_stream_ids.add(sub.stream_id);
}
stream_ids_by_name.set(sub.name, sub.stream_id); stream_ids_by_name.set(sub.name, sub.stream_id);
sub_store.add_hydrated_sub(sub.stream_id, sub); sub_store.add_hydrated_sub(sub.stream_id, sub);

View File

@@ -825,7 +825,7 @@ test("stream_settings", ({override}) => {
assert.equal(sub_rows[0].history_public_to_subscribers, true); assert.equal(sub_rows[0].history_public_to_subscribers, true);
assert.equal(sub_rows[0].message_retention_days, 10); assert.equal(sub_rows[0].message_retention_days, 10);
const sub = stream_data.get_sub("a"); let sub = stream_data.get_sub("a");
stream_data.update_stream_privacy(sub, { stream_data.update_stream_privacy(sub, {
invite_only: false, invite_only: false,
history_public_to_subscribers: false, history_public_to_subscribers: false,
@@ -859,6 +859,12 @@ test("stream_settings", ({override}) => {
assert.equal(sub_rows[0].name, "c"); assert.equal(sub_rows[0].name, "c");
assert.equal(sub_rows[1].name, "a"); assert.equal(sub_rows[1].name, "a");
assert.equal(sub_rows.length, 2); assert.equal(sub_rows.length, 2);
sub = stream_data.get_sub("b");
stream_data.update_stream_privacy(sub, {
is_web_public: true,
});
assert.equal(sub.is_web_public, true);
}); });
test("default_stream_names", () => { test("default_stream_names", () => {
@@ -1232,6 +1238,7 @@ test("create_sub", () => {
stream_id: 102, stream_id: 102,
name: "India", name: "India",
subscribed: true, subscribed: true,
is_web_public: true,
}; };
const canada = { const canada = {