mirror of
https://github.com/koush/scrypted.git
synced 2026-05-14 09:20:28 +01:00
core: add system settings support
This commit is contained in:
4
plugins/core/package-lock.json
generated
4
plugins/core/package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
4
plugins/prebuffer-mixin/package-lock.json
generated
4
plugins/prebuffer-mixin/package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user