1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 02:39:23 +02:00

no book duplicates in library

This commit is contained in:
Nikolay Pultsin 2012-05-17 19:23:31 +01:00
parent 655ad0a634
commit 6d09e0e233
2 changed files with 10 additions and 5 deletions

View file

@ -48,7 +48,8 @@ public final class Library extends AbstractLibrary {
private final BooksDatabase myDatabase;
private final List<Book> myBooks = Collections.synchronizedList(new LinkedList<Book>());
private final Map<ZLFile,Book> myBooks =
Collections.synchronizedMap(new HashMap<ZLFile,Book>());
private final RootTree myRootTree = new RootTree();
private boolean myDoGroupTitlesByFirstLetter;
@ -193,7 +194,10 @@ public final class Library extends AbstractLibrary {
}
private synchronized void addBookToLibrary(Book book) {
myBooks.add(book);
if (myBooks.containsKey(book.File)) {
return;
}
myBooks.put(book.File, book);
List<Author> authors = book.authors();
if (authors.isEmpty()) {
@ -270,7 +274,7 @@ public final class Library extends AbstractLibrary {
return;
}
myBooks.remove(book);
myBooks.remove(book.File);
refreshInTree(ROOT_FAVORITES, book);
refreshInTree(ROOT_RECENT, book);
removeFromTree(ROOT_FOUND, book);
@ -487,7 +491,7 @@ public final class Library extends AbstractLibrary {
FirstLevelTree newSearchResults = null;
final List<Book> booksCopy;
synchronized (myBooks) {
booksCopy = new ArrayList<Book>(myBooks);
booksCopy = new ArrayList<Book>(myBooks.values());
}
for (Book book : booksCopy) {
if (book.matches(pattern)) {
@ -573,7 +577,7 @@ public final class Library extends AbstractLibrary {
if (removeMode == REMOVE_DONT_REMOVE) {
return;
}
myBooks.remove(book);
myBooks.remove(book.File);
if (getFirstLevelTree(ROOT_RECENT).removeBook(book, false)) {
final List<Long> ids = myDatabase.loadRecentBookIds();
ids.remove(book.getId());