split models/model

This commit is contained in:
Red Adaya 2024-02-08 16:40:15 +08:00
parent a9b9ff3362
commit 1d0b7bd770
12 changed files with 470 additions and 470 deletions

View File

@ -8,11 +8,10 @@ import { genMergeSimpleData } from "../util/util";
import { BookmarkType } from "../types/types";
import { checkKeyPressed, adaptFromReactOrNativeKeyEvent } from "../util/keyutil";
import { OV, OArr } from "../types/types";
import { CommandRunner } from "./model";
import { GlobalCommandRunner } from "./global";
import { Model } from "./model";
class BookmarksModel {
globalCommandRunner: CommandRunner;
globalModel: Model;
bookmarks: OArr<BookmarkType> = mobx.observable.array([], {
name: "Bookmarks",
@ -39,7 +38,6 @@ class BookmarksModel {
constructor(globalModel: Model) {
this.globalModel = globalModel;
this.globalCommandRunner = CommandRunner.getInstance();
}
showBookmarksView(bmArr: BookmarkType[], selectedBookmarkId: string): void {
@ -125,7 +123,7 @@ class BookmarksModel {
this.tempDesc.set("");
this.tempCmd.set("");
})();
this.globalCommandRunner.editBookmark(bm.bookmarkid, bm.description, bm.cmdstr);
GlobalCommandRunner.editBookmark(bm.bookmarkid, bm.description, bm.cmdstr);
}
handleDeleteBookmark(bookmarkId: string): void {
@ -134,7 +132,7 @@ class BookmarksModel {
setTimeout(this.clearPendingDelete, 2000);
return;
}
this.globalCommandRunner.deleteBookmark(bookmarkId);
GlobalCommandRunner.deleteBookmark(bookmarkId);
this.clearPendingDelete();
}

431
src/models/commandrunner.ts Normal file
View File

@ -0,0 +1,431 @@
// Copyright 2023, Command Line Inc.
// SPDX-License-Identifier: Apache-2.0
import * as mobx from "mobx";
import { RendererContext, CommandRtnType, HistorySearchParams, LineStateType } from "../types/types";
import { GlobalModel } from "./global";
class CommandRunner {
private constructor() {}
static getInstance() {
if (!(window as any).GlobalCommandRunner) {
(window as any).GlobalCommandRunner = new CommandRunner();
}
return (window as any).GlobalCommandRunner;
}
loadHistory(show: boolean, htype: string) {
let kwargs = { nohist: "1" };
if (!show) {
kwargs["noshow"] = "1";
}
if (htype != null && htype != "screen") {
kwargs["type"] = htype;
}
GlobalModel.submitCommand("history", null, null, kwargs, true);
}
resetShellState() {
GlobalModel.submitCommand("reset", null, null, null, true);
}
historyPurgeLines(lines: string[]): Promise<CommandRtnType> {
let prtn = GlobalModel.submitCommand("history", "purge", lines, { nohist: "1" }, false);
return prtn;
}
switchSession(session: string) {
mobx.action(() => {
GlobalModel.activeMainView.set("session");
})();
GlobalModel.submitCommand("session", null, [session], { nohist: "1" }, false);
}
switchScreen(screen: string, session?: string) {
mobx.action(() => {
GlobalModel.activeMainView.set("session");
})();
let kwargs = { nohist: "1" };
if (session != null) {
kwargs["session"] = session;
}
GlobalModel.submitCommand("screen", null, [screen], kwargs, false);
}
lineView(sessionId: string, screenId: string, lineNum?: number) {
let screen = GlobalModel.getScreenById(sessionId, screenId);
if (screen != null && lineNum != null) {
screen.setAnchorFields(lineNum, 0, "line:view");
}
let lineNumStr = lineNum == null || lineNum == 0 ? "E" : String(lineNum);
GlobalModel.submitCommand("line", "view", [sessionId, screenId, lineNumStr], { nohist: "1" }, false);
}
lineArchive(lineArg: string, archive: boolean): Promise<CommandRtnType> {
let kwargs = { nohist: "1" };
let archiveStr = archive ? "1" : "0";
return GlobalModel.submitCommand("line", "archive", [lineArg, archiveStr], kwargs, false);
}
lineDelete(lineArg: string, interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("line", "delete", [lineArg], { nohist: "1" }, interactive);
}
lineRestart(lineArg: string, interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("line", "restart", [lineArg], { nohist: "1" }, interactive);
}
lineSet(lineArg: string, opts: { renderer?: string }): Promise<CommandRtnType> {
let kwargs = { nohist: "1" };
if ("renderer" in opts) {
kwargs["renderer"] = opts.renderer ?? "";
}
return GlobalModel.submitCommand("line", "set", [lineArg], kwargs, false);
}
createNewSession() {
GlobalModel.submitCommand("session", "open", null, { nohist: "1" }, false);
}
createNewScreen() {
GlobalModel.submitCommand("screen", "open", null, { nohist: "1" }, false);
}
closeScreen(screen: string) {
GlobalModel.submitCommand("screen", "close", [screen], { nohist: "1" }, false);
}
// include is lineIds to include, exclude is lineIds to exclude
// if include is given then it *only* does those ids. if exclude is given (or not),
// it does all running commands in the screen except for excluded.
resizeScreen(screenId: string, rows: number, cols: number, opts?: { include?: string[]; exclude?: string[] }) {
let kwargs: Record<string, string> = {
nohist: "1",
screen: screenId,
cols: String(cols),
rows: String(rows),
};
if (opts?.include != null && opts?.include.length > 0) {
kwargs.include = opts.include.join(",");
}
if (opts?.exclude != null && opts?.exclude.length > 0) {
kwargs.exclude = opts.exclude.join(",");
}
GlobalModel.submitCommand("screen", "resize", null, kwargs, false);
}
screenArchive(screenId: string, shouldArchive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand(
"screen",
"archive",
[screenId, shouldArchive ? "1" : "0"],
{ nohist: "1" },
false
);
}
screenDelete(screenId: string, interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("screen", "delete", [screenId], { nohist: "1" }, interactive);
}
screenWebShare(screenId: string, shouldShare: boolean): Promise<CommandRtnType> {
let kwargs: Record<string, string> = { nohist: "1" };
kwargs["screen"] = screenId;
return GlobalModel.submitCommand("screen", "webshare", [shouldShare ? "1" : "0"], kwargs, false);
}
showRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "show", null, { nohist: "1", remote: remoteid }, true);
}
showAllRemotes() {
GlobalModel.submitCommand("remote", "showall", null, { nohist: "1" }, true);
}
connectRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "connect", null, { nohist: "1", remote: remoteid }, true);
}
disconnectRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "disconnect", null, { nohist: "1", remote: remoteid }, true);
}
installRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "install", null, { nohist: "1", remote: remoteid }, true);
}
installCancelRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "installcancel", null, { nohist: "1", remote: remoteid }, true);
}
createRemote(cname: string, kwargsArg: Record<string, string>, interactive: boolean): Promise<CommandRtnType> {
let kwargs = Object.assign({}, kwargsArg);
kwargs["nohist"] = "1";
return GlobalModel.submitCommand("remote", "new", [cname], kwargs, interactive);
}
openCreateRemote(): void {
GlobalModel.submitCommand("remote", "new", null, { nohist: "1", visual: "1" }, true);
}
screenSetRemote(remoteArg: string, nohist: boolean, interactive: boolean): Promise<CommandRtnType> {
let kwargs = {};
if (nohist) {
kwargs["nohist"] = "1";
}
return GlobalModel.submitCommand("connect", null, [remoteArg], kwargs, interactive);
}
editRemote(remoteid: string, kwargsArg: Record<string, string>): void {
let kwargs = Object.assign({}, kwargsArg);
kwargs["nohist"] = "1";
kwargs["remote"] = remoteid;
GlobalModel.submitCommand("remote", "set", null, kwargs, true);
}
openEditRemote(remoteid: string): void {
GlobalModel.submitCommand("remote", "set", null, { remote: remoteid, nohist: "1", visual: "1" }, true);
}
archiveRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "archive", null, { remote: remoteid, nohist: "1" }, true);
}
importSshConfig() {
GlobalModel.submitCommand("remote", "parse", null, { nohist: "1", visual: "1" }, true);
}
screenSelectLine(lineArg: string, focusVal?: string) {
let kwargs: Record<string, string> = {
nohist: "1",
line: lineArg,
};
if (focusVal != null) {
kwargs["focus"] = focusVal;
}
GlobalModel.submitCommand("screen", "set", null, kwargs, false);
}
screenReorder(screenId: string, index: string) {
let kwargs: Record<string, string> = {
nohist: "1",
screenId: screenId,
index: index,
};
GlobalModel.submitCommand("screen", "reorder", null, kwargs, false);
}
setTermUsedRows(termContext: RendererContext, height: number) {
let kwargs: Record<string, string> = {};
kwargs["screen"] = termContext.screenId;
kwargs["hohist"] = "1";
let posargs = [String(termContext.lineNum), String(height)];
GlobalModel.submitCommand("line", "setheight", posargs, kwargs, false);
}
screenSetAnchor(sessionId: string, screenId: string, anchorVal: string): void {
let kwargs = {
nohist: "1",
anchor: anchorVal,
session: sessionId,
screen: screenId,
};
GlobalModel.submitCommand("screen", "set", null, kwargs, false);
}
screenSetFocus(focusVal: string): void {
GlobalModel.submitCommand("screen", "set", null, { focus: focusVal, nohist: "1" }, false);
}
screenSetSettings(
screenId: string,
settings: { tabcolor?: string; tabicon?: string; name?: string; sharename?: string },
interactive: boolean
): Promise<CommandRtnType> {
let kwargs: { [key: string]: any } = Object.assign({}, settings);
kwargs["nohist"] = "1";
kwargs["screen"] = screenId;
return GlobalModel.submitCommand("screen", "set", null, kwargs, interactive);
}
sessionArchive(sessionId: string, shouldArchive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand(
"session",
"archive",
[sessionId, shouldArchive ? "1" : "0"],
{ nohist: "1" },
false
);
}
sessionDelete(sessionId: string): Promise<CommandRtnType> {
return GlobalModel.submitCommand("session", "delete", [sessionId], { nohist: "1" }, false);
}
sessionSetSettings(sessionId: string, settings: { name?: string }, interactive: boolean): Promise<CommandRtnType> {
let kwargs = Object.assign({}, settings);
kwargs["nohist"] = "1";
kwargs["session"] = sessionId;
return GlobalModel.submitCommand("session", "set", null, kwargs, interactive);
}
lineStar(lineId: string, starVal: number) {
GlobalModel.submitCommand("line", "star", [lineId, String(starVal)], { nohist: "1" }, true);
}
lineBookmark(lineId: string) {
GlobalModel.submitCommand("line", "bookmark", [lineId], { nohist: "1" }, true);
}
linePin(lineId: string, val: boolean) {
GlobalModel.submitCommand("line", "pin", [lineId, val ? "1" : "0"], { nohist: "1" }, true);
}
bookmarksView() {
GlobalModel.submitCommand("bookmarks", "show", null, { nohist: "1" }, true);
}
connectionsView() {
GlobalModel.connectionViewModel.showConnectionsView();
}
clientSettingsView() {
GlobalModel.clientSettingsViewModel.showClientSettingsView();
}
historyView(params: HistorySearchParams) {
let kwargs = { nohist: "1" };
kwargs["offset"] = String(params.offset);
kwargs["rawoffset"] = String(params.rawOffset);
if (params.searchText != null) {
kwargs["text"] = params.searchText;
}
if (params.searchSessionId != null) {
kwargs["searchsession"] = params.searchSessionId;
}
if (params.searchRemoteId != null) {
kwargs["searchremote"] = params.searchRemoteId;
}
if (params.fromTs != null) {
kwargs["fromts"] = String(params.fromTs);
}
if (params.noMeta) {
kwargs["meta"] = "0";
}
if (params.filterCmds) {
kwargs["filter"] = "1";
}
GlobalModel.submitCommand("history", "viewall", null, kwargs, true);
}
telemetryOff(interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("telemetry", "off", null, { nohist: "1" }, interactive);
}
telemetryOn(interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("telemetry", "on", null, { nohist: "1" }, interactive);
}
releaseCheckAutoOff(interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("releasecheck", "autooff", null, { nohist: "1" }, interactive);
}
releaseCheckAutoOn(interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("releasecheck", "autoon", null, { nohist: "1" }, interactive);
}
setTermFontSize(fsize: number, interactive: boolean): Promise<CommandRtnType> {
let kwargs = {
nohist: "1",
termfontsize: String(fsize),
};
return GlobalModel.submitCommand("client", "set", null, kwargs, interactive);
}
setClientOpenAISettings(opts: { model?: string; apitoken?: string; maxtokens?: string }): Promise<CommandRtnType> {
let kwargs = {
nohist: "1",
};
if (opts.model != null) {
kwargs["openaimodel"] = opts.model;
}
if (opts.apitoken != null) {
kwargs["openaiapitoken"] = opts.apitoken;
}
if (opts.maxtokens != null) {
kwargs["openaimaxtokens"] = opts.maxtokens;
}
return GlobalModel.submitCommand("client", "set", null, kwargs, false);
}
clientAcceptTos(): void {
GlobalModel.submitCommand("client", "accepttos", null, { nohist: "1" }, true);
}
clientSetConfirmFlag(flag: string, value: boolean): Promise<CommandRtnType> {
let kwargs = { nohist: "1" };
let valueStr = value ? "1" : "0";
return GlobalModel.submitCommand("client", "setconfirmflag", [flag, valueStr], kwargs, false);
}
clientSetSidebar(width: number, collapsed: boolean): Promise<CommandRtnType> {
let kwargs = { nohist: "1", width: `${width}`, collapsed: collapsed ? "1" : "0" };
return GlobalModel.submitCommand("client", "setsidebar", null, kwargs, false);
}
editBookmark(bookmarkId: string, desc: string, cmdstr: string) {
let kwargs = {
nohist: "1",
desc: desc,
cmdstr: cmdstr,
};
GlobalModel.submitCommand("bookmark", "set", [bookmarkId], kwargs, true);
}
deleteBookmark(bookmarkId: string): void {
GlobalModel.submitCommand("bookmark", "delete", [bookmarkId], { nohist: "1" }, true);
}
openSharedSession(): void {
GlobalModel.submitCommand("session", "openshared", null, { nohist: "1" }, true);
}
setLineState(
screenId: string,
lineId: string,
state: LineStateType,
interactive: boolean
): Promise<CommandRtnType> {
let stateStr = JSON.stringify(state);
return GlobalModel.submitCommand(
"line",
"set",
[lineId],
{ screen: screenId, nohist: "1", state: stateStr },
interactive
);
}
screenSidebarAddLine(lineId: string) {
GlobalModel.submitCommand("sidebar", "add", null, { nohist: "1", line: lineId }, false);
}
screenSidebarRemove() {
GlobalModel.submitCommand("sidebar", "remove", null, { nohist: "1" }, false);
}
screenSidebarClose(): void {
GlobalModel.submitCommand("sidebar", "close", null, { nohist: "1" }, false);
}
screenSidebarOpen(width?: string): void {
let kwargs: Record<string, string> = { nohist: "1" };
if (width != null) {
kwargs.width = width;
}
GlobalModel.submitCommand("sidebar", "open", null, kwargs, false);
}
}
export { CommandRunner };

View File

@ -6,12 +6,11 @@ import * as types from "../types/types";
import { windowWidthToCols, windowHeightToRows } from "../util/textmeasure";
import { MagicLayout } from "../app/magiclayout";
import { Model } from "./model";
import { CommandRunner } from "./model";
import { GlobalCommandRunner } from "./global";
import { Cmd } from "./cmd";
import { Screen } from "./screen";
class ForwardLineContainer {
globalCommandRunner: CommandRunner;
globalModel: Model;
winSize: types.WindowSize;
screen: Screen;
@ -20,7 +19,6 @@ class ForwardLineContainer {
constructor(screen: Screen, winSize: types.WindowSize, containerType: types.LineContainerStrs, lineId: string) {
this.globalModel = Model.getInstance();
this.globalCommandRunner = CommandRunner.getInstance();
this.screen = screen;
this.winSize = winSize;
this.containerType = containerType;
@ -35,7 +33,7 @@ class ForwardLineContainer {
let cols = windowWidthToCols(winSize.width, fontSize);
let rows = windowHeightToRows(winSize.height, fontSize);
termWrap.resizeCols(cols);
this.globalCommandRunner.resizeScreen(this.screen.screenId, rows, cols, { include: [this.lineId] });
GlobalCommandRunner.resizeScreen(this.screen.screenId, rows, cols, { include: [this.lineId] });
}
}

6
src/models/global.ts Normal file
View File

@ -0,0 +1,6 @@
import { Model } from "./model";
import { CommandRunner } from "./commandrunner";
const GlobalModel = Model.getInstance();
const GlobalCommandRunner = CommandRunner.getInstance();
export { GlobalModel, GlobalCommandRunner };

View File

@ -17,7 +17,7 @@ import dayjs from "dayjs";
import * as appconst from "../app/appconst";
import { checkKeyPressed, adaptFromReactOrNativeKeyEvent } from "../util/keyutil";
import { OV, OArr, OMap } from "../types/types";
import { CommandRunner } from "./model";
import { GlobalCommandRunner } from "./global";
import { Model } from "./model";
import { Cmd } from "./cmd";
import { SpecialLineContainer } from "./speciallinecontainer";
@ -25,7 +25,6 @@ import { SpecialLineContainer } from "./speciallinecontainer";
const HistoryPageSize = 50;
class HistoryViewModel {
globalCommandRunner: CommandRunner;
globalModel: Model;
items: OArr<HistoryItem> = mobx.observable.array([], {
name: "HistoryItems",
@ -70,7 +69,6 @@ class HistoryViewModel {
constructor(globalModel: Model) {
this.globalModel = globalModel;
this.globalCommandRunner = CommandRunner.getInstance();
}
closeView(): void {
@ -161,14 +159,14 @@ class HistoryViewModel {
_deleteSelected(): void {
let lineIds = Array.from(this.selectedItems.keys());
let prtn = this.globalCommandRunner.historyPurgeLines(lineIds);
let prtn = GlobalCommandRunner.historyPurgeLines(lineIds);
prtn.then((result: CommandRtnType) => {
if (!result.success) {
this.globalModel.showAlert({ message: "Error removing history lines." });
}
});
let params = this._getSearchParams();
this.globalCommandRunner.historyView(params);
GlobalCommandRunner.historyView(params);
}
@boundMethod
@ -207,7 +205,7 @@ class HistoryViewModel {
reSearch(): void {
this.setActiveItem(null);
this.globalCommandRunner.historyView(this._getSearchParams());
GlobalCommandRunner.historyView(this._getSearchParams());
}
resetAllFilters(): void {
@ -220,7 +218,7 @@ class HistoryViewModel {
this.searchShowMeta.set(true);
this.searchFilterCmds.set(true);
})();
this.globalCommandRunner.historyView(this._getSearchParams(0, 0));
GlobalCommandRunner.historyView(this._getSearchParams(0, 0));
}
setFromDate(fromDate: string): void {
@ -230,7 +228,7 @@ class HistoryViewModel {
mobx.action(() => {
this.searchFromDate.set(fromDate);
})();
this.globalCommandRunner.historyView(this._getSearchParams(0, 0));
GlobalCommandRunner.historyView(this._getSearchParams(0, 0));
}
setSearchFilterCmds(filter: boolean): void {
@ -240,7 +238,7 @@ class HistoryViewModel {
mobx.action(() => {
this.searchFilterCmds.set(filter);
})();
this.globalCommandRunner.historyView(this._getSearchParams(0, 0));
GlobalCommandRunner.historyView(this._getSearchParams(0, 0));
}
setSearchShowMeta(show: boolean): void {
@ -250,7 +248,7 @@ class HistoryViewModel {
mobx.action(() => {
this.searchShowMeta.set(show);
})();
this.globalCommandRunner.historyView(this._getSearchParams(0, 0));
GlobalCommandRunner.historyView(this._getSearchParams(0, 0));
}
setSearchSessionId(sessionId: string): void {
@ -260,7 +258,7 @@ class HistoryViewModel {
mobx.action(() => {
this.searchSessionId.set(sessionId);
})();
this.globalCommandRunner.historyView(this._getSearchParams(0, 0));
GlobalCommandRunner.historyView(this._getSearchParams(0, 0));
}
setSearchRemoteId(remoteId: string): void {
@ -270,7 +268,7 @@ class HistoryViewModel {
mobx.action(() => {
this.searchRemoteId.set(remoteId);
})();
this.globalCommandRunner.historyView(this._getSearchParams(0, 0));
GlobalCommandRunner.historyView(this._getSearchParams(0, 0));
}
goPrev(): void {
@ -280,14 +278,14 @@ class HistoryViewModel {
offset = 0;
}
let params = this._getSearchParams(offset, 0);
this.globalCommandRunner.historyView(params);
GlobalCommandRunner.historyView(params);
}
goNext(): void {
let offset = this.offset.get();
offset += HistoryPageSize;
let params = this._getSearchParams(offset, this.nextRawOffset ?? 0);
this.globalCommandRunner.historyView(params);
GlobalCommandRunner.historyView(params);
}
submitSearch(): void {
@ -298,7 +296,7 @@ class HistoryViewModel {
this.historyItemLines = [];
this.historyItemCmds = [];
})();
this.globalCommandRunner.historyView(this._getSearchParams(0, 0));
GlobalCommandRunner.historyView(this._getSearchParams(0, 0));
}
handleDocKeyDown(e: any): void {

View File

@ -1,3 +1,4 @@
export * from "./global";
export * from "./model";
export { BookmarksModel } from "./bookmarks";
export { ClientSettingsViewModel } from "./clientsettingsview";

View File

@ -18,7 +18,7 @@ import { StrWithPos } from "../types/types";
import * as appconst from "../app/appconst";
import { OV } from "../types/types";
import { Model } from "./model";
import { CommandRunner } from "./model";
import { GlobalCommandRunner } from "./global";
function getDefaultHistoryQueryOpts(): HistoryQueryOpts {
return {
@ -34,7 +34,6 @@ function getDefaultHistoryQueryOpts(): HistoryQueryOpts {
}
class InputModel {
globalCommandRunner: CommandRunner;
globalModel: Model;
historyShow: OV<boolean> = mobx.observable.box(false);
infoShow: OV<boolean> = mobx.observable.box(false);
@ -85,7 +84,6 @@ class InputModel {
constructor(globalModel: Model) {
this.globalModel = globalModel;
this.globalCommandRunner = CommandRunner.getInstance();
this.filteredHistoryItems = mobx.computed(() => {
return this._getFilteredHistoryItems();
});
@ -153,7 +151,7 @@ class InputModel {
let screen = this.globalModel.getActiveScreen();
if (screen != null) {
if (screen.focusType.get() != "input") {
this.globalCommandRunner.screenSetFocus("input");
GlobalCommandRunner.screenSetFocus("input");
}
}
}
@ -251,7 +249,7 @@ class InputModel {
mobx.action(() => {
this.historyLoading.set(true);
})();
this.globalCommandRunner.loadHistory(show, htype);
GlobalCommandRunner.loadHistory(show, htype);
}
openHistory(): void {

View File

@ -60,6 +60,7 @@ import { ModalsModel } from "./modals";
import { MainSidebarModel } from "./mainsidebar";
import { Screen } from "./screen";
import { Cmd } from "./cmd";
import { GlobalCommandRunner } from "./global";
type KeyModsType = {
meta?: boolean;
@ -1416,429 +1417,4 @@ class Model {
}
}
class CommandRunner {
private constructor() {}
static getInstance() {
if (!(window as any).GlobalCommandRunner) {
(window as any).GlobalCommandRunner = new CommandRunner();
}
return (window as any).GlobalCommandRunner;
}
loadHistory(show: boolean, htype: string) {
let kwargs = { nohist: "1" };
if (!show) {
kwargs["noshow"] = "1";
}
if (htype != null && htype != "screen") {
kwargs["type"] = htype;
}
GlobalModel.submitCommand("history", null, null, kwargs, true);
}
resetShellState() {
GlobalModel.submitCommand("reset", null, null, null, true);
}
historyPurgeLines(lines: string[]): Promise<CommandRtnType> {
let prtn = GlobalModel.submitCommand("history", "purge", lines, { nohist: "1" }, false);
return prtn;
}
switchSession(session: string) {
mobx.action(() => {
GlobalModel.activeMainView.set("session");
})();
GlobalModel.submitCommand("session", null, [session], { nohist: "1" }, false);
}
switchScreen(screen: string, session?: string) {
mobx.action(() => {
GlobalModel.activeMainView.set("session");
})();
let kwargs = { nohist: "1" };
if (session != null) {
kwargs["session"] = session;
}
GlobalModel.submitCommand("screen", null, [screen], kwargs, false);
}
lineView(sessionId: string, screenId: string, lineNum?: number) {
let screen = GlobalModel.getScreenById(sessionId, screenId);
if (screen != null && lineNum != null) {
screen.setAnchorFields(lineNum, 0, "line:view");
}
let lineNumStr = lineNum == null || lineNum == 0 ? "E" : String(lineNum);
GlobalModel.submitCommand("line", "view", [sessionId, screenId, lineNumStr], { nohist: "1" }, false);
}
lineArchive(lineArg: string, archive: boolean): Promise<CommandRtnType> {
let kwargs = { nohist: "1" };
let archiveStr = archive ? "1" : "0";
return GlobalModel.submitCommand("line", "archive", [lineArg, archiveStr], kwargs, false);
}
lineDelete(lineArg: string, interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("line", "delete", [lineArg], { nohist: "1" }, interactive);
}
lineRestart(lineArg: string, interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("line", "restart", [lineArg], { nohist: "1" }, interactive);
}
lineSet(lineArg: string, opts: { renderer?: string }): Promise<CommandRtnType> {
let kwargs = { nohist: "1" };
if ("renderer" in opts) {
kwargs["renderer"] = opts.renderer ?? "";
}
return GlobalModel.submitCommand("line", "set", [lineArg], kwargs, false);
}
createNewSession() {
GlobalModel.submitCommand("session", "open", null, { nohist: "1" }, false);
}
createNewScreen() {
GlobalModel.submitCommand("screen", "open", null, { nohist: "1" }, false);
}
closeScreen(screen: string) {
GlobalModel.submitCommand("screen", "close", [screen], { nohist: "1" }, false);
}
// include is lineIds to include, exclude is lineIds to exclude
// if include is given then it *only* does those ids. if exclude is given (or not),
// it does all running commands in the screen except for excluded.
resizeScreen(screenId: string, rows: number, cols: number, opts?: { include?: string[]; exclude?: string[] }) {
let kwargs: Record<string, string> = {
nohist: "1",
screen: screenId,
cols: String(cols),
rows: String(rows),
};
if (opts?.include != null && opts?.include.length > 0) {
kwargs.include = opts.include.join(",");
}
if (opts?.exclude != null && opts?.exclude.length > 0) {
kwargs.exclude = opts.exclude.join(",");
}
GlobalModel.submitCommand("screen", "resize", null, kwargs, false);
}
screenArchive(screenId: string, shouldArchive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand(
"screen",
"archive",
[screenId, shouldArchive ? "1" : "0"],
{ nohist: "1" },
false
);
}
screenDelete(screenId: string, interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("screen", "delete", [screenId], { nohist: "1" }, interactive);
}
screenWebShare(screenId: string, shouldShare: boolean): Promise<CommandRtnType> {
let kwargs: Record<string, string> = { nohist: "1" };
kwargs["screen"] = screenId;
return GlobalModel.submitCommand("screen", "webshare", [shouldShare ? "1" : "0"], kwargs, false);
}
showRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "show", null, { nohist: "1", remote: remoteid }, true);
}
showAllRemotes() {
GlobalModel.submitCommand("remote", "showall", null, { nohist: "1" }, true);
}
connectRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "connect", null, { nohist: "1", remote: remoteid }, true);
}
disconnectRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "disconnect", null, { nohist: "1", remote: remoteid }, true);
}
installRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "install", null, { nohist: "1", remote: remoteid }, true);
}
installCancelRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "installcancel", null, { nohist: "1", remote: remoteid }, true);
}
createRemote(cname: string, kwargsArg: Record<string, string>, interactive: boolean): Promise<CommandRtnType> {
let kwargs = Object.assign({}, kwargsArg);
kwargs["nohist"] = "1";
return GlobalModel.submitCommand("remote", "new", [cname], kwargs, interactive);
}
openCreateRemote(): void {
GlobalModel.submitCommand("remote", "new", null, { nohist: "1", visual: "1" }, true);
}
screenSetRemote(remoteArg: string, nohist: boolean, interactive: boolean): Promise<CommandRtnType> {
let kwargs = {};
if (nohist) {
kwargs["nohist"] = "1";
}
return GlobalModel.submitCommand("connect", null, [remoteArg], kwargs, interactive);
}
editRemote(remoteid: string, kwargsArg: Record<string, string>): void {
let kwargs = Object.assign({}, kwargsArg);
kwargs["nohist"] = "1";
kwargs["remote"] = remoteid;
GlobalModel.submitCommand("remote", "set", null, kwargs, true);
}
openEditRemote(remoteid: string): void {
GlobalModel.submitCommand("remote", "set", null, { remote: remoteid, nohist: "1", visual: "1" }, true);
}
archiveRemote(remoteid: string) {
GlobalModel.submitCommand("remote", "archive", null, { remote: remoteid, nohist: "1" }, true);
}
importSshConfig() {
GlobalModel.submitCommand("remote", "parse", null, { nohist: "1", visual: "1" }, true);
}
screenSelectLine(lineArg: string, focusVal?: string) {
let kwargs: Record<string, string> = {
nohist: "1",
line: lineArg,
};
if (focusVal != null) {
kwargs["focus"] = focusVal;
}
GlobalModel.submitCommand("screen", "set", null, kwargs, false);
}
screenReorder(screenId: string, index: string) {
let kwargs: Record<string, string> = {
nohist: "1",
screenId: screenId,
index: index,
};
GlobalModel.submitCommand("screen", "reorder", null, kwargs, false);
}
setTermUsedRows(termContext: RendererContext, height: number) {
let kwargs: Record<string, string> = {};
kwargs["screen"] = termContext.screenId;
kwargs["hohist"] = "1";
let posargs = [String(termContext.lineNum), String(height)];
GlobalModel.submitCommand("line", "setheight", posargs, kwargs, false);
}
screenSetAnchor(sessionId: string, screenId: string, anchorVal: string): void {
let kwargs = {
nohist: "1",
anchor: anchorVal,
session: sessionId,
screen: screenId,
};
GlobalModel.submitCommand("screen", "set", null, kwargs, false);
}
screenSetFocus(focusVal: string): void {
GlobalModel.submitCommand("screen", "set", null, { focus: focusVal, nohist: "1" }, false);
}
screenSetSettings(
screenId: string,
settings: { tabcolor?: string; tabicon?: string; name?: string; sharename?: string },
interactive: boolean
): Promise<CommandRtnType> {
let kwargs: { [key: string]: any } = Object.assign({}, settings);
kwargs["nohist"] = "1";
kwargs["screen"] = screenId;
return GlobalModel.submitCommand("screen", "set", null, kwargs, interactive);
}
sessionArchive(sessionId: string, shouldArchive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand(
"session",
"archive",
[sessionId, shouldArchive ? "1" : "0"],
{ nohist: "1" },
false
);
}
sessionDelete(sessionId: string): Promise<CommandRtnType> {
return GlobalModel.submitCommand("session", "delete", [sessionId], { nohist: "1" }, false);
}
sessionSetSettings(sessionId: string, settings: { name?: string }, interactive: boolean): Promise<CommandRtnType> {
let kwargs = Object.assign({}, settings);
kwargs["nohist"] = "1";
kwargs["session"] = sessionId;
return GlobalModel.submitCommand("session", "set", null, kwargs, interactive);
}
lineStar(lineId: string, starVal: number) {
GlobalModel.submitCommand("line", "star", [lineId, String(starVal)], { nohist: "1" }, true);
}
lineBookmark(lineId: string) {
GlobalModel.submitCommand("line", "bookmark", [lineId], { nohist: "1" }, true);
}
linePin(lineId: string, val: boolean) {
GlobalModel.submitCommand("line", "pin", [lineId, val ? "1" : "0"], { nohist: "1" }, true);
}
bookmarksView() {
GlobalModel.submitCommand("bookmarks", "show", null, { nohist: "1" }, true);
}
connectionsView() {
GlobalModel.connectionViewModel.showConnectionsView();
}
clientSettingsView() {
GlobalModel.clientSettingsViewModel.showClientSettingsView();
}
historyView(params: HistorySearchParams) {
let kwargs = { nohist: "1" };
kwargs["offset"] = String(params.offset);
kwargs["rawoffset"] = String(params.rawOffset);
if (params.searchText != null) {
kwargs["text"] = params.searchText;
}
if (params.searchSessionId != null) {
kwargs["searchsession"] = params.searchSessionId;
}
if (params.searchRemoteId != null) {
kwargs["searchremote"] = params.searchRemoteId;
}
if (params.fromTs != null) {
kwargs["fromts"] = String(params.fromTs);
}
if (params.noMeta) {
kwargs["meta"] = "0";
}
if (params.filterCmds) {
kwargs["filter"] = "1";
}
GlobalModel.submitCommand("history", "viewall", null, kwargs, true);
}
telemetryOff(interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("telemetry", "off", null, { nohist: "1" }, interactive);
}
telemetryOn(interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("telemetry", "on", null, { nohist: "1" }, interactive);
}
releaseCheckAutoOff(interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("releasecheck", "autooff", null, { nohist: "1" }, interactive);
}
releaseCheckAutoOn(interactive: boolean): Promise<CommandRtnType> {
return GlobalModel.submitCommand("releasecheck", "autoon", null, { nohist: "1" }, interactive);
}
setTermFontSize(fsize: number, interactive: boolean): Promise<CommandRtnType> {
let kwargs = {
nohist: "1",
termfontsize: String(fsize),
};
return GlobalModel.submitCommand("client", "set", null, kwargs, interactive);
}
setClientOpenAISettings(opts: { model?: string; apitoken?: string; maxtokens?: string }): Promise<CommandRtnType> {
let kwargs = {
nohist: "1",
};
if (opts.model != null) {
kwargs["openaimodel"] = opts.model;
}
if (opts.apitoken != null) {
kwargs["openaiapitoken"] = opts.apitoken;
}
if (opts.maxtokens != null) {
kwargs["openaimaxtokens"] = opts.maxtokens;
}
return GlobalModel.submitCommand("client", "set", null, kwargs, false);
}
clientAcceptTos(): void {
GlobalModel.submitCommand("client", "accepttos", null, { nohist: "1" }, true);
}
clientSetConfirmFlag(flag: string, value: boolean): Promise<CommandRtnType> {
let kwargs = { nohist: "1" };
let valueStr = value ? "1" : "0";
return GlobalModel.submitCommand("client", "setconfirmflag", [flag, valueStr], kwargs, false);
}
clientSetSidebar(width: number, collapsed: boolean): Promise<CommandRtnType> {
let kwargs = { nohist: "1", width: `${width}`, collapsed: collapsed ? "1" : "0" };
return GlobalModel.submitCommand("client", "setsidebar", null, kwargs, false);
}
editBookmark(bookmarkId: string, desc: string, cmdstr: string) {
let kwargs = {
nohist: "1",
desc: desc,
cmdstr: cmdstr,
};
GlobalModel.submitCommand("bookmark", "set", [bookmarkId], kwargs, true);
}
deleteBookmark(bookmarkId: string): void {
GlobalModel.submitCommand("bookmark", "delete", [bookmarkId], { nohist: "1" }, true);
}
openSharedSession(): void {
GlobalModel.submitCommand("session", "openshared", null, { nohist: "1" }, true);
}
setLineState(
screenId: string,
lineId: string,
state: LineStateType,
interactive: boolean
): Promise<CommandRtnType> {
let stateStr = JSON.stringify(state);
return GlobalModel.submitCommand(
"line",
"set",
[lineId],
{ screen: screenId, nohist: "1", state: stateStr },
interactive
);
}
screenSidebarAddLine(lineId: string) {
GlobalModel.submitCommand("sidebar", "add", null, { nohist: "1", line: lineId }, false);
}
screenSidebarRemove() {
GlobalModel.submitCommand("sidebar", "remove", null, { nohist: "1" }, false);
}
screenSidebarClose(): void {
GlobalModel.submitCommand("sidebar", "close", null, { nohist: "1" }, false);
}
screenSidebarOpen(width?: string): void {
let kwargs: Record<string, string> = { nohist: "1" };
if (width != null) {
kwargs.width = width;
}
GlobalModel.submitCommand("sidebar", "open", null, kwargs, false);
}
}
const GlobalModel = Model.getInstance();
const GlobalCommandRunner = CommandRunner.getInstance();
export { Model, CommandRunner, GlobalModel, GlobalCommandRunner };
export { Model };

View File

@ -5,17 +5,15 @@ import * as mobx from "mobx";
import { PluginModel } from "../plugins/plugins";
import { RendererPluginType } from "../types/types";
import { OV } from "../types/types";
import { CommandRunner } from "./model";
import { GlobalCommandRunner } from "./global";
import { Model } from "./model";
class PluginsModel {
globalCommandRunner: CommandRunner = null;
globalModel: Model = null;
selectedPlugin: OV<RendererPluginType> = mobx.observable.box(null, { name: "selectedPlugin" });
constructor(globalModel: Model) {
this.globalModel = globalModel;
this.globalCommandRunner = CommandRunner.getInstance();
}
showPluginsView(): void {

View File

@ -8,7 +8,7 @@ import { TermWrap } from "../plugins/terminal/term";
import { RemoteInputPacketType, RemoteEditType } from "../types/types";
import * as appconst from "../app/appconst";
import { OV } from "../types/types";
import { CommandRunner } from "./model";
import { GlobalCommandRunner } from "./global";
import { Model } from "./model";
import { getTermPtyData } from "../util/modelutil";
@ -16,7 +16,6 @@ const RemotePtyRows = 8; // also in main.tsx
const RemotePtyCols = 80;
class RemotesModel {
globalCommandRunner: CommandRunner;
globalModel: Model;
selectedRemoteId: OV<string> = mobx.observable.box(null, {
name: "RemotesModel-selectedRemoteId",
@ -38,7 +37,6 @@ class RemotesModel {
constructor(globalModel: Model) {
this.globalModel = globalModel;
this.globalCommandRunner = CommandRunner.getInstance();
}
get recentConnAdded(): boolean {
@ -97,7 +95,7 @@ class RemotesModel {
startEditAuth(): void {
let remoteId = this.selectedRemoteId.get();
if (remoteId != null) {
this.globalCommandRunner.openEditRemote(remoteId);
GlobalCommandRunner.openEditRemote(remoteId);
}
}

View File

@ -29,13 +29,12 @@ import * as appconst from "../app/appconst";
import { checkKeyPressed, adaptFromReactOrNativeKeyEvent } from "../util/keyutil";
import { OV } from "../types/types";
import { Model } from "./model";
import { CommandRunner } from "./model";
import { GlobalCommandRunner } from "./global";
import { Cmd } from "./cmd";
import { ScreenLines } from "./screenlines";
import { getTermPtyData } from "../util/modelutil";
class Screen {
globalCommandRunner: CommandRunner;
globalModel: Model;
sessionId: string;
screenId: string;
@ -64,7 +63,6 @@ class Screen {
constructor(sdata: ScreenDataType, globalModel: Model) {
this.globalModel = globalModel;
this.globalCommandRunner = CommandRunner.getInstance();
this.sessionId = sdata.sessionid;
this.screenId = sdata.screenid;
this.name = mobx.observable.box(sdata.name, { name: "screen-name" });
@ -285,7 +283,7 @@ class Screen {
setAnchor(anchorLine: number, anchorOffset: number): void {
let setVal = anchorLine == null || anchorLine == 0 ? "0" : sprintf("%d:%d", anchorLine, anchorOffset);
this.globalCommandRunner.screenSetAnchor(this.sessionId, this.screenId, setVal);
GlobalCommandRunner.screenSetAnchor(this.sessionId, this.screenId, setVal);
}
getAnchor(): { anchorLine: number; anchorOffset: number } {
@ -470,7 +468,7 @@ class Screen {
exclude.push(lineid);
}
}
this.globalCommandRunner.resizeScreen(this.screenId, rows, cols, { exclude });
GlobalCommandRunner.resizeScreen(this.screenId, rows, cols, { exclude });
}
getTermWrap(lineId: string): TermWrap {
@ -488,9 +486,9 @@ class Screen {
setLineFocus(lineNum: number, focus: boolean): void {
mobx.action(() => this.termLineNumFocus.set(focus ? lineNum : 0))();
if (focus && this.selectedLine.get() != lineNum) {
this.globalCommandRunner.screenSelectLine(String(lineNum), "cmd");
GlobalCommandRunner.screenSelectLine(String(lineNum), "cmd");
} else if (focus && this.focusType.get() == "input") {
this.globalCommandRunner.screenSetFocus("cmd");
GlobalCommandRunner.screenSetFocus("cmd");
}
}

View File

@ -1,5 +1,5 @@
import { sprintf } from "sprintf-js";
import { GlobalModel } from "../models/model";
import { GlobalModel } from "../models";
import { RemotePtrType, FeCmdPacketType, PtyDataType, TermContextUnion } from "../types/types";
import { isBlank } from "./util";