Merge branch 'develop' into johannes/webpack5-workers
This commit is contained in:
commit
ccee4c9cdb
23 changed files with 347 additions and 177 deletions
|
@ -16,9 +16,13 @@ limitations under the License.
|
|||
|
||||
import React, { useCallback, useContext, useEffect, useMemo, useState } from "react";
|
||||
import classNames from "classnames";
|
||||
import { Room } from "matrix-js-sdk/src/matrix";
|
||||
import { Tooltip } from "@vector-im/compound-web";
|
||||
import { EventType, JoinRule, Room } from "matrix-js-sdk/src/matrix";
|
||||
import { Badge, Heading, Text, Tooltip } from "@vector-im/compound-web";
|
||||
import { Icon as SearchIcon } from "@vector-im/compound-design-tokens/icons/search.svg";
|
||||
import { Icon as LockIcon } from "@vector-im/compound-design-tokens/icons/lock.svg";
|
||||
import { Icon as LockOffIcon } from "@vector-im/compound-design-tokens/icons/lock-off.svg";
|
||||
import { Icon as PublicIcon } from "@vector-im/compound-design-tokens/icons/public.svg";
|
||||
import { Icon as ErrorIcon } from "@vector-im/compound-design-tokens/icons/error.svg";
|
||||
|
||||
import MatrixClientContext from "../../../contexts/MatrixClientContext";
|
||||
import { useIsEncrypted } from "../../../hooks/useIsEncrypted";
|
||||
|
@ -34,7 +38,6 @@ import { useEventEmitter } from "../../../hooks/useEventEmitter";
|
|||
import WidgetUtils from "../../../utils/WidgetUtils";
|
||||
import { IntegrationManagers } from "../../../integrations/IntegrationManagers";
|
||||
import SettingsStore from "../../../settings/SettingsStore";
|
||||
import TextWithTooltip from "../elements/TextWithTooltip";
|
||||
import WidgetAvatar from "../avatars/WidgetAvatar";
|
||||
import AccessibleTooltipButton from "../elements/AccessibleTooltipButton";
|
||||
import WidgetStore, { IApp } from "../../../stores/WidgetStore";
|
||||
|
@ -56,6 +59,8 @@ import PosthogTrackers from "../../../PosthogTrackers";
|
|||
import { shouldShowComponent } from "../../../customisations/helpers/UIComponents";
|
||||
import { PollHistoryDialog } from "../dialogs/PollHistoryDialog";
|
||||
import { Flex } from "../../utils/Flex";
|
||||
import { useAccountData } from "../../../hooks/useAccountData";
|
||||
import { useRoomState } from "../../../hooks/useRoomState";
|
||||
|
||||
interface IProps {
|
||||
room: Room;
|
||||
|
@ -307,31 +312,74 @@ const RoomSummaryCard: React.FC<IProps> = ({ room, permalinkCreator, onClose, on
|
|||
const isVideoRoom =
|
||||
videoRoomsEnabled && (room.isElementVideoRoom() || (elementCallVideoRoomsEnabled && room.isCallRoom()));
|
||||
|
||||
const roomState = useRoomState(room);
|
||||
const directRoomsList = useAccountData<Record<string, string[]>>(room.client, EventType.Direct);
|
||||
const [isDirectMessage, setDirectMessage] = useState(false);
|
||||
useEffect(() => {
|
||||
for (const [, dmRoomList] of Object.entries(directRoomsList)) {
|
||||
if (dmRoomList.includes(room?.roomId ?? "")) {
|
||||
setDirectMessage(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, [room, directRoomsList]);
|
||||
|
||||
const alias = room.getCanonicalAlias() || room.getAltAliases()[0] || "";
|
||||
const header = (
|
||||
<header className="mx_RoomSummaryCard_container">
|
||||
<div className="mx_RoomSummaryCard_avatar" role="presentation">
|
||||
<RoomAvatar room={room} size="54px" viewAvatarOnClick />
|
||||
<TextWithTooltip
|
||||
tooltip={isRoomEncrypted ? _t("common|encrypted") : _t("common|unencrypted")}
|
||||
class={classNames("mx_RoomSummaryCard_e2ee", {
|
||||
mx_RoomSummaryCard_e2ee_normal: isRoomEncrypted,
|
||||
mx_RoomSummaryCard_e2ee_warning: isRoomEncrypted && e2eStatus === E2EStatus.Warning,
|
||||
mx_RoomSummaryCard_e2ee_verified: isRoomEncrypted && e2eStatus === E2EStatus.Verified,
|
||||
})}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<RoomAvatar room={room} size="80px" viewAvatarOnClick />
|
||||
<RoomName room={room}>
|
||||
{(name) => (
|
||||
<h1 className="mx_RoomSummaryCard_roomName" title={name}>
|
||||
<Heading
|
||||
as="h1"
|
||||
size="md"
|
||||
weight="semibold"
|
||||
className="mx_RoomSummaryCard_roomName text-primary"
|
||||
title={name}
|
||||
>
|
||||
{name}
|
||||
</h1>
|
||||
</Heading>
|
||||
)}
|
||||
</RoomName>
|
||||
<div className="mx_RoomSummaryCard_alias" title={alias}>
|
||||
<Text
|
||||
as="div"
|
||||
size="sm"
|
||||
weight="semibold"
|
||||
className="mx_RoomSummaryCard_alias text-secondary"
|
||||
title={alias}
|
||||
>
|
||||
{alias}
|
||||
</div>
|
||||
</Text>
|
||||
|
||||
<Flex as="section" justify="center" gap="var(--cpd-space-2x)" className="mx_RoomSummaryCard_badges">
|
||||
{!isDirectMessage && roomState.getJoinRule() === JoinRule.Public && (
|
||||
<Badge kind="default">
|
||||
<PublicIcon width="1em" />
|
||||
{_t("common|public_room")}
|
||||
</Badge>
|
||||
)}
|
||||
|
||||
{isRoomEncrypted && e2eStatus !== E2EStatus.Warning && (
|
||||
<Badge kind="success">
|
||||
<LockIcon width="1em" />
|
||||
{_t("common|encrypted")}
|
||||
</Badge>
|
||||
)}
|
||||
|
||||
{!e2eStatus && (
|
||||
<Badge kind="default">
|
||||
<LockOffIcon width="1em" />
|
||||
{_t("common|unencrypted")}
|
||||
</Badge>
|
||||
)}
|
||||
|
||||
{e2eStatus === E2EStatus.Warning && (
|
||||
<Badge kind="critical">
|
||||
<ErrorIcon width="1em" />
|
||||
{_t("common|not_trusted")}
|
||||
</Badge>
|
||||
)}
|
||||
</Flex>
|
||||
</header>
|
||||
);
|
||||
|
||||
|
|
|
@ -1398,6 +1398,7 @@
|
|||
"element_call_video_rooms": "Element Call video rooms",
|
||||
"experimental_description": "Feeling experimental? Try out our latest ideas in development. These features are not finalised; they may be unstable, may change, or may be dropped altogether. <a>Learn more</a>.",
|
||||
"experimental_section": "Early previews",
|
||||
"feature_disable_call_per_sender_encryption": "Disable per-sender encryption for Element Call",
|
||||
"feature_wysiwyg_composer_description": "Use rich text instead of Markdown in the message composer.",
|
||||
"group_calls": "New group call experience",
|
||||
"group_developer": "Developer",
|
||||
|
|
|
@ -661,9 +661,11 @@ export class ElementCall extends Call {
|
|||
analyticsID,
|
||||
});
|
||||
|
||||
if (client.isRoomEncrypted(roomId)) params.append("perParticipantE2EE", "");
|
||||
if (SettingsStore.getValue("fallbackICEServerAllowed")) params.append("allowIceFallback", "");
|
||||
if (SettingsStore.getValue("feature_allow_screen_share_only_mode")) params.append("allowVoipWithNoMedia", "");
|
||||
if (client.isRoomEncrypted(roomId) && !SettingsStore.getValue("feature_disable_call_per_sender_encryption"))
|
||||
params.append("perParticipantE2EE", "true");
|
||||
if (SettingsStore.getValue("fallbackICEServerAllowed")) params.append("allowIceFallback", "true");
|
||||
if (SettingsStore.getValue("feature_allow_screen_share_only_mode"))
|
||||
params.append("allowVoipWithNoMedia", "true");
|
||||
|
||||
// Set custom fonts
|
||||
if (SettingsStore.getValue("useSystemFont")) {
|
||||
|
|
|
@ -404,6 +404,13 @@ export const SETTINGS: { [setting: string]: ISetting } = {
|
|||
controller: new ReloadOnChangeController(),
|
||||
default: false,
|
||||
},
|
||||
"feature_disable_call_per_sender_encryption": {
|
||||
isFeature: true,
|
||||
supportedLevels: LEVELS_FEATURE,
|
||||
labsGroup: LabGroup.VoiceAndVideo,
|
||||
displayName: _td("labs|feature_disable_call_per_sender_encryption"),
|
||||
default: false,
|
||||
},
|
||||
"feature_allow_screen_share_only_mode": {
|
||||
isFeature: true,
|
||||
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue