mirror of
https://github.com/zulip/zulip.git
synced 2025-11-10 17:07:07 +00:00
compose: Extract compose_call module.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Tim Abbott
parent
ac38aaad21
commit
c98622c63a
@@ -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",
|
||||
|
||||
46
web/src/compose_call.js
Normal file
46
web/src/compose_call.js
Normal 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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user