X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.kt;h=2ab0938743ace9b40a65892ffca40c72d479fe48;hb=549af4fa7323c58e0660f21dd8605cbc812db286;hp=ad7ab078b253f047c00c752bec18a438d5021527;hpb=8f223b8d369004637373003c9f6a294fe4af732d;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 ad7ab07..2ab0938 100644 --- a/src/main/kotlin/net/pterodactylus/sone/database/memory/MemoryDatabase.kt +++ b/src/main/kotlin/net/pterodactylus/sone/database/memory/MemoryDatabase.kt @@ -29,12 +29,15 @@ import net.pterodactylus.sone.data.Album import net.pterodactylus.sone.data.Image import net.pterodactylus.sone.data.Post import net.pterodactylus.sone.data.PostReply +import net.pterodactylus.sone.data.PostReplyShell +import net.pterodactylus.sone.data.PostShell import net.pterodactylus.sone.data.Sone import net.pterodactylus.sone.data.allAlbums import net.pterodactylus.sone.data.allImages import net.pterodactylus.sone.data.impl.AlbumBuilderImpl import net.pterodactylus.sone.data.impl.ImageBuilderImpl import net.pterodactylus.sone.data.newestReplyFirst +import net.pterodactylus.sone.data.toShell import net.pterodactylus.sone.database.AlbumBuilder import net.pterodactylus.sone.database.Database import net.pterodactylus.sone.database.DatabaseException @@ -62,10 +65,10 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio 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 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() @@ -119,8 +122,8 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio removeSone(sone) allSones[sone.id] = sone - sonePosts.putAll(sone.id, sone.posts) - for (post in sone.posts) { + sonePosts.putAll(sone.id, sone.posts.map(Post::toShell)) + for (post in sone.posts.map(Post::toShell)) { allPosts[post.id] = post } sonePostReplies.putAll(sone.id, sone.replies) @@ -193,17 +196,17 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio override fun getFollowingTime(friendSoneId: String) = memoryFriendDatabase.getFollowingTime(friendSoneId) - override fun getPost(postId: String) = - readLock.withLock { allPosts[postId] } + override fun getPost(postId: String): Post? = + readLock.withLock { allPosts[postId]?.build(newPostBuilder()) } override fun getPosts(soneId: String): Collection = - sonePosts[soneId].toSet() + sonePosts[soneId].map { it.build(newPostBuilder()) }.toSet() override fun getDirectedPosts(recipientId: String) = readLock.withLock { - allPosts.values.filter { - it.recipientId.orNull() == recipientId - } + allPosts.values + .filter { it.recipientId == recipientId } + .map { it.build(newPostBuilder()) } } override fun newPostBuilder(): PostBuilder = MemoryPostBuilder(this, this) @@ -211,8 +214,10 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio override fun storePost(post: Post) { checkNotNull(post, "post must not be null") writeLock.withLock { - allPosts[post.id] = post - sonePosts[post.sone.id].add(post) + post.toShell().also { shell -> + allPosts[post.id] = shell + sonePosts[post.sone.id].add(shell) + } } } @@ -220,7 +225,7 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio checkNotNull(post, "post must not be null") writeLock.withLock { allPosts.remove(post.id) - sonePosts[post.sone.id].remove(post) + sonePosts[post.sone.id].remove(post.toShell()) post.sone.removePost(post) } } @@ -291,7 +296,7 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio override fun isPostBookmarked(post: Post) = memoryBookmarkDatabase.isPostBookmarked(post) - protected fun isPostKnown(post: Post) = readLock.withLock { post.id in knownPosts } + internal fun isPostKnown(post: Post) = readLock.withLock { post.id in knownPosts } fun setPostKnown(post: Post, known: Boolean): Unit = writeLock.withLock {