private void collectBooks( ZLFile file, FileInfoSet fileInfos, Map<Long, Book> savedBooksByFileId, Map<Long, Book> orphanedBooksByFileId, Set<Book> newBooks, boolean doReadMetaInfo) { final long fileId = fileInfos.getId(file); if (savedBooksByFileId.get(fileId) != null) { return; } try { final Book book = orphanedBooksByFileId.get(fileId); if (book != null) { if (doReadMetaInfo) { book.readMetaInfo(); } newBooks.add(book); return; } } catch (BookReadingException e) { // ignore } try { final Book book = new Book(file); newBooks.add(book); return; } catch (BookReadingException e) { // ignore } if (file.isArchive()) { for (ZLFile entry : fileInfos.archiveEntries(file)) { collectBooks( entry, fileInfos, savedBooksByFileId, orphanedBooksByFileId, newBooks, doReadMetaInfo); } } }