From a911134636c67c725b81b169a39a2a34e4a6a239 Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 11 Aug 2023 23:32:31 +0200 Subject: [PATCH] Update rust sdk to 0.1.42 (changes in tracing and sync apis) (#1055) * Update rust sdk to 0.1.42 (changes in tracing and sync apis) * Fix sample compilation --------- Co-authored-by: ganfra --- .../android/appnav/LoggedInFlowNode.kt | 4 +++- gradle/libs.versions.toml | 2 +- .../libraries/matrix/api/sync/SyncService.kt | 2 +- .../matrix/impl/sync/RustSyncService.kt | 4 ++-- .../matrix/impl/tracing/LogEventLocation.kt | 8 +++----- .../matrix/impl/tracing/RustTracingService.kt | 7 ++++--- .../matrix/impl/tracing/RustTracingTree.kt | 9 ++++++--- .../matrix/test/sync/FakeSyncService.kt | 2 +- .../android/samples/minimal/RoomListScreen.kt | 4 +++- .../android/samples/minimal/Singleton.kt | 19 ++++++++++++++++++- 10 files changed, 42 insertions(+), 19 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 1355035577..7943151a5e 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -141,7 +141,9 @@ class LoggedInFlowNode @AssistedInject constructor( }, onStop = { //Counterpart startSync is done in observeSyncStateAndNetworkStatus method. - syncService.stopSync() + coroutineScope.launch { + syncService.stopSync() + } }, onDestroy = { plugins().forEach { it.onFlowReleased(id, inputs.matrixClient) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7f3540a2e8..97717de05d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -145,7 +145,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" } appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" } timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.41" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.42" sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" } sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" } sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncService.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncService.kt index 5271ec9bc0..994b35edc4 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncService.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncService.kt @@ -27,7 +27,7 @@ interface SyncService { /** * Tries to stop the sync. If service is not syncing it has no effect. */ - fun stopSync(): Result + suspend fun stopSync(): Result /** * Flow of [SyncState]. Will be updated as soon as the current [SyncState] changes. diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/RustSyncService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/RustSyncService.kt index 87fa02edd2..932da42afb 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/RustSyncService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/RustSyncService.kt @@ -41,9 +41,9 @@ class RustSyncService( Timber.d("Start sync failed: $it") } - override fun stopSync() = runCatching { + override suspend fun stopSync() = runCatching { Timber.i("Stop sync") - innerSyncService.pause() + innerSyncService.stop() }.onFailure { Timber.d("Stop sync failed: $it") } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/LogEventLocation.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/LogEventLocation.kt index 51b8923cc8..712735649c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/LogEventLocation.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/LogEventLocation.kt @@ -22,8 +22,7 @@ package io.element.android.libraries.matrix.impl.tracing */ data class LogEventLocation( val file: String, - val line: UInt, - val column: UInt, + val line: UInt?, ) { companion object { @@ -32,9 +31,8 @@ data class LogEventLocation( */ fun from(stackTraceElement: StackTraceElement): LogEventLocation { return LogEventLocation( - file = stackTraceElement.fileName, - line = stackTraceElement.lineNumber.toUInt(), - column = 0u, + file = stackTraceElement.fileName ?: "", + line = stackTraceElement.lineNumber.takeIf { it >= 0 }?.toUInt() ) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt index d3bd53bd10..c211f48c05 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt @@ -17,6 +17,7 @@ package io.element.android.libraries.matrix.impl.tracing import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.tracing.TracingConfiguration import io.element.android.libraries.matrix.api.tracing.TracingService @@ -26,13 +27,13 @@ import timber.log.Timber import javax.inject.Inject @ContributesBinding(AppScope::class) -class RustTracingService @Inject constructor() : TracingService { +class RustTracingService @Inject constructor(private val buildMeta: BuildMeta) : TracingService { override fun setupTracing(tracingConfiguration: TracingConfiguration) { val filter = tracingConfiguration.filterConfiguration val rustTracingConfiguration = org.matrix.rustcomponents.sdk.TracingConfiguration( filter = tracingConfiguration.filterConfiguration.filter, - writeToStdoutOrSystem = tracingConfiguration.writesToLogcat, + writeToStdoutOrSystem = tracingConfiguration.writesToLogcat, writeToFiles = when (val writeToFilesConfiguration = tracingConfiguration.writesToFilesConfiguration) { is WriteToFilesConfiguration.Disabled -> null is WriteToFilesConfiguration.Enabled -> TracingFileConfiguration( @@ -46,6 +47,6 @@ class RustTracingService @Inject constructor() : TracingService { } override fun createTimberTree(): Timber.Tree { - return RustTracingTree() + return RustTracingTree(retrieveFromStackTrace = buildMeta.isDebuggable) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingTree.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingTree.kt index 2131bb83ba..275994081d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingTree.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingTree.kt @@ -35,15 +35,18 @@ private val fqcnIgnore = listOf( /** * A Timber tree that passes logs to the Rust SDK. */ -internal class RustTracingTree : Timber.Tree() { +internal class RustTracingTree(private val retrieveFromStackTrace: Boolean) : Timber.Tree() { override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { - val location = getLogEventLocationFromStackTrace() + val location = if (retrieveFromStackTrace) { + getLogEventLocationFromStackTrace() + } else { + LogEventLocation("", null) + } val logLevel = priority.toLogLevel() logEvent( file = location.file, line = location.line, - column = location.column, level = logLevel, target = Target.ELEMENT.filter, message = message, diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt index dd653a76ec..4e618deb9a 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt @@ -34,7 +34,7 @@ class FakeSyncService : SyncService { return Result.success(Unit) } - override fun stopSync(): Result { + override suspend fun stopSync(): Result { syncStateFlow.value = SyncState.Terminated return Result.success(Unit) } diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt index b394e1c04d..faaccc9b8e 100644 --- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt +++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt @@ -113,7 +113,9 @@ class RoomListScreen( } onDispose { Timber.w("Stop sync!") - matrixClient.syncService().stopSync() + runBlocking { + matrixClient.syncService().stopSync() + } } } } diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt index 77057d2e45..027da552fa 100644 --- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt +++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt @@ -17,6 +17,8 @@ package io.element.android.samples.minimal import io.element.android.libraries.core.coroutine.CoroutineDispatchers +import io.element.android.libraries.core.meta.BuildMeta +import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.matrix.api.tracing.TracingConfiguration import io.element.android.libraries.matrix.api.tracing.TracingFilterConfigurations import io.element.android.libraries.matrix.api.tracing.WriteToFilesConfiguration @@ -28,13 +30,28 @@ import kotlinx.coroutines.plus object Singleton { + private val buildMeta = BuildMeta( + isDebuggable = true, + buildType = BuildType.DEBUG, + applicationName = "EAX-Minimal", + applicationId = "io.element.android.samples.minimal", + lowPrivacyLoggingEnabled = false, + versionName = "0.1.0", + versionCode = 1, + gitRevision = "TODO", // BuildConfig.GIT_REVISION, + gitRevisionDate = "TODO", // BuildConfig.GIT_REVISION_DATE, + gitBranchName = "TODO", // BuildConfig.GIT_BRANCH_NAME, + flavorDescription = "TODO", // BuildConfig.FLAVOR_DESCRIPTION, + flavorShortDescription = "TODO", // BuildConfig.SHORT_FLAVOR_DESCRIPTION, + ) + init { val tracingConfiguration = TracingConfiguration( filterConfiguration = TracingFilterConfigurations.debug, writesToLogcat = true, writesToFilesConfiguration = WriteToFilesConfiguration.Disabled ) - RustTracingService().setupTracing(tracingConfiguration) + RustTracingService(buildMeta).setupTracing(tracingConfiguration) } val appScope = MainScope() + CoroutineName("Minimal Scope")