import Foundation final class RDEPUBReaderServices { var dependencies: RDEPUBReaderDependencies init(dependencies: RDEPUBReaderDependencies) { self.dependencies = dependencies } func resolvedTextRenderer(configuration: RDEPUBReaderConfiguration) -> RDEPUBTextRenderer { dependencies.makeTextRenderer(configuration.textRenderingEngine) } func makeParser() -> RDEPUBParser { dependencies.makeParser() } func makePaginator() -> RDEPUBPaginator { dependencies.makePaginator() } func makeTextBookBuilder( configuration: RDEPUBReaderConfiguration, cache: RDEPUBTextBookCache?, layoutConfig: RDEPUBTextLayoutConfig ) -> RDEPUBTextBookBuilder { dependencies.makeTextBookBuilder( resolvedTextRenderer(configuration: configuration), cache, layoutConfig ) } func makePlainTextBookBuilder( configuration: RDEPUBReaderConfiguration, layoutConfig: RDEPUBTextLayoutConfig ) -> RDPlainTextBookBuilder { dependencies.makePlainTextBookBuilder( resolvedTextRenderer(configuration: configuration), layoutConfig ) } func makeChapterSummaryDiskCache(bookIdentifier: String?) -> RDEPUBChapterSummaryDiskCache { let cachesDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first ?? FileManager.default.temporaryDirectory let bookID = (bookIdentifier ?? "default").sha256Hex let directory = cachesDirectory .appendingPathComponent("RDEPUBChapterSummaryCache", isDirectory: true) .appendingPathComponent(bookID, isDirectory: true) return RDEPUBChapterSummaryDiskCache(cacheDirectory: directory) } }