ChWebsiteApp/CHDataManagement/Generator/PageGenerationResults.swift
2024-12-16 15:36:58 +01:00

95 lines
2.1 KiB
Swift

import Foundation
struct ImageToGenerate {
let size: Int
let image: FileResource
}
extension ImageToGenerate: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(size)
hasher.combine(image.id)
}
}
final class PageGenerationResults: ObservableObject {
@Published
var linkedPages: Set<Page> = []
@Published
var linkedTags: Set<Tag> = []
@Published
var externalLinks: Set<String> = []
@Published
var files: Set<FileResource> = []
@Published
var imagesToGenerate: Set<ImageToGenerate> = []
@Published
var missingPages: Set<String> = []
@Published
var missingFiles: Set<String> = []
@Published
var missingTags: Set<String> = []
@Published
var invalidCommands: [(command: ShorthandMarkdownKey?, markdown: String)] = []
@Published
var requiredHeaders: Set<KnownHeaderElement> = []
@Published
var requiredFooters: Set<String> = []
@Published
var requiredIcons: Set<PageIcon> = []
@Published
var issues: Set<PageContentAnomaly> = []
func reset() {
linkedPages = []
linkedTags = []
externalLinks = []
files = []
imagesToGenerate = []
missingPages = []
missingFiles = []
missingTags = []
invalidCommands = []
requiredHeaders = []
requiredFooters = []
requiredIcons = []
issues = []
}
func invalid(command: ShorthandMarkdownKey?, _ markdown: Substring) {
invalidCommands.append((command, String(markdown)))
issues.insert(.invalidCommand(command: command, markdown: String(markdown)))
}
func missing(page: String, markdown: Substring) {
missingPages.insert(page)
issues.insert(.missingPage(page: page, markdown: String(markdown)))
}
func missing(tag: String, markdown: Substring) {
missingTags.insert(tag)
issues.insert(.missingTag(tag: tag, markdown: String(markdown)))
}
func missing(file: String, markdown: Substring) {
missingFiles.insert(file)
issues.insert(.missingFile(file: file, markdown: String(markdown)))
}
}