compose: Extract compose_call module.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2023-10-03 17:37:28 -07:00
committed by Tim Abbott
parent ac38aaad21
commit c98622c63a
4 changed files with 67 additions and 64 deletions

View File

@@ -9,6 +9,7 @@ import render_success_message_scheduled_banner from "../templates/compose_banner
import * as channel from "./channel"; import * as channel from "./channel";
import * as compose_actions from "./compose_actions"; import * as compose_actions from "./compose_actions";
import * as compose_banner from "./compose_banner"; import * as compose_banner from "./compose_banner";
import * as compose_call from "./compose_call";
import {get_recipient_label} from "./compose_closed_ui"; import {get_recipient_label} from "./compose_closed_ui";
import * as compose_recipient from "./compose_recipient"; import * as compose_recipient from "./compose_recipient";
import * as compose_state from "./compose_state"; import * as compose_state from "./compose_state";
@@ -47,53 +48,19 @@ import * as zcommand from "./zcommand";
// Docs: https://zulip.readthedocs.io/en/latest/subsystems/sending-messages.html // Docs: https://zulip.readthedocs.io/en/latest/subsystems/sending-messages.html
function get_jitsi_server_url() {
return page_params.realm_jitsi_server_url ?? page_params.server_jitsi_server_url;
}
export function compute_show_video_chat_button() {
const available_providers = page_params.realm_available_video_chat_providers;
if (page_params.realm_video_chat_provider === available_providers.disabled.id) {
return false;
}
if (
page_params.realm_video_chat_provider === available_providers.jitsi_meet.id &&
!get_jitsi_server_url()
) {
return false;
}
return true;
}
export function update_audio_and_video_chat_button_display() { export function update_audio_and_video_chat_button_display() {
update_audio_chat_button_display(); update_audio_chat_button_display();
update_video_chat_button_display(); update_video_chat_button_display();
} }
export function update_video_chat_button_display() { export function update_video_chat_button_display() {
const show_video_chat_button = compute_show_video_chat_button(); const show_video_chat_button = compose_call.compute_show_video_chat_button();
$("#below-compose-content .video_link").toggle(show_video_chat_button); $("#below-compose-content .video_link").toggle(show_video_chat_button);
$(".message-edit-feature-group .video_link").toggle(show_video_chat_button); $(".message-edit-feature-group .video_link").toggle(show_video_chat_button);
} }
export function compute_show_audio_chat_button() {
const available_providers = page_params.realm_available_video_chat_providers;
if (
(available_providers.jitsi_meet &&
get_jitsi_server_url() &&
page_params.realm_video_chat_provider === available_providers.jitsi_meet.id) ||
(available_providers.zoom &&
page_params.realm_video_chat_provider === available_providers.zoom.id)
) {
return true;
}
return false;
}
export function update_audio_chat_button_display() { export function update_audio_chat_button_display() {
const show_audio_chat_button = compute_show_audio_chat_button(); const show_audio_chat_button = compose_call.compute_show_audio_chat_button();
$("#below-compose-content .audio_link").toggle(show_audio_chat_button); $("#below-compose-content .audio_link").toggle(show_audio_chat_button);
$(".message-edit-feature-group .audio_link").toggle(show_audio_chat_button); $(".message-edit-feature-group .audio_link").toggle(show_audio_chat_button);
} }
@@ -128,17 +95,6 @@ export function abort_xhr() {
upload.compose_upload_object.cancelAll(); upload.compose_upload_object.cancelAll();
} }
export const zoom_token_callbacks = new Map();
export const video_call_xhrs = new Map();
export function abort_video_callbacks(edit_message_id = "") {
zoom_token_callbacks.delete(edit_message_id);
if (video_call_xhrs.has(edit_message_id)) {
video_call_xhrs.get(edit_message_id).abort();
video_call_xhrs.delete(edit_message_id);
}
}
export function create_message_object() { export function create_message_object() {
// Topics are optional, and we provide a placeholder if one isn't given. // Topics are optional, and we provide a placeholder if one isn't given.
let topic = compose_state.topic(); let topic = compose_state.topic();
@@ -439,15 +395,15 @@ function setup_compose_actions_hooks() {
compose_actions.register_compose_box_clear_hook(clear_preview_area); compose_actions.register_compose_box_clear_hook(clear_preview_area);
compose_actions.register_compose_cancel_hook(abort_xhr); compose_actions.register_compose_cancel_hook(abort_xhr);
compose_actions.register_compose_cancel_hook(abort_video_callbacks); compose_actions.register_compose_cancel_hook(compose_call.abort_video_callbacks);
} }
export function initialize() { export function initialize() {
// Register hooks for compose_actions. // Register hooks for compose_actions.
setup_compose_actions_hooks(); setup_compose_actions_hooks();
$("#below-compose-content .video_link").toggle(compute_show_video_chat_button()); $("#below-compose-content .video_link").toggle(compose_call.compute_show_video_chat_button());
$("#below-compose-content .audio_link").toggle(compute_show_audio_chat_button()); $("#below-compose-content .audio_link").toggle(compose_call.compute_show_audio_chat_button());
$("#compose-textarea").on("keydown", (event) => { $("#compose-textarea").on("keydown", (event) => {
compose_ui.handle_keydown(event, $("#compose-textarea").expectOne()); compose_ui.handle_keydown(event, $("#compose-textarea").expectOne());
@@ -653,7 +609,7 @@ export function initialize() {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
const show_video_chat_button = compute_show_video_chat_button(); const show_video_chat_button = compose_call.compute_show_video_chat_button();
if (!show_video_chat_button) { if (!show_video_chat_button) {
return; return;
@@ -666,7 +622,7 @@ export function initialize() {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
const show_audio_chat_button = compute_show_audio_chat_button(); const show_audio_chat_button = compose_call.compute_show_audio_chat_button();
if (!show_audio_chat_button) { if (!show_audio_chat_button) {
return; return;
@@ -860,7 +816,7 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_
available_providers.zoom && available_providers.zoom &&
page_params.realm_video_chat_provider === available_providers.zoom.id page_params.realm_video_chat_provider === available_providers.zoom.id
) { ) {
abort_video_callbacks(edit_message_id); compose_call.abort_video_callbacks(edit_message_id);
const key = edit_message_id || ""; const key = edit_message_id || "";
const request = { const request = {
@@ -868,13 +824,13 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_
}; };
const make_zoom_call = () => { const make_zoom_call = () => {
video_call_xhrs.set( compose_call.video_call_xhrs.set(
key, key,
channel.post({ channel.post({
url: "/json/calls/zoom/create", url: "/json/calls/zoom/create",
data: request, data: request,
success(res) { success(res) {
video_call_xhrs.delete(key); compose_call.video_call_xhrs.delete(key);
if (is_audio_call) { if (is_audio_call) {
insert_audio_call_url(res.url, $target_textarea); insert_audio_call_url(res.url, $target_textarea);
} else { } else {
@@ -882,7 +838,7 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_
} }
}, },
error(xhr, status) { error(xhr, status) {
video_call_xhrs.delete(key); compose_call.video_call_xhrs.delete(key);
if ( if (
status === "error" && status === "error" &&
xhr.responseJSON && xhr.responseJSON &&
@@ -903,7 +859,7 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_
if (page_params.has_zoom_token) { if (page_params.has_zoom_token) {
make_zoom_call(); make_zoom_call();
} else { } else {
zoom_token_callbacks.set(key, make_zoom_call); compose_call.zoom_token_callbacks.set(key, make_zoom_call);
window.open( window.open(
window.location.protocol + "//" + window.location.host + "/calls/zoom/register", window.location.protocol + "//" + window.location.host + "/calls/zoom/register",
"_blank", "_blank",
@@ -931,7 +887,7 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_
} else { } else {
// TODO: Use `new URL` to generate the URLs here. // TODO: Use `new URL` to generate the URLs here.
const video_call_id = util.random_int(100000000000000, 999999999999999); const video_call_id = util.random_int(100000000000000, 999999999999999);
const video_call_link = get_jitsi_server_url() + "/" + video_call_id; const video_call_link = compose_call.get_jitsi_server_url() + "/" + video_call_id;
if (is_audio_call) { if (is_audio_call) {
insert_audio_call_url( insert_audio_call_url(
video_call_link + "#config.startWithVideoMuted=true", video_call_link + "#config.startWithVideoMuted=true",

46
web/src/compose_call.js Normal file
View File

@@ -0,0 +1,46 @@
import {page_params} from "./page_params";
export const zoom_token_callbacks = new Map();
export const video_call_xhrs = new Map();
export function get_jitsi_server_url() {
return page_params.realm_jitsi_server_url ?? page_params.server_jitsi_server_url;
}
export function abort_video_callbacks(edit_message_id = "") {
zoom_token_callbacks.delete(edit_message_id);
if (video_call_xhrs.has(edit_message_id)) {
video_call_xhrs.get(edit_message_id).abort();
video_call_xhrs.delete(edit_message_id);
}
}
export function compute_show_video_chat_button() {
const available_providers = page_params.realm_available_video_chat_providers;
if (page_params.realm_video_chat_provider === available_providers.disabled.id) {
return false;
}
if (
page_params.realm_video_chat_provider === available_providers.jitsi_meet.id &&
!get_jitsi_server_url()
) {
return false;
}
return true;
}
export function compute_show_audio_chat_button() {
const available_providers = page_params.realm_available_video_chat_providers;
if (
(available_providers.jitsi_meet &&
get_jitsi_server_url() &&
page_params.realm_video_chat_provider === available_providers.jitsi_meet.id) ||
(available_providers.zoom &&
page_params.realm_video_chat_provider === available_providers.zoom.id)
) {
return true;
}
return false;
}

View File

@@ -10,9 +10,9 @@ import render_topic_edit_form from "../templates/topic_edit_form.hbs";
import * as blueslip from "./blueslip"; import * as blueslip from "./blueslip";
import * as channel from "./channel"; import * as channel from "./channel";
import * as compose from "./compose";
import * as compose_actions from "./compose_actions"; import * as compose_actions from "./compose_actions";
import * as compose_banner from "./compose_banner"; import * as compose_banner from "./compose_banner";
import * as compose_call from "./compose_call";
import * as compose_state from "./compose_state"; import * as compose_state from "./compose_state";
import * as compose_ui from "./compose_ui"; import * as compose_ui from "./compose_ui";
import * as compose_validate from "./compose_validate"; import * as compose_validate from "./compose_validate";
@@ -459,10 +459,10 @@ function edit_message($row, raw_content) {
$form $form
.find(".message-edit-feature-group .video_link") .find(".message-edit-feature-group .video_link")
.toggle(compose.compute_show_video_chat_button()); .toggle(compose_call.compute_show_video_chat_button());
$form $form
.find(".message-edit-feature-group .audio_link") .find(".message-edit-feature-group .audio_link")
.toggle(compose.compute_show_audio_chat_button()); .toggle(compose_call.compute_show_audio_chat_button());
upload.feature_check($(`#edit_form_${CSS.escape(rows.id($row))} .compose_upload_file`)); upload.feature_check($(`#edit_form_${CSS.escape(rows.id($row))} .compose_upload_file`));
const $message_edit_content = $row.find("textarea.message_edit_content"); const $message_edit_content = $row.find("textarea.message_edit_content");
@@ -810,7 +810,7 @@ export function end_message_row_edit($row) {
message_lists.current.hide_edit_message($row); message_lists.current.hide_edit_message($row);
message_viewport.scrollTop(original_scrollTop - scroll_by); message_viewport.scrollTop(original_scrollTop - scroll_by);
compose.abort_video_callbacks(message.id); compose_call.abort_video_callbacks(message.id);
} }
if ($row.find(".condensed").length !== 0) { if ($row.find(".condensed").length !== 0) {
condense.show_message_expander($row); condense.show_message_expander($row);

View File

@@ -9,6 +9,7 @@ import * as bot_data from "./bot_data";
import * as browser_history from "./browser_history"; import * as browser_history from "./browser_history";
import {buddy_list} from "./buddy_list"; import {buddy_list} from "./buddy_list";
import * as compose from "./compose"; import * as compose from "./compose";
import * as compose_call from "./compose_call";
import * as compose_pm_pill from "./compose_pm_pill"; import * as compose_pm_pill from "./compose_pm_pill";
import * as compose_recipient from "./compose_recipient"; import * as compose_recipient from "./compose_recipient";
import * as composebox_typeahead from "./composebox_typeahead"; import * as composebox_typeahead from "./composebox_typeahead";
@@ -133,10 +134,10 @@ export function dispatch_normal_event(event) {
case "has_zoom_token": case "has_zoom_token":
page_params.has_zoom_token = event.value; page_params.has_zoom_token = event.value;
if (event.value) { if (event.value) {
for (const callback of compose.zoom_token_callbacks.values()) { for (const callback of compose_call.zoom_token_callbacks.values()) {
callback(); callback();
} }
compose.zoom_token_callbacks.clear(); compose_call.zoom_token_callbacks.clear();
} }
break; break;