X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryBookmarkDatabase.java;h=4c4bc3fd0e3b9ce35a92963a406cafaa0dac7776;hb=7804921fddbc1a9c7e6c739e802b724b45190cc8;hp=4c99c5395168c3dcd250e5d4be2e86445d23f9f9;hpb=45d69427a7c1300fb4841159c0e3b2c4489dab21;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabase.java b/src/main/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabase.java index 4c99c53..4c4bc3f 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabase.java @@ -1,5 +1,6 @@ package net.pterodactylus.sone.database.memory; +import static com.google.common.base.Optional.fromNullable; import static com.google.common.collect.FluentIterable.from; import java.util.HashSet; @@ -8,6 +9,7 @@ import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import net.pterodactylus.sone.data.Post; +import net.pterodactylus.sone.data.Post.EmptyPost; import net.pterodactylus.sone.database.BookmarkDatabase; import com.google.common.base.Function; @@ -45,11 +47,25 @@ public class MemoryBookmarkDatabase implements BookmarkDatabase { } } + public void stop() { + saveBookmarkedPosts(); + } + + private void saveBookmarkedPosts() { + lock.readLock().lock(); + try { + configurationLoader.saveBookmarkedPosts(this.bookmarkedPosts); + } finally { + lock.readLock().unlock(); + } + } + @Override public void bookmarkPost(Post post) { lock.writeLock().lock(); try { bookmarkedPosts.add(post.getId()); + saveBookmarkedPosts(); } finally { lock.writeLock().unlock(); } @@ -60,6 +76,7 @@ public class MemoryBookmarkDatabase implements BookmarkDatabase { lock.writeLock().lock(); try { bookmarkedPosts.remove(post.getId()); + saveBookmarkedPosts(); } finally { lock.writeLock().unlock(); } @@ -79,11 +96,12 @@ public class MemoryBookmarkDatabase implements BookmarkDatabase { public Set getBookmarkedPosts() { lock.readLock().lock(); try { - return from(bookmarkedPosts).transformAndConcat( - new Function>() { + return from(bookmarkedPosts).transform( + new Function() { @Override - public Iterable apply(String postId) { - return memoryDatabase.getPost(postId).asSet(); + public Post apply(String postId) { + return fromNullable(memoryDatabase.getPost(postId)) + .or(new EmptyPost(postId)); } }).toSet(); } finally {