mirror of
https://github.com/LinoSchmidt/StickExporterTX.git
synced 2026-03-21 10:00:47 +01:00
Added finish side and notification
This commit is contained in:
@@ -6,8 +6,15 @@ import { setLogNumber, setPastTime, setRemainingTime, setRenderDisplayProgress,
|
||||
import {imageLoading, imageLoaded} from "./ui/settingsSide";
|
||||
import { getLogList, getLogSize, settingList } from "./settings";
|
||||
import isValid from "is-valid-path";
|
||||
import { sideSetRendering, setProgress } from "../renderer";
|
||||
import { sideSetRendering, setProgress, openSide, Side } from "../renderer";
|
||||
import { ipcRenderer } from "electron";
|
||||
// import { getDoNotDisturb } from "electron-notification-state";
|
||||
|
||||
export const renderInfo = {
|
||||
time: "0min 0sec",
|
||||
startTime: 0,
|
||||
endTime: 0
|
||||
}
|
||||
|
||||
const blenderStartString = [
|
||||
templatePath,
|
||||
@@ -26,8 +33,6 @@ let renderingPicture = false;
|
||||
let renderingVideo = false;
|
||||
let waitingForRender = false;
|
||||
|
||||
let renderStartTime = new Date().getTime();
|
||||
|
||||
let logPortionList:number[] = [];
|
||||
let currentLogPortion = 0;
|
||||
|
||||
@@ -43,14 +48,15 @@ function setRenderProgress(log:number, init:boolean, frameCount:number, frame:nu
|
||||
setRenderDisplayProgress(parseFloat((progress*100).toFixed(2)));
|
||||
|
||||
const timeNow = new Date().getTime();
|
||||
const timeDiff = timeNow - renderStartTime;
|
||||
const timeDiff = timeNow - renderInfo.startTime;
|
||||
let timeDiffSeconds = timeDiff / 1000;
|
||||
let timeDiffMinutes = 0;
|
||||
while(timeDiffSeconds > 60) {
|
||||
timeDiffMinutes++;
|
||||
timeDiffSeconds -= 60;
|
||||
}
|
||||
setPastTimeNow(timeDiffMinutes + "m " + timeDiffSeconds.toFixed(0) + "s");
|
||||
renderInfo.time = timeDiffMinutes + "m " + timeDiffSeconds.toFixed(0) + "s";
|
||||
setPastTimeNow(renderInfo.time);
|
||||
|
||||
if(progress > 0) {
|
||||
const timeRemaining = (timeDiff / progress) * (1 - progress);
|
||||
@@ -108,8 +114,15 @@ function startBlender() {
|
||||
}
|
||||
if(dataStr.includes("Finished") && renderingVideo) {
|
||||
sideSetRendering(false);
|
||||
renderInfo.endTime = new Date().getTime();
|
||||
if(lastFrame == frames) {
|
||||
setStatus("Finished Render Successfully!");
|
||||
openSide(Side.RenderFinish);
|
||||
// TODO: only show notification if not in do not disturb mode, currently not working. Details: https://github.com/felixrieseberg/macos-notification-state/issues/30
|
||||
new Notification("Render Finished", {
|
||||
body: "Rendering finished successfully!"
|
||||
}).onclick = function() {
|
||||
ipcRenderer.send("openApp");
|
||||
}
|
||||
} else {
|
||||
logger.errorMSG("Render Failed!");
|
||||
}
|
||||
@@ -212,7 +225,7 @@ function blender(command:blenderCmd) {
|
||||
setBlenderLoading(true);
|
||||
blenderConsole.stdin.write("startRendering\n");
|
||||
|
||||
renderStartTime = new Date().getTime();
|
||||
renderInfo.startTime = new Date().getTime();
|
||||
setPastTime("0min 0sec");
|
||||
setRemainingTime("calculating...");
|
||||
}
|
||||
|
||||
@@ -72,6 +72,7 @@ function WindowsMenu({side, blenderLoading, blenderStatus}:{side:Side, blenderLo
|
||||
{(side == Side.Main)? "StickExporterTX" : null}
|
||||
{(side == Side.Settings)? "Settings" : null}
|
||||
{(side == Side.Rendering)? "Rendering" : null}
|
||||
{(side == Side.RenderFinish)? "Render Finished" : null}
|
||||
</h4>
|
||||
<div id="blender-info-win">
|
||||
<div id="blender-icon-win">
|
||||
@@ -89,7 +90,12 @@ function WindowsMenu({side, blenderLoading, blenderStatus}:{side:Side, blenderLo
|
||||
function LinuxMenu({side, blenderLoading, blenderStatus}:{side:Side, blenderLoading:boolean, blenderStatus:string}) {
|
||||
return (
|
||||
<header id="linuxHeader">
|
||||
<h1>{(side == Side.Main)? "StickExporterTX" : "Settings"}</h1>
|
||||
<h1>
|
||||
{(side == Side.Main)? "StickExporterTX" : null}
|
||||
{(side == Side.Settings)? "Settings" : null}
|
||||
{(side == Side.Rendering)? "Rendering" : null}
|
||||
{(side == Side.RenderFinish)? "Render Finished" : null}
|
||||
</h1>
|
||||
<div id="blender-info-linux">
|
||||
<div id="blender-icon-linux">
|
||||
{blenderLoading? <BlenderLoadingSVG/> : <BlenderReadySVG/>}
|
||||
|
||||
46
src/components/ui/renderFinishSide.tsx
Normal file
46
src/components/ui/renderFinishSide.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
import React, { CSSProperties } from "react";
|
||||
import {openSide, Side} from "../../renderer";
|
||||
import {renderInfo} from "../blenderController";
|
||||
import openFolder from "../openFolder";
|
||||
import {settingList} from "../settings";
|
||||
|
||||
const detailsStyle:CSSProperties = {
|
||||
display: "flex",
|
||||
marginBottom: "10px",
|
||||
}
|
||||
const detailsInnerStyle:CSSProperties = {
|
||||
margin: "0px",
|
||||
marginRight: "5px",
|
||||
}
|
||||
|
||||
function RenderFinishSide() {
|
||||
return (
|
||||
<div id="content">
|
||||
<h3 style={{
|
||||
color: "#00c24a",
|
||||
}}>Render finished Successfully!</h3>
|
||||
<div style={detailsStyle}>
|
||||
<h4 style={detailsInnerStyle}>Duration:</h4>
|
||||
<p style={detailsInnerStyle}>{renderInfo.time}</p>
|
||||
</div>
|
||||
<div style={detailsStyle}>
|
||||
<h4 style={detailsInnerStyle}>Start Time:</h4>
|
||||
<p style={detailsInnerStyle}>{new Date(renderInfo.startTime).toLocaleString().replace(",", "")}</p>
|
||||
</div>
|
||||
<div style={detailsStyle}>
|
||||
<h4 style={detailsInnerStyle}>End Time:</h4>
|
||||
<p style={detailsInnerStyle}>{new Date(renderInfo.endTime).toLocaleString().replace(",", "")}</p>
|
||||
</div>
|
||||
<button style={{
|
||||
marginTop: "10px",
|
||||
marginRight: "10px",
|
||||
backgroundColor: "#00c24a",
|
||||
}} onClick={() => {
|
||||
openSide(Side.Main);
|
||||
}}>Finish</button>
|
||||
<button onClick={() => openFolder(settingList.output)}>Open Output Folder</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default RenderFinishSide;
|
||||
Reference in New Issue
Block a user