Reorganize saving, generate feed

This commit is contained in:
Christoph Hagen
2024-12-03 13:19:50 +01:00
parent 3c950d47a2
commit dc7b7a0e90
27 changed files with 717 additions and 411 deletions

View File

@@ -0,0 +1,23 @@
import Foundation
struct FileOnDisk {
let type: FileType
let url: URL
let name: String
init(image: String, url: URL) {
self.type = .image
self.url = url
self.name = image
}
init(type: FileType, url: URL, name: String) {
self.type = type
self.url = url
self.name = name
}
}

View File

@@ -0,0 +1,25 @@
import Foundation
enum FileType {
case image
case file
case video
case resource
init(fileExtension: String) {
switch fileExtension.lowercased() {
case "jpg", "jpeg", "png", "gif":
self = .image
case "html", "stl", "f3d", "step", "f3z", "zip", "json", "conf", "css", "js", "cpp", "cddx", "svg", "glb", "mp3", "pdf", "swift":
self = .file
case "mp4":
self = .video
case "key", "psd":
self = .resource
default:
print("Unhandled file type: \(fileExtension)")
self = .resource
}
}
}

View File

@@ -0,0 +1,62 @@
import Foundation
struct PageFile {
let isDraft: Bool
let tags: [String]
let createdDate: Date
let startDate: Date
let endDate: Date?
let german: LocalizedPageFile
let english: LocalizedPageFile
}
extension PageFile: Codable {
}
/**
The structure to store the metadata of a localized page
*/
struct LocalizedPageFile {
let url: String
/**
The files (images, videos, other files) used in the page.
*/
let files: [String]
/**
The additional files required for the page to function correctly, but which are not stored with the content.
*/
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: [String]
let title: String
let linkPreviewImage: String?
let linkPreviewTitle: String?
let linkPreviewDescription: String?
let lastModifiedDate: Date?
let originalURL: String?
}
extension LocalizedPageFile: Codable {
}

View File

@@ -0,0 +1,11 @@
import Foundation
struct PageOnDisk {
let page: PageFile
let deContentUrl: URL
let enContentUrl: URL
}

View File

@@ -0,0 +1,48 @@
import Foundation
struct PostFile {
let isDraft: Bool
let createdDate: Date
let startDate: Date
let endDate: Date?
let tags: [String]
let german: LocalizedPostFile
let english: LocalizedPostFile
let linkedPageId: String?
}
extension PostFile: Codable {
}
/**
The structure to store the metadata of a localized post
*/
struct LocalizedPostFile {
let images: [String]
let title: String?
let content: String
let lastModifiedDate: Date?
let linkPreviewImage: String?
let linkPreviewTitle: String?
let linkPreviewDescription: String?
}
extension LocalizedPostFile: Codable {
}

View File

@@ -0,0 +1,41 @@
import Foundation
struct TagFile {
let id: String
let isVisible: Bool
let german: LocalizedTagFile
let english: LocalizedTagFile
}
extension TagFile: Codable {
}
struct LocalizedTagFile {
/// The id of the tag, used also as a url component
let urlComponent: String
/// A custom name, different from the tag id
let name: String
let subtitle: String?
let description: String?
/// The image id of the thumbnail
let thumbnail: String?
/// The original url in the previous site layout
let originalURL: String?
}
extension LocalizedTagFile: Codable {
}

View File

@@ -0,0 +1,28 @@
import Foundation
struct WebsiteDataFile {
let navigationTags: [String]
let german: LocalizedWebsiteDataFile
let english: LocalizedWebsiteDataFile
}
extension WebsiteDataFile: Codable {
}
struct LocalizedWebsiteDataFile {
let title: String
let description: String
let iconDescription: String
}
extension LocalizedWebsiteDataFile: Codable {
}