From 15a0394ccf7c92105f43eb0bc1a0afd6f5884383 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Thu, 14 Jul 2011 15:29:47 +0100 Subject: [PATCH] common code has been moved from platform-specific directory --- .../fbreader/library/BaseActivity.java | 18 ++++----------- .../fbreader/library/AuthorTree.java | 5 ++++ .../fbreader/library/Library.java | 23 ++++++++++++++----- .../fbreader/library/LibraryTree.java | 13 ++++------- .../fbreader/library/TagTree.java | 18 +++++++++++++++ .../fbreader/library/TitleTree.java | 5 ++++ 6 files changed, 53 insertions(+), 29 deletions(-) diff --git a/src/org/geometerplus/android/fbreader/library/BaseActivity.java b/src/org/geometerplus/android/fbreader/library/BaseActivity.java index 866d4a918..875019f54 100644 --- a/src/org/geometerplus/android/fbreader/library/BaseActivity.java +++ b/src/org/geometerplus/android/fbreader/library/BaseActivity.java @@ -171,27 +171,17 @@ abstract class BaseActivity extends ListActivity implements View.OnCreateContext return false; } + if (((LibraryTree)tree).containsBook(mySelectedBook)) { + return true; + } + final Book book = ((LibraryTree)tree).getBook(); if (book != null) { return mySelectedBook.equals(book); - } else if (tree instanceof AuthorTree) { - return mySelectedBook.authors().contains(((AuthorTree)tree).Author); - } else if (tree instanceof TitleTree) { - final String title = mySelectedBook.getTitle(); - return tree != null && title.trim().startsWith(((TitleTree)tree).Title); } else if (tree instanceof SeriesTree) { final SeriesInfo info = mySelectedBook.getSeriesInfo(); final String series = ((SeriesTree)tree).Series; return info != null && series != null && series.equals(info.Name); - } else if (tree instanceof TagTree) { - final Tag tag = ((TagTree)tree).Tag; - for (Tag t : mySelectedBook.tags()) { - for (; t != null; t = t.Parent) { - if (t == tag) { - return true; - } - } - } } else if (tree instanceof FileTree) { final FileTree fileTree = (FileTree)tree; if (!fileTree.isSelectable()) { diff --git a/src/org/geometerplus/fbreader/library/AuthorTree.java b/src/org/geometerplus/fbreader/library/AuthorTree.java index 1a56e4794..ec14bf632 100644 --- a/src/org/geometerplus/fbreader/library/AuthorTree.java +++ b/src/org/geometerplus/fbreader/library/AuthorTree.java @@ -49,4 +49,9 @@ public class AuthorTree extends LibraryTree { protected String getSortKey() { return (Author != null) ? Author.SortKey : null; } + + @Override + public boolean containsBook(Book book) { + return book != null && book.authors().contains(Author); + } } diff --git a/src/org/geometerplus/fbreader/library/Library.java b/src/org/geometerplus/fbreader/library/Library.java index afe43d7e3..6981aa62f 100644 --- a/src/org/geometerplus/fbreader/library/Library.java +++ b/src/org/geometerplus/fbreader/library/Library.java @@ -28,6 +28,7 @@ import org.geometerplus.zlibrary.core.image.ZLImage; import org.geometerplus.zlibrary.core.util.ZLMiscUtil; import org.geometerplus.zlibrary.core.resources.ZLResource; +import org.geometerplus.fbreader.tree.FBTree; import org.geometerplus.fbreader.formats.FormatPlugin; import org.geometerplus.fbreader.formats.PluginCollection; import org.geometerplus.fbreader.Paths; @@ -436,18 +437,28 @@ public final class Library { } public boolean isBookInFavorites(Book book) { + if (book == null) { + return false; + } waitForState(STATE_FULLY_INITIALIZED); - return getRootTree(ROOT_FAVORITES).containsBook(book); + final LibraryTree rootFavorites = getRootTree(ROOT_FAVORITES); + for (FBTree tree : rootFavorites.subTrees()) { + if (tree instanceof BookTree && book.equals(((BookTree)tree).Book)) { + return true; + } + } + return false; } public void addBookToFavorites(Book book) { waitForState(STATE_FULLY_INITIALIZED); - final LibraryTree rootFavorites = getRootTree(ROOT_FAVORITES); - if (!rootFavorites.containsBook(book)) { - rootFavorites.createBookSubTree(book, true); - rootFavorites.sortAllChildren(); - BooksDatabase.Instance().addToFavorites(book.getId()); + if (isBookInFavorites(book)) { + return; } + final LibraryTree rootFavorites = getRootTree(ROOT_FAVORITES); + rootFavorites.createBookSubTree(book, true); + rootFavorites.sortAllChildren(); + BooksDatabase.Instance().addToFavorites(book.getId()); } public void removeBookFromFavorites(Book book) { diff --git a/src/org/geometerplus/fbreader/library/LibraryTree.java b/src/org/geometerplus/fbreader/library/LibraryTree.java index 2de9ea607..35e21e9f1 100644 --- a/src/org/geometerplus/fbreader/library/LibraryTree.java +++ b/src/org/geometerplus/fbreader/library/LibraryTree.java @@ -40,6 +40,10 @@ public abstract class LibraryTree extends FBTree { return null; } + public boolean containsBook(Book book) { + return false; + } + TagTree createTagSubTree(Tag tag) { return new TagTree(this, tag); } @@ -56,15 +60,6 @@ public abstract class LibraryTree extends FBTree { return new BookTree(this, book, showAuthors); } - public boolean containsBook(Book book) { - for (FBTree tree : this) { - if ((tree instanceof BookTree) && ((BookTree)tree).Book.equals(book)) { - return true; - } - } - return false; - } - public boolean removeBook(Book book) { final LinkedList toRemove = new LinkedList(); for (FBTree tree : this) { diff --git a/src/org/geometerplus/fbreader/library/TagTree.java b/src/org/geometerplus/fbreader/library/TagTree.java index 5eebf1f51..2fbd917dc 100644 --- a/src/org/geometerplus/fbreader/library/TagTree.java +++ b/src/org/geometerplus/fbreader/library/TagTree.java @@ -45,4 +45,22 @@ public final class TagTree extends LibraryTree { protected String getSortKey() { return (Tag != null) ? Tag.Name : null; } + + @Override + public boolean containsBook(Book book) { + if (book == null) { + return false; + } + if (Tag == null) { + return book.tags().isEmpty(); + } + for (Tag t : book.tags()) { + for (; t != null; t = t.Parent) { + if (t == Tag) { + return true; + } + } + } + return false; + } } diff --git a/src/org/geometerplus/fbreader/library/TitleTree.java b/src/org/geometerplus/fbreader/library/TitleTree.java index 8bfffe62d..cdf7caffa 100644 --- a/src/org/geometerplus/fbreader/library/TitleTree.java +++ b/src/org/geometerplus/fbreader/library/TitleTree.java @@ -36,4 +36,9 @@ public final class TitleTree extends LibraryTree { protected String getStringId() { return getName(); } + + @Override + public boolean containsBook(Book book) { + return book != null && book.getTitle() != null && book.getTitle().trim().startsWith(Title); + } }