From 5399283666da8fb22e3f3c70f5604f964a01c27f Mon Sep 17 00:00:00 2001 From: sawka Date: Mon, 27 Mar 2023 12:32:26 -0700 Subject: [PATCH] fix remote update bug, add 'connect now' button for disconnected remotes --- src/linecomps.tsx | 10 +++++++--- src/main.tsx | 13 ++++++++++++- src/model.ts | 14 +++++++++++++- src/sh2.less | 26 +++++++++++++++++++++++++- src/types.ts | 5 +++-- 5 files changed, 60 insertions(+), 8 deletions(-) diff --git a/src/linecomps.tsx b/src/linecomps.tsx index 8df7e9de..8e682064 100644 --- a/src/linecomps.tsx +++ b/src/linecomps.tsx @@ -593,16 +593,20 @@ class Prompt extends React.Component<{rptr : RemotePtrType, festate : FeStateTyp isRoot = true; } } - let colorClass = (isRoot ? "color-red" : "color-green"); + let remoteColorClass = (isRoot ? "color-red" : "color-green"); if (remote && remote.remoteopts && remote.remoteopts.color) { - colorClass = "color-" + remote.remoteopts.color; + remoteColorClass = "color-" + remote.remoteopts.color; } // TESTING cwd shortening with triple colon character // if (cwd.startsWith("~/work/gopath/src/github.com/scripthaus-dev")) { // cwd = cwd.replace("~/work/gopath/src/github.com/scripthaus-dev", "\u22EEscripthaus-dev"); // } + let remoteTitle : string = null; + if (remote && remote.remotecanonicalname) { + remoteTitle = "connected to " + remote.remotecanonicalname; + } return ( - [{remoteStr}] {cwd} {isRoot ? "#" : "$"} + [{remoteStr}] {cwd} {isRoot ? "#" : "$"} ); } } diff --git a/src/main.tsx b/src/main.tsx index 9aa30187..6c1b692d 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1587,6 +1587,11 @@ class CmdInput extends React.Component<{}, {}> { inputModel.openHistory(); } } + + @boundMethod + clickConnectRemote(remoteId : string) : void { + GlobalCommandRunner.connectRemote(remoteId); + } render() { let model = GlobalModel; @@ -1627,6 +1632,12 @@ class CmdInput extends React.Component<{}, {}> { + +
+ WARNING: [{GlobalModel.resolveRemoteIdToFullRef(remote.remoteid)}] is {remote.status} +
this.clickConnectRemote(remote.remoteid)}>connect now
+
+
@@ -2475,7 +2486,7 @@ function getConnVal(r : RemoteType) : number { if (r.status == "connected") { return 1; } - if (r.status == "init" || r.status == "disconnected") { + if (r.status == "disconnected") { return 2; } if (r.status == "error") { diff --git a/src/model.ts b/src/model.ts index 2dedbc98..5a79adb1 100644 --- a/src/model.ts +++ b/src/model.ts @@ -356,10 +356,11 @@ class Screen { let oldSelectedLine = this.selectedLine.get(); let oldFocusType = this.focusType.get(); this.selectedLine.set(data.selectedline); + this.curRemote.set(data.curremote); this.focusType.set(data.focustype); this.refocusLine(data, oldFocusType, oldSelectedLine); this.shareMode.set(data.sharemode); - this.webShareOpts.set(data.webshreopts); + this.webShareOpts.set(data.webshareopts); // do not update anchorLine/anchorOffset (only stored) })(); } @@ -3199,6 +3200,17 @@ class Model { } return remote.remotecanonicalname; } + + resolveRemoteIdToFullRef(remoteId : string) { + let remote = this.getRemote(remoteId) + if (remote == null) { + return "[unknown]"; + } + if (!isBlank(remote.remotealias)) { + return remote.remotealias + " (" + remote.remotecanonicalname + ")"; + } + return remote.remotecanonicalname; + } } class CommandRunner { diff --git a/src/sh2.less b/src/sh2.less index e2d9fc8c..80675932 100644 --- a/src/sh2.less +++ b/src/sh2.less @@ -1845,6 +1845,22 @@ body .xterm .xterm-viewport { max-height: max(300px, 70%); } + .remote-status-warning { + display: flex; + flex-direction: row; + color: @term-yellow; + align-items: center; + font-size: 14px; + + .button { + margin-left: 10px; + } + + .remote-name { + .mono-font(14px) + } + } + .input-minmax-control { position: absolute; top: 5px; @@ -2268,7 +2284,7 @@ input[type=checkbox] { color: @term-bright-red; } -#main .term-prompt { +#main .term-prompt-remote { color: @term-bright-green; &.color-green { @@ -2304,6 +2320,14 @@ input[type=checkbox] { } } +#main .term-prompt-cwd { + color: @term-bright-green; +} + +#main .term-prompt-end { + color: @term-bright-blue; +} + #main .screen-tabs .screen-tab { &.color-green { color: @tab-black-text; diff --git a/src/types.ts b/src/types.ts index 0451d69c..f2712c98 100644 --- a/src/types.ts +++ b/src/types.ts @@ -4,6 +4,7 @@ import * as mobx from "mobx"; type ShareModeType = "local" | "web"; type FocusTypeStrs = "input"|"cmd"|"cmd-fg"; type HistoryTypeStrs = "global" | "session" | "screen"; +type RemoteStatusTypeStrs = "connected" | "connecting" | "disconnected" | "error"; type OV = mobx.IObservableValue; @@ -83,7 +84,7 @@ type RemoteType = { remotealias : string, remotecanonicalname : string, remotevars : Record, - status : string, + status : RemoteStatusTypeStrs, errorstr : string, installstatus : string, installerrorstr : string, @@ -481,4 +482,4 @@ type HistorySearchParams = { type RenderModeType = "normal" | "collapsed"; -export type {SessionDataType, LineType, RemoteType, RemoteStateType, RemoteInstanceType, HistoryItem, CmdRemoteStateType, FeCmdPacketType, TermOptsType, CmdStartPacketType, CmdDataType, ScreenDataType, ScreenOptsType, PtyDataUpdateType, ModelUpdateType, UpdateMessage, InfoType, CmdLineUpdateType, RemotePtrType, UIContextType, HistoryInfoType, HistoryQueryOpts, WatchScreenPacketType, TermWinSize, FeInputPacketType, RemoteInputPacketType, RemoteEditType, FeStateType, ContextMenuOpts, RendererContext, WindowSize, RendererModel, PtyDataType, BookmarkType, ClientDataType, PlaybookType, PlaybookEntryType, HistoryViewDataType, RenderModeType, AlertMessageType, HistorySearchParams, ScreenLinesType, FocusTypeStrs, HistoryTypeStrs, RendererOpts, RendererPluginType, SimpleBlobRendererComponent, RendererModelContainerApi, RendererModelInitializeParams, RendererOptsUpdate, ClientMigrationInfo, WebShareOpts}; +export type {SessionDataType, LineType, RemoteType, RemoteStateType, RemoteInstanceType, HistoryItem, CmdRemoteStateType, FeCmdPacketType, TermOptsType, CmdStartPacketType, CmdDataType, ScreenDataType, ScreenOptsType, PtyDataUpdateType, ModelUpdateType, UpdateMessage, InfoType, CmdLineUpdateType, RemotePtrType, UIContextType, HistoryInfoType, HistoryQueryOpts, WatchScreenPacketType, TermWinSize, FeInputPacketType, RemoteInputPacketType, RemoteEditType, FeStateType, ContextMenuOpts, RendererContext, WindowSize, RendererModel, PtyDataType, BookmarkType, ClientDataType, PlaybookType, PlaybookEntryType, HistoryViewDataType, RenderModeType, AlertMessageType, HistorySearchParams, ScreenLinesType, FocusTypeStrs, HistoryTypeStrs, RendererOpts, RendererPluginType, SimpleBlobRendererComponent, RendererModelContainerApi, RendererModelInitializeParams, RendererOptsUpdate, ClientMigrationInfo, WebShareOpts, RemoteStatusTypeStrs};