1 | const fs = require('fs')
|
2 | const _ = require('underscore')
|
3 | const rm = require('rimraf')
|
4 | const async = require('async')
|
5 | const path = require('path')
|
6 |
|
7 | const cl = require('./color')
|
8 | const cfg = require('./config')
|
9 | const log = console.log
|
10 |
|
11 | let 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 |
|
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 |
|
94 | module.exports = w
|