diff --git a/app/src/main/java/net/nymtech/nymvpn/ui/AppViewModel.kt b/app/src/main/java/net/nymtech/nymvpn/ui/AppViewModel.kt index f48d5ec..777fd18 100644 --- a/app/src/main/java/net/nymtech/nymvpn/ui/AppViewModel.kt +++ b/app/src/main/java/net/nymtech/nymvpn/ui/AppViewModel.kt @@ -86,11 +86,13 @@ constructor( AppUiState(), ) - private fun setCredentialExpiry(instant: Instant) { - _uiState.update { - it.copy( - credentialExpiryTime = instant, - ) + private fun setCredentialExpiry(instant: Instant?) { + instant?.let { + _uiState.update { + it.copy( + credentialExpiryTime = instant, + ) + } } } @@ -102,7 +104,7 @@ constructor( } } - suspend fun onValidCredentialCheck(): Result { + suspend fun onValidCredentialCheck(): Result { return withContext(viewModelScope.coroutineContext) { val credential = secretsRepository.get().getCredential() if (credential != null) { @@ -113,7 +115,7 @@ constructor( } } - private suspend fun getCredentialExpiry(credential: String): Result { + private suspend fun getCredentialExpiry(credential: String): Result { return vpnClient.get().validateCredential(credential).onFailure { return Result.failure(NymVpnExceptions.InvalidCredentialException()) } diff --git a/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/credential/CredentialViewModel.kt b/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/credential/CredentialViewModel.kt index 7cb7278..df8aee6 100644 --- a/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/credential/CredentialViewModel.kt +++ b/app/src/main/java/net/nymtech/nymvpn/ui/screens/settings/credential/CredentialViewModel.kt @@ -19,7 +19,7 @@ constructor( private val vpnClient: Provider, ) : ViewModel() { - suspend fun onImportCredential(credential: String): Result { + suspend fun onImportCredential(credential: String): Result { val trimmedCred = credential.trim() return withContext(viewModelScope.coroutineContext) { vpnClient.get().validateCredential(trimmedCred).onSuccess { diff --git a/logcat_helper/src/main/java/net/nymtech/logcathelper/LogcatHelper.kt b/logcat_helper/src/main/java/net/nymtech/logcathelper/LogcatHelper.kt index 3e6ee15..77ee154 100644 --- a/logcat_helper/src/main/java/net/nymtech/logcathelper/LogcatHelper.kt +++ b/logcat_helper/src/main/java/net/nymtech/logcathelper/LogcatHelper.kt @@ -104,19 +104,21 @@ object LogcatHelper { val outputFilePath = Paths.get(outputFile.absolutePath) val logcatPath = Paths.get(sourceDir) - Files.list(logcatPath) - .sorted { o1, o2 -> + Files.list(logcatPath).use { + it.sorted { o1, o2 -> Files.getLastModifiedTime(o1).compareTo(Files.getLastModifiedTime(o2)) } - .flatMap(Files::lines) - .forEach { line -> - Files.write( - outputFilePath, - (line + System.lineSeparator()).toByteArray(), - StandardOpenOption.CREATE, - StandardOpenOption.APPEND, - ) - } + .flatMap(Files::lines).use { lines -> + lines.forEach { line -> + Files.write( + outputFilePath, + (line + System.lineSeparator()).toByteArray(), + StandardOpenOption.CREATE, + StandardOpenOption.APPEND, + ) + } + } + } } override suspend fun getLogFile(): Result { diff --git a/nym_vpn_client/src/main/java/net/nymtech/vpn/NymVpnClient.kt b/nym_vpn_client/src/main/java/net/nymtech/vpn/NymVpnClient.kt index 7f394a7..ccd97f0 100644 --- a/nym_vpn_client/src/main/java/net/nymtech/vpn/NymVpnClient.kt +++ b/nym_vpn_client/src/main/java/net/nymtech/vpn/NymVpnClient.kt @@ -80,7 +80,7 @@ object NymVpnClient { private val _state = MutableStateFlow(VpnClientState()) override val stateFlow: Flow = _state.asStateFlow() - override suspend fun validateCredential(credential: String): Result { + override suspend fun validateCredential(credential: String): Result { return withContext(ioDispatcher) { try { val expiry = checkCredential(credential) diff --git a/nym_vpn_client/src/main/java/net/nymtech/vpn/VpnClient.kt b/nym_vpn_client/src/main/java/net/nymtech/vpn/VpnClient.kt index f545d1a..cc71205 100644 --- a/nym_vpn_client/src/main/java/net/nymtech/vpn/VpnClient.kt +++ b/nym_vpn_client/src/main/java/net/nymtech/vpn/VpnClient.kt @@ -16,7 +16,7 @@ interface VpnClient { var exitPoint: ExitPoint var mode: VpnMode - suspend fun validateCredential(credential: String): Result + suspend fun validateCredential(credential: String): Result @Throws(InvalidCredentialException::class) suspend fun start(context: Context, credential: String, foreground: Boolean = false): Result diff --git a/nym_vpn_client/src/main/java/net/nymtech/vpn/nym_vpn_lib/nym_vpn_lib.kt b/nym_vpn_client/src/main/java/net/nymtech/vpn/nym_vpn_lib/nym_vpn_lib.kt index 3b83e15..d19f4e2 100644 --- a/nym_vpn_client/src/main/java/net/nymtech/vpn/nym_vpn_lib/nym_vpn_lib.kt +++ b/nym_vpn_client/src/main/java/net/nymtech/vpn/nym_vpn_lib/nym_vpn_lib.kt @@ -872,7 +872,7 @@ private fun uniffiCheckContractApiVersion(lib: UniffiLib) { @Suppress("UNUSED_PARAMETER") private fun uniffiCheckApiChecksums(lib: UniffiLib) { - if (lib.uniffi_nym_vpn_lib_checksum_func_checkcredential() != 44396.toShort()) { + if (lib.uniffi_nym_vpn_lib_checksum_func_checkcredential() != 2527.toShort()) { throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } if (lib.uniffi_nym_vpn_lib_checksum_func_getgatewaycountries() != 4475.toShort()) { @@ -1576,6 +1576,35 @@ public object FfiConverterOptionalDouble: FfiConverterRustBuffer +public object FfiConverterOptionalTimestamp: FfiConverterRustBuffer { + override fun read(buf: ByteBuffer): java.time.Instant? { + if (buf.get().toInt() == 0) { + return null + } + return FfiConverterTimestamp.read(buf) + } + + override fun allocationSize(value: java.time.Instant?): ULong { + if (value == null) { + return 1UL + } else { + return 1UL + FfiConverterTimestamp.allocationSize(value) + } + } + + override fun write(value: java.time.Instant?, buf: ByteBuffer) { + if (value == null) { + buf.put(0) + } else { + buf.put(1) + FfiConverterTimestamp.write(value, buf) + } + } +} + + + + public object FfiConverterOptionalTypePathBuf: FfiConverterRustBuffer { override fun read(buf: ByteBuffer): PathBuf? { if (buf.get().toInt() == 0) { @@ -1725,8 +1754,8 @@ public object FfiConverterTypeUrl: FfiConverter { FfiConverterString.write(builtinValue, buf) } } - @Throws(FfiException::class) fun `checkCredential`(`credential`: kotlin.String): java.time.Instant { - return FfiConverterTimestamp.lift( + @Throws(FfiException::class) fun `checkCredential`(`credential`: kotlin.String): java.time.Instant? { + return FfiConverterOptionalTimestamp.lift( uniffiRustCallWithError(FfiException) { _status -> UniffiLib.INSTANCE.uniffi_nym_vpn_lib_fn_func_checkcredential( FfiConverterString.lower(`credential`),_status) diff --git a/nym_vpn_client/src/main/scripts/build-libs.sh b/nym_vpn_client/src/main/scripts/build-libs.sh index 63aa574..23bd48a 100644 --- a/nym_vpn_client/src/main/scripts/build-libs.sh +++ b/nym_vpn_client/src/main/scripts/build-libs.sh @@ -11,9 +11,10 @@ export NDK_TOOLCHAIN_DIR="$1/toolchains/llvm/prebuilt/${archDir}/bin" bash $PWD/src/tools/nym-vpn-client/wireguard/build-wireguard-go.sh bash $PWD/src/tools/nym-vpn-client/wireguard/libwg/build-android.sh echo "Building nym-vpn-lib dep" +export RUSTFLAGS="-L $PWD/src/tools/nym-vpn-client/build/lib/aarch64-linux-android" #fix emulators later #(cd $PWD/src/tools/nym-vpn-client/nym-vpn-lib; cargo ndk -t armeabi-v7a -t arm64-v8a -t i686-linux-android -t x86_64-linux-android -o ../../../main/jniLibs build --release) -(cd $PWD/src/tools/nym-vpn-client/nym-vpn-lib; cargo ndk -t arm64-v8a -o ../../../main/jniLibs build --release) +(cd $PWD/src/tools/nym-vpn-client/nym-vpn-core/nym-vpn-lib; cargo ndk -t arm64-v8a -o ../../../../main/jniLibs build --release) #mv wireguard case "$(uname -s)" in @@ -22,9 +23,7 @@ case "$(uname -s)" in MINGW*|MSYS_NT*) export RUSTFLAGS="-L ${PWD}/src/tools/nym-vpn-client/build/lib/x86_64-pc-windows-msvc";; esac -(cd $PWD/src/tools/nym-vpn-client; cargo run --bin uniffi-bindgen generate --library ./target/aarch64-linux-android/release/libnym_vpn_lib.so --language kotlin --out-dir ../../main/java/net/nymtech/vpn -n) -#fix package name -sed -i 's/package nym-vpn-lib;/package nym_vpn_lib;/g' $PWD/src/main/java/net/nymtech/vpn/nym-vpn-lib/nym_vpn_lib.kt +(cd $PWD/src/tools/nym-vpn-client/nym-vpn-core; cargo run --bin uniffi-bindgen generate --library ./target/aarch64-linux-android/release/libnym_vpn_lib.so --language kotlin --out-dir ../../../main/java/net/nymtech/vpn -n) mv $PWD/src/main/jniLibs/arm64-v8a/libnym_vpn_lib.so $PWD/src/main/jniLibs/arm64-v8a/libnym_vpn_lib.so #mv $PWD/src/main/jniLibs/armeabi-v7a/libnym_vpn_lib.so $PWD/src/main/jniLibs/armeabi-v7a/libnym_vpn_lib.so