core: add system settings support

This commit is contained in:
Koushik Dutta
2022-11-30 14:30:00 -08:00
parent f3f370d5e0
commit 606515b2dc
7 changed files with 33 additions and 32 deletions

View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/core",
"version": "0.1.60",
"version": "0.1.61",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/core",
"version": "0.1.60",
"version": "0.1.61",
"license": "Apache-2.0",
"dependencies": {
"@scrypted/common": "file:../../common",

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/core",
"version": "0.1.60",
"version": "0.1.61",
"description": "Scrypted Core plugin. Provides the UI, websocket, and engine.io APIs.",
"author": "Scrypted",
"license": "Apache-2.0",
@@ -30,6 +30,7 @@
"HttpRequestHandler",
"EngineIOHandler",
"DeviceProvider",
"SystemSettings",
"Settings"
],
"pluginDependencies": [

View File

@@ -2,8 +2,9 @@ import { ScryptedDevice, ScryptedDeviceType, ScryptedInterface, Settings, System
import { findPluginDevice } from "../helpers";
export function createSystemSettingsDevice(systemManager: SystemManager): ScryptedDevice & Settings {
const core = systemManager.getDeviceByName<Settings>('@scrypted/core');
const transcode = findPluginDevice<Settings>(systemManager, '@scrypted/prebuffer-mixin', 'transcode');
const systemSettings = Object.keys(systemManager.getSystemState())
.map(id => systemManager.getDeviceById<Settings>(id))
.filter(d => d.interfaces?.includes("SystemSettings"));
return {
name: 'Settings',
@@ -24,36 +25,34 @@ export function createSystemSettingsDevice(systemManager: SystemManager): Scrypt
return true;
},
listen(event, callback) {
const cl = core.listen(event, callback);
const tl = transcode?.listen(event, callback);
let listeners = systemSettings.map(d => d.listen(event, callback));
return {
removeListener() {
cl.removeListener();
tl?.removeListener();
for (const l of listeners) {
l.removeListener();
}
listeners = [];
},
}
},
async getSettings() {
return [
...(await core.getSettings()).map(s => ({
...s,
key: 'core:' + s.key,
group: 'Network Settings',
})),
...(await transcode?.getSettings() || []).map(s => ({
...s,
key: 'transcode:' + s.key,
group: 'Transcoding',
})),
];
const results = systemSettings.map(async d => {
const settings = await d.getSettings();
for (const setting of settings) {
if (d.pluginId === '@scrypted/core')
setting.group = 'General';
else
setting.group = d.name;
setting.key = d.id + ':' + setting.key;
}
return settings;
});
return (await Promise.all(results)).flat();
},
async putSetting(key, value) {
if (key.startsWith('core:')) {
await core.putSetting(key.substring(5), value);
}
else if (key.startsWith('transcode:')) {
await transcode.putSetting(key.substring(10), value);
}
const [id, realKey] = key.split(':');
const device = systemSettings.find(d => d.id === id);
return device?.putSetting(realKey, value);
},
}
}
}

View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/prebuffer-mixin",
"version": "0.9.52",
"version": "0.9.53",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/prebuffer-mixin",
"version": "0.9.52",
"version": "0.9.53",
"license": "Apache-2.0",
"dependencies": {
"@scrypted/common": "file:../../common",

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/prebuffer-mixin",
"version": "0.9.52",
"version": "0.9.53",
"description": "Video Stream Rebroadcast, Prebuffer, and Management Plugin for Scrypted.",
"author": "Scrypted",
"license": "Apache-2.0",

View File

@@ -37,7 +37,7 @@ export class FileRtspServer extends RtspServer {
if (!file)
return this.respond(400, 'Bad Request', requestHeaders, {});
this.writeConsole?.log('RTSP WRITE file', file);
// this.writeConsole?.log('RTSP WRITE file', file);
this.writeStream = fs.createWriteStream(file);
this.writeStream.on('error', e => {
this.writeConsole?.error('RTSP WRITE error', e);

View File

@@ -1685,6 +1685,7 @@ export class RebroadcastPlugin extends AutoenableMixinProvider implements MixinP
nativeId: TRANSCODE_MIXIN_PROVIDER_NATIVE_ID,
name: 'Transcoding',
interfaces: [
"SystemSettings",
ScryptedInterface.Settings,
ScryptedInterface.MixinProvider,
],