2024-12-09 17:47:03 +01:00

48 lines
1.5 KiB
Swift

final class PageGenerator {
private let content: Content
private let imageGenerator: ImageGenerator
private let navigationBarData: NavigationBarData
let results = GenerationResultsHandler()
init(content: Content, imageGenerator: ImageGenerator, navigationBarData: NavigationBarData) {
self.content = content
self.imageGenerator = imageGenerator
self.navigationBarData = navigationBarData
}
func generate(page: Page, language: ContentLanguage) throws -> String {
let contentGenerator = PageContentParser(
page: page,
content: content,
language: language,
results: results,
imageGenerator: imageGenerator)
let rawPageContent = try content.storage.pageContent(for: page.id, language: language)
let pageContent = contentGenerator.generatePage(from: rawPageContent)
let localized = page.localized(in: language)
let tags: [FeedEntryData.Tag] = page.tags.map { tag in
.init(name: tag.localized(in: language).name,
url: content.tagLink(tag, language: language))
}
return ContentPage(
language: language,
dateString: page.dateText(in: language),
title: localized.title,
tags: tags,
linkTitle: localized.linkPreviewTitle ?? localized.title,
description: localized.linkPreviewDescription ?? "",
navigationBarData: navigationBarData,
pageContent: pageContent)
.content
}
}