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

library refactoring: one cycle through collected books

This commit is contained in:
Nikolay Pultsin 2011-07-17 16:24:50 +01:00
parent 6f864809a5
commit 35ef743d40

View file

@ -204,13 +204,9 @@ public final class Library {
return fileList; return fileList;
} }
private void collectBooks() { private void collectBooks(FileInfoSet fileInfos, Map<Long,Book> savedBooks) {
final List<ZLPhysicalFile> physicalFilesList = collectPhysicalFiles(); final List<ZLPhysicalFile> physicalFilesList = collectPhysicalFiles();
FileInfoSet fileInfos = new FileInfoSet();
final Map<Long,Book> savedBooks = BooksDatabase.Instance().loadBooks(fileInfos, true);
for (ZLPhysicalFile file : physicalFilesList) { for (ZLPhysicalFile file : physicalFilesList) {
// TODO: better value for this flag // TODO: better value for this flag
final boolean flag = !"epub".equals(file.getExtension()); final boolean flag = !"epub".equals(file.getExtension());
@ -266,9 +262,23 @@ public final class Library {
} }
private void build() { private void build() {
final HashMap<Long,Book> bookById = new HashMap<Long,Book>(); final FileInfoSet fileInfos = new FileInfoSet();
final Map<Long,Book> savedBooks = BooksDatabase.Instance().loadBooks(fileInfos, true);
boolean doGroupTitlesByFirstLetter = false;
if (savedBooks.size() > 10) {
final HashSet<String> letterSet = new HashSet<String>();
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<Long,Book> bookById = new HashMap<Long,Book>();
for (Book book : myBooks) { for (Book book : myBooks) {
bookById.put(book.getId(), book); bookById.put(book.getId(), book);
@ -289,39 +299,24 @@ public final class Library {
} }
} }
List<Tag> tags = book.tags(); if (doGroupTitlesByFirstLetter) {
if (tags.isEmpty()) {
tags = (List<Tag>)myNullList;
}
for (Tag t : tags) {
getTagTree(t).getBookSubTree(book, true);
}
}
boolean doGroupTitlesByFirstLetter = false;
if (myBooks.size() > 10) {
final HashSet<String> letterSet = new HashSet<String>();
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) {
final String letter = TitleTree.firstTitleLetter(book); final String letter = TitleTree.firstTitleLetter(book);
if (letter != null) { if (letter != null) {
final TitleTree tree = final TitleTree tree =
getFirstLevelTree(ROOT_BY_TITLE).getTitleSubTree(letter); getFirstLevelTree(ROOT_BY_TITLE).getTitleSubTree(letter);
tree.getBookSubTree(book, true); tree.getBookSubTree(book, true);
} }
} } else {
} else {
for (Book book : myBooks) {
getFirstLevelTree(ROOT_BY_TITLE).getBookSubTree(book, true); getFirstLevelTree(ROOT_BY_TITLE).getBookSubTree(book, true);
} }
List<Tag> tags = book.tags();
if (tags.isEmpty()) {
tags = (List<Tag>)myNullList;
}
for (Tag t : tags) {
getTagTree(t).getBookSubTree(book, true);
}
} }
final BooksDatabase db = BooksDatabase.Instance(); final BooksDatabase db = BooksDatabase.Instance();