Skip to content

AsyncEpubProcessor

AsyncEpubProcessor is an asynchronous processor in the EPUBime library that provides non-blocking EPUB processing operations. This class allows users to execute various EPUB parsing and processing tasks in background threads, avoiding blocking the main thread.

Class Definition

java
public class AsyncEpubProcessor

Constructors

AsyncEpubProcessor()

Creates an asynchronous processor with the default executor (cached thread pool).

AsyncEpubProcessor(Executor executor)

Creates an asynchronous processor with a custom executor.

Parameters:

  • executor: The executor to use for asynchronous operations

Methods

parseBookAsync(File epubFile)

Asynchronously parses an EPUB file.

Parameters:

  • epubFile: The EPUB file to parse

Returns:

  • CompletableFuture<EpubBook>: CompletableFuture containing the parsed EpubBook

parseBookAsync(File epubFile, boolean useCache, boolean lazyLoading)

Asynchronously parses an EPUB file with specified cache and lazy loading options.

Parameters:

  • epubFile: The EPUB file to parse
  • useCache: Whether to use caching
  • lazyLoading: Whether to use lazy loading

Returns:

  • CompletableFuture<EpubBook>: CompletableFuture containing the parsed EpubBook

parseMetadataAsync(File epubFile)

Asynchronously parses the metadata of an EPUB file.

Parameters:

  • epubFile: The EPUB file to parse

Returns:

  • CompletableFuture<Metadata>: CompletableFuture containing the metadata

parseTableOfContentsAsync(File epubFile)

Asynchronously parses the table of contents of an EPUB file.

Parameters:

  • epubFile: The EPUB file to parse

Returns:

  • CompletableFuture<List<EpubChapter>>: CompletableFuture containing the list of chapters

getBookInfoAsync(File epubFile)

Asynchronously gets basic information about an EPUB file.

Parameters:

  • epubFile: The EPUB file to analyze

Returns:

  • CompletableFuture<EpubReader.EpubInfo>: CompletableFuture containing basic EPUB information

processChaptersAsync(File epubFile, BiConsumer<EpubChapter, InputStream> processor)

Asynchronously processes chapters using stream processing.

Parameters:

  • epubFile: The EPUB file to process
  • processor: Processor for each chapter

Returns:

  • CompletableFuture<Void>: CompletableFuture that completes when all chapters are processed

processChapterAsync(File epubFile, String chapterId, Consumer<InputStream> processor)

Asynchronously processes a specific chapter.

Parameters:

  • epubFile: The EPUB file
  • chapterId: The ID of the chapter to process
  • processor: Processor for the chapter content

Returns:

  • CompletableFuture<Void>: CompletableFuture that completes when the chapter is processed

processResourcesAsync(File epubFile, Function<EpubResource, Void> processor)

Asynchronously processes all resources.

Parameters:

  • epubFile: The EPUB file
  • processor: Function to process each resource

Returns:

  • CompletableFuture<Void>: CompletableFuture that completes when processing is done

getCoverAsync(File epubFile)

Asynchronously gets the cover resource.

Parameters:

  • epubFile: The EPUB file

Returns:

  • CompletableFuture<EpubResource>: CompletableFuture containing the cover resource, or null if not found

getResourceAsync(File epubFile, String resourceId)

Asynchronously gets a specific resource.

Parameters:

  • epubFile: The EPUB file
  • resourceId: The resource ID

Returns:

  • CompletableFuture<EpubResource>: CompletableFuture containing the resource, or null if not found

validateAsync(File epubFile)

Asynchronously validates an EPUB file.

Parameters:

  • epubFile: The EPUB file to validate

Returns:

  • CompletableFuture<Boolean>: CompletableFuture containing the validation result

loadEnhancedBookAsync(File epubFile)

Asynchronously loads an enhanced book object.

Parameters:

  • epubFile: The EPUB file

Returns:

  • CompletableFuture<EpubBookEnhanced>: CompletableFuture containing the enhanced book object

loadEnhancedMetadataAsync(File epubFile)

Asynchronously loads enhanced metadata.

Parameters:

  • epubFile: The EPUB file

Returns:

  • CompletableFuture<MetadataEnhanced>: CompletableFuture containing the enhanced metadata

processMultipleBooksAsync(List<File> epubFiles, Function<EpubBook, EpubBook> processor)

Processes multiple EPUB files in parallel.

Parameters:

  • epubFiles: List of EPUB files to process
  • processor: Function to process each book

Returns:

  • CompletableFuture<List<EpubBook>>: CompletableFuture containing the list of processed books

getChapterCountAsync(File epubFile)

Asynchronously gets the chapter count.

Parameters:

  • epubFile: The EPUB file

Returns:

  • CompletableFuture<Integer>: CompletableFuture containing the chapter count

getResourceCountAsync(File epubFile)

Asynchronously gets the resource count.

Parameters:

  • epubFile: The EPUB file

Returns:

  • CompletableFuture<Integer>: CompletableFuture containing the resource count

shutdown()

Shuts down the processor and releases resources.

Usage Examples

java
// Create asynchronous processor
AsyncEpubProcessor processor = new AsyncEpubProcessor();

// Asynchronously parse book
CompletableFuture<EpubBook> futureBook = processor.parseBookAsync(new File("book.epub"));
futureBook.thenAccept(book -> {
    System.out.println("Parsing completed: " + book.getMetadata().getTitle());
}).exceptionally(throwable -> {
    System.err.println("Parsing failed: " + throwable.getMessage());
    return null;
});

// Asynchronously get cover
CompletableFuture<EpubResource> futureCover = processor.getCoverAsync(new File("book.epub"));
futureCover.thenAccept(cover -> {
    if (cover != null) {
        System.out.println("Cover found: " + cover.getHref());
    }
});

// Asynchronously process multiple books
List<File> epubFiles = Arrays.asList(new File("book1.epub"), new File("book2.epub"));
CompletableFuture<List<EpubBook>> futureBooks = processor.processMultipleBooksAsync(epubFiles, 
    book -> {
        // Process each book
        return book;
    });
futureBooks.thenAccept(books -> {
    System.out.println("Processed " + books.size() + " books");
});

// Shutdown processor when done
processor.shutdown();

Notes

  • When using the asynchronous processor, ensure that the processor is shut down before the application ends to release thread resources.
  • The results of asynchronous operations are provided through CompletableFuture, which can be followed up with methods like thenAccept and thenApply.
  • For long-running asynchronous operations, it is recommended to use appropriate thread pool configurations.

Released under the MIT License