Add images to posts, saving
This commit is contained in:
@ -17,7 +17,7 @@ final class Content: ObservableObject {
|
||||
var images: [ImageResource] = []
|
||||
|
||||
@Published
|
||||
var files: [FileResources] = []
|
||||
var files: [FileResource] = []
|
||||
|
||||
@AppStorage("contentPath")
|
||||
private var storedContentPath: String = ""
|
||||
@ -37,7 +37,7 @@ final class Content: ObservableObject {
|
||||
pages: [Page] = [],
|
||||
tags: [Tag] = [],
|
||||
images: [ImageResource] = [],
|
||||
files: [FileResources] = [],
|
||||
files: [FileResource] = [],
|
||||
storedContentPath: String) {
|
||||
self.posts = posts
|
||||
self.pages = pages
|
||||
@ -209,13 +209,13 @@ final class Content: ObservableObject {
|
||||
dict[file] = ImageResource(uniqueId: file, altText: .init(en: "", de: ""), fileUrl: url)
|
||||
}
|
||||
|
||||
let files: [FileResources] = filesData.compactMap { file, url in
|
||||
let files: [FileResource] = filesData.compactMap { file, url in
|
||||
let ext = file.components(separatedBy: ".").last!.lowercased()
|
||||
let type = FileType(fileExtension: ext)
|
||||
guard type == .file else {
|
||||
return nil
|
||||
}
|
||||
return FileResources(uniqueId: file, description: "")
|
||||
return FileResource(uniqueId: file, description: "")
|
||||
}
|
||||
|
||||
let posts = postsData.map { postId, post in
|
||||
@ -293,6 +293,27 @@ final class Content: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Saving
|
||||
|
||||
func saveToDisk() {
|
||||
print("Starting save")
|
||||
for page in pages {
|
||||
storage.save(pageMetadata: page.pageFile, for: page.id)
|
||||
}
|
||||
|
||||
for post in posts {
|
||||
storage.save(post: post.postFile, for: post.id)
|
||||
}
|
||||
|
||||
for tag in tags {
|
||||
storage.save(tagMetadata: tag.tagFile, for: tag.id)
|
||||
}
|
||||
// TODO: Remove all files that are no longer in use (they belong to deleted items)
|
||||
print("Finished save")
|
||||
}
|
||||
|
||||
// MARK: Folder access
|
||||
|
||||
static func accessFolderFromBookmark(key: String, operation: (URL) -> Void) {
|
||||
guard let bookmarkData = UserDefaults.standard.data(forKey: key) else {
|
||||
print("No bookmark data to access folder")
|
||||
|
@ -1,6 +1,6 @@
|
||||
import Foundation
|
||||
|
||||
final class FileResources: ObservableObject {
|
||||
final class FileResource: ObservableObject {
|
||||
|
||||
/// Globally unique id
|
||||
@Published
|
||||
|
@ -50,6 +50,13 @@ extension ImageResource: Equatable {
|
||||
}
|
||||
}
|
||||
|
||||
extension ImageResource: Hashable {
|
||||
|
||||
func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(id)
|
||||
}
|
||||
}
|
||||
|
||||
extension ImageResource {
|
||||
|
||||
var imageToDisplay: Image {
|
||||
|
@ -25,10 +25,6 @@ final class LocalizedPost: ObservableObject {
|
||||
self.images = images
|
||||
}
|
||||
|
||||
var displayImages: [Image] {
|
||||
images.map { $0.imageToDisplay }
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func editableTitle() -> Binding<String> {
|
||||
Binding(
|
||||
|
26
CHDataManagement/Model/Post+Storage.swift
Normal file
26
CHDataManagement/Model/Post+Storage.swift
Normal file
@ -0,0 +1,26 @@
|
||||
import Foundation
|
||||
|
||||
extension Post {
|
||||
|
||||
var postFile: PostFile {
|
||||
.init(
|
||||
isDraft: isDraft,
|
||||
createdDate: createdDate,
|
||||
startDate: startDate,
|
||||
endDate: hasEndDate ? endDate : nil,
|
||||
tags: tags.map { $0.id },
|
||||
german: german.postFile,
|
||||
english: english.postFile,
|
||||
linkedPageId: linkedPage?.id)
|
||||
}
|
||||
}
|
||||
|
||||
extension LocalizedPost {
|
||||
|
||||
var postFile: LocalizedPostFile {
|
||||
.init(images: images.map { $0.id },
|
||||
title: title.nonEmpty,
|
||||
content: content,
|
||||
lastModifiedDate: lastModified)
|
||||
}
|
||||
}
|
22
CHDataManagement/Model/Tag+Storage.swift
Normal file
22
CHDataManagement/Model/Tag+Storage.swift
Normal file
@ -0,0 +1,22 @@
|
||||
import Foundation
|
||||
|
||||
extension Tag {
|
||||
|
||||
var tagFile: TagFile {
|
||||
.init(id: id,
|
||||
german: german.tagFile,
|
||||
english: english.tagFile)
|
||||
}
|
||||
}
|
||||
|
||||
extension LocalizedTag {
|
||||
|
||||
var tagFile: LocalizedTagFile {
|
||||
.init(urlComponent: urlComponent,
|
||||
name: name,
|
||||
subtitle: subtitle,
|
||||
description: description,
|
||||
thumbnail: thumbnail,
|
||||
originalURL: originalUrl)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user