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 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
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 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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user