From b48e182cdb3815c936714cf7354a84229c908fde Mon Sep 17 00:00:00 2001 From: ali asaria <aliasaria@users.noreply.github.com> Date: Thu, 15 Aug 2024 15:07:18 -0400 Subject: [PATCH] I think I have both sides synchronized well --- src/main/main.ts | 16 ++++--- src/renderer/components/Connect/LogViewer.tsx | 44 ++++++++++++++----- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/main/main.ts b/src/main/main.ts index 662517f3..af726e4d 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -137,20 +137,23 @@ const startListeningToServerLog = async () => { const logFile = path.join(server_dir, 'local_server.log'); let tail = new Tail(logFile); - let currentlyWatching = false; + let currentlySubscribed = false; ipcMain.on('serverLog:startListening', async (event) => { + console.log('main.js: start listening'); event.reply('serverLog:update', '**starting to listen to the log**'); console.log('logFile', logFile); - if (currentlyWatching) { + console.log(tail); + + if (currentlySubscribed) { console.log('already watching'); return; } - currentlyWatching = true; - tail.watch(); + currentlySubscribed = true; + // tail.watch(); tail.on('line', function (data) { // console.log(data); @@ -163,9 +166,10 @@ const startListeningToServerLog = async () => { }); ipcMain.on('serverLog:stopListening', async (event) => { - console.log('stopping listening'); + console.log('main.js: stopping listening'); + event.reply('serverLog:update', '**Stopping listening to the log**'); tail.unwatch(); - currentlyWatching = false; + currentlySubscribed = false; }); }; diff --git a/src/renderer/components/Connect/LogViewer.tsx b/src/renderer/components/Connect/LogViewer.tsx index 4f056e85..c0885d1b 100644 --- a/src/renderer/components/Connect/LogViewer.tsx +++ b/src/renderer/components/Connect/LogViewer.tsx @@ -1,19 +1,40 @@ import { Sheet } from '@mui/joy'; -import React, { useState, useEffect } from 'react'; +import { useEffect, useRef } from 'react'; + +import 'xterm/css/xterm.css'; +import { Terminal } from 'xterm'; +import { FitAddon } from 'xterm-addon-fit'; + +export default function LogViewer({}) { + const terminalRef = useRef(null); + + let term: Terminal | null = null; -const BlankPage: React.FC = () => { useEffect(() => { async function fetchData() { - await window.electron.ipcRenderer.sendMessage('serverLog:startListening'); + setTimeout(() => { + window.electron.ipcRenderer.sendMessage('serverLog:startListening'); + }, 1500); window.electron.ipcRenderer.removeAllListeners('serverLog:onUpdate'); window.electron.ipcRenderer.on('serverLog:update', (data: any) => { // append data to the log-viewer div - const logViewer = document.getElementById('log-viewer'); - if (logViewer) { - logViewer.innerHTML += `${data}\n`; + if (term != null) { + term.writeln(`${data}`); } }); } + + if (term != null) { + term.dispose; + } else { + term = new Terminal(); + const fitAddon = new FitAddon(); + term.loadAddon(fitAddon); + + term.open(terminalRef.current); + fitAddon.fit(); + } + fetchData(); return () => { @@ -22,6 +43,7 @@ const BlankPage: React.FC = () => { window.electron.ipcRenderer.removeAllListeners( 'serverLog:startListening' ); + window.electron.ipcRenderer.removeAllListeners('serverLog:onUpdate'); }; }, []); @@ -30,13 +52,11 @@ const BlankPage: React.FC = () => { sx={{ height: '100%', overflow: 'auto', - backgroundColor: '#222', - color: 'white', + // backgroundColor: '#222', + // color: 'white', }} - > - <pre id="log-viewer" style={{ whiteSpace: 'pre-wrap' }}></pre> - </Sheet> + ref={terminalRef} + ></Sheet> ); }; -export default BlankPage; -- GitLab