synchronized void openBookInternal(Book book, Bookmark bookmark) { if (book == null) { book = Library.Instance().getRecentBook(); if (book == null || !book.File.exists()) { book = Book.getByFile(Library.getHelpFile()); } if (book == null) { return; } } if (Model != null) { if (bookmark == null & book.File.getPath().equals(Model.Book.File.getPath())) { return; } } if (book != null) { onViewChanged(); if (Model != null) { Model.Book.storePosition(BookTextView.getStartCursor()); } BookTextView.setModel(null); FootnoteView.setModel(null); clearTextCaches(); Model = null; System.gc(); System.gc(); try { Model = BookModel.createModel(book); ZLTextHyphenator.Instance().load(book.getLanguage()); BookTextView.setModel(Model.getTextModel()); BookTextView.gotoPosition(book.getStoredPosition()); if (bookmark == null) { setView(BookTextView); } else { gotoBookmark(bookmark); } Library.Instance().addBookToRecentList(book); final StringBuilder title = new StringBuilder(book.getTitle()); if (!book.authors().isEmpty()) { boolean first = true; for (Author a : book.authors()) { title.append(first ? " (" : ", "); title.append(a.DisplayName); first = false; } title.append(")"); } setTitle(title.toString()); } catch (BookReadingException e) { processException(e); } } getViewWidget().reset(); getViewWidget().repaint(); }
public List<String> titlesForAuthor(Author author, int limit) { if (limit <= 0) { return Collections.emptyList(); } final ArrayList<String> titles = new ArrayList<String>(limit); final boolean isNull = Author.NULL.equals(author); synchronized (myBooksByFile) { for (Book b : myBooksByFile.values()) { if (isNull ? b.authors().isEmpty() : b.authors().contains(author)) { titles.add(b.getTitle()); if (--limit == 0) { break; } } } } return titles; }
public List<Book> booksForAuthor(Author author) { final boolean isNull = Author.NULL.equals(author); final LinkedList<Book> filtered = new LinkedList<Book>(); for (Book b : books()) { final List<Author> bookAuthors = b.authors(); if (isNull && bookAuthors.isEmpty() || bookAuthors.contains(author)) { filtered.add(b); } } return filtered; }
public List<Author> authors() { final Set<Author> authors = new TreeSet<Author>(); synchronized (myBooksByFile) { for (Book book : myBooksByFile.values()) { final List<Author> bookAuthors = book.authors(); if (bookAuthors.isEmpty()) { authors.add(Author.NULL); } else { authors.addAll(bookAuthors); } } } return new ArrayList<Author>(authors); }
public List<Book> booksForSeriesAndAuthor(String series, Author author) { final boolean isNull = Author.NULL.equals(author); final LinkedList<Book> filtered = new LinkedList<Book>(); for (Book b : books()) { final List<Author> bookAuthors = b.authors(); final SeriesInfo info = b.getSeriesInfo(); if (info != null && series.equals(info.Title) && (isNull && bookAuthors.isEmpty() || bookAuthors.contains(author))) { filtered.add(b); } } return filtered; }
public List<String> titlesForSeriesAndAuthor(String series, Author author, int limit) { if (limit <= 0) { return Collections.emptyList(); } final boolean isNull = Author.NULL.equals(author); final ArrayList<String> titles = new ArrayList<String>(limit); synchronized (myBooksByFile) { for (Book b : myBooksByFile.values()) { final List<Author> bookAuthors = b.authors(); final SeriesInfo info = b.getSeriesInfo(); if (info != null && series.equals(info.Title) && (isNull && bookAuthors.isEmpty() || bookAuthors.contains(author))) { titles.add(b.getTitle()); if (--limit == 0) { break; } } } } return titles; }