From 239f87ac422bb8c26b0fa5779ae184de16613df2 Mon Sep 17 00:00:00 2001 From: sawka Date: Sun, 30 Jul 2023 18:24:35 -0700 Subject: [PATCH] updates for converting lines, removing cmdid --- src/fullrenderer.tsx | 10 +-- src/history.tsx | 2 +- src/linecomps.tsx | 16 ++-- src/lineutil.ts | 2 - src/model.ts | 185 ++++++++++++++++++++--------------------- src/simplerenderer.tsx | 10 +-- 6 files changed, 110 insertions(+), 115 deletions(-) diff --git a/src/fullrenderer.tsx b/src/fullrenderer.tsx index 1182559c..b80fb4da 100644 --- a/src/fullrenderer.tsx +++ b/src/fullrenderer.tsx @@ -12,7 +12,7 @@ type OV = mobx.IObservableValue; type CV = mobx.IComputedValue; @mobxReact.observer -class FullRenderer extends React.Component<{rendererContainer : RendererContainerType, cmdId : string, plugin : RendererPluginType, onHeightChange : () => void, initParams : RendererModelInitializeParams}, {}> { +class FullRenderer extends React.Component<{rendererContainer : RendererContainerType, lineId : string, plugin : RendererPluginType, onHeightChange : () => void, initParams : RendererModelInitializeParams}, {}> { model : RendererModel; wrapperDivRef : React.RefObject = React.createRef(); rszObs : ResizeObserver; @@ -20,10 +20,10 @@ class FullRenderer extends React.Component<{rendererContainer : RendererContaine constructor(props : any) { super(props); - let {rendererContainer, cmdId, plugin, initParams} = this.props; + let {rendererContainer, lineId, plugin, initParams} = this.props; this.model = plugin.modelCtor(); this.model.initialize(initParams); - rendererContainer.registerRenderer(cmdId, this.model); + rendererContainer.registerRenderer(lineId, this.model); this.updateHeight_debounced = debounce(1000, this.updateHeight.bind(this)); } @@ -57,8 +57,8 @@ class FullRenderer extends React.Component<{rendererContainer : RendererContaine } componentWillUnmount() { - let {rendererContainer, cmdId} = this.props; - rendererContainer.unloadRenderer(cmdId); + let {rendererContainer, lineId} = this.props; + rendererContainer.unloadRenderer(lineId); if (this.rszObs != null) { this.rszObs.disconnect(); this.rszObs = null; diff --git a/src/history.tsx b/src/history.tsx index 7aa891d2..9b22911d 100644 --- a/src/history.tsx +++ b/src/history.tsx @@ -498,7 +498,7 @@ class LineContainer extends React.Component<{historyId : string, width : number} return; } this.line = hvm.getLineById(this.historyItem.lineid); - this.cmd = hvm.getCmdById(this.historyItem.cmdid); + this.cmd = hvm.getCmdById(this.historyItem.lineid); } @boundMethod diff --git a/src/linecomps.tsx b/src/linecomps.tsx index 27c185ae..3ff0ee8e 100644 --- a/src/linecomps.tsx +++ b/src/linecomps.tsx @@ -189,7 +189,7 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT } let {line} = this.props; this.rtnStateDiffFetched = true; - let usp = new URLSearchParams({linenum: String(line.linenum), screenid: line.screenid, cmdid: line.cmdid}); + let usp = new URLSearchParams({linenum: String(line.linenum), screenid: line.screenid, lineid: line.lineid}); let url = GlobalModel.getBaseHostPort() + "/api/rtnstate?" + usp.toString(); let fetchHeaders = GlobalModel.getFetchHeaders(); fetch(url, {headers: fetchHeaders}).then((resp) => { @@ -533,7 +533,7 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT if (cmd == null) { return (
- [cmd not found '{line.cmdid}'] + [cmd not found '{line.lineid}']
); } @@ -568,7 +568,7 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT return (
+ data-lineid={line.lineid} data-linenum={line.linenum} data-screenid={line.screenid}>
@@ -588,10 +588,10 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT - + - +
@@ -817,7 +817,7 @@ class TerminalRenderer extends React.Component<{screen : LineContainerModel, lin unloadTerminal(unmount : boolean) : void { let {screen, line} = this.props; - screen.unloadRenderer(line.cmdid); + screen.unloadRenderer(line.lineid); if (!unmount) { mobx.action(() => this.termLoaded.set(false))(); let termElem = this.termRef.current; @@ -831,7 +831,7 @@ class TerminalRenderer extends React.Component<{screen : LineContainerModel, lin clickTermBlock(e : any) { let {screen, line} = this.props; let model = GlobalModel; - let termWrap = screen.getTermWrap(line.cmdid); + let termWrap = screen.getTermWrap(line.lineid); if (termWrap != null) { termWrap.giveFocus(); } @@ -854,7 +854,7 @@ class TerminalRenderer extends React.Component<{screen : LineContainerModel, lin
-
+
...
diff --git a/src/lineutil.ts b/src/lineutil.ts index 8bd20931..9f92c9ff 100644 --- a/src/lineutil.ts +++ b/src/lineutil.ts @@ -76,7 +76,6 @@ function getSingleLineCmdText(cmdText : string) { function getRendererContext(line : LineType) : RendererContext { return { screenId: line.screenid, - cmdId: line.cmdid, lineId: line.lineid, lineNum: line.linenum, }; @@ -85,7 +84,6 @@ function getRendererContext(line : LineType) : RendererContext { function getWebRendererContext(line : WebLine) : RendererContext { return { screenId: line.screenid, - cmdId: line.lineid, lineId: line.lineid, lineNum: line.linenum, }; diff --git a/src/model.ts b/src/model.ts index 5248844d..c386ad4d 100644 --- a/src/model.ts +++ b/src/model.ts @@ -37,11 +37,11 @@ const BUILD = __PROMPT_BUILD__; type LineContainerModel = { loadTerminalRenderer : (elem : Element, line : LineType, cmd : Cmd, width : number) => void, - registerRenderer : (cmdId : string, renderer : RendererModel) => void, - unloadRenderer : (cmdId : string) => void, + registerRenderer : (lineId : string, renderer : RendererModel) => void, + unloadRenderer : (lineId : string) => void, getIsFocused : (lineNum : number) => boolean, - getTermWrap : (cmdId : string) => TermWrap; - getRenderer : (cmdId : string) => RendererModel, + getTermWrap : (lineId : string) => TermWrap; + getRenderer : (lineId : string) => RendererModel, getFocusType : () => FocusTypeStrs, getSelectedLine : () => number, getCmd : (line : LineType) => Cmd, @@ -139,12 +139,12 @@ function ces(s : string) { class Cmd { screenId : string; remote : RemotePtrType; - cmdId : string; + lineId : string; data : OV; constructor(cmd : CmdDataType) { this.screenId = cmd.screenid; - this.cmdId = cmd.cmdid; + this.lineId = cmd.lineid; this.remote = cmd.remote; this.data = mobx.observable.box(cmd, {deep: false, name: "cmd-data"}); } @@ -154,7 +154,7 @@ class Cmd { let origData = this.data.get(); this.data.set(cmd); if (origData != null && cmd != null && origData.status != cmd.status) { - GlobalModel.cmdStatusUpdate(this.screenId, this.cmdId, origData.status, cmd.status); + GlobalModel.cmdStatusUpdate(this.screenId, this.lineId, origData.status, cmd.status); } })(); } @@ -182,8 +182,11 @@ class Cmd { rawcmdstr: cmd.rawcmdstr, festate: cmd.festate, termopts: cmd.termopts, - startpk: cmd.startpk, - doneinfo: cmd.doneinfo, + cmdpid : cmd.cmdpid, + remotepid : cmd.remotepid, + donets : cmd.donets, + exitcode : cmd.exitcode, + durationms : cmd.durationms, rtnstate: cmd.rtnstate, vts: 0, rtnstatestr: null, @@ -241,7 +244,7 @@ class Cmd { handleInputChunk(data : string) : void { let inputPacket : FeInputPacketType = { type: "feinput", - ck: this.screenId + "/" + this.cmdId, + ck: this.screenId + "/" + this.lineId, remote: this.remote, inputdata64: btoa(data), }; @@ -265,8 +268,8 @@ class Screen { anchor : OV<{anchorLine : number, anchorOffset : number}>; termLineNumFocus : OV; setAnchor_debounced : (anchorLine : number, anchorOffset : number) => void; - terminals : Record = {}; // cmdid => TermWrap - renderers : Record = {}; // cmdid => RendererModel + terminals : Record = {}; // lineid => TermWrap + renderers : Record = {}; // lineid => RendererModel shareMode : OV; webShareOpts : OV; @@ -395,16 +398,16 @@ class Screen { if (sdata.selectedline != 0) { sline = this.getLineByNum(sdata.selectedline); } - // console.log("refocus", curLineFocus.linenum, "=>", sdata.selectedline, sline.cmdid); + // console.log("refocus", curLineFocus.linenum, "=>", sdata.selectedline, sline.lineid); if (curLineFocus.cmdInputFocus || (curLineFocus.linenum != null && curLineFocus.linenum != sdata.selectedline)) { (document.activeElement as HTMLElement).blur(); } - if (sline != null && sline.cmdid != null) { - let renderer = this.getRenderer(sline.cmdid); + if (sline != null) { + let renderer = this.getRenderer(sline.lineid); if (renderer != null) { renderer.giveFocus(); } - let termWrap = this.getTermWrap(sline.cmdid); + let termWrap = this.getTermWrap(sline.lineid); if (termWrap != null) { termWrap.giveFocus(); } @@ -503,13 +506,13 @@ class Screen { } updatePtyData(ptyMsg : PtyDataUpdateType) { - let cmdId = ptyMsg.cmdid; - let renderer = this.renderers[cmdId]; + let lineId = ptyMsg.lineid; + let renderer = this.renderers[lineId]; if (renderer != null) { let data = base64ToArray(ptyMsg.ptydata64); renderer.receiveData(ptyMsg.ptypos, data, "from-sw"); } - let term = this.terminals[cmdId]; + let term = this.terminals[lineId]; if (term != null) { let data = base64ToArray(ptyMsg.ptydata64); term.receiveData(ptyMsg.ptypos, data, "from-sw"); @@ -570,22 +573,22 @@ class Screen { } this.lastRows = rows; this.lastCols = cols; - for (let cmdid in this.terminals) { - this.terminals[cmdid].resizeCols(cols); + for (let lineid in this.terminals) { + this.terminals[lineid].resizeCols(cols); } GlobalCommandRunner.resizeScreen(this.screenId, rows, cols); } - getTermWrap(cmdId : string) : TermWrap { - return this.terminals[cmdId]; + getTermWrap(lineId : string) : TermWrap { + return this.terminals[lineId]; } - getRenderer(cmdId : string) : RendererModel { - return this.renderers[cmdId]; + getRenderer(lineId : string) : RendererModel { + return this.renderers[lineId]; } - registerRenderer(cmdId : string, renderer : RendererModel) { - this.renderers[cmdId] = renderer; + registerRenderer(lineId : string, renderer : RendererModel) { + this.renderers[lineId] = renderer; } setTermFocus(lineNum : number, focus : boolean) : void { @@ -644,10 +647,10 @@ class Screen { } loadTerminalRenderer(elem : Element, line : LineType, cmd : Cmd, width : number) { - let cmdId = cmd.cmdId; - let termWrap = this.getTermWrap(cmdId); + let lineId = cmd.lineId; + let termWrap = this.getTermWrap(lineId); if (termWrap != null) { - console.log("term-wrap already exists for", this.screenId, cmdId); + console.log("term-wrap already exists for", this.screenId, lineId); return; } let cols = windowWidthToCols(width, GlobalModel.termFontSize.get()); @@ -655,7 +658,7 @@ class Screen { if (line.contentheight != null && line.contentheight != -1) { usedRows = line.contentheight; } - let termContext = {sessionId: this.sessionId, screenId: this.screenId, cmdId: cmdId, lineId : line.lineid, lineNum: line.linenum}; + let termContext = {sessionId: this.sessionId, screenId: this.screenId, lineId : line.lineid, lineNum: line.linenum}; termWrap = new TermWrap(elem, { termContext: termContext, usedRows: usedRows, @@ -669,23 +672,23 @@ class Screen { ptyDataSource: getTermPtyData, onUpdateContentHeight: (termContext : RendererContext, height : number) => { GlobalModel.setContentHeight(termContext, height); }, }); - this.terminals[cmdId] = termWrap; + this.terminals[lineId] = termWrap; if ((this.focusType.get() == "cmd") && this.selectedLine.get() == line.linenum) { termWrap.giveFocus(); } return; } - unloadRenderer(cmdId : string) { - let rmodel = this.renderers[cmdId]; + unloadRenderer(lineId : string) { + let rmodel = this.renderers[lineId]; if (rmodel != null) { rmodel.dispose(); - delete this.renderers[cmdId]; + delete this.renderers[lineId]; } - let term = this.terminals[cmdId]; + let term = this.terminals[lineId]; if (term != null) { term.dispose(); - delete this.terminals[cmdId]; + delete this.terminals[lineId]; } } @@ -697,7 +700,7 @@ class Screen { if (!termOpts.flexrows) { return termOpts.rows; } - let termWrap = this.getTermWrap(cmd.cmdId); + let termWrap = this.getTermWrap(cmd.lineId); if (termWrap == null) { let cols = windowWidthToCols(width, GlobalModel.termFontSize.get()); let usedRows = GlobalModel.getContentHeight(context); @@ -742,11 +745,11 @@ class Screen { sline = this.getLineByNum(this.selectedLine.get()); } if (sline != null) { - let renderer = this.getRenderer(sline.cmdid); + let renderer = this.getRenderer(sline.lineid); if (renderer != null) { renderer.giveFocus(); } - let termWrap = this.getTermWrap(sline.cmdid); + let termWrap = this.getTermWrap(sline.lineid); if (termWrap != null) { termWrap.giveFocus(); } @@ -760,7 +763,7 @@ class ScreenLines { loaded : OV = mobx.observable.box(false, {name: "slines-loaded"}); loadError : OV = mobx.observable.box(null); lines : OArr = mobx.observable.array([], {name: "slines-lines", deep: false}); - cmds : Record = {}; + cmds : Record = {}; // lineid => Cmd constructor(screenId : string) { this.screenId = screenId; @@ -786,7 +789,7 @@ class ScreenLines { genMergeSimpleData(this.lines, slines.lines, (l : LineType) => String(l.lineid), (l : LineType) => sprintf("%013d:%s", l.ts, l.lineid)); let cmds = slines.cmds || []; for (let i=0; i = mobx.observable.array([], {name: "remotes", deep: false}); remotesLoaded : OV = mobx.observable.box(false, {name: "remotesLoaded"}); screenLines : OMap = mobx.observable.map({}, {name: "screenLines", deep: false}); // key = "sessionid/screenid" (screenlines) - termUsedRowsCache : Record = {}; + termUsedRowsCache : Record = {}; // key = "screenid/lineid" debugCmds : number = 0; debugScreen : OV = mobx.observable.box(false); localServerRunning : OV; @@ -2730,12 +2729,12 @@ class Model { } getContentHeight(context : RendererContext) : number { - let key = context.screenId + "/" + context.cmdId; + let key = context.screenId + "/" + context.lineId; return this.termUsedRowsCache[key]; } setContentHeight(context : RendererContext, height : number) : void { - let key = context.screenId + "/" + context.cmdId; + let key = context.screenId + "/" + context.lineId; this.termUsedRowsCache[key] = height; GlobalCommandRunner.setTermUsedRows(context, height); } @@ -2804,23 +2803,22 @@ class Model { lineid: lineElem.dataset.lineid, linenum: (isNaN(lineNum) ? null : lineNum), screenid: lineElem.dataset.screenid, - cmdid: lineElem.dataset.cmdid, }; } - cmdStatusUpdate(screenId : string, cmdId : string, origStatus : string, newStatus : string) { + cmdStatusUpdate(screenId : string, lineId : string, origStatus : string, newStatus : string) { let wasRunning = cmdStatusIsRunning(origStatus); let isRunning = cmdStatusIsRunning(newStatus); if (wasRunning && !isRunning) { // console.log("cmd status", screenId, cmdId, origStatus, "=>", newStatus); - let lines = this.getActiveLinesByCmdId(screenId, cmdId); - for (let ptr of lines) { + let ptr = this.getActiveLine(screenId, lineId); + if (ptr != null) { let screen = ptr.screen; - let renderer = screen.getRenderer(cmdId); + let renderer = screen.getRenderer(lineId); if (renderer != null) { renderer.setIsDone(); } - let term = screen.getTermWrap(cmdId); + let term = screen.getTermWrap(lineId); if (term != null) { term.cmdDone(); } @@ -3293,40 +3291,39 @@ class Model { if (slines == null) { return null; } - return slines.getCmd(line.cmdid); + return slines.getCmd(line.lineid); } - getActiveLinesByCmdId(screenId : string, cmdid : string) : SWLinePtr[] { - let rtn : SWLinePtr[] = []; + getActiveLine(screenId : string, lineid : string) : SWLinePtr { let slines = this.screenLines.get(screenId); if (slines == null) { - return []; + return null; } if (!slines.loaded.get()) { - return []; + return null; } - let cmd = slines.getCmd(cmdid); + let cmd = slines.getCmd(lineid); if (cmd == null) { - return []; + return null; } let line : LineType = null; for (let i=0; i { if ("remoteId" in termContext) { return getRemotePtyData(termContext.remoteId); } - return getPtyData(termContext.screenId, termContext.cmdId, termContext.lineNum); + return getPtyData(termContext.screenId, termContext.lineId, termContext.lineNum); } -function getPtyData(screenId : string, cmdId : string, lineNum : number) : Promise { - let url = sprintf(GlobalModel.getBaseHostPort() + "/api/ptyout?linenum=%d&screenid=%s&cmdid=%s", lineNum, screenId, cmdId); +function getPtyData(screenId : string, lineId : string, lineNum : number) : Promise { + let url = sprintf(GlobalModel.getBaseHostPort() + "/api/ptyout?linenum=%d&screenid=%s&lineid=%s", lineNum, screenId, lineId); return _getPtyDataFromUrl(url); } diff --git a/src/simplerenderer.tsx b/src/simplerenderer.tsx index fa48710b..dbf621dd 100644 --- a/src/simplerenderer.tsx +++ b/src/simplerenderer.tsx @@ -95,7 +95,7 @@ class SimpleBlobRendererModel { } @mobxReact.observer -class SimpleBlobRenderer extends React.Component<{rendererContainer : RendererContainerType, cmdId : string, plugin : RendererPluginType, onHeightChange : () => void, initParams : RendererModelInitializeParams}, {}> { +class SimpleBlobRenderer extends React.Component<{rendererContainer : RendererContainerType, lineId : string, plugin : RendererPluginType, onHeightChange : () => void, initParams : RendererModelInitializeParams}, {}> { model : SimpleBlobRendererModel; wrapperDivRef : React.RefObject = React.createRef(); rszObs : ResizeObserver; @@ -103,10 +103,10 @@ class SimpleBlobRenderer extends React.Component<{rendererContainer : RendererCo constructor(props : any) { super(props); - let {rendererContainer, cmdId, plugin, initParams} = this.props; + let {rendererContainer, lineId, plugin, initParams} = this.props; this.model = new SimpleBlobRendererModel(); this.model.initialize(initParams); - rendererContainer.registerRenderer(cmdId, this.model); + rendererContainer.registerRenderer(lineId, this.model); this.updateHeight_debounced = debounce(1000, this.updateHeight.bind(this)); } @@ -143,8 +143,8 @@ class SimpleBlobRenderer extends React.Component<{rendererContainer : RendererCo } componentWillUnmount() { - let {rendererContainer, cmdId} = this.props; - rendererContainer.unloadRenderer(cmdId); + let {rendererContainer, lineId} = this.props; + rendererContainer.unloadRenderer(lineId); if (this.rszObs != null) { this.rszObs.disconnect(); this.rszObs = null;