diff --git a/app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/api/server/usecase/ConnectToServerUseCase.kt b/app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/api/server/usecase/ToggleServerConnectionUseCase.kt similarity index 59% rename from app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/api/server/usecase/ConnectToServerUseCase.kt rename to app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/api/server/usecase/ToggleServerConnectionUseCase.kt index 5e69178..fe15d5e 100644 --- a/app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/api/server/usecase/ConnectToServerUseCase.kt +++ b/app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/api/server/usecase/ToggleServerConnectionUseCase.kt @@ -3,15 +3,20 @@ package com.mooncloak.vpn.app.shared.api.server.usecase import com.mooncloak.kodetools.konstruct.annotations.Inject import com.mooncloak.vpn.api.shared.server.Server import com.mooncloak.vpn.api.shared.vpn.VPNConnectionManager +import com.mooncloak.vpn.api.shared.vpn.connectedTo import com.mooncloak.vpn.app.shared.di.PresentationScoped @PresentationScoped -public class ConnectToServerUseCase @Inject public constructor( +public class ToggleServerConnectionUseCase @Inject public constructor( private val vpnConnectionManager: VPNConnectionManager ) { public suspend operator fun invoke(server: Server): Boolean { - vpnConnectionManager.connect(server) + if (vpnConnectionManager.connection.value.connectedTo(server)) { + vpnConnectionManager.disconnect() + } else { + vpnConnectionManager.connect(server) + } return true } diff --git a/app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/feature/country/CountryListViewModel.kt b/app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/feature/country/CountryListViewModel.kt index c4a402a..a1b9313 100644 --- a/app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/feature/country/CountryListViewModel.kt +++ b/app-shared/src/commonMain/kotlin/com/mooncloak/vpn/app/shared/feature/country/CountryListViewModel.kt @@ -14,7 +14,7 @@ import com.mooncloak.vpn.api.shared.location.RegionDetails import com.mooncloak.vpn.api.shared.server.Server import com.mooncloak.vpn.api.shared.vpn.VPNConnectionManager import com.mooncloak.vpn.app.shared.api.server.usecase.ConnectToServerInLocationCodeUseCase -import com.mooncloak.vpn.app.shared.api.server.usecase.ConnectToServerUseCase +import com.mooncloak.vpn.app.shared.api.server.usecase.ToggleServerConnectionUseCase import com.mooncloak.vpn.app.shared.api.service.ServiceSubscriptionFlowProvider import com.mooncloak.vpn.app.shared.di.FeatureScoped import com.mooncloak.vpn.app.shared.feature.country.model.CountryListLayoutStateModel @@ -41,7 +41,7 @@ import org.jetbrains.compose.resources.getString public class CountryListViewModel @Inject public constructor( private val getCountryPage: GetCountryPageUseCase, private val getServerPage: GetServerPageUseCase, - private val connectToServer: ConnectToServerUseCase, + private val connectToServer: ToggleServerConnectionUseCase, private val connectToServerInLocationCode: ConnectToServerInLocationCodeUseCase, private val serverConnectionManager: VPNConnectionManager, private val getServiceSubscriptionFlow: ServiceSubscriptionFlowProvider