-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfile.js
97 lines (82 loc) · 3.02 KB
/
file.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// WebPad File API Module
// serverInit, setConfig, readConfig, setEnabled and getAddonManifest are meant to be used by the server.
const lowdb = require("lowdb")
const FileSync = require('lowdb/adapters/FileSync')
const fs = require("fs")
const db = lowdb(new FileSync("database.json"))
db.defaults({addonStorage: []}).write()
let addonData = db.get("addonStorage")
let addonManifest = []
let clientInitialized = false
let context = {}
function serverInit() {
let folders = fs.readdirSync("./addons")
folders = folders.map(f => {return "./addons/" + f})
folders = folders.filter(f => {return fs.existsSync(f) && fs.lstatSync(f).isDirectory();})
for (i of folders) {
try {
var manifest = fs.readFileSync(i + "/manifest.json")
manifest = JSON.parse(manifest)
} catch(e) {
console.log("[ADDONS] Addon at " + i + " cannot be read: Manifest file not found or has invalid JSON.")
continue
}
if (!manifest.name || !manifest.version || !manifest.main) {
console.log("[ADDONS] Addon at " + i + " cannot be read: Required properties (name, version, main) not found in manifest file.")
continue
}
let addon = addonData.find({name: manifest.name}).value()
let enabled = true
if (addon == null) {
let defaultValues = {}
if (manifest.configs != null) {
for (h of manifest.configs) {
defaultValues[h.name] = h.default || null
}
}
addonData.push({name: manifest.name, enabled: true, config: defaultValues, data: {}}).write()
} else {
enabled = addon.enabled
}
addonManifest.push({name: manifest.name, version: manifest.version, main: manifest.main, description: (null || manifest.description), filePath: i, enabled, configs: (manifest.configs ? manifest.configs : {})})
}
console.log("[ADDONS] Loaded " + addonManifest.length + " addons.")
return addonManifest
}
function getAddonManifest() {
return addonManifest
}
function addonInit(addonName) { // TODO: Get a better implementation
context.name = addonName
let addon = addonData.find({name: addonName})
context.addon = addon.value()
clientInitialized = true
}
function readStoredData() {
if (clientInitialized === false) { throw new Error("Please run addonInit() first.")}
return context.addon.data
}
function writeToData(data) {
if (clientInitialized === false) { throw new Error("Please run addonInit() first.")}
context.addon.data = data
db.write()
return
}
function readStoredConfig() {
if (clientInitialized === false) { throw new Error("Please run addonInit() first.")}
return context.addon.config
}
function setConfig(addonName, data) {
let addon = addonData.find({name: addonName}).value()
addon.config = data
db.write()
}
function readConfig(addonName) {
let addon = addonData.find({name: addonName}).value()
return addon.config
}
function setEnabled(addonName, state) {
let addon = addonData.find({name: addonName}).value()
addonData.find({name: addonName}).set("enabled", !addon.enabled).write()
}
module.exports = {serverInit, addonInit, getAddonManifest, readStoredData, writeToData, readStoredConfig, setEnabled, setConfig, readConfig}