switch from 'main' to 'term' for main terminal blockfile

This commit is contained in:
sawka 2024-08-12 15:53:34 -07:00
parent c4a0e85d32
commit f464223aab
3 changed files with 18 additions and 16 deletions

View File

@ -13,6 +13,9 @@ import { Terminal } from "@xterm/xterm";
import { debounce } from "throttle-debounce"; import { debounce } from "throttle-debounce";
import { FitAddon } from "./fitaddon"; import { FitAddon } from "./fitaddon";
const TermFileName = "term";
const TermCacheFileName = "cache:term:full";
// detect webgl support // detect webgl support
function detectWebGLSupport(): boolean { function detectWebGLSupport(): boolean {
try { try {
@ -105,7 +108,7 @@ export class TermWrap {
async initTerminal() { async initTerminal() {
this.connectElem.addEventListener("keydown", this.keydownHandler, true); this.connectElem.addEventListener("keydown", this.keydownHandler, true);
this.terminal.onData(this.handleTermData.bind(this)); this.terminal.onData(this.handleTermData.bind(this));
this.mainFileSubject = getFileSubject(this.blockId, "main"); this.mainFileSubject = getFileSubject(this.blockId, TermFileName);
this.mainFileSubject.subscribe(this.handleNewFileSubjectData.bind(this)); this.mainFileSubject.subscribe(this.handleNewFileSubjectData.bind(this));
try { try {
await this.loadInitialTerminalData(); await this.loadInitialTerminalData();
@ -169,7 +172,7 @@ export class TermWrap {
async loadInitialTerminalData(): Promise<void> { async loadInitialTerminalData(): Promise<void> {
let startTs = Date.now(); let startTs = Date.now();
const { data: cacheData, fileInfo: cacheFile } = await fetchWaveFile(this.blockId, "cache:term:full"); const { data: cacheData, fileInfo: cacheFile } = await fetchWaveFile(this.blockId, TermCacheFileName);
let ptyOffset = 0; let ptyOffset = 0;
if (cacheFile != null) { if (cacheFile != null) {
ptyOffset = cacheFile.meta["ptyoffset"] ?? 0; ptyOffset = cacheFile.meta["ptyoffset"] ?? 0;
@ -177,7 +180,7 @@ export class TermWrap {
this.doTerminalWrite(cacheData, ptyOffset); this.doTerminalWrite(cacheData, ptyOffset);
} }
} }
const { data: mainData, fileInfo: mainFile } = await fetchWaveFile(this.blockId, "main", ptyOffset); const { data: mainData, fileInfo: mainFile } = await fetchWaveFile(this.blockId, TermFileName, ptyOffset);
console.log( console.log(
`terminal loaded cachefile:${cacheData?.byteLength ?? 0} main:${mainData?.byteLength ?? 0} bytes, ${Date.now() - startTs}ms` `terminal loaded cachefile:${cacheData?.byteLength ?? 0} main:${mainData?.byteLength ?? 0} bytes, ${Date.now() - startTs}ms`
); );

View File

@ -36,7 +36,7 @@ const (
) )
const ( const (
BlockFile_Main = "main" // used for main pty output BlockFile_Term = "term" // used for main pty output
BlockFile_Html = "html" // used for alt html layout BlockFile_Html = "html" // used for alt html layout
) )
@ -188,9 +188,9 @@ func (bc *BlockController) resetTerminalState() {
shouldTruncate = blockData.Meta.GetBool(wstore.MetaKey_CmdClearOnRestart, false) shouldTruncate = blockData.Meta.GetBool(wstore.MetaKey_CmdClearOnRestart, false)
} }
if shouldTruncate { if shouldTruncate {
err := HandleTruncateBlockFile(bc.BlockId, BlockFile_Main) err := HandleTruncateBlockFile(bc.BlockId, BlockFile_Term)
if err != nil { if err != nil {
log.Printf("error truncating main blockfile: %v\n", err) log.Printf("error truncating term blockfile: %v\n", err)
} }
return return
} }
@ -201,7 +201,7 @@ func (bc *BlockController) resetTerminalState() {
buf.WriteString("\x1b[?25h") // show cursor buf.WriteString("\x1b[?25h") // show cursor
buf.WriteString("\x1b[?1000l") // disable mouse tracking buf.WriteString("\x1b[?1000l") // disable mouse tracking
buf.WriteString("\r\n\r\n(restored terminal state)\r\n\r\n") buf.WriteString("\r\n\r\n(restored terminal state)\r\n\r\n")
err := filestore.WFS.AppendData(ctx, bc.BlockId, "main", buf.Bytes()) err := filestore.WFS.AppendData(ctx, bc.BlockId, BlockFile_Term, buf.Bytes())
if err != nil { if err != nil {
log.Printf("error appending to blockfile (terminal reset): %v\n", err) log.Printf("error appending to blockfile (terminal reset): %v\n", err)
} }
@ -223,7 +223,7 @@ func (bc *BlockController) DoRunShellCommand(rc *RunShellOpts, blockMeta waveobj
// create a circular blockfile for the output // create a circular blockfile for the output
ctx, cancelFn := context.WithTimeout(context.Background(), 2*time.Second) ctx, cancelFn := context.WithTimeout(context.Background(), 2*time.Second)
defer cancelFn() defer cancelFn()
err := filestore.WFS.MakeFile(ctx, bc.BlockId, "main", nil, filestore.FileOptsType{MaxSize: DefaultTermMaxFileSize, Circular: true}) err := filestore.WFS.MakeFile(ctx, bc.BlockId, BlockFile_Term, nil, filestore.FileOptsType{MaxSize: DefaultTermMaxFileSize, Circular: true})
if err != nil && err != fs.ErrExist { if err != nil && err != fs.ErrExist {
err = fs.ErrExist err = fs.ErrExist
return fmt.Errorf("error creating blockfile: %w", err) return fmt.Errorf("error creating blockfile: %w", err)
@ -346,7 +346,7 @@ func (bc *BlockController) DoRunShellCommand(rc *RunShellOpts, blockMeta waveobj
for { for {
nr, err := ptyBuffer.Read(buf) nr, err := ptyBuffer.Read(buf)
if nr > 0 { if nr > 0 {
err := HandleAppendBlockFile(bc.BlockId, BlockFile_Main, buf[:nr]) err := HandleAppendBlockFile(bc.BlockId, BlockFile_Term, buf[:nr])
if err != nil { if err != nil {
log.Printf("error appending to blockfile: %v\n", err) log.Printf("error appending to blockfile: %v\n", err)
} }
@ -398,7 +398,7 @@ func (bc *BlockController) DoRunShellCommand(rc *RunShellOpts, blockMeta waveobj
shellProc.SetWaitErrorAndSignalDone(waitErr) shellProc.SetWaitErrorAndSignalDone(waitErr)
exitCode := shellexec.ExitCodeFromWaitErr(waitErr) exitCode := shellexec.ExitCodeFromWaitErr(waitErr)
termMsg := fmt.Sprintf("\r\nprocess finished with exit code = %d\r\n\r\n", exitCode) termMsg := fmt.Sprintf("\r\nprocess finished with exit code = %d\r\n\r\n", exitCode)
HandleAppendBlockFile(bc.BlockId, BlockFile_Main, []byte(termMsg)) HandleAppendBlockFile(bc.BlockId, BlockFile_Term, []byte(termMsg))
}() }()
return nil return nil
} }
@ -437,9 +437,9 @@ func (bc *BlockController) run(bdata *wstore.Block, blockMeta map[string]any) {
return return
} }
if getBoolFromMeta(blockMeta, wstore.MetaKey_CmdClearOnStart, false) { if getBoolFromMeta(blockMeta, wstore.MetaKey_CmdClearOnStart, false) {
err := HandleTruncateBlockFile(bc.BlockId, BlockFile_Main) err := HandleTruncateBlockFile(bc.BlockId, BlockFile_Term)
if err != nil { if err != nil {
log.Printf("error truncating main blockfile: %v\n", err) log.Printf("error truncating term blockfile: %v\n", err)
} }
} }
runOnStart := getBoolFromMeta(blockMeta, wstore.MetaKey_CmdRunOnStart, true) runOnStart := getBoolFromMeta(blockMeta, wstore.MetaKey_CmdRunOnStart, true)

View File

@ -11,10 +11,9 @@ import (
) )
const ( const (
Mode_Normal = "normal" Mode_Normal = "normal"
Mode_Esc = "esc" Mode_Esc = "esc"
Mode_WaveEsc = "waveesc" Mode_WaveEsc = "waveesc"
BlockFile_Main = "main" // Assuming this is defined elsewhere
) )
const MaxBufferedDataSize = 256 * 1024 const MaxBufferedDataSize = 256 * 1024