mirror of
https://github.com/LinoSchmidt/StickExporterTX.git
synced 2026-03-21 01:51:15 +01:00
Added extra file for progress
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
92
src/components/progressController.ts
Normal file
92
src/components/progressController.ts
Normal 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
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user