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

@ -2,22 +2,25 @@ import Foundation
extension Content {
func saveToDisk() throws {
func saveToDisk() -> Bool {
guard didLoadContent else { return false }
guard storage.contentScope != nil else {
print("Storage not initialized, not saving content")
return
return false
}
var failedSaves = 0
failedSaves += pages.count { !storage.save(pageMetadata: $0.pageFile, for: $0.id) }
failedSaves += posts.count { !storage.save(post: $0.postFile, for: $0.id) }
failedSaves += tags.count { !storage.save(tagMetadata: $0.file, for: $0.id) }
failedSaves.increment(!storage.save(settings: settings.file(tagOverview: tagOverview)))
failedSaves += files.count { !storage.save(fileInfo: $0.fileInfo, for: $0.id) }
failedSaves += pages.count { !storage.save(pageMetadata: $0.data, for: $0.id) }
failedSaves += posts.count { !storage.save(post: $0.data, for: $0.id) }
failedSaves += tags.count { !storage.save(tagMetadata: $0.data, for: $0.id) }
failedSaves.increment(!storage.save(settings: settings.data(tagOverview: tagOverview)))
failedSaves += files.count { !storage.save(fileInfo: $0.data, for: $0.id) }
if failedSaves > 0 {
print("Save partially failed with \(failedSaves) errors")
return false
}
return true
}
func removeUnlinkedFiles() -> Bool {
@ -37,49 +40,3 @@ extension Content {
return success
}
}
private extension Page {
var pageFile: PageFile {
.init(isDraft: isDraft,
externalLink: externalLink,
tags: tags.map { $0.id },
hideDate: hideDate ? true : nil,
createdDate: createdDate,
startDate: startDate,
endDate: hasEndDate ? endDate : nil,
german: german.pageFile,
english: english.pageFile,
requiredFiles: requiredFiles.nonEmpty?.map { $0.id }.sorted())
}
}
private extension LocalizedPage {
var pageFile: LocalizedPageFile {
.init(url: urlString,
title: title,
linkPreviewImage: linkPreviewImage?.id,
linkPreviewTitle: linkPreviewTitle,
linkPreviewDescription: linkPreviewDescription,
lastModifiedDate: lastModified,
originalURL: originalUrl,
hideTitle: hideTitle ? true : nil)
}
}
private extension Post {
var postFile: PostFile {
.init(
isDraft: isDraft,
createdDate: createdDate,
startDate: startDate,
endDate: hasEndDate ? endDate : nil,
tags: tags.map { $0.id },
german: german.postFile,
english: english.postFile,
linkedPageId: linkedPage?.id)
}
}