diff --git a/plugins/core/package-lock.json b/plugins/core/package-lock.json index 8ec661054..1e39e613f 100644 --- a/plugins/core/package-lock.json +++ b/plugins/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/core", - "version": "0.1.103", + "version": "0.1.104", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/core", - "version": "0.1.103", + "version": "0.1.104", "license": "Apache-2.0", "dependencies": { "@scrypted/common": "file:../../common", diff --git a/plugins/core/package.json b/plugins/core/package.json index 04b25e6db..00d00cced 100644 --- a/plugins/core/package.json +++ b/plugins/core/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/core", - "version": "0.1.103", + "version": "0.1.104", "description": "Scrypted Core plugin. Provides the UI, websocket, and engine.io APIs.", "author": "Scrypted", "license": "Apache-2.0", diff --git a/plugins/core/src/main.ts b/plugins/core/src/main.ts index 5a45e5c17..be393f467 100644 --- a/plugins/core/src/main.ts +++ b/plugins/core/src/main.ts @@ -92,6 +92,17 @@ class ScryptedCore extends ScryptedDeviceBase implements HttpRequestHandler, Eng this.automationCore = new AutomationCore(); })(); + deviceManager.onDeviceDiscovered({ + name: 'Add to Launcher', + nativeId: 'launcher', + interfaces: [ + '@scrypted/launcher-ignore', + ScryptedInterface.MixinProvider, + ScryptedInterface.Readme, + ], + type: ScryptedDeviceType.Builtin, + }); + (async () => { await deviceManager.onDeviceDiscovered( { diff --git a/plugins/core/ui/src/common/mixin.ts b/plugins/core/ui/src/common/mixin.ts index 10a6c0bdd..917b95d52 100644 --- a/plugins/core/ui/src/common/mixin.ts +++ b/plugins/core/ui/src/common/mixin.ts @@ -1,3 +1,4 @@ +import { timeoutPromise } from "@scrypted/common/src/promise-utils"; import { MixinProvider, ScryptedDevice, ScryptedDeviceType, ScryptedInterface, SystemManager } from "@scrypted/types"; export async function setMixin(systemManager: SystemManager, device: ScryptedDevice, mixinId: string, enabled: boolean) { @@ -14,19 +15,21 @@ export async function setMixin(systemManager: SystemManager, device: ScryptedDev plugins.setMixins(device.id, mixins); } -export function getAllDevices(systemManager: SystemManager) { - return Object.keys(systemManager.getSystemState()).map(id => systemManager.getDeviceById(id)).filter(device => !!device); +export function getAllDevices(systemManager: SystemManager) { + return Object.keys(systemManager.getSystemState()).map(id => systemManager.getDeviceById(id) as T & ScryptedDevice).filter(device => !!device); } export async function getDeviceAvailableMixins(systemManager: SystemManager, device: ScryptedDevice): Promise<(ScryptedDevice & MixinProvider)[]> { - const results = await Promise.all(getAllDevices(systemManager).map(async (check) => { + const results = await Promise.all(getAllDevices(systemManager).map(async (check) => { try { if (check.interfaces.includes(ScryptedInterface.MixinProvider)) { - if (await (check as any as MixinProvider).canMixin(device.type, device.interfaces)) - return check as MixinProvider & ScryptedDevice; + const canMixin = await timeoutPromise(5000, check.canMixin(device.type, device.interfaces)); + if (canMixin) + return check; } } catch (e) { + console.warn(check.name, 'canMixin error', e) } })); @@ -47,7 +50,7 @@ export async function getMixinProviderAvailableDevices(systemManager: SystemMana devices.map(async (device) => { try { if (device.mixins?.includes(mixinProvider.id) || (await mixinProvider.canMixin(device.type, device.interfaces))) - return device; + return device; } catch (e) { } diff --git a/plugins/core/ui/src/interfaces/ObjectDetection.vue b/plugins/core/ui/src/interfaces/ObjectDetection.vue index 8868ff067..b8e8c5112 100644 --- a/plugins/core/ui/src/interfaces/ObjectDetection.vue +++ b/plugins/core/ui/src/interfaces/ObjectDetection.vue @@ -81,6 +81,7 @@ export default { const mediaManager = this.$scrypted.mediaManager; const mo = await mediaManager.createMediaObject(buffer, 'image/*'); const detected = await this.rpc().detectObjects(mo); + console.log(detected); this.lastDetection = detected; }, allowDrop(ev) {