Add images to posts, saving
This commit is contained in:
@@ -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? {
|
||||
|
Reference in New Issue
Block a user