Allow desktop app to expose recent rooms in UI integrations (#16940)
This commit is contained in:
parent
50f8be4a62
commit
b9b0b096a4
2 changed files with 44 additions and 2 deletions
|
@ -40,11 +40,21 @@ import ToastStore from "matrix-react-sdk/src/stores/ToastStore";
|
||||||
import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast";
|
import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
||||||
|
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";
|
||||||
|
|
||||||
import VectorBasePlatform from "./VectorBasePlatform";
|
import VectorBasePlatform from "./VectorBasePlatform";
|
||||||
import { SeshatIndexManager } from "./SeshatIndexManager";
|
import { SeshatIndexManager } from "./SeshatIndexManager";
|
||||||
import { IPCManager } from "./IPCManager";
|
import { IPCManager } from "./IPCManager";
|
||||||
|
|
||||||
|
interface SquirrelUpdate {
|
||||||
|
releaseNotes: string;
|
||||||
|
releaseName: string;
|
||||||
|
releaseDate: Date;
|
||||||
|
updateURL: string;
|
||||||
|
}
|
||||||
|
|
||||||
const isMac = navigator.platform.toUpperCase().includes("MAC");
|
const isMac = navigator.platform.toUpperCase().includes("MAC");
|
||||||
|
|
||||||
function platformFriendlyName(): string {
|
function platformFriendlyName(): string {
|
||||||
|
@ -150,13 +160,29 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||||
});
|
});
|
||||||
|
|
||||||
this.ipc.call("startSSOFlow", this.ssoID);
|
this.ipc.call("startSSOFlow", this.ssoID);
|
||||||
|
|
||||||
|
BreadcrumbsStore.instance.on(UPDATE_EVENT, this.onBreadcrumbsUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getConfig(): Promise<IConfigOptions> {
|
public async getConfig(): Promise<IConfigOptions> {
|
||||||
return this.ipc.call("getConfig");
|
return this.ipc.call("getConfig");
|
||||||
}
|
}
|
||||||
|
|
||||||
private onUpdateDownloaded = async (ev, { releaseNotes, releaseName }): Promise<void> => {
|
private onBreadcrumbsUpdate = (): void => {
|
||||||
|
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.ipc.call("breadcrumbs", rooms);
|
||||||
|
};
|
||||||
|
|
||||||
|
private onUpdateDownloaded = async (ev: Event, { releaseNotes, releaseName }: SquirrelUpdate): Promise<void> => {
|
||||||
dis.dispatch<CheckUpdatesPayload>({
|
dis.dispatch<CheckUpdatesPayload>({
|
||||||
action: Action.CheckUpdates,
|
action: Action.CheckUpdates,
|
||||||
status: UpdateCheckStatus.Ready,
|
status: UpdateCheckStatus.Ready,
|
||||||
|
|
|
@ -20,6 +20,7 @@ import { UpdateCheckStatus } from "matrix-react-sdk/src/BasePlatform";
|
||||||
import { Action } from "matrix-react-sdk/src/dispatcher/actions";
|
import { Action } from "matrix-react-sdk/src/dispatcher/actions";
|
||||||
import dispatcher from "matrix-react-sdk/src/dispatcher/dispatcher";
|
import dispatcher from "matrix-react-sdk/src/dispatcher/dispatcher";
|
||||||
import * as rageshake from "matrix-react-sdk/src/rageshake/rageshake";
|
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";
|
import ElectronPlatform from "../../../../src/vector/platform/ElectronPlatform";
|
||||||
|
|
||||||
|
@ -43,7 +44,6 @@ describe("ElectronPlatform", () => {
|
||||||
const userId = "@alice:server.org";
|
const userId = "@alice:server.org";
|
||||||
const deviceId = "device-id";
|
const deviceId = "device-id";
|
||||||
|
|
||||||
window.electron = mockElectron;
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
window.electron = mockElectron;
|
window.electron = mockElectron;
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
|
@ -260,4 +260,20 @@ describe("ElectronPlatform", () => {
|
||||||
expect(mockElectron.send).toHaveBeenCalledWith("install_update");
|
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",
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue