Commit 46a685a2 authored by 神楽坂玲奈's avatar 神楽坂玲奈

deck edit

parent a349dda6
......@@ -9,6 +9,7 @@ declare var process;
declare var System;
const fs = System._nodeRequire('fs');
const path = System._nodeRequire('path');
const child_process = System._nodeRequire('child_process');
//const Promise = System._nodeRequire('bluebird');
const ini = System._nodeRequire('ini');
......@@ -23,8 +24,8 @@ export class YGOProComponent {
current_deck;
system_conf = path.join(this.app.local.path, 'system.conf');
numfont = this.get_font({'darwin': ['/System/Library/Fonts/PingFang.ttc']});
textfont = this.get_font({'darwin': ['/System/Library/Fonts/PingFang.ttc']});
numfont = {'darwin': ['/System/Library/Fonts/PingFang.ttc']};
textfont = {'darwin': ['/System/Library/Fonts/PingFang.ttc']};
constructor(private appsService: AppsService, private routingService: RoutingService) {
this.refresh()
......@@ -39,18 +40,6 @@ export class YGOProComponent {
})
}
get_font(data) {
return new Promise((resolve, reject)=> {
let fonts = data[process.platform]
})
}
fix_fonts(ini) {
return new Promise((resolve, reject)=>{
this.numfont.then()
})
}
get_decks(): Promise<[string]> {
return new Promise((resolve, reject)=> {
fs.readdir(path.join(this.app.local.path, 'deck'), (error, files)=> {
......@@ -63,10 +52,69 @@ export class YGOProComponent {
})
}
get_font(files: string[]) {
return new Promise((resolve, reject)=> {
files.reduce((promise, file: string) => {
return promise.then(()=>file).then(()=>new Promise((resolve, reject)=> {
fs.access(file, fs.constants.R_OK, (error) => {
error ? resolve(`can't find fonts ${files[process.platform]}`) : reject(file)
});
}));
}, Promise.resolve()).then(reject, resolve);
})
}
edit_deck(deck) {
fs.readFile(this.system_conf, {encoding: 'utf-8'}, (error, data) => {
if (error) throw error;
console.log(ini.parse(data));
});
this.load_system_conf()
.then(this.fix_fonts)
.then(data => {
data['lastdeck'] = deck;
return data
})
.then(this.save_system_conf)
.then(()=>['-d'])
.then(this.start_game)
.catch(reason=>console.log(reason))
}
fix_fonts = (data) => {
return this.get_font([data.numfont])
.catch(() => this.get_font(this.numfont[process.platform]).then(font => data['numfont'] = font))
.catch()
.then(() => this.get_font([data.textfont.split(' ', 2)[0]]))
.catch(() => this.get_font(this.textfont[process.platform]).then(font => data['textfont'] = `${font} 14`))
.catch()
.then(() => data)
};
load_system_conf = () => {
return new Promise((resolve, reject)=> {
fs.readFile(this.system_conf, {encoding: 'utf-8'}, (error, data) => {
if (error) return reject(error);
resolve(ini.parse(data));
});
})
};
save_system_conf = (data) => {
return new Promise((resolve, reject)=> {
fs.writeFile(this.system_conf, ini.stringify(data, {whitespace: true}), (error) => {
if (error) return reject(error);
resolve(data);
});
})
};
start_game = (args) => {
return new Promise((resolve, reject)=> {
let child = child_process.spawn(path.join(this.app.local.path, this.app.actions[process.platform]['main']['execute']), args, {cwd: this.app.local.path});
child.on('error', (error)=> {
reject(error)
});
child.on('exit', (code, signal)=> {
// error 触发之后还可能会触发exit,但是Promise只承认首次状态转移,因此这里无需重复判断是否已经error过。
resolve(code)
})
})
};
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment