Sort file lists for consistent storage

This commit is contained in:
Christoph Hagen 2024-11-20 14:25:10 +01:00
parent 8ae2a237cc
commit cb22ae34f2
6 changed files with 76 additions and 23 deletions

View File

@ -219,9 +219,9 @@ final class Importer {
}
let page = LocalizedPageFile(
url: id,
files: pageFiles,
externalFiles: externalFiles,
requiredFiles: requiredFiles,
files: pageFiles.sorted(),
externalFiles: externalFiles.sorted(),
requiredFiles: requiredFiles.sorted(),
title: content.title!,
linkPreviewImage: thumbnail?.name,
linkPreviewTitle: content.linkPreviewTitle,
@ -320,7 +320,7 @@ final class Importer {
let images = page.linkPreviewImage.map { [$0] } ?? []
return LocalizedPostFile(
images: Set(images),
images: images.sorted(),
title: page.linkPreviewTitle ?? page.title,
content: content,
lastModifiedDate: nil)

View File

@ -255,23 +255,31 @@ final class Content: ObservableObject {
private func loadPages(_ pagesData: [String : PageFile], tags: [String : Tag]) -> [String : Page] {
pagesData.reduce(into: [:]) { pages, data in
let (pageId, page) = data
let german = page.german
let germanPage = LocalizedPage(
urlString: page.german.url,
title: page.german.title,
lastModified: page.german.lastModifiedDate,
originalUrl: page.german.originalURL,
files: page.german.files,
externalFiles: page.german.externalFiles,
requiredFiles: page.german.requiredFiles)
urlString: german.url,
title: german.title,
lastModified: german.lastModifiedDate,
originalUrl: german.originalURL,
files: Set(german.files),
externalFiles: Set(german.externalFiles),
requiredFiles: Set(german.requiredFiles),
linkPreviewImage: german.linkPreviewImage,
linkPreviewTitle: german.linkPreviewTitle,
linkPreviewDescription: german.linkPreviewDescription)
let english = page.english
let englishPage = LocalizedPage(
urlString: page.english.url,
title: page.english.title,
lastModified: page.english.lastModifiedDate,
originalUrl: page.english.originalURL,
files: page.english.files,
externalFiles: page.english.externalFiles,
requiredFiles: page.english.requiredFiles)
urlString: english.url,
title: english.title,
lastModified: english.lastModifiedDate,
originalUrl: english.originalURL,
files: Set(english.files),
externalFiles: Set(english.externalFiles),
requiredFiles: Set(english.requiredFiles),
linkPreviewImage: english.linkPreviewImage,
linkPreviewTitle: english.linkPreviewTitle,
linkPreviewDescription: english.linkPreviewDescription)
pages[pageId] = Page(
id: pageId,

View File

@ -55,13 +55,25 @@ final class LocalizedPage: ObservableObject {
@Published
var requiredFiles: Set<String> = []
@Published
var linkPreviewImage: String?
@Published
var linkPreviewTitle: String?
@Published
var linkPreviewDescription: String?
init(urlString: String,
title: String,
lastModified: Date? = nil,
originalUrl: String? = nil,
files: Set<String> = [],
externalFiles: Set<String> = [],
requiredFiles: Set<String> = []) {
requiredFiles: Set<String> = [],
linkPreviewImage: String? = nil,
linkPreviewTitle: String? = nil,
linkPreviewDescription: String? = nil) {
self.urlString = urlString
self.title = title
self.lastModified = lastModified
@ -69,6 +81,9 @@ final class LocalizedPage: ObservableObject {
self.files = files
self.externalFiles = externalFiles
self.requiredFiles = requiredFiles
self.linkPreviewImage = linkPreviewImage
self.linkPreviewTitle = linkPreviewTitle
self.linkPreviewDescription = linkPreviewDescription
}
@MainActor

View File

@ -0,0 +1,30 @@
import Foundation
extension Page {
var pageFile: PageFile {
.init(isDraft: isDraft,
tags: tags.map { $0.id },
createdDate: createdDate,
startDate: startDate,
endDate: hasEndDate ? endDate : nil,
german: german.pageFile,
english: english.pageFile)
}
}
extension LocalizedPage {
var pageFile: LocalizedPageFile {
.init(url: urlString,
files: files.sorted(),
externalFiles: externalFiles.sorted(),
requiredFiles: requiredFiles.sorted(),
title: title,
linkPreviewImage: linkPreviewImage,
linkPreviewTitle: linkPreviewTitle,
linkPreviewDescription: linkPreviewDescription,
lastModifiedDate: lastModified,
originalURL: originalUrl)
}
}

View File

@ -31,18 +31,18 @@ struct LocalizedPageFile {
/**
The files (images, videos, other files) used in the page.
*/
let files: Set<String>
let files: [String]
/**
The additional files required for the page to function correctly, but which are not stored with the content.
*/
let externalFiles: Set<String>
let externalFiles: [String]
/**
Specifies additional files which should be copied to the destination when generating the content.
- Note: This property defaults to an empty set.
*/
let requiredFiles: Set<String>
let requiredFiles: [String]
let title: String

View File

@ -28,7 +28,7 @@ extension PostFile: Codable {
*/
struct LocalizedPostFile {
let images: Set<String>
let images: [String]
let title: String?