diff --git a/src/org/geometerplus/fbreader/library/Library.java b/src/org/geometerplus/fbreader/library/Library.java index 3b765155a..964244f7c 100644 --- a/src/org/geometerplus/fbreader/library/Library.java +++ b/src/org/geometerplus/fbreader/library/Library.java @@ -204,13 +204,9 @@ public final class Library { return fileList; } - private void collectBooks() { + private void collectBooks(FileInfoSet fileInfos, Map savedBooks) { final List physicalFilesList = collectPhysicalFiles(); - FileInfoSet fileInfos = new FileInfoSet(); - - final Map savedBooks = BooksDatabase.Instance().loadBooks(fileInfos, true); - for (ZLPhysicalFile file : physicalFilesList) { // TODO: better value for this flag final boolean flag = !"epub".equals(file.getExtension()); @@ -266,9 +262,23 @@ public final class Library { } private void build() { - final HashMap bookById = new HashMap(); + final FileInfoSet fileInfos = new FileInfoSet(); + final Map savedBooks = BooksDatabase.Instance().loadBooks(fileInfos, true); + boolean doGroupTitlesByFirstLetter = false; + if (savedBooks.size() > 10) { + final HashSet letterSet = new HashSet(); + for (Book book : savedBooks.values()) { + final String letter = TitleTree.firstTitleLetter(book); + if (letter != null) { + letterSet.add(letter); + } + } + doGroupTitlesByFirstLetter = savedBooks.values().size() > letterSet.size() * 5 / 4; + } - collectBooks(); + collectBooks(fileInfos, savedBooks); + + final Map bookById = new HashMap(); for (Book book : myBooks) { bookById.put(book.getId(), book); @@ -289,39 +299,24 @@ public final class Library { } } - List tags = book.tags(); - if (tags.isEmpty()) { - tags = (List)myNullList; - } - for (Tag t : tags) { - getTagTree(t).getBookSubTree(book, true); - } - } - - boolean doGroupTitlesByFirstLetter = false; - if (myBooks.size() > 10) { - final HashSet letterSet = new HashSet(); - for (Book book : myBooks) { - final String letter = TitleTree.firstTitleLetter(book); - if (letter != null) { - letterSet.add(letter); - } - } - doGroupTitlesByFirstLetter = myBooks.size() > letterSet.size() * 5 / 4; - } - if (doGroupTitlesByFirstLetter) { - for (Book book : myBooks) { + if (doGroupTitlesByFirstLetter) { final String letter = TitleTree.firstTitleLetter(book); if (letter != null) { final TitleTree tree = getFirstLevelTree(ROOT_BY_TITLE).getTitleSubTree(letter); tree.getBookSubTree(book, true); } - } - } else { - for (Book book : myBooks) { + } else { getFirstLevelTree(ROOT_BY_TITLE).getBookSubTree(book, true); } + + List tags = book.tags(); + if (tags.isEmpty()) { + tags = (List)myNullList; + } + for (Tag t : tags) { + getTagTree(t).getBookSubTree(book, true); + } } final BooksDatabase db = BooksDatabase.Instance();