Add images to posts, saving

This commit is contained in:
Christoph Hagen
2024-11-20 23:46:54 +01:00
parent cb22ae34f2
commit a35c2d669e
21 changed files with 415 additions and 149 deletions

View File

@@ -1,69 +1,14 @@
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
}
}
}
struct ImportedPage {
let page: PageFile
let deContentUrl: URL
let enContentUrl: URL
}
struct FileResource {
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
}
}
final class Importer {
var posts: [String : PostFile] = [:]
var pages: [String : ImportedPage] = [:]
var pages: [String : PageOnDisk] = [:]
var tags: [String : TagFile] = [:]
var files: [String : FileResource] = [:]
var files: [String : FileOnDisk] = [:]
var ignoredFiles: [URL] = []
@@ -99,9 +44,9 @@ final class Importer {
let meta = try JSONDecoder().decode(ImportableTag.self, from: data)
let thumbnailUrl = folder.appending(path: "thumbnail.jpg", directoryHint: .notDirectory)
var thumbnail: FileResource? = nil
var thumbnail: FileOnDisk? = nil
if FileManager.default.fileExists(atPath: thumbnailUrl.path()) {
thumbnail = FileResource(type: .image, url: thumbnailUrl, name: "\(name)-thumbnail.jpg")
thumbnail = FileOnDisk(type: .image, url: thumbnailUrl, name: "\(name)-thumbnail.jpg")
add(resource: thumbnail!)
}
@@ -143,7 +88,7 @@ final class Importer {
.filter { $0.hasDirectoryPath }
}
private func findResources(in folder: URL, pageId: String) throws -> [FileResource] {
private func findResources(in folder: URL, pageId: String) throws -> [FileOnDisk] {
try FileManager.default
.contentsOfDirectory(at: folder, includingPropertiesForKeys: [.isDirectoryKey])
.filter { !$0.hasDirectoryPath }
@@ -165,7 +110,7 @@ final class Importer {
let name = pageId + "-" + fileName
return FileResource(type: type, url: url, name: name)
return FileOnDisk(type: type, url: url, name: name)
}
}
@@ -272,7 +217,7 @@ final class Importer {
posts[pageId] = post
}
private func add(resource: FileResource) {
private func add(resource: FileOnDisk) {
guard let existingFile = files[resource.name] else {
files[resource.name] = resource
return
@@ -284,19 +229,19 @@ final class Importer {
print("Conflicting name for file \(resource.name)")
}
private func determineThumbnail(in resources: [FileResource], folder: URL, customPath: String?, pageId: String, language: String) throws -> FileResource? {
private func determineThumbnail(in resources: [FileOnDisk], folder: URL, customPath: String?, pageId: String, language: String) throws -> FileOnDisk? {
guard let thumbnailUrl = findThumbnailUrl(in: folder, customPath: customPath, language: language) else {
return nil
}
return resources.first { $0.url == thumbnailUrl }
}
private func determineThumbnail(in folder: URL, customPath: String?, pageId: String, language: String) throws -> FileResource? {
private func determineThumbnail(in folder: URL, customPath: String?, pageId: String, language: String) throws -> FileOnDisk? {
guard let thumbnailUrl = findThumbnailUrl(in: folder, customPath: customPath, language: language) else {
return nil
}
let id = pageId + "-" + thumbnailUrl.lastPathComponent
return FileResource(image: id, url: thumbnailUrl)
return FileOnDisk(image: id, url: thumbnailUrl)
}
private func findThumbnailUrl(in folder: URL, customPath: String?, language: String) -> URL? {