⚡️ Use shell to store reply data
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / database / memory / MemoryDatabase.kt
index fd7ac48..d48ef1e 100644 (file)
@@ -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,7 +42,8 @@ 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
@@ -61,7 +63,7 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio
        private val allPosts = mutableMapOf<String, Post>()
        private val sonePosts: Multimap<String, Post> = HashMultimap.create<String, Post>()
        private val knownPosts = mutableSetOf<String>()
-       private val allPostReplies = mutableMapOf<String, PostReply>()
+       private val allPostReplies = mutableMapOf<String, MemoryPostReply.Shell>()
        private val sonePostReplies: Multimap<String, PostReply> = TreeMultimap.create<String, PostReply>(Comparator { leftString, rightString -> leftString.compareTo(rightString) }, newestReplyFirst)
        private val knownPostReplies = mutableSetOf<String>()
        private val allAlbums = mutableMapOf<String, Album>()
@@ -121,7 +123,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 +223,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 +240,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 +300,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 {