Skip to content

Commit 452d655

Browse files
author
linyuan.yang
committed
up
1 parent 707aee4 commit 452d655

6 files changed

Lines changed: 53 additions & 10 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
/.claude
33
/*.tar
44
/.sbot
5-
dev-dist
5+
dev-dist
6+
tsconfig.tsbuildinfo

packages/app/src/App.vue

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ const remotes = ref<RemoteEntry[]>(loadRemotes())
2727
const phase = ref<'server-pick' | 'chat'>('server-pick')
2828
const transport = ref<WebSocketTransport | null>(null)
2929
const currentBaseUrl = ref('')
30+
const connectError = ref('')
31+
const connecting = ref(false)
3032
3133
const themeMode = ref<ThemeMode>(((): ThemeMode => {
3234
const v = localStorage.getItem(THEME_KEY)
@@ -56,15 +58,28 @@ function onSystemChange() {
5658
onMounted(() => mq.addEventListener('change', onSystemChange))
5759
onUnmounted(() => mq.removeEventListener('change', onSystemChange))
5860
59-
function selectServer(baseUrl: string) {
60-
transport.value = new WebSocketTransport(baseUrl)
61-
currentBaseUrl.value = baseUrl
62-
phase.value = 'chat'
61+
async function selectServer(baseUrl: string) {
62+
if (connecting.value) return
63+
connectError.value = ''
64+
connecting.value = true
65+
const nextTransport = new WebSocketTransport(baseUrl)
66+
try {
67+
await nextTransport.getSettings()
68+
transport.value = nextTransport
69+
currentBaseUrl.value = baseUrl
70+
phase.value = 'chat'
71+
} catch {
72+
nextTransport.disconnect()
73+
connectError.value = `无法连接服务器 ${baseUrl}`
74+
} finally {
75+
connecting.value = false
76+
}
6377
}
6478
6579
function switchServer() {
6680
transport.value?.disconnect()
6781
transport.value = null
82+
connectError.value = ''
6883
phase.value = 'server-pick'
6984
}
7085
@@ -108,6 +123,8 @@ function removeRemote(index: number) {
108123
</div>
109124

110125
<template v-if="phase === 'server-pick'">
126+
<div v-if="connectError" class="desktop-connect-error">{{ connectError }}</div>
127+
<div v-if="connecting" class="desktop-connect-status">正在连接服务器...</div>
111128
<ServerPicker
112129
:remotes="remotes"
113130
@select-local="selectLocal"
@@ -183,4 +200,22 @@ body {
183200
right: 12px;
184201
z-index: 10;
185202
}
203+
.desktop-connect-error,
204+
.desktop-connect-status {
205+
padding: 8px 12px;
206+
margin: 8px 12px 0;
207+
border-radius: 4px;
208+
font-size: 12px;
209+
flex-shrink: 0;
210+
}
211+
.desktop-connect-error {
212+
color: var(--chatui-btn-danger, #d14343);
213+
background: var(--chatui-bg-surface);
214+
border: 1px solid var(--chatui-btn-danger, #d14343);
215+
}
216+
.desktop-connect-status {
217+
color: var(--chatui-fg-secondary);
218+
background: var(--chatui-bg-surface);
219+
border: 1px solid var(--chatui-border);
220+
}
186221
</style>

packages/app/tsconfig.tsbuildinfo

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/vscode-extension/package.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,16 @@
3131
"key": "ctrl+shift+b",
3232
"mac": "cmd+shift+b"
3333
}
34-
]
34+
],
35+
"menus": {
36+
"editor/title": [
37+
{
38+
"command": "sbot.openChat",
39+
"group": "navigation@100",
40+
"when": "resourceScheme == file || resourceScheme == untitled"
41+
}
42+
]
43+
}
3544
},
3645
"scripts": {
3746
"build": "pnpm run build:ext && pnpm run build:webview",

packages/vscode-extension/src/ChatViewProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class ChatPanel {
3838
this.panel = vscode.window.createWebviewPanel(
3939
ChatPanel.viewType,
4040
'sbot Chat',
41-
vscode.ViewColumn.One,
41+
vscode.ViewColumn.Beside,
4242
{
4343
enableScripts: true,
4444
retainContextWhenHidden: true,
@@ -57,7 +57,7 @@ export class ChatPanel {
5757

5858
static createOrShow(extensionUri: vscode.Uri, context: vscode.ExtensionContext): ChatPanel {
5959
if (ChatPanel.instance) {
60-
ChatPanel.instance.panel.reveal(vscode.ViewColumn.One);
60+
ChatPanel.instance.panel.reveal(vscode.ViewColumn.Beside);
6161
return ChatPanel.instance;
6262
}
6363
ChatPanel.instance = new ChatPanel(extensionUri, context);

packages/vscode-extension/tsconfig.tsbuildinfo

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)