From 7f0adbdb43de25377362e2846897e2ad313d2091 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sat, 2 Feb 2013 10:01:33 +0000 Subject: [PATCH] authors/tags/series methods in BookCollection (with dummy implementation on shadow side) --- .../libraryService/BookCollectionShadow.java | 36 +++++++++++++++++++ .../geometerplus/fbreader/book/Author.java | 8 ++++- .../fbreader/book/BookCollection.java | 33 +++++++++++++++++ .../fbreader/book/IBookCollection.java | 4 +++ 4 files changed, 80 insertions(+), 1 deletion(-) diff --git a/src/org/geometerplus/android/fbreader/libraryService/BookCollectionShadow.java b/src/org/geometerplus/android/fbreader/libraryService/BookCollectionShadow.java index fcac84403..b80d80ca9 100644 --- a/src/org/geometerplus/android/fbreader/libraryService/BookCollectionShadow.java +++ b/src/org/geometerplus/android/fbreader/libraryService/BookCollectionShadow.java @@ -188,6 +188,42 @@ public class BookCollectionShadow extends AbstractBookCollection implements Serv } } + public synchronized List authors() { + if (myInterface == null) { + return Collections.emptyList(); + } + //try { + // TODO: implement + return Collections.emptyList(); + //} catch (RemoteException e) { + // return Collections.emptyList(); + //} + } + + public synchronized List tags() { + if (myInterface == null) { + return Collections.emptyList(); + } + //try { + // TODO: implement + return Collections.emptyList(); + //} catch (RemoteException e) { + // return Collections.emptyList(); + //} + } + + public synchronized List series() { + if (myInterface == null) { + return Collections.emptyList(); + } + //try { + // TODO: implement + return Collections.emptyList(); + //} catch (RemoteException e) { + // return Collections.emptyList(); + //} + } + public synchronized boolean saveBook(Book book, boolean force) { if (myInterface == null) { return false; diff --git a/src/org/geometerplus/fbreader/book/Author.java b/src/org/geometerplus/fbreader/book/Author.java index 1d8b8ad82..3cafc1d18 100644 --- a/src/org/geometerplus/fbreader/book/Author.java +++ b/src/org/geometerplus/fbreader/book/Author.java @@ -19,7 +19,7 @@ package org.geometerplus.fbreader.book; -public final class Author { +public final class Author implements Comparable { public final String DisplayName; public final String SortKey; @@ -48,4 +48,10 @@ public final class Author { public int hashCode() { return SortKey.hashCode() + DisplayName.hashCode(); } + + @Override + public int compareTo(Author other) { + final int byKeys = SortKey.compareTo(other.SortKey); + return byKeys != 0 ? byKeys : DisplayName.compareTo(other.DisplayName); + } } diff --git a/src/org/geometerplus/fbreader/book/BookCollection.java b/src/org/geometerplus/fbreader/book/BookCollection.java index 6e765c713..6d1b93363 100644 --- a/src/org/geometerplus/fbreader/book/BookCollection.java +++ b/src/org/geometerplus/fbreader/book/BookCollection.java @@ -227,6 +227,39 @@ public class BookCollection extends AbstractBookCollection { return bookList; } + public List authors() { + final Set authors = new TreeSet(); + synchronized (myBooksByFile) { + for (Book book : myBooksByFile.values()) { + authors.addAll(book.authors()); + } + } + return new ArrayList(authors); + } + + public List tags() { + final Set tags = new TreeSet(); + synchronized (myBooksByFile) { + for (Book book : myBooksByFile.values()) { + tags.addAll(book.tags()); + } + } + return new ArrayList(tags); + } + + public List series() { + final Set series = new TreeSet(); + synchronized (myBooksByFile) { + for (Book book : myBooksByFile.values()) { + final SeriesInfo info = book.getSeriesInfo(); + if (info != null) { + series.add(info.Title); + } + } + } + return new ArrayList(series); + } + public Book getRecentBook(int index) { List recentIds = myDatabase.loadRecentBookIds(); return recentIds.size() > index ? getBookById(recentIds.get(index)) : null; diff --git a/src/org/geometerplus/fbreader/book/IBookCollection.java b/src/org/geometerplus/fbreader/book/IBookCollection.java index b19d81802..9ebf4d164 100644 --- a/src/org/geometerplus/fbreader/book/IBookCollection.java +++ b/src/org/geometerplus/fbreader/book/IBookCollection.java @@ -57,6 +57,10 @@ public interface IBookCollection { Book getBookById(long id); Book getRecentBook(int index); + List authors(); + List tags(); + List series(); + boolean saveBook(Book book, boolean force); void removeBook(Book book, boolean deleteFromDisk);