1
0
mirror of https://github.com/pavlobu/deskreen.git synced 2025-05-21 09:50:13 -07:00

fix ConnectedDevicesListDrawer

This commit is contained in:
Pavlo Buidenkov 2022-05-29 19:27:28 +02:00
parent d2129628ef
commit df3a37f7b8
5 changed files with 64 additions and 44 deletions

View File

@ -1,6 +1,7 @@
/* eslint-disable promise/always-return */
/* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable @typescript-eslint/ban-ts-comment */
/* eslint-disable react/destructuring-assignment */ /* eslint-disable react/destructuring-assignment */
import { remote, ipcRenderer } from 'electron'; import { ipcRenderer } from 'electron';
import React, { useEffect, useState, useCallback } from 'react'; import React, { useEffect, useState, useCallback } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { import {
@ -15,17 +16,12 @@ import {
import { Row, Col } from 'react-flexbox-grid'; import { Row, Col } from 'react-flexbox-grid';
import { createStyles, makeStyles } from '@material-ui/core/styles'; import { createStyles, makeStyles } from '@material-ui/core/styles';
import CloseOverlayButton from './CloseOverlayButton'; import CloseOverlayButton from './CloseOverlayButton';
import ConnectedDevicesService from '../features/ConnectedDevicesService';
import DeviceInfoCallout from './DeviceInfoCallout'; import DeviceInfoCallout from './DeviceInfoCallout';
import SharingSourcePreviewCard from './SharingSourcePreviewCard'; import SharingSourcePreviewCard from './SharingSourcePreviewCard';
import isWithReactRevealAnimations from '../utils/isWithReactRevealAnimations'; import isWithReactRevealAnimations from '../utils/isWithReactRevealAnimations';
import isProduction from '../utils/isProduction'; import isProduction from '../utils/isProduction';
import { IpcEvents } from '../main/IpcEvents.enum'; import { IpcEvents } from '../main/IpcEvents.enum';
const connectedDevicesService = remote.getGlobal(
'connectedDevicesService'
) as ConnectedDevicesService;
type DeviceWithDesktopCapturerSourceId = Device & { type DeviceWithDesktopCapturerSourceId = Device & {
desktopCapturerSourceId: string; desktopCapturerSourceId: string;
}; };
@ -68,14 +64,14 @@ export default function ConnectedDevicesListDrawer(
const [devicesDisplayed, setDevicesDisplayed] = useState(new Map()); const [devicesDisplayed, setDevicesDisplayed] = useState(new Map());
useEffect(() => { useEffect(() => {
function getConnectedDevicesCallback() {
ipcRenderer ipcRenderer
.invoke(IpcEvents.GetConnectedDevices) .invoke(IpcEvents.GetConnectedDevices)
// eslint-disable-next-line promise/always-return // eslint-disable-next-line promise/always-return
.then((devices: Device[]) => { .then(async (devices: Device[]) => {
console.log('devices', devices);
// setConnectedDevices(devices);
const devicesWithSourceIds: DeviceWithDesktopCapturerSourceId[] = []; const devicesWithSourceIds: DeviceWithDesktopCapturerSourceId[] = [];
devices.forEach(async (device) => { // eslint-disable-next-line no-restricted-syntax
for await (const device of devices) {
const sharingSourceId = await ipcRenderer.invoke( const sharingSourceId = await ipcRenderer.invoke(
IpcEvents.GetDesktopCapturerSourceIdBySharingSessionId, IpcEvents.GetDesktopCapturerSourceIdBySharingSessionId,
device.sharingSessionID device.sharingSessionID
@ -84,12 +80,23 @@ export default function ConnectedDevicesListDrawer(
...device, ...device,
desktopCapturerSourceId: sharingSourceId, desktopCapturerSourceId: sharingSourceId,
}); });
console.log('device pushed'); }
});
setConnectedDevices(devicesWithSourceIds); setConnectedDevices(devicesWithSourceIds);
}) })
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
.catch((e) => console.error(e)); .catch((e) => console.error(e));
}
getConnectedDevicesCallback();
const connectedDevicesInterval = setInterval(
getConnectedDevicesCallback,
4000
);
return () => {
clearInterval(connectedDevicesInterval);
};
}, []); }, []);
useEffect(() => { useEffect(() => {
@ -100,15 +107,18 @@ export default function ConnectedDevicesListDrawer(
setDevicesDisplayed(map); setDevicesDisplayed(map);
}, [setDevicesDisplayed, connectedDevices]); }, [setDevicesDisplayed, connectedDevices]);
const handleDisconnectOneDevice = useCallback(async (id: string) => { const handleDisconnectOneDevice = useCallback(
async (id: string) => {
const device = connectedDevices.find((d: Device) => d.id === id); const device = connectedDevices.find((d: Device) => d.id === id);
if (!device) return; if (!device) return;
ipcRenderer.invoke( ipcRenderer.invoke(
IpcEvents.DisconnectPeerAndDestroySharingSessionBySessionID, IpcEvents.DisconnectPeerAndDestroySharingSessionBySessionID,
device.sharingSessionID device.sharingSessionID
); );
connectedDevicesService.removeDeviceByID(id); ipcRenderer.invoke(IpcEvents.DisconnectDeviceById, id);
}, []); },
[connectedDevices]
);
const handleDisconnectAll = useCallback(() => { const handleDisconnectAll = useCallback(() => {
connectedDevices.forEach((device: Device) => { connectedDevices.forEach((device: Device) => {
@ -117,8 +127,8 @@ export default function ConnectedDevicesListDrawer(
device.sharingSessionID device.sharingSessionID
); );
}); });
connectedDevicesService.removeAllDevices(); ipcRenderer.invoke(IpcEvents.DisconnectAllDevices);
}, []); }, [connectedDevices]);
const hideOneDeviceInDevicesDisplayed = useCallback( const hideOneDeviceInDevicesDisplayed = useCallback(
(id) => { (id) => {
@ -183,7 +193,7 @@ export default function ConnectedDevicesListDrawer(
</div> </div>
<Button <Button
intent="danger" intent="danger"
disabled={connectedDevicesService.getDevices().length === 0} disabled={connectedDevices.length === 0}
onClick={() => { onClick={() => {
setIsAlertDisconectAllOpen(true); setIsAlertDisconectAllOpen(true);
}} }}

View File

@ -45,7 +45,7 @@ describe('ConnectedDevicesService tests', () => {
it('should make .devices array empty', () => { it('should make .devices array empty', () => {
service.devices.push(testDevice); service.devices.push(testDevice);
service.removeAllDevices(); service.disconnectAllDevices();
expect(service.devices.length).toBe(0); expect(service.devices.length).toBe(0);
}); });
@ -59,7 +59,7 @@ describe('ConnectedDevicesService tests', () => {
service.devices.push(testDevice); service.devices.push(testDevice);
service.devices.push(testDevice2); service.devices.push(testDevice2);
await service.removeDeviceByID(testDevice.id); await service.disconnectDeviceByID(testDevice.id);
let isStillInArray = false; let isStillInArray = false;
service.devices.forEach((d) => { service.devices.forEach((d) => {

View File

@ -22,11 +22,11 @@ class ConnectedDevices {
return this.devices; return this.devices;
} }
removeAllDevices() { disconnectAllDevices() {
this.devices = [] as Device[]; this.devices = [] as Device[];
} }
removeDeviceByID(deviceIDToRemove: string) { disconnectDeviceByID(deviceIDToRemove: string) {
return new Promise<undefined>((resolve) => { return new Promise<undefined>((resolve) => {
this.devices = this.devices.filter((d) => { this.devices = this.devices.filter((d) => {
return d.id !== deviceIDToRemove; return d.id !== deviceIDToRemove;

View File

@ -10,4 +10,6 @@ export enum IpcEvents {
DisconnectPeerAndDestroySharingSessionBySessionID = 'disconnect-peer-and-destroy-sharing-session-by-session-id', DisconnectPeerAndDestroySharingSessionBySessionID = 'disconnect-peer-and-destroy-sharing-session-by-session-id',
GetDesktopCapturerSourceIdBySharingSessionId = 'get-desktop-capturer-source-id-by-sharing-session-id', GetDesktopCapturerSourceIdBySharingSessionId = 'get-desktop-capturer-source-id-by-sharing-session-id',
GetConnectedDevices = 'get-connected-devices-list', GetConnectedDevices = 'get-connected-devices-list',
DisconnectDeviceById = 'disconnect-device-by-id',
DisconnectAllDevices = 'disconnect-all-devices',
} }

View File

@ -171,4 +171,12 @@ export default function initIpcMainHandlers(
ipcMain.handle(IpcEvents.GetConnectedDevices, () => { ipcMain.handle(IpcEvents.GetConnectedDevices, () => {
return getDeskreenGlobal().connectedDevicesService.getDevices(); return getDeskreenGlobal().connectedDevicesService.getDevices();
}); });
ipcMain.handle(IpcEvents.DisconnectDeviceById, (_, id) => {
getDeskreenGlobal().connectedDevicesService.disconnectDeviceByID(id);
});
ipcMain.handle(IpcEvents.DisconnectAllDevices, () => {
getDeskreenGlobal().connectedDevicesService.disconnectAllDevices();
});
} }