mirror of
https://github.com/LinoSchmidt/StickExporterTX.git
synced 2026-03-21 01:51:15 +01:00
220 lines
7.0 KiB
JavaScript
220 lines
7.0 KiB
JavaScript
var lastData = "Initialise..."
|
|
var frames = "0";
|
|
var lastFrame = "0";
|
|
var logCount = 0;
|
|
|
|
var fps = 25
|
|
var width = 540
|
|
var stickDistance = 5
|
|
var stickMode2 = true
|
|
var log = '"None"'
|
|
var output = "None"
|
|
|
|
const statusDisplay = document.getElementById("status");
|
|
const fpsDisplay = document.getElementById("fpsInput");
|
|
const widthDistplay = document.getElementById("widthInput");
|
|
const stickDistanceDisplay = document.getElementById("stickDistanceInput");
|
|
const stickModeDisplay = document.getElementById("stickMode");
|
|
const logDisplay = document.getElementById("log");
|
|
const outputDisplay = document.getElementById("output");
|
|
const logNumberDisplay = document.getElementById("logNumber");
|
|
|
|
const logger = require('electron-log');
|
|
const fs = require("fs");
|
|
const formatXml = require("xml-formatter");
|
|
const {dialog, app} = require("@electron/remote");
|
|
const path = require('path');
|
|
const lineReplace = require('line-replace');
|
|
|
|
const dataFolder = app.getPath('userData');
|
|
const SettingFolder = path.join(dataFolder, "settings.xml");
|
|
|
|
const blenderPath = path.join("assets", "blender", "blender");
|
|
const templatePath = path.join("assets", "template.blend");
|
|
const blenderScriptPath = path.join("assets", "blenderScript.py");
|
|
|
|
lineReplace({
|
|
file: blenderScriptPath,
|
|
line: 9,
|
|
text: 'settings = ET.parse("' + SettingFolder.replaceAll('\\', '/') + '")',
|
|
addNewLine: true,
|
|
callback: ({error}) => {
|
|
if(error != null) {
|
|
statusDisplay.innerHTML = "Something went wrong! Check Logs.";
|
|
statusDisplay.style.color = "red";
|
|
logger.error(error);
|
|
}
|
|
}
|
|
});
|
|
|
|
logger.transports.console.format = "{h}:{i}:{s} {text}";
|
|
logger.transports.file.getFile();
|
|
logger.transports.file.resolvePath = () => path.join(dataFolder, "logs", "main.log");
|
|
|
|
function startRender() {
|
|
const {exec} = require("child_process");
|
|
var blenderCons = exec('"' + blenderPath + '" "' + templatePath + '" --background --python "' + blenderScriptPath + '"', {maxBuffer: Infinity});
|
|
|
|
frames = "0";
|
|
lastFrame = "0";
|
|
statusDisplay.innerHTML = lastData = "Initialise...";
|
|
statusDisplay.style.color = "white";
|
|
logNumberDisplay.innerHTML = "Log 0/" + String(logCount);
|
|
blenderCons.stdout.on("data", (data) => {
|
|
var dataStr = String(data);
|
|
logger.info(dataStr);
|
|
|
|
if(dataStr.startsWith("Frames:")) {
|
|
frames = dataStr.split(":")[1];
|
|
} else if(dataStr.startsWith("Fra:")) {
|
|
lastFrame = dataStr.split(":")[1].split(" ")[0]
|
|
lastData = "Render Frame " + lastFrame + "/" + frames;
|
|
} else if(dataStr.startsWith("Finished")) {
|
|
if(lastFrame == frames) {
|
|
lastData = "Finished Render Successfully!"
|
|
statusDisplay.style.color = "white";
|
|
} else {
|
|
lastData = "Something went wrong! Check Logs."
|
|
statusDisplay.style.color = "red";
|
|
}
|
|
} else if(dataStr.includes("Blender quit")) {
|
|
if(lastData != "Finished Render Successfully!") {
|
|
lastData = "Something went wrong! Check Logs.";
|
|
statusDisplay.style.color = "red";
|
|
}
|
|
} else if(dataStr.startsWith("Init:")) {
|
|
lastData = "Initialize Frame " + dataStr.split(":")[1] + "/" + frames;
|
|
} else if(dataStr.startsWith("Lognr:")) {
|
|
logNumberDisplay.innerHTML = "Log " + dataStr.split(":")[1] + "/" + String(logCount);
|
|
}
|
|
|
|
if(statusDisplay.innerHTML != lastData) {
|
|
statusDisplay.innerHTML = lastData;
|
|
}
|
|
});
|
|
}
|
|
|
|
function getXMLChild(doc, child) {
|
|
return String(doc.getElementsByTagName(child)[0].childNodes[0].nodeValue);
|
|
}
|
|
|
|
function updateSettingDisplay() {
|
|
fpsDisplay.value = String(fps);
|
|
widthDistplay.value = String(width);
|
|
stickDistanceDisplay.value = String(stickDistance);
|
|
stickModeDisplay.checked = stickMode2;
|
|
logDisplay.innerHTML = "Logs:<br/>" + log.substring(1).slice(0, -1).replaceAll("\"\"", "<br/>");
|
|
outputDisplay.innerHTML = "Output Folder: " + output;
|
|
logCount = log.split("\"\"").length;
|
|
logNumberDisplay.innerHTML = "Log 0/" + String(logCount);
|
|
}
|
|
|
|
function updateSettings() {
|
|
var xmlStr = '<?xml version="1.0"?><settings><fps>' + String(fps) +
|
|
'</fps><width>' + String(width) +
|
|
'</width><stickDistance>' + String(stickDistance) +
|
|
'</stickDistance><stickMode2>' + ((stickMode2)?"true":"false") +
|
|
'</stickMode2><log>' + log +
|
|
'</log><output>' + output +
|
|
'</output></settings>';
|
|
|
|
fs.writeFile(SettingFolder, formatXml(xmlStr, {collapseContent: true}), function(err) {
|
|
if(err) {
|
|
statusDisplay.innerHTML = "Couldn't write Log! Check Logs.";
|
|
statusDisplay.style.color = "red";
|
|
logger.error(err);
|
|
}
|
|
});
|
|
}
|
|
|
|
fetch(SettingFolder).then(function(response){
|
|
return response.text();
|
|
}).then(function(data){
|
|
let parser = new DOMParser();
|
|
let xmlDoc = parser.parseFromString(data, 'text/xml');
|
|
|
|
fps = parseInt(getXMLChild(xmlDoc, "fps"));
|
|
width = parseInt(getXMLChild(xmlDoc, "width"));
|
|
stickDistance = parseInt(getXMLChild(xmlDoc, "stickDistance"));
|
|
if(getXMLChild(xmlDoc, "stickMode2") == "false") {
|
|
stickMode2 = false;
|
|
} else {
|
|
stickMode2 = true;
|
|
}
|
|
log = getXMLChild(xmlDoc, "log");
|
|
output = getXMLChild(xmlDoc, "output");
|
|
|
|
updateSettingDisplay();
|
|
}).catch(function(error) {
|
|
logger.error(error);
|
|
updateSettingDisplay();
|
|
updateSettings();
|
|
});
|
|
|
|
function openLog() {
|
|
dialog.showOpenDialog({
|
|
properties: [
|
|
"multiSelections"
|
|
],
|
|
filters: [
|
|
{
|
|
name: "TX-Logs",
|
|
extensions: [
|
|
"csv"
|
|
]
|
|
}
|
|
]
|
|
}).then(result => {
|
|
logStr = "";
|
|
result.filePaths.forEach(value => {
|
|
logStr += "\"" + String(value) + "\"";
|
|
});
|
|
log = logStr;
|
|
updateSettingDisplay();
|
|
updateSettings();
|
|
}).catch(err => {
|
|
statusDisplay.innerHTML = "Something went wrong! Check Logs.";
|
|
statusDisplay.style.color = "red";
|
|
logger.error(err);
|
|
});
|
|
}
|
|
|
|
function openVid() {
|
|
dialog.showOpenDialog({
|
|
properties: [
|
|
"openDirectory"
|
|
]
|
|
}).then(result => {
|
|
output = String(result.filePaths);
|
|
updateSettingDisplay();
|
|
updateSettings();
|
|
}).catch(err => {
|
|
statusDisplay.innerHTML = "Something went wrong! Check Logs.";
|
|
statusDisplay.style.color = "red";
|
|
logger.error(err);
|
|
});
|
|
}
|
|
|
|
function setFPS() {
|
|
fps = parseInt(fpsDisplay.value);
|
|
updateSettings();
|
|
}
|
|
|
|
function setWidth() {
|
|
width = parseInt(widthDistplay.value);
|
|
updateSettings();
|
|
}
|
|
|
|
function setStickDistance() {
|
|
stickDistance = parseInt(stickDistanceDisplay.value);
|
|
updateSettings();
|
|
}
|
|
|
|
function setStickMode() {
|
|
stickMode2 = stickModeDisplay.checked;
|
|
updateSettings();
|
|
}
|
|
|
|
function openOutputFolder() {
|
|
require("child_process").exec('start "" "' + output + '"');
|
|
} |