mirror of
https://github.com/pavlobu/deskreen.git
synced 2025-05-21 09:50:13 -07:00
fix ConnectedDevicesListDrawer
This commit is contained in:
parent
d2129628ef
commit
df3a37f7b8
@ -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);
|
||||||
}}
|
}}
|
||||||
|
@ -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) => {
|
||||||
|
@ -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;
|
||||||
|
@ -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',
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user