updates for converting lines, removing cmdid

This commit is contained in:
sawka
2023-07-30 18:24:35 -07:00
parent 8ee17f5eb3
commit 239f87ac42
6 changed files with 110 additions and 115 deletions
+5 -5
View File
@@ -12,7 +12,7 @@ type OV<V> = mobx.IObservableValue<V>;
type CV<V> = mobx.IComputedValue<V>;
@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<any> = 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;
+1 -1
View File
@@ -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
+8 -8
View File
@@ -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 (
<div className="line line-invalid" ref={this.lineRef} data-lineid={line.lineid} data-linenum={line.linenum} data-screenid={line.screenid}>
[cmd not found '{line.cmdid}']
[cmd not found '{line.lineid}']
</div>
);
}
@@ -568,7 +568,7 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT
return (
<div className={mainDivCn}
ref={this.lineRef} onClick={this.handleClick}
data-lineid={line.lineid} data-linenum={line.linenum} data-screenid={line.screenid} data-cmdid={line.cmdid}>
data-lineid={line.lineid} data-linenum={line.linenum} data-screenid={line.screenid}>
<div key="focus" className={cn("focus-indicator", {"selected": isSelected}, {"active": isSelected && isFocused})}/>
<div key="header" className={cn("line-header", {"is-expanded": isExpanded}, {"hide-prompt": hidePrompt})}>
<div key="meta" className="meta-wrap">
@@ -588,10 +588,10 @@ class LineCmd extends React.Component<{screen : LineContainerModel, line : LineT
<TerminalRenderer screen={screen} line={line} width={width} staticRender={staticRender} visible={visible} onHeightChange={this.handleHeightChange} collapsed={false}/>
</If>
<If condition={rendererPlugin != null && rendererPlugin.rendererType == "simple"}>
<SimpleBlobRenderer rendererContainer={screen} cmdId={line.cmdid} plugin={rendererPlugin} onHeightChange={this.handleHeightChange} initParams={this.makeRendererModelInitializeParams()}/>
<SimpleBlobRenderer rendererContainer={screen} lineId={line.lineid} plugin={rendererPlugin} onHeightChange={this.handleHeightChange} initParams={this.makeRendererModelInitializeParams()}/>
</If>
<If condition={rendererPlugin != null && rendererPlugin.rendererType == "full"}>
<FullRenderer rendererContainer={screen} cmdId={line.cmdid} plugin={rendererPlugin} onHeightChange={this.handleHeightChange} initParams={this.makeRendererModelInitializeParams()}/>
<FullRenderer rendererContainer={screen} lineId={line.lineid} plugin={rendererPlugin} onHeightChange={this.handleHeightChange} initParams={this.makeRendererModelInitializeParams()}/>
</If>
<If condition={cmd.getRtnState()}>
<div key="rtnstate" className="cmd-rtnstate" style={{visibility: ((cmd.getStatus() == "done") ? "visible" : "hidden")}}>
@@ -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
<If condition={!isFocused}>
<div key="term-block" className="term-block" onClick={this.clickTermBlock}></div>
</If>
<div key="term-connectelem" className="terminal-connectelem" ref={this.termRef} data-cmdid={line.cmdid} style={{height: termHeight}}></div>
<div key="term-connectelem" className="terminal-connectelem" ref={this.termRef} data-lineid={line.lineid} style={{height: termHeight}}></div>
<If condition={!termLoaded}><div key="term-loading" className="terminal-loading-message">...</div></If>
</div>
-2
View File
@@ -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,
};
+91 -94
View File
@@ -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<CmdDataType>;
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<number>;
setAnchor_debounced : (anchorLine : number, anchorOffset : number) => void;
terminals : Record<string, TermWrap> = {}; // cmdid => TermWrap
renderers : Record<string, RendererModel> = {}; // cmdid => RendererModel
terminals : Record<string, TermWrap> = {}; // lineid => TermWrap
renderers : Record<string, RendererModel> = {}; // lineid => RendererModel
shareMode : OV<string>;
webShareOpts : OV<WebShareOpts>;
@@ -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<boolean> = mobx.observable.box(false, {name: "slines-loaded"});
loadError : OV<string> = mobx.observable.box(null);
lines : OArr<LineType> = mobx.observable.array([], {name: "slines-lines", deep: false});
cmds : Record<string, Cmd> = {};
cmds : Record<string, Cmd> = {}; // 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<cmds.length; i++) {
this.cmds[cmds[i].cmdid] = new Cmd(cmds[i]);
this.cmds[cmds[i].lineid] = new Cmd(cmds[i]);
}
})();
}
@@ -801,18 +804,15 @@ class ScreenLines {
dispose() {
}
getCmd(cmdId : string) : Cmd {
return this.cmds[cmdId];
getCmd(lineId : string) : Cmd {
return this.cmds[lineId];
}
getRunningCmdLines() : LineType[] {
let rtn : LineType[] = [];
for (let i=0; i<this.lines.length; i++) {
let line = this.lines[i];
if (line.cmdid == null) {
continue;
}
let cmd = this.getCmd(line.cmdid);
let cmd = this.getCmd(line.lineid);
if (cmd == null) {
continue;
}
@@ -826,9 +826,9 @@ class ScreenLines {
updateCmd(cmd : CmdDataType) : void {
if (cmd.remove) {
throw new Error("cannot remove cmd with updateCmd call [" + cmd.cmdid + "]");
throw new Error("cannot remove cmd with updateCmd call [" + cmd.lineid + "]");
}
let origCmd = this.cmds[cmd.cmdid];
let origCmd = this.cmds[cmd.lineid];
if (origCmd != null) {
origCmd.setCmd(cmd);
}
@@ -837,12 +837,12 @@ class ScreenLines {
mergeCmd(cmd : CmdDataType) : void {
if (cmd.remove) {
delete this.cmds[cmd.cmdid];
delete this.cmds[cmd.lineid];
return;
}
let origCmd = this.cmds[cmd.cmdid];
let origCmd = this.cmds[cmd.lineid];
if (origCmd == null) {
this.cmds[cmd.cmdid] = new Cmd(cmd);
this.cmds[cmd.lineid] = new Cmd(cmd);
return;
}
origCmd.setCmd(cmd);
@@ -1595,7 +1595,6 @@ type LineFocusType = {
lineid? : string,
linenum? : number,
screenid? : string,
cmdid? : string,
};
class SpecialHistoryViewLineContainer {
@@ -1610,7 +1609,7 @@ class SpecialHistoryViewLineContainer {
getCmd(line : LineType) : Cmd {
if (this.cmd == null) {
this.cmd = GlobalModel.historyViewModel.getCmdById(line.cmdid);
this.cmd = GlobalModel.historyViewModel.getCmdById(line.lineid);
}
return this.cmd;
}
@@ -1637,10 +1636,10 @@ class SpecialHistoryViewLineContainer {
loadTerminalRenderer(elem : Element, line : LineType, cmd : Cmd, width : number) : void {
this.unloadRenderer(null);
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", line.screenid, cmdId);
console.log("term-wrap already exists for", line.screenid, lineId);
return;
}
let cols = windowWidthToCols(width, GlobalModel.termFontSize.get());
@@ -1648,7 +1647,7 @@ class SpecialHistoryViewLineContainer {
if (line.contentheight != null && line.contentheight != -1) {
usedRows = line.contentheight;
}
let termContext = {screenId: line.screenid, cmdId: cmdId, lineId : line.lineid, lineNum: line.linenum};
let termContext = {screenId: line.screenid, lineId : line.lineid, lineNum: line.linenum};
termWrap = new TermWrap(elem, {
termContext: termContext,
usedRows: usedRows,
@@ -1666,11 +1665,11 @@ class SpecialHistoryViewLineContainer {
return;
}
registerRenderer(cmdId : string, renderer : RendererModel) : void {
registerRenderer(lineId : string, renderer : RendererModel) : void {
this.renderer = renderer;
}
unloadRenderer(cmdId : string) : void {
unloadRenderer(lineId : string) : void {
if (this.renderer != null) {
this.renderer.dispose();
this.renderer = null;
@@ -1693,7 +1692,7 @@ class SpecialHistoryViewLineContainer {
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);
@@ -1712,11 +1711,11 @@ class SpecialHistoryViewLineContainer {
return false;
}
getRenderer(cmdId : string) : RendererModel {
getRenderer(lineId : string) : RendererModel {
return this.renderer;
}
getTermWrap(cmdId : string) : TermWrap {
getTermWrap(lineId : string) : TermWrap {
return this.terminal;
}
@@ -1774,13 +1773,13 @@ class HistoryViewModel {
return null;
}
getCmdById(cmdId : string) : Cmd {
if (isBlank(cmdId)) {
getCmdById(lineId : string) : Cmd {
if (isBlank(lineId)) {
return null;
}
for (let i=0; i<this.historyItemCmds.length; i++) {
let cmd = this.historyItemCmds[i];
if (cmd.cmdid == cmdId) {
if (cmd.lineid == lineId) {
return new Cmd(cmd);
}
}
@@ -2435,7 +2434,7 @@ class Model {
remotes : OArr<RemoteType> = mobx.observable.array([], {name: "remotes", deep: false});
remotesLoaded : OV<boolean> = mobx.observable.box(false, {name: "remotesLoaded"});
screenLines : OMap<string, ScreenLines> = mobx.observable.map({}, {name: "screenLines", deep: false}); // key = "sessionid/screenid" (screenlines)
termUsedRowsCache : Record<string, number> = {};
termUsedRowsCache : Record<string, number> = {}; // key = "screenid/lineid"
debugCmds : number = 0;
debugScreen : OV<boolean> = mobx.observable.box(false);
localServerRunning : OV<boolean>;
@@ -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<slines.lines.length; i++) {
if (slines.lines[i].cmdid == cmdid) {
if (slines.lines[i].lineid == lineid) {
line = slines.lines[i];
break;
}
}
if (line != null) {
let screen = this.getScreenById_single(slines.screenId);
rtn.push({line : line, slines: slines, screen: screen});
if (line == null) {
return null;
}
return rtn;
let screen = this.getScreenById_single(slines.screenId);
return {line: line, slines: slines, screen: screen};
}
updatePtyData(ptyMsg : PtyDataUpdateType) : void {
let activeLinePtrs = this.getActiveLinesByCmdId(ptyMsg.screenid, ptyMsg.cmdid);
for (let lineptr of activeLinePtrs) {
lineptr.screen.updatePtyData(ptyMsg);
let linePtr = this.getActiveLine(ptyMsg.screenid, ptyMsg.lineid);
if (linePtr != null) {
linePtr.screen.updatePtyData(ptyMsg);
}
}
@@ -3696,11 +3693,11 @@ function getTermPtyData(termContext : TermContextUnion) : Promise<PtyDataType> {
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<PtyDataType> {
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<PtyDataType> {
let url = sprintf(GlobalModel.getBaseHostPort() + "/api/ptyout?linenum=%d&screenid=%s&lineid=%s", lineNum, screenId, lineId);
return _getPtyDataFromUrl(url);
}
+5 -5
View File
@@ -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<any> = 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;