Added extra file for progress

This commit is contained in:
2023-04-13 11:51:26 +02:00
parent 05d195f9d1
commit d90c811e83
4 changed files with 100 additions and 73 deletions

View File

@@ -2,21 +2,16 @@ import { blenderPath, blenderScriptPath, templatePath, finsishedIconPath, dataPa
import {spawn} from "child_process"; import {spawn} from "child_process";
import logger from "./logger"; import logger from "./logger";
import { setBlenderLoading, setBlenderStatus } from "./ui/menu"; import { setBlenderLoading, setBlenderStatus } from "./ui/menu";
import { setLogNumber, setPastTime, setRemainingTime, setRenderDisplayProgress, setStatus, setPastTimeNow, setRemainingTimeNow, addTerminalLine } from "./ui/renderingPage"; import { setLogNumber, setStatus, addTerminalLine } from "./ui/renderingPage";
import {imageLoading, imageLoaded} from "./ui/settingsPage"; import {imageLoading, imageLoaded} from "./ui/settingsPage";
import { getLogSize, getInOutSettings, getActiveProfile } from "./settings"; import { getInOutSettings, getActiveProfile } from "./settings";
import { pageSetRendering, setProgress, openPage, Page } from "../renderer"; import { pageSetRendering, setProgress, openPage, Page } from "../renderer";
import { setLog, setRenderProgress, startProgress, stopProgress } from "./progressController";
import { ipcRenderer } from "electron"; import { ipcRenderer } from "electron";
import path from 'path'; import path from 'path';
import fs from "fs"; import fs from "fs";
// import { getDoNotDisturb } from "electron-notification-state"; // import { getDoNotDisturb } from "electron-notification-state";
export const renderInfo = {
time: "0min 0sec",
startTime: 0,
endTime: 0
}
const blenderStartString = [ const blenderStartString = [
templatePath, templatePath,
"--background", "--background",
@@ -32,43 +27,6 @@ let renderingPicture = false;
let renderingVideo = false; let renderingVideo = false;
let waitingForRender = false; let waitingForRender = false;
let logPortionList:number[] = [];
let currentLogPortion = 0;
const estimatedRenderPortion = 0.97;
function setRenderProgress(log:number, init:boolean, frameCount:number, frame:number) {
let progress = 0;
if(init) {
progress = logPortionList[log-1] * (frame / frameCount * (1 - estimatedRenderPortion)) + currentLogPortion;
} else {
progress = logPortionList[log-1] * (frame / frameCount * estimatedRenderPortion + (1 - estimatedRenderPortion)) + currentLogPortion;
}
setProgress(progress);
setRenderDisplayProgress(parseFloat((progress*100).toFixed(2)));
const timeNow = new Date().getTime();
const timeDiff = timeNow - renderInfo.startTime;
let timeDiffSeconds = timeDiff / 1000;
let timeDiffMinutes = 0;
while(timeDiffSeconds > 60) {
timeDiffMinutes++;
timeDiffSeconds -= 60;
}
renderInfo.time = timeDiffMinutes + "m " + timeDiffSeconds.toFixed(0) + "s";
setPastTimeNow(renderInfo.time);
if(progress > 0) {
const timeRemaining = (timeDiff / progress) * (1 - progress);
timeDiffSeconds = timeRemaining / 1000;
timeDiffMinutes = 0;
while(timeDiffSeconds > 60) {
timeDiffMinutes++;
timeDiffSeconds -= 60;
}
setRemainingTimeNow(timeDiffMinutes + "m " + timeDiffSeconds.toFixed(0) + "s");
}
}
function getOutPath(log:string) { function getOutPath(log:string) {
let fullOutPath = path.join(getInOutSettings().output, log.substring(log.lastIndexOf("\\")).replace(".csv", "."+getActiveProfile().videoFormat)); let fullOutPath = path.join(getInOutSettings().output, log.substring(log.lastIndexOf("\\")).replace(".csv", "."+getActiveProfile().videoFormat));
@@ -153,7 +111,7 @@ function startBlender() {
} }
if(dataStr.includes("Finished") && renderingVideo) { if(dataStr.includes("Finished") && renderingVideo) {
pageSetRendering(false); pageSetRendering(false);
renderInfo.endTime = new Date().getTime(); stopProgress();
if(lastFrame == frames) { if(lastFrame == frames) {
openPage(Page.RenderFinish); openPage(Page.RenderFinish);
ipcRenderer.send("renderFinished"); ipcRenderer.send("renderFinished");
@@ -175,7 +133,7 @@ function startBlender() {
if(dataStr.includes("Lognr:") && renderingVideo) { if(dataStr.includes("Lognr:") && renderingVideo) {
log = dataStr.split(":")[1]; log = dataStr.split(":")[1];
if(log !== "1") { if(log !== "1") {
currentLogPortion += logPortionList[parseInt(log)-2]; setLog(parseInt(log));
} }
setLogNumber(log); setLogNumber(log);
} }
@@ -240,23 +198,6 @@ function blender(command:blenderCmd) {
if(getInOutSettings().logs.length === 0) { if(getInOutSettings().logs.length === 0) {
logger.warningMSG("No log selected!"); logger.warningMSG("No log selected!");
} else { } else {
currentLogPortion = 0;
const logSizeList:number[] = [];
getInOutSettings().logs.forEach(function (value, index) {
logSizeList.push(getLogSize(index));
});
let fullLogSize = 0;
for(let i = 0; i < logSizeList.length; i++) {
fullLogSize += logSizeList[i];
}
logPortionList = [];
logSizeList.forEach(function (value) {
logPortionList.push(value / fullLogSize);
});
readyToAcceptCommand = false; readyToAcceptCommand = false;
renderingVideo = true; renderingVideo = true;
pageSetRendering(true); pageSetRendering(true);
@@ -264,9 +205,7 @@ function blender(command:blenderCmd) {
setBlenderLoading(true); setBlenderLoading(true);
blenderConsole.stdin.write("startRendering -- "+blenderArgs()+"\n"); blenderConsole.stdin.write("startRendering -- "+blenderArgs()+"\n");
renderInfo.startTime = new Date().getTime(); startProgress();
setPastTime("0min 0sec");
setRemainingTime("calculating...");
} }
} }
} else if(command === blenderCmd.stopRendering) { } else if(command === blenderCmd.stopRendering) {

View File

@@ -0,0 +1,92 @@
import {setProgress} from "../renderer";
import {getLogSize} from "./logReader";
import {getInOutSettings} from "./settings";
import { setRenderDisplayProgress, setPastTimeNow, setRemainingTimeNow } from "./ui/renderingPage";
const estimatedRenderPortion = 0.97;
const renderInfo = {
time: "0min 0sec",
startTime: 0,
endTime: 0
}
let logPortionList:number[] = [];
let currentLogPortion = 0;
function setRenderProgress(log:number, init:boolean, frameCount:number, frame:number) {
let progress = 0;
if(init) {
progress = logPortionList[log-1] * (frame / frameCount * (1 - estimatedRenderPortion)) + currentLogPortion;
} else {
progress = logPortionList[log-1] * (frame / frameCount * estimatedRenderPortion + (1 - estimatedRenderPortion)) + currentLogPortion;
}
setProgress(progress);
setRenderDisplayProgress(parseFloat((progress*100).toFixed(2)));
const timeNow = new Date().getTime();
const timeDiff = timeNow - renderInfo.startTime;
let timeDiffSeconds = timeDiff / 1000;
let timeDiffMinutes = 0;
while(timeDiffSeconds > 60) {
timeDiffMinutes++;
timeDiffSeconds -= 60;
}
renderInfo.time = timeDiffMinutes + "m " + timeDiffSeconds.toFixed(0) + "s";
setPastTimeNow(renderInfo.time);
if(progress > 0) {
const timeRemaining = (timeDiff / progress) * (1 - progress);
timeDiffSeconds = timeRemaining / 1000;
timeDiffMinutes = 0;
while(timeDiffSeconds > 60) {
timeDiffMinutes++;
timeDiffSeconds -= 60;
}
setRemainingTimeNow(timeDiffMinutes + "m " + timeDiffSeconds.toFixed(0) + "s");
}
}
function resetRenderProgress() {
logPortionList = [];
currentLogPortion = 0;
const logSizeList:number[] = [];
getInOutSettings().logs.forEach(function (value, index) {
logSizeList.push(getLogSize(index));
});
let fullLogSize = 0;
for(let i = 0; i < logSizeList.length; i++) {
fullLogSize += logSizeList[i];
}
logSizeList.forEach(function (value) {
logPortionList.push(value / fullLogSize);
});
setPastTimeNow("0min 0sec");
setRemainingTimeNow("calculating...");
}
function setLog(log:number) {
currentLogPortion += logPortionList[log-2];
}
function stopProgress() {
renderInfo.endTime = new Date().getTime();
}
function startProgress() {
renderInfo.startTime = new Date().getTime();
resetRenderProgress();
}
export {
setRenderProgress,
resetRenderProgress,
setLog,
stopProgress,
startProgress,
renderInfo
}

View File

@@ -362,10 +362,6 @@ function getActiveProfile() {
return activeProfile; return activeProfile;
} }
function getLogSize(index:number) {
return fs.statSync(settingList.logs[index]).size;
}
function importProfile(importSucces:CallableFunction) { function importProfile(importSucces:CallableFunction) {
dialog.showOpenDialog({ dialog.showOpenDialog({
properties: [ properties: [
@@ -478,7 +474,6 @@ export {
getInOutSettings, getInOutSettings,
setShowRenderTerminal, setShowRenderTerminal,
getShowRenderTerminal, getShowRenderTerminal,
getLogSize,
importProfile, importProfile,
exportProfile, exportProfile,
VideoFormat VideoFormat

View File

@@ -1,12 +1,13 @@
import React, { CSSProperties } from "react"; import React, { CSSProperties } from "react";
import {openPage, Page} from "../../renderer"; import {openPage, Page} from "../../renderer";
import {renderInfo, outputArgs} from "../blenderController"; import {outputArgs} from "../blenderController";
import openFolder from "../openFolder"; import openFolder from "../openFolder";
import {getInOutSettings, getActiveProfile} from "../settings"; import {getInOutSettings, getActiveProfile} from "../settings";
import VideoPlayer from "./videoPlayer"; import VideoPlayer from "./videoPlayer";
import path from 'path'; import path from 'path';
import {VideoJsPlayerOptions} from "video.js"; import {VideoJsPlayerOptions} from "video.js";
import {logList} from "../logReader"; import {logList} from "../logReader";
import {renderInfo} from "../progressController";
const detailsStyle:CSSProperties = { const detailsStyle:CSSProperties = {
display: "flex", display: "flex",