Rework storage structs, link preview

This commit is contained in:
Christoph Hagen
2025-01-08 14:59:04 +01:00
parent b99c064d10
commit a7197b9628
75 changed files with 1365 additions and 1454 deletions

View File

@@ -56,7 +56,7 @@ final class GenerationResults: ObservableObject {
var redirects: [String : String] = [:]
/// The cache of previously used GenerationResults
private var cache: [ItemId : PageGenerationResults] = [:]
private var cache: [LocalizedItemId : PageGenerationResults] = [:]
private(set) var general: PageGenerationResults!
@@ -66,14 +66,14 @@ final class GenerationResults: ObservableObject {
// MARK: Life cycle
init() {
let id = ItemId(language: .english, itemType: .general)
let id = LocalizedItemId(language: .english, itemType: .general)
let general = PageGenerationResults(itemId: id, delegate: self)
self.general = general
cache[id] = general
self.resultCount = 1
}
func makeResults(_ itemId: ItemId) -> PageGenerationResults {
func makeResults(_ itemId: LocalizedItemId) -> PageGenerationResults {
guard let result = cache[itemId] else {
let result = PageGenerationResults(itemId: itemId, delegate: self)
cache[itemId] = result
@@ -83,18 +83,18 @@ final class GenerationResults: ObservableObject {
return result
}
func makeResults(for type: ItemType, in language: ContentLanguage) -> PageGenerationResults {
let itemId = ItemId(language: language, itemType: type)
func makeResults(for type: ItemReference, in language: ContentLanguage) -> PageGenerationResults {
let itemId = LocalizedItemId(language: language, itemType: type)
return makeResults(itemId)
}
func makeResults(for page: Page, in language: ContentLanguage) -> PageGenerationResults {
let itemId = ItemId(language: language, itemType: .page(page))
let itemId = LocalizedItemId(language: language, itemType: .page(page))
return makeResults(itemId)
}
func makeResults(for tag: Tag, in language: ContentLanguage) -> PageGenerationResults {
let itemId = ItemId(language: language, itemType: .tagPage(tag))
let itemId = LocalizedItemId(language: language, itemType: .tagPage(tag))
return makeResults(itemId)
}
@@ -209,9 +209,9 @@ final class GenerationResults: ObservableObject {
}
}
private extension Dictionary where Value == Set<ItemId> {
private extension Dictionary where Value == Set<LocalizedItemId> {
mutating func remove<S>(keys: S, of item: ItemId) where S: Sequence, S.Element == Key {
mutating func remove<S>(keys: S, of item: LocalizedItemId) where S: Sequence, S.Element == Key {
for key in keys {
guard var value = self[key] else { continue }
value.remove(item)

View File

@@ -17,7 +17,7 @@ extension ImageToGenerate: Hashable {
final class PageGenerationResults: ObservableObject {
let itemId: ItemId
let itemId: LocalizedItemId
private unowned let delegate: GenerationResults
@@ -73,13 +73,13 @@ final class PageGenerationResults: ObservableObject {
private(set) var warnings: Set<String>
/// The files that could not be saved to the output folder
private(set) var unsavedOutputFiles: [String: Set<ItemType>] = [:]
private(set) var unsavedOutputFiles: [String: Set<ItemReference>] = [:]
private(set) var pageIsEmpty: Bool
private(set) var redirect: (originalUrl: String, newUrl: String)?
init(itemId: ItemId, delegate: GenerationResults) {
init(itemId: LocalizedItemId, delegate: GenerationResults) {
self.itemId = itemId
self.delegate = delegate
inaccessibleFiles = []
@@ -245,7 +245,7 @@ final class PageGenerationResults: ObservableObject {
delegate.warning(warning)
}
func unsavedOutput(_ path: String, source: ItemType) {
func unsavedOutput(_ path: String, source: ItemReference) {
unsavedOutputFiles[path, default: []].insert(source)
delegate.unsaved(path)
}