From 954a9d66fbaee0dda45f7e8cb61a0a2ead6bba34 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 20 Aug 2023 01:15:30 -0400 Subject: [PATCH] Fixes the crash when opening a malformed thread with a wrong root marker --- .../java/com/vitorpamplona/amethyst/model/Note.kt | 14 ++++++++------ .../amethyst/model/ThreadAssembler.kt | 7 ++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt index 5045abc16..67a9f626c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt @@ -129,12 +129,14 @@ open class Note(val idHex: String) { return "/" + formattedDateTime(createdAt() ?: 0) + ";" } - val mySignature = replyTo - .filter { it in eventsToConsider } // This forces the signature to be based on a branch, avoiding two roots - .map { - cachedSignatures[it] ?: it.replyLevelSignature(eventsToConsider, cachedSignatures).apply { cachedSignatures.put(it, this) } - } - .maxBy { it.length }.removeSuffix(";") + "/" + formattedDateTime(createdAt() ?: 0) + ";" + val mySignature = ( + replyTo + .filter { it in eventsToConsider } // This forces the signature to be based on a branch, avoiding two roots + .map { + cachedSignatures[it] ?: it.replyLevelSignature(eventsToConsider, cachedSignatures).apply { cachedSignatures.put(it, this) } + } + .maxByOrNull { it.length }?.removeSuffix(";") ?: "" + ) + "/" + formattedDateTime(createdAt() ?: 0) + ";" cachedSignatures[this] = mySignature return mySignature diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/ThreadAssembler.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/ThreadAssembler.kt index c636884db..48a1be853 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/ThreadAssembler.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/ThreadAssembler.kt @@ -15,7 +15,12 @@ class ThreadAssembler { testedNotes.add(note) val markedAsRoot = note.event?.tags()?.firstOrNull { it[0] == "e" && it.size > 3 && it[3] == "root" }?.getOrNull(1) - if (markedAsRoot != null) return LocalCache.checkGetOrCreateNote(markedAsRoot) + if (markedAsRoot != null) { + // Check to ssee if there is an error in the tag and the root has replies + if (LocalCache.getNoteIfExists(markedAsRoot)?.replyTo?.isEmpty() == true) { + return LocalCache.checkGetOrCreateNote(markedAsRoot) + } + } val hasNoReplyTo = note.replyTo?.firstOrNull { it.replyTo?.isEmpty() == true } if (hasNoReplyTo != null) return hasNoReplyTo