diff --git a/server/python/rpc.py b/server/python/rpc.py index 6625294df..b41d7adc7 100644 --- a/server/python/rpc.py +++ b/server/python/rpc.py @@ -106,7 +106,7 @@ class RpcPeer: serializationContext: Dict = {} serializedArgs = [] for arg in args: - serializedArgs.append(self.serialize(arg, False, serializationContext)) + serializedArgs.append(self.serialize(arg, serializationContext)) rpcApply = { 'type': 'apply', @@ -184,8 +184,11 @@ class RpcPeer: } return props - def serialize(self, value, requireProxy, serializationContext: Dict): - if (not value or (not requireProxy and type(value) in jsonSerializable)): + def isTransportSafe(value: any): + return not value or (type(value) in jsonSerializable) + + def serialize(self, value, serializationContext: Dict): + if (RpcPeer.isTransportSafe(value)): return value __remote_constructor_name = 'Function' if callable(value) else value.__proxy_constructor if hasattr( @@ -332,8 +335,7 @@ class RpcPeer: try: value = self.params.get(message['param'], None) value = await maybe_await(value) - result['result'] = self.serialize( - value, message.get('requireProxy', None), serializationContext) + result['result'] = self.serialize(value, serializationContext) except Exception as e: tb = traceback.format_exc() self.createErrorResult( @@ -370,7 +372,7 @@ class RpcPeer: else: value = await maybe_await(target(*args)) - result['result'] = self.serialize(value, False, serializationContext) + result['result'] = self.serialize(value, serializationContext) except StopAsyncIteration as e: self.createErrorResult(result, e) except Exception as e: diff --git a/server/src/plugin/media.ts b/server/src/plugin/media.ts index d9d6f9d37..a2192cb68 100644 --- a/server/src/plugin/media.ts +++ b/server/src/plugin/media.ts @@ -21,7 +21,7 @@ class MediaObject implements MediaObjectRemote { } if (options) { for (const [key, value] of Object.entries(options)) { - if (RpcPeer.isTransportSafe(key)) + if (RpcPeer.isTransportSafe(value)) this.__proxy_props[key] = value; (this as any)[key] = value; } @@ -302,6 +302,10 @@ export abstract class MediaManagerBase implements MediaManager { data = Buffer.from(JSON.stringify(data)); const sourceId = typeof options?.sourceId === 'string' ? options?.sourceId : this.getPluginDeviceId(); + if (sourceId) { + options ||= {} as T; + options.sourceId = sourceId; + } return new MediaObject(mimeType, data, options) as MediaObject & T; } @@ -456,16 +460,6 @@ export abstract class MediaManagerBase implements MediaManager { export class MediaManagerImpl extends MediaManagerBase { constructor(public systemManager: SystemManager, public deviceManager: DeviceManager) { super(); - - this.builtinConverters.push({ - id: getBuiltinId(this.builtinConverters.length), - name: 'ScryptedDeviceId to ScryptedDevice Converter', - fromMimeType: ScryptedMimeTypes.ScryptedDeviceId, - toMimeType: ScryptedMimeTypes.ScryptedDevice, - convert: async (data, fromMimeType, toMimeType) => { - return this.getDeviceById(data.toString()); - } - }); } getSystemState(): { [id: string]: { [property: string]: SystemDeviceState; }; } {