diff --git a/CHDataManagement/Generator/Page Generators/TagOverviewGenerator.swift b/CHDataManagement/Generator/Page Generators/TagOverviewGenerator.swift
index c367099..9a2fd7c 100644
--- a/CHDataManagement/Generator/Page Generators/TagOverviewGenerator.swift
+++ b/CHDataManagement/Generator/Page Generators/TagOverviewGenerator.swift
@@ -123,7 +123,7 @@ final class TagOverviewGenerator {
additionalFooter: "") { content in
content += "
\(header.title)
"
for tag in tags {
- let description = tag.localized.description ?? ""
+ let description = tag.localized.linkPreviewDescription ?? ""
let image = self.makePageImage(item: tag.localized)
content += RelatedPageLink(
diff --git a/CHDataManagement/Generator/PageContentGenerator.swift b/CHDataManagement/Generator/PageContentGenerator.swift
index b9f0a94..6c2d647 100644
--- a/CHDataManagement/Generator/PageContentGenerator.swift
+++ b/CHDataManagement/Generator/PageContentGenerator.swift
@@ -229,7 +229,7 @@ final class PageContentParser {
let localized = tag.localized(in: language)
let url = tag.absoluteUrl(in: language)
let title = localized.name
- let description = localized.description ?? ""
+ let description = localized.linkPreviewDescription ?? ""
let image = makePageImage(item: localized)
return RelatedPageLink(
diff --git a/CHDataManagement/Generator/Post Lists/TagPageGeneratorSource.swift b/CHDataManagement/Generator/Post Lists/TagPageGeneratorSource.swift
index 68b7d86..d10af14 100644
--- a/CHDataManagement/Generator/Post Lists/TagPageGeneratorSource.swift
+++ b/CHDataManagement/Generator/Post Lists/TagPageGeneratorSource.swift
@@ -22,7 +22,7 @@ struct TagPageGeneratorSource: PostListPageGeneratorSource {
}
var pageDescription: String {
- tag.localized(in: language).description ?? ""
+ tag.localized(in: language).linkPreviewDescription ?? ""
}
func pageUrlPrefix(for language: ContentLanguage) -> String {
diff --git a/CHDataManagement/Model/Content+Load.swift b/CHDataManagement/Model/Content+Load.swift
index c33c125..16aac72 100644
--- a/CHDataManagement/Model/Content+Load.swift
+++ b/CHDataManagement/Model/Content+Load.swift
@@ -7,10 +7,9 @@ extension Content {
content: self,
urlComponent: tag.urlComponent,
name: tag.name,
- subtitle: tag.subtitle,
- description: tag.description,
- thumbnail: tag.thumbnail.map { images[$0] },
linkPreviewTitle: tag.linkPreviewTitle,
+ linkPreviewDescription: tag.linkPreviewDescription,
+ linkPreviewImage: tag.linkPreviewImage.map { images[$0] },
originalUrl: tag.originalURL)
}
diff --git a/CHDataManagement/Model/Content+Save.swift b/CHDataManagement/Model/Content+Save.swift
index 7116418..d3c963e 100644
--- a/CHDataManagement/Model/Content+Save.swift
+++ b/CHDataManagement/Model/Content+Save.swift
@@ -11,7 +11,7 @@ extension Content {
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.tagFile, for: $0.id) }
+ failedSaves += tags.count { !storage.save(tagMetadata: $0.file, for: $0.id) }
failedSaves.increment(!storage.save(settings: settings.file))
let fileDescriptions: [FileDescriptions] = files.sorted().compactMap { file in
@@ -111,27 +111,3 @@ private extension LocalizedPost {
linkPreviewDescription: linkPreviewDescription)
}
}
-
-
-private extension Tag {
-
- var tagFile: TagFile {
- .init(id: id,
- isVisible: isVisible,
- german: german.tagFile,
- english: english.tagFile)
- }
-}
-
-private extension LocalizedTag {
-
- var tagFile: LocalizedTagFile {
- .init(urlComponent: urlComponent,
- name: name,
- subtitle: subtitle,
- description: description,
- linkPreviewTitle: linkPreviewTitle,
- thumbnail: linkPreviewImage?.id,
- originalURL: originalUrl)
- }
-}
diff --git a/CHDataManagement/Model/FileResource.swift b/CHDataManagement/Model/FileResource.swift
index 18fae2b..9899f45 100644
--- a/CHDataManagement/Model/FileResource.swift
+++ b/CHDataManagement/Model/FileResource.swift
@@ -63,34 +63,43 @@ final class FileResource: Item {
return imageDimensions.width / imageDimensions.height
}
+ private func update(imageDimensions size: CGSize?) {
+ guard let imageDimensions, let size else {
+ // First computation
+ DispatchQueue.main.async {
+ self.imageDimensions = size
+ }
+ return
+ }
+ guard imageDimensions != size else {
+ return
+ }
+ // Image must have changed, so force regeneration
+ DispatchQueue.main.async {
+ self.imageDimensions = size
+ self.didChange()
+ self.removeGeneratedImages()
+ }
+ }
+
var imageToDisplay: Image {
guard let imageData = content.storage.fileData(for: id) else {
print("Failed to load data for image \(id)")
return failureImage
}
- if fileSize == nil {
- DispatchQueue.main.async {
- self.fileSize = imageData.count
- }
- }
+ update(fileSize: imageData.count)
guard let loadedImage = NSImage(data: imageData) else {
print("Failed to create image \(id)")
return failureImage
}
- if loadedImage.size != imageDimensions {
- DispatchQueue.main.async {
- self.imageDimensions = loadedImage.size
- }
- }
+ update(imageDimensions: loadedImage.size)
+
return .init(nsImage: loadedImage)
}
func determineImageDimensions() {
let size = getImageDimensions()
-
- DispatchQueue.main.async {
- self.imageDimensions = size
- }
+ self.update(imageDimensions: size)
}
private func getImageDimensions() -> CGSize? {
@@ -106,16 +115,34 @@ final class FileResource: Item {
return loadedImage.size
}
- func determineFileSize() {
- DispatchQueue.global(qos: .userInitiated).async {
- let size = self.content.storage.size(of: self.id)
+ func update(fileSize size: Int?) {
+ guard let fileSize, let size else {
+ // First computation
DispatchQueue.main.async {
self.fileSize = size
}
+ return
+ }
+ guard fileSize != size else {
+ return
+ }
+ // File must have changed
+ DispatchQueue.main.async {
+ self.fileSize = size
+ self.didChange()
+ self.removeGeneratedImages()
+ }
+ }
+
+ func determineFileSize() {
+ DispatchQueue.global(qos: .userInitiated).async {
+ let size = self.content.storage.size(of: self.id)
+ self.update(fileSize: size)
}
}
func removeGeneratedImages() {
+ guard type.isImage else { return }
content.imageGenerator.removeVersions(of: id)
content.storage.deleteInOutputFolder(path: outputImageFolder)
}
diff --git a/CHDataManagement/Model/LocalizedTag.swift b/CHDataManagement/Model/LocalizedTag.swift
index e1f1423..9d5995f 100644
--- a/CHDataManagement/Model/LocalizedTag.swift
+++ b/CHDataManagement/Model/LocalizedTag.swift
@@ -12,36 +12,31 @@ final class LocalizedTag: ObservableObject {
var name: String
@Published
- var subtitle: String?
+ var linkPreviewTitle: String?
@Published
- var description: String?
+ var linkPreviewDescription: String?
/// The image id of the thumbnail
@Published
var linkPreviewImage: FileResource?
- @Published
- var linkPreviewTitle: String?
-
/// The original url in the previous site layout
let originalUrl: String?
init(content: Content,
urlComponent: String,
name: String,
- subtitle: String? = nil,
- description: String? = nil,
- thumbnail: FileResource? = nil,
linkPreviewTitle: String? = nil,
+ linkPreviewDescription: String? = nil,
+ linkPreviewImage: FileResource? = nil,
originalUrl: String? = nil) {
self.content = content
self.urlComponent = urlComponent
self.name = name
- self.subtitle = subtitle
- self.description = description
- self.linkPreviewImage = thumbnail
self.linkPreviewTitle = linkPreviewTitle
+ self.linkPreviewDescription = linkPreviewDescription
+ self.linkPreviewImage = linkPreviewImage
self.originalUrl = originalUrl
}
@@ -58,7 +53,16 @@ final class LocalizedTag: ObservableObject {
extension LocalizedTag: LinkPreviewItem {
- var linkPreviewDescription: String? {
- description
+}
+
+extension LocalizedTag {
+
+ var tagFile: LocalizedTagFile {
+ .init(urlComponent: urlComponent,
+ name: name,
+ linkPreviewTitle: linkPreviewTitle,
+ linkPreviewDescription: linkPreviewDescription,
+ linkPreviewImage: linkPreviewImage?.id,
+ originalURL: originalUrl)
}
}
diff --git a/CHDataManagement/Model/Tag.swift b/CHDataManagement/Model/Tag.swift
index b603987..c288678 100644
--- a/CHDataManagement/Model/Tag.swift
+++ b/CHDataManagement/Model/Tag.swift
@@ -71,3 +71,13 @@ final class Tag: Item {
extension Tag: LocalizedItem {
}
+
+extension Tag {
+
+ var file: TagFile {
+ .init(id: id,
+ isVisible: isVisible,
+ german: german.tagFile,
+ english: english.tagFile)
+ }
+}
diff --git a/CHDataManagement/Preview Content/Tag+Mock.swift b/CHDataManagement/Preview Content/Tag+Mock.swift
index 414f82c..cbc9619 100644
--- a/CHDataManagement/Preview Content/Tag+Mock.swift
+++ b/CHDataManagement/Preview Content/Tag+Mock.swift
@@ -43,17 +43,15 @@ extension LocalizedTag {
content: .mock,
urlComponent: "electronics",
name: "Electronics",
- subtitle: "Projects with electronics",
- description: "Some description of the tag",
- thumbnail: FileResource(resourceImage: "image1", type: .jpg),
+ linkPreviewDescription: "Some description of the tag",
+ linkPreviewImage: FileResource(resourceImage: "image1", type: .jpg),
originalUrl: "projects/electronics")
static let german = LocalizedTag(
content: .mock,
urlComponent: "elektronik",
name: "Elektronik",
- subtitle: "Projekte mit Elektronik",
- description: "Eine Beschreibung des Tags",
- thumbnail: FileResource(resourceImage: "image2", type: .jpg),
+ linkPreviewDescription: "Eine Beschreibung des Tags",
+ linkPreviewImage: FileResource(resourceImage: "image2", type: .jpg),
originalUrl: "projects/electronics")
}
diff --git a/CHDataManagement/Storage/Model/TagFile.swift b/CHDataManagement/Storage/Model/TagFile.swift
index b108167..3a12ca5 100644
--- a/CHDataManagement/Storage/Model/TagFile.swift
+++ b/CHDataManagement/Storage/Model/TagFile.swift
@@ -24,14 +24,12 @@ struct LocalizedTagFile {
/// A custom name, different from the tag id
let name: String
- let subtitle: String?
-
- let description: String?
-
let linkPreviewTitle: String?
+ let linkPreviewDescription: String?
+
/// The image id of the thumbnail
- let thumbnail: String?
+ let linkPreviewImage: String?
/// The original url in the previous site layout
let originalURL: String?
diff --git a/CHDataManagement/Views/Tags/LocalizedTagDetailView.swift b/CHDataManagement/Views/Tags/LocalizedTagDetailView.swift
index 612a449..a46f932 100644
--- a/CHDataManagement/Views/Tags/LocalizedTagDetailView.swift
+++ b/CHDataManagement/Views/Tags/LocalizedTagDetailView.swift
@@ -31,11 +31,6 @@ struct LocalizedTagDetailView: View {
}
}
- OptionalStringPropertyView(
- title: "Subtitle",
- text: $tag.subtitle,
- footer: "The subtitle/tagline to use")
-
OptionalStringPropertyView(
title: "Preview Title",
text: $tag.linkPreviewTitle,
@@ -49,7 +44,7 @@ struct LocalizedTagDetailView: View {
OptionalTextFieldPropertyView(
title: "Preview Description",
- text: $tag.description,
+ text: $tag.linkPreviewDescription,
footer: "The description to show in previews of the page")
}
}