@@ -46,6 +46,7 @@ import top.yukonga.miuix.kmp.basic.MiuixScrollBehavior
4646import top.yukonga.miuix.kmp.basic.Scaffold
4747import ui.layout.pageContentPaddingWithCutout
4848import ui.layout.pageListPadding
49+ import ui.text.formatTemplate
4950
5051private const val ProxyServerEditResultKey = " proxy-server-edit-result"
5152
@@ -146,6 +147,54 @@ fun ProxyServerListPage(
146147 )
147148 }
148149
150+ fun deleteProxyServer (server : ProxyServerState ) {
151+ runProxyServiceOperation {
152+ when (val stopResult = proxyServiceUseCase.stop(stateStore.state.value.runMode)) {
153+ is ProxyServiceResult .Success -> {
154+ val remarks = server.server.getInfo().remarks
155+ var deleted = false
156+ var nextSelectedServerId = stateStore.state.value.selectedProxyServerId
157+ updateAppState { state ->
158+ val nextServers = state.proxyServers.filterNot { it.id == server.id }
159+ if (nextServers.size == state.proxyServers.size) {
160+ state.copy(
161+ proxyRunning = stopResult.proxyRunning,
162+ localProxyPort = stopResult.appState?.localProxyPort ? : state.localProxyPort,
163+ )
164+ } else {
165+ deleted = true
166+ val selectedProxyServerId = if (state.selectedProxyServerId == server.id) {
167+ nextServers.firstOrNull()?.id ? : state.selectedProxyServerId
168+ } else {
169+ state.selectedProxyServerId
170+ }
171+ nextSelectedServerId = selectedProxyServerId
172+ state.copy(
173+ proxyServers = nextServers,
174+ selectedProxyServerId = selectedProxyServerId,
175+ proxyRunning = stopResult.proxyRunning,
176+ localProxyPort = stopResult.appState?.localProxyPort ? : state.localProxyPort,
177+ )
178+ }
179+ }
180+ selectedServerId = nextSelectedServerId
181+ if (deleted) {
182+ tipNotifier.show(messages.deletedTemplate.formatTemplate(" name" to remarks))
183+ }
184+ }
185+
186+ ProxyServiceResult .MissingServer -> {
187+ tipNotifier.show(messages.selectServerFirst)
188+ }
189+
190+ is ProxyServiceResult .Failed -> {
191+ updateAppState { state -> state.copy(proxyRunning = false ) }
192+ tipNotifier.showError(stopResult.error, messages.serviceStopped)
193+ }
194+ }
195+ }
196+ }
197+
149198 ProxyServerEditResultHandler (
150199 navigator = navigator,
151200 resultKey = ProxyServerEditResultKey ,
@@ -273,6 +322,7 @@ fun ProxyServerListPage(
273322 messages = messages,
274323 resultKey = ProxyServerEditResultKey ,
275324 onSelectedServerIdChange = { selectedServerId = it },
325+ onDeleteServer = ::deleteProxyServer,
276326 )
277327 ProxyServerListFloatingToolbar (
278328 running = proxyRunning,
0 commit comments