From c5087e2ff031ebabb400c1d5ffaa23342ea2c34b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 13 Apr 2021 20:08:15 +0100 Subject: [PATCH 1/3] Initial TouchBar support containing breadcrumbs --- src/vector/platform/ElectronPlatform.tsx | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index 74317e77d0e..1d9796e4cea 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -47,6 +47,9 @@ import {showToast as showUpdateToast} from "matrix-react-sdk/src/toasts/UpdateTo import {CheckUpdatesPayload} from "matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload"; import ToastStore from "matrix-react-sdk/src/stores/ToastStore"; import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast"; +import { BreadcrumbsStore } from 'matrix-react-sdk/src/stores/BreadcrumbsStore'; +import { UPDATE_EVENT } from 'matrix-react-sdk/src/stores/AsyncStore'; +import { avatarUrlForRoom, getInitialLetter } from 'matrix-react-sdk/src/Avatar'; const electron = window.electron; const isMac = navigator.platform.toUpperCase().includes('MAC'); @@ -303,8 +306,26 @@ export default class ElectronPlatform extends VectorBasePlatform { } this._ipcCall("startSSOFlow", this.ssoID); + + if (isMac) { + BreadcrumbsStore.instance.on(UPDATE_EVENT, this.onBreadcrumbsUpdate); + } } + private onBreadcrumbsUpdate = () => { + const rooms = BreadcrumbsStore.instance.rooms.slice(0, 7).map(r => ({ + roomId: r.roomId, + avatarUrl: avatarUrlForRoom( + r, + Math.floor(60 * window.devicePixelRatio), + Math.floor(60 * window.devicePixelRatio), + "crop", + ), + initial: getInitialLetter(r.name), + })); + this._ipcCall("breadcrumbs", rooms); + }; + async getConfig(): Promise<{}> { return this._ipcCall('getConfig'); } From 988b62515b3ddf01de9f34c8cf4c683e4b49407a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 16 Mar 2023 17:03:39 +0000 Subject: [PATCH 2/3] Strict types --- src/vector/platform/ElectronPlatform.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index 67bbf478d1c..5780228e851 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -48,6 +48,13 @@ import VectorBasePlatform from "./VectorBasePlatform"; import { SeshatIndexManager } from "./SeshatIndexManager"; import { IPCManager } from "./IPCManager"; +interface SquirrelUpdate { + releaseNotes: string; + releaseName: string; + releaseDate: Date; + updateURL: string; +} + const isMac = navigator.platform.toUpperCase().includes("MAC"); function platformFriendlyName(): string { @@ -177,7 +184,7 @@ export default class ElectronPlatform extends VectorBasePlatform { this.ipc.call("breadcrumbs", rooms); }; - private onUpdateDownloaded = async (ev, { releaseNotes, releaseName }): Promise => { + private onUpdateDownloaded = async (ev: Event, { releaseNotes, releaseName }: SquirrelUpdate): Promise => { dis.dispatch({ action: Action.CheckUpdates, status: UpdateCheckStatus.Ready, From 644bcdff210fce4d43921ea39bfdbc3b02927a8f Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 22 Mar 2023 09:10:16 +0000 Subject: [PATCH 3/3] Iterate --- src/vector/platform/ElectronPlatform.tsx | 4 +--- .../vector/platform/ElectronPlatform-test.ts | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index 5780228e851..537ce4cc041 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -161,9 +161,7 @@ export default class ElectronPlatform extends VectorBasePlatform { this.ipc.call("startSSOFlow", this.ssoID); - if (isMac) { - BreadcrumbsStore.instance.on(UPDATE_EVENT, this.onBreadcrumbsUpdate); - } + BreadcrumbsStore.instance.on(UPDATE_EVENT, this.onBreadcrumbsUpdate); } public async getConfig(): Promise { diff --git a/test/unit-tests/vector/platform/ElectronPlatform-test.ts b/test/unit-tests/vector/platform/ElectronPlatform-test.ts index c1a4e4ce5c1..24de2e180df 100644 --- a/test/unit-tests/vector/platform/ElectronPlatform-test.ts +++ b/test/unit-tests/vector/platform/ElectronPlatform-test.ts @@ -20,6 +20,7 @@ import { UpdateCheckStatus } from "matrix-react-sdk/src/BasePlatform"; import { Action } from "matrix-react-sdk/src/dispatcher/actions"; import dispatcher from "matrix-react-sdk/src/dispatcher/dispatcher"; import * as rageshake from "matrix-react-sdk/src/rageshake/rageshake"; +import { BreadcrumbsStore } from "matrix-react-sdk/src/stores/BreadcrumbsStore"; import ElectronPlatform from "../../../../src/vector/platform/ElectronPlatform"; @@ -43,7 +44,6 @@ describe("ElectronPlatform", () => { const userId = "@alice:server.org"; const deviceId = "device-id"; - window.electron = mockElectron; beforeEach(() => { window.electron = mockElectron; jest.clearAllMocks(); @@ -260,4 +260,20 @@ describe("ElectronPlatform", () => { expect(mockElectron.send).toHaveBeenCalledWith("install_update"); }); }); + + describe("breacrumbs", () => { + it("should send breadcrumb updates over the IPC", () => { + const spy = jest.spyOn(BreadcrumbsStore.instance, "on"); + new ElectronPlatform(); + const cb = spy.mock.calls[0][1]; + cb(); + + expect(mockElectron.send).toHaveBeenCalledWith( + "ipcCall", + expect.objectContaining({ + name: "breadcrumbs", + }), + ); + }); + }); });