Merge pull request 'Plugin-Config: ENV seedet nur fehlende Settings (fill-if-missing) + ensureWavelog' (#6) from feat/plugin-config-fill-if-missing into main
This commit was merged in pull request #6.
This commit is contained in:
@@ -1928,6 +1928,7 @@ async function migratePluginSettingsDefaults() {
|
|||||||
changed = ensureVswrReportReaderSettings(dataDir) || changed;
|
changed = ensureVswrReportReaderSettings(dataDir) || changed;
|
||||||
changed = ensureOpenWebRxBandmapSettings() || changed;
|
changed = ensureOpenWebRxBandmapSettings() || changed;
|
||||||
changed = ensureMicrohamSettings() || changed;
|
changed = ensureMicrohamSettings() || changed;
|
||||||
|
changed = ensureWavelogSettings() || changed;
|
||||||
changed = ensureOauthSettings() || changed;
|
changed = ensureOauthSettings() || changed;
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
@@ -1935,6 +1936,36 @@ async function migratePluginSettingsDefaults() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ensureWavelogSettings() {
|
||||||
|
const pluginId = "rms.wavelog.cat";
|
||||||
|
const current = runtime.pluginState.settings[pluginId] && typeof runtime.pluginState.settings[pluginId] === "object"
|
||||||
|
? { ...runtime.pluginState.settings[pluginId] }
|
||||||
|
: {};
|
||||||
|
const next = { ...current };
|
||||||
|
|
||||||
|
const syncFromEnv = boolFromEnv("WAVELOG_SYNC_SETTINGS_FROM_ENV", config.execMode === "prod");
|
||||||
|
if (!syncFromEnv) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fill-if-missing: ENV seedet nur fehlende Felder, damit die (nicht-geheime)
|
||||||
|
// Wavelog-Config in der Admin-UI sichtbar ist und UI-Änderungen Deploys überleben.
|
||||||
|
const setIfMissing = (key, value) => {
|
||||||
|
if (current[key] === undefined || current[key] === null) {
|
||||||
|
next[key] = value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
setIfMissing("baseUrl", String(process.env.WAVELOG_BASE_URL || "").trim());
|
||||||
|
setIfMissing("radioName", String(process.env.WAVELOG_RADIO_NAME || "RMS Remote").trim() || "RMS Remote");
|
||||||
|
setIfMissing("timeoutMs", clampInteger(Number(process.env.WAVELOG_TIMEOUT_MS || 8000), 1000, 120000, 8000));
|
||||||
|
|
||||||
|
if (JSON.stringify(current) !== JSON.stringify(next)) {
|
||||||
|
runtime.pluginState.settings[pluginId] = next;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function ensureOauthSettings() {
|
function ensureOauthSettings() {
|
||||||
const pluginId = "rms.auth.oauth";
|
const pluginId = "rms.auth.oauth";
|
||||||
const current = runtime.pluginState.settings[pluginId] && typeof runtime.pluginState.settings[pluginId] === "object"
|
const current = runtime.pluginState.settings[pluginId] && typeof runtime.pluginState.settings[pluginId] === "object"
|
||||||
@@ -1971,11 +2002,17 @@ function ensureOpenWebRxBandmapSettings() {
|
|||||||
|
|
||||||
const syncFromEnv = boolFromEnv("OPENWEBRX_BANDMAP_SYNC_SETTINGS_FROM_ENV", config.execMode === "prod");
|
const syncFromEnv = boolFromEnv("OPENWEBRX_BANDMAP_SYNC_SETTINGS_FROM_ENV", config.execMode === "prod");
|
||||||
if (syncFromEnv) {
|
if (syncFromEnv) {
|
||||||
next.csvPath = String(process.env.OPENWEBRX_BANDMAP_CSV_PATH || "").trim();
|
// fill-if-missing: ENV seedet nur fehlende Felder, UI-Wert bleibt erhalten.
|
||||||
next.configFilePath = String(process.env.OPENWEBRX_CONFIG_PATH || "").trim();
|
const setIfMissing = (key, value) => {
|
||||||
next.setCommandTemplate = String(process.env.OPENWEBRX_BAND_SET_CMD_TEMPLATE || "").trim();
|
if (current[key] === undefined || current[key] === null) {
|
||||||
next.stateFilePath = String(process.env.OPENWEBRX_BAND_STATE_PATH || "").trim();
|
next[key] = value;
|
||||||
next.timeoutMs = clampInteger(Number(process.env.OPENWEBRX_BAND_TIMEOUT_MS || 20000), 1000, 120000, 20000);
|
}
|
||||||
|
};
|
||||||
|
setIfMissing("csvPath", String(process.env.OPENWEBRX_BANDMAP_CSV_PATH || "").trim());
|
||||||
|
setIfMissing("configFilePath", String(process.env.OPENWEBRX_CONFIG_PATH || "").trim());
|
||||||
|
setIfMissing("setCommandTemplate", String(process.env.OPENWEBRX_BAND_SET_CMD_TEMPLATE || "").trim());
|
||||||
|
setIfMissing("stateFilePath", String(process.env.OPENWEBRX_BAND_STATE_PATH || "").trim());
|
||||||
|
setIfMissing("timeoutMs", clampInteger(Number(process.env.OPENWEBRX_BAND_TIMEOUT_MS || 20000), 1000, 120000, 20000));
|
||||||
} else if (!Number.isFinite(Number(next.timeoutMs)) || Number(next.timeoutMs) < 1000) {
|
} else if (!Number.isFinite(Number(next.timeoutMs)) || Number(next.timeoutMs) < 1000) {
|
||||||
next.timeoutMs = 20000;
|
next.timeoutMs = 20000;
|
||||||
}
|
}
|
||||||
@@ -2088,25 +2125,30 @@ function ensureMicrohamSettings() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
next.device = String(process.env.MICROHAM_DEVICE || process.env.RMS_MICROHAM_DEV || "/dev/rms-microham-u3").trim() || "/dev/rms-microham-u3";
|
// fill-if-missing: ENV seedet ein Feld nur, wenn es in plugin-state fehlt.
|
||||||
next.pttCommandsEnabled = boolFromEnv("MICROHAM_PTT_COMMANDS_ENABLED", true);
|
// Danach gewinnt immer der gespeicherte/UI-Wert (überlebt Deploys/Neustarts).
|
||||||
next.pttDownCommand = String(process.env.MICROHAM_PTT_DOWN_CMD || "").trim();
|
const setIfMissing = (key, value) => {
|
||||||
next.pttUpCommand = String(process.env.MICROHAM_PTT_UP_CMD || "").trim();
|
if (current[key] === undefined || current[key] === null) {
|
||||||
next.pttTimeoutMs = clampInteger(Number(process.env.MICROHAM_PTT_TIMEOUT_MS || 5000), 1000, 60000, 5000);
|
next[key] = value;
|
||||||
next.pttApplyBandState = boolFromEnv("MICROHAM_PTT_APPLY_BAND_STATE", true);
|
}
|
||||||
next.pttRigctlModel = String(process.env.MICROHAM_PTT_RIGCTL_MODEL || "3023").trim() || "3023";
|
};
|
||||||
next.pttRigctlBaud = String(process.env.MICROHAM_PTT_RIGCTL_BAUD || "19200").trim() || "19200";
|
setIfMissing("device", String(process.env.MICROHAM_DEVICE || process.env.RMS_MICROHAM_DEV || "/dev/rms-microham-u3").trim() || "/dev/rms-microham-u3");
|
||||||
next.pttRigctlSetConf = String(process.env.MICROHAM_PTT_RIGCTL_SETCONF || "rts_state=OFF,dtr_state=OFF").trim() || "rts_state=OFF,dtr_state=OFF";
|
setIfMissing("pttCommandsEnabled", boolFromEnv("MICROHAM_PTT_COMMANDS_ENABLED", true));
|
||||||
next.audioEnabled = boolFromEnv("MICROHAM_AUDIO_ENABLED", true);
|
setIfMissing("pttDownCommand", String(process.env.MICROHAM_PTT_DOWN_CMD || "").trim());
|
||||||
next.audioAlsaDevice = String(process.env.MICROHAM_AUDIO_ALSA_DEVICE || "plughw:CARD=CODEC,DEV=0").trim() || "plughw:CARD=CODEC,DEV=0";
|
setIfMissing("pttUpCommand", String(process.env.MICROHAM_PTT_UP_CMD || "").trim());
|
||||||
next.audioInputMime = String(process.env.MICROHAM_AUDIO_INPUT_MIME || "webm").trim().toLowerCase() === "ogg" ? "ogg" : "webm";
|
setIfMissing("pttTimeoutMs", clampInteger(Number(process.env.MICROHAM_PTT_TIMEOUT_MS || 5000), 1000, 60000, 5000));
|
||||||
next.audioStopOnDisconnect = boolFromEnv("MICROHAM_AUDIO_STOP_ON_DISCONNECT", true);
|
setIfMissing("pttApplyBandState", boolFromEnv("MICROHAM_PTT_APPLY_BAND_STATE", true));
|
||||||
next.audioChunkMs = clampInteger(Number(process.env.MICROHAM_AUDIO_CHUNK_MS || 100), 40, 2000, 100);
|
setIfMissing("pttRigctlModel", String(process.env.MICROHAM_PTT_RIGCTL_MODEL || "3023").trim() || "3023");
|
||||||
next.audioSessionTimeoutMs = clampInteger(Number(process.env.MICROHAM_AUDIO_SESSION_TIMEOUT_MS || 120000), 1000, 3600000, 120000);
|
setIfMissing("pttRigctlBaud", String(process.env.MICROHAM_PTT_RIGCTL_BAUD || "19200").trim() || "19200");
|
||||||
next.audioFfmpegPath = String(process.env.MICROHAM_AUDIO_FFMPEG_PATH || "").trim();
|
setIfMissing("pttRigctlSetConf", String(process.env.MICROHAM_PTT_RIGCTL_SETCONF || "rts_state=OFF,dtr_state=OFF").trim() || "rts_state=OFF,dtr_state=OFF");
|
||||||
if (next.audioFfmpegExtraArgs === undefined || next.audioFfmpegExtraArgs === null) {
|
setIfMissing("audioEnabled", boolFromEnv("MICROHAM_AUDIO_ENABLED", true));
|
||||||
next.audioFfmpegExtraArgs = String(process.env.MICROHAM_AUDIO_FFMPEG_EXTRA_ARGS || "").trim();
|
setIfMissing("audioAlsaDevice", String(process.env.MICROHAM_AUDIO_ALSA_DEVICE || "plughw:CARD=CODEC,DEV=0").trim() || "plughw:CARD=CODEC,DEV=0");
|
||||||
}
|
setIfMissing("audioInputMime", String(process.env.MICROHAM_AUDIO_INPUT_MIME || "webm").trim().toLowerCase() === "ogg" ? "ogg" : "webm");
|
||||||
|
setIfMissing("audioStopOnDisconnect", boolFromEnv("MICROHAM_AUDIO_STOP_ON_DISCONNECT", true));
|
||||||
|
setIfMissing("audioChunkMs", clampInteger(Number(process.env.MICROHAM_AUDIO_CHUNK_MS || 100), 40, 2000, 100));
|
||||||
|
setIfMissing("audioSessionTimeoutMs", clampInteger(Number(process.env.MICROHAM_AUDIO_SESSION_TIMEOUT_MS || 120000), 1000, 3600000, 120000));
|
||||||
|
setIfMissing("audioFfmpegPath", String(process.env.MICROHAM_AUDIO_FFMPEG_PATH || "").trim());
|
||||||
|
setIfMissing("audioFfmpegExtraArgs", String(process.env.MICROHAM_AUDIO_FFMPEG_EXTRA_ARGS || "").trim());
|
||||||
|
|
||||||
if (JSON.stringify(current) !== JSON.stringify(next)) {
|
if (JSON.stringify(current) !== JSON.stringify(next)) {
|
||||||
runtime.pluginState.settings[pluginId] = next;
|
runtime.pluginState.settings[pluginId] = next;
|
||||||
|
|||||||
Reference in New Issue
Block a user