FreeDATA/gui/src/store/settingsStore.js
2024-03-09 11:06:20 +01:00

138 lines
3.2 KiB
JavaScript

import { reactive, ref, watch } from "vue";
import { getConfig, setConfig } from "../js/api";
import { getAppDataPath } from "../js/freedata";
import fs from "fs";
const path = require("path");
const nconf = require("nconf");
var appDataPath = getAppDataPath();
var configFolder = path.join(appDataPath, "FreeDATA");
let configFile = "config.json";
const isGitHubActions = process.env.GITHUB_ACTIONS === "true";
if (isGitHubActions) {
configFile = "example.json";
configFolder = appDataPath;
}
var configPath = path.join(configFolder, configFile);
console.log("AppData Path:", appDataPath);
console.log(configFolder);
console.log(configPath);
nconf.file({ file: configPath });
// +++
//GUI DEFAULT SETTINGS........
//Set GUI defaults here, they will be used if not found in config/config.json
//They should be an exact mirror (variable wise) of settingsStore.local
//Nothing else should be needed aslong as components are using v-bind
// +++
const defaultConfig = {
local: {
host: "127.0.0.1",
port: "5000",
spectrum: "waterfall",
wf_theme: 2,
update_channel: "alpha",
enable_sys_notification: false,
grid_layout: "[]",
grid_preset: "[]",
grid_enabled: true,
},
remote: {
AUDIO: {
enable_auto_tune: false,
input_device: "",
output_device: "",
rx_audio_level: 0,
tx_audio_level: 0,
},
MESH: {
enable_protocol: false,
},
MODEM: {
enable_low_bandwidth_mode: false,
respond_to_cq: false,
tx_delay: 0,
enable_hamc: false,
enable_morse_identifier: false,
},
RADIO: {
control: "disabled",
model_id: 0,
serial_port: "",
serial_speed: "",
data_bits: 0,
stop_bits: 0,
serial_handshake: "",
ptt_port: "",
ptt_type: "",
serial_dcd: "",
serial_dtr: "",
},
RIGCTLD: {
ip: "127.0.0.1",
port: 0,
path: "",
command: "",
arguments: "",
},
STATION: {
enable_explorer: false,
enable_stats: false,
mycall: "DEFAULT",
myssid: 0,
mygrid: "",
ssid_list: [],
},
TCI: {
tci_ip: "127.0.0.1",
tci_port: 0,
},
MESSAGES: {
enable_auto_repeat: false,
},
},
};
nconf.defaults(defaultConfig);
nconf.required(["local:host", "local:port"]);
export const settingsStore = reactive(defaultConfig);
//Save settings for GUI to config file
settingsStore.local = nconf.get("local");
saveLocalSettingsToConfig();
export function onChange() {
setConfig(settingsStore.remote).then((conf) => {
settingsStore.remote = conf;
});
}
export function getRemote() {
return getConfig().then((conf) => {
if (typeof conf !== "undefined") {
settingsStore.remote = conf;
onChange();
} else {
console.warn("Received undefined configuration, using default!");
settingsStore.remote = defaultConfig.remote;
}
});
}
watch(settingsStore.local, (oldValue, newValue) => {
//This function watches for changes, and triggers a save of local settings
saveLocalSettingsToConfig();
});
export function saveLocalSettingsToConfig() {
nconf.set("local", settingsStore.local);
nconf.save();
//console.log("Settings saved!");
}