diff --git a/CHDataManagement/Import/Importer.swift b/CHDataManagement/Import/Importer.swift index f2bd7f0..3b2dd58 100644 --- a/CHDataManagement/Import/Importer.swift +++ b/CHDataManagement/Import/Importer.swift @@ -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) diff --git a/CHDataManagement/Model/Content.swift b/CHDataManagement/Model/Content.swift index 777c467..e1e259b 100644 --- a/CHDataManagement/Model/Content.swift +++ b/CHDataManagement/Model/Content.swift @@ -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, diff --git a/CHDataManagement/Model/LocalizedPage.swift b/CHDataManagement/Model/LocalizedPage.swift index 63b1b0d..2d4e44c 100644 --- a/CHDataManagement/Model/LocalizedPage.swift +++ b/CHDataManagement/Model/LocalizedPage.swift @@ -55,13 +55,25 @@ final class LocalizedPage: ObservableObject { @Published var requiredFiles: Set = [] + @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 = [], externalFiles: Set = [], - requiredFiles: Set = []) { + requiredFiles: Set = [], + 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 diff --git a/CHDataManagement/Model/Page+Storage.swift b/CHDataManagement/Model/Page+Storage.swift new file mode 100644 index 0000000..c5ff903 --- /dev/null +++ b/CHDataManagement/Model/Page+Storage.swift @@ -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) + } +} diff --git a/CHDataManagement/Storage/PageFile.swift b/CHDataManagement/Storage/PageFile.swift index 1ad4dca..63f48b7 100644 --- a/CHDataManagement/Storage/PageFile.swift +++ b/CHDataManagement/Storage/PageFile.swift @@ -31,18 +31,18 @@ struct LocalizedPageFile { /** The files (images, videos, other files) used in the page. */ - let files: Set + let files: [String] /** The additional files required for the page to function correctly, but which are not stored with the content. */ - let externalFiles: Set + 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 + let requiredFiles: [String] let title: String diff --git a/CHDataManagement/Storage/PostFile.swift b/CHDataManagement/Storage/PostFile.swift index e234436..8fea7a3 100644 --- a/CHDataManagement/Storage/PostFile.swift +++ b/CHDataManagement/Storage/PostFile.swift @@ -28,7 +28,7 @@ extension PostFile: Codable { */ struct LocalizedPostFile { - let images: Set + let images: [String] let title: String?