Sort file lists for consistent storage
This commit is contained in:
parent
8ae2a237cc
commit
cb22ae34f2
@ -219,9 +219,9 @@ final class Importer {
|
|||||||
}
|
}
|
||||||
let page = LocalizedPageFile(
|
let page = LocalizedPageFile(
|
||||||
url: id,
|
url: id,
|
||||||
files: pageFiles,
|
files: pageFiles.sorted(),
|
||||||
externalFiles: externalFiles,
|
externalFiles: externalFiles.sorted(),
|
||||||
requiredFiles: requiredFiles,
|
requiredFiles: requiredFiles.sorted(),
|
||||||
title: content.title!,
|
title: content.title!,
|
||||||
linkPreviewImage: thumbnail?.name,
|
linkPreviewImage: thumbnail?.name,
|
||||||
linkPreviewTitle: content.linkPreviewTitle,
|
linkPreviewTitle: content.linkPreviewTitle,
|
||||||
@ -320,7 +320,7 @@ final class Importer {
|
|||||||
let images = page.linkPreviewImage.map { [$0] } ?? []
|
let images = page.linkPreviewImage.map { [$0] } ?? []
|
||||||
|
|
||||||
return LocalizedPostFile(
|
return LocalizedPostFile(
|
||||||
images: Set(images),
|
images: images.sorted(),
|
||||||
title: page.linkPreviewTitle ?? page.title,
|
title: page.linkPreviewTitle ?? page.title,
|
||||||
content: content,
|
content: content,
|
||||||
lastModifiedDate: nil)
|
lastModifiedDate: nil)
|
||||||
|
@ -255,23 +255,31 @@ final class Content: ObservableObject {
|
|||||||
private func loadPages(_ pagesData: [String : PageFile], tags: [String : Tag]) -> [String : Page] {
|
private func loadPages(_ pagesData: [String : PageFile], tags: [String : Tag]) -> [String : Page] {
|
||||||
pagesData.reduce(into: [:]) { pages, data in
|
pagesData.reduce(into: [:]) { pages, data in
|
||||||
let (pageId, page) = data
|
let (pageId, page) = data
|
||||||
|
let german = page.german
|
||||||
let germanPage = LocalizedPage(
|
let germanPage = LocalizedPage(
|
||||||
urlString: page.german.url,
|
urlString: german.url,
|
||||||
title: page.german.title,
|
title: german.title,
|
||||||
lastModified: page.german.lastModifiedDate,
|
lastModified: german.lastModifiedDate,
|
||||||
originalUrl: page.german.originalURL,
|
originalUrl: german.originalURL,
|
||||||
files: page.german.files,
|
files: Set(german.files),
|
||||||
externalFiles: page.german.externalFiles,
|
externalFiles: Set(german.externalFiles),
|
||||||
requiredFiles: page.german.requiredFiles)
|
requiredFiles: Set(german.requiredFiles),
|
||||||
|
linkPreviewImage: german.linkPreviewImage,
|
||||||
|
linkPreviewTitle: german.linkPreviewTitle,
|
||||||
|
linkPreviewDescription: german.linkPreviewDescription)
|
||||||
|
|
||||||
|
let english = page.english
|
||||||
let englishPage = LocalizedPage(
|
let englishPage = LocalizedPage(
|
||||||
urlString: page.english.url,
|
urlString: english.url,
|
||||||
title: page.english.title,
|
title: english.title,
|
||||||
lastModified: page.english.lastModifiedDate,
|
lastModified: english.lastModifiedDate,
|
||||||
originalUrl: page.english.originalURL,
|
originalUrl: english.originalURL,
|
||||||
files: page.english.files,
|
files: Set(english.files),
|
||||||
externalFiles: page.english.externalFiles,
|
externalFiles: Set(english.externalFiles),
|
||||||
requiredFiles: page.english.requiredFiles)
|
requiredFiles: Set(english.requiredFiles),
|
||||||
|
linkPreviewImage: english.linkPreviewImage,
|
||||||
|
linkPreviewTitle: english.linkPreviewTitle,
|
||||||
|
linkPreviewDescription: english.linkPreviewDescription)
|
||||||
|
|
||||||
pages[pageId] = Page(
|
pages[pageId] = Page(
|
||||||
id: pageId,
|
id: pageId,
|
||||||
|
@ -55,13 +55,25 @@ final class LocalizedPage: ObservableObject {
|
|||||||
@Published
|
@Published
|
||||||
var requiredFiles: Set<String> = []
|
var requiredFiles: Set<String> = []
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var linkPreviewImage: String?
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var linkPreviewTitle: String?
|
||||||
|
|
||||||
|
@Published
|
||||||
|
var linkPreviewDescription: String?
|
||||||
|
|
||||||
init(urlString: String,
|
init(urlString: String,
|
||||||
title: String,
|
title: String,
|
||||||
lastModified: Date? = nil,
|
lastModified: Date? = nil,
|
||||||
originalUrl: String? = nil,
|
originalUrl: String? = nil,
|
||||||
files: Set<String> = [],
|
files: Set<String> = [],
|
||||||
externalFiles: Set<String> = [],
|
externalFiles: Set<String> = [],
|
||||||
requiredFiles: Set<String> = []) {
|
requiredFiles: Set<String> = [],
|
||||||
|
linkPreviewImage: String? = nil,
|
||||||
|
linkPreviewTitle: String? = nil,
|
||||||
|
linkPreviewDescription: String? = nil) {
|
||||||
self.urlString = urlString
|
self.urlString = urlString
|
||||||
self.title = title
|
self.title = title
|
||||||
self.lastModified = lastModified
|
self.lastModified = lastModified
|
||||||
@ -69,6 +81,9 @@ final class LocalizedPage: ObservableObject {
|
|||||||
self.files = files
|
self.files = files
|
||||||
self.externalFiles = externalFiles
|
self.externalFiles = externalFiles
|
||||||
self.requiredFiles = requiredFiles
|
self.requiredFiles = requiredFiles
|
||||||
|
self.linkPreviewImage = linkPreviewImage
|
||||||
|
self.linkPreviewTitle = linkPreviewTitle
|
||||||
|
self.linkPreviewDescription = linkPreviewDescription
|
||||||
}
|
}
|
||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
|
30
CHDataManagement/Model/Page+Storage.swift
Normal file
30
CHDataManagement/Model/Page+Storage.swift
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
@ -31,18 +31,18 @@ struct LocalizedPageFile {
|
|||||||
/**
|
/**
|
||||||
The files (images, videos, other files) used in the page.
|
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.
|
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.
|
Specifies additional files which should be copied to the destination when generating the content.
|
||||||
- Note: This property defaults to an empty set.
|
- Note: This property defaults to an empty set.
|
||||||
*/
|
*/
|
||||||
let requiredFiles: Set<String>
|
let requiredFiles: [String]
|
||||||
|
|
||||||
let title: String
|
let title: String
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ extension PostFile: Codable {
|
|||||||
*/
|
*/
|
||||||
struct LocalizedPostFile {
|
struct LocalizedPostFile {
|
||||||
|
|
||||||
let images: Set<String>
|
let images: [String]
|
||||||
|
|
||||||
let title: String?
|
let title: String?
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user