UNPKG

1.96 kBJavaScriptView Raw
1const fs = require('fs')
2const _ = require('underscore')
3const rm = require('rimraf')
4const async = require('async')
5const path = require('path')
6
7const cl = require('./color')
8const cfg = require('./config')
9const log = console.log
10
11let w = {
12 data: {},
13
14 load() {
15 let p = cfg.getPath('wowaads')
16
17 w.data = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, 'utf-8')) : {}
18 return w
19 },
20
21 save() {
22 fs.writeFileSync(
23 cfg.getPath('wowaads'),
24 JSON.stringify(w.data, null, 2),
25 'utf-8'
26 )
27 },
28
29 checkDuplicate() {
30 let keys = _.keys(w.data)
31 let k
32
33 while ((k = keys.pop())) {
34 for (let i = 0; i < keys.length; i++) {
35 let k2 = keys[i]
36 let inc = _.intersection(w.data[k].sub, w.data[k2].sub)
37 if (inc.length) {
38 log(
39 `\n${cl.i('Note:')} ${cl.h(k)} and ${cl.h(
40 k2
41 )} use the same subset of directory, make sure you have only one of them installed\n`
42 )
43 // log(inc)
44 return true
45 }
46 }
47 }
48
49 return false
50 },
51
52 clearUp(key, done) {
53 let p = cfg.getPath('addon')
54 if (key in w.data) {
55 async.forEach(
56 w.data[key].sub,
57 (sub, cb) => {
58 rm(path.join(p, sub), err => {
59 if (err) {
60 log('clear up addon failed', sub)
61 done(err)
62 cb(false)
63 return
64 }
65
66 cb()
67 })
68 },
69 () => {
70 delete w.data[key]
71 done()
72 }
73 )
74 } else if (fs.existsSync(path.join(p, key))) rm(path.join(p, key), done)
75 else done('na')
76 },
77
78 dirStatus(dir) {
79 for (let k in w.data) if (w.data[k].sub.indexOf(dir) >= 0) return k
80 },
81
82 unknownDirs() {
83 try {
84 return _.filter(
85 fs.readdirSync(cfg.getPath('addon')),
86 d => !/^\./.test(d) && !w.dirStatus(d)
87 )
88 } catch(err) {
89 return []
90 }
91 }
92}
93
94module.exports = w