1 | const path = require('path')
|
2 | const fs = require('fs')
|
3 | const mk = require('mkdirp')
|
4 |
|
5 | const win = process.platform === 'win32'
|
6 | const env = process.env
|
7 | const log = console.log
|
8 |
|
9 | let cfg = {
|
10 | $anyway: 0,
|
11 | getPath(cat) {
|
12 | let pac = path.join(win ? env.APPDATA : env.HOME, win ? 'wowa' : '.wowa')
|
13 | let pag
|
14 |
|
15 | if (env.TEST_WOWA) pac = path.join(path.dirname(pac), '.test_wowa')
|
16 |
|
17 | let pathFile = path.join(pac, 'wow_path.txt')
|
18 | if (fs.existsSync(pathFile)) pag = fs.readFileSync(pathFile, 'utf-8').trim()
|
19 | else {
|
20 | if (env.TEST_WOWA) pag = path.join(pac, '.test/_retail_')
|
21 | else
|
22 | pag = path.join(
|
23 | win ? 'C:\\Program Files' : '/Applications',
|
24 | 'World of Warcraft',
|
25 | '_retail_'
|
26 | )
|
27 |
|
28 | mk(pac, err => {
|
29 | fs.writeFileSync(pathFile, pag, 'utf-8')
|
30 | })
|
31 | }
|
32 |
|
33 | let mode = path.basename(pag)
|
34 | let paths = {
|
35 | addon: path.join(pag, 'Interface', 'AddOns'),
|
36 | wtf: path.join(pag, 'WTF'),
|
37 | wowaads: path.join(pag, 'WTF', 'wowaads.json'),
|
38 | pathfile: pathFile,
|
39 | tmp: pac,
|
40 | mode: mode,
|
41 | db: path.join(pac, '.db'),
|
42 | update: path.join(pac, '.update'),
|
43 | game: pag
|
44 | }
|
45 |
|
46 | return cat in paths ? paths[cat] : pag
|
47 | },
|
48 |
|
49 | checkPath() {
|
50 | let wow = cfg.getPath()
|
51 | let e = fs.existsSync(wow)
|
52 |
|
53 |
|
54 | if (!e) {
|
55 | log(
|
56 | '\nWoW folder not found, you can specify it by editing the file below:'
|
57 | )
|
58 | log('\n ' + cfg.getPath('pathfile') + '\n')
|
59 | }
|
60 |
|
61 | return e
|
62 | },
|
63 |
|
64 | getMode(ver) {
|
65 | let tail = path.basename(cfg.getPath())
|
66 |
|
67 | return ver
|
68 | ? tail.match(/ptr/)
|
69 | ? '[PTR]'
|
70 | : tail.match(/beta/)
|
71 | ? '[BETA]'
|
72 | : ''
|
73 | : tail.match(/classic/)
|
74 | ? '_classic_'
|
75 | : '_retail_'
|
76 | },
|
77 |
|
78 | testMode(mode) {
|
79 | let m = cfg.getMode()
|
80 |
|
81 | return typeof mode === 'number'
|
82 | ? mode & (m === '_retail_' ? 1 : 2)
|
83 | : m === mode
|
84 | },
|
85 |
|
86 | setModePath(mp) {
|
87 | let p = path.join(path.dirname(cfg.getPath('game')), mp)
|
88 |
|
89 | if (fs.existsSync(p)) fs.writeFileSync(cfg.getPath('pathfile'), p, 'utf-8')
|
90 | else
|
91 | log(
|
92 | '\nMode folder does not exist, you must run the game in that mode for at least one time before using wowa'
|
93 | )
|
94 | },
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 |
|
110 |
|
111 | anyway(en) {
|
112 | if (!en) return cfg.$anyway
|
113 | cfg.$anyway = en
|
114 | }
|
115 | }
|
116 |
|
117 | module.exports = cfg
|