diff --git a/web/src/compose.js b/web/src/compose.js index 57f93887c9..ffd34222af 100644 --- a/web/src/compose.js +++ b/web/src/compose.js @@ -9,6 +9,7 @@ import render_success_message_scheduled_banner from "../templates/compose_banner import * as channel from "./channel"; import * as compose_actions from "./compose_actions"; import * as compose_banner from "./compose_banner"; +import * as compose_call from "./compose_call"; import {get_recipient_label} from "./compose_closed_ui"; import * as compose_recipient from "./compose_recipient"; 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 -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() { update_audio_chat_button_display(); 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); $(".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() { - 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); $(".message-edit-feature-group .audio_link").toggle(show_audio_chat_button); } @@ -128,17 +95,6 @@ export function abort_xhr() { 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() { // Topics are optional, and we provide a placeholder if one isn't given. 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_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() { // Register hooks for compose_actions. setup_compose_actions_hooks(); - $("#below-compose-content .video_link").toggle(compute_show_video_chat_button()); - $("#below-compose-content .audio_link").toggle(compute_show_audio_chat_button()); + $("#below-compose-content .video_link").toggle(compose_call.compute_show_video_chat_button()); + $("#below-compose-content .audio_link").toggle(compose_call.compute_show_audio_chat_button()); $("#compose-textarea").on("keydown", (event) => { compose_ui.handle_keydown(event, $("#compose-textarea").expectOne()); @@ -653,7 +609,7 @@ export function initialize() { e.preventDefault(); 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) { return; @@ -666,7 +622,7 @@ export function initialize() { e.preventDefault(); 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) { return; @@ -860,7 +816,7 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_ available_providers.zoom && 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 request = { @@ -868,13 +824,13 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_ }; const make_zoom_call = () => { - video_call_xhrs.set( + compose_call.video_call_xhrs.set( key, channel.post({ url: "/json/calls/zoom/create", data: request, success(res) { - video_call_xhrs.delete(key); + compose_call.video_call_xhrs.delete(key); if (is_audio_call) { insert_audio_call_url(res.url, $target_textarea); } else { @@ -882,7 +838,7 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_ } }, error(xhr, status) { - video_call_xhrs.delete(key); + compose_call.video_call_xhrs.delete(key); if ( status === "error" && 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) { make_zoom_call(); } else { - zoom_token_callbacks.set(key, make_zoom_call); + compose_call.zoom_token_callbacks.set(key, make_zoom_call); window.open( window.location.protocol + "//" + window.location.host + "/calls/zoom/register", "_blank", @@ -931,7 +887,7 @@ function generate_and_insert_audio_or_video_call_link($target_element, is_audio_ } else { // TODO: Use `new URL` to generate the URLs here. 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) { insert_audio_call_url( video_call_link + "#config.startWithVideoMuted=true", diff --git a/web/src/compose_call.js b/web/src/compose_call.js new file mode 100644 index 0000000000..3ba7f6e4de --- /dev/null +++ b/web/src/compose_call.js @@ -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; +} diff --git a/web/src/message_edit.js b/web/src/message_edit.js index 33be0f2381..08c34ad302 100644 --- a/web/src/message_edit.js +++ b/web/src/message_edit.js @@ -10,9 +10,9 @@ import render_topic_edit_form from "../templates/topic_edit_form.hbs"; import * as blueslip from "./blueslip"; import * as channel from "./channel"; -import * as compose from "./compose"; import * as compose_actions from "./compose_actions"; import * as compose_banner from "./compose_banner"; +import * as compose_call from "./compose_call"; import * as compose_state from "./compose_state"; import * as compose_ui from "./compose_ui"; import * as compose_validate from "./compose_validate"; @@ -459,10 +459,10 @@ function edit_message($row, raw_content) { $form .find(".message-edit-feature-group .video_link") - .toggle(compose.compute_show_video_chat_button()); + .toggle(compose_call.compute_show_video_chat_button()); $form .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`)); 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_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) { condense.show_message_expander($row); diff --git a/web/src/server_events_dispatch.js b/web/src/server_events_dispatch.js index ffc78603aa..02570d2775 100644 --- a/web/src/server_events_dispatch.js +++ b/web/src/server_events_dispatch.js @@ -9,6 +9,7 @@ import * as bot_data from "./bot_data"; import * as browser_history from "./browser_history"; import {buddy_list} from "./buddy_list"; import * as compose from "./compose"; +import * as compose_call from "./compose_call"; import * as compose_pm_pill from "./compose_pm_pill"; import * as compose_recipient from "./compose_recipient"; import * as composebox_typeahead from "./composebox_typeahead"; @@ -133,10 +134,10 @@ export function dispatch_normal_event(event) { case "has_zoom_token": page_params.has_zoom_token = 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(); } - compose.zoom_token_callbacks.clear(); + compose_call.zoom_token_callbacks.clear(); } break;