Improve tag and images view, save website settings
This commit is contained in:
@@ -5,19 +5,22 @@ import Combine
|
||||
final class Content: ObservableObject {
|
||||
|
||||
@Published
|
||||
var posts: [Post] = []
|
||||
var websiteData: WebsiteData
|
||||
|
||||
@Published
|
||||
var pages: [Page] = []
|
||||
var posts: [Post]
|
||||
|
||||
@Published
|
||||
var tags: [Tag] = []
|
||||
var pages: [Page]
|
||||
|
||||
@Published
|
||||
var images: [ImageResource] = []
|
||||
var tags: [Tag]
|
||||
|
||||
@Published
|
||||
var files: [FileResource] = []
|
||||
var images: [ImageResource]
|
||||
|
||||
@Published
|
||||
var files: [FileResource]
|
||||
|
||||
@AppStorage("contentPath")
|
||||
private var storedContentPath: String = ""
|
||||
@@ -33,12 +36,14 @@ final class Content: ObservableObject {
|
||||
|
||||
private var cancellables = Set<AnyCancellable>()
|
||||
|
||||
init(posts: [Post] = [],
|
||||
pages: [Page] = [],
|
||||
tags: [Tag] = [],
|
||||
images: [ImageResource] = [],
|
||||
files: [FileResource] = [],
|
||||
init(websiteData: WebsiteData,
|
||||
posts: [Post],
|
||||
pages: [Page],
|
||||
tags: [Tag],
|
||||
images: [ImageResource],
|
||||
files: [FileResource],
|
||||
storedContentPath: String) {
|
||||
self.websiteData = websiteData
|
||||
self.posts = posts
|
||||
self.pages = pages
|
||||
self.tags = tags
|
||||
@@ -59,6 +64,13 @@ final class Content: ObservableObject {
|
||||
init() {
|
||||
self.storage = Storage(baseFolder: URL(filePath: ""))
|
||||
|
||||
self.websiteData = .mock
|
||||
self.posts = []
|
||||
self.pages = []
|
||||
self.tags = []
|
||||
self.images = []
|
||||
self.files = []
|
||||
|
||||
contentPath = storedContentPath
|
||||
do {
|
||||
try storage.createFolderStructure()
|
||||
@@ -114,9 +126,17 @@ final class Content: ObservableObject {
|
||||
linkPreviewDescription: page.linkPreviewDescription)
|
||||
}
|
||||
|
||||
private func convert(_ websiteData: LocalizedWebsiteDataFile) -> LocalizedWebsiteData {
|
||||
.init(title: websiteData.title,
|
||||
description: websiteData.description,
|
||||
iconDescription: websiteData.iconDescription)
|
||||
}
|
||||
|
||||
func loadFromDisk() throws {
|
||||
let storage = Storage(baseFolder: URL(filePath: contentPath))
|
||||
|
||||
let websiteData = try storage.loadWebsiteData()
|
||||
|
||||
let tagData = try storage.loadAllTags()
|
||||
let pagesData = try storage.loadAllPages()
|
||||
let postsData = try storage.loadAllPosts()
|
||||
@@ -170,6 +190,10 @@ final class Content: ObservableObject {
|
||||
self.files = files.sorted { $0.uniqueId }
|
||||
self.images = images.values.sorted { $0.id }
|
||||
self.posts = posts.sorted(ascending: false) { $0.startDate }
|
||||
self.websiteData = WebsiteData(
|
||||
navigationTags: websiteData.navigationTags.map { tags[$0]! },
|
||||
german: convert(websiteData.german),
|
||||
english: convert(websiteData.english))
|
||||
}
|
||||
|
||||
private func loadPages(_ pagesData: [String : PageFile], tags: [String : Tag]) -> [String : Page] {
|
||||
@@ -202,6 +226,8 @@ final class Content: ObservableObject {
|
||||
for tag in tags {
|
||||
storage.save(tagMetadata: tag.tagFile, for: tag.id)
|
||||
}
|
||||
storage.save(websiteData: websiteData.dataFile)
|
||||
|
||||
// TODO: Remove all files that are no longer in use (they belong to deleted items)
|
||||
//print("Finished save")
|
||||
}
|
||||
|
Reference in New Issue
Block a user