X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.kt;h=ad7ab078b253f047c00c752bec18a438d5021527;hb=8f223b8d369004637373003c9f6a294fe4af732d;hp=fd7ac4861e01fa22fdeb71599b225fedc3f7dc9d;hpb=b1e6cda6c077a95eab43ab371a75afd92ef820a0;p=Sone.git diff --git a/src/main/kotlin/net/pterodactylus/sone/database/memory/MemoryDatabase.kt b/src/main/kotlin/net/pterodactylus/sone/database/memory/MemoryDatabase.kt index fd7ac48..ad7ab07 100644 --- a/src/main/kotlin/net/pterodactylus/sone/database/memory/MemoryDatabase.kt +++ b/src/main/kotlin/net/pterodactylus/sone/database/memory/MemoryDatabase.kt @@ -21,7 +21,8 @@ import com.google.common.base.Preconditions.checkNotNull import com.google.common.collect.HashMultimap import com.google.common.collect.Multimap import com.google.common.collect.TreeMultimap -import com.google.common.util.concurrent.* +import com.google.common.util.concurrent.AbstractService +import com.google.common.util.concurrent.RateLimiter import com.google.inject.Inject import com.google.inject.Singleton import net.pterodactylus.sone.data.Album @@ -41,10 +42,13 @@ import net.pterodactylus.sone.database.ImageBuilder import net.pterodactylus.sone.database.PostBuilder import net.pterodactylus.sone.database.PostDatabase import net.pterodactylus.sone.database.PostReplyBuilder -import net.pterodactylus.sone.utils.* +import net.pterodactylus.sone.utils.ifTrue +import net.pterodactylus.sone.utils.unit import net.pterodactylus.util.config.Configuration import net.pterodactylus.util.config.ConfigurationException import java.util.concurrent.locks.ReentrantReadWriteLock +import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock +import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock import kotlin.concurrent.withLock /** @@ -54,14 +58,14 @@ import kotlin.concurrent.withLock class MemoryDatabase @Inject constructor(private val configuration: Configuration) : AbstractService(), Database { private val lock = ReentrantReadWriteLock() - private val readLock by lazy { lock.readLock()!! } - private val writeLock by lazy { lock.writeLock()!! } + private val readLock: ReadLock by lazy { lock.readLock() } + private val writeLock: WriteLock by lazy { lock.writeLock() } private val configurationLoader = ConfigurationLoader(configuration) private val allSones = mutableMapOf() private val allPosts = mutableMapOf() private val sonePosts: Multimap = HashMultimap.create() private val knownPosts = mutableSetOf() - private val allPostReplies = mutableMapOf() + private val allPostReplies = mutableMapOf() private val sonePostReplies: Multimap = TreeMultimap.create(Comparator { leftString, rightString -> leftString.compareTo(rightString) }, newestReplyFirst) private val knownPostReplies = mutableSetOf() private val allAlbums = mutableMapOf() @@ -121,7 +125,7 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio } sonePostReplies.putAll(sone.id, sone.replies) for (postReply in sone.replies) { - allPostReplies[postReply.id] = postReply + allPostReplies[postReply.id] = postReply.toShell() } sone.allAlbums.let { albums -> soneAlbums.putAll(sone.id, albums) @@ -221,12 +225,15 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio } } - override fun getPostReply(id: String) = readLock.withLock { allPostReplies[id] } + override fun getPostReply(id: String) = readLock.withLock { + allPostReplies[id]?.build(newPostReplyBuilder()) + } override fun getReplies(postId: String) = readLock.withLock { allPostReplies.values .filter { it.postId == postId } + .map { it.build(newPostReplyBuilder()) } .sortedWith(newestReplyFirst.reversed()) } @@ -235,7 +242,7 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio override fun storePostReply(postReply: PostReply) = writeLock.withLock { - allPostReplies[postReply.id] = postReply + allPostReplies[postReply.id] = postReply.toShell() } override fun removePostReply(postReply: PostReply) = @@ -295,7 +302,7 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio saveKnownPosts() } - protected fun isPostReplyKnown(postReply: PostReply) = readLock.withLock { postReply.id in knownPostReplies } + internal fun isPostReplyKnown(postReply: PostReply) = readLock.withLock { postReply.id in knownPostReplies } override fun setPostReplyKnown(postReply: PostReply): Unit = writeLock.withLock {