mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
updates for converting lines, removing cmdid
This commit is contained in:
@@ -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
@@ -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
@@ -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>
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user