diff --git a/.claude/skills/find-non-lambda-logs/SKILL.md b/.claude/skills/find-non-lambda-logs/SKILL.md new file mode 100644 index 000000000..0b0009255 --- /dev/null +++ b/.claude/skills/find-non-lambda-logs/SKILL.md @@ -0,0 +1,86 @@ +--- +name: find-non-lambda-logs +description: Use when auditing or migrating Log calls to lambda overloads, after adding new logging, or checking for string interpolation in Log.d/i/w/e calls that waste allocations when the log level is filtered out +--- + +# Find Non-Lambda Log Calls + +## Overview + +Locates `Log.d/i/w/e` calls that use string interpolation without the lambda overload, wasting string allocation when the log level is filtered out in release builds. + +## When to Use + +- After merging branches that add new logging +- Periodic audit of logging hygiene +- After migrating `android.util.Log` usages to the shared `Log` wrapper + +## What to Flag + +Calls with **string interpolation** (`$` in message) that do **not** pass a throwable: + +```kotlin +// FLAG - interpolation without lambda, no throwable +Log.d("Tag", "Processing ${event.id}") +Log.w("Tag", "Failed for $url") + +// IGNORE - passes throwable (lambda overload doesn't accept throwable) +Log.w("Tag", "Error: ${e.message}", e) +Log.e("Tag", "Failed for $url", throwable) + +// IGNORE - no interpolation (no allocation benefit from lambda) +Log.d("Tag", "Initialization complete") +``` + +## Search Commands + +**Important:** Tags can be string literals (`"Tag"`) or variables (`tag`, `LOG_TAG`). Run both patterns for each step. + +### Step 1: Find interpolated Log.d/Log.i (highest priority — filtered in release) + +``` +pattern: Log\.(d|i)\("[^"]+",\s*"[^"]*\$ +type: kotlin +``` +``` +pattern: Log\.(d|i)\(\w+,\s*"[^"]*\$ +type: kotlin +``` + +### Step 2: Find interpolated Log.w/Log.e without throwable + +``` +pattern: Log\.(w|e)\("[^"]+",\s*"[^"]*\$ +type: kotlin +``` +``` +pattern: Log\.(w|e)\(\w+,\s*"[^"]*\$ +type: kotlin +``` + +Then **manually exclude** lines where a throwable is passed as third argument (ending with `, e)`, `, throwable)`, etc.). Check the actual line — a catch block catching `e` doesn't mean `e` is passed to the Log call. + +### Step 3: Verify no android.util.Log leakage + +``` +pattern: android\.util\.Log\.(d|i|w|e|v)\( +type: kotlin +``` + +These bypass the `Log.minLevel` filter entirely. Exclude `PlatformLog.android.kt` which is the wrapper implementation. + +## Fix Pattern + +```kotlin +// Before +Log.d("Tag", "Processing event ${event.id} from ${relay.url}") + +// After +Log.d("Tag") { "Processing event ${event.id} from ${relay.url}" } +``` + +## Do NOT Convert + +- Calls passing a `Throwable` parameter - the lambda overload `(tag) { message }` has no throwable parameter +- Static string calls with no `$` interpolation - no allocation benefit +- Commented-out log calls diff --git a/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushDistributorHandler.kt b/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushDistributorHandler.kt index ac14ef95b..5da1c62fb 100644 --- a/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushDistributorHandler.kt +++ b/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushDistributorHandler.kt @@ -46,7 +46,7 @@ object PushDistributorHandler : PushDistributorActions { fun setEndpoint(newEndpoint: String) { endpointInternal = newEndpoint - Log.d("PushHandler", "New endpoint saved : $endpointInternal") + Log.d("PushHandler") { "New endpoint saved : $endpointInternal" } } fun removeEndpoint() { diff --git a/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushMessageReceiver.kt b/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushMessageReceiver.kt index fe5cf2cd2..dffba6b57 100644 --- a/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushMessageReceiver.kt +++ b/amethyst/src/fdroid/java/com/vitorpamplona/amethyst/service/notifications/PushMessageReceiver.kt @@ -53,7 +53,7 @@ class PushMessageReceiver : MessagingReceiver() { instance: String, ) { val messageStr = message.content.decodeToString() - Log.d(TAG, "New message $messageStr for Instance: $instance") + Log.d(TAG) { "New message $messageStr for Instance: $instance" } scope.launch { try { parseMessage(messageStr)?.let { @@ -61,7 +61,7 @@ class PushMessageReceiver : MessagingReceiver() { } } catch (e: Exception) { if (e is CancellationException) throw e - Log.d(TAG, "Message could not be parsed: ${e.message}") + Log.d(TAG) { "Message could not be parsed: ${e.message}" } } } } @@ -87,7 +87,7 @@ class PushMessageReceiver : MessagingReceiver() { ) { val sanitizedEndpoint = if (endpoint.url.endsWith("?up=1")) endpoint.url.dropLast(5) else endpoint.url if (sanitizedEndpoint != pushHandler.getSavedEndpoint()) { - Log.d(TAG, "New endpoint provided:- $endpoint for Instance: $instance ${pushHandler.getSavedEndpoint()} $sanitizedEndpoint") + Log.d(TAG) { "New endpoint provided:- $endpoint for Instance: $instance ${pushHandler.getSavedEndpoint()} $sanitizedEndpoint" } pushHandler.setEndpoint(sanitizedEndpoint) scope.launch(Dispatchers.IO) { PushNotificationUtils.checkAndInit(sanitizedEndpoint, LocalPreferences.allSavedAccounts()) { @@ -97,7 +97,7 @@ class PushMessageReceiver : MessagingReceiver() { NotificationUtils.getOrCreateDMChannel(appContext) } } else { - Log.d(TAG, "Same endpoint provided:- $endpoint for Instance: $instance $sanitizedEndpoint") + Log.d(TAG) { "Same endpoint provided:- $endpoint for Instance: $instance $sanitizedEndpoint" } } } @@ -106,7 +106,7 @@ class PushMessageReceiver : MessagingReceiver() { reason: FailedReason, instance: String, ) { - Log.d(TAG, "Registration failed for Instance: $instance") + Log.d(TAG) { "Registration failed for Instance: $instance" } pushHandler.forceRemoveDistributor(context) } @@ -115,7 +115,7 @@ class PushMessageReceiver : MessagingReceiver() { instance: String, ) { val removedEndpoint = pushHandler.getSavedEndpoint() - Log.d(TAG, "Endpoint: $removedEndpoint removed for Instance: $instance") + Log.d(TAG) { "Endpoint: $removedEndpoint removed for Instance: $instance" } Log.d(TAG, "App is unregistered. ") pushHandler.forceRemoveDistributor(context) pushHandler.removeEndpoint() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt index 5c90cfd7f..8e488a83a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt @@ -23,10 +23,12 @@ package com.vitorpamplona.amethyst import android.app.Application import com.vitorpamplona.amethyst.service.logging.Logging import com.vitorpamplona.quartz.utils.Log +import com.vitorpamplona.quartz.utils.LogLevel class Amethyst : Application() { init { - Log.d("AmethystApp", "Creating App $this") + Log.minLevel = if (BuildConfig.DEBUG) LogLevel.DEBUG else LogLevel.ERROR + Log.d("AmethystApp") { "Creating App $this" } } companion object { @@ -36,7 +38,7 @@ class Amethyst : Application() { override fun onCreate() { super.onCreate() - Log.d("AmethystApp", "onCreate $this") + Log.d("AmethystApp") { "onCreate $this" } instance = AppModules(this) if (isDebug) { @@ -48,7 +50,7 @@ class Amethyst : Application() { override fun onTerminate() { super.onTerminate() - Log.d("AmethystApp", "onTerminate $this") + Log.d("AmethystApp") { "onTerminate $this" } instance.terminate(this) } @@ -59,7 +61,7 @@ class Amethyst : Application() { */ override fun onTrimMemory(level: Int) { super.onTrimMemory(level) - Log.d("AmethystApp", "onTrimMemory $level") + Log.d("AmethystApp") { "onTrimMemory $level" } instance.trim() } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/DebugUtils.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/DebugUtils.kt index 7e2b8dc3f..9a3efa00c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/DebugUtils.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/DebugUtils.kt @@ -46,19 +46,19 @@ fun debugState(context: Context) { val jvmHeapAllocatedMb = totalMemoryMb - freeMemoryMb - Log.d(STATE_DUMP_TAG, "Total Heap Allocated: $jvmHeapAllocatedMb/$maxMemoryMb MB") + Log.d(STATE_DUMP_TAG) { "Total Heap Allocated: $jvmHeapAllocatedMb/$maxMemoryMb MB" } val nativeHeap = Debug.getNativeHeapAllocatedSize() / (1024 * 1024) val maxNative = Debug.getNativeHeapSize() / (1024 * 1024) - Log.d(STATE_DUMP_TAG, "Total Native Heap Allocated: $nativeHeap/$maxNative MB") + Log.d(STATE_DUMP_TAG) { "Total Native Heap Allocated: $nativeHeap/$maxNative MB" } val activityManager: ActivityManager? = context.getSystemService() if (activityManager != null) { val isLargeHeap = (context.applicationInfo.flags and ApplicationInfo.FLAG_LARGE_HEAP) != 0 val memClass = if (isLargeHeap) activityManager.largeMemoryClass else activityManager.memoryClass - Log.d(STATE_DUMP_TAG, "Memory Class $memClass MB (largeHeap $isLargeHeap)") + Log.d(STATE_DUMP_TAG) { "Memory Class $memClass MB (largeHeap $isLargeHeap)" } } Log.d( @@ -68,14 +68,8 @@ fun debugState(context: Context) { .size() + "/" + normalizedUrls.size(), ) - Log.d( - STATE_DUMP_TAG, - "Image Disk Cache ${(Amethyst.instance.diskCache.size) / (1024 * 1024)}/${(Amethyst.instance.diskCache.maxSize) / (1024 * 1024)} MB", - ) - Log.d( - STATE_DUMP_TAG, - "Image Memory Cache ${(Amethyst.instance.memoryCache.size) / (1024 * 1024)}/${(Amethyst.instance.memoryCache.maxSize) / (1024 * 1024)} MB", - ) + Log.d(STATE_DUMP_TAG) { "Image Disk Cache ${(Amethyst.instance.diskCache.size) / (1024 * 1024)}/${(Amethyst.instance.diskCache.maxSize) / (1024 * 1024)} MB" } + Log.d(STATE_DUMP_TAG) { "Image Memory Cache ${(Amethyst.instance.memoryCache.size) / (1024 * 1024)}/${(Amethyst.instance.memoryCache.maxSize) / (1024 * 1024)} MB" } Log.d( STATE_DUMP_TAG, @@ -130,13 +124,12 @@ fun debugState(context: Context) { LocalCache.ephemeralChannels.values().sumOf { it.notes.size() }, ) LocalCache.chatroomList.forEach { key, room -> - Log.d( - STATE_DUMP_TAG, + Log.d(STATE_DUMP_TAG) { "Private Chats $key: " + room.rooms.size() + " / " + - room.rooms.sumOf { key, value -> value.messages.size }, - ) + room.rooms.sumOf { key, value -> value.messages.size } + } } Log.d( STATE_DUMP_TAG, @@ -173,10 +166,10 @@ fun debugState(context: Context) { .sumByGroup(groupMap = { _, it -> it.event?.kind }, sumOf = { _, it -> it.event?.countMemory()?.toLong() ?: 0L }) qttNotes.toList().sortedByDescending { bytesNotes[it.first] }.forEach { (kind, qtt) -> - Log.d(STATE_DUMP_TAG, "Kind ${kind.toString().padStart(5,' ')}:\t${qtt.toString().padStart(6,' ')} elements\t${bytesNotes[kind]?.div((1024 * 1024))}MB ") + Log.d(STATE_DUMP_TAG) { "Kind ${kind.toString().padStart(5,' ')}:\t${qtt.toString().padStart(6,' ')} elements\t${bytesNotes[kind]?.div((1024 * 1024))}MB " } } qttAddressables.toList().sortedByDescending { bytesNotes[it.first] }.forEach { (kind, qtt) -> - Log.d(STATE_DUMP_TAG, "Kind ${kind.toString().padStart(5,' ')}:\t${qtt.toString().padStart(6,' ')} elements\t${bytesAddressables[kind]?.div((1024 * 1024))}MB ") + Log.d(STATE_DUMP_TAG) { "Kind ${kind.toString().padStart(5,' ')}:\t${qtt.toString().padStart(6,' ')} elements\t${bytesAddressables[kind]?.div((1024 * 1024))}MB " } } } @@ -188,7 +181,7 @@ inline fun logTime( if (isDebug) { val (result, elapsed) = measureTimedValue(block) if (elapsed.inWholeMilliseconds > minToReportMs) { - Log.d("DEBUG-TIME", "${elapsed.toString(DurationUnit.MILLISECONDS, 3).padStart(12)}: $debugMessage") + Log.d("DEBUG-TIME") { "${elapsed.toString(DurationUnit.MILLISECONDS, 3).padStart(12)}: $debugMessage" } } result } else { @@ -203,7 +196,7 @@ inline fun logTime( if (isDebug) { val (result, elapsed) = measureTimedValue(block) if (elapsed.inWholeMilliseconds > minToReportMs) { - Log.d("DEBUG-TIME", "${elapsed.toString(DurationUnit.MILLISECONDS, 3).padStart(12)}: ${debugMessage(result)}") + Log.d("DEBUG-TIME") { "${elapsed.toString(DurationUnit.MILLISECONDS, 3).padStart(12)}: ${debugMessage(result)}" } } result } else { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt index 10a061da6..9165e674e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/LocalPreferences.kt @@ -254,7 +254,7 @@ object LocalPreferences { val prefsDir = File(prefsDirPath) prefsDir.list()?.forEach { if (it.contains(npub) && !File(prefsDir, it).delete()) { - Log.w("LocalPreferences", "Failed to delete preference file: $it") + Log.w("LocalPreferences") { "Failed to delete preference file: $it" } } } } @@ -282,7 +282,7 @@ object LocalPreferences { */ @SuppressLint("ApplySharedPref") suspend fun deleteAccount(accountInfo: AccountInfo) { - Log.d("LocalPreferences", "Saving to encrypted storage updatePrefsForLogout ${accountInfo.npub}") + Log.d("LocalPreferences") { "Saving to encrypted storage updatePrefsForLogout ${accountInfo.npub}" } withContext(Dispatchers.IO) { encryptedPreferences(accountInfo.npub).edit(commit = true) { clear() } removeAccount(accountInfo) @@ -446,18 +446,18 @@ object LocalPreferences { } private suspend fun innerLoadCurrentAccountFromEncryptedStorage(npub: String?): AccountSettings? { - Log.d("LocalPreferences", "Load account from file $npub") + Log.d("LocalPreferences") { "Load account from file $npub" } val result = withContext(Dispatchers.IO) { return@withContext with(encryptedPreferences(npub)) { - Log.d("LocalPreferences", "Load account from file $npub - opened file") + Log.d("LocalPreferences") { "Load account from file $npub - opened file" } val privKey = getString(PrefKeys.NOSTR_PRIVKEY, null) val pubKey = getString(PrefKeys.NOSTR_PUBKEY, null) ?: return@with null val externalSignerPackageName = getString(PrefKeys.SIGNER_PACKAGE_NAME, null) ?: if (getBoolean(PrefKeys.LOGIN_WITH_EXTERNAL_SIGNER, false)) "com.greenart7c3.nostrsigner" else null val keyPair = KeyPair(privKey = privKey?.hexToByteArray(), pubKey = pubKey.hexToByteArray()) - Log.d("LocalPreferences", "Load account from file $npub - keys ready") + Log.d("LocalPreferences") { "Load account from file $npub - keys ready" } val stripLocationOnUpload = getBoolean(PrefKeys.STRIP_LOCATION_ON_UPLOAD, true) val hideDeleteRequestDialog = getBoolean(PrefKeys.HIDE_DELETE_REQUEST_DIALOG, false) @@ -495,7 +495,7 @@ object LocalPreferences { val latestPaymentTargetsStr = getString(PrefKeys.LATEST_PAYMENT_TARGETS, null) val lastReadPerRouteStr = getString(PrefKeys.LAST_READ_PER_ROUTE, null) - Log.d("LocalPreferences", "Load account from file $npub - before parsing events") + Log.d("LocalPreferences") { "Load account from file $npub - before parsing events" } val defaultHomeFollowList = async { parseOrNull(defaultHomeFollowListStr) ?: TopFilter.AllFollows } val defaultStoriesFollowList = async { parseOrNull(defaultStoriesFollowListStr) ?: TopFilter.Global } @@ -532,7 +532,7 @@ object LocalPreferences { } ?: mapOf() } - Log.d("LocalPreferences", "Load account from file $npub - asyncs created") + Log.d("LocalPreferences") { "Load account from file $npub - asyncs created" } return@with AccountSettings( keyPair = keyPair, @@ -574,7 +574,7 @@ object LocalPreferences { ) } } - Log.d("LocalPreferences", "Loaded account from file $npub") + Log.d("LocalPreferences") { "Loaded account from file $npub" } return result } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt index 75c9e3aa7..d5033201b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AntiSpamFilter.kt @@ -87,7 +87,7 @@ class AntiSpamFilter { val link1 = njumpLink(NAddress.create(existingAddress.kind, existingAddress.pubKeyHex, existingAddress.dTag, relay)) val link2 = njumpLink(NAddress.create(event.kind, event.pubKey, event.dTag(), relay)) - Log.w("Duplicated/SPAM", "${relay?.url} $link1 $link2") + Log.w("Duplicated/SPAM") { "${relay?.url} $link1 $link2" } // Log down offenders val spammer = logOffender(hash, event) @@ -114,7 +114,7 @@ class AntiSpamFilter { val link1 = njumpLink(NEvent.create(existingEvent, null, null, relay)) val link2 = njumpLink(NEvent.create(event.id, null, null, relay)) - Log.w("Duplicated/SPAM", "${relay?.url} $link1 $link2") + Log.w("Duplicated/SPAM") { "${relay?.url} $link1 $link2" } // Log down offenders val spammer = logOffender(hash, event) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index c8e05f1f7..75ea92e42 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -1931,7 +1931,7 @@ object LocalCache : ILocalCache, ICacheProvider { if (new) { val channel = checkGetOrCreatePublicChatChannel(channelId) if (channel == null) { - Log.w("LocalCache", "Unable to create public chat channel for event ${event.toJson()}") + Log.w("LocalCache") { "Unable to create public chat channel for event ${event.toJson()}" } return false } @@ -2019,7 +2019,7 @@ object LocalCache : ILocalCache, ICacheProvider { val zapRequest = event.zapRequest?.id?.let { getNoteIfExists(it) } if (zapRequest == null || zapRequest.event !is LnZapRequestEvent) { - Log.e("ZP", "Zap Request not found. Unable to process Zap {${event.toJson()}}") + Log.e("ZP") { "Zap Request not found. Unable to process Zap {${event.toJson()}}" } return false } @@ -2582,17 +2582,17 @@ object LocalCache : ILocalCache, ICacheProvider { } fun cleanMemory() { - Log.d("LargeCache", "Notes cleanup started. Current size: ${notes.size()}") + Log.d("LargeCache") { "Notes cleanup started. Current size: ${notes.size()}" } notes.cleanUp() - Log.d("LargeCache", "Notes cleanup completed. Remaining size: ${notes.size()}") + Log.d("LargeCache") { "Notes cleanup completed. Remaining size: ${notes.size()}" } - Log.d("LargeCache", "Addressables cleanup started. Current size: ${addressables.size()}") + Log.d("LargeCache") { "Addressables cleanup started. Current size: ${addressables.size()}" } addressables.cleanUp() - Log.d("LargeCache", "Addressables cleanup completed. Remaining size: ${addressables.size()}") + Log.d("LargeCache") { "Addressables cleanup completed. Remaining size: ${addressables.size()}" } - Log.d("LargeCache", "Users cleanup started. Current size: ${users.size()}") + Log.d("LargeCache") { "Users cleanup started. Current size: ${users.size()}" } users.cleanUp() - Log.d("LargeCache", "Users cleanup completed. Remaining size: ${users.size()}") + Log.d("LargeCache") { "Users cleanup completed. Remaining size: ${users.size()}" } } fun cleanObservers() { @@ -2924,7 +2924,7 @@ object LocalCache : ILocalCache, ICacheProvider { event.checkSignature() } catch (e: Exception) { if (e is CancellationException) throw e - Log.w("Event Verification Failed", "Kind: ${event.kind} from ${dateFormatter(event.createdAt, "", "")} with message ${e.message}") + Log.w("Event Verification Failed") { "Kind: ${event.kind} from ${dateFormatter(event.createdAt, "", "")} with message ${e.message}" } } false } else { @@ -2998,7 +2998,7 @@ object LocalCache : ILocalCache, ICacheProvider { getNoteIfExists(deletionEvent.id)?.let { note -> if (!note.hasRelay(relay.url)) { if (isDebug) { - Log.d("LocalCache", "Updating ${relay.url.url} with a Deletion Event ${event.id} ${deletionEvent.id} because of ${event.toJson()} with ${deletionEvent.toJson()}") + Log.d("LocalCache") { "Updating ${relay.url.url} with a Deletion Event ${event.id} ${deletionEvent.id} because of ${event.toJson()} with ${deletionEvent.toJson()}" } } relay.sendIfConnected(EventCmd(deletionEvent)) note.addRelay(relay.url) @@ -3015,7 +3015,7 @@ object LocalCache : ILocalCache, ICacheProvider { note.event?.let { existingEvent -> if (existingEvent.createdAt > event.createdAt && !note.hasRelay(relay.url) && !deletionIndex.hasBeenDeleted(event) && !event.isExpired()) { if (isDebug) { - Log.d("LocalCache", "Updating ${relay.url.url} with a new version of ${event.kind} ${event.id} to ${existingEvent.id}") + Log.d("LocalCache") { "Updating ${relay.url.url} with a new version of ${event.kind} ${event.id} to ${existingEvent.id}" } } relay.sendIfConnected(EventCmd(existingEvent)) @@ -3247,7 +3247,7 @@ object LocalCache : ILocalCache, ICacheProvider { is WebBookmarkEvent -> consume(event, relay, wasVerified) is WikiNoteEvent -> consume(event, relay, wasVerified) is PaymentTargetsEvent -> consume(event, relay, wasVerified) - else -> Log.w("Event Not Supported", "From ${relay?.url}: ${event.toJson()}").let { false } + else -> Log.w("Event Not Supported") { "From ${relay?.url}: ${event.toJson()}" }.let { false } } } catch (e: Exception) { if (e is CancellationException) throw e diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/edits/PrivateStorageRelayListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/edits/PrivateStorageRelayListState.kt index 80c35d16f..255230349 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/edits/PrivateStorageRelayListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/edits/PrivateStorageRelayListState.kt @@ -91,7 +91,7 @@ class PrivateStorageRelayListState( init { settings.backupPrivateHomeRelayList?.let { event -> - Log.d("AccountRegisterObservers", "Loading saved private home relay list ${event.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved private home relay list ${event.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(event) @@ -101,7 +101,7 @@ class PrivateStorageRelayListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Private Home Relay List Collector Start") getPrivateOutboxRelayListFlow().collect { noteState -> - Log.d("AccountRegisterObservers", "Updating Private Home Relay List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Private Home Relay List for ${signer.pubKey}" } (noteState.note.event as? PrivateOutboxRelayListEvent)?.let { settings.updatePrivateHomeRelayList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip01UserMetadata/UserMetadataState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip01UserMetadata/UserMetadataState.kt index 7c7a1c235..d3179dd07 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip01UserMetadata/UserMetadataState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip01UserMetadata/UserMetadataState.kt @@ -132,7 +132,7 @@ class UserMetadataState( init { settings.backupUserMetadata?.let { - Log.d("AccountRegisterObservers", "Loading saved user metadata ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved user metadata ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(it) } @@ -142,7 +142,7 @@ class UserMetadataState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Kind 0 Collector Start") getUserMetadataFlow().collect { - Log.d("AccountRegisterObservers", "Updating Kind 0 ${user.toBestDisplayName()}") + Log.d("AccountRegisterObservers") { "Updating Kind 0 ${user.toBestDisplayName()}" } (it.note.event as? MetadataEvent)?.let { settings.updateUserMetadata(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip02FollowLists/Kind3FollowListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip02FollowLists/Kind3FollowListState.kt index 35fd21cd4..d4b257652 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip02FollowLists/Kind3FollowListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip02FollowLists/Kind3FollowListState.kt @@ -162,7 +162,7 @@ class Kind3FollowListState( init { settings.backupContactList?.let { - Log.d("AccountRegisterObservers", "Loading saved ${it.tags.size} contacts") + Log.d("AccountRegisterObservers") { "Loading saved ${it.tags.size} contacts" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(it) } @@ -172,7 +172,7 @@ class Kind3FollowListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Kind 3 Collector Start") getFollowListFlow().collect { - Log.d("AccountRegisterObservers", "Updating Kind 3 ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Kind 3 ${signer.pubKey}" } (it.note.event as? ContactListEvent)?.let { settings.updateContactListTo(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip03Timestamp/OtsState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip03Timestamp/OtsState.kt index 423943d4d..3396f6e31 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip03Timestamp/OtsState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip03Timestamp/OtsState.kt @@ -55,7 +55,7 @@ class OtsState( } suspend fun updateAttestations(): List { - Log.d("Pending Attestations", "Updating ${settings.pendingAttestations.value.size} pending attestations") + Log.d("Pending Attestations") { "Updating ${settings.pendingAttestations.value.size} pending attestations" } return settings.pendingAttestations.value.toList().mapNotNull { (key, value) -> val otsState = OtsEvent.upgrade(Base64.getDecoder().decode(value), key, otsResolver()) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip11RelayInfo/LoadRelayInfo.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip11RelayInfo/LoadRelayInfo.kt index 6ddb03366..308688d6c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip11RelayInfo/LoadRelayInfo.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip11RelayInfo/LoadRelayInfo.kt @@ -46,7 +46,7 @@ fun loadRelayInfo( value = it }, onError = { url, errorCode, exceptionMessage -> - Log.e("RelayInfo", "Error loading relay info for ${relay.url}: $errorCode - $exceptionMessage") + Log.e("RelayInfo") { "Error loading relay info for ${relay.url}: $errorCode - $exceptionMessage" } }, ) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip17Dms/DmRelayListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip17Dms/DmRelayListState.kt index 324ddde21..5d1ebccea 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip17Dms/DmRelayListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip17Dms/DmRelayListState.kt @@ -88,7 +88,7 @@ class DmRelayListState( init { settings.backupDMRelayList?.let { - Log.d("AccountRegisterObservers", "Loading saved DM Relay List ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved DM Relay List ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(it) @@ -98,7 +98,7 @@ class DmRelayListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "NIP-17 Relay List Collector Start") getDMRelayListFlow().collect { - Log.d("AccountRegisterObservers", "Updating DM Relay List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating DM Relay List for ${signer.pubKey}" } (it.note.event as? ChatMessageRelayListEvent)?.let { settings.updateDMRelayList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/blockedRelays/BlockedRelayListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/blockedRelays/BlockedRelayListState.kt index f126d6461..8bc4cec59 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/blockedRelays/BlockedRelayListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/blockedRelays/BlockedRelayListState.kt @@ -93,7 +93,7 @@ class BlockedRelayListState( init { settings.backupBlockedRelayList?.let { - Log.d("AccountRegisterObservers", "Loading saved Blocked relay list ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved Blocked relay list ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(it) } } @@ -101,7 +101,7 @@ class BlockedRelayListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Blocked Relay List Collector Start") getBlockedRelayListFlow().collect { - Log.d("AccountRegisterObservers", "Updating Blocked Relay List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Blocked Relay List for ${signer.pubKey}" } (it.note.event as? BlockedRelayListEvent)?.let { settings.updateBlockedRelayList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/geohashLists/GeohashListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/geohashLists/GeohashListState.kt index 669eb5898..a17373083 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/geohashLists/GeohashListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/geohashLists/GeohashListState.kt @@ -106,7 +106,7 @@ class GeohashListState( init { settings.backupGeohashList?.let { event -> - Log.d("AccountRegisterObservers", "Loading saved Geohash list ${event.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved Geohash list ${event.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(event) @@ -116,7 +116,7 @@ class GeohashListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Geohash List Collector Start") getGeohashListFlow().collect { noteState -> - Log.d("AccountRegisterObservers", "Geohash List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Geohash List for ${signer.pubKey}" } (noteState.note.event as? GeohashListEvent)?.let { settings.updateGeohashListTo(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/hashtagLists/HashtagListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/hashtagLists/HashtagListState.kt index 7d5d490ec..b43e1d319 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/hashtagLists/HashtagListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/hashtagLists/HashtagListState.kt @@ -106,7 +106,7 @@ class HashtagListState( init { settings.backupHashtagList?.let { event -> - Log.d("AccountRegisterObservers", "Loading saved Hashtag list ${event.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved Hashtag list ${event.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(event) @@ -116,7 +116,7 @@ class HashtagListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Hashtag List Collector Start") getHashtagListFlow().collect { - Log.d("AccountRegisterObservers", "Hashtag List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Hashtag List for ${signer.pubKey}" } (it.note.event as? HashtagListEvent)?.let { settings.updateHashtagListTo(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/indexerRelays/IndexerRelayListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/indexerRelays/IndexerRelayListState.kt index aef44173c..4f739918e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/indexerRelays/IndexerRelayListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/indexerRelays/IndexerRelayListState.kt @@ -103,7 +103,7 @@ class IndexerRelayListState( init { settings.backupIndexRelayList?.let { - Log.d("AccountRegisterObservers", "Loading saved index relay list ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved index relay list ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(it) } } @@ -111,7 +111,7 @@ class IndexerRelayListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Index Relay List Collector Start") getIndexerRelayListFlow().collect { - Log.d("AccountRegisterObservers", "Updating Index Relay List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Index Relay List for ${signer.pubKey}" } (it.note.event as? IndexerRelayListEvent)?.let { settings.updateIndexRelayList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/muteList/MuteListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/muteList/MuteListState.kt index f71705966..3115c9383 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/muteList/MuteListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/muteList/MuteListState.kt @@ -141,7 +141,7 @@ class MuteListState( init { settings.backupMuteList?.let { event -> - Log.d("AccountRegisterObservers", "Loading saved mute list ${event.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved mute list ${event.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(event) @@ -151,7 +151,7 @@ class MuteListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Mute List Collector Start") getMuteListFlow().collect { - Log.d("AccountRegisterObservers", "Updating Mute List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Mute List for ${signer.pubKey}" } (it.note.event as? MuteListEvent)?.let { settings.updateMuteList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/relayFeeds/RelayFeedListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/relayFeeds/RelayFeedListState.kt index de9b52c16..7860cfd29 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/relayFeeds/RelayFeedListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/relayFeeds/RelayFeedListState.kt @@ -115,7 +115,7 @@ class RelayFeedListState( init { settings.backupRelayFeedsList?.let { - Log.d("AccountRegisterObservers", "Loading saved relay feeds list ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved relay feeds list ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(it) } } @@ -123,7 +123,7 @@ class RelayFeedListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Relay feeds list Collector Start") getRelayFeedsListFlow().collect { - Log.d("AccountRegisterObservers", "Updating Relay feeds list for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Relay feeds list for ${signer.pubKey}" } (it.note.event as? RelayFeedsListEvent)?.let { settings.updateRelayFeedList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/searchRelays/SearchRelayListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/searchRelays/SearchRelayListState.kt index 5824016c3..4fbba2ef2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/searchRelays/SearchRelayListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/searchRelays/SearchRelayListState.kt @@ -103,7 +103,7 @@ class SearchRelayListState( init { settings.backupSearchRelayList?.let { - Log.d("AccountRegisterObservers", "Loading saved search relay list ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved search relay list ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(it) } } @@ -111,7 +111,7 @@ class SearchRelayListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Search Relay List Collector Start") getSearchRelayListFlow().collect { - Log.d("AccountRegisterObservers", "Updating Search Relay List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Search Relay List for ${signer.pubKey}" } (it.note.event as? SearchRelayListEvent)?.let { settings.updateSearchRelayList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/trustedRelays/TrustedRelayListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/trustedRelays/TrustedRelayListState.kt index bce1af25d..65a5c80c4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/trustedRelays/TrustedRelayListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip51Lists/trustedRelays/TrustedRelayListState.kt @@ -90,7 +90,7 @@ class TrustedRelayListState( init { settings.backupTrustedRelayList?.let { - Log.d("AccountRegisterObservers", "Loading saved Trusted relay list ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved Trusted relay list ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { cache.justConsumeMyOwnEvent(it) } } @@ -98,7 +98,7 @@ class TrustedRelayListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Trusted Relay List Collector Start") getTrustedRelayListFlow().collect { - Log.d("AccountRegisterObservers", "Updating Trusted Relay List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Trusted Relay List for ${signer.pubKey}" } (it.note.event as? TrustedRelayListEvent)?.let { settings.updateTrustedRelayList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip65RelayList/Nip65RelayListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip65RelayList/Nip65RelayListState.kt index c0a913fd6..6add6cd3e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip65RelayList/Nip65RelayListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip65RelayList/Nip65RelayListState.kt @@ -144,7 +144,7 @@ class Nip65RelayListState( init { settings.backupNIP65RelayList?.let { - Log.d("AccountRegisterObservers", "Loading saved nip65 relay list ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved nip65 relay list ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { cache.justConsumeMyOwnEvent(it) } } @@ -152,7 +152,7 @@ class Nip65RelayListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "NIP-65 Relay List Collector Start") getNIP65RelayListFlow().collect { - Log.d("AccountRegisterObservers", "Updating NIP-65 List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating NIP-65 List for ${signer.pubKey}" } (it.note.event as? AdvertisedRelayListEvent)?.let { settings.updateNIP65RelayList(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip72Communities/CommunityListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip72Communities/CommunityListState.kt index a4fd1285a..97a5c2dfb 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip72Communities/CommunityListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip72Communities/CommunityListState.kt @@ -155,7 +155,7 @@ class CommunityListState( init { settings.backupCommunityList?.let { event -> - Log.d("AccountRegisterObservers", "Loading saved Community list ${event.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved Community list ${event.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(event) @@ -165,7 +165,7 @@ class CommunityListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Community List Collector Start") getCommunityListFlow().collect { - Log.d("AccountRegisterObservers", "Community List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Community List for ${signer.pubKey}" } (it.note.event as? CommunityListEvent)?.let { settings.updateCommunityListTo(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip78AppSpecific/AppSpecificState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip78AppSpecific/AppSpecificState.kt index d68d64f9c..8a745aed6 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip78AppSpecific/AppSpecificState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nip78AppSpecific/AppSpecificState.kt @@ -65,7 +65,7 @@ class AppSpecificState( init { if (settings.isWriteable()) { settings.backupAppSpecificData?.let { event -> - Log.d("AccountRegisterObservers", "Loading saved app specific data ${event.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved app specific data ${event.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { LocalCache.justConsumeMyOwnEvent(event) @@ -84,7 +84,7 @@ class AppSpecificState( Log.d("AccountRegisterObservers", "AppSpecificData Collector Start") getAppSpecificDataFlow().collect { try { - Log.d("AccountRegisterObservers", "Updating AppSpecificData for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating AppSpecificData for ${signer.pubKey}" } (it.note.event as? AppSpecificDataEvent)?.let { val decrypted = signer.decrypt(it.content, it.pubKey) try { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nipA3PaymentTargets/NipA3PaymentTargetsState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nipA3PaymentTargets/NipA3PaymentTargetsState.kt index 58bb30514..aa7481521 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nipA3PaymentTargets/NipA3PaymentTargetsState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/nipA3PaymentTargets/NipA3PaymentTargetsState.kt @@ -46,7 +46,7 @@ class NipA3PaymentTargetsState( init { settings.backupNipA3PaymentTargets?.let { - Log.d("AccountRegisterObservers", "Loading saved nipA3 Payment targets ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved nipA3 Payment targets ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { cache.justConsumeMyOwnEvent(it) } } @@ -54,7 +54,7 @@ class NipA3PaymentTargetsState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "nipA3 Payment targets Collector Start") getNipA3PaymentTargetsFlow().collect { - Log.d("AccountRegisterObservers", "Updating nipA3 Payment targets for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating nipA3 Payment targets for ${signer.pubKey}" } (it.note.event as? PaymentTargetsEvent)?.let { paymentTargetsEvent -> settings.updateNIPA3PaymentTargets(paymentTargetsEvent) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/NamecoinSharedPreferences.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/NamecoinSharedPreferences.kt index d2ff5125f..04dd01739 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/NamecoinSharedPreferences.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/NamecoinSharedPreferences.kt @@ -127,7 +127,7 @@ class NamecoinSharedPreferences( } } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("NamecoinPrefs", "Error writing pinned certs: ${e.message}") + Log.e("NamecoinPrefs") { "Error writing pinned certs: ${e.message}" } } } @@ -158,7 +158,7 @@ class NamecoinSharedPreferences( } } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("NamecoinPrefs", "Error writing DataStore: ${e.message}") + Log.e("NamecoinPrefs") { "Error writing DataStore: ${e.message}" } } } @@ -180,7 +180,7 @@ class NamecoinSharedPreferences( NamecoinSettings(enabled = enabled, customServers = servers) } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("NamecoinPrefs", "Error reading DataStore: ${e.message}") + Log.e("NamecoinPrefs") { "Error reading DataStore: ${e.message}" } null } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/OtsSharedPreferences.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/OtsSharedPreferences.kt index 315278f50..9c769c796 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/OtsSharedPreferences.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/OtsSharedPreferences.kt @@ -86,7 +86,7 @@ class OtsSharedPreferences( } } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("OtsPrefs", "Error writing DataStore: ${e.message}") + Log.e("OtsPrefs") { "Error writing DataStore: ${e.message}" } } } @@ -97,7 +97,7 @@ class OtsSharedPreferences( OtsSettings(customExplorerUrl = url) } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("OtsPrefs", "Error reading DataStore: ${e.message}") + Log.e("OtsPrefs") { "Error reading DataStore: ${e.message}" } null } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/TorSharedPreferences.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/TorSharedPreferences.kt index 97422d41b..94d69ccca 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/TorSharedPreferences.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/TorSharedPreferences.kt @@ -106,7 +106,7 @@ class TorSharedPreferences( } catch (e: Exception) { if (e is CancellationException) throw e // Log any errors that occur while reading the DataStore. - Log.e("SharedPreferences", "Error reading DataStore preferences: ${e.message}") + Log.e("SharedPreferences") { "Error reading DataStore preferences: ${e.message}" } null } @@ -130,7 +130,7 @@ class TorSharedPreferences( } catch (e: Exception) { if (e is CancellationException) throw e // Log any errors that occur while reading the DataStore. - Log.e("SharedPreferences", "Error saving DataStore preferences: ${e.message}") + Log.e("SharedPreferences") { "Error saving DataStore preferences: ${e.message}" } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/UISharedPreferences.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/UISharedPreferences.kt index bce3c62da..c3519c0e6 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/UISharedPreferences.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/preferences/UISharedPreferences.kt @@ -127,7 +127,7 @@ class UiSharedPreferences( } catch (e: Exception) { if (e is CancellationException) throw e // Log any errors that occur while reading the DataStore. - Log.e("SharedPreferences", "Error reading DataStore preferences: ${e.message}") + Log.e("SharedPreferences") { "Error reading DataStore preferences: ${e.message}" } try { val oldVersion = LocalPreferences.loadSharedSettings() @@ -159,7 +159,7 @@ class UiSharedPreferences( } catch (e: Exception) { if (e is CancellationException) throw e // Log any errors that occur while reading the DataStore. - Log.e("SharedPreferences", "Error saving DataStore preferences: ${e.message}") + Log.e("SharedPreferences") { "Error saving DataStore preferences: ${e.message}" } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/trustedAssertions/TrustProviderListState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/trustedAssertions/TrustProviderListState.kt index 3cd914034..324ad09ae 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/trustedAssertions/TrustProviderListState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/trustedAssertions/TrustProviderListState.kt @@ -124,7 +124,7 @@ class TrustProviderListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "TrustProviderList Collector Start") getTrustProviderListFlow().collect { noteState -> - Log.d("AccountRegisterObservers", "TrustProviderList List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "TrustProviderList List for ${signer.pubKey}" } (noteState.note.event as? TrustProviderListEvent)?.let { settings.updateTrustProviderListTo(it) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/broadcast/BroadcastTracker.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/broadcast/BroadcastTracker.kt index 7c9e15c08..bfede508e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/broadcast/BroadcastTracker.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/broadcast/BroadcastTracker.kt @@ -85,7 +85,7 @@ class BroadcastTracker { // Add to active broadcasts and cache event for retries _activeBroadcasts.update { (it + broadcast).toImmutableList() } - Log.d(TAG, "Starting broadcast $trackingId (kind ${event.kind}) to ${relays.size} relays") + Log.d(TAG) { "Starting broadcast $trackingId (kind ${event.kind}) to ${relays.size} relays" } val resultChannel = Channel(UNLIMITED) @@ -102,7 +102,7 @@ class BroadcastTracker { result = RelayResult.Error(errorMessage), ), ) - Log.d(TAG, "[$trackingId] Cannot connect to ${relay.url}: $errorMessage") + Log.d(TAG) { "[$trackingId] Cannot connect to ${relay.url}: $errorMessage" } } } @@ -114,7 +114,7 @@ class BroadcastTracker { result = RelayResult.Error("Relay disconnected before completion"), ), ) - Log.d(TAG, "[$trackingId] Disconnected from ${relay.url}") + Log.d(TAG) { "[$trackingId] Disconnected from ${relay.url}" } } } @@ -135,7 +135,7 @@ class BroadcastTracker { RelayResult.Error(msg.message) } resultChannel.trySend(RelayResponse(relay.url, result)) - Log.d(TAG, "[$trackingId] Response from ${relay.url}: success=${msg.success} message=${msg.message}") + Log.d(TAG) { "[$trackingId] Response from ${relay.url}: success=${msg.success} message=${msg.message}" } } } } @@ -190,7 +190,7 @@ class BroadcastTracker { list.map { if (it.id == trackingId) finalBroadcast else it }.toImmutableList() } - Log.d(TAG, "Broadcast $trackingId complete: ${finalBroadcast.successCount}/${finalBroadcast.totalRelays} success") + Log.d(TAG) { "Broadcast $trackingId complete: ${finalBroadcast.successCount}/${finalBroadcast.totalRelays} success" } } finally { client.removeConnectionListener(subscription) } @@ -278,7 +278,7 @@ class BroadcastTracker { result = RelayResult.Error(errorMessage), ), ) - Log.d(TAG, "[${broadcast.id}] Retry cannot connect to ${relay.url}: $errorMessage") + Log.d(TAG) { "[${broadcast.id}] Retry cannot connect to ${relay.url}: $errorMessage" } } } @@ -290,7 +290,7 @@ class BroadcastTracker { result = RelayResult.Error("Relay disconnected before completion"), ), ) - Log.d(TAG, "[${broadcast.id}] Retry disconnected from ${relay.url}") + Log.d(TAG) { "[${broadcast.id}] Retry disconnected from ${relay.url}" } } } @@ -311,7 +311,7 @@ class BroadcastTracker { RelayResult.Error(msg.message) } resultChannel.trySend(RelayResponse(relay.url, result)) - Log.d(TAG, "[${broadcast.id}] Retry response from ${relay.url}: success=${msg.success}") + Log.d(TAG) { "[${broadcast.id}] Retry response from ${relay.url}: success=${msg.success}" } } } } @@ -383,7 +383,7 @@ class BroadcastTracker { list.map { if (it.id == broadcast.id) finalBroadcast else it }.toImmutableList() } - Log.d(TAG, "Retry complete for ${broadcast.id}: ${finalBroadcast.successCount}/${finalBroadcast.totalRelays} success") + Log.d(TAG) { "Retry complete for ${broadcast.id}: ${finalBroadcast.successCount}/${finalBroadcast.totalRelays} success" } return finalBroadcast } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/connectivity/ConnectivityFlow.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/connectivity/ConnectivityFlow.kt index 2c72217f1..a3d140e5b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/connectivity/ConnectivityFlow.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/connectivity/ConnectivityFlow.kt @@ -48,7 +48,7 @@ class ConnectivityFlow( object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { super.onAvailable(network) - Log.d("ConnectivityFlow", "onAvailable ${network.networkHandle}") + Log.d("ConnectivityFlow") { "onAvailable ${network.networkHandle}" } connectivityManager.getNetworkCapabilities(network)?.let { trySend(ConnectivityStatus.Active(network.networkHandle, it.isMeteredOrMobileData())) } @@ -60,13 +60,13 @@ class ConnectivityFlow( ) { super.onCapabilitiesChanged(network, networkCapabilities) val isMobile = networkCapabilities.isMeteredOrMobileData() - Log.d("ConnectivityFlow", "onCapabilitiesChanged ${network.networkHandle} $isMobile") + Log.d("ConnectivityFlow") { "onCapabilitiesChanged ${network.networkHandle} $isMobile" } trySend(ConnectivityStatus.Active(network.networkHandle, isMobile)) } override fun onLost(network: Network) { super.onLost(network) - Log.d("ConnectivityFlow", "onLost ${network.networkHandle} ") + Log.d("ConnectivityFlow") { "onLost ${network.networkHandle} " } trySend(ConnectivityStatus.Off) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/lnurl/LightningAddressResolver.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/lnurl/LightningAddressResolver.kt index da9cc9ae5..c37e4b4de 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/lnurl/LightningAddressResolver.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/lnurl/LightningAddressResolver.kt @@ -188,7 +188,7 @@ class LightningAddressResolver { } if (errorMessage == null) { - Log.d("LightningAddressResolver", "Error parsing LNResponse: $body") + Log.d("LightningAddressResolver") { "Error parsing LNResponse: $body" } } return errorMessage diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/location/LocationFlow.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/location/LocationFlow.kt index 480efa4ce..87ab766ce 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/location/LocationFlow.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/location/LocationFlow.kt @@ -48,13 +48,13 @@ class LocationFlow( val locationCallback = LocationListener { location -> - Log.d("LocationFlow", "onLocationChanged $location") + Log.d("LocationFlow") { "onLocationChanged $location" } launch { send(location) } } locationManager.allProviders.forEach { val location = locationManager.getLastKnownLocation(it) - Log.d("LocationFlow", "Last Known location is $location") + Log.d("LocationFlow") { "Last Known location is $location" } if (location != null) { send(location) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/location/ReverseGeolocation.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/location/ReverseGeolocation.kt index cdf1e95d3..3caed0056 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/location/ReverseGeolocation.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/location/ReverseGeolocation.kt @@ -53,18 +53,18 @@ class ReverseGeolocation { val locationCallback = object : Geocoder.GeocodeListener { override fun onGeocode(addresses: List
) { - Log.d("ReverseGeoLocation", "Found ${addresses.size} new addresses") + Log.d("ReverseGeoLocation") { "Found ${addresses.size} new addresses" } onReady(addresses) } override fun onError(errorMessage: String?) { super.onError(errorMessage) - Log.w("ReverseGeoLocation", "Failure $errorMessage") + Log.w("ReverseGeoLocation") { "Failure $errorMessage" } onReady(null) } } - Log.d("ReverseGeoLocation", "Execute Async $location") + Log.d("ReverseGeoLocation") { "Execute Async $location" } Geocoder(context).getFromLocation( location.latitude, location.longitude, @@ -77,7 +77,7 @@ class ReverseGeolocation { location: Location, context: Context, ): List
? { - Log.d("ReverseGeoLocation", "Execute Sync $location") + Log.d("ReverseGeoLocation") { "Execute Sync $location" } return try { Geocoder(context).getFromLocation( location.latitude, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/logging/ChoreographerHelper.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/logging/ChoreographerHelper.kt index c4d7569d0..591079375 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/logging/ChoreographerHelper.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/logging/ChoreographerHelper.kt @@ -41,7 +41,7 @@ object ChoreographerHelper { if (diff > 35) { // Follow the frame number val droppedCount = (diff / 16.6).toInt() - Log.w("block-canary", "Dropped $droppedCount frames. Skipped $diff ms") + Log.w("block-canary") { "Dropped $droppedCount frames. Skipped $diff ms" } } lastFrameTimeNanos = frameTimeNanos Choreographer.getInstance().postFrameCallback(this) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/logging/LogMonitor.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/logging/LogMonitor.kt index 8d0b882a0..21fddb7c0 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/logging/LogMonitor.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/logging/LogMonitor.kt @@ -60,7 +60,7 @@ class LogMonitor : Printer { val endTime = System.currentTimeMillis() if (x.indexOf("com.vitorpamplona.amethyst") > 0) { - Log.d("block-canary", "Looper ${endTime - mStartTimestamp}ms for $x") + Log.d("block-canary") { "Looper ${endTime - mStartTimestamp}ms for $x" } } mPrintingStarted = false diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt index 2ccd1a069..d1696c702 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt @@ -67,14 +67,14 @@ class EventNotificationConsumer( LocalPreferences.allSavedAccounts().forEach { if (!matchAccount && (it.hasPrivKey || it.loggedInWithExternalSigner)) { LocalPreferences.loadAccountConfigFromEncryptedStorage(it.npub)?.let { acc -> - Log.d(TAG, "New Notification Testing if for ${it.npub}") + Log.d(TAG) { "New Notification Testing if for ${it.npub}" } try { val account = Amethyst.instance.accountsCache.loadAccount(acc) consumeIfMatchesAccount(event, account) matchAccount = true } catch (e: Exception) { if (e is CancellationException) throw e - Log.d(TAG, "Message was not for user ${it.npub}: ${e.message}") + Log.d(TAG) { "Message was not for user ${it.npub}: ${e.message}" } } } } @@ -94,14 +94,14 @@ class EventNotificationConsumer( account: Account, ) { val consumed = LocalCache.hasConsumed(notificationEvent) - Log.d(TAG, "New Notification ${notificationEvent.kind} ${notificationEvent.id} Arrived for ${account.signer.pubKey} consumed= $consumed") + Log.d(TAG) { "New Notification ${notificationEvent.kind} ${notificationEvent.id} Arrived for ${account.signer.pubKey} consumed= $consumed" } if (!consumed) { Log.d(TAG, "New Notification was verified") if (!notificationManager().areNotificationsEnabled()) return Log.d(TAG, "Notifications are enabled") unwrapAndConsume(notificationEvent, account.signer)?.let { innerEvent -> - Log.d(TAG, "Unwrapped consume ${innerEvent.javaClass.simpleName}") + Log.d(TAG) { "Unwrapped consume ${innerEvent.javaClass.simpleName}" } when (innerEvent) { is PrivateDmEvent -> notify(innerEvent, account) @@ -124,14 +124,14 @@ class EventNotificationConsumer( LocalPreferences.allSavedAccounts().forEach { if (!matchAccount && (it.hasPrivKey || it.loggedInWithExternalSigner) && it.npub in npubs) { LocalPreferences.loadAccountConfigFromEncryptedStorage(it.npub)?.let { accountSettings -> - Log.d(TAG, "New Notification Testing if for ${it.npub}") + Log.d(TAG) { "New Notification Testing if for ${it.npub}" } try { val account = Amethyst.instance.accountsCache.loadAccount(accountSettings) consumeNotificationEvent(event, account) matchAccount = true } catch (e: Exception) { if (e is CancellationException) throw e - Log.d(TAG, "Message was not for user ${it.npub}: ${e.message}") + Log.d(TAG) { "Message was not for user ${it.npub}: ${e.message}" } } } } @@ -365,7 +365,7 @@ class EventNotificationConsumer( account: Account, ) { Log.d(TAG, "New Zap to Notify") - Log.d(TAG, "Notify Start ${event.toNostrUri()}") + Log.d(TAG) { "Notify Start ${event.toNostrUri()}" } LocalCache.getNoteIfExists(event.id) ?: return Log.d(TAG, "Notify Not Notified Yet") @@ -378,7 +378,7 @@ class EventNotificationConsumer( val noteZapRequest = event.zapRequest?.id?.let { LocalCache.checkGetOrCreateNote(it) } ?: return val noteZapped = event.zappedPost().firstOrNull()?.let { LocalCache.checkGetOrCreateNote(it) } ?: return - Log.d(TAG, "Notify ZapRequest $noteZapRequest zapped $noteZapped") + Log.d(TAG) { "Notify ZapRequest $noteZapRequest zapped $noteZapped" } if ((event.amount ?: BigDecimal.ZERO) < BigDecimal.TEN) return @@ -387,11 +387,11 @@ class EventNotificationConsumer( if (event.isTaggedUser(account.signer.pubKey)) { val amount = showAmount(event.amount) - Log.d(TAG, "Notify Amount $amount") + Log.d(TAG) { "Notify Amount $amount" } (noteZapRequest.event as? LnZapRequestEvent)?.let { event -> decryptZapContentAuthor(event, account.signer)?.let { decryptedEvent -> - Log.d(TAG, "Notify Decrypted if Private Zap ${event.id}") + Log.d(TAG) { "Notify Decrypted if Private Zap ${event.id}" } val author = LocalCache.getOrCreateUser(decryptedEvent.pubKey) val senderInfo = Pair(author, decryptedEvent.content.ifBlank { null }) @@ -428,7 +428,7 @@ class EventNotificationConsumer( .hexToByteArray() .toNpub() - Log.d(TAG, "Notify ${event.id} $content $title $noteUri") + Log.d(TAG) { "Notify ${event.id} $content $title $noteUri" } notificationManager() .sendZapNotification( @@ -463,7 +463,7 @@ class EventNotificationConsumer( .hexToByteArray() .toNpub() - Log.d(TAG, "Notify ${event.id} $title $noteUri") + Log.d(TAG) { "Notify ${event.id} $title $noteUri" } notificationManager() .sendZapNotification( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationReplyReceiver.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationReplyReceiver.kt index f5009118e..0289c3406 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationReplyReceiver.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationReplyReceiver.kt @@ -85,7 +85,7 @@ class NotificationReplyReceiver : BroadcastReceiver() { notificationManager.cancel(notificationId) } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("NotificationReply", "Failed to send reply: ${e.message}") + Log.e("NotificationReply") { "Failed to send reply: ${e.message}" } } finally { pendingResult.finish() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/PokeyReceiver.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/PokeyReceiver.kt index 08b78c4df..d2f23c8e1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/PokeyReceiver.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/PokeyReceiver.kt @@ -69,7 +69,7 @@ class PokeyReceiver : BroadcastReceiver() { ) { if (intent.action == POKEY_ACTION) { // it's best practice to verify intent action before performing any operation val eventStr = intent.getStringExtra("EVENT") - Log.d(TAG, "New Pokey Notification Arrived $eventStr") + Log.d(TAG) { "New Pokey Notification Arrived $eventStr" } if (eventStr == null) return diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/RegisterAccounts.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/RegisterAccounts.kt index 042f24aef..7c7d818f6 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/RegisterAccounts.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/RegisterAccounts.kt @@ -78,7 +78,7 @@ class RegisterAccounts( accounts .mapNotNull { account -> if (account.hasPrivKey || account.loggedInWithExternalSigner) { - Log.d(tag, "Register Account ${account.npub}") + Log.d(tag) { "Register Account ${account.npub}" } val acc = LocalPreferences.loadAccountConfigFromEncryptedStorage(account.npub) if (acc != null && acc.isWriteable()) { @@ -87,10 +87,10 @@ class RegisterAccounts( if (isDebug) { val readRelays = nip65Read.joinToString(", ") { it.url } - Log.d(tag, "Register Account ${account.npub} NIP65 Reads $readRelays") + Log.d(tag) { "Register Account ${account.npub} NIP65 Reads $readRelays" } val dmRelays = nip17Read.joinToString(", ") { it.url } - Log.d(tag, "Register Account ${account.npub} NIP17 Reads $dmRelays") + Log.d(tag) { "Register Account ${account.npub} NIP17 Reads $dmRelays" } } val relays = (nip65Read + nip17Read) @@ -132,7 +132,7 @@ class RegisterAccounts( val client = client(url) client.newCall(request).executeAsync().use { response -> - Log.i(tag, "Server registration ${response.isSuccessful}") + Log.i(tag) { "Server registration ${response.isSuccessful}" } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/LoggingInterceptor.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/LoggingInterceptor.kt index 114ee76b4..1982c7399 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/LoggingInterceptor.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/LoggingInterceptor.kt @@ -41,7 +41,7 @@ class LoggingInterceptor : Interceptor { val response: Response = chain.proceed(request) val t2 = System.nanoTime() - Log.d("OkHttpLog", "Req $port ${request.url} in ${(t2 - t1) / 1e6}ms") + Log.d("OkHttpLog") { "Req $port ${request.url} in ${(t2 - t1) / 1e6}ms" } return response } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/GetVideoController.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/GetVideoController.kt index 3375b7919..b561a4538 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/GetVideoController.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/composable/GetVideoController.kt @@ -47,7 +47,7 @@ fun GetVideoController( keepPlaying = mediaItem.src.keepPlaying, context = context, ).onEach { state -> - Log.d("PlaybackService", "Controller instance: ${state.controller}") + Log.d("PlaybackService") { "Controller instance: ${state.controller}" } if (BackgroundMedia.isPlaying()) { // There is a video playing, start this one on mute. @@ -57,7 +57,7 @@ fun GetVideoController( // There is no other video playing. Use the default mute state to // decide if sound is on or not. state.controller.volume = if (muted) 0f else 1f - Log.d("PlaybackService", "OnEach $muted") + Log.d("PlaybackService") { "OnEach $muted" } } if (play) { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/service/PlaybackServiceClient.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/service/PlaybackServiceClient.kt index 1b3bd3934..534e2d025 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/service/PlaybackServiceClient.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/service/PlaybackServiceClient.kt @@ -67,14 +67,14 @@ object PlaybackServiceClient { .setConnectionHints(bundle) .buildAsync() - Log.d("PlaybackService", "Preparing Controller $id $videoUri") + Log.d("PlaybackService") { "Preparing Controller $id $videoUri" } controllerFuture.addListener( { try { val controller = controllerFuture.get(5, TimeUnit.SECONDS) - Log.d("PlaybackService", "Controller Ready $id $videoUri") + Log.d("PlaybackService") { "Controller Ready $id $videoUri" } // checks if the player is still active before engaging further trySend( @@ -92,11 +92,11 @@ object PlaybackServiceClient { ) awaitClose { - Log.d("PlaybackService", "Releasing Controller $id $videoUri") + Log.d("PlaybackService") { "Releasing Controller $id $videoUri" } try { MediaController.releaseFuture(controllerFuture) } catch (e: Exception) { - Log.e("Playback Client", "Failed to release Playback Client for $id $videoUri ${e.message}") + Log.e("Playback Client") { "Failed to release Playback Client for $id $videoUri ${e.message}" } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/RelayProxyClientConnector.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/RelayProxyClientConnector.kt index 512f85a3b..ae6fc1831 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/RelayProxyClientConnector.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/RelayProxyClientConnector.kt @@ -74,7 +74,7 @@ class RelayProxyClientConnector( if (it.connectivity is ConnectivityStatus.StartingService) { // ignore } else if (it.connectivity is ConnectivityStatus.Off) { - Log.d("ManageRelayServices", "Connectivity Off: Pausing Relay Services ${it.connectivity}") + Log.d("ManageRelayServices") { "Connectivity Off: Pausing Relay Services ${it.connectivity}" } if (client.isActive()) { client.disconnect() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/authCommand/model/AuthCoordinator.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/authCommand/model/AuthCoordinator.kt index 2437c21a2..80c11d79d 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/authCommand/model/AuthCoordinator.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/authCommand/model/AuthCoordinator.kt @@ -80,7 +80,7 @@ class AuthCoordinator( if (account == null) return if (isDebug) { - Log.d("AuthCoordinator", "Watch $account") + Log.d("AuthCoordinator") { "Watch $account" } } authWithAccounts.add(account) @@ -91,7 +91,7 @@ class AuthCoordinator( if (account == null) return if (isDebug) { - Log.d("AuthCoordinator", "Unwatch $account") + Log.d("AuthCoordinator") { "Unwatch $account" } } authWithAccounts.remove(account) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/speedLogger/FrameStat.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/speedLogger/FrameStat.kt index cc5f24019..79cdf51a2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/speedLogger/FrameStat.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/speedLogger/FrameStat.kt @@ -57,10 +57,10 @@ class FrameStat { } fun log() { - Log.d(TAG, "Events Per Second: ${eventCount.get()}") + Log.d(TAG) { "Events Per Second: ${eventCount.get()}" } kinds.forEach { key, value -> if (value.count.get() > 0) { - Log.d(TAG, "-- Kind $key $value") + Log.d(TAG) { "-- Kind $key $value" } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/FileHeader.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/FileHeader.kt index 49abc9616..79427a04b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/FileHeader.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/FileHeader.kt @@ -58,7 +58,7 @@ class FileHeader( } } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("ImageDownload", "Couldn't download image from server: ${e.message}") + Log.e("ImageDownload") { "Couldn't download image from server: ${e.message}" } Result.failure(e) } @@ -76,7 +76,7 @@ class FileHeader( Result.success(FileHeader(mimeType, hash, size, dim, blurHash)) } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("ImageDownload", "Couldn't convert image in to File Header: ${e.message}") + Log.e("ImageDownload") { "Couldn't convert image in to File Header: ${e.message}" } Result.failure(e) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/MediaCompressor.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/MediaCompressor.kt index 119bc7400..5cc488797 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/MediaCompressor.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/MediaCompressor.kt @@ -92,22 +92,22 @@ class MediaCompressor { var tempFile: File? = null return try { - Log.d("MediaCompressor", "Using image compression $mediaQuality") + Log.d("MediaCompressor") { "Using image compression $mediaQuality" } tempFile = MediaCompressorFileUtils.from(uri, context) val compressedImageFile = Compressor.compress(context, tempFile) { default(width = 640, format = Bitmap.CompressFormat.JPEG, quality = imageQuality) } if (tempFile != compressedImageFile && !tempFile.delete()) { - Log.w("MediaCompressor", "Failed to delete temp file: ${tempFile.absolutePath}") + Log.w("MediaCompressor") { "Failed to delete temp file: ${tempFile.absolutePath}" } } - Log.d("MediaCompressor", "Image compression success. New size [${compressedImageFile.length()}]") + Log.d("MediaCompressor") { "Image compression success. New size [${compressedImageFile.length()}]" } MediaCompressorResult(compressedImageFile.toUri(), MimeTypes.IMAGE_JPEG, compressedImageFile.length()) } catch (e: Exception) { if (e is CancellationException) throw e - Log.d("MediaCompressor", "Image compression failed: ${e.message}") + Log.d("MediaCompressor") { "Image compression failed: ${e.message}" } if (tempFile?.delete() == false) { - Log.w("MediaCompressor", "Failed to delete temp file: ${tempFile.absolutePath}") + Log.w("MediaCompressor") { "Failed to delete temp file: ${tempFile.absolutePath}" } } MediaCompressorResult(uri, contentType, null) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/MetadataStripper.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/MetadataStripper.kt index 9e603f514..9a0363394 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/MetadataStripper.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/MetadataStripper.kt @@ -172,7 +172,7 @@ object MetadataStripper { muxer?.release() extractor.release() if (!succeeded && !outputFile.delete()) { - Log.w("MetadataStripper", "Failed to delete temp file: ${outputFile.absolutePath}") + Log.w("MetadataStripper") { "Failed to delete temp file: ${outputFile.absolutePath}" } } } return succeeded @@ -202,7 +202,7 @@ object MetadataStripper { context.contentResolver.openInputStream(uri) ?: run { if (!tempFile.delete()) { - Log.w("MetadataStripper", "Failed to delete temp file: ${tempFile.absolutePath}") + Log.w("MetadataStripper") { "Failed to delete temp file: ${tempFile.absolutePath}" } } return StrippingResult(uri, false) } @@ -223,9 +223,9 @@ object MetadataStripper { } catch (e: Exception) { if (e is CancellationException) throw e if (tempFile?.delete() == false) { - Log.w("MetadataStripper", "Failed to delete temp file: ${tempFile.absolutePath}") + Log.w("MetadataStripper") { "Failed to delete temp file: ${tempFile.absolutePath}" } } - Log.d("MetadataStripper", "Failed to strip image metadata: ${e.message}") + Log.d("MetadataStripper") { "Failed to strip image metadata: ${e.message}" } StrippingResult(uri, false) } } @@ -260,7 +260,7 @@ object MetadataStripper { StrippingResult(tempOutputFile.toUri(), true) } catch (e: Exception) { if (e is CancellationException) throw e - Log.d("MetadataStripper", "Failed to strip video metadata: ${e.message}") + Log.d("MetadataStripper") { "Failed to strip video metadata: ${e.message}" } StrippingResult(uri, false) } } @@ -293,7 +293,7 @@ object MetadataStripper { StrippingResult(tempOutputFile.toUri(), true) } catch (e: Exception) { if (e is CancellationException) throw e - Log.d("MetadataStripper", "Failed to strip audio metadata: ${e.message}") + Log.d("MetadataStripper") { "Failed to strip audio metadata: ${e.message}" } StrippingResult(uri, false) } } @@ -311,7 +311,7 @@ object MetadataStripper { } } ?: run { if (!tempInputFile.delete()) { - Log.w("MetadataStripper", "Failed to delete temp file: ${tempInputFile.absolutePath}") + Log.w("MetadataStripper") { "Failed to delete temp file: ${tempInputFile.absolutePath}" } } return StrippingResult(uri, false) } @@ -354,7 +354,7 @@ object MetadataStripper { if (startOffset == 0L && endOffset == fileSize) { if (!tempInputFile.delete()) { - Log.w("MetadataStripper", "Failed to delete temp file: ${tempInputFile.absolutePath}") + Log.w("MetadataStripper") { "Failed to delete temp file: ${tempInputFile.absolutePath}" } } tempInputFile = null return StrippingResult(uri, true) // no tags found, already clean @@ -376,7 +376,7 @@ object MetadataStripper { } } if (!tempInputFile.delete()) { - Log.w("MetadataStripper", "Failed to delete temp file: ${tempInputFile.absolutePath}") + Log.w("MetadataStripper") { "Failed to delete temp file: ${tempInputFile.absolutePath}" } } tempInputFile = null @@ -385,9 +385,9 @@ object MetadataStripper { } catch (e: Exception) { if (e is CancellationException) throw e if (tempInputFile?.delete() == false) { - Log.w("MetadataStripper", "Failed to delete temp file: ${tempInputFile.absolutePath}") + Log.w("MetadataStripper") { "Failed to delete temp file: ${tempInputFile.absolutePath}" } } - Log.d("MetadataStripper", "Failed to strip MP3 metadata: ${e.message}") + Log.d("MetadataStripper") { "Failed to strip MP3 metadata: ${e.message}" } StrippingResult(uri, false) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/UploadOrchestrator.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/UploadOrchestrator.kt index b56d78932..e0e5ad0f9 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/UploadOrchestrator.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/UploadOrchestrator.kt @@ -339,7 +339,7 @@ class UploadOrchestrator { val path = tempUri.path ?: return val file = File(path) if (file.delete()) { - Log.d("UploadOrchestrator", "Deleted temp file: $path") + Log.d("UploadOrchestrator") { "Deleted temp file: $path" } } } catch (e: Exception) { Log.w("UploadOrchestrator", "Failed to delete temp file: ${tempUri.path}", e) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/VideoCompressionHelper.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/VideoCompressionHelper.kt index 2f2e3adc5..5fd52757e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/VideoCompressionHelper.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/uploads/VideoCompressionHelper.kt @@ -26,7 +26,6 @@ import android.net.Uri import android.os.Handler import android.os.Looper import android.text.format.Formatter.formatFileSize -import android.util.Log import android.widget.Toast import com.abedelazizshe.lightcompressorlibrary.CompressionListener import com.abedelazizshe.lightcompressorlibrary.VideoCodec @@ -34,6 +33,8 @@ import com.abedelazizshe.lightcompressorlibrary.VideoCompressor import com.abedelazizshe.lightcompressorlibrary.config.AppSpecificStorageConfiguration import com.abedelazizshe.lightcompressorlibrary.config.Configuration import com.abedelazizshe.lightcompressorlibrary.config.VideoResizer +import com.vitorpamplona.quartz.utils.Log +import com.vitorpamplona.quartz.utils.LogLevel import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withTimeoutOrNull import java.io.File @@ -97,7 +98,7 @@ data class CompressionRule( val codecMultiplier = if (useH265) 0.75f else 1.0f val finalMultiplier = framerateMultiplier * codecMultiplier - Log.d("VideoCompressionHelper", "framerate: $framerate, useH265: $useH265, Bitrate multiplier: $finalMultiplier") + Log.d("VideoCompressionHelper") { "framerate: $framerate, useH265: $useH265, Bitrate multiplier: $finalMultiplier" } return (bitrateMbps * finalMultiplier * MBPS_TO_BPS_MULTIPLIER).toInt() } @@ -161,13 +162,12 @@ object VideoCompressionHelper { .getValue(info.resolution.getStandard()) val bitrateBps = rule.getBitrateBps(info.framerate, useH265) - Log.d(LOG_TAG, "Bitrate: ${bitrateBps}bps for ${info.resolution.getStandard()} quality=$mediaQuality framerate=${info.framerate}fps useH265=$useH265.") + Log.d(LOG_TAG) { "Bitrate: ${bitrateBps}bps for ${info.resolution.getStandard()} quality=$mediaQuality framerate=${info.framerate}fps useH265=$useH265." } - Log.d( - LOG_TAG, + Log.d(LOG_TAG) { "Resizer: ${info.resolution.width}x${info.resolution.height} -> " + - "shortSide=${rule.shortSide} (${rule.description})", - ) + "shortSide=${rule.shortSide} (${rule.description})" + } val resizer = VideoResizer.limitShortSide(rule.shortSide.toDouble()) Pair(bitrateBps, resizer) @@ -217,7 +217,7 @@ object VideoCompressionHelper { if (path == null) { applicationContext.notifyUser( "Video compression succeeded, but path was null", - Log.WARN, + LogLevel.WARN, ) if (continuation.isActive) continuation.resume(null) return @@ -233,11 +233,11 @@ object VideoCompressionHelper { // Sanity check: compression not smaller than original if (originalSize in 1..size) { if (!File(path).delete()) { - Log.w("VideoCompressionHelper", "Failed to delete compressed file: $path") + Log.w("VideoCompressionHelper") { "Failed to delete compressed file: $path" } } applicationContext.notifyUser( "Compressed file larger than original. Using original.", - Log.WARN, + LogLevel.WARN, ) if (continuation.isActive) { continuation.resume( @@ -257,11 +257,10 @@ object VideoCompressionHelper { ) } - Log.d( - LOG_TAG, + Log.d(LOG_TAG) { "Compression success: Original [$originalSize] -> " + - "Compressed [$size] ($reductionPercent% reduction)", - ) + "Compressed [$size] ($reductionPercent% reduction)" + } if (continuation.isActive) { continuation.resume( @@ -276,7 +275,7 @@ object VideoCompressionHelper { ) { applicationContext.notifyUser( "Video compression failed: $failureMessage", - Log.ERROR, + LogLevel.ERROR, ) if (continuation.isActive) continuation.resume(null) } @@ -300,22 +299,23 @@ object VideoCompressionHelper { if (cursor.moveToFirst()) cursor.getLong(sizeIndex) else 0L } ?: 0L } catch (e: Exception) { - Log.w(LOG_TAG, "Failed to get file size: ${e.message}") + Log.w(LOG_TAG) { "Failed to get file size: ${e.message}" } 0L } private fun Context.notifyUser( message: String, - logLevel: Int = Log.DEBUG, + logLevel: LogLevel = LogLevel.DEBUG, duration: Int = Toast.LENGTH_LONG, ) { Handler(Looper.getMainLooper()).post { Toast.makeText(this, message, duration).show() } when (logLevel) { - Log.ERROR -> Log.e(LOG_TAG, message) - Log.WARN -> Log.w(LOG_TAG, message) - else -> Log.d(LOG_TAG, message) + LogLevel.ERROR -> Log.e(LOG_TAG, message) + LogLevel.WARN -> Log.w(LOG_TAG, message) + LogLevel.INFO -> Log.i(LOG_TAG, message) + LogLevel.DEBUG -> Log.d(LOG_TAG, message) } } @@ -348,13 +348,13 @@ object VideoCompressionHelper { null } } catch (e: Exception) { - Log.w(LOG_TAG, "Failed to get video resolution: ${e.message}") + Log.w(LOG_TAG) { "Failed to get video resolution: ${e.message}" } null } finally { try { retriever?.release() } catch (e: Exception) { - Log.w(LOG_TAG, "Failed to release MediaMetadataRetriever: ${e.message}") + Log.w(LOG_TAG) { "Failed to release MediaMetadataRetriever: ${e.message}" } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/MainActivity.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/MainActivity.kt index 26327122b..933dda809 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/MainActivity.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/MainActivity.kt @@ -60,7 +60,7 @@ class MainActivity : AppCompatActivity() { enableEdgeToEdge() super.onCreate(savedInstanceState) - Log.d("ActivityLifecycle", "MainActivity.onCreate $this") + Log.d("ActivityLifecycle") { "MainActivity.onCreate $this" } setContent { StringResSetup() @@ -74,14 +74,14 @@ class MainActivity : AppCompatActivity() { override fun onResume() { super.onResume() - Log.d("ActivityLifecycle", "MainActivity.onResume $this") + Log.d("ActivityLifecycle") { "MainActivity.onResume $this" } // starts muted every time DEFAULT_MUTED_SETTING.value = true } override fun onPause() { - Log.d("ActivityLifecycle", "MainActivity.onPause $this") + Log.d("ActivityLifecycle") { "MainActivity.onPause $this" } @OptIn(DelicateCoroutinesApi::class) GlobalScope.launch(Dispatchers.IO) { @@ -106,11 +106,11 @@ class MainActivity : AppCompatActivity() { // serviceManager.trimMemory() // } - Log.d("ActivityLifecycle", "MainActivity.onStop $this") + Log.d("ActivityLifecycle") { "MainActivity.onStop $this" } } override fun onDestroy() { - Log.d("ActivityLifecycle", "MainActivity.onDestroy $this") + Log.d("ActivityLifecycle") { "MainActivity.onDestroy $this" } BackgroundMedia.removeBackgroundControllerAndReleaseIt() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceAnonymizationController.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceAnonymizationController.kt index 5f7188d03..9883511d3 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceAnonymizationController.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceAnonymizationController.kt @@ -61,7 +61,7 @@ class VoiceAnonymizationController( preset: VoicePreset, originalFile: File?, ) { - Log.d(logTag, "selectPreset called with: ${preset.name}, pitchFactor: ${preset.pitchFactor}") + Log.d(logTag) { "selectPreset called with: ${preset.name}, pitchFactor: ${preset.pitchFactor}" } if (processingPreset != null || preset == selectedPreset) return if (preset == VoicePreset.NONE) { @@ -110,9 +110,9 @@ class VoiceAnonymizationController( try { if (result.file.exists()) { if (result.file.delete()) { - Log.d(logTag, "Deleted distorted file: ${result.file.absolutePath}") + Log.d(logTag) { "Deleted distorted file: ${result.file.absolutePath}" } } else { - Log.w(logTag, "Failed to delete distorted file: ${result.file.absolutePath}") + Log.w(logTag) { "Failed to delete distorted file: ${result.file.absolutePath}" } } } } catch (e: Exception) { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceAnonymizer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceAnonymizer.kt index a8e6ff782..f9fd2fc65 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceAnonymizer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceAnonymizer.kt @@ -25,7 +25,6 @@ import android.media.MediaCodecInfo import android.media.MediaExtractor import android.media.MediaFormat import android.media.MediaMuxer -import android.util.Log import be.tarsos.dsp.AudioDispatcher import be.tarsos.dsp.AudioEvent import be.tarsos.dsp.AudioProcessor @@ -33,6 +32,7 @@ import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd import be.tarsos.dsp.io.TarsosDSPAudioFloatConverter import be.tarsos.dsp.io.TarsosDSPAudioFormat import be.tarsos.dsp.resample.RateTransposer +import com.vitorpamplona.quartz.utils.Log import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.isActive diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceMessagePreview.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceMessagePreview.kt index c87d34b75..43bb07f54 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceMessagePreview.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/uploads/VoiceMessagePreview.kt @@ -21,7 +21,6 @@ package com.vitorpamplona.amethyst.ui.actions.uploads import android.media.MediaPlayer -import android.util.Log import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -60,6 +59,7 @@ import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.ui.components.AudioWaveformReadOnly import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.quartz.nipA0VoiceMessages.AudioMeta +import com.vitorpamplona.quartz.utils.Log import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import java.io.File diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/ShareHelper.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/ShareHelper.kt index 90bad3c7f..2b91c47c1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/ShareHelper.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/ShareHelper.kt @@ -250,7 +250,7 @@ object ShareHelper { if (!renamed) { tempFile.copyTo(sharableFile, overwrite = true) if (!tempFile.delete()) { - Log.w(TAG, "Failed to delete temp file ${tempFile.path} after copy") + Log.w(TAG) { "Failed to delete temp file ${tempFile.path} after copy" } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt index 21268e128..357f85ec4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt @@ -960,7 +960,7 @@ private suspend fun shareVideoFile( delay(SHARED_VIDEO_CLEANUP_DELAY_MS) sharedFile?.let { file -> if (!file.delete()) { - Log.w("ZoomableContentView", "Failed to delete shared file: ${file.path}") + Log.w("ZoomableContentView") { "Failed to delete shared file: ${file.path}" } } } } @@ -974,11 +974,11 @@ private suspend fun shareVideoFile( // Clean up temp file on error if (!tempFile.delete()) { - Log.w("ZoomableContentView", "Failed to delete temp file: ${tempFile.path}") + Log.w("ZoomableContentView") { "Failed to delete temp file: ${tempFile.path}" } } sharedFile?.let { file -> if (!file.delete()) { - Log.w("ZoomableContentView", "Failed to delete shared file: ${file.path}") + Log.w("ZoomableContentView") { "Failed to delete shared file: ${file.path}" } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/feeds/ChannelFeedContentState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/feeds/ChannelFeedContentState.kt index 7b53a2fdd..106cd2ba8 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/feeds/ChannelFeedContentState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/feeds/ChannelFeedContentState.kt @@ -176,7 +176,7 @@ class ChannelFeedContentState( } fun destroy() { - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } bundlerInsert.cancel() bundler.cancel() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/UsernameDisplay.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/UsernameDisplay.kt index 14c5ed899..a41fad4c9 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/UsernameDisplay.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/UsernameDisplay.kt @@ -174,5 +174,5 @@ private fun speak( .speak(message) .highlight() .onDone { Log.d("TextToSpeak", "speak: done") } - .onError { Log.d("TextToSpeak", "speak error: $it") } + .onError { Log.d("TextToSpeak") { "speak error: $it" } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/Highlight.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/Highlight.kt index 6cbb6251f..26a947d0c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/Highlight.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/Highlight.kt @@ -361,7 +361,7 @@ fun DisplayEntryForAUrl( try { URL(url) } catch (_: Exception) { - Log.w("Note Compose", "Invalid URI: $url") + Log.w("Note Compose") { "Invalid URI: $url" } null } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountScreen.kt index ecae95ec2..fa098494a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountScreen.kt @@ -48,7 +48,7 @@ fun AccountScreen(accountSessionManager: AccountSessionManager) { val accountState by accountSessionManager.accountContent.collectAsStateWithLifecycle() - Log.d("ActivityLifecycle", "AccountScreen $accountState $accountSessionManager") + Log.d("ActivityLifecycle") { "AccountScreen $accountState $accountSessionManager" } Crossfade( targetState = accountState, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/TopNavFilterState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/TopNavFilterState.kt index 13f27017a..8a81b1a7c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/TopNavFilterState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/TopNavFilterState.kt @@ -238,7 +238,7 @@ class TopNavFilterState( .stateIn(scope, SharingStarted.Eagerly, defaultLists) fun destroy() { - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt index f918cd9e9..d43caec0c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt @@ -99,24 +99,24 @@ open class UserFeedViewModel( } init { - Log.d("Init", "${this.javaClass.simpleName}") + Log.d("Init") { "${this.javaClass.simpleName}" } viewModelScope.launch(Dispatchers.IO) { LocalCache.live.newEventBundles.collect { newNotes -> - Log.d("Rendering Metrics", "Update feeds: ${this@UserFeedViewModel.javaClass.simpleName} with ${newNotes.size}") + Log.d("Rendering Metrics") { "Update feeds: ${this@UserFeedViewModel.javaClass.simpleName} with ${newNotes.size}" } invalidateData() } } viewModelScope.launch(Dispatchers.IO) { LocalCache.live.deletedEventBundles.collect { newNotes -> - Log.d("Rendering Metrics", "Delete from feeds: ${this@UserFeedViewModel.javaClass.simpleName} with ${newNotes.size}") + Log.d("Rendering Metrics") { "Delete from feeds: ${this@UserFeedViewModel.javaClass.simpleName} with ${newNotes.size}" } invalidateData() } } } override fun onCleared() { - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } bundler.cancel() super.onCleared() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/DecryptAndIndexProcessor.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/DecryptAndIndexProcessor.kt index 2b3eeeaf9..a569b5ac9 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/DecryptAndIndexProcessor.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/DecryptAndIndexProcessor.kt @@ -134,7 +134,7 @@ class EventProcessor( } if (deletedDrafts.isNotEmpty()) { - Log.w("EventProcessor", "Deleting ${deletedDrafts.size} draft notes") + Log.w("EventProcessor") { "Deleting ${deletedDrafts.size} draft notes" } account.delete(deletedDrafts) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/send/ChatNewMessageViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/send/ChatNewMessageViewModel.kt index 66935de2e..15d28f635 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/send/ChatNewMessageViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/send/ChatNewMessageViewModel.kt @@ -800,7 +800,7 @@ class ChatNewMessageViewModel : override fun onCleared() { super.onCleared() - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } // NIP-04 sending is deprecated. NIP-17 is always used. diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/publicChannels/send/ChannelNewMessageViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/publicChannels/send/ChannelNewMessageViewModel.kt index 5b293355b..94309697b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/publicChannels/send/ChannelNewMessageViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/publicChannels/send/ChannelNewMessageViewModel.kt @@ -663,7 +663,7 @@ open class ChannelNewMessageViewModel : override fun onCleared() { super.onCleared() - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } fun updateZapPercentage( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/nip23LongForm/LongFormPostViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/nip23LongForm/LongFormPostViewModel.kt index 4572c1c29..6388db9b1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/nip23LongForm/LongFormPostViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/nip23LongForm/LongFormPostViewModel.kt @@ -686,7 +686,7 @@ class LongFormPostViewModel : override fun onCleared() { super.onCleared() - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } override fun updateZapPercentage( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/nip99Classifieds/NewProductViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/nip99Classifieds/NewProductViewModel.kt index 826fa4eaa..d0b7fd87c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/nip99Classifieds/NewProductViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/discover/nip99Classifieds/NewProductViewModel.kt @@ -608,7 +608,7 @@ open class NewProductViewModel : override fun onCleared() { super.onCleared() - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } override fun updateZapPercentage( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/ShortNotePostViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/ShortNotePostViewModel.kt index 11601d54c..cd6c1729c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/ShortNotePostViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/ShortNotePostViewModel.kt @@ -1271,7 +1271,7 @@ open class ShortNotePostViewModel : voiceLocalFile?.let { file -> try { if (file.delete()) { - Log.d("ShortNotePostViewModel", "Deleted voice file: ${file.absolutePath}") + Log.d("ShortNotePostViewModel") { "Deleted voice file: ${file.absolutePath}" } } } catch (e: Exception) { Log.w("ShortNotePostViewModel", "Failed to delete voice file: ${file.absolutePath}", e) @@ -1365,7 +1365,7 @@ open class ShortNotePostViewModel : override fun onCleared() { super.onCleared() - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } override fun updateZapPercentage( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/VoiceReplyViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/VoiceReplyViewModel.kt index d44630a46..39c0e3919 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/VoiceReplyViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/VoiceReplyViewModel.kt @@ -157,7 +157,7 @@ class VoiceReplyViewModel : ViewModel() { try { if (file.exists()) { file.delete() - Log.d("VoiceReplyViewModel", "Deleted voice file: ${file.absolutePath}") + Log.d("VoiceReplyViewModel") { "Deleted voice file: ${file.absolutePath}" } } } catch (e: Exception) { Log.w("VoiceReplyViewModel", "Failed to delete voice file: ${file.absolutePath}", e) @@ -315,6 +315,6 @@ class VoiceReplyViewModel : ViewModel() { override fun onCleared() { cancel() super.onCleared() - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/live/LiveStatusIndicator.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/live/LiveStatusIndicator.kt index fdf604366..923835b1f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/live/LiveStatusIndicator.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/live/LiveStatusIndicator.kt @@ -20,7 +20,6 @@ */ package com.vitorpamplona.amethyst.ui.screen.loggedIn.home.live -import android.util.Log import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable @@ -34,6 +33,7 @@ import com.vitorpamplona.amethyst.commons.model.emphChat.EphemeralChatChannel import com.vitorpamplona.amethyst.commons.model.nip53LiveActivities.LiveActivitiesChannel import com.vitorpamplona.amethyst.service.OnlineChecker import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import com.vitorpamplona.quartz.utils.Log import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext @@ -106,7 +106,7 @@ private suspend fun checkChannelIsOnline( } } } catch (e: Exception) { - Log.d("LiveStatusIndicator", "Network error checking channel ${channel.toBestDisplayName()}: ${e.message}") + Log.d("LiveStatusIndicator") { "Network error checking channel ${channel.toBestDisplayName()}: ${e.message}" } // Return false if any network error occurs false } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/CardFeedContentState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/CardFeedContentState.kt index a0cd1da9d..ad7de41b2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/CardFeedContentState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/CardFeedContentState.kt @@ -463,7 +463,7 @@ class CardFeedContentState( } fun destroy() { - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } clear() bundlerInsert.cancel() bundler.cancel() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/NotificationSummaryState.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/NotificationSummaryState.kt index f112a4173..09cdd19ca 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/NotificationSummaryState.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/NotificationSummaryState.kt @@ -271,6 +271,6 @@ class NotificationSummaryState( fun destroy() { bundlerInsert.cancel() - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/publicMessages/NewPublicMessageViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/publicMessages/NewPublicMessageViewModel.kt index 28daa1bf2..9c58dd396 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/publicMessages/NewPublicMessageViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/notifications/publicMessages/NewPublicMessageViewModel.kt @@ -657,7 +657,7 @@ class NewPublicMessageViewModel : override fun onCleared() { super.onCleared() - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } } override fun updateZapPercentage( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/relays/RelayFeedViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/relays/RelayFeedViewModel.kt index 30579bda9..e1dc0546d 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/relays/RelayFeedViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/profile/relays/RelayFeedViewModel.kt @@ -195,7 +195,7 @@ class RelayFeedViewModel : } override fun onCleared() { - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } super.onCleared() } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/StringFeedViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/StringFeedViewModel.kt index 631ee4fd3..3cd6bea29 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/StringFeedViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/StringFeedViewModel.kt @@ -101,20 +101,20 @@ open class StringFeedViewModel( Log.d("Init", this.javaClass.simpleName) viewModelScope.launch(Dispatchers.IO) { LocalCache.live.newEventBundles.collect { newNotes -> - Log.d("Rendering Metrics", "Update feeds: ${this@StringFeedViewModel.javaClass.simpleName} with ${newNotes.size}") + Log.d("Rendering Metrics") { "Update feeds: ${this@StringFeedViewModel.javaClass.simpleName} with ${newNotes.size}" } invalidateData() } } viewModelScope.launch(Dispatchers.IO) { LocalCache.live.deletedEventBundles.collect { newNotes -> - Log.d("Rendering Metrics", "Delete feeds: ${this@StringFeedViewModel.javaClass.simpleName} with ${newNotes.size}") + Log.d("Rendering Metrics") { "Delete feeds: ${this@StringFeedViewModel.javaClass.simpleName} with ${newNotes.size}" } invalidateData() } } } override fun onCleared() { - Log.d("Init", "OnCleared: ${this.javaClass.simpleName}") + Log.d("Init") { "OnCleared: ${this.javaClass.simpleName}" } bundler.cancel() super.onCleared() } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/dal/HiddenAccountsFeedFilter.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/dal/HiddenAccountsFeedFilter.kt index 0ec1d5b64..119a427c2 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/dal/HiddenAccountsFeedFilter.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/settings/dal/HiddenAccountsFeedFilter.kt @@ -40,7 +40,7 @@ class HiddenAccountsFeedFilter( LocalCache.getOrCreateUser(it) } catch (e: Exception) { if (e is CancellationException) throw e - Log.e("HiddenAccountsFeedFilter", "Failed to parse key $it") + Log.e("HiddenAccountsFeedFilter") { "Failed to parse key $it" } null } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/tor/TorService.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/tor/TorService.kt index ccdea4a0f..e25508d0e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/tor/TorService.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/tor/TorService.kt @@ -65,7 +65,7 @@ class TorService( active.torControlConnection = torService.torControlConnection trySend(active) - Log.d("TorService", "Tor Service Connected ${torService.socksPort}") + Log.d("TorService") { "Tor Service Connected ${torService.socksPort}" } } } @@ -86,7 +86,7 @@ class TorService( try { context.unbindService(serviceConnection) } catch (e: Exception) { - Log.d("TorService", "Failed to unbind Tor Service: ${e.message}") + Log.d("TorService") { "Failed to unbind Tor Service: ${e.message}" } } launch { context.stopService(currentIntent) diff --git a/amethyst/src/play/java/com/vitorpamplona/amethyst/service/notifications/PushNotificationReceiverService.kt b/amethyst/src/play/java/com/vitorpamplona/amethyst/service/notifications/PushNotificationReceiverService.kt index 7ba915c3e..197dbd4d2 100644 --- a/amethyst/src/play/java/com/vitorpamplona/amethyst/service/notifications/PushNotificationReceiverService.kt +++ b/amethyst/src/play/java/com/vitorpamplona/amethyst/service/notifications/PushNotificationReceiverService.kt @@ -49,7 +49,7 @@ class PushNotificationReceiverService : FirebaseMessagingService() { // this is called when a message is received override fun onMessageReceived(remoteMessage: RemoteMessage) { - Log.d("PushNotificationService", "Notification received $remoteMessage") + Log.d("PushNotificationService") { "Notification received $remoteMessage" } scope.launch(Dispatchers.IO) { parseMessage(remoteMessage.data)?.let { receiveIfNew(it) } } diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/LargeDBInsertBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/LargeDBInsertBenchmark.kt index 6694997de..4350ecafe 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/LargeDBInsertBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/LargeDBInsertBenchmark.kt @@ -57,7 +57,7 @@ class LargeDBInsertBenchmark : BaseLargeCacheBenchmark() { try { db.insert(event) } catch (e: SQLiteException) { - Log.w("LargeDBInsertBenchmark", "Error inserting event: ${e.message} for event: ${event.toJson()}") + Log.w("LargeDBInsertBenchmark") { "Error inserting event: ${e.message} for event: ${event.toJson()}" } } } runWithMeasurementDisabled { @@ -87,7 +87,7 @@ class LargeDBInsertBenchmark : BaseLargeCacheBenchmark() { try { db.insert(event) } catch (e: SQLiteException) { - Log.w("LargeDBInsertBenchmark", "Error inserting event: ${e.message} for event: ${event.toJson()}") + Log.w("LargeDBInsertBenchmark") { "Error inserting event: ${e.message} for event: ${event.toJson()}" } } } db @@ -97,7 +97,7 @@ class LargeDBInsertBenchmark : BaseLargeCacheBenchmark() { try { db.insert(event) } catch (e: SQLiteException) { - Log.w("LargeDBInsertBenchmark", "Error inserting event: ${e.message} for event: $event") + Log.w("LargeDBInsertBenchmark") { "Error inserting event: ${e.message} for event: $event" } } } diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/LargeDBQueryingBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/LargeDBQueryingBenchmark.kt index 2a1764ddb..70a605be7 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/LargeDBQueryingBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/quartz/benchmark/LargeDBQueryingBenchmark.kt @@ -61,7 +61,7 @@ class LargeDBQueryingBenchmark : BaseLargeCacheBenchmark() { try { db.insert(event) } catch (e: SQLiteException) { - Log.w("LargeDBQueryingBenchmark", "Error inserting event: ${e.message} for event: ${event.toJson()}") + Log.w("LargeDBQueryingBenchmark") { "Error inserting event: ${e.message} for event: ${event.toJson()}" } } } } diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/emphChat/EphemeralChatListState.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/emphChat/EphemeralChatListState.kt index 11f888e9a..e8cccecac 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/emphChat/EphemeralChatListState.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/emphChat/EphemeralChatListState.kt @@ -124,7 +124,7 @@ class EphemeralChatListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "EphemeralChatList Collector Start") getEphemeralChatListFlow().collect { noteState -> - Log.d("AccountRegisterObservers", "EphemeralChatList List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "EphemeralChatList List for ${signer.pubKey}" } (noteState.note.event as? EphemeralChatListEvent)?.let { settings.updateEphemeralChatListTo(it) } diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip02FollowList/Kind3FollowListState.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip02FollowList/Kind3FollowListState.kt index c7e3b6066..509e2e1c3 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip02FollowList/Kind3FollowListState.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip02FollowList/Kind3FollowListState.kt @@ -161,7 +161,7 @@ class Kind3FollowListState( init { settings.backupContactList?.let { - Log.d("AccountRegisterObservers", "Loading saved ${it.tags.size} contacts") + Log.d("AccountRegisterObservers") { "Loading saved ${it.tags.size} contacts" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { cache.justConsumeMyOwnEvent(it) } @@ -171,7 +171,7 @@ class Kind3FollowListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Kind 3 Collector Start") getFollowListFlow().collect { - Log.d("AccountRegisterObservers", "Updating Kind 3 ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating Kind 3 ${signer.pubKey}" } (it.note.event as? ContactListEvent)?.let { settings.updateContactListTo(it) } diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip28PublicChats/PublicChatListState.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip28PublicChats/PublicChatListState.kt index 3b981be8a..2a676de5f 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip28PublicChats/PublicChatListState.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip28PublicChats/PublicChatListState.kt @@ -129,7 +129,7 @@ class PublicChatListState( init { settings.channelList()?.let { event -> - Log.d("AccountRegisterObservers", "Loading saved channel list ${event.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved channel list ${event.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { cache.justConsumeMyOwnEvent(event) @@ -139,7 +139,7 @@ class PublicChatListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "Channel List Collector Start") getChannelListFlow().collect { - Log.d("AccountRegisterObservers", "Channel List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Channel List for ${signer.pubKey}" } (it.note.event as? ChannelListEvent)?.let { settings.updateChannelListTo(it) } diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip65RelayList/Nip65RelayListState.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip65RelayList/Nip65RelayListState.kt index b93f17d53..f21bf18a7 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip65RelayList/Nip65RelayListState.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/nip65RelayList/Nip65RelayListState.kt @@ -142,7 +142,7 @@ class Nip65RelayListState( init { settings.backupNIP65RelayList?.let { - Log.d("AccountRegisterObservers", "Loading saved nip65 relay list ${it.toJson()}") + Log.d("AccountRegisterObservers") { "Loading saved nip65 relay list ${it.toJson()}" } @OptIn(DelicateCoroutinesApi::class) scope.launch(Dispatchers.IO) { cache.justConsumeMyOwnEvent(it) } } @@ -150,7 +150,7 @@ class Nip65RelayListState( scope.launch(Dispatchers.IO) { Log.d("AccountRegisterObservers", "NIP-65 Relay List Collector Start") getNIP65RelayListFlow().collect { - Log.d("AccountRegisterObservers", "Updating NIP-65 List for ${signer.pubKey}") + Log.d("AccountRegisterObservers") { "Updating NIP-65 List for ${signer.pubKey}" } (it.note.event as? AdvertisedRelayListEvent)?.let { settings.updateNIP65RelayList(it) } diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/robohash/RobohashAssembler.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/robohash/RobohashAssembler.kt index 6a493dd04..66edbae1e 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/robohash/RobohashAssembler.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/robohash/RobohashAssembler.kt @@ -167,7 +167,7 @@ class RobohashAssembler { if (Hex.isHex(msg) && msg.length > 10) { Hex.decode(msg) } else { - Log.w("Robohash", "$msg is not a hex") + Log.w("Robohash") { "$msg is not a hex" } sha256(msg.toByteArray()) } diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/utils/DebugUtils.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/utils/DebugUtils.kt index 06b41ee58..875250fff 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/utils/DebugUtils.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/utils/DebugUtils.kt @@ -39,7 +39,7 @@ inline fun logTime( if (isDebug) { val (result, elapsed) = measureTimedValue(block) if (elapsed.inWholeMilliseconds > minToReportMs) { - Log.d("DEBUG-TIME", "${elapsed.toString(DurationUnit.MILLISECONDS, 3).padStart(12)}: $debugMessage") + Log.d("DEBUG-TIME") { "${elapsed.toString(DurationUnit.MILLISECONDS, 3).padStart(12)}: $debugMessage" } } result } else { @@ -54,7 +54,7 @@ inline fun logTime( if (isDebug) { val (result, elapsed) = measureTimedValue(block) if (elapsed.inWholeMilliseconds > minToReportMs) { - Log.d("DEBUG-TIME", "${elapsed.toString(DurationUnit.MILLISECONDS, 3).padStart(12)}: ${debugMessage(result)}") + Log.d("DEBUG-TIME") { "${elapsed.toString(DurationUnit.MILLISECONDS, 3).padStart(12)}: ${debugMessage(result)}" } } result } else { diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/viewmodels/FeedViewModel.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/viewmodels/FeedViewModel.kt index 35c088b47..47ff0d18f 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/viewmodels/FeedViewModel.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/viewmodels/FeedViewModel.kt @@ -49,24 +49,24 @@ abstract class FeedViewModel( override fun invalidateData(ignoreIfDoing: Boolean) = feedState.invalidateData(ignoreIfDoing) init { - Log.d("Init", "Starting new Model: ${this::class.simpleName}") + Log.d("Init") { "Starting new Model: ${this::class.simpleName}" } viewModelScope.launch(Dispatchers.IO) { cacheProvider.getEventStream().newEventBundles.collect { newNotes -> - Log.d("Rendering Metrics", "Update feeds: ${this@FeedViewModel::class.simpleName} with ${newNotes.size}") + Log.d("Rendering Metrics") { "Update feeds: ${this@FeedViewModel::class.simpleName} with ${newNotes.size}" } feedState.updateFeedWith(newNotes) } } viewModelScope.launch(Dispatchers.IO) { cacheProvider.getEventStream().deletedEventBundles.collect { newNotes -> - Log.d("Rendering Metrics", "Delete from feeds: ${this@FeedViewModel::class.simpleName} with ${newNotes.size}") + Log.d("Rendering Metrics") { "Delete from feeds: ${this@FeedViewModel::class.simpleName} with ${newNotes.size}" } feedState.deleteFromFeed(newNotes) } } } override fun onCleared() { - Log.d("Init", "OnCleared: ${this::class.simpleName}") + Log.d("Init") { "OnCleared: ${this::class.simpleName}" } super.onCleared() } } diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/viewmodels/ListChangeFeedViewModel.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/viewmodels/ListChangeFeedViewModel.kt index 4bce8f7a1..7e8f5ec8c 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/viewmodels/ListChangeFeedViewModel.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/viewmodels/ListChangeFeedViewModel.kt @@ -46,14 +46,14 @@ abstract class ListChangeFeedViewModel( override fun invalidateData(ignoreIfDoing: Boolean) = feedState.invalidateData(ignoreIfDoing) init { - Log.d("Init", "Starting new Model: ${this::class.simpleName}") + Log.d("Init") { "Starting new Model: ${this::class.simpleName}" } // Trigger initial load so empty rooms show Empty instead of Loading viewModelScope.launch(Dispatchers.IO) { feedState.invalidateData(ignoreIfDoing = false) } viewModelScope.launch(Dispatchers.IO) { localFilter.changesFlow().collect { - Log.d("Init", "Collecting changes to: ${this@ListChangeFeedViewModel::class.simpleName}") + Log.d("Init") { "Collecting changes to: ${this@ListChangeFeedViewModel::class.simpleName}" } when (it) { is ListChange.Addition -> feedState.updateFeedWith(setOf(it.item)) is ListChange.Deletion -> feedState.deleteFromFeed(setOf(it.item)) diff --git a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/Main.kt b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/Main.kt index 4c73e002b..ee2123873 100644 --- a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/Main.kt +++ b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/Main.kt @@ -101,6 +101,8 @@ import com.vitorpamplona.amethyst.desktop.ui.relay.RelayStatusCard import com.vitorpamplona.amethyst.desktop.ui.settings.MediaServerSettings import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer import com.vitorpamplona.quartz.nip47WalletConnect.Nip47WalletConnect +import com.vitorpamplona.quartz.utils.Log +import com.vitorpamplona.quartz.utils.LogLevel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -158,6 +160,7 @@ sealed class DesktopScreen { } fun main() { + Log.minLevel = LogLevel.DEBUG DesktopImageLoaderSetup.setup() Runtime.getRuntime().addShutdownHook( Thread { diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/Log.android.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.android.kt similarity index 81% rename from quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/Log.android.kt rename to quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.android.kt index c91c857b4..6f9bf5ac6 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/Log.android.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.android.kt @@ -20,7 +20,7 @@ */ package com.vitorpamplona.quartz.utils -actual object Log { +actual object PlatformLog { actual fun w( tag: String, message: String, @@ -48,14 +48,24 @@ actual object Log { actual fun d( tag: String, message: String, + throwable: Throwable?, ) { - android.util.Log.d(tag, message) + if (throwable != null) { + android.util.Log.d(tag, message, throwable) + } else { + android.util.Log.d(tag, message) + } } actual fun i( tag: String, message: String, + throwable: Throwable?, ) { - android.util.Log.i(tag, message) + if (throwable != null) { + android.util.Log.i(tag, message, throwable) + } else { + android.util.Log.i(tag, message) + } } } diff --git a/quartz/src/appleMain/kotlin/com/vitorpamplona/quartz/utils/Log.apple.kt b/quartz/src/appleMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.apple.kt similarity index 74% rename from quartz/src/appleMain/kotlin/com/vitorpamplona/quartz/utils/Log.apple.kt rename to quartz/src/appleMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.apple.kt index 727cdfc0b..1c53c5373 100644 --- a/quartz/src/appleMain/kotlin/com/vitorpamplona/quartz/utils/Log.apple.kt +++ b/quartz/src/appleMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.apple.kt @@ -22,42 +22,41 @@ package com.vitorpamplona.quartz.utils import platform.Foundation.NSLog -actual object Log { - actual fun w( +actual object PlatformLog { + private fun log( + level: String, tag: String, message: String, throwable: Throwable?, ) { if (throwable != null) { - NSLog("WARN: [$tag] $message. Throwable: $throwable CAUSE ${throwable.cause}") + NSLog("$level: [$tag] $message. Throwable: $throwable CAUSE ${throwable.cause}") } else { - NSLog("WARN: [$tag] $message") + NSLog("$level: [$tag] $message") } } + actual fun w( + tag: String, + message: String, + throwable: Throwable?, + ) = log("WARN", tag, message, throwable) + actual fun e( tag: String, message: String, throwable: Throwable?, - ) { - if (throwable != null) { - NSLog("ERROR: [$tag] $message. Throwable: $throwable CAUSE ${throwable.cause}") - } else { - NSLog("ERROR: [$tag] $message") - } - } + ) = log("ERROR", tag, message, throwable) actual fun d( tag: String, message: String, - ) { - NSLog("DEBUG: [$tag] $message") - } + throwable: Throwable?, + ) = log("DEBUG", tag, message, throwable) actual fun i( tag: String, message: String, - ) { - NSLog("INFO: [$tag] $message") - } + throwable: Throwable?, + ) = log("INFO", tag, message, throwable) } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/core/AddressSerializer.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/core/AddressSerializer.kt index 1f9029cff..ec77fae66 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/core/AddressSerializer.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/core/AddressSerializer.kt @@ -46,7 +46,7 @@ class AddressSerializer { if (parts.size > 2 && parts[1].length == 64 && Hex.isHex(parts[1])) { if (parts[0].length > 5) { // invalid kind - Log.w("AddressableId", "Error parsing. invalid kind $addressId") + Log.w("AddressableId") { "Error parsing. invalid kind $addressId" } null } else { Address(parts[0].toInt(), parts[1], parts.getOrNull(2) ?: "") @@ -57,11 +57,11 @@ class AddressSerializer { if (addr is NAddress) { addr.address() } else { - Log.w("AddressableId", "Error parsing. naddr1 seems invalid: $addressId") + Log.w("AddressableId") { "Error parsing. naddr1 seems invalid: $addressId" } null } } else { - Log.w("AddressableId", "Error parsing. Not a valid address: $addressId") + Log.w("AddressableId") { "Error parsing. Not a valid address: $addressId" } null } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/MetadataEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/MetadataEvent.kt index eaae4027d..d7084aad9 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/MetadataEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/metadata/MetadataEvent.kt @@ -71,7 +71,7 @@ class MetadataEvent( Json.parseToJsonElement(content) as JsonObject } catch (e: Exception) { if (e is CancellationException) throw e - Log.w("MetadataEvent", "Content Parse Error: ${toNostrUri()} ${e.message}") + Log.w("MetadataEvent") { "Content Parse Error: ${toNostrUri()} ${e.message}" } null } @@ -80,7 +80,7 @@ class MetadataEvent( JsonMapper.fromJson(content) } catch (e: Exception) { if (e is CancellationException) throw e - Log.w("MetadataEvent", "Content Parse Error: ${toNostrUri()} ${e.message}") + Log.w("MetadataEvent") { "Content Parse Error: ${toNostrUri()} ${e.message}" } null } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/accessories/NostrClientPublishExt.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/accessories/NostrClientPublishExt.kt index cdbfbf68f..5904626a7 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/accessories/NostrClientPublishExt.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/accessories/NostrClientPublishExt.kt @@ -59,7 +59,7 @@ suspend fun INostrClient.publishAndConfirmDetailed( ): Map { val resultChannel = Channel(UNLIMITED) - Log.d("publishAndConfirm", "Waiting for ${relayList.size} responses") + Log.d("publishAndConfirm") { "Waiting for ${relayList.size} responses" } val subscription = object : RelayConnectionListener { @@ -69,14 +69,14 @@ suspend fun INostrClient.publishAndConfirmDetailed( ) { if (relay.url in relayList) { resultChannel.trySend(Result(relay.url, false)) - Log.d("publishAndConfirm", "Error from relay ${relay.url}: $errorMessage") + Log.d("publishAndConfirm") { "Error from relay ${relay.url}: $errorMessage" } } } override fun onDisconnected(relay: IRelayClient) { if (relay.url in relayList) { resultChannel.trySend(Result(relay.url, false)) - Log.d("publishAndConfirm", "Disconnected from relay ${relay.url}") + Log.d("publishAndConfirm") { "Disconnected from relay ${relay.url}" } } } @@ -91,7 +91,7 @@ suspend fun INostrClient.publishAndConfirmDetailed( is OkMessage -> { if (msg.eventId == event.id) { resultChannel.trySend(Result(relay.url, msg.success)) - Log.d("publishAndConfirm", "onSendResponse Received response for ${msg.eventId} from relay ${relay.url} message ${msg.message} success ${msg.success}") + Log.d("publishAndConfirm") { "onSendResponse Received response for ${msg.eventId} from relay ${relay.url} message ${msg.message} success ${msg.success}" } } } } @@ -136,7 +136,7 @@ suspend fun INostrClient.publishAndConfirmDetailed( // Clean up the channel resultChannel.close() - Log.d("publishAndConfirm", "Finished with ${receivedResults.size} results") + Log.d("publishAndConfirm") { "Finished with ${receivedResults.size} results" } return receivedResults } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/accessories/RelayLogger.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/accessories/RelayLogger.kt index 34f32dcd5..ba3c1e5a3 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/accessories/RelayLogger.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/accessories/RelayLogger.kt @@ -57,14 +57,14 @@ class RelayLogger( val logTag = logTag(relay.url) when (msg) { - is EventMessage -> if (debugReceiving) Log.d(logTag, "Received: $msgStr") - is EoseMessage -> if (debugReceiving) Log.d(logTag, "EOSE: ${msg.subId}") - is NoticeMessage -> Log.w(logTag, "Notice: ${msg.message}") - is OkMessage -> if (debugReceiving) Log.d(logTag, "OK: ${msg.eventId} ${msg.success} ${msg.message}") - is AuthMessage -> if (debugReceiving) Log.d(logTag, "Auth: ${msg.challenge}") - is NotifyMessage -> if (debugReceiving) Log.d(logTag, "Notify: ${msg.message}") - is CountMessage -> if (debugReceiving) Log.d(logTag, "Count: ${msg.result.count} approx: ${msg.result.approximate} hll: ${msg.result.hll != null}") - is ClosedMessage -> Log.w(logTag, "Closed: ${msg.subId} ${msg.message}") + is EventMessage -> if (debugReceiving) Log.d(logTag) { "Received: $msgStr" } + is EoseMessage -> if (debugReceiving) Log.d(logTag) { "EOSE: ${msg.subId}" } + is NoticeMessage -> Log.w(logTag) { "Notice: ${msg.message}" } + is OkMessage -> if (debugReceiving) Log.d(logTag) { "OK: ${msg.eventId} ${msg.success} ${msg.message}" } + is AuthMessage -> if (debugReceiving) Log.d(logTag) { "Auth: ${msg.challenge}" } + is NotifyMessage -> if (debugReceiving) Log.d(logTag) { "Notify: ${msg.message}" } + is CountMessage -> if (debugReceiving) Log.d(logTag) { "Count: ${msg.result.count} approx: ${msg.result.approximate} hll: ${msg.result.hll != null}" } + is ClosedMessage -> Log.w(logTag) { "Closed: ${msg.subId} ${msg.message}" } } } @@ -76,7 +76,7 @@ class RelayLogger( ) { if (success) { if (debugSending) { - Log.d(logTag(relay.url), "Sent (${cmdStr.length} chars): $cmdStr") + Log.d(logTag(relay.url)) { "Sent (${cmdStr.length} chars): $cmdStr" } } } else { Log.e(logTag(relay.url), "Failure sending (${cmdStr.length} chars): $cmdStr") @@ -92,7 +92,7 @@ class RelayLogger( pingMillis: Int, compressed: Boolean, ) { - Log.d(logTag(relay.url), "OnOpen (ping: ${pingMillis}ms${if (compressed) ", using compression" else ""})") + Log.d(logTag(relay.url)) { "OnOpen (ping: ${pingMillis}ms${if (compressed) ", using compression" else ""})" } } override fun onDisconnected(relay: IRelayClient) { diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/RelayBasedFilter.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/RelayBasedFilter.kt index c117d6f95..102101ec9 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/RelayBasedFilter.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/RelayBasedFilter.kt @@ -36,7 +36,7 @@ fun List.groupByRelay(): Map> val result = mutableMapOf>() for (relayBasedFilter in this) { if (relayBasedFilter.filter.isEmpty()) { - Log.e("FilterError", "Ignoring empty filter for ${relayBasedFilter.relay}") + Log.e("FilterError") { "Ignoring empty filter for ${relayBasedFilter.relay}" } } else { result.getOrPut(relayBasedFilter.relay) { mutableListOf() }.add(relayBasedFilter.filter) } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/reqs/stats/RelayReqStats.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/reqs/stats/RelayReqStats.kt index 4b34d2273..2da8b3ca6 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/reqs/stats/RelayReqStats.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/reqs/stats/RelayReqStats.kt @@ -51,7 +51,7 @@ class RelayReqStats( fun printStats() = stats.printCounter { subId, kind, counter -> - Log.d("RelaySubStats", "$subId, kind $kind: $counter") + Log.d("RelaySubStats") { "$subId, kind $kind: $counter" } } init { diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/filters/Filter.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/filters/Filter.kt index 4fa6c6847..b21b7eec0 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/filters/Filter.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/filters/Filter.kt @@ -91,32 +91,32 @@ class Filter( init { ids?.forEach { - if (it.length != 64) Log.e("FilterError", "Invalid id length $it on ${toJson()}") + if (it.length != 64) Log.e("FilterError") { "Invalid id length $it on ${toJson()}" } } authors?.forEach { - if (it.length != 64) Log.e("FilterError", "Invalid author length $it on ${toJson()}") + if (it.length != 64) Log.e("FilterError") { "Invalid author length $it on ${toJson()}" } } // tests common tags. if (tags != null) { tags["p"]?.forEach { - if (it.length != 64) Log.e("FilterError", "Invalid p-tag length $it on ${toJson()}") + if (it.length != 64) Log.e("FilterError") { "Invalid p-tag length $it on ${toJson()}" } } tags["e"]?.forEach { - if (it.length != 64) Log.e("FilterError", "Invalid e-tag length $it on ${toJson()}") + if (it.length != 64) Log.e("FilterError") { "Invalid e-tag length $it on ${toJson()}" } } tags["a"]?.forEach { - if (Address.parse(it) == null) Log.e("FilterError", "Invalid a-tag $it on ${toJson()}") + if (Address.parse(it) == null) Log.e("FilterError") { "Invalid a-tag $it on ${toJson()}" } } } if (tagsAll != null) { tagsAll["p"]?.forEach { - if (it.length != 64) Log.e("FilterError", "Invalid p-tag length $it on ${toJson()}") + if (it.length != 64) Log.e("FilterError") { "Invalid p-tag length $it on ${toJson()}" } } tagsAll["e"]?.forEach { - if (it.length != 64) Log.e("FilterError", "Invalid e-tag length $it on ${toJson()}") + if (it.length != 64) Log.e("FilterError") { "Invalid e-tag length $it on ${toJson()}" } } tagsAll["a"]?.forEach { - if (Address.parse(it) == null) Log.e("FilterError", "Invalid a-tag $it on ${toJson()}") + if (Address.parse(it) == null) Log.e("FilterError") { "Invalid a-tag $it on ${toJson()}" } } } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/normalizer/RelayUrlNormalizer.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/normalizer/RelayUrlNormalizer.kt index c89c5df52..ffd1da4d6 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/normalizer/RelayUrlNormalizer.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/normalizer/RelayUrlNormalizer.kt @@ -145,7 +145,7 @@ class RelayUrlNormalizer { if (trimmed.contains("://")) { // some other scheme we cannot connect to. - Log.w("RelayUrlNormalizer", "Rejected $url") + Log.w("RelayUrlNormalizer") { "Rejected $url" } return null } @@ -178,14 +178,14 @@ class RelayUrlNormalizer { normalizedUrls.put(url, NormalizationResult.Success(normalized)) normalized } else { - Log.w("NormalizedRelayUrl", "Rejected $url") + Log.w("NormalizedRelayUrl") { "Rejected $url" } normalizedUrls.put(url, NormalizationResult.Error) null } } catch (e: Exception) { if (e is CancellationException) throw e normalizedUrls.put(url, NormalizationResult.Error) - Log.w("NormalizedRelayUrl", "Rejected $url") + Log.w("NormalizedRelayUrl") { "Rejected $url" } null } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/server/RelaySession.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/server/RelaySession.kt index 2a384d8a6..71a6fb944 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/server/RelaySession.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/server/RelaySession.kt @@ -73,7 +73,7 @@ class RelaySession( try { onSend(OptimizedJsonMapper.toJson(message)) } catch (e: Exception) { - Log.w("ClientSession", "Failed to send to ${e.message}") + Log.w("ClientSession") { "Failed to send to ${e.message}" } } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip03Timestamp/ots/OpenTimestamps.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip03Timestamp/ots/OpenTimestamps.kt index 9392896b1..ce326cf83 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip03Timestamp/ots/OpenTimestamps.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip03Timestamp/ots/OpenTimestamps.kt @@ -156,7 +156,7 @@ class OpenTimestamps( ): Timestamp { val responses = mapNotNullAsync(calendarUrls) { calendarUrl -> - Log.i("OpenTimestamps", "Submitting to remote calendar $calendarUrl") + Log.i("OpenTimestamps") { "Submitting to remote calendar $calendarUrl" } calendar.submit(calendarUrl, timestamp.digest) } @@ -361,7 +361,7 @@ class OpenTimestamps( val attsFromRemote: MutableSet = upgradedStamp.getAttestations() if (attsFromRemote.isNotEmpty()) { - Log.i("OpenTimestamps", "Got 1 attestation(s) from $calendarUrl") + Log.i("OpenTimestamps") { "Got 1 attestation(s) from $calendarUrl" } } // Set difference from remote attestations & existing attestations diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip03Timestamp/ots/op/OpUnary.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip03Timestamp/ots/op/OpUnary.kt index 40d8004da..0c1c3cf73 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip03Timestamp/ots/op/OpUnary.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip03Timestamp/ots/op/OpUnary.kt @@ -56,7 +56,7 @@ abstract class OpUnary : Op() { } else -> { - Log.e("OpenTimestamp", "Unknown operation tag: $tag") + Log.e("OpenTimestamp") { "Unknown operation tag: $tag" } null // TODO: Is this OK? Won't it blow up later? Better to throw? } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip04Dm/crypto/EncryptedInfo.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip04Dm/crypto/EncryptedInfo.kt index a144170ae..a0dcaef32 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip04Dm/crypto/EncryptedInfo.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip04Dm/crypto/EncryptedInfo.kt @@ -62,7 +62,7 @@ class EncryptedInfo( nonce = Base64.decode(parts[1]), ) } catch (e: Exception) { - Log.w("NIP04", "Unable to Parse encrypted payload: $payload") + Log.w("NIP04") { "Unable to Parse encrypted payload: $payload" } null } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/ATagExt.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/ATagExt.kt index eb643fa9f..77a0ef9f4 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/ATagExt.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/ATagExt.kt @@ -51,7 +51,7 @@ fun ATag.Companion.parseAtag( ATag(parts[0].toInt(), parts[1], parts[2], relayHint) } catch (t: Throwable) { - Log.w("ATag", "Error parsing A Tag: $atag: ${t.message}") + Log.w("ATag") { "Error parsing A Tag: $atag: ${t.message}" } null } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt index d9df56831..5fd03a905 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt @@ -78,7 +78,7 @@ object Nip19Parser { return type!! + key } catch (e: Throwable) { - Log.e("NIP19 Parser", "Issue trying to Decode NIP19 $uri: ${e.message}") + Log.e("NIP19 Parser") { "Issue trying to Decode NIP19 $uri: ${e.message}" } } return null @@ -98,7 +98,7 @@ object Nip19Parser { return parseComponents(type, key, additionalChars?.ifEmpty { null }) } catch (e: Throwable) { - Log.e("NIP19 Parser", "Issue trying to Decode NIP19 $uri: ${e.message}") + Log.e("NIP19 Parser") { "Issue trying to Decode NIP19 $uri: ${e.message}" } } return null @@ -127,7 +127,7 @@ object Nip19Parser { ParseReturn(it, nip19, additionalChars) } } catch (e: Throwable) { - Log.w("NIP19 Parser", "Issue trying to Decode NIP19 $key: ${e.message}") + Log.w("NIP19 Parser") { "Issue trying to Decode NIP19 $key: ${e.message}" } null } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/entities/NAddress.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/entities/NAddress.kt index 6cd3af2a2..155864843 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/entities/NAddress.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/entities/NAddress.kt @@ -55,7 +55,7 @@ data class NAddress( return parse(key.bechToBytes()) } } catch (e: Throwable) { - Log.w("NAddress", "Issue trying to Decode NIP19 $this: ${e.message}") + Log.w("NAddress") { "Issue trying to Decode NIP19 $this: ${e.message}" } } return null diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip28PublicChat/admin/ChannelCreateEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip28PublicChat/admin/ChannelCreateEvent.kt index c52358a80..b4d0d59f9 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip28PublicChat/admin/ChannelCreateEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip28PublicChat/admin/ChannelCreateEvent.kt @@ -68,7 +68,7 @@ class ChannelCreateEvent( } } catch (e: Exception) { if (e is CancellationException) throw e - Log.w("ChannelCreateEvent", "Failure to parse ${this.toJson()}") + Log.w("ChannelCreateEvent") { "Failure to parse ${this.toJson()}" } ChannelDataNorm() } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip28PublicChat/admin/ChannelMetadataEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip28PublicChat/admin/ChannelMetadataEvent.kt index aa7c415da..f3208477b 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip28PublicChat/admin/ChannelMetadataEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip28PublicChat/admin/ChannelMetadataEvent.kt @@ -74,7 +74,7 @@ class ChannelMetadataEvent( } } catch (e: Exception) { if (e is CancellationException) throw e - Log.w("ChannelCreateEvent", "Failure to parse ${this.toJson()}") + Log.w("ChannelCreateEvent") { "Failure to parse ${this.toJson()}" } ChannelDataNorm() } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip37Drafts/DraftWrapEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip37Drafts/DraftWrapEvent.kt index f2930b640..31d818e45 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip37Drafts/DraftWrapEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip37Drafts/DraftWrapEvent.kt @@ -60,7 +60,7 @@ class DraftWrapEvent( fromJson(json) } catch (e: Exception) { if (e is CancellationException) throw e - Log.w("DraftEvent", "Unable to parse inner event of a draft: $json") + Log.w("DraftEvent") { "Unable to parse inner event of a draft: $json" } throw e } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip51Lists/encryption/PrivateTagsInContent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip51Lists/encryption/PrivateTagsInContent.kt index 72bf2d090..a4e625cc3 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip51Lists/encryption/PrivateTagsInContent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip51Lists/encryption/PrivateTagsInContent.kt @@ -43,7 +43,7 @@ class PrivateTagsInContent { decode(json) } catch (e: Exception) { if (e is CancellationException) throw e - Log.w("DraftEvent", "Unable to parse inner event of a draft: $json") + Log.w("DraftEvent") { "Unable to parse inner event of a draft: $json" } throw e } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip56Reports/ReportType.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip56Reports/ReportType.kt index d2d00f93f..45ecf99e1 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip56Reports/ReportType.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip56Reports/ReportType.kt @@ -90,7 +90,7 @@ enum class ReportType( "スパム \uD83D\uDCE3" -> SPAM "Pourriel \uD83D\uDCE3" -> SPAM "violence" -> VIOLENCE - else -> Log.w("ReportedEventTag", "Report type not supported: `$code` ${tag.joinToString(", ")}").let { OTHER } + else -> Log.w("ReportedEventTag") { "Report type not supported: `$code` ${tag.joinToString(", ")}" }.let { OTHER } } } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/NIP90ContentDiscoveryResponseEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/NIP90ContentDiscoveryResponseEvent.kt index 65687157d..8d97e0f00 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/NIP90ContentDiscoveryResponseEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/NIP90ContentDiscoveryResponseEvent.kt @@ -61,7 +61,7 @@ class NIP90ContentDiscoveryResponseEvent( } } } catch (e: Throwable) { - Log.w("NIP90ContentDiscoveryResponseEvent", "Error parsing the JSON ${e.message}") + Log.w("NIP90ContentDiscoveryResponseEvent") { "Error parsing the JSON ${e.message}" } } return events ?: listOf() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/Log.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/Log.kt index f8d4944e5..e2ecd1a5f 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/Log.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/Log.kt @@ -20,26 +20,66 @@ */ package com.vitorpamplona.quartz.utils -expect object Log { +object Log { + @Volatile var minLevel: LogLevel = LogLevel.DEBUG + + fun d( + tag: String, + message: String, + throwable: Throwable? = null, + ) { + if (minLevel <= LogLevel.DEBUG) PlatformLog.d(tag, message, throwable) + } + + inline fun d( + tag: String, + message: () -> String, + ) { + if (minLevel <= LogLevel.DEBUG) PlatformLog.d(tag, message()) + } + + fun i( + tag: String, + message: String, + throwable: Throwable? = null, + ) { + if (minLevel <= LogLevel.INFO) PlatformLog.i(tag, message, throwable) + } + + inline fun i( + tag: String, + message: () -> String, + ) { + if (minLevel <= LogLevel.INFO) PlatformLog.i(tag, message()) + } + fun w( tag: String, message: String, throwable: Throwable? = null, - ) + ) { + if (minLevel <= LogLevel.WARN) PlatformLog.w(tag, message, throwable) + } + + inline fun w( + tag: String, + message: () -> String, + ) { + if (minLevel <= LogLevel.WARN) PlatformLog.w(tag, message()) + } fun e( tag: String, message: String, throwable: Throwable? = null, - ) + ) { + if (minLevel <= LogLevel.ERROR) PlatformLog.e(tag, message, throwable) + } - fun d( + inline fun e( tag: String, - message: String, - ) - - fun i( - tag: String, - message: String, - ) + message: () -> String, + ) { + if (minLevel <= LogLevel.ERROR) PlatformLog.e(tag, message()) + } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/LogLevel.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/LogLevel.kt new file mode 100644 index 000000000..279462063 --- /dev/null +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/LogLevel.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.quartz.utils + +/** Ordered by severity -- do not reorder. Filtering uses ordinal comparison. */ +enum class LogLevel { DEBUG, INFO, WARN, ERROR } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.kt new file mode 100644 index 000000000..bf248e241 --- /dev/null +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.quartz.utils + +expect object PlatformLog { + fun w( + tag: String, + message: String, + throwable: Throwable? = null, + ) + + fun e( + tag: String, + message: String, + throwable: Throwable? = null, + ) + + fun d( + tag: String, + message: String, + throwable: Throwable? = null, + ) + + fun i( + tag: String, + message: String, + throwable: Throwable? = null, + ) +} diff --git a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip01Core/store/sqlite/LargeDBTests.kt b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip01Core/store/sqlite/LargeDBTests.kt index bb81b38a9..51cd4f263 100644 --- a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip01Core/store/sqlite/LargeDBTests.kt +++ b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip01Core/store/sqlite/LargeDBTests.kt @@ -61,7 +61,7 @@ class LargeDBTests { try { db.insert(event) } catch (e: SQLiteException) { - Log.w("LargeDBTests", "Error inserting event: ${e.message} for event: ${event.toJson()}") + Log.w("LargeDBTests") { "Error inserting event: ${e.message} for event: ${event.toJson()}" } } } } @@ -72,7 +72,7 @@ class LargeDBTests { try { db.insert(event) } catch (e: SQLiteException) { - Log.w("LargeDBTests", "Error inserting event: ${e.message} for event: ${event.toJson()}") + Log.w("LargeDBTests") { "Error inserting event: ${e.message} for event: ${event.toJson()}" } } } } diff --git a/quartz/src/jvmAndroid/kotlin/com/vitorpamplona/quartz/nip03Timestamp/okhttp/OkHttpBitcoinExplorer.kt b/quartz/src/jvmAndroid/kotlin/com/vitorpamplona/quartz/nip03Timestamp/okhttp/OkHttpBitcoinExplorer.kt index 581e98962..176fac5da 100644 --- a/quartz/src/jvmAndroid/kotlin/com/vitorpamplona/quartz/nip03Timestamp/okhttp/OkHttpBitcoinExplorer.kt +++ b/quartz/src/jvmAndroid/kotlin/com/vitorpamplona/quartz/nip03Timestamp/okhttp/OkHttpBitcoinExplorer.kt @@ -60,7 +60,7 @@ class OkHttpBitcoinExplorer( return client.newCall(request).execute().use { if (it.isSuccessful) { - Log.d("OkHttpBlockstreamExplorer", "$baseAPI/block/$hash") + Log.d("OkHttpBlockstreamExplorer") { "$baseAPI/block/$hash" } val jsonObject = JacksonMapper.mapper.readTree(it.body.string()) @@ -104,7 +104,7 @@ class OkHttpBitcoinExplorer( if (it.isSuccessful) { val blockHash = it.body.string() - Log.d("OkHttpBlockstreamExplorer", "$url $blockHash") + Log.d("OkHttpBlockstreamExplorer") { "$url $blockHash" } cache.putHeight(height, blockHash) blockHash diff --git a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientRepeatSubTest.kt b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientRepeatSubTest.kt index b51595df4..8bffca2ac 100644 --- a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientRepeatSubTest.kt +++ b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientRepeatSubTest.kt @@ -61,7 +61,7 @@ class NostrClientRepeatSubTest : BaseNostrClientTest() { msgStr: String, msg: Message, ) { - Log.d("Test", "Receiving message: $msgStr") + Log.d("Test") { "Receiving message: $msgStr" } when (msg) { is EventMessage -> { if (mySubId == msg.subId) { @@ -117,7 +117,7 @@ class NostrClientRepeatSubTest : BaseNostrClientTest() { launch { withTimeoutOrNull(30000) { while (events.size < 112) { - Log.d("Test", "Processing message ${events.size}") + Log.d("Test") { "Processing message ${events.size}" } // simulates an update in the middle of the sub if (events.size == 1) { client.subscribe(mySubId, filtersShouldIgnore) diff --git a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSubscriptionAsFlowTest.kt b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSubscriptionAsFlowTest.kt index cc8cde85e..3bf5e6699 100644 --- a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSubscriptionAsFlowTest.kt +++ b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSubscriptionAsFlowTest.kt @@ -65,7 +65,7 @@ class NostrClientSubscriptionAsFlowTest : BaseNostrClientTest() { val job = launch { flow.collect { - Log.d("ZZ", "List timestamp deltas ${it.printDates()}") + Log.d("ZZ") { "List timestamp deltas ${it.printDates()}" } feedStates = it } } @@ -104,7 +104,7 @@ class NostrClientSubscriptionAsFlowTest : BaseNostrClientTest() { val job = launch { flow.debounce(100).collect { - Log.d("ZZ", "List timestamp deltas ${it.printDates()}") + Log.d("ZZ") { "List timestamp deltas ${it.printDates()}" } feedStates = it } } diff --git a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSubscriptionUntilEoseAsFlowTest.kt b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSubscriptionUntilEoseAsFlowTest.kt index faf6408e3..c8054a6f7 100644 --- a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSubscriptionUntilEoseAsFlowTest.kt +++ b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSubscriptionUntilEoseAsFlowTest.kt @@ -65,7 +65,7 @@ class NostrClientSubscriptionUntilEoseAsFlowTest : BaseNostrClientTest() { val job = launch { flow.collect { - Log.d("ZZ", "List timestamp deltas ${it.printDates()}") + Log.d("ZZ") { "List timestamp deltas ${it.printDates()}" } feedStates = it } } @@ -104,7 +104,7 @@ class NostrClientSubscriptionUntilEoseAsFlowTest : BaseNostrClientTest() { val job = launch { flow.debounce(100).collect { - Log.d("ZZ", "List timestamp deltas ${it.printDates()}") + Log.d("ZZ") { "List timestamp deltas ${it.printDates()}" } feedStates = it } } diff --git a/quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/Log.jvm.kt b/quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.jvm.kt similarity index 69% rename from quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/Log.jvm.kt rename to quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.jvm.kt index 10a8f630a..c46efd525 100644 --- a/quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/Log.jvm.kt +++ b/quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.jvm.kt @@ -23,47 +23,45 @@ package com.vitorpamplona.quartz.utils import java.time.LocalTime import java.time.format.DateTimeFormatter -actual object Log { - // Define a formatter for the desired output format (e.g., HH:mm:ss) - val formatter: DateTimeFormatter? = DateTimeFormatter.ofPattern("HH:mm:ss.SSS") +actual object PlatformLog { + private val formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS") - fun time() = LocalTime.now().format(formatter) + private fun time() = LocalTime.now().format(formatter) + + private fun log( + level: String, + tag: String, + message: String, + throwable: Throwable?, + ) { + if (throwable != null) { + println("${time()} $level: [$tag] $message. Throwable: ${throwable.message}") + } else { + println("${time()} $level: [$tag] $message") + } + } actual fun w( tag: String, message: String, throwable: Throwable?, - ) { - if (throwable != null) { - println("${time()} WARN : [$tag] $message. Throwable: ${throwable.message}") - } else { - println("${time()} WARN : [$tag] $message") - } - } + ) = log("WARN ", tag, message, throwable) actual fun e( tag: String, message: String, throwable: Throwable?, - ) { - if (throwable != null) { - println("${time()} ERROR: [$tag] $message. Throwable: ${throwable.message}") - } else { - println("${time()} ERROR: [$tag] $message") - } - } + ) = log("ERROR", tag, message, throwable) actual fun d( tag: String, message: String, - ) { - println("${time()} DEBUG: [$tag] $message") - } + throwable: Throwable?, + ) = log("DEBUG", tag, message, throwable) actual fun i( tag: String, message: String, - ) { - println("${time()} INFO : [$tag] $message") - } + throwable: Throwable?, + ) = log("INFO ", tag, message, throwable) }