X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.kt;h=3b5a6a934c153919359a3df0ad67683659e10341;hb=3a7c862787dfdd3d7fe18fa16e1a577a0d89a53e;hp=8722873aa0e7a4740a017fb1ad073ed17c7d26d1;hpb=90993f1fc13288b83996066e726653b4dd011479;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 8722873..3b5a6a9 100644 --- a/src/main/kotlin/net/pterodactylus/sone/database/memory/MemoryDatabase.kt +++ b/src/main/kotlin/net/pterodactylus/sone/database/memory/MemoryDatabase.kt @@ -21,19 +21,20 @@ 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 import net.pterodactylus.sone.data.Image import net.pterodactylus.sone.data.Post import net.pterodactylus.sone.data.PostReply -import net.pterodactylus.sone.data.Reply.TIME_COMPARATOR import net.pterodactylus.sone.data.Sone -import net.pterodactylus.sone.data.Sone.toAllAlbums -import net.pterodactylus.sone.data.Sone.toAllImages +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.database.AlbumBuilder import net.pterodactylus.sone.database.Database import net.pterodactylus.sone.database.DatabaseException @@ -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 @@ -62,7 +64,7 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio private val sonePosts: Multimap = HashMultimap.create() private val knownPosts = mutableSetOf() private val allPostReplies = mutableMapOf() - private val sonePostReplies: Multimap = TreeMultimap.create(Comparator { leftString, rightString -> leftString.compareTo(rightString) }, TIME_COMPARATOR) + private val sonePostReplies: Multimap = TreeMultimap.create(Comparator { leftString, rightString -> leftString.compareTo(rightString) }, newestReplyFirst) private val knownPostReplies = mutableSetOf() private val allAlbums = mutableMapOf() private val soneAlbums: Multimap = HashMultimap.create() @@ -123,13 +125,13 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio for (postReply in sone.replies) { allPostReplies[postReply.id] = postReply } - soneAlbums.putAll(sone.id, toAllAlbums.apply(sone)!!) - for (album in toAllAlbums.apply(sone)!!) { - allAlbums[album.id] = album + sone.allAlbums.let { albums -> + soneAlbums.putAll(sone.id, albums) + albums.forEach { album -> allAlbums[album.id] = album } } - soneImages.putAll(sone.id, toAllImages.apply(sone)!!) - for (image in toAllImages.apply(sone)!!) { - allImages[image.id] = image + sone.rootAlbum.allImages.let { images -> + soneImages.putAll(sone.id, images) + images.forEach { image -> allImages[image.id] = image } } } } @@ -227,7 +229,7 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio readLock.withLock { allPostReplies.values .filter { it.postId == postId } - .sortedWith(TIME_COMPARATOR) + .sortedWith(newestReplyFirst.reversed()) } override fun newPostReplyBuilder(): PostReplyBuilder = @@ -297,12 +299,9 @@ class MemoryDatabase @Inject constructor(private val configuration: Configuratio protected fun isPostReplyKnown(postReply: PostReply) = readLock.withLock { postReply.id in knownPostReplies } - fun setPostReplyKnown(postReply: PostReply, known: Boolean): Unit = + override fun setPostReplyKnown(postReply: PostReply): Unit = writeLock.withLock { - if (known) - knownPostReplies.add(postReply.id) - else - knownPostReplies.remove(postReply.id) + knownPostReplies.add(postReply.id) saveKnownPostReplies() }