From e59dfa7a761eeb583f749dbb55288343915b44be Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 30 Jan 2023 13:50:43 -0300 Subject: [PATCH] Avoids concurrent exceptions --- .../java/com/vitorpamplona/amethyst/model/Account.kt | 8 ++++---- .../java/com/vitorpamplona/amethyst/model/Note.kt | 12 ++++++++++++ .../java/com/vitorpamplona/amethyst/model/User.kt | 12 ++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index fb8e12e60..3cb24e19a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -373,13 +373,13 @@ class Account( fun isAcceptable(user: User): Boolean { return user !in hiddenUsers() // if user hasn't hided this author - && user.reports.firstOrNull { it.author == userProfile() } == null // if user has not reported this post - && user.reports.filter { it.author in userProfile().follows }.size < 5 + && user.reportsBy( userProfile() ).isEmpty() // if user has not reported this post + && user.reportsBy( userProfile().follows ).size < 5 } fun isAcceptableDirect(note: Note): Boolean { - return note.reports.firstOrNull { it.author == userProfile() } == null // if user has not reported this post - && note.reports.filter { it.author in userProfile().follows }.size < 5 // if it has 5 reports by reliable users + return note.reportsBy( userProfile() ).isEmpty() // if user has not reported this post + && note.reportsBy( userProfile().follows ).size < 5 // if it has 5 reports by reliable users } fun isAcceptable(note: Note): Boolean { 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 040471c10..883837d15 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt @@ -107,6 +107,18 @@ class Note(val idHex: String) { } } + fun reportsBy(user: User): List { + return synchronized(reports) { + reports.filter { it.author == user } + } + } + + fun reportsBy(users: Set): List { + return synchronized(reports) { + reports.filter { it.author in users } + } + } + // Observers line up here. val live: NoteLiveData = NoteLiveData(this) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt index 6b3d2364f..58992b735 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt @@ -93,6 +93,18 @@ class User(val pubkey: ByteArray) { } } + fun reportsBy(user: User): List { + return synchronized(reports) { + reports.filter { it.author == user } + } + } + + fun reportsBy(users: Set): List { + return synchronized(reports) { + reports.filter { it.author in users } + } + } + @Synchronized fun getOrCreateChannel(user: User): MutableSet { return messages[user] ?: run {