diff --git a/src/model.ts b/src/model.ts
index 7b762842..a8d69a16 100644
--- a/src/model.ts
+++ b/src/model.ts
@@ -2,7 +2,7 @@ import * as mobx from "mobx";
import {sprintf} from "sprintf-js";
import {boundMethod} from "autobind-decorator";
import {debounce} from "throttle-debounce";
-import {handleJsonFetchResponse, base64ToArray, genMergeData, genMergeSimpleData, boundInt, isModKeyPress} from "./util";
+import {handleJsonFetchResponse, base64ToArray, genMergeData, genMergeDataMap, genMergeSimpleData, boundInt, isModKeyPress} from "./util";
import {TermWrap} from "./term";
import {v4 as uuidv4} from "uuid";
import type {SessionDataType, LineType, RemoteType, HistoryItem, RemoteInstanceType, RemotePtrType, CmdDataType, FeCmdPacketType, TermOptsType, RemoteStateType, ScreenDataType, ScreenOptsType, PtyDataUpdateType, ModelUpdateType, UpdateMessage, InfoType, CmdLineUpdateType, UIContextType, HistoryInfoType, HistoryQueryOpts, FeInputPacketType, TermWinSize, RemoteInputPacketType, FeStateType, ContextMenuOpts, RendererContext, RendererModel, PtyDataType, BookmarkType, ClientDataType, HistoryViewDataType, AlertMessageType, HistorySearchParams, FocusTypeStrs, ScreenLinesType, HistoryTypeStrs} from "./types";
@@ -2228,7 +2228,7 @@ class Model {
activeSessionId : OV = mobx.observable.box(null, {name: "activeSessionId"});
sessionListLoaded : OV = mobx.observable.box(false, {name: "sessionListLoaded"});
sessionList : OArr = mobx.observable.array([], {name: "SessionList", deep: false});
- screenList : OArr = mobx.observable.array([], {name: "ScreenList", deep: false});
+ screenMap : OMap = mobx.observable.map({}, {name: "ScreenMap", deep: false});
ws : WSControl;
remotes : OArr = mobx.observable.array([], {name: "remotes", deep: false});
remotesLoaded : OV = mobx.observable.box(false, {name: "remotesLoaded"});
@@ -2580,14 +2580,11 @@ class Model {
let update : ModelUpdateType = genUpdate;
if ("screens" in update) {
if (update.connect) {
- this.screenList.clear();
+ this.screenMap.clear();
}
- genMergeData(this.screenList, update.screens, (s : Screen) => s.screenId, (sdata : ScreenDataType) => sdata.screenid, (sdata : ScreenDataType) => new Screen(sdata), null);
- for (let i=0; i s.screenId, (sdata : ScreenDataType) => sdata.screenid, (sdata : ScreenDataType) => new Screen(sdata));
+ for (let i=0; i {
let rtn : Record = {};
- for (let i=0; i, DataType extends IData
objs.replace(newObjs);
}
+function genMergeDataMap, DataType extends IDataType>(
+ objMap : mobx.ObservableMap,
+ dataArr : DataType[],
+ objIdFn : (obj : ObjType) => string,
+ dataIdFn : (data : DataType) => string,
+ ctorFn : (data : DataType) => ObjType,
+) : {added : string[], removed : string[]}
+{
+ let rtn : {added : string[], removed : string[]} = {added: [], removed: []};
+ if (dataArr == null || dataArr.length == 0) {
+ return rtn;
+ }
+ for (let i=0; i {
let envStr = atob(envStr64);
let parts = envStr.split("\x00");
@@ -182,4 +221,4 @@ function incObs(inum : mobx.IObservableValue) {
})();
}
-export {handleJsonFetchResponse, base64ToArray, genMergeData, genMergeSimpleData, parseEnv0, boundInt, isModKeyPress, incObs};
+export {handleJsonFetchResponse, base64ToArray, genMergeData, genMergeDataMap, genMergeSimpleData, parseEnv0, boundInt, isModKeyPress, incObs};