From 344185a3758eee109e9725581291bdaa78993a97 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 16:34:48 +0530 Subject: [PATCH 01/32] Translate right panel stuff to ts Add actions for right panel --- .../{HeaderButton.js => HeaderButton.tsx} | 41 +++--- .../{HeaderButtons.js => HeaderButtons.tsx} | 52 +++++--- src/dispatcher/actions.ts | 15 +++ .../AfterRightPanelPhaseChangePayload.ts | 28 ++++ .../payloads/SetRightPanelPhasePayload.ts | 36 ++++++ .../payloads/ToggleRightPanelPayload.ts | 27 ++++ ...{RightPanelStore.js => RightPanelStore.ts} | 121 ++++++++++-------- ...torePhases.js => RightPanelStorePhases.ts} | 34 ++--- 8 files changed, 247 insertions(+), 107 deletions(-) rename src/components/views/right_panel/{HeaderButton.js => HeaderButton.tsx} (79%) rename src/components/views/right_panel/{HeaderButtons.js => HeaderButtons.tsx} (57%) create mode 100644 src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts create mode 100644 src/dispatcher/payloads/SetRightPanelPhasePayload.ts create mode 100644 src/dispatcher/payloads/ToggleRightPanelPayload.ts rename src/stores/{RightPanelStore.js => RightPanelStore.ts} (59%) rename src/stores/{RightPanelStorePhases.js => RightPanelStorePhases.ts} (57%) diff --git a/src/components/views/right_panel/HeaderButton.js b/src/components/views/right_panel/HeaderButton.tsx similarity index 79% rename from src/components/views/right_panel/HeaderButton.js rename to src/components/views/right_panel/HeaderButton.tsx index 2cfc060bba..a64ed0a980 100644 --- a/src/components/views/right_panel/HeaderButton.js +++ b/src/components/views/right_panel/HeaderButton.tsx @@ -19,18 +19,33 @@ limitations under the License. */ import React from 'react'; -import PropTypes from 'prop-types'; import classNames from 'classnames'; import Analytics from '../../../Analytics'; import AccessibleTooltipButton from "../elements/AccessibleTooltipButton"; -export default class HeaderButton extends React.Component { - constructor() { - super(); +interface IProps { + // Whether this button is highlighted + isHighlighted: boolean; + // click handler + onClick: () => void; + // The badge to display above the icon + badge: React.ReactNode; + // The parameters to track the click event + analytics: string[]; + + // Button name + name: string; + // Button title + title: string; +}; + +export default class HeaderButton extends React.Component { + constructor(props: IProps) { + super(props); this.onClick = this.onClick.bind(this); } - onClick(ev) { + onClick(_ev: React.KeyboardEvent) { Analytics.trackEvent(...this.props.analytics); this.props.onClick(); } @@ -51,19 +66,3 @@ export default class HeaderButton extends React.Component { />; } } - -HeaderButton.propTypes = { - // Whether this button is highlighted - isHighlighted: PropTypes.bool.isRequired, - // click handler - onClick: PropTypes.func.isRequired, - // The badge to display above the icon - badge: PropTypes.node, - // The parameters to track the click event - analytics: PropTypes.arrayOf(PropTypes.string).isRequired, - - // Button name - name: PropTypes.string.isRequired, - // Button title - title: PropTypes.string.isRequired, -}; diff --git a/src/components/views/right_panel/HeaderButtons.js b/src/components/views/right_panel/HeaderButtons.tsx similarity index 57% rename from src/components/views/right_panel/HeaderButtons.js rename to src/components/views/right_panel/HeaderButtons.tsx index 1c66fe5828..099e785ada 100644 --- a/src/components/views/right_panel/HeaderButtons.js +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -21,42 +21,52 @@ limitations under the License. import React from 'react'; import dis from '../../../dispatcher/dispatcher'; import RightPanelStore from "../../../stores/RightPanelStore"; +import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; +import {Action} from '../../../dispatcher/actions'; -export const HEADER_KIND_ROOM = "room"; -export const HEADER_KIND_GROUP = "group"; +export enum HeaderKind { + Room = "room", + Group = "group", +} -const HEADER_KINDS = [HEADER_KIND_GROUP, HEADER_KIND_ROOM]; +interface IState { + headerKind: HeaderKind; + phase: RightPanelPhases; +} -export default class HeaderButtons extends React.Component { - constructor(props, kind) { +interface IProps {} + +export default class HeaderButtons extends React.Component { + private storeToken: ReturnType; + private dispatcherRef: string; + + constructor(props: IProps, kind: HeaderKind) { super(props); - if (!HEADER_KINDS.includes(kind)) throw new Error(`Invalid header kind: ${kind}`); - const rps = RightPanelStore.getSharedInstance(); this.state = { headerKind: kind, - phase: kind === HEADER_KIND_ROOM ? rps.visibleRoomPanelPhase : rps.visibleGroupPanelPhase, + phase: kind === HeaderKind.Room ? rps.visibleRoomPanelPhase : rps.visibleGroupPanelPhase, }; } componentDidMount() { - this._storeToken = RightPanelStore.getSharedInstance().addListener(this.onRightPanelUpdate.bind(this)); - this._dispatcherRef = dis.register(this.onAction.bind(this)); // used by subclasses + this.storeToken = RightPanelStore.getSharedInstance().addListener(this.onRightPanelUpdate.bind(this)); + this.dispatcherRef = dis.register(this.onAction.bind(this)); // used by subclasses } componentWillUnmount() { - if (this._storeToken) this._storeToken.remove(); - if (this._dispatcherRef) dis.unregister(this._dispatcherRef); + if (this.storeToken) this.storeToken.remove(); + if (this.dispatcherRef) dis.unregister(this.dispatcherRef); } onAction(payload) { // Ignore - intended to be overridden by subclasses } - setPhase(phase, extras) { + setPhase(phase: RightPanelPhases, extras) { dis.dispatch({ - action: 'set_right_panel_phase', + action: Action.SetRightPanelPhase, phase: phase, refireParams: extras, }); @@ -72,13 +82,23 @@ export default class HeaderButtons extends React.Component { onRightPanelUpdate() { const rps = RightPanelStore.getSharedInstance(); - if (this.state.headerKind === HEADER_KIND_ROOM) { + if (this.state.headerKind === HeaderKind.Room) { this.setState({phase: rps.visibleRoomPanelPhase}); - } else if (this.state.headerKind === HEADER_KIND_GROUP) { + } else if (this.state.headerKind === HeaderKind.Group) { this.setState({phase: rps.visibleGroupPanelPhase}); } } + // XXX: Make renderButtons a prop + renderButtons(): JSX.Element[] { + // Ignore - intended to be overridden by subclasses + // Return empty fragment to satisfy the type + return [ + + + ]; + } + render() { // inline style as this will be swapped around in future commits return
diff --git a/src/dispatcher/actions.ts b/src/dispatcher/actions.ts index 519a799e67..6fb71df30d 100644 --- a/src/dispatcher/actions.ts +++ b/src/dispatcher/actions.ts @@ -79,4 +79,19 @@ export enum Action { * Changes room based on room list order and payload parameters. Should be used with ViewRoomDeltaPayload. */ ViewRoomDelta = "view_room_delta", + + /** + * Sets the phase for the right panel. Should be used with SetRightPanelPhasePayload. + */ + SetRightPanelPhase = "set_right_panel_phase", + + /** + * Toggles the right panel. Should be used with ToggleRightPanelPayload. + */ + ToggleRightPanel = "toggle_right_panel", + + /** + * Trigged after the phase of the right panel is set. Should be used with AfterRightPanelPhaseChangePayload. + */ + AfterRightPanelPhaseChange = "after_right_panel_phase_change", } diff --git a/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts b/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts new file mode 100644 index 0000000000..3193f9043b --- /dev/null +++ b/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts @@ -0,0 +1,28 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { RightPanelPhases } from "../../stores/RightPanelStorePhases"; +import { SetRightPanelPhaseRefireParams } from "./SetRightPanelPhasePayload"; +import { ActionPayload } from "../payloads"; +import { Action } from "../actions"; + +interface AfterRightPanelPhaseChangeAction extends ActionPayload { + action: Action.AfterRightPanelPhaseChange; + phase: RightPanelPhases; +} + +export type AfterRightPanelPhaseChangePayload + = AfterRightPanelPhaseChangeAction & SetRightPanelPhaseRefireParams; diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts new file mode 100644 index 0000000000..8d8eca762c --- /dev/null +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -0,0 +1,36 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {VerificationRequest} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; +import { RightPanelPhases } from "../../stores/RightPanelStorePhases"; +import { ActionPayload } from "../payloads"; +import { Action } from "../actions"; + +export interface SetRightPanelPhasePayload extends ActionPayload { + action: Action.SetRightPanelPhase; + + phase: RightPanelPhases; + refireParams?: SetRightPanelPhaseRefireParams; +} + +export interface SetRightPanelPhaseRefireParams { + // XXX: Fix after the types are defiend in matrix-js-sdk + // No appropriate types exist yet for the fields + members: any; + verificationRequest: typeof VerificationRequest; + groudId: string; + groupRoomId: string; +} diff --git a/src/dispatcher/payloads/ToggleRightPanelPayload.ts b/src/dispatcher/payloads/ToggleRightPanelPayload.ts new file mode 100644 index 0000000000..0635194890 --- /dev/null +++ b/src/dispatcher/payloads/ToggleRightPanelPayload.ts @@ -0,0 +1,27 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { ActionPayload } from "../payloads"; +import { Action } from "../actions"; + +export interface ToggleRightPanelPayload extends ActionPayload { + action: Action.ToggleRightPanel; + + /** + * The type of room that the panel is toggled in. + */ + type: "group" | "room"; +} diff --git a/src/stores/RightPanelStore.js b/src/stores/RightPanelStore.ts similarity index 59% rename from src/stores/RightPanelStore.js rename to src/stores/RightPanelStore.ts index a73f3befbb..6ed5d7fe9a 100644 --- a/src/stores/RightPanelStore.js +++ b/src/stores/RightPanelStore.ts @@ -15,31 +15,45 @@ limitations under the License. */ import dis from '../dispatcher/dispatcher'; +import {Action} from '../dispatcher/actions'; import {pendingVerificationRequestForUser} from '../verification'; import {Store} from 'flux/utils'; import SettingsStore, {SettingLevel} from "../settings/SettingsStore"; -import {RIGHT_PANEL_PHASES, RIGHT_PANEL_PHASES_NO_ARGS} from "./RightPanelStorePhases"; +import {RightPanelPhases, RIGHT_PANEL_PHASES_NO_ARGS} from "./RightPanelStorePhases"; -const INITIAL_STATE = { +interface RightPanelStoreState { // Whether or not to show the right panel at all. We split out rooms and groups // because they're different flows for the user to follow. - showRoomPanel: SettingsStore.getValue("showRightPanelInRoom"), - showGroupPanel: SettingsStore.getValue("showRightPanelInGroup"), + showRoomPanel: boolean; + showGroupPanel: boolean; // The last phase (screen) the right panel was showing - lastRoomPhase: SettingsStore.getValue("lastRightPanelPhaseForRoom"), - lastGroupPhase: SettingsStore.getValue("lastRightPanelPhaseForGroup"), + lastRoomPhase: RightPanelPhases; + lastGroupPhase: RightPanelPhases; // Extra information about the last phase + lastRoomPhaseParams: {[key: string]: any}; +} + +const INITIAL_STATE: RightPanelStoreState = { + showRoomPanel: SettingsStore.getValue("showRightPanelInRoom"), + showGroupPanel: SettingsStore.getValue("showRightPanelInGroup"), + lastRoomPhase: SettingsStore.getValue("lastRightPanelPhaseForRoom"), + lastGroupPhase: SettingsStore.getValue("lastRightPanelPhaseForGroup"), lastRoomPhaseParams: {}, }; -const GROUP_PHASES = Object.keys(RIGHT_PANEL_PHASES).filter(k => k.startsWith("Group")); +const GROUP_PHASES = [ + RightPanelPhases.GroupMemberList, + RightPanelPhases.GroupRoomList, + RightPanelPhases.GroupRoomInfo, + RightPanelPhases.GroupMemberInfo, +]; const MEMBER_INFO_PHASES = [ - RIGHT_PANEL_PHASES.RoomMemberInfo, - RIGHT_PANEL_PHASES.Room3pidMemberInfo, - RIGHT_PANEL_PHASES.EncryptionPanel, + RightPanelPhases.RoomMemberInfo, + RightPanelPhases.Room3pidMemberInfo, + RightPanelPhases.EncryptionPanel, ]; /** @@ -47,132 +61,133 @@ const MEMBER_INFO_PHASES = [ * sessions. */ export default class RightPanelStore extends Store { - static _instance; + private static instance: RightPanelStore; + private state: RightPanelStoreState; constructor() { super(dis); // Initialise state - this._state = INITIAL_STATE; + this.state = INITIAL_STATE; } get isOpenForRoom(): boolean { - return this._state.showRoomPanel; + return this.state.showRoomPanel; } get isOpenForGroup(): boolean { - return this._state.showGroupPanel; + return this.state.showGroupPanel; } - get roomPanelPhase(): string { - return this._state.lastRoomPhase; + get roomPanelPhase(): RightPanelPhases { + return this.state.lastRoomPhase; } - get groupPanelPhase(): string { - return this._state.lastGroupPhase; + get groupPanelPhase(): RightPanelPhases { + return this.state.lastGroupPhase; } - get visibleRoomPanelPhase(): string { + get visibleRoomPanelPhase(): RightPanelPhases { return this.isOpenForRoom ? this.roomPanelPhase : null; } - get visibleGroupPanelPhase(): string { + get visibleGroupPanelPhase(): RightPanelPhases { return this.isOpenForGroup ? this.groupPanelPhase : null; } get roomPanelPhaseParams(): any { - return this._state.lastRoomPhaseParams || {}; + return this.state.lastRoomPhaseParams || {}; } - _setState(newState) { - this._state = Object.assign(this._state, newState); + private setState(newState: Partial) { + this.state = Object.assign(this.state, newState); SettingsStore.setValue( "showRightPanelInRoom", null, SettingLevel.DEVICE, - this._state.showRoomPanel, + this.state.showRoomPanel, ); SettingsStore.setValue( "showRightPanelInGroup", null, SettingLevel.DEVICE, - this._state.showGroupPanel, + this.state.showGroupPanel, ); - if (RIGHT_PANEL_PHASES_NO_ARGS.includes(this._state.lastRoomPhase)) { + if (RIGHT_PANEL_PHASES_NO_ARGS.includes(this.state.lastRoomPhase)) { SettingsStore.setValue( "lastRightPanelPhaseForRoom", null, SettingLevel.DEVICE, - this._state.lastRoomPhase, + this.state.lastRoomPhase, ); } - if (RIGHT_PANEL_PHASES_NO_ARGS.includes(this._state.lastGroupPhase)) { + if (RIGHT_PANEL_PHASES_NO_ARGS.includes(this.state.lastGroupPhase)) { SettingsStore.setValue( "lastRightPanelPhaseForGroup", null, SettingLevel.DEVICE, - this._state.lastGroupPhase, + this.state.lastGroupPhase, ); } this.__emitChange(); } - __onDispatch(payload) { + __onDispatch(payload: ActionPayload) { switch (payload.action) { case 'view_room': case 'view_group': // Reset to the member list if we're viewing member info - if (MEMBER_INFO_PHASES.includes(this._state.lastRoomPhase)) { - this._setState({lastRoomPhase: RIGHT_PANEL_PHASES.RoomMemberList, lastRoomPhaseParams: {}}); + if (MEMBER_INFO_PHASES.includes(this.state.lastRoomPhase)) { + this.setState({lastRoomPhase: RightPanelPhases.RoomMemberList, lastRoomPhaseParams: {}}); } // Do the same for groups - if (this._state.lastGroupPhase === RIGHT_PANEL_PHASES.GroupMemberInfo) { - this._setState({lastGroupPhase: RIGHT_PANEL_PHASES.GroupMemberList}); + if (this.state.lastGroupPhase === RightPanelPhases.GroupMemberInfo) { + this.setState({lastGroupPhase: RightPanelPhases.GroupMemberList}); } break; - case 'set_right_panel_phase': { + case Action.SetRightPanelPhase: { let targetPhase = payload.phase; let refireParams = payload.refireParams; // redirect to EncryptionPanel if there is an ongoing verification request - if (targetPhase === RIGHT_PANEL_PHASES.RoomMemberInfo && payload.refireParams) { + if (targetPhase === RightPanelPhases.RoomMemberInfo && payload.refireParams) { const {member} = payload.refireParams; const pendingRequest = pendingVerificationRequestForUser(member); if (pendingRequest) { - targetPhase = RIGHT_PANEL_PHASES.EncryptionPanel; + targetPhase = RightPanelPhases.EncryptionPanel; refireParams = { verificationRequest: pendingRequest, member, }; } } - if (!RIGHT_PANEL_PHASES[targetPhase]) { + if (!RightPanelPhases[targetPhase]) { console.warn(`Tried to switch right panel to unknown phase: ${targetPhase}`); return; } if (GROUP_PHASES.includes(targetPhase)) { - if (targetPhase === this._state.lastGroupPhase) { - this._setState({ - showGroupPanel: !this._state.showGroupPanel, + if (targetPhase === this.state.lastGroupPhase) { + this.setState({ + showGroupPanel: !this.state.showGroupPanel, }); } else { - this._setState({ + this.setState({ lastGroupPhase: targetPhase, showGroupPanel: true, }); } } else { - if (targetPhase === this._state.lastRoomPhase && !refireParams) { - this._setState({ - showRoomPanel: !this._state.showRoomPanel, + if (targetPhase === this.state.lastRoomPhase && !refireParams) { + this.setState({ + showRoomPanel: !this.state.showRoomPanel, }); } else { - this._setState({ + this.setState({ lastRoomPhase: targetPhase, showRoomPanel: true, lastRoomPhaseParams: refireParams || {}, @@ -182,27 +197,27 @@ export default class RightPanelStore extends Store { // Let things like the member info panel actually open to the right member. dis.dispatch({ - action: 'after_right_panel_phase_change', + action: Action.AfterRightPanelPhaseChange, phase: targetPhase, ...(refireParams || {}), }); break; } - case 'toggle_right_panel': + case Action.ToggleRightPanel: if (payload.type === "room") { - this._setState({ showRoomPanel: !this._state.showRoomPanel }); + this.setState({ showRoomPanel: !this.state.showRoomPanel }); } else { // group - this._setState({ showGroupPanel: !this._state.showGroupPanel }); + this.setState({ showGroupPanel: !this.state.showGroupPanel }); } break; } } static getSharedInstance(): RightPanelStore { - if (!RightPanelStore._instance) { - RightPanelStore._instance = new RightPanelStore(); + if (!RightPanelStore.instance) { + RightPanelStore.instance = new RightPanelStore(); } - return RightPanelStore._instance; + return RightPanelStore.instance; } } diff --git a/src/stores/RightPanelStorePhases.js b/src/stores/RightPanelStorePhases.ts similarity index 57% rename from src/stores/RightPanelStorePhases.js rename to src/stores/RightPanelStorePhases.ts index d9af320233..4d05738425 100644 --- a/src/stores/RightPanelStorePhases.js +++ b/src/stores/RightPanelStorePhases.ts @@ -15,28 +15,28 @@ limitations under the License. */ // These are in their own file because of circular imports being a problem. -export const RIGHT_PANEL_PHASES = Object.freeze({ +export enum RightPanelPhases { // Room stuff - RoomMemberList: 'RoomMemberList', - FilePanel: 'FilePanel', - NotificationPanel: 'NotificationPanel', - RoomMemberInfo: 'RoomMemberInfo', - EncryptionPanel: 'EncryptionPanel', + RoomMemberList = 'RoomMemberList', + FilePanel = 'FilePanel', + NotificationPanel = 'NotificationPanel', + RoomMemberInfo = 'RoomMemberInfo', + EncryptionPanel = 'EncryptionPanel', - Room3pidMemberInfo: 'Room3pidMemberInfo', + Room3pidMemberInfo = 'Room3pidMemberInfo', // Group stuff - GroupMemberList: 'GroupMemberList', - GroupRoomList: 'GroupRoomList', - GroupRoomInfo: 'GroupRoomInfo', - GroupMemberInfo: 'GroupMemberInfo', -}); + GroupMemberList = 'GroupMemberList', + GroupRoomList = 'GroupRoomList', + GroupRoomInfo = 'GroupRoomInfo', + GroupMemberInfo = 'GroupMemberInfo', +}; // These are the phases that are safe to persist (the ones that don't require additional // arguments). export const RIGHT_PANEL_PHASES_NO_ARGS = [ - RIGHT_PANEL_PHASES.NotificationPanel, - RIGHT_PANEL_PHASES.FilePanel, - RIGHT_PANEL_PHASES.RoomMemberList, - RIGHT_PANEL_PHASES.GroupMemberList, - RIGHT_PANEL_PHASES.GroupRoomList, + RightPanelPhases.NotificationPanel, + RightPanelPhases.FilePanel, + RightPanelPhases.RoomMemberList, + RightPanelPhases.GroupMemberList, + RightPanelPhases.GroupRoomList, ]; From 1d3635e1c8c9758c9aa9720e4439749d7744c5bd Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 16:38:20 +0530 Subject: [PATCH 02/32] Replaced string actions with their corresponding types --- src/components/structures/LoggedInView.tsx | 5 ++- src/components/structures/RightPanel.js | 42 +++++++++---------- .../views/messages/MKeyVerificationRequest.js | 7 ++-- .../views/right_panel/GroupHeaderButtons.js | 36 ++++++++-------- .../views/right_panel/HeaderButtons.tsx | 3 +- .../views/right_panel/RoomHeaderButtons.js | 36 ++++++++-------- src/components/views/right_panel/UserInfo.js | 10 ++--- src/components/views/rooms/Stickerpicker.js | 3 +- .../views/toasts/VerificationRequestToast.tsx | 7 ++-- src/settings/Settings.js | 6 +-- src/stores/RightPanelStore.ts | 5 ++- src/verification.js | 15 +++---- 12 files changed, 91 insertions(+), 84 deletions(-) diff --git a/src/components/structures/LoggedInView.tsx b/src/components/structures/LoggedInView.tsx index 1f561e68ef..760ea52855 100644 --- a/src/components/structures/LoggedInView.tsx +++ b/src/components/structures/LoggedInView.tsx @@ -54,6 +54,7 @@ import LeftPanel from "./LeftPanel"; import CallContainer from '../views/voip/CallContainer'; import { ViewRoomDeltaPayload } from "../../dispatcher/payloads/ViewRoomDeltaPayload"; import RoomListStore from "../../stores/room-list/RoomListStore"; +import { ToggleRightPanelPayload } from "../../dispatcher/payloads/ToggleRightPanelPayload"; // We need to fetch each pinned message individually (if we don't already have it) // so each pinned message may trigger a request. Limit the number per room for sanity. @@ -472,8 +473,8 @@ class LoggedInView extends React.Component { case Key.PERIOD: if (ctrlCmdOnly && (this.props.page_type === "room_view" || this.props.page_type === "group_view")) { - dis.dispatch({ - action: 'toggle_right_panel', + dis.dispatch({ + action: Action.ToggleRightPanel, type: this.props.page_type === "room_view" ? "room" : "group", }); handled = true; diff --git a/src/components/structures/RightPanel.js b/src/components/structures/RightPanel.js index 776130e709..a4e3254e4c 100644 --- a/src/components/structures/RightPanel.js +++ b/src/components/structures/RightPanel.js @@ -26,7 +26,7 @@ import dis from '../../dispatcher/dispatcher'; import RateLimitedFunc from '../../ratelimitedfunc'; import { showGroupInviteDialog, showGroupAddRoomDialog } from '../../GroupAddressPicker'; import GroupStore from '../../stores/GroupStore'; -import {RIGHT_PANEL_PHASES, RIGHT_PANEL_PHASES_NO_ARGS} from "../../stores/RightPanelStorePhases"; +import {RightPanelPhases, RIGHT_PANEL_PHASES_NO_ARGS} from "../../stores/RightPanelStorePhases"; import RightPanelStore from "../../stores/RightPanelStore"; import MatrixClientContext from "../../contexts/MatrixClientContext"; import {Action} from "../../dispatcher/actions"; @@ -75,8 +75,8 @@ export default class RightPanel extends React.Component { const userForPanel = this._getUserForPanel(); if (this.props.groupId) { if (!RIGHT_PANEL_PHASES_NO_ARGS.includes(rps.groupPanelPhase)) { - dis.dispatch({action: "set_right_panel_phase", phase: RIGHT_PANEL_PHASES.GroupMemberList}); - return RIGHT_PANEL_PHASES.GroupMemberList; + dis.dispatch({action: Action.SetRightPanelPhase, phase: RightPanelPhases.GroupMemberList}); + return RightPanelPhases.GroupMemberList; } return rps.groupPanelPhase; } else if (userForPanel) { @@ -98,11 +98,11 @@ export default class RightPanel extends React.Component { ) { return rps.roomPanelPhase; } - return RIGHT_PANEL_PHASES.RoomMemberInfo; + return RightPanelPhases.RoomMemberInfo; } else { if (!RIGHT_PANEL_PHASES_NO_ARGS.includes(rps.roomPanelPhase)) { - dis.dispatch({action: "set_right_panel_phase", phase: RIGHT_PANEL_PHASES.RoomMemberList}); - return RIGHT_PANEL_PHASES.RoomMemberList; + dis.dispatch({action: Action.SetRightPanelPhase, phase: RightPanelPhases.RoomMemberList}); + return RightPanelPhases.RoomMemberList; } return rps.roomPanelPhase; } @@ -149,7 +149,7 @@ export default class RightPanel extends React.Component { onInviteToGroupButtonClick() { showGroupInviteDialog(this.props.groupId).then(() => { this.setState({ - phase: RIGHT_PANEL_PHASES.GroupMemberList, + phase: RightPanelPhases.GroupMemberList, }); }); } @@ -165,9 +165,9 @@ export default class RightPanel extends React.Component { return; } // redraw the badge on the membership list - if (this.state.phase === RIGHT_PANEL_PHASES.RoomMemberList && member.roomId === this.props.roomId) { + if (this.state.phase === RightPanelPhases.RoomMemberList && member.roomId === this.props.roomId) { this._delayedUpdate(); - } else if (this.state.phase === RIGHT_PANEL_PHASES.RoomMemberInfo && member.roomId === this.props.roomId && + } else if (this.state.phase === RightPanelPhases.RoomMemberInfo && member.roomId === this.props.roomId && member.userId === this.state.member.userId) { // refresh the member info (e.g. new power level) this._delayedUpdate(); @@ -175,7 +175,7 @@ export default class RightPanel extends React.Component { } onAction(payload) { - if (payload.action === "after_right_panel_phase_change") { + if (payload.action === Action.AfterRightPanelPhaseChange) { this.setState({ phase: payload.phase, groupRoomId: payload.groupRoomId, @@ -206,7 +206,7 @@ export default class RightPanel extends React.Component { // or the member list if we were in the member panel... phew. dis.dispatch({ action: Action.ViewUser, - member: this.state.phase === RIGHT_PANEL_PHASES.EncryptionPanel ? this.state.member : null, + member: this.state.phase === RightPanelPhases.EncryptionPanel ? this.state.member : null, }); } }; @@ -225,21 +225,21 @@ export default class RightPanel extends React.Component { let panel =
; switch (this.state.phase) { - case RIGHT_PANEL_PHASES.RoomMemberList: + case RightPanelPhases.RoomMemberList: if (this.props.roomId) { panel = ; } break; - case RIGHT_PANEL_PHASES.GroupMemberList: + case RightPanelPhases.GroupMemberList: if (this.props.groupId) { panel = ; } break; - case RIGHT_PANEL_PHASES.GroupRoomList: + case RightPanelPhases.GroupRoomList: panel = ; break; - case RIGHT_PANEL_PHASES.RoomMemberInfo: - case RIGHT_PANEL_PHASES.EncryptionPanel: + case RightPanelPhases.RoomMemberInfo: + case RightPanelPhases.EncryptionPanel: panel = ; break; - case RIGHT_PANEL_PHASES.Room3pidMemberInfo: + case RightPanelPhases.Room3pidMemberInfo: panel = ; break; - case RIGHT_PANEL_PHASES.GroupMemberInfo: + case RightPanelPhases.GroupMemberInfo: panel = ; break; - case RIGHT_PANEL_PHASES.GroupRoomInfo: + case RightPanelPhases.GroupRoomInfo: panel = ; break; - case RIGHT_PANEL_PHASES.NotificationPanel: + case RightPanelPhases.NotificationPanel: panel = ; break; - case RIGHT_PANEL_PHASES.FilePanel: + case RightPanelPhases.FilePanel: panel = ; break; } diff --git a/src/components/views/messages/MKeyVerificationRequest.js b/src/components/views/messages/MKeyVerificationRequest.js index a5b1ae26bb..01a5c2663e 100644 --- a/src/components/views/messages/MKeyVerificationRequest.js +++ b/src/components/views/messages/MKeyVerificationRequest.js @@ -22,7 +22,8 @@ import { _t } from '../../../languageHandler'; import {getNameForEventRoom, userLabelForEventRoom} from '../../../utils/KeyVerificationStateObserver'; import dis from "../../../dispatcher/dispatcher"; -import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; +import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; +import {Action} from "../../../dispatcher/actions"; export default class MKeyVerificationRequest extends React.Component { constructor(props) { @@ -48,8 +49,8 @@ export default class MKeyVerificationRequest extends React.Component { const {verificationRequest} = this.props.mxEvent; const member = MatrixClientPeg.get().getUser(verificationRequest.otherUserId); dis.dispatch({ - action: "set_right_panel_phase", - phase: RIGHT_PANEL_PHASES.EncryptionPanel, + action: Action.SetRightPanelPhase, + phase: RightPanelPhases.EncryptionPanel, refireParams: {verificationRequest, member}, }); }; diff --git a/src/components/views/right_panel/GroupHeaderButtons.js b/src/components/views/right_panel/GroupHeaderButtons.js index 33d9325433..fb589b1a0f 100644 --- a/src/components/views/right_panel/GroupHeaderButtons.js +++ b/src/components/views/right_panel/GroupHeaderButtons.js @@ -21,23 +21,23 @@ limitations under the License. import React from 'react'; import { _t } from '../../../languageHandler'; import HeaderButton from './HeaderButton'; -import HeaderButtons, {HEADER_KIND_GROUP} from './HeaderButtons'; -import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; +import HeaderButtons, {HeaderKind} from './HeaderButtons'; +import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {Action} from "../../../dispatcher/actions"; import {ActionPayload} from "../../../dispatcher/payloads"; const GROUP_PHASES = [ - RIGHT_PANEL_PHASES.GroupMemberInfo, - RIGHT_PANEL_PHASES.GroupMemberList, + RightPanelPhases.GroupMemberInfo, + RightPanelPhases.GroupMemberList, ]; const ROOM_PHASES = [ - RIGHT_PANEL_PHASES.GroupRoomList, - RIGHT_PANEL_PHASES.GroupRoomInfo, + RightPanelPhases.GroupRoomList, + RightPanelPhases.GroupRoomInfo, ]; export default class GroupHeaderButtons extends HeaderButtons { constructor(props) { - super(props, HEADER_KIND_GROUP); + super(props, HeaderKind.Group); this._onMembersClicked = this._onMembersClicked.bind(this); this._onRoomsClicked = this._onRoomsClicked.bind(this); } @@ -47,39 +47,39 @@ export default class GroupHeaderButtons extends HeaderButtons { if (payload.action === Action.ViewUser) { if (payload.member) { - this.setPhase(RIGHT_PANEL_PHASES.RoomMemberInfo, {member: payload.member}); + this.setPhase(RightPanelPhases.RoomMemberInfo, {member: payload.member}); } else { - this.setPhase(RIGHT_PANEL_PHASES.GroupMemberList); + this.setPhase(RightPanelPhases.GroupMemberList); } } else if (payload.action === "view_group") { - this.setPhase(RIGHT_PANEL_PHASES.GroupMemberList); + this.setPhase(RightPanelPhases.GroupMemberList); } else if (payload.action === "view_group_room") { this.setPhase( - RIGHT_PANEL_PHASES.GroupRoomInfo, + RightPanelPhases.GroupRoomInfo, {groupRoomId: payload.groupRoomId, groupId: payload.groupId}, ); } else if (payload.action === "view_group_room_list") { - this.setPhase(RIGHT_PANEL_PHASES.GroupRoomList); + this.setPhase(RightPanelPhases.GroupRoomList); } else if (payload.action === "view_group_member_list") { - this.setPhase(RIGHT_PANEL_PHASES.GroupMemberList); + this.setPhase(RightPanelPhases.GroupMemberList); } else if (payload.action === "view_group_user") { - this.setPhase(RIGHT_PANEL_PHASES.GroupMemberInfo, {member: payload.member}); + this.setPhase(RightPanelPhases.GroupMemberInfo, {member: payload.member}); } } _onMembersClicked() { - if (this.state.phase === RIGHT_PANEL_PHASES.GroupMemberInfo) { + if (this.state.phase === RightPanelPhases.GroupMemberInfo) { // send the active phase to trigger a toggle - this.setPhase(RIGHT_PANEL_PHASES.GroupMemberInfo); + this.setPhase(RightPanelPhases.GroupMemberInfo); } else { // This toggles for us, if needed - this.setPhase(RIGHT_PANEL_PHASES.GroupMemberList); + this.setPhase(RightPanelPhases.GroupMemberList); } } _onRoomsClicked() { // This toggles for us, if needed - this.setPhase(RIGHT_PANEL_PHASES.GroupRoomList); + this.setPhase(RightPanelPhases.GroupRoomList); } renderButtons() { diff --git a/src/components/views/right_panel/HeaderButtons.tsx b/src/components/views/right_panel/HeaderButtons.tsx index 099e785ada..9e57eab5eb 100644 --- a/src/components/views/right_panel/HeaderButtons.tsx +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -23,6 +23,7 @@ import dis from '../../../dispatcher/dispatcher'; import RightPanelStore from "../../../stores/RightPanelStore"; import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {Action} from '../../../dispatcher/actions'; +import {SetRightPanelPhasePayload} from '../../../dispatcher/payloads/SetRightPanelPhasePayload'; export enum HeaderKind { Room = "room", @@ -65,7 +66,7 @@ export default class HeaderButtons extends React.Component { } setPhase(phase: RightPanelPhases, extras) { - dis.dispatch({ + dis.dispatch({ action: Action.SetRightPanelPhase, phase: phase, refireParams: extras, diff --git a/src/components/views/right_panel/RoomHeaderButtons.js b/src/components/views/right_panel/RoomHeaderButtons.js index 838727981d..8620d5b485 100644 --- a/src/components/views/right_panel/RoomHeaderButtons.js +++ b/src/components/views/right_panel/RoomHeaderButtons.js @@ -21,21 +21,21 @@ limitations under the License. import React from 'react'; import { _t } from '../../../languageHandler'; import HeaderButton from './HeaderButton'; -import HeaderButtons, {HEADER_KIND_ROOM} from './HeaderButtons'; -import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; +import HeaderButtons, {HeaderKind} from './HeaderButtons'; +import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {Action} from "../../../dispatcher/actions"; import {ActionPayload} from "../../../dispatcher/payloads"; const MEMBER_PHASES = [ - RIGHT_PANEL_PHASES.RoomMemberList, - RIGHT_PANEL_PHASES.RoomMemberInfo, - RIGHT_PANEL_PHASES.EncryptionPanel, - RIGHT_PANEL_PHASES.Room3pidMemberInfo, + RightPanelPhases.RoomMemberList, + RightPanelPhases.RoomMemberInfo, + RightPanelPhases.EncryptionPanel, + RightPanelPhases.Room3pidMemberInfo, ]; export default class RoomHeaderButtons extends HeaderButtons { constructor(props) { - super(props, HEADER_KIND_ROOM); + super(props, HeaderKind.Room); this._onMembersClicked = this._onMembersClicked.bind(this); this._onFilesClicked = this._onFilesClicked.bind(this); this._onNotificationsClicked = this._onNotificationsClicked.bind(this); @@ -45,38 +45,38 @@ export default class RoomHeaderButtons extends HeaderButtons { super.onAction(payload); if (payload.action === Action.ViewUser) { if (payload.member) { - this.setPhase(RIGHT_PANEL_PHASES.RoomMemberInfo, {member: payload.member}); + this.setPhase(RightPanelPhases.RoomMemberInfo, {member: payload.member}); } else { - this.setPhase(RIGHT_PANEL_PHASES.RoomMemberList); + this.setPhase(RightPanelPhases.RoomMemberList); } } else if (payload.action === "view_3pid_invite") { if (payload.event) { - this.setPhase(RIGHT_PANEL_PHASES.Room3pidMemberInfo, {event: payload.event}); + this.setPhase(RightPanelPhases.Room3pidMemberInfo, {event: payload.event}); } else { - this.setPhase(RIGHT_PANEL_PHASES.RoomMemberList); + this.setPhase(RightPanelPhases.RoomMemberList); } } } _onMembersClicked() { - if (this.state.phase === RIGHT_PANEL_PHASES.RoomMemberInfo) { + if (this.state.phase === RightPanelPhases.RoomMemberInfo) { // send the active phase to trigger a toggle // XXX: we should pass refireParams here but then it won't collapse as we desire it to - this.setPhase(RIGHT_PANEL_PHASES.RoomMemberInfo); + this.setPhase(RightPanelPhases.RoomMemberInfo); } else { // This toggles for us, if needed - this.setPhase(RIGHT_PANEL_PHASES.RoomMemberList); + this.setPhase(RightPanelPhases.RoomMemberList); } } _onFilesClicked() { // This toggles for us, if needed - this.setPhase(RIGHT_PANEL_PHASES.FilePanel); + this.setPhase(RightPanelPhases.FilePanel); } _onNotificationsClicked() { // This toggles for us, if needed - this.setPhase(RIGHT_PANEL_PHASES.NotificationPanel); + this.setPhase(RightPanelPhases.NotificationPanel); } renderButtons() { @@ -89,13 +89,13 @@ export default class RoomHeaderButtons extends HeaderButtons { />, , , diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js index 719a64063d..20168faede 100644 --- a/src/components/views/right_panel/UserInfo.js +++ b/src/components/views/right_panel/UserInfo.js @@ -40,7 +40,7 @@ import E2EIcon from "../rooms/E2EIcon"; import {useEventEmitter} from "../../../hooks/useEventEmitter"; import {textualPowerLevel} from '../../../Roles'; import MatrixClientContext from "../../../contexts/MatrixClientContext"; -import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; +import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import EncryptionPanel from "./EncryptionPanel"; import { useAsyncMemo } from '../../../hooks/useAsyncMemo'; import { verifyUser, legacyVerifyUser, verifyDevice } from '../../../verification'; @@ -1480,7 +1480,7 @@ const UserInfoHeader = ({onClose, member, e2eStatus}) => { ; }; -const UserInfo = ({user, groupId, roomId, onClose, phase=RIGHT_PANEL_PHASES.RoomMemberInfo, ...props}) => { +const UserInfo = ({user, groupId, roomId, onClose, phase=RightPanelPhases.RoomMemberInfo, ...props}) => { const cli = useContext(MatrixClientContext); // Load room if we are given a room id and memoize it @@ -1500,8 +1500,8 @@ const UserInfo = ({user, groupId, roomId, onClose, phase=RIGHT_PANEL_PHASES.Room let content; switch (phase) { - case RIGHT_PANEL_PHASES.RoomMemberInfo: - case RIGHT_PANEL_PHASES.GroupMemberInfo: + case RightPanelPhases.RoomMemberInfo: + case RightPanelPhases.GroupMemberInfo: content = ( ); break; - case RIGHT_PANEL_PHASES.EncryptionPanel: + case RightPanelPhases.EncryptionPanel: classes.push("mx_UserInfo_smallAvatar"); content = ( diff --git a/src/components/views/rooms/Stickerpicker.js b/src/components/views/rooms/Stickerpicker.js index 2e56e49be1..b73f03a9c5 100644 --- a/src/components/views/rooms/Stickerpicker.js +++ b/src/components/views/rooms/Stickerpicker.js @@ -28,6 +28,7 @@ import SettingsStore from "../../../settings/SettingsStore"; import {ContextMenu} from "../../structures/ContextMenu"; import {WidgetType} from "../../../widgets/WidgetType"; import AccessibleTooltipButton from "../elements/AccessibleTooltipButton"; +import {Action} from "../../../dispatcher/actions"; // This should be below the dialog level (4000), but above the rest of the UI (1000-2000). // We sit in a context menu, so this should be given to the context menu. @@ -181,7 +182,7 @@ export default class Stickerpicker extends React.Component { case "stickerpicker_close": this.setState({showStickers: false}); break; - case "after_right_panel_phase_change": + case Action.AfterRightPanelPhaseChange: case "show_left_panel": case "hide_left_panel": this.setState({showStickers: false}); diff --git a/src/components/views/toasts/VerificationRequestToast.tsx b/src/components/views/toasts/VerificationRequestToast.tsx index cc41e81b33..89c826eac4 100644 --- a/src/components/views/toasts/VerificationRequestToast.tsx +++ b/src/components/views/toasts/VerificationRequestToast.tsx @@ -19,7 +19,7 @@ import React from "react"; import * as sdk from "../../../index"; import { _t } from '../../../languageHandler'; import {MatrixClientPeg} from '../../../MatrixClientPeg'; -import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; +import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {userLabelForEventRoom} from "../../../utils/KeyVerificationStateObserver"; import dis from "../../../dispatcher/dispatcher"; import ToastStore from "../../../stores/ToastStore"; @@ -27,6 +27,7 @@ import Modal from "../../../Modal"; import GenericToast from "./GenericToast"; import {VerificationRequest} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; import {DeviceInfo} from "matrix-js-sdk/src/crypto/deviceinfo"; +import {Action} from "../../../dispatcher/actions"; interface IProps { toastKey: string; @@ -105,8 +106,8 @@ export default class VerificationRequestToast extends React.PureComponent { private static instance: RightPanelStore; private state: RightPanelStoreState; diff --git a/src/verification.js b/src/verification.js index 1dccb7dc28..36fb8b0e4f 100644 --- a/src/verification.js +++ b/src/verification.js @@ -19,10 +19,11 @@ import dis from "./dispatcher/dispatcher"; import Modal from './Modal'; import * as sdk from './index'; import { _t } from './languageHandler'; -import {RIGHT_PANEL_PHASES} from "./stores/RightPanelStorePhases"; +import {RightPanelPhases} from "./stores/RightPanelStorePhases"; import {findDMForUser} from './createRoom'; import {accessSecretStorage} from './CrossSigningManager'; import {verificationMethods} from 'matrix-js-sdk/src/crypto'; +import {Action} from './dispatcher/actions'; async function enable4SIfNeeded() { const cli = MatrixClientPeg.get(); @@ -91,8 +92,8 @@ export async function verifyDevice(user, device) { verificationMethods.SAS, ); dis.dispatch({ - action: "set_right_panel_phase", - phase: RIGHT_PANEL_PHASES.EncryptionPanel, + action: Action.SetRightPanelPhase, + phase: RightPanelPhases.EncryptionPanel, refireParams: {member: user, verificationRequestPromise}, }); } else if (action === "legacy") { @@ -120,8 +121,8 @@ export async function legacyVerifyUser(user) { } const verificationRequestPromise = cli.requestVerification(user.userId); dis.dispatch({ - action: "set_right_panel_phase", - phase: RIGHT_PANEL_PHASES.EncryptionPanel, + action: Action.SetRightPanelPhase, + phase: RightPanelPhases.EncryptionPanel, refireParams: {member: user, verificationRequestPromise}, }); } @@ -132,8 +133,8 @@ export async function verifyUser(user) { } const existingRequest = pendingVerificationRequestForUser(user); dis.dispatch({ - action: "set_right_panel_phase", - phase: RIGHT_PANEL_PHASES.EncryptionPanel, + action: Action.SetRightPanelPhase, + phase: RightPanelPhases.EncryptionPanel, refireParams: { member: user, verificationRequest: existingRequest, From 2c8b5b49ed1d26ffb0f1c35b5f0346788c579aa1 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 16:41:57 +0530 Subject: [PATCH 03/32] lint --- src/components/views/right_panel/HeaderButton.tsx | 2 +- src/stores/RightPanelStorePhases.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/right_panel/HeaderButton.tsx b/src/components/views/right_panel/HeaderButton.tsx index a64ed0a980..563af90432 100644 --- a/src/components/views/right_panel/HeaderButton.tsx +++ b/src/components/views/right_panel/HeaderButton.tsx @@ -37,7 +37,7 @@ interface IProps { name: string; // Button title title: string; -}; +} export default class HeaderButton extends React.Component { constructor(props: IProps) { diff --git a/src/stores/RightPanelStorePhases.ts b/src/stores/RightPanelStorePhases.ts index 4d05738425..9045b17193 100644 --- a/src/stores/RightPanelStorePhases.ts +++ b/src/stores/RightPanelStorePhases.ts @@ -29,7 +29,7 @@ export enum RightPanelPhases { GroupRoomList = 'GroupRoomList', GroupRoomInfo = 'GroupRoomInfo', GroupMemberInfo = 'GroupMemberInfo', -}; +} // These are the phases that are safe to persist (the ones that don't require additional // arguments). From 1c913b85e2217813402b013d76fc4267085f11fc Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 16:47:07 +0530 Subject: [PATCH 04/32] Replace strings action with correspoding type --- src/components/views/groups/GroupMemberList.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/views/groups/GroupMemberList.js b/src/components/views/groups/GroupMemberList.js index 7b643c7346..31c6fe5d07 100644 --- a/src/components/views/groups/GroupMemberList.js +++ b/src/components/views/groups/GroupMemberList.js @@ -25,7 +25,10 @@ import PropTypes from 'prop-types'; import { showGroupInviteDialog } from '../../../GroupAddressPicker'; import AccessibleButton from '../elements/AccessibleButton'; import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; +import TintableSvg from '../elements/TintableSvg'; +import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import AutoHideScrollbar from "../../structures/AutoHideScrollbar"; +import {Action} from "../../../dispatcher/actions"; const INITIAL_LOAD_NUM_MEMBERS = 30; @@ -164,8 +167,8 @@ export default createReactClass({ onInviteToGroupButtonClick() { showGroupInviteDialog(this.props.groupId).then(() => { dis.dispatch({ - action: 'set_right_panel_phase', - phase: RIGHT_PANEL_PHASES.GroupMemberList, + action: Action.SetRightPanelPhase, + phase: RightPanelPhases.GroupMemberList, groupId: this.props.groupId, }); }); From 0f59e34a3a12d08413e57b4e3031016cb373228e Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 16:47:44 +0530 Subject: [PATCH 05/32] Nest groupId in refireParams to match types --- src/components/views/groups/GroupMemberList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/groups/GroupMemberList.js b/src/components/views/groups/GroupMemberList.js index 31c6fe5d07..e7143f0dd2 100644 --- a/src/components/views/groups/GroupMemberList.js +++ b/src/components/views/groups/GroupMemberList.js @@ -169,7 +169,7 @@ export default createReactClass({ dis.dispatch({ action: Action.SetRightPanelPhase, phase: RightPanelPhases.GroupMemberList, - groupId: this.props.groupId, + refireParams: { groupId: this.props.groupId }, }); }); }, From 23e4b67a69a61cd406012ee4b1c4344734e99664 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 17:14:20 +0530 Subject: [PATCH 06/32] Convert HeaderButton to TS --- src/components/views/right_panel/HeaderButton.tsx | 2 +- src/components/views/right_panel/HeaderButtons.tsx | 4 ++-- .../{RoomHeaderButtons.js => RoomHeaderButtons.tsx} | 0 src/dispatcher/payloads/SetRightPanelPhasePayload.ts | 10 ++++++---- 4 files changed, 9 insertions(+), 7 deletions(-) rename src/components/views/right_panel/{RoomHeaderButtons.js => RoomHeaderButtons.tsx} (100%) diff --git a/src/components/views/right_panel/HeaderButton.tsx b/src/components/views/right_panel/HeaderButton.tsx index 563af90432..022a993c65 100644 --- a/src/components/views/right_panel/HeaderButton.tsx +++ b/src/components/views/right_panel/HeaderButton.tsx @@ -29,7 +29,7 @@ interface IProps { // click handler onClick: () => void; // The badge to display above the icon - badge: React.ReactNode; + badge?: React.ReactNode; // The parameters to track the click event analytics: string[]; diff --git a/src/components/views/right_panel/HeaderButtons.tsx b/src/components/views/right_panel/HeaderButtons.tsx index 9e57eab5eb..8141e8a9cc 100644 --- a/src/components/views/right_panel/HeaderButtons.tsx +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -23,7 +23,7 @@ import dis from '../../../dispatcher/dispatcher'; import RightPanelStore from "../../../stores/RightPanelStore"; import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {Action} from '../../../dispatcher/actions'; -import {SetRightPanelPhasePayload} from '../../../dispatcher/payloads/SetRightPanelPhasePayload'; +import {SetRightPanelPhasePayload, SetRightPanelPhaseRefireParams} from '../../../dispatcher/payloads/SetRightPanelPhasePayload'; export enum HeaderKind { Room = "room", @@ -65,7 +65,7 @@ export default class HeaderButtons extends React.Component { // Ignore - intended to be overridden by subclasses } - setPhase(phase: RightPanelPhases, extras) { + setPhase(phase: RightPanelPhases, extras?: Partial) { dis.dispatch({ action: Action.SetRightPanelPhase, phase: phase, diff --git a/src/components/views/right_panel/RoomHeaderButtons.js b/src/components/views/right_panel/RoomHeaderButtons.tsx similarity index 100% rename from src/components/views/right_panel/RoomHeaderButtons.js rename to src/components/views/right_panel/RoomHeaderButtons.tsx diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts index 8d8eca762c..94e38b7ce6 100644 --- a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -29,8 +29,10 @@ export interface SetRightPanelPhasePayload extends ActionPayload { export interface SetRightPanelPhaseRefireParams { // XXX: Fix after the types are defiend in matrix-js-sdk // No appropriate types exist yet for the fields - members: any; - verificationRequest: typeof VerificationRequest; - groudId: string; - groupRoomId: string; + members?: any; + verificationRequest?: typeof VerificationRequest; + groudId?: string; + groupRoomId?: string; + // XXX: 'view_3pid_invite' action's payload + event?: any; } From 887d507772af9c464e193de10cc07c3d04e4cb3c Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 17:15:12 +0530 Subject: [PATCH 07/32] Fix key to match SetRightPanelPhasePayload's key member -> members --- src/components/views/right_panel/RoomHeaderButtons.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/right_panel/RoomHeaderButtons.tsx b/src/components/views/right_panel/RoomHeaderButtons.tsx index 8620d5b485..74bd2c51fc 100644 --- a/src/components/views/right_panel/RoomHeaderButtons.tsx +++ b/src/components/views/right_panel/RoomHeaderButtons.tsx @@ -45,7 +45,7 @@ export default class RoomHeaderButtons extends HeaderButtons { super.onAction(payload); if (payload.action === Action.ViewUser) { if (payload.member) { - this.setPhase(RightPanelPhases.RoomMemberInfo, {member: payload.member}); + this.setPhase(RightPanelPhases.RoomMemberInfo, {members: payload.member}); } else { this.setPhase(RightPanelPhases.RoomMemberList); } From a4959f43d2882cf42bdd06385657e0f11db7c55a Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 17:56:53 +0530 Subject: [PATCH 08/32] Convert GroupHeaderButtons to TS Fix typo in SetRightPanelPhasePayload --- .../{GroupHeaderButtons.js => GroupHeaderButtons.tsx} | 11 +++++++---- src/dispatcher/payloads/SetRightPanelPhasePayload.ts | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) rename src/components/views/right_panel/{GroupHeaderButtons.js => GroupHeaderButtons.tsx} (93%) diff --git a/src/components/views/right_panel/GroupHeaderButtons.js b/src/components/views/right_panel/GroupHeaderButtons.tsx similarity index 93% rename from src/components/views/right_panel/GroupHeaderButtons.js rename to src/components/views/right_panel/GroupHeaderButtons.tsx index fb589b1a0f..7bd6d90038 100644 --- a/src/components/views/right_panel/GroupHeaderButtons.js +++ b/src/components/views/right_panel/GroupHeaderButtons.tsx @@ -25,6 +25,7 @@ import HeaderButtons, {HeaderKind} from './HeaderButtons'; import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {Action} from "../../../dispatcher/actions"; import {ActionPayload} from "../../../dispatcher/payloads"; +import {ViewUserPayload} from "../../../dispatcher/payloads/ViewUserPayload"; const GROUP_PHASES = [ RightPanelPhases.GroupMemberInfo, @@ -35,8 +36,10 @@ const ROOM_PHASES = [ RightPanelPhases.GroupRoomInfo, ]; +interface IProps {} + export default class GroupHeaderButtons extends HeaderButtons { - constructor(props) { + constructor(props: IProps) { super(props, HeaderKind.Group); this._onMembersClicked = this._onMembersClicked.bind(this); this._onRoomsClicked = this._onRoomsClicked.bind(this); @@ -46,8 +49,8 @@ export default class GroupHeaderButtons extends HeaderButtons { super.onAction(payload); if (payload.action === Action.ViewUser) { - if (payload.member) { - this.setPhase(RightPanelPhases.RoomMemberInfo, {member: payload.member}); + if ((payload as ViewUserPayload).member) { + this.setPhase(RightPanelPhases.RoomMemberInfo, {members: payload.member}); } else { this.setPhase(RightPanelPhases.GroupMemberList); } @@ -63,7 +66,7 @@ export default class GroupHeaderButtons extends HeaderButtons { } else if (payload.action === "view_group_member_list") { this.setPhase(RightPanelPhases.GroupMemberList); } else if (payload.action === "view_group_user") { - this.setPhase(RightPanelPhases.GroupMemberInfo, {member: payload.member}); + this.setPhase(RightPanelPhases.GroupMemberInfo, {members: payload.member}); } } diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts index 94e38b7ce6..4b360d294a 100644 --- a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -31,7 +31,7 @@ export interface SetRightPanelPhaseRefireParams { // No appropriate types exist yet for the fields members?: any; verificationRequest?: typeof VerificationRequest; - groudId?: string; + groupId?: string; groupRoomId?: string; // XXX: 'view_3pid_invite' action's payload event?: any; From dac19cffce4ffc4a329aad424900187755a3cddc Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 22:44:56 +0530 Subject: [PATCH 09/32] Convert EncryptionInfo to TS --- .../{EncryptionInfo.js => EncryptionInfo.tsx} | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) rename src/components/views/right_panel/{EncryptionInfo.js => EncryptionInfo.tsx} (87%) diff --git a/src/components/views/right_panel/EncryptionInfo.js b/src/components/views/right_panel/EncryptionInfo.tsx similarity index 87% rename from src/components/views/right_panel/EncryptionInfo.js rename to src/components/views/right_panel/EncryptionInfo.tsx index 007e2831ce..2d0e3f7d46 100644 --- a/src/components/views/right_panel/EncryptionInfo.js +++ b/src/components/views/right_panel/EncryptionInfo.tsx @@ -15,10 +15,10 @@ limitations under the License. */ import React from "react"; -import PropTypes from "prop-types"; import * as sdk from "../../../index"; import {_t} from "../../../languageHandler"; +import {RoomMember} from "matrix-js-sdk/src/models/room-member" export const PendingActionSpinner = ({text}) => { const Spinner = sdk.getComponent('elements.Spinner'); @@ -28,7 +28,17 @@ export const PendingActionSpinner = ({text}) => {
; }; -const EncryptionInfo = ({ +interface IProps { + waitingForOtherParty: boolean; + waitingForNetwork: boolean; + member: RoomMember; + onStartVerification: () => Promise; + isRoomEncrypted: boolean; + inDialog: boolean; + isSelfVerification: boolean; +} + +const EncryptionInfo: React.FC = ({ waitingForOtherParty, waitingForNetwork, member, @@ -36,10 +46,10 @@ const EncryptionInfo = ({ isRoomEncrypted, inDialog, isSelfVerification, -}) => { - let content; +}: IProps) => { + let content: JSX.Element; if (waitingForOtherParty || waitingForNetwork) { - let text; + let text: string; if (waitingForOtherParty) { if (isSelfVerification) { text = _t("Waiting for you to accept on your other session…"); @@ -61,7 +71,7 @@ const EncryptionInfo = ({ ); } - let description; + let description: JSX.Element; if (isRoomEncrypted) { description = (
@@ -97,10 +107,5 @@ const EncryptionInfo = ({
; }; -EncryptionInfo.propTypes = { - member: PropTypes.object.isRequired, - onStartVerification: PropTypes.func.isRequired, - request: PropTypes.object, -}; export default EncryptionInfo; From 2f0caab8514261f28ef58a9a2a70668bcf61ffc8 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 22:45:22 +0530 Subject: [PATCH 10/32] "fix" type for members in SetRightPanelPhasePayload --- src/dispatcher/payloads/SetRightPanelPhasePayload.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts index 4b360d294a..49e3032d4f 100644 --- a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {VerificationRequest} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; +import { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { RightPanelPhases } from "../../stores/RightPanelStorePhases"; import { ActionPayload } from "../payloads"; import { Action } from "../actions"; @@ -29,7 +30,7 @@ export interface SetRightPanelPhasePayload extends ActionPayload { export interface SetRightPanelPhaseRefireParams { // XXX: Fix after the types are defiend in matrix-js-sdk // No appropriate types exist yet for the fields - members?: any; + members?: RoomMember; verificationRequest?: typeof VerificationRequest; groupId?: string; groupRoomId?: string; From 36974c423162eb25b52c7d0c572a8582f72bebce Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 23:09:11 +0530 Subject: [PATCH 11/32] Convert EncryptionPanel to TS --- ...EncryptionPanel.js => EncryptionPanel.tsx} | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) rename src/components/views/right_panel/{EncryptionPanel.js => EncryptionPanel.tsx} (91%) diff --git a/src/components/views/right_panel/EncryptionPanel.js b/src/components/views/right_panel/EncryptionPanel.tsx similarity index 91% rename from src/components/views/right_panel/EncryptionPanel.js rename to src/components/views/right_panel/EncryptionPanel.tsx index e9f94729fa..77af180db1 100644 --- a/src/components/views/right_panel/EncryptionPanel.js +++ b/src/components/views/right_panel/EncryptionPanel.tsx @@ -15,7 +15,6 @@ limitations under the License. */ import React, {useCallback, useEffect, useState} from "react"; -import PropTypes from "prop-types"; import EncryptionInfo from "./EncryptionInfo"; import VerificationPanel from "./VerificationPanel"; @@ -26,11 +25,23 @@ import Modal from "../../../Modal"; import {PHASE_REQUESTED, PHASE_UNSENT} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; import * as sdk from "../../../index"; import {_t} from "../../../languageHandler"; +import { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; // cancellation codes which constitute a key mismatch const MISMATCHES = ["m.key_mismatch", "m.user_error", "m.mismatched_sas"]; -const EncryptionPanel = (props) => { +interface IProps { + member: RoomMember; + onClose: () => void; + verificationRequest: VerificationRequest; + verificationRequestPromise: Promise; + layout: string; + inDialog: boolean; + isRoomEncrypted: boolean; +} + +const EncryptionPanel: React.FC = (props: IProps) => { const {verificationRequest, verificationRequestPromise, member, onClose, layout, isRoomEncrypted} = props; const [request, setRequest] = useState(verificationRequest); // state to show a spinner immediately after clicking "start verification", @@ -90,7 +101,7 @@ const EncryptionPanel = (props) => { } }, [request]); - let cancelButton; + let cancelButton: JSX.Element; if (layout !== "dialog" && request && request.pending) { const AccessibleButton = sdk.getComponent("elements.AccessibleButton"); cancelButton = ( { ); } }; -EncryptionPanel.propTypes = { - member: PropTypes.object.isRequired, - onClose: PropTypes.func.isRequired, - verificationRequest: PropTypes.object, - layout: PropTypes.string, - inDialog: PropTypes.bool, -}; export default EncryptionPanel; From 3e64ec11c01c06668e5d63f941e551a1f18d3ebf Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 23:09:24 +0530 Subject: [PATCH 12/32] lint --- src/components/views/right_panel/EncryptionInfo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/right_panel/EncryptionInfo.tsx b/src/components/views/right_panel/EncryptionInfo.tsx index 2d0e3f7d46..f62af65543 100644 --- a/src/components/views/right_panel/EncryptionInfo.tsx +++ b/src/components/views/right_panel/EncryptionInfo.tsx @@ -18,7 +18,7 @@ import React from "react"; import * as sdk from "../../../index"; import {_t} from "../../../languageHandler"; -import {RoomMember} from "matrix-js-sdk/src/models/room-member" +import {RoomMember} from "matrix-js-sdk/src/models/room-member"; export const PendingActionSpinner = ({text}) => { const Spinner = sdk.getComponent('elements.Spinner'); From 8fac7a81672a7ee5aa4612abca4c0dc2f4bd580c Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 23:51:46 +0530 Subject: [PATCH 13/32] Convert VerificationPanel to TS --- ...ficationPanel.js => VerificationPanel.tsx} | 153 +++++++++++------- 1 file changed, 93 insertions(+), 60 deletions(-) rename src/components/views/right_panel/{VerificationPanel.js => VerificationPanel.tsx} (79%) diff --git a/src/components/views/right_panel/VerificationPanel.js b/src/components/views/right_panel/VerificationPanel.tsx similarity index 79% rename from src/components/views/right_panel/VerificationPanel.js rename to src/components/views/right_panel/VerificationPanel.tsx index 0b6790eac8..c2c065c022 100644 --- a/src/components/views/right_panel/VerificationPanel.js +++ b/src/components/views/right_panel/VerificationPanel.tsx @@ -15,12 +15,15 @@ limitations under the License. */ import React from "react"; -import PropTypes from "prop-types"; import {MatrixClientPeg} from "../../../MatrixClientPeg"; import * as sdk from '../../../index'; import {verificationMethods} from 'matrix-js-sdk/src/crypto'; import {SCAN_QR_CODE_METHOD} from "matrix-js-sdk/src/crypto/verification/QRCode"; +import {VerificationRequest} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; +import {RoomMember} from "matrix-js-sdk/src/models/room-member"; +import {ReciprocateQRCode} from "matrix-js-sdk/src/crypto/verification/QRCode"; +import {SAS} from "matrix-js-sdk/src/crypto/verification/SAS"; import VerificationQRCode from "../elements/crypto/VerificationQRCode"; import {_t} from "../../../languageHandler"; @@ -36,37 +39,67 @@ import { } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; import Spinner from "../elements/Spinner"; -export default class VerificationPanel extends React.PureComponent { - static propTypes = { - layout: PropTypes.string, - request: PropTypes.object.isRequired, - member: PropTypes.object.isRequired, - phase: PropTypes.oneOf([ - PHASE_UNSENT, - PHASE_REQUESTED, - PHASE_READY, - PHASE_STARTED, - PHASE_CANCELLED, - PHASE_DONE, - ]).isRequired, - onClose: PropTypes.func.isRequired, - isRoomEncrypted: PropTypes.bool, - }; +// XXX: Should be defined in matrix-js-sdk +enum VerificationPhase { + PHASE_UNSENT, + PHASE_REQUESTED, + PHASE_READY, + PHASE_DONE, + PHASE_STARTED, + PHASE_CANCELLED, +} - constructor(props) { +interface IProps { + layout: string; + request: VerificationRequest; + member: RoomMember; + phase: VerificationPhase; + onClose: () => void; + isRoomEncrypted: boolean; + inDialog: boolean; + key: any; +} + +interface IState { + sasEvent?: SAS; + emojiButtonClicked?: boolean; + reciprocateButtonClicked?: boolean; + reciprocateQREvent?: ReciprocateQRCode; +} + +export default class VerificationPanel extends React.PureComponent { + /* static propTypes = { */ + /* layout: PropTypes.string, */ + /* request: PropTypes.object.isRequired, */ + /* member: PropTypes.object.isRequired, */ + /* phase: PropTypes.oneOf([ */ + /* PHASE_UNSENT, */ + /* PHASE_REQUESTED, */ + /* PHASE_READY, */ + /* PHASE_STARTED, */ + /* PHASE_CANCELLED, */ + /* PHASE_DONE, */ + /* ]).isRequired, */ + /* onClose: PropTypes.func.isRequired, */ + /* isRoomEncrypted: PropTypes.bool, */ + /* }; */ + + private hasVerifier: boolean; + + constructor(props: IProps) { super(props); this.state = {}; - this._hasVerifier = false; + this.hasVerifier = false; } renderQRPhase() { const {member, request} = this.props; - const showSAS = request.otherPartySupportsMethod(verificationMethods.SAS); - const showQR = request.otherPartySupportsMethod(SCAN_QR_CODE_METHOD); + const showSAS: boolean = request.otherPartySupportsMethod(verificationMethods.SAS); + const showQR: boolean = request.otherPartySupportsMethod(SCAN_QR_CODE_METHOD); const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); const brand = SdkConfig.get().brand; - const noCommonMethodError = !showSAS && !showQR ? + const noCommonMethodError: JSX.Element = !showSAS && !showQR ?

{_t( "The session you are trying to verify doesn't support scanning a " + "QR code or emoji verification, which is what %(brand)s supports. Try " + @@ -77,8 +110,8 @@ export default class VerificationPanel extends React.PureComponent { if (this.props.layout === 'dialog') { // HACK: This is a terrible idea. - let qrBlock; - let sasBlock; + let qrBlock: JSX.Element; + let sasBlock: JSX.Element; if (showQR) { qrBlock =

@@ -91,7 +124,7 @@ export default class VerificationPanel extends React.PureComponent {

{_t("Compare unique emoji")}

{_t("Compare a unique set of emoji if you don't have a camera on either device")} - + {_t("Start")}
; @@ -111,7 +144,7 @@ export default class VerificationPanel extends React.PureComponent { ); } - let qrBlock; + let qrBlock: JSX.Element; if (showQR) { qrBlock =

{_t("Verify by scanning")}

@@ -125,7 +158,7 @@ export default class VerificationPanel extends React.PureComponent {
; } - let sasBlock; + let sasBlock: JSX.Element; if (showSAS) { const disabled = this.state.emojiButtonClicked; const sasLabel = showQR ? @@ -140,7 +173,7 @@ export default class VerificationPanel extends React.PureComponent { disabled={disabled} kind="primary" className="mx_UserInfo_wideButton mx_VerificationPanel_verifyByEmojiButton" - onClick={this._startSAS} + onClick={this.startSAS} > {_t("Verify by emoji")} @@ -159,17 +192,17 @@ export default class VerificationPanel extends React.PureComponent { ; } - _onReciprocateYesClick = () => { + private onReciprocateYesClick = () => { this.setState({reciprocateButtonClicked: true}); this.state.reciprocateQREvent.confirm(); }; - _onReciprocateNoClick = () => { + private onReciprocateNoClick = () => { this.setState({reciprocateButtonClicked: true}); this.state.reciprocateQREvent.cancel(); }; - _getDevice() { + private getDevice() { const deviceId = this.props.request && this.props.request.channel.deviceId; return MatrixClientPeg.get().getStoredDevice(MatrixClientPeg.get().getUserId(), deviceId); } @@ -189,7 +222,7 @@ export default class VerificationPanel extends React.PureComponent { _t("Almost there! Is %(displayName)s showing the same shield?", { displayName: member.displayName || member.name || member.userId, }); - let body; + let body: JSX.Element; if (this.state.reciprocateQREvent) { // riot web doesn't support scanning yet, so assume here we're the client being scanned. // @@ -202,11 +235,11 @@ export default class VerificationPanel extends React.PureComponent { + onClick={this.onReciprocateNoClick}>{_t("No")} + onClick={this.onReciprocateYesClick}>{_t("Yes")}
; } else { @@ -221,7 +254,7 @@ export default class VerificationPanel extends React.PureComponent { renderVerifiedPhase() { const {member, request} = this.props; - let text; + let text: string; if (!request.isSelfVerification) { if (this.props.isRoomEncrypted) { text = _t("Verify all users in a room to ensure it's secure."); @@ -230,9 +263,9 @@ export default class VerificationPanel extends React.PureComponent { } } - let description; + let description: string; if (request.isSelfVerification) { - const device = this._getDevice(); + const device = this.getDevice(); if (!device) { // This can happen if the device is logged out while we're still showing verification // UI for it. @@ -269,14 +302,14 @@ export default class VerificationPanel extends React.PureComponent { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); - let startAgainInstruction; + let startAgainInstruction: string; if (request.isSelfVerification) { startAgainInstruction = _t("Start verification again from the notification."); } else { startAgainInstruction = _t("Start verification again from their profile."); } - let text; + let text: string; if (request.cancellationCode === "m.timeout") { text = _t("Verification timed out.") + ` ${startAgainInstruction}`; } else if (request.cancellingUserId === request.otherUserId) { @@ -321,10 +354,10 @@ export default class VerificationPanel extends React.PureComponent { const emojis = this.state.sasEvent ? : ; @@ -345,7 +378,7 @@ export default class VerificationPanel extends React.PureComponent { return null; } - _startSAS = async () => { + private startSAS = async () => { this.setState({emojiButtonClicked: true}); const verifier = this.props.request.beginKeyVerification(verificationMethods.SAS); try { @@ -355,31 +388,31 @@ export default class VerificationPanel extends React.PureComponent { } }; - _onSasMatchesClick = () => { + private onSasMatchesClick = () => { this.state.sasEvent.confirm(); }; - _onSasMismatchesClick = () => { + private onSasMismatchesClick = () => { this.state.sasEvent.mismatch(); }; - _updateVerifierState = () => { + private updateVerifierState = () => { const {request} = this.props; const {sasEvent, reciprocateQREvent} = request.verifier; - request.verifier.off('show_sas', this._updateVerifierState); - request.verifier.off('show_reciprocate_qr', this._updateVerifierState); + request.verifier.off('show_sas', this.updateVerifierState); + request.verifier.off('show_reciprocate_qr', this.updateVerifierState); this.setState({sasEvent, reciprocateQREvent}); }; - _onRequestChange = async () => { + private onRequestChange = async () => { const {request} = this.props; - const hadVerifier = this._hasVerifier; - this._hasVerifier = !!request.verifier; - if (!hadVerifier && this._hasVerifier) { - request.verifier.on('show_sas', this._updateVerifierState); - request.verifier.on('show_reciprocate_qr', this._updateVerifierState); + const hadVerifier = this.hasVerifier; + this.hasVerifier = !!request.verifier; + if (!hadVerifier && this.hasVerifier) { + request.verifier.on('show_sas', this.updateVerifierState); + request.verifier.on('show_reciprocate_qr', this.updateVerifierState); try { - // on the requester side, this is also awaited in _startSAS, + // on the requester side, this is also awaited in startSAS, // but that's ok as verify should return the same promise. await request.verifier.verify(); } catch (err) { @@ -390,21 +423,21 @@ export default class VerificationPanel extends React.PureComponent { componentDidMount() { const {request} = this.props; - request.on("change", this._onRequestChange); + request.on("change", this.onRequestChange); if (request.verifier) { const {request} = this.props; const {sasEvent, reciprocateQREvent} = request.verifier; this.setState({sasEvent, reciprocateQREvent}); } - this._onRequestChange(); + this.onRequestChange(); } componentWillUnmount() { const {request} = this.props; if (request.verifier) { - request.verifier.off('show_sas', this._updateVerifierState); - request.verifier.off('show_reciprocate_qr', this._updateVerifierState); + request.verifier.off('show_sas', this.updateVerifierState); + request.verifier.off('show_reciprocate_qr', this.updateVerifierState); } - request.off("change", this._onRequestChange); + request.off("change", this.onRequestChange); } } From 5ddae04fb0ac89c3e73900fddd418c5a2cdb7586 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 23:51:56 +0530 Subject: [PATCH 14/32] lint --- src/components/views/right_panel/EncryptionPanel.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/right_panel/EncryptionPanel.tsx b/src/components/views/right_panel/EncryptionPanel.tsx index 77af180db1..8d5530cfa3 100644 --- a/src/components/views/right_panel/EncryptionPanel.tsx +++ b/src/components/views/right_panel/EncryptionPanel.tsx @@ -25,8 +25,8 @@ import Modal from "../../../Modal"; import {PHASE_REQUESTED, PHASE_UNSENT} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; import * as sdk from "../../../index"; import {_t} from "../../../languageHandler"; -import { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; -import { RoomMember } from "matrix-js-sdk/src/models/room-member"; +import {VerificationRequest} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; +import {RoomMember} from "matrix-js-sdk/src/models/room-member"; // cancellation codes which constitute a key mismatch const MISMATCHES = ["m.key_mismatch", "m.user_error", "m.mismatched_sas"]; From 0f0b4035b73eb74a1e103ed6f550c7f633c12564 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Sat, 18 Jul 2020 23:52:41 +0530 Subject: [PATCH 15/32] Fix shadow variable errors --- .../views/right_panel/VerificationPanel.tsx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/components/views/right_panel/VerificationPanel.tsx b/src/components/views/right_panel/VerificationPanel.tsx index c2c065c022..d2ee728438 100644 --- a/src/components/views/right_panel/VerificationPanel.tsx +++ b/src/components/views/right_panel/VerificationPanel.tsx @@ -110,17 +110,17 @@ export default class VerificationPanel extends React.PureComponent

{_t("Scan this unique code")}

; } if (showSAS) { - sasBlock = + sasBlockDialog =

{_t("Compare unique emoji")}

{_t("Compare a unique set of emoji if you don't have a camera on either device")} @@ -129,15 +129,15 @@ export default class VerificationPanel extends React.PureComponent
; } - const or = qrBlock && sasBlock ? + const or = qrBlockDialog && sasBlockDialog ?
{_t("or")}
: null; return (
{_t("Verify this session by completing one of the following:")}
- {qrBlock} + {qrBlockDialog} {or} - {sasBlock} + {sasBlockDialog} {noCommonMethodError}
@@ -425,7 +425,6 @@ export default class VerificationPanel extends React.PureComponent Date: Sat, 18 Jul 2020 23:55:28 +0530 Subject: [PATCH 16/32] Fix shadow-variable errors in EncryptionPanel --- src/components/views/right_panel/EncryptionPanel.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/views/right_panel/EncryptionPanel.tsx b/src/components/views/right_panel/EncryptionPanel.tsx index 8d5530cfa3..df52e5cabd 100644 --- a/src/components/views/right_panel/EncryptionPanel.tsx +++ b/src/components/views/right_panel/EncryptionPanel.tsx @@ -59,10 +59,10 @@ const EncryptionPanel: React.FC = (props: IProps) => { useEffect(() => { async function awaitPromise() { setRequesting(true); - const request = await verificationRequestPromise; + const requestFromPromise = await verificationRequestPromise; setRequesting(false); - setRequest(request); - setPhase(request.phase); + setRequest(requestFromPromise); + setPhase(requestFromPromise.phase); } if (verificationRequestPromise) { awaitPromise(); @@ -115,9 +115,9 @@ const EncryptionPanel: React.FC = (props: IProps) => { setRequesting(true); const cli = MatrixClientPeg.get(); const roomId = await ensureDMExists(cli, member.userId); - const verificationRequest = await cli.requestVerificationDM(member.userId, roomId); - setRequest(verificationRequest); - setPhase(verificationRequest.phase); + const verificationRequest_ = await cli.requestVerificationDM(member.userId, roomId); + setRequest(verificationRequest_); + setPhase(verificationRequest_.phase); }, [member.userId]); const requested = From d7728881a3bf9053f35bddfaa61d5be74e12d801 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Wed, 22 Jul 2020 15:22:16 +0530 Subject: [PATCH 17/32] lint --- src/components/views/groups/GroupMemberList.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/views/groups/GroupMemberList.js b/src/components/views/groups/GroupMemberList.js index e7143f0dd2..031b875409 100644 --- a/src/components/views/groups/GroupMemberList.js +++ b/src/components/views/groups/GroupMemberList.js @@ -24,8 +24,6 @@ import GroupStore from '../../../stores/GroupStore'; import PropTypes from 'prop-types'; import { showGroupInviteDialog } from '../../../GroupAddressPicker'; import AccessibleButton from '../elements/AccessibleButton'; -import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases"; -import TintableSvg from '../elements/TintableSvg'; import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import AutoHideScrollbar from "../../structures/AutoHideScrollbar"; import {Action} from "../../../dispatcher/actions"; From 5ea7be5d530f5ebad14fc7ca9800b0d5c9cb6ce0 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Wed, 22 Jul 2020 21:17:58 +0530 Subject: [PATCH 18/32] Cleanup comments --- .../views/right_panel/VerificationPanel.tsx | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/components/views/right_panel/VerificationPanel.tsx b/src/components/views/right_panel/VerificationPanel.tsx index d2ee728438..a4180bcd8a 100644 --- a/src/components/views/right_panel/VerificationPanel.tsx +++ b/src/components/views/right_panel/VerificationPanel.tsx @@ -68,22 +68,6 @@ interface IState { } export default class VerificationPanel extends React.PureComponent { - /* static propTypes = { */ - /* layout: PropTypes.string, */ - /* request: PropTypes.object.isRequired, */ - /* member: PropTypes.object.isRequired, */ - /* phase: PropTypes.oneOf([ */ - /* PHASE_UNSENT, */ - /* PHASE_REQUESTED, */ - /* PHASE_READY, */ - /* PHASE_STARTED, */ - /* PHASE_CANCELLED, */ - /* PHASE_DONE, */ - /* ]).isRequired, */ - /* onClose: PropTypes.func.isRequired, */ - /* isRoomEncrypted: PropTypes.bool, */ - /* }; */ - private hasVerifier: boolean; constructor(props: IProps) { From fbea8c61bbabe14799842fc8fb214d2977643cc6 Mon Sep 17 00:00:00 2001 From: Hubert Chathi Date: Tue, 28 Jul 2020 17:31:27 -0400 Subject: [PATCH 19/32] add logging for keytar/pickle key and remember when we had key, so that we know that we should expect one --- src/Lifecycle.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Lifecycle.js b/src/Lifecycle.js index a05392c3e9..2bebe22f14 100644 --- a/src/Lifecycle.js +++ b/src/Lifecycle.js @@ -306,6 +306,11 @@ async function _restoreFromLocalStorage(opts) { } const pickleKey = await PlatformPeg.get().getPickleKey(userId, deviceId); + if (pickleKey) { + console.log("Got pickle key"); + } else { + console.log("No pickle key available"); + } console.log(`Restoring session for ${userId}`); await _doSetLoggedIn({ @@ -364,6 +369,12 @@ export async function setLoggedIn(credentials) { ? await PlatformPeg.get().createPickleKey(credentials.userId, credentials.deviceId) : null; + if (pickleKey) { + console.log("Created pickle key"); + } else { + console.log("Pickle key not created"); + } + return _doSetLoggedIn(Object.assign({}, credentials, {pickleKey}), true); } @@ -501,6 +512,14 @@ function _persistCredentialsToLocalStorage(credentials) { localStorage.setItem("mx_access_token", credentials.accessToken); localStorage.setItem("mx_is_guest", JSON.stringify(credentials.guest)); + if (credentials.pickleKey) { + localStorage.setItem("mx_has_pickle_key", true); + } else { + if (localStorage.getItem("mx_has_pickle_key")) { + console.error("Expected a pickle key, but none provided. Encryption may not work."); + } + } + // if we didn't get a deviceId from the login, leave mx_device_id unset, // rather than setting it to "undefined". // From bf450ad075aeb4cebc84f73aca6afda699a260cd Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Wed, 29 Jul 2020 16:59:29 +0530 Subject: [PATCH 20/32] Fix the type for SetRightPanelPhasePayload Fix uses of it as well --- src/components/views/right_panel/GroupHeaderButtons.tsx | 4 ++-- src/components/views/right_panel/RoomHeaderButtons.tsx | 2 +- src/dispatcher/payloads/SetRightPanelPhasePayload.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/views/right_panel/GroupHeaderButtons.tsx b/src/components/views/right_panel/GroupHeaderButtons.tsx index 7bd6d90038..b15a93e5a0 100644 --- a/src/components/views/right_panel/GroupHeaderButtons.tsx +++ b/src/components/views/right_panel/GroupHeaderButtons.tsx @@ -50,7 +50,7 @@ export default class GroupHeaderButtons extends HeaderButtons { if (payload.action === Action.ViewUser) { if ((payload as ViewUserPayload).member) { - this.setPhase(RightPanelPhases.RoomMemberInfo, {members: payload.member}); + this.setPhase(RightPanelPhases.RoomMemberInfo, {member: payload.member}); } else { this.setPhase(RightPanelPhases.GroupMemberList); } @@ -66,7 +66,7 @@ export default class GroupHeaderButtons extends HeaderButtons { } else if (payload.action === "view_group_member_list") { this.setPhase(RightPanelPhases.GroupMemberList); } else if (payload.action === "view_group_user") { - this.setPhase(RightPanelPhases.GroupMemberInfo, {members: payload.member}); + this.setPhase(RightPanelPhases.GroupMemberInfo, {member: payload.member}); } } diff --git a/src/components/views/right_panel/RoomHeaderButtons.tsx b/src/components/views/right_panel/RoomHeaderButtons.tsx index 74bd2c51fc..8620d5b485 100644 --- a/src/components/views/right_panel/RoomHeaderButtons.tsx +++ b/src/components/views/right_panel/RoomHeaderButtons.tsx @@ -45,7 +45,7 @@ export default class RoomHeaderButtons extends HeaderButtons { super.onAction(payload); if (payload.action === Action.ViewUser) { if (payload.member) { - this.setPhase(RightPanelPhases.RoomMemberInfo, {members: payload.member}); + this.setPhase(RightPanelPhases.RoomMemberInfo, {member: payload.member}); } else { this.setPhase(RightPanelPhases.RoomMemberList); } diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts index 49e3032d4f..5b78863b35 100644 --- a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -30,7 +30,7 @@ export interface SetRightPanelPhasePayload extends ActionPayload { export interface SetRightPanelPhaseRefireParams { // XXX: Fix after the types are defiend in matrix-js-sdk // No appropriate types exist yet for the fields - members?: RoomMember; + member?: RoomMember; verificationRequest?: typeof VerificationRequest; groupId?: string; groupRoomId?: string; From aa160095fa0413dfa1e43b9dcfaf5f54f1ed31ad Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Wed, 29 Jul 2020 17:26:51 +0530 Subject: [PATCH 21/32] Cleanup --- src/components/views/right_panel/VerificationPanel.tsx | 2 +- src/dispatcher/payloads/SetRightPanelPhasePayload.ts | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/components/views/right_panel/VerificationPanel.tsx b/src/components/views/right_panel/VerificationPanel.tsx index a4180bcd8a..0781bcf491 100644 --- a/src/components/views/right_panel/VerificationPanel.tsx +++ b/src/components/views/right_panel/VerificationPanel.tsx @@ -57,7 +57,7 @@ interface IProps { onClose: () => void; isRoomEncrypted: boolean; inDialog: boolean; - key: any; + key: number; } interface IState { diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts index 5b78863b35..b7dd5d85fc 100644 --- a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -24,16 +24,14 @@ export interface SetRightPanelPhasePayload extends ActionPayload { action: Action.SetRightPanelPhase; phase: RightPanelPhases; - refireParams?: SetRightPanelPhaseRefireParams; + refireParams: SetRightPanelPhaseRefireParams; } export interface SetRightPanelPhaseRefireParams { - // XXX: Fix after the types are defiend in matrix-js-sdk - // No appropriate types exist yet for the fields member?: RoomMember; - verificationRequest?: typeof VerificationRequest; + verificationRequest?: VerificationRequest; groupId?: string; groupRoomId?: string; - // XXX: 'view_3pid_invite' action's payload + // XXX: The type for event should 'view_3pid_invite' action's payload event?: any; } From 8120a26135390c341b1c1e74587b1439bdbf0ce4 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Wed, 29 Jul 2020 17:35:55 +0530 Subject: [PATCH 22/32] A bit more cleanup --- src/components/views/toasts/VerificationRequestToast.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/views/toasts/VerificationRequestToast.tsx b/src/components/views/toasts/VerificationRequestToast.tsx index 89c826eac4..8c8a74b2be 100644 --- a/src/components/views/toasts/VerificationRequestToast.tsx +++ b/src/components/views/toasts/VerificationRequestToast.tsx @@ -20,6 +20,7 @@ import * as sdk from "../../../index"; import { _t } from '../../../languageHandler'; import {MatrixClientPeg} from '../../../MatrixClientPeg'; import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; +import {SetRightPanelPhasePayload} from "../../../dispatcher/payloads/SetRightPanelPhasePayload" import {userLabelForEventRoom} from "../../../utils/KeyVerificationStateObserver"; import dis from "../../../dispatcher/dispatcher"; import ToastStore from "../../../stores/ToastStore"; @@ -105,7 +106,7 @@ export default class VerificationRequestToast extends React.PureComponent({ action: Action.SetRightPanelPhase, phase: RightPanelPhases.EncryptionPanel, refireParams: { From d8baad31da17a4f9d493c4dc073627fff6038d60 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 29 Jul 2020 16:51:37 +0200 Subject: [PATCH 23/32] provide nicer error for no known servers error when accepting an invite --- src/i18n/strings/en_EN.json | 2 ++ src/stores/RoomViewStore.js | 26 +++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 18e2da9a31..ad33823c96 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -423,6 +423,8 @@ "Upgrade your %(brand)s": "Upgrade your %(brand)s", "A new version of %(brand)s is available!": "A new version of %(brand)s is available!", "Guest": "Guest", + "The person who invited you already left the room.": "The person who invited you already left the room.", + "The person who invited you already left the room, or their server is offline.": "The person who invited you already left the room, or their server is offline.", "There was an error joining the room": "There was an error joining the room", "Sorry, your homeserver is too old to participate in this room.": "Sorry, your homeserver is too old to participate in this room.", "Please contact your homeserver administrator.": "Please contact your homeserver administrator.", diff --git a/src/stores/RoomViewStore.js b/src/stores/RoomViewStore.js index 6e5007895c..4f560e1fab 100644 --- a/src/stores/RoomViewStore.js +++ b/src/stores/RoomViewStore.js @@ -265,10 +265,20 @@ class RoomViewStore extends Store { }); let msg = err.message ? err.message : JSON.stringify(err); console.log("Failed to join room:", msg); - if (err.name === "ConnectionError") { + if (err.httpStatus === 404) { + const invitingUserId = this._getInvitingUserId(this._state.roomId); + // only provide a better error message for invites + if (invitingUserId) { + // if the inviting user is on the same HS, there can only be one cause: they left. + if (invitingUserId.endsWith(`:${MatrixClientPeg.get().getDomain()}`)) { + msg = _t("The person who invited you already left the room."); + } else { + msg = _t("The person who invited you already left the room, or their server is offline."); + } + } + } else if (err.name === "ConnectionError") { msg = _t("There was an error joining the room"); - } - if (err.errcode === 'M_INCOMPATIBLE_ROOM_VERSION') { + } else if (err.errcode === 'M_INCOMPATIBLE_ROOM_VERSION') { msg =
{_t("Sorry, your homeserver is too old to participate in this room.")}
{_t("Please contact your homeserver administrator.")} @@ -282,6 +292,16 @@ class RoomViewStore extends Store { }); } + _getInvitingUserId(roomId) { + const cli = MatrixClientPeg.get(); + const room = cli.getRoom(roomId); + if (room && room.getMyMembership() === "invite") { + const myMember = room.getMember(cli.getUserId()); + const inviteEvent = myMember ? myMember.events.member : null; + return inviteEvent && inviteEvent.getSender(); + } + } + _joinRoomError(payload) { this._setState({ joining: false, From 2f20cbd5ad388c9f961272e430a2ef86ce6c43b3 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 29 Jul 2020 17:32:25 +0100 Subject: [PATCH 24/32] Remove all unreferenced images This removes all images we no longer reference in the app. This should be safe, as Webpack only adds images to the build output if they are referenced. --- res/img/attach.png | Bin 369 -> 0 bytes res/img/button-text-block-quote-on.svg | 17 --- res/img/button-text-block-quote.svg | 17 --- res/img/button-text-bold-on.svg | 17 --- res/img/button-text-bold.svg | 17 --- res/img/button-text-bulleted-list-on.svg | 20 ---- res/img/button-text-bulleted-list.svg | 20 ---- res/img/button-text-deleted-on.svg | 18 ---- res/img/button-text-deleted.svg | 18 ---- res/img/button-text-formatting.svg | 21 ---- res/img/button-text-inline-code-on.svg | 25 ----- res/img/button-text-inline-code.svg | 25 ----- res/img/button-text-italic-on.svg | 17 --- res/img/button-text-italic.svg | 17 --- res/img/button-text-numbered-list-on.svg | 20 ---- res/img/button-text-numbered-list.svg | 20 ---- res/img/button-text-underlined-on.svg | 18 ---- res/img/button-text-underlined.svg | 18 ---- res/img/call.png | Bin 588 -> 0 bytes res/img/cancel-black.png | Bin 1136 -> 0 bytes res/img/cancel-black2.png | Bin 1182 -> 0 bytes res/img/cancel.png | Bin 316 -> 0 bytes res/img/chevron-left.png | Bin 14586 -> 0 bytes res/img/chevron-right.png | Bin 14594 -> 0 bytes res/img/chevron.png | Bin 14638 -> 0 bytes res/img/close-white.png | Bin 1305 -> 0 bytes res/img/create-big.png | Bin 581 -> 0 bytes res/img/create-big.svg | 26 ----- res/img/create.png | Bin 807 -> 0 bytes res/img/delete.png | Bin 1006 -> 0 bytes res/img/directory-big.png | Bin 325 -> 0 bytes res/img/download.png | Bin 1041 -> 0 bytes res/img/e2e/blacklisted.svg | 6 -- res/img/e2e/lock-verified.svg | 6 -- res/img/e2e/lock-warning.svg | 9 -- res/img/edit.png | Bin 460 -> 0 bytes res/img/edit.svg | 1 - res/img/element-icons/room/composer/send.svg | 3 - .../element-icons/roomlist/clear-input.svg | 3 - .../element-icons/roomlist/direct-chat.svg | 7 -- .../element-icons/roomlist/e2ee-default.svg | 3 - res/img/element-icons/roomlist/e2ee-error.svg | 5 - res/img/element-icons/roomlist/e2ee-none.svg | 5 - .../element-icons/roomlist/e2ee-trusted.svg | 4 - .../element-icons/roomlist/explore-rooms.svg | 4 - res/img/element-icons/roomlist/search.svg | 4 - res/img/explore.svg | 97 ------------------ res/img/feather-customised/archive.svg | 1 - res/img/feather-customised/arrow-down.svg | 1 - res/img/feather-customised/bell-crossed.svg | 4 - .../bell-mentions.custom.svg | 3 - .../bell-notification.custom.svg | 5 - res/img/feather-customised/bell.svg | 3 - res/img/feather-customised/brush.svg | 5 - res/img/feather-customised/emoji3.custom.svg | 6 -- res/img/feather-customised/face.svg | 14 --- res/img/feather-customised/favourites.svg | 3 - res/img/feather-customised/flag.svg | 5 - res/img/feather-customised/flair.svg | 6 -- res/img/feather-customised/grid.svg | 13 --- res/img/feather-customised/lock-solid.svg | 4 - res/img/feather-customised/lock.svg | 6 -- .../feather-customised/more-horizontal.svg | 1 - res/img/feather-customised/notifications.svg | 10 -- res/img/feather-customised/paperclip.svg | 10 -- res/img/feather-customised/phone.svg | 10 -- res/img/feather-customised/search.svg | 11 -- res/img/feather-customised/share.svg | 14 --- res/img/feather-customised/sliders.svg | 5 - res/img/feather-customised/star.svg | 1 - res/img/feather-customised/sticker.custom.svg | 4 - res/img/feather-customised/sun.svg | 1 - res/img/feather-customised/upload.svg | 5 - res/img/feather-customised/user-add.svg | 13 --- res/img/feather-customised/users-sm.svg | 7 -- res/img/feather-customised/users.svg | 15 --- res/img/feather-customised/video.svg | 11 -- res/img/filegrid.png | Bin 226 -> 0 bytes res/img/filelist.png | Bin 223 -> 0 bytes res/img/fullscreen.svg | 23 ----- res/img/hide.png | Bin 1165 -> 0 bytes res/img/icon-text-cancel.svg | 15 --- res/img/icons-pin.svg | 7 -- res/img/icons-room-nobg.svg | 28 ----- res/img/icons-share.svg | 6 -- res/img/info.png | Bin 660 -> 0 bytes res/img/leave.svg | 23 ----- res/img/list-close.png | Bin 1033 -> 0 bytes res/img/list-open.png | Bin 1059 -> 0 bytes res/img/matrix-m.svg | 15 --- res/img/menu.png | Bin 122 -> 0 bytes res/img/network-matrix.svg | 14 --- res/img/newmessages.png | Bin 590 -> 0 bytes res/img/placeholder.png | Bin 394 -> 0 bytes res/img/react.svg | 10 -- res/img/reply.svg | 6 -- res/img/search.png | Bin 742 -> 0 bytes res/img/selected.png | Bin 995 -> 0 bytes res/img/settings-big.png | Bin 810 -> 0 bytes res/img/settings.png | Bin 391 -> 0 bytes res/img/sound-indicator.svg | 17 --- res/img/trans.png | Bin 959 -> 0 bytes res/img/typing.png | Bin 236 -> 0 bytes res/img/upload-big.png | Bin 1669 -> 0 bytes res/img/upload.png | Bin 713 -> 0 bytes res/img/video-mute.svg | 17 --- res/img/video-unmute.svg | 18 ---- res/img/video.png | Bin 514 -> 0 bytes res/img/voice-mute.svg | 14 --- res/img/voice-unmute.svg | 15 --- res/img/voice.png | Bin 856 -> 0 bytes res/img/voip-chevron.svg | 12 --- res/img/voip-mute.png | Bin 903 -> 0 bytes res/img/voip.png | Bin 709 -> 0 bytes res/img/warning.png | Bin 1478 -> 0 bytes res/img/warning2.png | Bin 1420 -> 0 bytes res/img/zoom.png | Bin 1288 -> 0 bytes 117 files changed, 945 deletions(-) delete mode 100644 res/img/attach.png delete mode 100644 res/img/button-text-block-quote-on.svg delete mode 100644 res/img/button-text-block-quote.svg delete mode 100644 res/img/button-text-bold-on.svg delete mode 100644 res/img/button-text-bold.svg delete mode 100644 res/img/button-text-bulleted-list-on.svg delete mode 100644 res/img/button-text-bulleted-list.svg delete mode 100644 res/img/button-text-deleted-on.svg delete mode 100644 res/img/button-text-deleted.svg delete mode 100644 res/img/button-text-formatting.svg delete mode 100644 res/img/button-text-inline-code-on.svg delete mode 100644 res/img/button-text-inline-code.svg delete mode 100644 res/img/button-text-italic-on.svg delete mode 100644 res/img/button-text-italic.svg delete mode 100644 res/img/button-text-numbered-list-on.svg delete mode 100644 res/img/button-text-numbered-list.svg delete mode 100644 res/img/button-text-underlined-on.svg delete mode 100644 res/img/button-text-underlined.svg delete mode 100644 res/img/call.png delete mode 100644 res/img/cancel-black.png delete mode 100644 res/img/cancel-black2.png delete mode 100644 res/img/cancel.png delete mode 100644 res/img/chevron-left.png delete mode 100644 res/img/chevron-right.png delete mode 100644 res/img/chevron.png delete mode 100644 res/img/close-white.png delete mode 100644 res/img/create-big.png delete mode 100644 res/img/create-big.svg delete mode 100644 res/img/create.png delete mode 100644 res/img/delete.png delete mode 100644 res/img/directory-big.png delete mode 100644 res/img/download.png delete mode 100644 res/img/e2e/blacklisted.svg delete mode 100644 res/img/e2e/lock-verified.svg delete mode 100644 res/img/e2e/lock-warning.svg delete mode 100644 res/img/edit.png delete mode 100644 res/img/edit.svg delete mode 100644 res/img/element-icons/room/composer/send.svg delete mode 100644 res/img/element-icons/roomlist/clear-input.svg delete mode 100644 res/img/element-icons/roomlist/direct-chat.svg delete mode 100644 res/img/element-icons/roomlist/e2ee-default.svg delete mode 100644 res/img/element-icons/roomlist/e2ee-error.svg delete mode 100644 res/img/element-icons/roomlist/e2ee-none.svg delete mode 100644 res/img/element-icons/roomlist/e2ee-trusted.svg delete mode 100644 res/img/element-icons/roomlist/explore-rooms.svg delete mode 100644 res/img/element-icons/roomlist/search.svg delete mode 100644 res/img/explore.svg delete mode 100644 res/img/feather-customised/archive.svg delete mode 100644 res/img/feather-customised/arrow-down.svg delete mode 100644 res/img/feather-customised/bell-crossed.svg delete mode 100644 res/img/feather-customised/bell-mentions.custom.svg delete mode 100644 res/img/feather-customised/bell-notification.custom.svg delete mode 100644 res/img/feather-customised/bell.svg delete mode 100644 res/img/feather-customised/brush.svg delete mode 100644 res/img/feather-customised/emoji3.custom.svg delete mode 100644 res/img/feather-customised/face.svg delete mode 100644 res/img/feather-customised/favourites.svg delete mode 100644 res/img/feather-customised/flag.svg delete mode 100644 res/img/feather-customised/flair.svg delete mode 100644 res/img/feather-customised/grid.svg delete mode 100644 res/img/feather-customised/lock-solid.svg delete mode 100644 res/img/feather-customised/lock.svg delete mode 100644 res/img/feather-customised/more-horizontal.svg delete mode 100644 res/img/feather-customised/notifications.svg delete mode 100644 res/img/feather-customised/paperclip.svg delete mode 100644 res/img/feather-customised/phone.svg delete mode 100644 res/img/feather-customised/search.svg delete mode 100644 res/img/feather-customised/share.svg delete mode 100644 res/img/feather-customised/sliders.svg delete mode 100644 res/img/feather-customised/star.svg delete mode 100644 res/img/feather-customised/sticker.custom.svg delete mode 100644 res/img/feather-customised/sun.svg delete mode 100644 res/img/feather-customised/upload.svg delete mode 100644 res/img/feather-customised/user-add.svg delete mode 100644 res/img/feather-customised/users-sm.svg delete mode 100644 res/img/feather-customised/users.svg delete mode 100644 res/img/feather-customised/video.svg delete mode 100644 res/img/filegrid.png delete mode 100644 res/img/filelist.png delete mode 100644 res/img/fullscreen.svg delete mode 100644 res/img/hide.png delete mode 100644 res/img/icon-text-cancel.svg delete mode 100644 res/img/icons-pin.svg delete mode 100644 res/img/icons-room-nobg.svg delete mode 100644 res/img/icons-share.svg delete mode 100644 res/img/info.png delete mode 100644 res/img/leave.svg delete mode 100644 res/img/list-close.png delete mode 100644 res/img/list-open.png delete mode 100644 res/img/matrix-m.svg delete mode 100755 res/img/menu.png delete mode 100644 res/img/network-matrix.svg delete mode 100644 res/img/newmessages.png delete mode 100644 res/img/placeholder.png delete mode 100644 res/img/react.svg delete mode 100644 res/img/reply.svg delete mode 100644 res/img/search.png delete mode 100644 res/img/selected.png delete mode 100644 res/img/settings-big.png delete mode 100644 res/img/settings.png delete mode 100644 res/img/sound-indicator.svg delete mode 100644 res/img/trans.png delete mode 100644 res/img/typing.png delete mode 100644 res/img/upload-big.png delete mode 100644 res/img/upload.png delete mode 100644 res/img/video-mute.svg delete mode 100644 res/img/video-unmute.svg delete mode 100644 res/img/video.png delete mode 100644 res/img/voice-mute.svg delete mode 100644 res/img/voice-unmute.svg delete mode 100644 res/img/voice.png delete mode 100644 res/img/voip-chevron.svg delete mode 100644 res/img/voip-mute.png delete mode 100644 res/img/voip.png delete mode 100644 res/img/warning.png delete mode 100644 res/img/warning2.png delete mode 100644 res/img/zoom.png diff --git a/res/img/attach.png b/res/img/attach.png deleted file mode 100644 index 1bcb70045d457e1b96c03a89b6652c3c720137e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmV-%0gnEOP)S8 zD2f_}0rz*kj^}wVo+3va$H$j^2uKSak7=Ig0D$#ek|d%iE<06KHBGagoTf=t)ono( zMbBP@8Wm$${Y!350zb()-4S(;FBps*d9|bJS>bkyb2_SuazX~t_q8w+Y1HH_H P00000NkvXXu0mjfe{z=) diff --git a/res/img/button-text-block-quote-on.svg b/res/img/button-text-block-quote-on.svg deleted file mode 100644 index f8a86125c9..0000000000 --- a/res/img/button-text-block-quote-on.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 3B24B8C7-64BE-4B3E-A748-94DB72E1210F - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-block-quote.svg b/res/img/button-text-block-quote.svg deleted file mode 100644 index d70c261f5d..0000000000 --- a/res/img/button-text-block-quote.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - BFC0418B-9081-4789-A231-B75953157748 - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-bold-on.svg b/res/img/button-text-bold-on.svg deleted file mode 100644 index 161e740e90..0000000000 --- a/res/img/button-text-bold-on.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 01F3F9B2-8F38-4BAF-A345-AECAC3D88E79 - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-bold.svg b/res/img/button-text-bold.svg deleted file mode 100644 index 0fd0baa07e..0000000000 --- a/res/img/button-text-bold.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 9BC64A5B-F157-43FF-BCC4-02D30CDF520B - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-bulleted-list-on.svg b/res/img/button-text-bulleted-list-on.svg deleted file mode 100644 index d4a40e889c..0000000000 --- a/res/img/button-text-bulleted-list-on.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - 654917CF-20A4-49B6-B0A1-9875D7B733C8 - Created with sketchtool. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-bulleted-list.svg b/res/img/button-text-bulleted-list.svg deleted file mode 100644 index ae3e640d8e..0000000000 --- a/res/img/button-text-bulleted-list.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - B7D94619-44BC-4184-A60A-DBC5BB54E5F9 - Created with sketchtool. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-deleted-on.svg b/res/img/button-text-deleted-on.svg deleted file mode 100644 index 2914fcabe6..0000000000 --- a/res/img/button-text-deleted-on.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - 69B11088-0F3A-4E14-BD9F-4FEF4115E99B - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-deleted.svg b/res/img/button-text-deleted.svg deleted file mode 100644 index 5f262dc350..0000000000 --- a/res/img/button-text-deleted.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - A34F2223-34C6-46AE-AA47-38EC8984E9B3 - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-formatting.svg b/res/img/button-text-formatting.svg deleted file mode 100644 index d697010d40..0000000000 --- a/res/img/button-text-formatting.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - diff --git a/res/img/button-text-inline-code-on.svg b/res/img/button-text-inline-code-on.svg deleted file mode 100644 index 8d1439c97b..0000000000 --- a/res/img/button-text-inline-code-on.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - B76754AB-42E6-48D2-9443-80CBC0DE02ED - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-inline-code.svg b/res/img/button-text-inline-code.svg deleted file mode 100644 index 24026cb709..0000000000 --- a/res/img/button-text-inline-code.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - 4CAFF494-61AE-4916-AFE8-D1E62F7CF0DE - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-italic-on.svg b/res/img/button-text-italic-on.svg deleted file mode 100644 index 15fe588596..0000000000 --- a/res/img/button-text-italic-on.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 116426C2-0B55-480E-92B3-57D4B3ABAB90 - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-italic.svg b/res/img/button-text-italic.svg deleted file mode 100644 index b5722e827b..0000000000 --- a/res/img/button-text-italic.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 9FBC844D-96CF-4DCB-B545-FCD23727218B - Created with sketchtool. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-numbered-list-on.svg b/res/img/button-text-numbered-list-on.svg deleted file mode 100644 index 869a2c2cc2..0000000000 --- a/res/img/button-text-numbered-list-on.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - 294F929B-31AA-4D0C-98B3-9CA96764060D - Created with sketchtool. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-numbered-list.svg b/res/img/button-text-numbered-list.svg deleted file mode 100644 index 8e5b8b87b6..0000000000 --- a/res/img/button-text-numbered-list.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - F0F58459-A13A-48C5-9332-ABFB96726F05 - Created with sketchtool. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-underlined-on.svg b/res/img/button-text-underlined-on.svg deleted file mode 100644 index 870be3ce6a..0000000000 --- a/res/img/button-text-underlined-on.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - FD84FF7C-43E4-4312-90AB-5A59AD018377 - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/button-text-underlined.svg b/res/img/button-text-underlined.svg deleted file mode 100644 index 26f448539c..0000000000 --- a/res/img/button-text-underlined.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - 13E7EE68-9B16-4A3D-8F9F-31E4BAB7E438 - Created with sketchtool. - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/call.png b/res/img/call.png deleted file mode 100644 index a7805e0596bb9af4f3ce0a8debd7eb30c0b079e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<-;zP)Px%21!IgR7eeDWB`JS!%GF3`B_65{{Pqf{r?{qNQ_v(%EgIQ#bAzdf(6{P_FnPZJ?anLs`RS>_<2 zMY3fen?Vi)=>?eq4kZ-lU~-s1!3gphrW9!+U^9Sb5z@s1iZfD!5u2ePGtlF|c>hch zW^UvKw=G|1mKqGyeNC4Q3hG@r(>i zuU^r>LWb|07EFx)FLxTnUc?qkRQDm{KL(}0fBxUVW*JC~>T&pw=|2YxGqCi*0jTan zhX4Ow{rk%xi^D$ZCz?NhnNBh?F*r4xnTfSbrn(RNO{4Gq|HrWJD-(BZ!_@{hxKIBx z{G&;>09nv&9JPayf$`dxpQ`1c0-)jQDz^U&46M(Ny#GmcAHsapWfZ;m|3Ak4{}|bG zzWx3?nTd(v$gK4A-z=c|3|PfbT%LleDRA8gvk^%5nnWF0^?%jz!zX`nPqv8p1d?I_ zRi425%n($?AgLvp391u8W}#~gV+{KX6a!lZl4AkY)O-G40aYv1sDM|448;c+L6Y=r aVgLa1(9$0~3Cnc=0000TWHi+7>+CGTHAFi`cM@NsbCj6lVon0i8C!T$wbFBrA|j26|tG*bSBnZHaX*D zDvPUvu;MPL6}uHt5&Gg?!52lv7x6{Zs-+bwc%csp6>s~xCu3*yVaGsD&iVPi@4ue> z+1<6esbNV2hG9*qHGCR<7rO6{KcIE|Tnk#U7MRS!9-|MIBnx11#mE6XrAc{^29i?# z?H-6?*z7hnlZ9Dv9V;7}S8_34M>AbI7VUIQN$v*_&w;$E$B60cw+LKSV#LOvNQou~ z3hJ5x3-k}-DaH_QPE}5-Zhg1UV*^=81W^jtk{in zh6V7TH{_A25Q8%jFCAo<0Mm~9C^|?|e$r2Qe10}Su>l`G^AO0JrS!3BUYPNPPBEeY zp~;eDsZ{co{9eP#lXN5!At@i}^LY@$W0!R(IUe0^tt#-qmMztUs-feqqLed=Fh-zA zzoejuYsg znJi}k2^v<$Fm_a{*j+H7VHXS&=eSDM@HSDBRoylIQelZAo6>D4=`u+1F#_p$RaIfb zJS_-`kihuE37Sp@6Ev6L{2a}MBVi^K_f@&PAs02E!zx#)aT%&E*BuDWM4owIsXKup zScZmI5@*%=vG8^EX1Ge-SVGCVToMICy6yd@-BlBsA$MCFUUaC9KhV+4TWGki&>J0e zF(y-dJmX9p9HoB}s6}(%eLgGZF8{MEk+YgtnnU}cHSg;DY~zcc5BAXyr|%s*b@Jxj zAHmy;X@4U(R=o77ZTHCZuCZcr>)6ZiHEn)gSpTtb zc*XdF2b(Xx8J;Q+kAO|vx5W1izMr`L_ky7t$B#&lwm0rPHniu(s^G;7gL}vCJeewY zg?0|CJJ^_N9cS>#nSpkKXwZZSQH_ scK>C#WAeZs`tyIEM@P9i@pp@RvA3UQ6_%VYEqDI`sbm*_A>?5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0*lEl2^R8JRMC7?NanVBh8E{;a7Mow;K<}NNShK8=Dj*f=rPR`~= zW^NYF=7tvLFugAM$)&lec_lEtDG0shIQ4=OL~a4lW|!2W%(B!Jx1#)91+d4hGI6`b z1gCjWy(zfeVv19*KF~4xpy)-4ZkP}-4S|^O#0%uWlYeR+FwGYM6ZZwf-~lw}umRpQau|!VqtW)M#68q?qLf&=-_UHTO@8?{mEcVCE!D)IzQ;On@EfO<1m*pxQ@e)c2-BOAlr`8PUuEETZ_l^C9`elF{r5}E*JrIHB% diff --git a/res/img/cancel.png b/res/img/cancel.png deleted file mode 100644 index 2bda8ff5bf06fba1732f30cdec0745d78f3e15a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmV-C0mJ@@P)Px#_DMuRR5%fp)V&JAFc1J>lN3Y{1YaQm!N~`3QJ1za+-@#DgHr}^)<6R-a z=06!ylFNOh$+e_y+rv1H>%Q-Ai}FV5x;|4%-&85JWsL1%;#lZR2;_3y2$NDigb*8; z*m2HRFn(r$1{sFoj&H*-sStAzG$yD3^CB}S0}CP!6v3hh<`L{XjWkVjf@>9cm=Is$ z?dXH`tPeuC)?he@AsDCFg&NdYXva>9xiu>?I}?a~Qg!BoW(XErPMz71gXo>6uzx6s z~A}I`^Y$S#ua!D1N2CS#4GpsRMRn;q1Y!;x0s_VKd{EH-f0pB0^Qt-BgyatQ_ O0000YNz#j?3krO=IY4S^&^lfOz7b(dv?|r|& z-}C4Fi7$S8b>+pG>BpxLLNm)t)iwJ42z@_#`XT!H_0mQqYVeje1BA|;jowq}-S-|t zXzppdRuAj?71eZGX~S~2NV?nds2U;dQr9!gT@nggWZQO1;$L5UDGIh#5?{^flI~T= zj=i++llA?Tnz_Gg7A^5od0OkLG(n4mhR|&_oj~oD#5k`?j+U^ zW6N!aB~gqD^`d%U*ajE82Km^4X?IAK72@>rj@ zdtMp>a=Hpcdq@Otsq@P-P1mQxBIS&R z$29|2yw=oZCkPG4B+Jz@ZAja;rCKIw6mtbBCC@2asjQsOrixi5n=Q{W5o^?hOXrj^IZ;3H!j+I)n1G+-@z{;iTH$KhQ z$?LmOtNQ!4Vrdsj8g=sYW%(Uu^VhKE`Q!|FSGHv9ih zV3Hr$C)eog5a*-~m86PQlamB)BkUMHnct>s;@)<9l6TlRT0q0mKS0wSo{FS(c!rMF z?C}}ZqJvGPtAUQph-X38@UgZ*oIEdC|v1b`=AM4v3_~bk^ zf{vasnJMs(9#3S_O79owtqShns|?R^eIMh@gPuf;5;h$Hhbh1soTo!HhXBCL$={xF8K?%yBUhK>^1FX)t4s zi-`ydI4($o8FO4rL{PwSK^n}M<6 z!CYF?5!!zWp@SO;{qryV{tcnFgwXHT5K<2jy5Qct`pqKM>dV#nTKDI7Zr++f(&^jp zf9w_Ses%TFpH|N6v-y{Wvky04+PL-RhjboI)@I=-~INFUv86A npL~De*Yz_$+<5K7@18`nADHz|4;E)>Vzj)lQvK+KYj6DrGWNav diff --git a/res/img/chevron-right.png b/res/img/chevron-right.png deleted file mode 100644 index 18a4684e4727a9fb3cae66f81165ea4f4aebf69e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14594 zcmeI3Pi)&%9LL`#1|z5l3Gqjqj0Y+cB+qgFHJ+2HOFB|PO4X)Xi-b1Uerc>Gwy~YY zEgaC$kl=(kZD#M-zL7WNw!R@B;L68r6`z2Nj#UUOLeD0 zT4rs}C98W&4SjE0FB;);`ve18tw{W^xEMiHNtZ!me*%TDdIqLa5^R7NhU)dc$}`=j)rFFn6ycUSiVPn>4`q4 zW&5_*vZs_BbWbfz=cHaA)SfurPG@3i&tKS~2>M7TI=#lOL+}dm?5?Ymg&le+CnjCJ zZ#IXMGmRC$w|*jX+@Gil2|#Gqi!2!b9W?%oNI*E zw302r96&jqgYF?Pz}4>}XpAJJyzphmAlvSXWBLZrd&$7Aa>` zJgFJDqP3blVmZg=acEYp=XVzBpaEz z2x7es?FUjo+>h zR>`ZQt@|BqGdh(V&GksQ=St%KrW+h%gHtN>M0;1!^zb|@>*1ClhKfg8hr=2;`!@6c zPGFoL*r(U%wTN}thKf@~s_98QyXp5dm&|X`HF0~pJ~xipQJB9m{4w+Ur%5?qDxmm&LwiynUi?W9Uog zp%HZSjqyx@fAnY~<5qgVKyOv>;9g~Pjt4v8E(gOay32`SI$i|QV8$F56A=_}T#yDc z=D3)Mpn&6oG?+2R#Y6-J92ca)j5#hQA}HXvAPr{BaWN4=0mlVtFk_C3i3kcfE=YqJ zb6iYBP{46P8qApEVj_Y9jtkOY#vB(D5fpG-kOnj6xR{8bfa8KRm@&u2L<9vK7o@?A zIW8t5DB!pt4Q9-7F%dxl#|3FHV~&f72nskZNP`)3Tuekzz;Qtu%$Vb1B7y>r3({c5 z92XN26mVRS1~cZkn24Z&+jnL4g|Fyy zfr4IJsUx)aG(vB@iO{Wo>G$slbtQ!UxPXvy8KKAQ_s)NFmTK1)tMiTE=d0h(C$3A! ztKU6&?yukW9=&n%+Q~~Fee%|WU%d9zhu{8sr1684S-9uZqwij6;CD_v^7`_z*?*3m zZ{7EK>r!R**3DOb2~J(yx%}tL3aZV1?9QMwM?d&G_{sZ`7C?&&OV!WLT)6lj@j=DC diff --git a/res/img/chevron.png b/res/img/chevron.png deleted file mode 100644 index 81236f91bc2fe4b12c890b22b909d6454e67bc7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14638 zcmeI3U5Fc16vwBaQlkZ{U`u@&rxdo-WG3I6VKQYm*={0cU3OEu`(!6GH@m|oGvmx; zlU*v*53u#2Qc)|?2VaC@wJJVoE54{G2#U~x3JRi9MJ()tupq2=X0pjiHrd-sA8*Je zXYc+0&$;uvADNdqJv}wKE3_}fFwCxEAwPq^_j>WpyYT0SwM*aPue+_nyu&c}JmCH9 zVBR>76{911dCr|HJtnGVJ)&r41w~qQ3#%DMI^41pbqTp_1uf`Cmb-EJQ;yZOEO#tf z5=vGME$W3;8_ljxmDSZHHKTEd<&e}8ae_K>6}DBc8IIV>a(-SB$6hnfvA)Dz%5q~~ zL3XY*&E`xSvB^j(tO}_#o6ba{$#goAeuRw)(IhX#`M3~{#l?gmCSq*+#mONYNw!uM zXYxnd{JuW~3R9nDzo6&15pX5aVO9Fjj<}6~k3pVZ+%UB-zZ9M~-Ui zmaCfv>*ZA{X2Z>LoL8vxYF}5~>J&1ZHakp_Zz&cZjR^c8lcsh&R>Q9OL(^0q)leN7 zu7iEifj(=|bWLZ`98$8=J+v^MlTxWud*FEM^?{`wcVZbMXd@lybjm9h;%AU!Hf$A5 zEaOYrKj`XRz1p3eo=jfP(6OVIKE&qr1U7#u1T!SzYZY@gQe4w6n`TW8R@w9>LN=H4 zR~0)_QdHgWxE_@Fep7eGyZKOFagpq;$Z%8$3#qb@5#xfG6b=bdQ4m0qK-rh0WNLbK zr6)%$S@x{n8|DDY{v3D*X^N}dR2HZOc{Ek5ns!}rWxcK}Al@<-B);1Sl$~`Y=FFOD z<6$8=F7bn!fy-ZOV$pD1#ZXZ(FXM)Yu4`f?o*qr5lz6y08rQ-JA)N{b$8oy#3Nnt=(d3VBeDZaa+e{ol*lDZ}hiXVnCWLr3$)(SLg~@ zxp@8hr`ares<(Bsqo(_(lBL)V^7dSo+uU@WW2|#Zc^-f7ii+x;XR_*T38YDUPiuEr z9cSC7|KAA=@&o(u8qGyyY`39;RK99>6348%O~poI3wTZ3+-?u@_8R*ONWAw8P}6&- zB53WMq0KeBbw(xcU=#6bz#~)qS%^yfmbPx?KtJcrYOUex(=h?R_^9{Uw!-dy>-_ds z*xhgKI*%Hn3(_FQ6c-T@6i{4{1~I0%h=`zo;(|1Y zF~vnh1O*fqq(O`+E+Qf*ptv9nVoY%n5kUdP1!)jtii?N{3Mei}gBVj>L_|73x0zhYbA8 zUlTvvC*S$*8T?=%s}^QT46}NGVNO2BFzXxm`wxa`2n_S*afT6JXP7zdSL0AT&~3&#XCD^Tech^5%STt2&;54s?Bv?3U#cIa*B<@*^p)3so*4gi zgHzTn7A~B4aQ*l52f2~A*cV^9|BJoXKe=)0%87rziZU-q#}e;d|M4mw3san!%3m5k G{_KAu=;Ooy diff --git a/res/img/close-white.png b/res/img/close-white.png deleted file mode 100644 index d8752ed9fe1036498acf69cd9d5beb2287086b18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1305 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z81_tI8nIRD+5xzcF$@#f@i7EL>sd^Q;1whpd3^o;3KxS@gNuokUZcbjY zRfVk*ScMgk4HDK@QUEI{$+lIB@C{IK&M!(;Fx4~BGf=YQQczH^DN0GR3UYCSY6tRc zl`=|73as??%gf94%8m8%i_-NCEiEne4UF`SjC6r2bc-wVN)jt{^NN)rhQQ2mNi9w; z$}A|!%+FH*nVXoDUs__Tqy(}E4xsMLEr45;R}A$P(0}?Bi3R$GdItK~G?iqgA)JSz z3nYV6TWUon4s9SAh&FIwK-_2p3{flJ{FKbJN|(fvR68RBLsMM?3tdCQ5FxocyBTg2d!hP6<>}%WVj*~R z;$A^1k}+RFb^cqaFS2`#&6^$e zB+O_Ei!YhRZhJwz@Ywr~y^{*pF>U9W=Y6X;>!bQg#XSea@2u4Hy*%fq*tQK#@+Px$|4BqaR7efAmN84iKorN5)24&C7nef16rAfObVvwv>FNhiTpS$>E*%{l{0<7; z3!&L`N}=H3VlmJ~I*Sgakoy0(y%3vgl1ezxyx z@JcFYwd=J_(==aUkjGUjl}>pl%M0X%=7D#+U5z!XkVPi- zbcP~YAHvjVp|b0)?$2=?4pR%G3koL!9Y#$iJe8)HB$I4}y08@Ug^0+em1-e01%&K< z{8ZphVw#uPXfzUX3glhL$>DIQbvhk6j9Rh_IeUO2=w^pe^b8No%?Z_5?mSNvaXkzN z0`Q3nR)maf!6&x}n2JF*J#gU)KZ-&NnPdwl3%=)h=!_QM_w%S~WRm^wkKOXQ9*@Ug zcw*nMwKm*JeiXU(yi&r^uv{YIUMPw30pD*X3&@&(H9|7h-yo~?2xo~5Z~!ACCJS_J z7}+VSfz6b88Hbbk%K!!Rq+YN0kbn+hs}`CH1_E_}lUW7P|(a Ts#h8Q00000NkvXXu0mjfRwM*t diff --git a/res/img/create-big.svg b/res/img/create-big.svg deleted file mode 100644 index 2450542b63..0000000000 --- a/res/img/create-big.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - icons_create_room - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/create.png b/res/img/create.png deleted file mode 100644 index 2d6107ac506e8b89ac0a3825907365d846cf4e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 807 zcmV+?1K9kDP)(RCwC7md$D!Q544~Nx$yJCJ6a z&P>#vg>q-^{hf2~J#+qNN7FRP&Zg7pa5x-~$CJr~q0i^@`~7=+dy1miuHCV40QchJ z;`;h}Fc^eFA;IOj@N{!?6AT6uiNwLdfrTe?2ea9%*=#l%jbt(jA{vd#vTT^MSS&i7 z4(_k6uF~mrDwXnjy^b98`~70E7>PtOnM@!Muswv)XjG|Gy4`LrmkWo(#@E_IYq#5l zLV;iHk;anK)6>h#OT+UA4tNc{*XwC(8Czcs?%n}hLST}%fdMgus5>BG&d$!(I2qHk z0tHYE_1qw5xK*-6+Sq`A0w{*E$agZ5oRPL}5KW=~9&gAn1d*^_SPzhqOn6y>nCcpxhsbbWb)kut!oABiT~^b{_;#_7RaF!uSy4QuE5TA0ck1;zf7xu-yr6#n^5N5G z>tNr$`}lg_q?(q?Wqi1;7kh%w@<(~ewH&zJYU}ICdG*avKJJplMXRd&`4f)?!A*&$ zJpA)0clQrp?cbkQXL@ozdGYcv;o!b5Qb6hP5x=;=mJfNFDao6~`S0%#QdRkd4BmeE}k$^5&e zSX-7wh=#_(*tYPR5Y}s3O#7Yx-gw!!j))y{WZF6sZ>!aMbn9r*{0ilmEN!Fa*R*{H lN`YiZ3B!}a_Wh3l0{{dzLWKWE_s{?U002ovPDHLkV1ng%k_i9+ diff --git a/res/img/delete.png b/res/img/delete.png deleted file mode 100644 index 8ff20a116d4340453072e38604cd8de5c894f30a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1006 zcmaJ=PfXKL7_T^tkfCTehBQ%-B#LAacehOvJx_uxPvBk?SnPYzS2He;il0< zO;8dO!@;vhuaX$!#e*JDkH$npNIY}#rUzfgHas|c==`S*;K>u@zbSlrLyl2gsNs3EfSYCjsho}K5R_bV5mumSudjT7QxtW4+^N=Z z%_u7tav3v@VItQjXo{Mej(pQvf*91{qT{Lb!Rxm)aBP*nkuf;K*I>h$*$CkL#%$Hv zSh8fBp1umEB83pR5St)!m%UJlRJz5h5Ic6WG-!q3C6zubs%Fdq4FwQnm~6`8vJ#MF zhR;Y+TDk%Rj?b{1$ckJ_5S28iqy^CaXp$|k7nF)#Z0903m2P0{D=gb=Hkqc#pkR^Z zWm#r9ffa-liAaU(9yX(t7mjrpbQoHJ<6{STAZ9e{Xcen8sr0Y~*YDDLVS7wuU~FXi zEYEOpOPxT&_?24CMy7Gq}(R@I}ePQijpFE74B|TS-zSf_gN+grX%(dUo zj!D}e6PJWLJN*ytuT1ofzDxYrt0Z4-4wQy(@sFO?K9}F$ySzv3pS7DJKRmGQ?@XNe twp;#k@$v3%d2+;zw)&sYBd7Zk=cpIoM}G;mt)KA=EEQ(;m-*Xw{{X0DIb#3- diff --git a/res/img/directory-big.png b/res/img/directory-big.png deleted file mode 100644 index 03cab69c4a5f53c252f03745a70e53f7ca7f563e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmV-L0lNN)P)Px#|4BqaR7ef&l`Rg!Fcin>$4Z7I9EJmI3N+yc2sD}_pfD&DNG>op0|-t-vZQNL z{x4x-q+45sSi6!)=J4`Efk7g# z0$yOaMgNzGW)as~E6i@~Z6^Z2E2(IZQh^JM5(6)Zi1(tH&^4fA^IX!mvAw~8fCXni X7jjMdDj9}v00000NkvXXu0mjf2epbS diff --git a/res/img/download.png b/res/img/download.png deleted file mode 100644 index 1999ebf7ab69c19220af2c469331b2c96c44225b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1041 zcmaJ=PfXKL7_XT@AWlsb|AF#SJb+uBe(GU|8?#37ndNAtiV8es6hraK9`F_9e-|wwWPTUH2UhbqQ zDxAHo?q zLA@*K$YQi0hVdY)gpI156Nx_nNd&z}UOA~p0 zsjQ0zJ$e(2_!1$oAl86y&Doyh%XFPrB6i?rX;2TrWtl!Gs-RAS6mlWpnM6eA5&{rJ zCdv!KkT3{hT$E?II2-38vA8tENkcJk_|YVrYs^SFC3BdI++@0hu_Li;rBY!kaR#}w zY*Z9QmW#2mScF7GyhR&pe#G|r8Vm~bbk}sSiEI!sYDKhwWtvoa(1PVOX>IRtOk`lJ zuQ_a#;ewVLfvWodP|IpYdpHM=>is9NmtS-sn}Z%&aCNe{nZ6*EBc)uZVdUl!nrlpP zvV<`5O2`4JRDEioU)6Ne4x9sZl&VTu+ryfz!>l6HgoiOrLy9NTN-UKTFLzv9`O&)x&W4^(FL!NF(cY_kajYktyVzN~G2h=duzR|;4yr3-Kd(Hk zydF6J - - - - - diff --git a/res/img/e2e/lock-verified.svg b/res/img/e2e/lock-verified.svg deleted file mode 100644 index 819dfacc49..0000000000 --- a/res/img/e2e/lock-verified.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/res/img/e2e/lock-warning.svg b/res/img/e2e/lock-warning.svg deleted file mode 100644 index de2bded7f8..0000000000 --- a/res/img/e2e/lock-warning.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/res/img/edit.png b/res/img/edit.png deleted file mode 100644 index 6f373d3f3dc7dfbb4186e4347fad43920bd04279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 zcmV;-0WPx$hDk(0R45gVlCf&SP!xv$Tx)RmyQVlu+3ygXZ$ zrL^HmsMqUZu~x1@)$Ad4coqLoFF_9IaN%;hfg% zwLh6me3|*;FsY%IjNlq^Bl`Wme>@&xnr7IDXr|R_1!|}z6Qi@+?S9E9ADhkQk#kBU z5{Sp+@H`K$>tZw-VK^MlZQFiOD;Mr61F(c^m;46@h9Cq diff --git a/res/img/element-icons/room/composer/send.svg b/res/img/element-icons/room/composer/send.svg deleted file mode 100644 index b255a9b23b..0000000000 --- a/res/img/element-icons/room/composer/send.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/res/img/element-icons/roomlist/clear-input.svg b/res/img/element-icons/roomlist/clear-input.svg deleted file mode 100644 index 29fc097600..0000000000 --- a/res/img/element-icons/roomlist/clear-input.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/res/img/element-icons/roomlist/direct-chat.svg b/res/img/element-icons/roomlist/direct-chat.svg deleted file mode 100644 index 4b92dd9521..0000000000 --- a/res/img/element-icons/roomlist/direct-chat.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/res/img/element-icons/roomlist/e2ee-default.svg b/res/img/element-icons/roomlist/e2ee-default.svg deleted file mode 100644 index 76525f48b2..0000000000 --- a/res/img/element-icons/roomlist/e2ee-default.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/res/img/element-icons/roomlist/e2ee-error.svg b/res/img/element-icons/roomlist/e2ee-error.svg deleted file mode 100644 index 7f1a761dde..0000000000 --- a/res/img/element-icons/roomlist/e2ee-error.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/res/img/element-icons/roomlist/e2ee-none.svg b/res/img/element-icons/roomlist/e2ee-none.svg deleted file mode 100644 index cfafe6d09d..0000000000 --- a/res/img/element-icons/roomlist/e2ee-none.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/res/img/element-icons/roomlist/e2ee-trusted.svg b/res/img/element-icons/roomlist/e2ee-trusted.svg deleted file mode 100644 index 577d6a31e1..0000000000 --- a/res/img/element-icons/roomlist/e2ee-trusted.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/res/img/element-icons/roomlist/explore-rooms.svg b/res/img/element-icons/roomlist/explore-rooms.svg deleted file mode 100644 index 3786ce1153..0000000000 --- a/res/img/element-icons/roomlist/explore-rooms.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/res/img/element-icons/roomlist/search.svg b/res/img/element-icons/roomlist/search.svg deleted file mode 100644 index 3786ce1153..0000000000 --- a/res/img/element-icons/roomlist/search.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/res/img/explore.svg b/res/img/explore.svg deleted file mode 100644 index 3956e912ac..0000000000 --- a/res/img/explore.svg +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - diff --git a/res/img/feather-customised/archive.svg b/res/img/feather-customised/archive.svg deleted file mode 100644 index 428882c87b..0000000000 --- a/res/img/feather-customised/archive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/res/img/feather-customised/arrow-down.svg b/res/img/feather-customised/arrow-down.svg deleted file mode 100644 index 4f84f627bd..0000000000 --- a/res/img/feather-customised/arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/res/img/feather-customised/bell-crossed.svg b/res/img/feather-customised/bell-crossed.svg deleted file mode 100644 index 3ca24662b9..0000000000 --- a/res/img/feather-customised/bell-crossed.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/res/img/feather-customised/bell-mentions.custom.svg b/res/img/feather-customised/bell-mentions.custom.svg deleted file mode 100644 index fcc02f337f..0000000000 --- a/res/img/feather-customised/bell-mentions.custom.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/res/img/feather-customised/bell-notification.custom.svg b/res/img/feather-customised/bell-notification.custom.svg deleted file mode 100644 index 7bfd551f97..0000000000 --- a/res/img/feather-customised/bell-notification.custom.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/res/img/feather-customised/bell.svg b/res/img/feather-customised/bell.svg deleted file mode 100644 index b6bc5ec502..0000000000 --- a/res/img/feather-customised/bell.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/res/img/feather-customised/brush.svg b/res/img/feather-customised/brush.svg deleted file mode 100644 index d7f2738629..0000000000 --- a/res/img/feather-customised/brush.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/res/img/feather-customised/emoji3.custom.svg b/res/img/feather-customised/emoji3.custom.svg deleted file mode 100644 index d91ba1c132..0000000000 --- a/res/img/feather-customised/emoji3.custom.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/res/img/feather-customised/face.svg b/res/img/feather-customised/face.svg deleted file mode 100644 index a8ca856b67..0000000000 --- a/res/img/feather-customised/face.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/res/img/feather-customised/favourites.svg b/res/img/feather-customised/favourites.svg deleted file mode 100644 index 80f08f6e55..0000000000 --- a/res/img/feather-customised/favourites.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/res/img/feather-customised/flag.svg b/res/img/feather-customised/flag.svg deleted file mode 100644 index 983c02762b..0000000000 --- a/res/img/feather-customised/flag.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/res/img/feather-customised/flair.svg b/res/img/feather-customised/flair.svg deleted file mode 100644 index ce3a5ed6ad..0000000000 --- a/res/img/feather-customised/flair.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/res/img/feather-customised/grid.svg b/res/img/feather-customised/grid.svg deleted file mode 100644 index 4f7ab30d97..0000000000 --- a/res/img/feather-customised/grid.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/res/img/feather-customised/lock-solid.svg b/res/img/feather-customised/lock-solid.svg deleted file mode 100644 index 9eb8b6a4c5..0000000000 --- a/res/img/feather-customised/lock-solid.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/res/img/feather-customised/lock.svg b/res/img/feather-customised/lock.svg deleted file mode 100644 index 1330903b30..0000000000 --- a/res/img/feather-customised/lock.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/res/img/feather-customised/more-horizontal.svg b/res/img/feather-customised/more-horizontal.svg deleted file mode 100644 index dc6a85564e..0000000000 --- a/res/img/feather-customised/more-horizontal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/res/img/feather-customised/notifications.svg b/res/img/feather-customised/notifications.svg deleted file mode 100644 index a590031ac3..0000000000 --- a/res/img/feather-customised/notifications.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/res/img/feather-customised/paperclip.svg b/res/img/feather-customised/paperclip.svg deleted file mode 100644 index 74a90e0fa3..0000000000 --- a/res/img/feather-customised/paperclip.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/res/img/feather-customised/phone.svg b/res/img/feather-customised/phone.svg deleted file mode 100644 index 85661c5320..0000000000 --- a/res/img/feather-customised/phone.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/res/img/feather-customised/search.svg b/res/img/feather-customised/search.svg deleted file mode 100644 index 9ce0724ea7..0000000000 --- a/res/img/feather-customised/search.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/res/img/feather-customised/share.svg b/res/img/feather-customised/share.svg deleted file mode 100644 index 7098af58aa..0000000000 --- a/res/img/feather-customised/share.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/res/img/feather-customised/sliders.svg b/res/img/feather-customised/sliders.svg deleted file mode 100644 index 5b5ec8656c..0000000000 --- a/res/img/feather-customised/sliders.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/res/img/feather-customised/star.svg b/res/img/feather-customised/star.svg deleted file mode 100644 index bcdc31aa47..0000000000 --- a/res/img/feather-customised/star.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/res/img/feather-customised/sticker.custom.svg b/res/img/feather-customised/sticker.custom.svg deleted file mode 100644 index 691e3b3925..0000000000 --- a/res/img/feather-customised/sticker.custom.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/res/img/feather-customised/sun.svg b/res/img/feather-customised/sun.svg deleted file mode 100644 index 7f51b94d1c..0000000000 --- a/res/img/feather-customised/sun.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/res/img/feather-customised/upload.svg b/res/img/feather-customised/upload.svg deleted file mode 100644 index 30c89d3819..0000000000 --- a/res/img/feather-customised/upload.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/res/img/feather-customised/user-add.svg b/res/img/feather-customised/user-add.svg deleted file mode 100644 index 6b5210c1d6..0000000000 --- a/res/img/feather-customised/user-add.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/res/img/feather-customised/users-sm.svg b/res/img/feather-customised/users-sm.svg deleted file mode 100644 index 6098be38c3..0000000000 --- a/res/img/feather-customised/users-sm.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/res/img/feather-customised/users.svg b/res/img/feather-customised/users.svg deleted file mode 100644 index b90aafdd4a..0000000000 --- a/res/img/feather-customised/users.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/res/img/feather-customised/video.svg b/res/img/feather-customised/video.svg deleted file mode 100644 index da77b6c57a..0000000000 --- a/res/img/feather-customised/video.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/res/img/filegrid.png b/res/img/filegrid.png deleted file mode 100644 index c2c2799f37542a51ed12e77b570e65f3fb994541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1SJ3FdmIK*k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XT0C7GLn>}1{rUgjo_QD8XZDHUW!=TPNSLFcr~W@@ zhj6M!E5q)E2R<CWT^bT Wt@F59?-ihX7(8A5T-G@yGywo&OHs1` diff --git a/res/img/filelist.png b/res/img/filelist.png deleted file mode 100644 index 3cf6cb494eb3ca653c46c91531a195471c5e90a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1SJ3FdmIK*k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X8a-VcLn>}1{rUgjo_Q;yFf;Fg6$_n@1c=25RnPxt^X=Dp zdzqKLof8iRO*!g1Yp#iNquR2Sg#{Z7lBWLs`27ExX!`=muFJn2%pVyEax?_}|HnV6 zgQ-pGLjR7G#vq@bCGH{yat#aH)EBLBDSVYGW5jwY!%Eh7`C`@oD;9<@Gcd9-JfH8` UxIMA(KF~1?p00i_>zopr0O8zKJpcdz diff --git a/res/img/fullscreen.svg b/res/img/fullscreen.svg deleted file mode 100644 index e333abb6fb..0000000000 --- a/res/img/fullscreen.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - Zoom - Created with Sketch. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/hide.png b/res/img/hide.png deleted file mode 100644 index c5aaf0dd0def9ce594a1bb8d9538aebba69039b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1165 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eM!3HFEez+qDq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfeOmhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo|$g4ftk62xuu?= zskym{xsHO7fuX6sfw8`^fv%CUm5G6siID;nC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)VF`a7isrF3Kz@$;{7F0GXJW zlwVq6s|0i@#0$9vaAWg|p}_t>Y?v6r%cH>i<3s!W`lI|dzdyGJHK8w{LbHf?@!Vkhi=F7Z?pTS$v^3$U_#=DsgD!V z(vtqPhaNuo-2T6O-B0c_+k}#n3nnF{ACdHmmizak{^8$zwh3JPlHb~oDdliQG=F`5 z|9?#OyZ=9`{-2g-3tR9?f%Tl|sy{jtBOX7zyng?q)9?RPe0+60o^8Q>38g7J=cw$Q z@%=Fuj~bg0<4ZrK)0b1&wIc=DnadkJli&V*&%3|j(t;&|tB#yJd+^MU-X}-g?>_OJ dD#I?2z)->P;j;4DFi?TR;OXk;vd$@?2>>$Ip6UPq diff --git a/res/img/icon-text-cancel.svg b/res/img/icon-text-cancel.svg deleted file mode 100644 index ce28d128aa..0000000000 --- a/res/img/icon-text-cancel.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - 28D80248-63BA-4A5F-9216-4CFE72784BAC - Created with sketchtool. - - - - - - - - - - \ No newline at end of file diff --git a/res/img/icons-pin.svg b/res/img/icons-pin.svg deleted file mode 100644 index a6fbf13baa..0000000000 --- a/res/img/icons-pin.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/res/img/icons-room-nobg.svg b/res/img/icons-room-nobg.svg deleted file mode 100644 index 8ca7ab272b..0000000000 --- a/res/img/icons-room-nobg.svg +++ /dev/null @@ -1,28 +0,0 @@ - -image/svg+xml - - - - - - - \ No newline at end of file diff --git a/res/img/icons-share.svg b/res/img/icons-share.svg deleted file mode 100644 index aac19080f4..0000000000 --- a/res/img/icons-share.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/res/img/info.png b/res/img/info.png deleted file mode 100644 index 699fd64e013954b01bca869c67ce3868eb82338b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 660 zcmV;F0&D$=P)-bA>~pwRsOBqVpKY)2 z+h?7%zqK`zB)vToKi-~CKSS%Ke zMs+&zi|+UPX0zF7G{WI2#=frHb5cx8-vA=LuA&;xAR+s8UgoKqU~s z2{@}tVS2qj5{cYXvXDR}5WoP=PVgWgIa}5f-BhE|2n1xx-v%TmlSv?e1LKj83qS&u zKmdQofgcxu1S)|*Fc`$&Rcibm5Dp2ANFd;FIPd_W&)g5fA^F(mK2;IDiSBW2mSD5l z)y76R0`sf@0000 - - - - - - - - - - - - - - - - - - diff --git a/res/img/list-close.png b/res/img/list-close.png deleted file mode 100644 index 82b322f9d4e5b93eff00e47263effa03721c2271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmaJ=J8aWH7n;T~ekG1;t7%E>q>Y55D2>z%2ypCcW3_%@Uy0iR z6^5enSWrP7VL)O)2v`|-gbJ$83^1au6$}hWAeD2Pqzo;V&Ug3g|GxkGAGcC0j7NI< zdN2%&#7T|v~E`co;TGQPy(vHaCHNWU|49- zC|6)bxgct`NveSl>6;EhW7x=;@2J`=fOr+m7*>k-{`w7p8+wYE;uKnOBv3OZ7F{s8 zSSV|Yvznk2W25+pFCqdHKo$4RIm;9M6w%}r(K#?v1m1LkvngU%R7EM`lI;SVBa<vggo zCvA6zVgx~;XqIBx81jgD3l>!UnB@($8D!vTuHit#w(x*at=jW2MIfcSDVR=&*790q zLItCI)u9-Y4pM46D$4&|O|#?e!4lZhyDzaLH-QD)SbYzhI}jTTgz2EjGH{J+K+n0hi8m7$jeWFm znFPZLxr6yySbZNYO>CN`57a^-F;vjrf7;zPp&1H}o#927&iDfh&Af|-yK%X98$FDA zUQU<&uhl<0J7XcPt2gxE-P0SZp@;YHY@Rt}29+~1Tbnd%rP)eXu!0BE9mK;xP&_C&(9NUsG8lLj4|?z@%$Kh1JXixS@4Y|&-|zqRdrR5L2~Yn} zKS2(peAQ22rwrrp*~tm2F7GRkH{|T9->O2W55s)+QV!h#s$& zFQ9^y;S^J+WY>qP=@v#4#OPSfl9dWXpa@Hv5hH)Rc}oIKjgi;F5+hkWENiK{4X5jq zd8J-aSd|>R0!C{bCeR_0K~0}E9Ih54o4g!8yJngMO&3&&k^4y%q%7b~8-g$u@hMCs z3Zg9K4@aY+=p_(f{9&32(m}=-2y!8Y3k5*yBXKlao#AqV*ouX3F|v%1#nE)NTBWK% z%Ct+gpJiE^3DALn4}18Wc>~EcpWzI*83gDkwq_yCG=R$}7tJ{oBXOqtCFoX%)^J*F z!VRNqvPJtT#x1GsC`tc!)%A|IgL3d7-+vN2`FRV{Ip~;kwt@#YGwg=4INpXbGVQ!+ z&bGUlEt|-6%BBT)zS%Y4m1IRTT;s(iN|Ly=;UL*iU|NWgn1|9dl?x|A{xB;FQ9c>* z`;%cdEJoQVBSbF8`CuX-wy}b#%<0fTZLE5LO?Jh)g3v7-S%9{78>*sh>Y!OTr*+RI z(Uq@-RlDcHcg4~;8QLB1U*m3@u!h`YN4)sbkv}xB=4~wQ!!N%K;D@oA7UKEZPVx8N z-dGRkef=tPJhfW_ME%z@X5+E7wtH-2`KU_V=-ql)@eZ70*N;LHOszl72y5pzvm>N$ zWG6dvV&Sfrf09}e78V1mtJ^<^uHJ7j{HfgMcN61hrhGl|MfU5~_sn)^CEs&oNL+3R wgW~gsa9UhxTo@ETjz93cFM;ce4PyMxAtLvU?ETR9>5= - - - - - - - diff --git a/res/img/menu.png b/res/img/menu.png deleted file mode 100755 index b45f88950f03368dcae0c812c3e3a318b4540650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^(m*W2!3HF2n%o+I6k~CayA#8@b22Z191~9$#}E(R z<*2oYoLAxPgg&ebxsLQ0F0g{u>b%7 diff --git a/res/img/network-matrix.svg b/res/img/network-matrix.svg deleted file mode 100644 index bb8278ae39..0000000000 --- a/res/img/network-matrix.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/res/img/newmessages.png b/res/img/newmessages.png deleted file mode 100644 index a22156ab214514fe3be87b85415fc8ad9ade86d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0Px%2uVaiR7efARy!|5K^Q%=60Zauu~A4g3Z+D&Q3@d>qOc0AMi3IcsQdtl#9KjY zLntWt2kKQw6e22(ct6H>=FaZA+}XVz_au`$d*{37d^7VsRv`~G2I_#4Za{U&Xb{u5 zHNOJ%xr_tgX;)$U(nX_!7Bq&1NX^OGkUWcmY;y1Po6I*vY*t}ig#Gv?Amm*_x+SB+ zZ(8V=z7>&#i0pl~jD7y0k(>l#sh^XRg$~719!HKfy93X2lEWvOGYvg^2i|)!J23+G z%+tT~JV@9aS0nGlddmw9apv>Az<65_~|0qP_6mTQi3RIT5*Q+I123p+fvOADUj|-SOkL0i%1gA;3yCIoE|eDo`x8K0qsO#!D&$MRtCSrl zSjHdgZ7mvE5rL%BmJ1X~jR7}zz~EW|a(4eDU+cVt?1K}`@ z$3$l~4{ZIGoBWdq9h}be0(xVPh?5K=ZJ8AD)U||*UX_tA2CYxDF}7?lzJBcSS+k(W cfBbFv0K)*Cq8-F~hyVZp07*qoM6N<$g1{I5)Bpeg diff --git a/res/img/placeholder.png b/res/img/placeholder.png deleted file mode 100644 index 7da32f259c1a90d721dfc9abc4ad427ab9e7c5bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmV;50d@X~P)ntlanzq{fbCjfCT%hE_`W?6RRV+Y`~D2n@8z07%@=Tuia0Fgm_4E7hI zgjnH=q~EA_vkiP0O6pa0H)#llu-yUw)TKgXy8 - - - - - - - - - diff --git a/res/img/reply.svg b/res/img/reply.svg deleted file mode 100644 index 540e228883..0000000000 --- a/res/img/reply.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/img/search.png b/res/img/search.png deleted file mode 100644 index 2f98d2904822b67ecfd0096434d22d17443c7e03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 742 zcmVPx%ph-kQR5%f(R7*%zQ54<#oa^T)BqiF%iDeX7U}YK-hYn0$GZ6pnHp!sxo z2MtoRiL)rACTC*r*u3SyG~6?UqYZ%@g(#pH7$%w3gak1~ z0P7iWBLI2Gg4=ER70>KBPVus-x8GL|fZM=Qoh^BlL$TtzKxd9bQGqOaTXvV;iskL= zCDW$_E=Ou=tv~yVimSJS2Bzw zwdS0jL&Of0c%re-pJF$%$09vN?hpbeF72%vwi9mg#a*T2h};Wk6}V{xKwKsfymb>e z;;e=MVY?%zL4iO?3_Rr~aKaTCWHx(|VAotwZ3mvNM+yTG+)g|7OTcGi9P z=R<~N1`7V@mLaCq>|o?myg~m~H&HCk2JBN|9*D)GYjJr`O;{k_0kW!0-Cj|`ZLaU{ z&eLC)#fF@A)9C60H18~X0?aSxS0&VY16>>3#7zUfTmz|+Kwd+lQ%wQi5hv~PHI0xB zFS?HlprcIqNMDFy$uqBs;yoneGlT*8sBp7x{?Cfk8x>l(8|U%VBEzfZo)JHorhX=V zj9*M6(7Av=Em2wps5o02r0SPSF~X!E4o-eue3+S@OmmCjv%30BQ{k&J&8PvS(ER%~ zSE4uaH`AY+tvH!%irL_nGD)xr4Q^KoP9k7N(w9)1dGO4_Kbb~%Y<%uJMgk9^pmqw& z0{x2$zr9PTT`E*m^tW?!ZuvbT_9J1Pf%0i2KVj{s{r`2+=ph>Vy0bv2Y6ci@?HTF# Y4jDfV9bl4!EC2ui07*qoM6N<$g2TyJ%K!iX diff --git a/res/img/selected.png b/res/img/selected.png deleted file mode 100644 index 8931cba75ff298fb0cee26b0d8ea1f7377f3fa7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 995 zcmaJ=J#5oJ6h5`6LY2B9q_S|hODi=#+lk}E#4T+up^ny`Q_?s9&6#JTnOZ zn5wN{EB*6#`s4)v{(SQ2PkLaL7F(rl*0m!7mR!0GmezkpjH%R zRnv0XJX9oEMN$@JrHqo*bCRA@VE++#w8(Ai7OwVV@slBR7z=fTy4|kW&5ATyM{==P zM3RCOCBr>3@pi!MBoo9l0|rcDC-Oq((Ez55_8Q${hQO5`q~M1`+92+ii5Cndc8FwA zN>ds*n&$sqeShd3Gm9MRJ(f6bZifU}B&J)D!yDJ0NkfHtIU+WrQIpcmK@}Sv%4po7 zAuN}BRfDsp?RY_Ioa>=XQ?CUvvjd0Jupw|B(eqrrA{DW;Bx#zQ#j;#c3prWCg(_Cm zTy+^23Ii;r&X!LCHo&@v*uqF`IuL%yBV!VIH;7w}s1JLI>)vQB>PWsm)*Y=SKN5?$ z7?ig6NV^9nK11ntIK2EY9Dfq_%Q_{F$f!%NNN^Zk#{rog#VuNyBu`4jj4 z;#Xk*uC?&^tu@__-#_>=HvjU-`u6ah{q@6K=fvEdvBMSK+CRSs#=-Z~XRm?_`CsX^ Nt5xdw>GHLk{{SlNH*o*} diff --git a/res/img/settings-big.png b/res/img/settings-big.png deleted file mode 100644 index cb2e0a62d06f155ee89c02f6d5ca202fbda19e2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(SAP)Px%c#KELZq(h~PlY)!TMF+J| za41Ct>!2Vgg5cmJRtL4k=3|l|u9Xf-o1g)$pyCG-Bux{4C+6PVywJopUbsE~dp`c> z+BmSwrcy;7-^!6%Z*ZWiw=Tc z1YDp}8#%%3HGRP!v0X+=kyEy9dx_~njwcd{`^r}*pz>3YOew=gr6ggDrc$Y=0?a!Y z7DcCnB4zi-6^~BfcDpaK<)6y1Q3?51kH>RK#k&+(TwMI&_xp3)K}S2`4$jQY%`GTi zy#rA|zF8R@a+%6T(H)Rk!^;kz>T-2;wa3(3u~;l3JU?(urPX>>kQ561_%Qs|bzuPwSq6uO&CXTegf>IkQe*kMBNIQ42xY_-SNBo{{r zUa0`5Y-Ov(+6{N$B={d|Tei`P2z&op_Et8D!Cr9%gTWWb1-APRxeK|~BxHTa=krbH z^ZDPVUM`t_zlUy%si$E+vrfP@Ls#BzIDal}1j1WpKn+WqPGYOx2e=v3R9Zav_9c8{)cP89D)mnKh2*uje}c!u3SC>&Gsa%e@JOLSINSfP-9C0eqhM zjP*eR8oCAjC*~OX8Rk)ZJVMG_bd}?|D_Dk3Ad74^J5Q4LkZ&j8G>#b(zYPQeduV`t z;$w^?_8VgF>+5??%wB9aO>*&V`X=+A!XxxD^&nYRFX}*jueHKW|mI{*Lx07*qoM6N<$f}6>B?EnA( diff --git a/res/img/settings.png b/res/img/settings.png deleted file mode 100644 index 264b3c9bc3fae654afde7a755cb424cbf46debef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)Px$K}keGR45gNk-EhQJIJUjxGK3z*Cb}m0Q0cEsQ5#=2rL~j+zak6OKH#)47;H?;+p>iZI6dg8O1v z`Pv_GhMnhh-nNtm|7rb6(WFMbq!5mb*~#iNsk{;ExBvkiP}IM&BiOqSigJ%;oE-F( zA69FHQeay`;O#-CG*gUQCjP!dZ$&0@!_2PC*h`Ge`$V(`!0jmdST_8}I~h>EYfL#q lsw<;orf|A8>vj!~*B3OzZD - - - sound_indicator - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/trans.png b/res/img/trans.png deleted file mode 100644 index 8ba2310a063039172ff652a857f7f4ce80fa7f39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmaJ=O^ee&7!K~GEEdF*3c`>@SixkHv}u~qxMY*o4VY586?@z?nYN)#CMHvx_M+=; z!Gqq#A0Q$g^yERWp1k`5yn2=Ouui&d*Ml`MnVFaOdET#QPFl@-#qAs048s)d1FKE< zEBPv1qW>2!hZVYAC-p8l#C(3s2MKy-m+6_8g(sk}@9u9do z_u;cJrf7z#?Pam+jSvAnGzcP{{rTxL3j$wfAIgs4#3mXB2lE6S&YK-?KJrwb-Mb5F znMMghL|l-C<0#cKon7#1^qiX^3l=V9q_gKqb)6P4ae{!%S2$0oC_qtpQC5_)atBC) zC_|wHO9CgAw6dU;C9wQh8ZGhrTH9(YW6_(=4he}h2&dC2KP~Y%89-50RVYYMk~r$Y zrL%~*85gBHD+UXtUJ}G4z!At9-5#D0ou!$cmk`El+9+MNi8c&oZVW|U$V*x|I?n%H z!*K1Lk~X@?_n*XRXBH#aMk$^o9vxhNCl3{CW`bOTlMcq?RTo=BOmI5HF)+%9kB~h%))w&@YWy3P1sv%pVw8C20 zn}jGLE3AKkH8x^%L4+}lY@sB0jQmD|L$D}Z3pVGXY~)*F{mr>lH)0`82Ik}aYuqan z)lhz1iUf(R}1{rUgj{%``D4^Oj9k5$2y#>IRxr4LpxyUSX< zIuOX-XH}45J)t$C^=rCarIC^Gd8Up3|NotRE#=gH*~oqGzPL|%BJKNQTkzFJg~O7P z5-A5{I$SqhnIiu$Q$R%bz`Lu$25g&F>h>EybE_`JFd1T*0xN^U0frATPF@pQo*f6e OjKR~@&t;ucLK6TpLRvfk diff --git a/res/img/upload-big.png b/res/img/upload-big.png deleted file mode 100644 index c11c0c452deddeb183e61f53918e6870b4a8fca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1669 zcmV;027394P)Px*KS@MERA>e5ntyB)RUE+Idw1Q|b3P(TxXiBev|dp8)~JRh%3 zJOGN;BMF}*l>cR;q0AYt(SZJY=l2cwrf5v8EQ#n?gQ2`7&=$*`u!u6y`hxNw5()YM zhDs78-UgmW^G!BO@q_vpGK5NKl8*G9i$OPP74x*p+oaE9#vFRy*oDl9(xP>?#`&>0Ah9S7Mn}hMb(GRfrt@*pqOSY>)J!?v01;j= z7&}Z>byyw~4*aYG;8D!sw!(_Lu5PY@Vm!s@u#~d8Xp`!&evn~sHvw=iD}Pp8=F)lZ zenK#wu+DL?+%KbedsMItBpt4`0G!VXf?-9kwySRoMRYWDi6u}4!+hlQC}9~14_6fc z&tV0jc$qsrh5r;Lj$tPI!Q}!KBJxCRWCm48EP@LGxCAaNJX_Z9q^|7{;q+d|Au zmGyDi^f+JxATL5@IRNv!3@bc3XWI@6v(vaq(kkJUz>8ZVG!FsB~B0-R{cx}&>p4-7b%1i)iNbV2G$T_+s}9Q^8h|eV@J7S1@k?*Ho!K4tyO4)Q zeCg0w^u+j_v=Q!>j^A5hDw)XaJQ7$x@HGGyMy2VWgewQ?eEpEMg-y_lUmi34vZ=MH zkN{~yVU6~t*)To5Em5i2Tu||OCATEJjA83)15k@H5oD{Gec~zu%fV zHh00-5YbAX6H46>)7R?r7ax>!y4g^1(M!c5c%bY4_PjKddZzl^fiZION_A1gvbkBC zJ^VOE*tdm-mHj>V*3iXR*Iw>+7=b; zDmb_!BeV9hfR7AFfUj zmc0~1bm%mAC}c*U5B?=0I%`vYr7fIMx%zGS%R9Tpd&OX(g|$PU&(?7GbgjK{nw-2` zog%EB=t{t{F9HC1g?hX*8}chI$r)3sgT0osTXfBXCq6MCi?cXHYL)Z??TWDOe$))c z&%mVqEi9mm%rh#l1(ajC190!P_RFt=&8=`<1iOvV+EHA{u>JKcqU*gbqe;SX9^_8sxBtOld5D4S4N|Ly^{;OeC0q@Ye*lhdtQafQfAB6SLmy}s`O z)N>Q3WrFnBEjbAsRJQeyRNt9EoF-LKH`)$OfTMtvj|$5>c+N$?5i`(wV`~#i^w&r6 z(AWHI)uv{6p7DC5g`6n)w(D?Ut?qYSF#}7I8_w0POB!;te(D=nn4SLs0qRLaZB)O4 P00000NkvXXu0mjfFq$ce diff --git a/res/img/upload.png b/res/img/upload.png deleted file mode 100644 index 7457bcd0f1380362c431cab9ffc85a3e1d242e29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 713 zcmV;)0yh1LP)Px%gGod|R5%gURBuRAQ4~Mt?mZ`S=Csy7A#m#tLWP=E1eH-xK?oK`wq=DyN(Fsz zYuJ|&^dYAN5d=Xe>`O?9AY@@t&?H^t_U`T8YVh`anqNEcc=!B% zzw_hV`_8)vJUq`k^A$55LV&e^m?yA|pmat~k(Mi)YsWM2zX|>^fM%c=B20RDwfyj; zR_Gq;ybORjG?}{5x}|PR%M;OoFz{_U+N)*}8EEBPX9P;y( zmQd#g1CjQwDBHQeu%w4#s?i%fMz zj-(g!y>n$#;@#v&A(7TEDy(W)vnR|5Iqr#emHr0jD^7D8Ek%z9zYN!hzm5VS1_AHR zmgM9QoT+aL``e_nQ14w6tTC*zRp)P8Vv8`wCO#*=mr|s1TKn)r)HbGk%AeEZM1Om> zH7_d&$SRwn9aV_H4K^W?uiTlOvT&u;{!)K!e8O)$W9=KwG1EN4LW|^D~ z-&xE|*&$#sK^eQi5JypggZ%6GT|*tU|1@z$+LxPT=@}Qse2+$)2$&Q_E#;2>WD552 z#;-TU0;jb`nVq0)=fmgsl{p&0>!oV(wF*asDatNBS9Ucn))@!ut8fl*Ogy^LT2c3w z6CN#@*@>22VE&(&AW*iD9TBRqN$;C>i=KEYfdk0sB|T1H2+WdVBrYL=k!fPw%CTOp z_~v%UH;#q0xXAg)uVlci(>OIQ8K&5M#SG1^*j7k+8;fqSno`lPMQIV`AO#b?+#Cv$w{00000NkvXXu0mjfId@az diff --git a/res/img/video-mute.svg b/res/img/video-mute.svg deleted file mode 100644 index 6de60ba39b..0000000000 --- a/res/img/video-mute.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - icons_video copy - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/video-unmute.svg b/res/img/video-unmute.svg deleted file mode 100644 index a6c6c3b681..0000000000 --- a/res/img/video-unmute.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - icons_video copy - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/img/video.png b/res/img/video.png deleted file mode 100644 index 2a788f6fa47f1338fabef245a737cda1d0377d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#7oP)d7)lm$T3XWjg6AjG02z{1VSNYH|>zyDwR@aMw2 zKWXZmcYJtkNgkt6KG&wu-$|GN6&Z@416DnAQ~4=4xEzWtqe?K>MYql*;lvU@+j{rQjL z0}8=|&wm%*`4OSWF2MzI^r08O(c^#;08CM9AN=%{WrLUw1phH3nG$gE-ERdRCS^Wm ze5r^M@c8RLSso?=$&?cC>)(HNW=0xXAk5D6`ujf`TA(My0xUCr{QXZW3uL&NEks$D z-u?OKAJh&;>RJE8+AcVK=YwKxK4L2{&=v@%MYYt4G~1Z+5=d=lj>@q7NACC5oSh4WLF|A z0M<>wlmIN>fsP{5?LfsqEkKQfqskm@wv1XpE&vEH08)$A)rqLp1^@s607*qoM6N<$ Eg3xa3E&u=k diff --git a/res/img/voice-mute.svg b/res/img/voice-mute.svg deleted file mode 100644 index 336641078e..0000000000 --- a/res/img/voice-mute.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - Audio - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/res/img/voice-unmute.svg b/res/img/voice-unmute.svg deleted file mode 100644 index 0d7e6f429f..0000000000 --- a/res/img/voice-unmute.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - Audio - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/res/img/voice.png b/res/img/voice.png deleted file mode 100644 index 5ba765b0f45e9a35a684c175d85627cf7d3e335b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmV-e1E>6nP)^!@8X_13^p13SqhafbC$a7rt?<0Kl?Iy4hbW&SsExPZe~8yV z8ZuqoN*60Xjto}_0acZKoyp1;At0nZx#|(w2t+-rrbF>a1d@$&@Kh2M3Zaz=KHUTnNAP{)q}39SKoX9z^AOj=Pa?7{ zIR_B}ZW`U16tcyO00|NSN!P<+D*}cEciMD$PwR57u-;@$Iueh7i$7mV=+QLGCcgM< z!NA9kUT7H<%{KUhYaXUX< z7K6V5{I1l&x>^I#VMr`sf}xot);V2m0J6)mBDIGdN9wbRHiyZmmLMO2G`i%pk;k=? z57M4v0ddCwI&Ol^C}$!t7v|?3?A!;4SNNWzeDZ@&@9(v&Pd~WEl8{)z5glOt8$%CX zXv#VDWfl=bpp>3~FN5#c&L^Gb=gmWjEA`-XZS#)OG3BFVqz;tAlsxxFnER{JapGSs z1UBuOays{{$sP>aBBjir1Z6`Z5@%{ - - - Triangle 1 - Created with Sketch. - - - - - - - \ No newline at end of file diff --git a/res/img/voip-mute.png b/res/img/voip-mute.png deleted file mode 100644 index a16d1001e5778aa10fab9bfaae24082e9267fe6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 903 zcmV;219<$2P)QAt0009fNkl?FQBahITPKj%167p zA&D`_**N1{C&xOzt9AYBj+zggGzsd`Tze81J^Xaa_ACYfVcYz;DJ#2rE^q*#sp$4U z$tP1zS9dm$Mc*#9-yY{D$N2xwZ>=Rk24{Tx=4$M_c(x$YKvbzI2jS)D0PtZ^e6th_ zWQm~}U!-jEa$Uch>s|y$Ha&{vP+dIcAWO@l^_H1%x_fJaotP#)9Jg6|nkE{0RkygU z91i`Xr=NrMmRYXrjg1})ZfXH(Al!eWCj_hixSwPbNy>24gpS5-jzBuhMApEZiJdSiE&3i}0UZ1B&@v}FbpF=q`M4SO*Y*ZjY2Z%^g zIaKEgf-?XB&w{*z4l+%zq6b89XH%Ze@tlLNOihu2*{|+?O>qYAOmy0&4Il$ekY>;< zWQnHf3@$}_PvCyv)w2chVyHhOUCQ!}mMOS6bb?ZrKd7k>CdDsXsv&7%Q_lF-$P2{$ ztD!k#Z)EsyHFYA(hfZ*QQv9$XZDi*P;^xyhXJe4*L|Lip@7LvAU_XhpCYbI$asA}F z9Lk3^{eIrMTa_(ES;59_REDZ;GiKvlU^gUPUx_c3+wEo}G9bZ?)!5;%S~nvWJCWsQd@GXlQ&lZR+IQK-WA?a> zDWzghFQuXRz(odIZF7AkK9%K_T}1$&pK`r}C{dp#hiy|1<;PS1E|ViJj_oUR(Zd5q z@A(2n@ZDN6TM!%8+u`*BW*2B zXME9TCj-4?%aQu}k7l){zN$27kVT2U`mo=%E)f0QG#83?-sO20zkJZdzG!QL3q?CU dO<#l0?=!n`xSy>aQ~Lk_002ovPDHLkV1lG(qs{;T diff --git a/res/img/voip.png b/res/img/voip.png deleted file mode 100644 index e8f05bcc377931d95c8f8e5374f7089218841c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmV;$0y_PPP)pnrU4#H^*uqKIoXD8{0cZ(* zXW7rC@WiN@GJ#fVUHxQDjMzAxxBCEaYq5KD$e73&zpT%cgM6A&vEq+o{C24!ZDhYk zCp(wpvun~djH`fNjk&IDp>qG#n9lhU%sNE48$RQCxpcq1Q0T~lI8AZu$ z&jBJI%Y$<8>XVGuh|p}VCdutW-YyOrJImnpXL;>d3Rs9N5`^Fj19<6>{k$f2oPhxh z00uaQEV9ZelZ`R75n>Yk+eIdg#^_M#uMTwm7%4{rmRRFuy&!G5`*yjW-Q>I6^{k0H?G3QAJn?C&&4{4}m9s!dPjkhpS>b zZ!LT3o0g2-wClN=SZJs#MVrD=a~|X{WTDhywW~804Fikj&)pUOa?u%!rf8da@UkwR zRV68X)Io~d@HIzp9ZYkePEM#-i;kPZL<48ZQ}@fkJ`;%ODc2;fo>nDQ-gV&o0gH0# z&(N=THL-EAV3(S*qu7}&-x!~LYj#9Y#`+$S=JOv$k82g1?QAQ1j=0-7K}k?aT|*jfFV3$P7s7 rblL0kZH#4`s5+ao{^`Hz7XbzUlE!y4)*4tA00000NkvXXu0mjfM=wK% diff --git a/res/img/warning.png b/res/img/warning.png deleted file mode 100644 index c5553530a8478d549139c265bec0492be4252d7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1478 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1SJ3FdmIK*k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m^Cs(B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuU%v{0TQqR!T z+}y-mN5ROz&{W^RSl`${*T~q)#K6kLNC66zfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7I$IMft0d=ry1 z^FV@{U|qhxR-SpqC5d^-sh%#jNH{644~kx-=!OXa(-4RWPrN`5Jo%^Q0n>aD zFma1kbOSRMlZmH`V@SoVBpvJhJ&m^-Ivd#<)Y>))EcW>FFMR$zYo-4Eu|Z^M_G=T(ulw@9=XP`oBy9V)^U}-jB9dCgUnk#t z7oO2{Pxzg|pa1^*7S0oXZ*<7AkBO&hj>7D9wa2z}MmS&X+Z)>WE2QD!%aXR*yF7n? z321&_`F+N}KgxG6{QqyOcCWS2LZaeeVAWH`7X42zcHg{}t|Fba;qTHfYxQ3&dh@1W z+37dGbMF72l%VnXeZ2#}kVjU2{cXKEm!^ectLJgq{&qCjdQ-pV$lrJ3fo+>=|2{VP z&baCZKU+@NhWg*HO`bCbwlTeR_j{Z0q4D88^*41et`Tb_yALW%kOv{8%&YoW=rS<2-?3-3HEBi%f%=l*@Q`w=(e5Pog@VkdP zOKq0jOa9lb9Q=B!k%f`Lo8x*b>mIHBw6eVXY|DjME*SxyFHyD1#^)Emwebp@P3Jh+g7)u-(A(AhdCzZNo%t5_|I$>B zu9+`$rhn_tKDX2F&V{-8FQ4yvGkjYH@4aIz4h@V9Yt2rEe*eW<3@TYYUHx3vIVCg! E0HiWF6951J diff --git a/res/img/warning2.png b/res/img/warning2.png deleted file mode 100644 index db0fd4a897de34f13f949afd4f3c73a6c48f3b4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1420 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1SGcvS$+jlk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m^Cs(B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuU%v{0TQqR!T z+}y-mN5ROz&{W^RSl`${*T~q)#K6kLNC66zfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7I$IMft0d=ry1 z^FV@{U|qhxR-SpqC5d^-sh%#jN= z1y1vzdQ)(_#S*7peV}9XLD7p8-7q0w8Uiuli5JL$C;!wuV45!iCT{(x|F0Ps7=L-X zIEGZ*dNa*d$2m~s_SoMzdN8xUwIh7pTfGyvAAD)s&8vFh%JCDgmwn`zK21^9%rB|YEW#l1 z$EpyYChZuxj8-xE2}P2hCOh@oY9IdJvM{`F<3F+8JZ7fXc3)KI=U=((=JUy-zU^z~ zRK53@I7^~RKKf8su{zuK`YySvj~~2RJ!z5B+i#V3ezq=_XU>@W)MNVL=6j(JGrp?n z>Ubf@n;VF)s zit7I71I~VM-hTGrca1ftdfz^JFp0bNT|-*?%{V9h-3%pR%VZfemhaSxzssQ3!*YL8 z0AJ1>;oA6YH&?xb*}H^%C+#qr5fbt0K!KRx+ADSIA|K@^vuu79^d!|`R@);PrCIAD zqm+ezec;M|qLs6)ReHPKwx55tY!OnvbvD>+_Tt(T(G&d>kDU58^B&K9`I8|gR*kC< z%vzWD$VR|bpnJdSl5HF_U+%X(CVg6As)4TEZtWEpy1waH6hCl1aaFz5$x$tf>tc-N j2bcf*ZI3#|u}Uyh-(Gi7sw~YCR6csT`njxgN@xNAYH|*X diff --git a/res/img/zoom.png b/res/img/zoom.png deleted file mode 100644 index f05ea959b44b239bbe35095ded0502b5989aa239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1288 zcmV+j1^4=iP)Px(!bwCyR9Fekna_{gL=?y0IEj-crDRL@2V&bEkT~!|?H^Ey8wUhZ;eZ5J{sCGJ zoVan}(((_$1q3&!S_z3tJyfkYAyGs*Y=20!$+p|gcD?B)j(@}%-q*=^ovoemI^B{d zMIMjmz4!6V_|3eDpq%peBj;7KNT&@$ye))S9t`9X2|65_leEe8Yf{Q4*I)Jebm6VV z%H2G!#9oyCTH9Wzn&xLh&?l@nUo#C+Er;65rNJ!aPzbR7(Y|%0!=jAZf!1?5;08N%GUz=E^@$RG9Ek+}d=% zx@&oz9$S6Z0-LZ6AIz|~xBk7+IB?r?FWqbV+kP;3)@+eI*oF`Ig3k$^HTFnAVYTDi z1O5c}Ti^q};4@QCqRa7C&jU`qJbc0DXt>9EYwQLe1m?wl4y%INeTC0(PBKFrDw>=K zC1$DKSUy;&SN0e};s&QFI~13L3&HM&;?_^y=(rX-HJL|>|U!V1CT-}N~Br^)xX zd(oq7Yp(pQ=|=au0@^}HN!*sIQ&%v61xx@8yQE^8XRtzK3BuPOd1Seg-g(80UQky+ zTj)SnCtv^zmQ=J20lDsDEMGe1>uVluv7-$hBFp6kH=}HE+o29avJIVpWwhRtfn5nJ z%c3-{bika&?_xb11yd7pJ*1GXl~h-E%xTY2n!{;=!YY7V4b zZ)|vDk1QvU->ukkldox#*5=P$wvzP01UBLbezEQLliFzO(g2`1>6z9rH)uP32{r?p z%_0wY9;ug&#No!AQ^PvPZSn~AmtZq^m07|~UQv(_dpjS^11@9E<%I(am_jye)2CfH z0EwTH*XvRIS5Bbf#gOkl%Td=;sot_N>gJ41-J zX>iKUB*@*ilurB#Ca@Vusz-Ti{P|Pmi}zi+ygFP*b#O{K3G(u)OPAP|PQV1VA~OCv zmfPaI_4uUq82h;@Z|Pth3;*t6O>-EBJi>Ext}N(iY;TyPha8%v1-3AFajNCe4{5+_=W)T)a(E8ITI@)S`Zy1{Rz`z*Y$8c;0zr{79;G0?0Z;s^QkP$8)qr z&t-uF16XiG0^Km=>cdu=;M4&}BkKGnT7+jcX^Iw5WKlRPdC&>EdE;VQuVkr*PxuCd%IFgHW;$^n z5zo}oM>NE-?v$<0`bV}uxYF1TI{P`?uniyZ1)t2I4Zpz|;bQ ycBYSj Date: Wed, 29 Jul 2020 23:58:32 +0530 Subject: [PATCH 25/32] Fix private functions for RoomHeaderButtons --- .../views/right_panel/RoomHeaderButtons.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/views/right_panel/RoomHeaderButtons.tsx b/src/components/views/right_panel/RoomHeaderButtons.tsx index 8620d5b485..1b3117d67e 100644 --- a/src/components/views/right_panel/RoomHeaderButtons.tsx +++ b/src/components/views/right_panel/RoomHeaderButtons.tsx @@ -36,9 +36,9 @@ const MEMBER_PHASES = [ export default class RoomHeaderButtons extends HeaderButtons { constructor(props) { super(props, HeaderKind.Room); - this._onMembersClicked = this._onMembersClicked.bind(this); - this._onFilesClicked = this._onFilesClicked.bind(this); - this._onNotificationsClicked = this._onNotificationsClicked.bind(this); + this.onMembersClicked = this.onMembersClicked.bind(this); + this.onFilesClicked = this.onFilesClicked.bind(this); + this.onNotificationsClicked = this.onNotificationsClicked.bind(this); } onAction(payload: ActionPayload) { @@ -58,7 +58,7 @@ export default class RoomHeaderButtons extends HeaderButtons { } } - _onMembersClicked() { + private onMembersClicked() { if (this.state.phase === RightPanelPhases.RoomMemberInfo) { // send the active phase to trigger a toggle // XXX: we should pass refireParams here but then it won't collapse as we desire it to @@ -69,12 +69,12 @@ export default class RoomHeaderButtons extends HeaderButtons { } } - _onFilesClicked() { + private onFilesClicked() { // This toggles for us, if needed this.setPhase(RightPanelPhases.FilePanel); } - _onNotificationsClicked() { + private onNotificationsClicked() { // This toggles for us, if needed this.setPhase(RightPanelPhases.NotificationPanel); } @@ -84,19 +84,19 @@ export default class RoomHeaderButtons extends HeaderButtons { , , , ]; From 97cef335e8215c26a5df1d28ee6e241f1337ef75 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Thu, 30 Jul 2020 00:28:12 +0530 Subject: [PATCH 26/32] Cleanup types --- src/components/structures/{RightPanel.js => RightPanel.tsx} | 0 src/components/views/right_panel/HeaderButtons.tsx | 3 ++- src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts | 2 ++ src/dispatcher/payloads/SetRightPanelPhasePayload.ts | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) rename src/components/structures/{RightPanel.js => RightPanel.tsx} (100%) diff --git a/src/components/structures/RightPanel.js b/src/components/structures/RightPanel.tsx similarity index 100% rename from src/components/structures/RightPanel.js rename to src/components/structures/RightPanel.tsx diff --git a/src/components/views/right_panel/HeaderButtons.tsx b/src/components/views/right_panel/HeaderButtons.tsx index 8141e8a9cc..499fbbd414 100644 --- a/src/components/views/right_panel/HeaderButtons.tsx +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -24,6 +24,7 @@ import RightPanelStore from "../../../stores/RightPanelStore"; import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {Action} from '../../../dispatcher/actions'; import {SetRightPanelPhasePayload, SetRightPanelPhaseRefireParams} from '../../../dispatcher/payloads/SetRightPanelPhasePayload'; +import {EventSubscription} from "fbemitter"; export enum HeaderKind { Room = "room", @@ -38,7 +39,7 @@ interface IState { interface IProps {} export default class HeaderButtons extends React.Component { - private storeToken: ReturnType; + private storeToken: EventSubscription; private dispatcherRef: string; constructor(props: IProps, kind: HeaderKind) { diff --git a/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts b/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts index 3193f9043b..cfd4a2d3cc 100644 --- a/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts +++ b/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts @@ -18,10 +18,12 @@ import { RightPanelPhases } from "../../stores/RightPanelStorePhases"; import { SetRightPanelPhaseRefireParams } from "./SetRightPanelPhasePayload"; import { ActionPayload } from "../payloads"; import { Action } from "../actions"; +import { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; interface AfterRightPanelPhaseChangeAction extends ActionPayload { action: Action.AfterRightPanelPhaseChange; phase: RightPanelPhases; + verificationRequestPromise?: Promise; } export type AfterRightPanelPhaseChangePayload diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts index b7dd5d85fc..75dea9f3df 100644 --- a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -24,7 +24,7 @@ export interface SetRightPanelPhasePayload extends ActionPayload { action: Action.SetRightPanelPhase; phase: RightPanelPhases; - refireParams: SetRightPanelPhaseRefireParams; + refireParams?: SetRightPanelPhaseRefireParams; } export interface SetRightPanelPhaseRefireParams { From 9aa128a6e8075a7e27548a075c84e3f8a8e91da4 Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Thu, 30 Jul 2020 11:45:49 +0530 Subject: [PATCH 27/32] Revert "Cleanup types" This reverts commit 97cef335e8215c26a5df1d28ee6e241f1337ef75. --- src/components/structures/{RightPanel.tsx => RightPanel.js} | 0 src/components/views/right_panel/HeaderButtons.tsx | 3 +-- src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts | 2 -- src/dispatcher/payloads/SetRightPanelPhasePayload.ts | 2 +- 4 files changed, 2 insertions(+), 5 deletions(-) rename src/components/structures/{RightPanel.tsx => RightPanel.js} (100%) diff --git a/src/components/structures/RightPanel.tsx b/src/components/structures/RightPanel.js similarity index 100% rename from src/components/structures/RightPanel.tsx rename to src/components/structures/RightPanel.js diff --git a/src/components/views/right_panel/HeaderButtons.tsx b/src/components/views/right_panel/HeaderButtons.tsx index 499fbbd414..8141e8a9cc 100644 --- a/src/components/views/right_panel/HeaderButtons.tsx +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -24,7 +24,6 @@ import RightPanelStore from "../../../stores/RightPanelStore"; import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {Action} from '../../../dispatcher/actions'; import {SetRightPanelPhasePayload, SetRightPanelPhaseRefireParams} from '../../../dispatcher/payloads/SetRightPanelPhasePayload'; -import {EventSubscription} from "fbemitter"; export enum HeaderKind { Room = "room", @@ -39,7 +38,7 @@ interface IState { interface IProps {} export default class HeaderButtons extends React.Component { - private storeToken: EventSubscription; + private storeToken: ReturnType; private dispatcherRef: string; constructor(props: IProps, kind: HeaderKind) { diff --git a/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts b/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts index cfd4a2d3cc..3193f9043b 100644 --- a/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts +++ b/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts @@ -18,12 +18,10 @@ import { RightPanelPhases } from "../../stores/RightPanelStorePhases"; import { SetRightPanelPhaseRefireParams } from "./SetRightPanelPhasePayload"; import { ActionPayload } from "../payloads"; import { Action } from "../actions"; -import { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; interface AfterRightPanelPhaseChangeAction extends ActionPayload { action: Action.AfterRightPanelPhaseChange; phase: RightPanelPhases; - verificationRequestPromise?: Promise; } export type AfterRightPanelPhaseChangePayload diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts index 75dea9f3df..b7dd5d85fc 100644 --- a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -24,7 +24,7 @@ export interface SetRightPanelPhasePayload extends ActionPayload { action: Action.SetRightPanelPhase; phase: RightPanelPhases; - refireParams?: SetRightPanelPhaseRefireParams; + refireParams: SetRightPanelPhaseRefireParams; } export interface SetRightPanelPhaseRefireParams { From fbc341a2f5b43459b8e200d0f7edf92c8a343b6e Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Thu, 30 Jul 2020 11:51:10 +0530 Subject: [PATCH 28/32] Clean up types properly --- src/components/views/right_panel/HeaderButtons.tsx | 3 ++- src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts | 2 ++ src/dispatcher/payloads/SetRightPanelPhasePayload.ts | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/views/right_panel/HeaderButtons.tsx b/src/components/views/right_panel/HeaderButtons.tsx index 8141e8a9cc..499fbbd414 100644 --- a/src/components/views/right_panel/HeaderButtons.tsx +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -24,6 +24,7 @@ import RightPanelStore from "../../../stores/RightPanelStore"; import {RightPanelPhases} from "../../../stores/RightPanelStorePhases"; import {Action} from '../../../dispatcher/actions'; import {SetRightPanelPhasePayload, SetRightPanelPhaseRefireParams} from '../../../dispatcher/payloads/SetRightPanelPhasePayload'; +import {EventSubscription} from "fbemitter"; export enum HeaderKind { Room = "room", @@ -38,7 +39,7 @@ interface IState { interface IProps {} export default class HeaderButtons extends React.Component { - private storeToken: ReturnType; + private storeToken: EventSubscription; private dispatcherRef: string; constructor(props: IProps, kind: HeaderKind) { diff --git a/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts b/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts index 3193f9043b..cfd4a2d3cc 100644 --- a/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts +++ b/src/dispatcher/payloads/AfterRightPanelPhaseChangePayload.ts @@ -18,10 +18,12 @@ import { RightPanelPhases } from "../../stores/RightPanelStorePhases"; import { SetRightPanelPhaseRefireParams } from "./SetRightPanelPhasePayload"; import { ActionPayload } from "../payloads"; import { Action } from "../actions"; +import { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; interface AfterRightPanelPhaseChangeAction extends ActionPayload { action: Action.AfterRightPanelPhaseChange; phase: RightPanelPhases; + verificationRequestPromise?: Promise; } export type AfterRightPanelPhaseChangePayload diff --git a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts index b7dd5d85fc..75dea9f3df 100644 --- a/src/dispatcher/payloads/SetRightPanelPhasePayload.ts +++ b/src/dispatcher/payloads/SetRightPanelPhasePayload.ts @@ -24,7 +24,7 @@ export interface SetRightPanelPhasePayload extends ActionPayload { action: Action.SetRightPanelPhase; phase: RightPanelPhases; - refireParams: SetRightPanelPhaseRefireParams; + refireParams?: SetRightPanelPhaseRefireParams; } export interface SetRightPanelPhaseRefireParams { From bb685cd37a50cbafe644c25842228b02458bef0f Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 30 Jul 2020 10:33:36 +0200 Subject: [PATCH 29/32] change message priority --- src/stores/RoomViewStore.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/stores/RoomViewStore.js b/src/stores/RoomViewStore.js index 4f560e1fab..3c37a31174 100644 --- a/src/stores/RoomViewStore.js +++ b/src/stores/RoomViewStore.js @@ -265,7 +265,14 @@ class RoomViewStore extends Store { }); let msg = err.message ? err.message : JSON.stringify(err); console.log("Failed to join room:", msg); - if (err.httpStatus === 404) { + if (err.name === "ConnectionError") { + msg = _t("There was an error joining the room"); + } else if (err.errcode === 'M_INCOMPATIBLE_ROOM_VERSION') { + msg =
+ {_t("Sorry, your homeserver is too old to participate in this room.")}
+ {_t("Please contact your homeserver administrator.")} +
; + } else if (err.httpStatus === 404) { const invitingUserId = this._getInvitingUserId(this._state.roomId); // only provide a better error message for invites if (invitingUserId) { @@ -276,13 +283,6 @@ class RoomViewStore extends Store { msg = _t("The person who invited you already left the room, or their server is offline."); } } - } else if (err.name === "ConnectionError") { - msg = _t("There was an error joining the room"); - } else if (err.errcode === 'M_INCOMPATIBLE_ROOM_VERSION') { - msg =
- {_t("Sorry, your homeserver is too old to participate in this room.")}
- {_t("Please contact your homeserver administrator.")} -
; } const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); Modal.createTrackedDialog('Failed to join room', '', ErrorDialog, { From a281c617beb24293b40e8e65f5012ee5266f8e91 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 30 Jul 2020 10:42:46 +0200 Subject: [PATCH 30/32] string order changed --- src/i18n/strings/en_EN.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index ad33823c96..644cd03daf 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -423,11 +423,11 @@ "Upgrade your %(brand)s": "Upgrade your %(brand)s", "A new version of %(brand)s is available!": "A new version of %(brand)s is available!", "Guest": "Guest", - "The person who invited you already left the room.": "The person who invited you already left the room.", - "The person who invited you already left the room, or their server is offline.": "The person who invited you already left the room, or their server is offline.", "There was an error joining the room": "There was an error joining the room", "Sorry, your homeserver is too old to participate in this room.": "Sorry, your homeserver is too old to participate in this room.", "Please contact your homeserver administrator.": "Please contact your homeserver administrator.", + "The person who invited you already left the room.": "The person who invited you already left the room.", + "The person who invited you already left the room, or their server is offline.": "The person who invited you already left the room, or their server is offline.", "Failed to join room": "Failed to join room", "You joined the call": "You joined the call", "%(senderName)s joined the call": "%(senderName)s joined the call", From d0e269511401cae0c7908bf07b5842f0fa8beb5e Mon Sep 17 00:00:00 2001 From: Swapnil Raj Date: Thu, 30 Jul 2020 15:58:07 +0530 Subject: [PATCH 31/32] Add access specifier to class methods --- .../views/right_panel/GroupHeaderButtons.tsx | 14 +++++++------- .../views/right_panel/HeaderButton.tsx | 4 ++-- .../views/right_panel/HeaderButtons.tsx | 16 ++++++++-------- .../views/right_panel/RoomHeaderButtons.tsx | 4 ++-- .../views/right_panel/VerificationPanel.tsx | 14 +++++++------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/components/views/right_panel/GroupHeaderButtons.tsx b/src/components/views/right_panel/GroupHeaderButtons.tsx index b15a93e5a0..0bbbea78e3 100644 --- a/src/components/views/right_panel/GroupHeaderButtons.tsx +++ b/src/components/views/right_panel/GroupHeaderButtons.tsx @@ -41,11 +41,11 @@ interface IProps {} export default class GroupHeaderButtons extends HeaderButtons { constructor(props: IProps) { super(props, HeaderKind.Group); - this._onMembersClicked = this._onMembersClicked.bind(this); - this._onRoomsClicked = this._onRoomsClicked.bind(this); + this.onMembersClicked = this.onMembersClicked.bind(this); + this.onRoomsClicked = this.onRoomsClicked.bind(this); } - onAction(payload: ActionPayload) { + public onAction(payload: ActionPayload) { super.onAction(payload); if (payload.action === Action.ViewUser) { @@ -70,7 +70,7 @@ export default class GroupHeaderButtons extends HeaderButtons { } } - _onMembersClicked() { + private onMembersClicked() { if (this.state.phase === RightPanelPhases.GroupMemberInfo) { // send the active phase to trigger a toggle this.setPhase(RightPanelPhases.GroupMemberInfo); @@ -80,7 +80,7 @@ export default class GroupHeaderButtons extends HeaderButtons { } } - _onRoomsClicked() { + private onRoomsClicked() { // This toggles for us, if needed this.setPhase(RightPanelPhases.GroupRoomList); } @@ -90,13 +90,13 @@ export default class GroupHeaderButtons extends HeaderButtons { , , ]; diff --git a/src/components/views/right_panel/HeaderButton.tsx b/src/components/views/right_panel/HeaderButton.tsx index 022a993c65..c7cd064184 100644 --- a/src/components/views/right_panel/HeaderButton.tsx +++ b/src/components/views/right_panel/HeaderButton.tsx @@ -45,12 +45,12 @@ export default class HeaderButton extends React.Component { this.onClick = this.onClick.bind(this); } - onClick(_ev: React.KeyboardEvent) { + private onClick() { Analytics.trackEvent(...this.props.analytics); this.props.onClick(); } - render() { + public render() { const classes = classNames({ mx_RightPanel_headerButton: true, mx_RightPanel_headerButton_highlight: this.props.isHighlighted, diff --git a/src/components/views/right_panel/HeaderButtons.tsx b/src/components/views/right_panel/HeaderButtons.tsx index 499fbbd414..8239a52dea 100644 --- a/src/components/views/right_panel/HeaderButtons.tsx +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -52,21 +52,21 @@ export default class HeaderButtons extends React.Component { }; } - componentDidMount() { + public componentDidMount() { this.storeToken = RightPanelStore.getSharedInstance().addListener(this.onRightPanelUpdate.bind(this)); this.dispatcherRef = dis.register(this.onAction.bind(this)); // used by subclasses } - componentWillUnmount() { + public componentWillUnmount() { if (this.storeToken) this.storeToken.remove(); if (this.dispatcherRef) dis.unregister(this.dispatcherRef); } - onAction(payload) { + public onAction(payload) { // Ignore - intended to be overridden by subclasses } - setPhase(phase: RightPanelPhases, extras?: Partial) { + public setPhase(phase: RightPanelPhases, extras?: Partial) { dis.dispatch({ action: Action.SetRightPanelPhase, phase: phase, @@ -74,7 +74,7 @@ export default class HeaderButtons extends React.Component { }); } - isPhase(phases: string | string[]) { + public isPhase(phases: string | string[]) { if (Array.isArray(phases)) { return phases.includes(this.state.phase); } else { @@ -82,7 +82,7 @@ export default class HeaderButtons extends React.Component { } } - onRightPanelUpdate() { + private onRightPanelUpdate() { const rps = RightPanelStore.getSharedInstance(); if (this.state.headerKind === HeaderKind.Room) { this.setState({phase: rps.visibleRoomPanelPhase}); @@ -92,7 +92,7 @@ export default class HeaderButtons extends React.Component { } // XXX: Make renderButtons a prop - renderButtons(): JSX.Element[] { + public renderButtons(): JSX.Element[] { // Ignore - intended to be overridden by subclasses // Return empty fragment to satisfy the type return [ @@ -101,7 +101,7 @@ export default class HeaderButtons extends React.Component { ]; } - render() { + public render() { // inline style as this will be swapped around in future commits return
{this.renderButtons()} diff --git a/src/components/views/right_panel/RoomHeaderButtons.tsx b/src/components/views/right_panel/RoomHeaderButtons.tsx index 1b3117d67e..636e29443a 100644 --- a/src/components/views/right_panel/RoomHeaderButtons.tsx +++ b/src/components/views/right_panel/RoomHeaderButtons.tsx @@ -41,7 +41,7 @@ export default class RoomHeaderButtons extends HeaderButtons { this.onNotificationsClicked = this.onNotificationsClicked.bind(this); } - onAction(payload: ActionPayload) { + public onAction(payload: ActionPayload) { super.onAction(payload); if (payload.action === Action.ViewUser) { if (payload.member) { @@ -79,7 +79,7 @@ export default class RoomHeaderButtons extends HeaderButtons { this.setPhase(RightPanelPhases.NotificationPanel); } - renderButtons() { + public renderButtons() { return [ ; } - renderVerifiedPhase() { + private renderVerifiedPhase() { const {member, request} = this.props; let text: string; @@ -281,7 +281,7 @@ export default class VerificationPanel extends React.PureComponent Date: Thu, 30 Jul 2020 16:13:13 +0530 Subject: [PATCH 32/32] Change public to protected for onAction --- src/components/views/right_panel/GroupHeaderButtons.tsx | 2 +- src/components/views/right_panel/HeaderButtons.tsx | 2 +- src/components/views/right_panel/RoomHeaderButtons.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/views/right_panel/GroupHeaderButtons.tsx b/src/components/views/right_panel/GroupHeaderButtons.tsx index 0bbbea78e3..44237e401f 100644 --- a/src/components/views/right_panel/GroupHeaderButtons.tsx +++ b/src/components/views/right_panel/GroupHeaderButtons.tsx @@ -45,7 +45,7 @@ export default class GroupHeaderButtons extends HeaderButtons { this.onRoomsClicked = this.onRoomsClicked.bind(this); } - public onAction(payload: ActionPayload) { + protected onAction(payload: ActionPayload) { super.onAction(payload); if (payload.action === Action.ViewUser) { diff --git a/src/components/views/right_panel/HeaderButtons.tsx b/src/components/views/right_panel/HeaderButtons.tsx index 8239a52dea..57d3075739 100644 --- a/src/components/views/right_panel/HeaderButtons.tsx +++ b/src/components/views/right_panel/HeaderButtons.tsx @@ -62,7 +62,7 @@ export default class HeaderButtons extends React.Component { if (this.dispatcherRef) dis.unregister(this.dispatcherRef); } - public onAction(payload) { + protected onAction(payload) { // Ignore - intended to be overridden by subclasses } diff --git a/src/components/views/right_panel/RoomHeaderButtons.tsx b/src/components/views/right_panel/RoomHeaderButtons.tsx index 636e29443a..7ac547f499 100644 --- a/src/components/views/right_panel/RoomHeaderButtons.tsx +++ b/src/components/views/right_panel/RoomHeaderButtons.tsx @@ -41,7 +41,7 @@ export default class RoomHeaderButtons extends HeaderButtons { this.onNotificationsClicked = this.onNotificationsClicked.bind(this); } - public onAction(payload: ActionPayload) { + protected onAction(payload: ActionPayload) { super.onAction(payload); if (payload.action === Action.ViewUser) { if (payload.member) {