Added finish side and notification

This commit is contained in:
2022-06-29 22:54:44 +02:00
parent 5d53da42f9
commit a746e6aea6
7 changed files with 196 additions and 9 deletions

View File

@@ -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...");
}

View File

@@ -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/>}

View 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;

View File

@@ -4,6 +4,7 @@ import path from 'path';
import { autoUpdater } from "electron-updater";
import logger from 'electron-log';
import { Platform, platform } from './components/platform';
logger.transports.console.format = "{h}:{i}:{s} {text}";
logger.transports.file.getFile();
logger.transports.file.resolvePath = () => path.join(app.getPath('userData'), "logs", "start.log");
@@ -112,6 +113,10 @@ const createWindow = () => {
mainWindow.on('close', () => {
mainWindow.webContents.send('closeApp');
});
ipcMain.on('openApp', () => {
mainWindow.show();
});
};
// This method will be called when Electron has finished

View File

@@ -4,6 +4,7 @@ import Menu from "./components/ui/menu";
import MainSide from "./components/ui/mainSide";
import SettingsSite from "./components/ui/settingsSide";
import RenderingSide from "./components/ui/renderingSide";
import RenderFinishSide from "./components/ui/renderFinishSide";
import "./index.css";
import "./toggle-switchy.css";
import { startBlender } from "./components/blenderController";
@@ -12,7 +13,8 @@ import {ipcRenderer} from "electron";
enum Side {
Main,
Rendering,
Settings
Settings,
RenderFinish
}
let rendering = false;
@@ -31,6 +33,7 @@ function openSide(side:Side) {
{(side === Side.Main)? <MainSide/> : null}
{(side === Side.Settings)? <SettingsSite/> : null}
{(side === Side.Rendering)? <RenderingSide/> : null}
{(side === Side.RenderFinish)? <RenderFinishSide/> : null}
</React.StrictMode>
);
}