Reorganize saving, generate feed
This commit is contained in:
133
CHDataManagement/Model/Content+Save.swift
Normal file
133
CHDataManagement/Model/Content+Save.swift
Normal file
@ -0,0 +1,133 @@
|
||||
import Foundation
|
||||
|
||||
extension Content {
|
||||
|
||||
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)
|
||||
}
|
||||
storage.save(websiteData: websiteData.dataFile)
|
||||
|
||||
do {
|
||||
try storage.deletePostFiles(notIn: posts.map { $0.id })
|
||||
try storage.deletePageFiles(notIn: pages.map { $0.id })
|
||||
try storage.deleteTagFiles(notIn: tags.map { $0.id })
|
||||
let allFiles = files.map { $0.uniqueId } + images.map { $0.id } + videos
|
||||
try storage.deleteFiles(notIn: allFiles)
|
||||
} catch {
|
||||
print("Failed to remove unused files: \(error)")
|
||||
}
|
||||
// TODO: Remove all files that are no longer in use (they belong to deleted items)
|
||||
//print("Finished save")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private extension Page {
|
||||
|
||||
var pageFile: PageFile {
|
||||
.init(isDraft: isDraft,
|
||||
tags: tags.map { $0.id },
|
||||
createdDate: createdDate,
|
||||
startDate: startDate,
|
||||
endDate: hasEndDate ? endDate : nil,
|
||||
german: german.pageFile,
|
||||
english: english.pageFile)
|
||||
}
|
||||
}
|
||||
|
||||
private extension LocalizedPage {
|
||||
|
||||
var pageFile: LocalizedPageFile {
|
||||
.init(url: urlString,
|
||||
files: files.sorted(),
|
||||
externalFiles: externalFiles.sorted(),
|
||||
requiredFiles: requiredFiles.sorted(),
|
||||
title: title,
|
||||
linkPreviewImage: linkPreviewImage,
|
||||
linkPreviewTitle: linkPreviewTitle,
|
||||
linkPreviewDescription: linkPreviewDescription,
|
||||
lastModifiedDate: lastModified,
|
||||
originalURL: originalUrl)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private 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)
|
||||
}
|
||||
}
|
||||
|
||||
private extension LocalizedPost {
|
||||
|
||||
var postFile: LocalizedPostFile {
|
||||
.init(images: images.map { $0.id },
|
||||
title: title.nonEmpty,
|
||||
content: content,
|
||||
lastModifiedDate: lastModified,
|
||||
linkPreviewImage: linkPreviewImage?.id,
|
||||
linkPreviewTitle: linkPreviewTitle,
|
||||
linkPreviewDescription: linkPreviewDescription)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private extension Tag {
|
||||
|
||||
var tagFile: TagFile {
|
||||
.init(id: id,
|
||||
isVisible: isVisible,
|
||||
german: german.tagFile,
|
||||
english: english.tagFile)
|
||||
}
|
||||
}
|
||||
|
||||
private extension LocalizedTag {
|
||||
|
||||
var tagFile: LocalizedTagFile {
|
||||
.init(urlComponent: urlComponent,
|
||||
name: name,
|
||||
subtitle: subtitle,
|
||||
description: description,
|
||||
thumbnail: thumbnail?.id,
|
||||
originalURL: originalUrl)
|
||||
}
|
||||
}
|
||||
|
||||
private extension WebsiteData {
|
||||
|
||||
var dataFile: WebsiteDataFile {
|
||||
.init(
|
||||
navigationTags: navigationTags.map { $0.id },
|
||||
german: german.dataFile,
|
||||
english: english.dataFile)
|
||||
}
|
||||
}
|
||||
|
||||
private extension LocalizedWebsiteData {
|
||||
|
||||
var dataFile: LocalizedWebsiteDataFile {
|
||||
.init(title: title,
|
||||
description: description,
|
||||
iconDescription: iconDescription)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user