CatBoat-Launcher/modules/launcherSettings.js
2025-05-10 04:12:32 +02:00

122 lines
2.8 KiB
JavaScript

const fs = require("node:fs")
const path = require("node:path")
let launcherDataPath = path.join(__dirname, ".catboat")
const baseSettings = {
ram: {
max: 2048
},
auth: {
token: "",
type: "msa",
clientToken: ""
}
}
function initSettings($launcherDataPath) {
launcherDataPath = $launcherDataPath
if (!fs.existsSync(launcherDataPath)) {
try {
fs.mkdirSync(launcherDataPath)
} catch (error) {
throw error
}
}
if (!fs.existsSync(path.join(launcherDataPath, "launcher_settings.json"))) {
try {
fs.writeFileSync(path.join(launcherDataPath, "launcher_settings.json"), JSON.stringify(baseSettings, null, 4))
} catch (error) {
throw error
}
}
}
function getLauncherDataPath() {
return launcherDataPath
}
function writeSettings(settings) {
try {
fs.writeFileSync(path.join(launcherDataPath, "launcher_settings.json"), JSON.stringify(settings, null, 4))
return
} catch (error) {
clean()
return writeSettings(settings)
}
}
function get(key) {
try {
const settings = JSON.parse(fs.readFileSync(path.join(launcherDataPath, "launcher_settings.json")))
const keys = key.split(".")
let value = settings
for (const k of keys) {
if (value[k] !== undefined) {
value = value[k]
} else {
throw new Error(`La clé '${key}' n'existe pas.`)
}
}
return value
} catch (error) {
clean()
return get(key)
}
}
function set(key, newValue) {
try {
const filePath = path.join(launcherDataPath, "launcher_settings.json")
const settings = JSON.parse(fs.readFileSync(filePath))
const keys = key.split(".")
let obj = settings
for (let i = 0; i < keys.length - 1; i++) {
const k = keys[i]
if (!obj[k]) {
obj[k] = {}
}
obj = obj[k]
}
obj[keys[keys.length - 1]] = newValue
fs.writeFileSync(filePath, JSON.stringify(settings, null, 4))
} catch (error) {
clean()
return set(ke, value)
}
}
function clean() {
try {
fs.writeFileSync(path.join(launcherDataPath, "launcher_settings.json"), JSON.stringify(baseSettings, null, 4))
return
} catch (error) {
throw error
}
}
function readSettings() {
try {
return JSON.parse(fs.readFileSync(path.join(launcherDataPath, "launcher_settings.json")))
} catch (error) {
clean()
return readSettings()
}
}
module.exports = {
getLauncherDataPath,
writeSettings,
readSettings,
initSettings,
clean,
get,
set,
}