diff options
| author | Kalle Lindström <karl.lindstrom@mullvad.net> | 2025-07-08 09:43:09 +0200 |
|---|---|---|
| committer | Kalle Lindström <karl.lindstrom@mullvad.net> | 2025-07-10 14:20:34 +0200 |
| commit | d645ba1732d952c4edb80e92f6b04552b3b4710d (patch) | |
| tree | ee7b5e880e26017700597d5341f18141b57b8f12 /android/lib | |
| parent | d8aa781b2058e1b89ebb367b09b82327ddfcd15f (diff) | |
| download | mullvadvpn-d645ba1732d952c4edb80e92f6b04552b3b4710d.tar.xz mullvadvpn-d645ba1732d952c4edb80e92f6b04552b3b4710d.zip | |
Implement recents support in daemon
Diffstat (limited to 'android/lib')
3 files changed, 41 insertions, 3 deletions
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt index f3037a8c1a..6c8544950f 100644 --- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt +++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt @@ -9,6 +9,7 @@ import java.time.Instant import java.time.ZoneId import java.util.UUID import mullvad_daemon.management_interface.ManagementInterface +import mullvad_daemon.management_interface.recentsOrNull import net.mullvad.mullvadvpn.lib.daemon.grpc.GrpcConnectivityState import net.mullvad.mullvadvpn.lib.daemon.grpc.RelayNameComparator import net.mullvad.mullvadvpn.lib.model.AccountData @@ -56,6 +57,8 @@ import net.mullvad.mullvadvpn.lib.model.PortRange import net.mullvad.mullvadvpn.lib.model.ProviderId import net.mullvad.mullvadvpn.lib.model.Providers import net.mullvad.mullvadvpn.lib.model.QuantumResistantState +import net.mullvad.mullvadvpn.lib.model.Recent +import net.mullvad.mullvadvpn.lib.model.Recents import net.mullvad.mullvadvpn.lib.model.RedeemVoucherSuccess import net.mullvad.mullvadvpn.lib.model.RelayConstraints import net.mullvad.mullvadvpn.lib.model.RelayItem @@ -324,6 +327,7 @@ internal fun ManagementInterface.Settings.toDomain(): Settings = showBetaReleases = showBetaReleases, splitTunnelSettings = splitTunnel.toDomain(), apiAccessMethodSettings = apiAccessMethods.toDomain(), + recents = recentsOrNull.toDomain(), ) internal fun ManagementInterface.RelayOverride.toDomain(): RelayOverride = @@ -351,14 +355,13 @@ internal fun ManagementInterface.NormalRelaySettings.toDomain(): RelayConstraint wireguardConstraints = wireguardConstraints.toDomain(), ) -internal fun ManagementInterface.LocationConstraint.toDomain(): Constraint<RelayItemId> = +internal fun ManagementInterface.LocationConstraint.toDomain(): Constraint.Only<RelayItemId> = when (typeCase) { ManagementInterface.LocationConstraint.TypeCase.CUSTOM_LIST -> Constraint.Only(CustomListId(customList)) ManagementInterface.LocationConstraint.TypeCase.LOCATION -> Constraint.Only(location.toDomain()) - ManagementInterface.LocationConstraint.TypeCase.TYPE_NOT_SET -> Constraint.Any - else -> throw IllegalArgumentException("Location constraint type is null") + else -> throw IllegalArgumentException("Invalid location constraint") } @Suppress("ReturnCount") @@ -727,3 +730,24 @@ internal fun ManagementInterface.IpVersion.toDomain() = ManagementInterface.IpVersion.V6 -> IpVersion.IPV6 ManagementInterface.IpVersion.UNRECOGNIZED -> error("Not supported ${this.name}") } + +internal fun ManagementInterface.Recents?.toDomain(): Recents = + if (this != null) { + Recents.Enabled(recentsList.map { it.toDomain() }) + } else { + Recents.Disabled + } + +internal fun ManagementInterface.Recent.toDomain(): Recent = + when (typeCase) { + ManagementInterface.Recent.TypeCase.MULTIHOP -> + Recent.Multihop( + entry = multihop.entry.toDomain().value, + exit = multihop.exit.toDomain().value, + ) + + ManagementInterface.Recent.TypeCase.SINGLEHOP -> + Recent.Singlehop(singlehop.toDomain().value) + + ManagementInterface.Recent.TypeCase.TYPE_NOT_SET -> error("Recent type must be set") + } diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Recents.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Recents.kt new file mode 100644 index 0000000000..3ed1a97077 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Recents.kt @@ -0,0 +1,13 @@ +package net.mullvad.mullvadvpn.lib.model + +sealed interface Recents { + data object Disabled : Recents + + data class Enabled(val recents: List<Recent>) : Recents +} + +sealed interface Recent { + data class Singlehop(val location: RelayItemId) : Recent + + data class Multihop(val entry: RelayItemId, val exit: RelayItemId) : Recent +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt index 99e8a2b8dc..253b4d3a74 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt @@ -13,6 +13,7 @@ data class Settings( val showBetaReleases: Boolean, val splitTunnelSettings: SplitTunnelSettings, val apiAccessMethodSettings: List<ApiAccessMethodSetting>, + val recents: Recents, ) { companion object } |
