mirror of
https://github.com/LinoSchmidt/StickExporterTX.git
synced 2026-03-21 01:51:15 +01:00
Added render Terminal
This commit is contained in:
@@ -2,7 +2,7 @@ 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 } from "./ui/renderingPage";
|
import { setLogNumber, setPastTime, setRemainingTime, setRenderDisplayProgress, setStatus, setPastTimeNow, setRemainingTimeNow, addTerminalLine } from "./ui/renderingPage";
|
||||||
import {imageLoading, imageLoaded} from "./ui/settingsPage";
|
import {imageLoading, imageLoaded} from "./ui/settingsPage";
|
||||||
import { getLogSize, getInOutSettings, getActiveProfile } from "./settings";
|
import { getLogSize, getInOutSettings, getActiveProfile } from "./settings";
|
||||||
import { pageSetRendering, setProgress, openPage, Page } from "../renderer";
|
import { pageSetRendering, setProgress, openPage, Page } from "../renderer";
|
||||||
@@ -115,6 +115,10 @@ function startBlender() {
|
|||||||
|
|
||||||
logger.info("Blender: " + dataStr);
|
logger.info("Blender: " + dataStr);
|
||||||
|
|
||||||
|
if(renderingVideo) {
|
||||||
|
addTerminalLine(dataStr);
|
||||||
|
}
|
||||||
|
|
||||||
if (dataStr.includes("Blender started successfully")) {
|
if (dataStr.includes("Blender started successfully")) {
|
||||||
renderingPicture = false;
|
renderingPicture = false;
|
||||||
renderingVideo = false;
|
renderingVideo = false;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, {useEffect, useState} from "react";
|
import React, {useEffect, useRef, useState} from "react";
|
||||||
import {getInOutSettings} from "../settings";
|
import {getInOutSettings} from "../settings";
|
||||||
import openFolder from "../openFolder";
|
import openFolder from "../openFolder";
|
||||||
import { blenderCmd, blender } from "../blenderController";
|
import { blenderCmd, blender } from "../blenderController";
|
||||||
@@ -8,11 +8,15 @@ let setStatus:React.Dispatch<React.SetStateAction<string>>;
|
|||||||
let setRenderDisplayProgress:React.Dispatch<React.SetStateAction<number>>;
|
let setRenderDisplayProgress:React.Dispatch<React.SetStateAction<number>>;
|
||||||
let setPastTime:React.Dispatch<React.SetStateAction<string>>;
|
let setPastTime:React.Dispatch<React.SetStateAction<string>>;
|
||||||
let setRemainingTime:React.Dispatch<React.SetStateAction<string>>;
|
let setRemainingTime:React.Dispatch<React.SetStateAction<string>>;
|
||||||
|
let setTerminalLines:React.Dispatch<React.SetStateAction<JSX.Element[]>>;
|
||||||
|
|
||||||
let pastTimeNow = "0m 0s";
|
let pastTimeNow = "0m 0s";
|
||||||
let remainingTimeNow = "calculating...";
|
let remainingTimeNow = "calculating...";
|
||||||
|
|
||||||
function RenderingPage() {
|
function RenderingPage() {
|
||||||
|
const [terminalHidden, setTerminalHidden] = useState("none");
|
||||||
|
const [terminalScroll, setTerminalScroll] = useState(true);
|
||||||
|
const [scrollButtonText, setScrollButtonText] = useState("pause scroll");
|
||||||
const [logNumber, setLogNumberInner] = useState("0");
|
const [logNumber, setLogNumberInner] = useState("0");
|
||||||
setLogNumber = setLogNumberInner;
|
setLogNumber = setLogNumberInner;
|
||||||
const [status, setStatusInner] = useState("Idle");
|
const [status, setStatusInner] = useState("Idle");
|
||||||
@@ -23,6 +27,24 @@ function RenderingPage() {
|
|||||||
setPastTime = setPastTimeInner;
|
setPastTime = setPastTimeInner;
|
||||||
const [remainingTime, setRemainingTimeInner] = useState("calculating...");
|
const [remainingTime, setRemainingTimeInner] = useState("calculating...");
|
||||||
setRemainingTime = setRemainingTimeInner;
|
setRemainingTime = setRemainingTimeInner;
|
||||||
|
const [terminalLines, setTerminalLinesInner] = useState([
|
||||||
|
<tr key={0}>
|
||||||
|
<td className="terminalTableNumber">0:</td>
|
||||||
|
<td>==== Start ====</td>
|
||||||
|
</tr>
|
||||||
|
]);
|
||||||
|
setTerminalLines = setTerminalLinesInner;
|
||||||
|
|
||||||
|
const messagesEndRef = useRef() as React.MutableRefObject<HTMLDivElement>;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(terminalScroll) {
|
||||||
|
messagesEndRef.current?.scrollIntoView();
|
||||||
|
setScrollButtonText("pause scroll");
|
||||||
|
} else {
|
||||||
|
setScrollButtonText("continue scroll");
|
||||||
|
}
|
||||||
|
}, [terminalLines, messagesEndRef, terminalScroll]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const interval = setInterval(() => {
|
const interval = setInterval(() => {
|
||||||
@@ -70,6 +92,24 @@ function RenderingPage() {
|
|||||||
</div>
|
</div>
|
||||||
<button id="stopRenderButton" onClick={() => blender(blenderCmd.stopRendering)}>Stop</button>
|
<button id="stopRenderButton" onClick={() => blender(blenderCmd.stopRendering)}>Stop</button>
|
||||||
<button onClick={() => openFolder(getInOutSettings().output)}>Open Output Folder</button>
|
<button onClick={() => openFolder(getInOutSettings().output)}>Open Output Folder</button>
|
||||||
|
<button onClick={() => {
|
||||||
|
if (terminalHidden === "none") {
|
||||||
|
setTerminalHidden("block");
|
||||||
|
} else {
|
||||||
|
setTerminalHidden("none");
|
||||||
|
}
|
||||||
|
}} style={{marginLeft:"10px"}}>Details</button>
|
||||||
|
<div style={{display: terminalHidden}}>
|
||||||
|
<div id="outerTerminal">
|
||||||
|
<div id="innerTerminal">
|
||||||
|
<table id="terminalTable">
|
||||||
|
{terminalLines}
|
||||||
|
</table>
|
||||||
|
<div ref={messagesEndRef}/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button style={{padding:"4px"}} onClick={() => setTerminalScroll(!terminalScroll)}>{scrollButtonText}</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -82,6 +122,17 @@ function setRemainingTimeNow(time:string) {
|
|||||||
remainingTimeNow = time;
|
remainingTimeNow = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addTerminalLine(line:string) {
|
||||||
|
setTerminalLines((prev:JSX.Element[]) => {
|
||||||
|
return [...prev,
|
||||||
|
<tr key={prev.length}>
|
||||||
|
<td className="terminalTableNumber">{prev.length}:</td>
|
||||||
|
<td>{line}</td>
|
||||||
|
</tr>
|
||||||
|
];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export default RenderingPage;
|
export default RenderingPage;
|
||||||
export {
|
export {
|
||||||
setLogNumber,
|
setLogNumber,
|
||||||
@@ -90,5 +141,6 @@ export {
|
|||||||
setPastTime,
|
setPastTime,
|
||||||
setRemainingTime,
|
setRemainingTime,
|
||||||
setPastTimeNow,
|
setPastTimeNow,
|
||||||
setRemainingTimeNow
|
setRemainingTimeNow,
|
||||||
|
addTerminalLine
|
||||||
};
|
};
|
||||||
@@ -451,3 +451,34 @@ button:hover {
|
|||||||
#videoFormatWarning:hover {
|
#videoFormatWarning:hover {
|
||||||
transform: scale(1.05);
|
transform: scale(1.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#outerTerminal {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
width: 100%;
|
||||||
|
height: 300px;
|
||||||
|
background-color: #0d131e;
|
||||||
|
color: white;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
#outerTerminal p {
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#innerTerminal {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#terminalTable tr {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.terminalTableNumber {
|
||||||
|
color: #9DA8B9;
|
||||||
|
background-color: #172336;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user