Discord-Media-Compressor-su.../lib/settingsManager.js

182 lines
4.1 KiB
JavaScript
Raw Normal View History

import fs from "fs"
2022-05-04 18:40:14 +00:00
import path from "path"
export class SettingsManager {
settings
currentSetting
constructor() {
}
async start() {
await this.#init()
}
2022-05-04 11:09:33 +00:00
async #init() {
2022-05-04 18:40:14 +00:00
let settings
settings = await this.#getSettings().catch(async (err) => {
2022-05-04 11:09:33 +00:00
settings = undefined
})
2022-05-04 11:09:33 +00:00
//console.log(settings)
if (!settings) settings = await this.#makeNewSettingsFile()
this.settings = JSON.parse(settings.toString())
this.currentSetting = this.settings.presets[this.settings.currentSetting]
}
async #getSettings() {
return new Promise((resolve, reject) => {
2022-05-04 18:40:14 +00:00
const getSettings = fs.readFile(path.resolve(__dirname, "settings.json"), (err, data) => {
2022-05-04 11:09:33 +00:00
if (err) reject(err)
resolve(data)
})
})
}
async #makeNewSettingsFile() {
const settings = `
{
2022-05-04 18:40:14 +00:00
"currentSetting": 3,
"presets": [{
2022-05-04 18:40:14 +00:00
"name": "Most efficient 8 megabytes of your life",
"cpuUsed": 0,
"deadline": "best",
"bitrateError": 90,
"crfMap": [{
"resolution": 240,
"crf": 1
}, {
"resolution": 360,
"crf": 1
}, {
"resolution": 480,
"crf": 1
}, {
"resolution": 720,
"crf": 1
}, {
"resolution": 1080,
"crf": 1
}, {
"resolution": 1440,
"crf": 1
}, {
"resolution": 2160,
"crf": 1
}]
}, {
"name": "I have some time to kill",
"cpuUsed": 1,
"deadline": "good",
"bitrateError": 90,
"crfMap": [{
"resolution": 240,
"crf": 20
}, {
"resolution": 360,
"crf": 20
}, {
"resolution": 480,
"crf": 20
}, {
"resolution": 720,
"crf": 20
}, {
"resolution": 1080,
"crf": 17
}, {
"resolution": 1440,
"crf": 15
}, {
"resolution": 2160,
"crf": 10
}]
}, {
"name": "Mid",
"cpuUsed": 3,
"deadline": "good",
"bitrateError": 80,
"crfMap": [{
"resolution": 240,
"crf": 30
}, {
"resolution": 360,
"crf": 30
}, {
"resolution": 480,
"crf": 30
}, {
"resolution": 720,
"crf": 25
}, {
"resolution": 1080,
"crf": 20
}, {
"resolution": 1440,
"crf": 15
}, {
"resolution": 2160,
"crf": 10
}]
}, {
"name": "I don't like waiting",
"cpuUsed": 4,
"deadline": 100,
"bitrateError": 70,
"crfMap": [{
"resolution": 240,
"crf": 45
}, {
"resolution": 360,
"crf": 42
}, {
"resolution": 480,
"crf": 40
}, {
"resolution": 720,
"crf": 35
}, {
"resolution": 1080,
"crf": 30
}, {
"resolution": 1440,
"crf": 25
}, {
"resolution": 2160,
"crf": 20
}]
}, {
"name": "I want it, NOW!",
"cpuUsed": 4,
"deadline": "realtime",
"bitrateError": 60,
"crfMap": [{
"resolution": 240,
"crf": 40
}, {
"resolution": 360,
"crf": 35
}, {
"resolution": 480,
"crf": 30
}, {
"resolution": 720,
"crf": 25
}, {
"resolution": 1080,
"crf": 20
}, {
"resolution": 1440,
"crf": 15
}, {
"resolution": 2160,
"crf": 10
}]
}]
}
`
return new Promise((resolve, reject) => {
fs.writeFile("settings.json", settings, () => {
resolve(settings)
})
})
}
}