diff --git a/plugins/remote/package-lock.json b/plugins/remote/package-lock.json index e2e2e6fec4..d2bd71f4cd 100644 --- a/plugins/remote/package-lock.json +++ b/plugins/remote/package-lock.json @@ -19,23 +19,23 @@ }, "../../packages/client": { "name": "@scrypted/client", - "version": "1.1.39", + "version": "1.1.43", "license": "ISC", "dependencies": { - "@scrypted/types": "^0.2.65", + "@scrypted/types": "^0.2.76", "axios": "^0.25.0", - "engine.io-client": "^6.2.2", + "engine.io-client": "^6.4.0", "rimraf": "^3.0.2" }, "devDependencies": { "@types/ip": "^1.1.0", - "@types/node": "^17.0.17", - "typescript": "^4.7.4" + "@types/node": "^18.14.2", + "typescript": "^4.9.5" } }, "../../sdk": { "name": "@scrypted/sdk", - "version": "0.2.70", + "version": "0.2.85", "license": "ISC", "dependencies": { "@babel/preset-typescript": "^7.18.6", diff --git a/plugins/remote/src/main.ts b/plugins/remote/src/main.ts index b8d494c5db..92dee0e256 100644 --- a/plugins/remote/src/main.ts +++ b/plugins/remote/src/main.ts @@ -55,13 +55,17 @@ class ScryptedRemoteInstance extends ScryptedDeviceBase implements DeviceProvide }, }); + fromMimeType: string = "" + toMimeType: string = "" + constructor(nativeId: string) { super(nativeId); this.clearTryDiscoverDevices(); this.fromMimeType = 'x-scrypted-remote/x-media-object-' + this.id; - this.toMimeType = ScryptedMimeTypes.MediaObject; + this.toMimeType = '*'; + sdk.mediaManager.addConverter(this); } @@ -193,9 +197,11 @@ class ScryptedRemoteInstance extends ScryptedDeviceBase implements DeviceProvide }); this.client.onClose = () => { - this.console.log('client killed') + this.console.log('client killed, reconnecting in 60s'); + setTimeout(async () => await this.clearTryDiscoverDevices(), 60000); } + /* bjia56: since the MediaObject conversion isn't completely implemented, disable this for now const { rpcPeer } = this.client; const map = new WeakMap(); rpcPeer.nameDeserializerMap.set('MediaObject', { @@ -215,11 +221,13 @@ class ScryptedRemoteInstance extends ScryptedDeviceBase implements DeviceProvide return rmo; }, }); + */ + this.console.log(`Connected to remote Scrypted server. Remote server version: ${this.client.serverVersion}`) } async convert(data: RemoteMediaObject, fromMimeType: string, toMimeType: string, options?: MediaObjectOptions): Promise { - if (toMimeType === 'x-scrypted-remote/x-media-object') + if (toMimeType.startsWith('x-scrypted-remote/x-media-object')) return data; let ret = await this.client.mediaManager.convertMediaObject(data, toMimeType); if (toMimeType === ScryptedMimeTypes.FFmpegInput) { @@ -298,9 +306,9 @@ class ScryptedRemoteInstance extends ScryptedDeviceBase implements DeviceProvide // first register the top level devices, then register the remaining // devices by provider id - await deviceManager.onDevicesChanged({ - devices: providerDeviceMap.get(this.nativeId), - providerNativeId: this.nativeId, + // top level devices are discovered one by one to avoid clobbering + providerDeviceMap.get(this.nativeId).map(async device => { + await deviceManager.onDeviceDiscovered(device); }); for (let [providerNativeId, devices] of providerDeviceMap) { await deviceManager.onDevicesChanged({