-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.js
98 lines (86 loc) · 3.27 KB
/
extension.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
98
// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
const vscode = require('vscode');
const fs = require('fs');
const os = require('os');
var exec = require('child_process').exec;
// this method is called when your extension is activated
// your extension is activated the very first time the command is executed
/**
* @param {vscode.ExtensionContext} context
*/
function activate(context) {
// Use the console to output diagnostic information (console.log) and errors (console.error)
// This line of code will only be executed once when your extension is activated
console.log('Congratulations, your extension "tickflow-vscode" is now active!');
// The command has been defined in the package.json file
// Now provide the implementation of the command with registerCommand
// The commandId parameter must match the command field in package.json
let disposable = vscode.commands.registerCommand('tickflow.citraBuild', function () {
let config = vscode.workspace.getConfiguration('tickflow');
let tickompiler = config.get("tickompilerPath")
let base = config.get("basebinPath")
let javaVer = config.get("java16")
let current = vscode.workspace.workspaceFolders[0].uri.path
let file = vscode.window.activeTextEditor.document.fileName
let delimiter = ""
let citra = config.get("citraFolder") //Special case for Citra, which uses a Windows var by default
if(os.platform() == "win32"){
citra = citra.replace('%appdata%', os.homedir+"\\appdata\\roaming")
current = current.split('/').join('\\').replace('\\','')//I hate filepaths
delimiter = "\\"
}
else if(os.platform() == "linux"){
citra = citra.replace('%appdata%', os.homedir)
delimiter = "/"
}
fs.access(tickompiler, fs.constants.F_OK, (err)=>{
if(err != null)
vscode.window.showErrorMessage("Tickompiler not found!")
})
fs.access(base, fs.constants.F_OK, (err)=>{
if(err != null)
vscode.window.showErrorMessage("base.bin not found!")
})
fs.access(citra, fs.constants.F_OK, (err)=>{
if(err != null)
vscode.window.showErrorMessage("Citra's folder does not exist!")
})
// //We can execute the code now
let java =""
if(javaVer)
java = "java --add-opens java.base/java.lang=ALL-UNNAMED -jar "
else
java = "java -jar "
let bin = '"'+current+delimiter+'bin'+delimiter+'"'
let command = java+tickompiler+' c "'+file+'" "'+bin;
exec(command,
function (error, stdout, stderr) {
vscode.window.showInformationMessage(command);
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
vscode.window.showErrorMessage("Couldn't compile!")
console.log(error);
}
});
command = java+tickompiler+' p '+bin+' '+base+' '+citra+delimiter+'sdmc'+delimiter+'rhmm'+delimiter+'C00.bin"'
exec(command,
function (error, stdout, stderr) {
vscode.window.showInformationMessage(command);
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
vscode.window.showErrorMessage("Couldn't compile!")
console.log(error);
}
});
});
context.subscriptions.push(disposable);
}
// this method is called when your extension is deactivated
function deactivate() {}
module.exports = {
activate,
deactivate
}