Add videos, delete unused files
This commit is contained in:
@ -19,6 +19,9 @@ final class Content: ObservableObject {
|
||||
@Published
|
||||
var images: [ImageResource]
|
||||
|
||||
@Published
|
||||
var videos: [String]
|
||||
|
||||
@Published
|
||||
var files: [FileResource]
|
||||
|
||||
@ -42,6 +45,7 @@ final class Content: ObservableObject {
|
||||
tags: [Tag],
|
||||
images: [ImageResource],
|
||||
files: [FileResource],
|
||||
videos: [String],
|
||||
storedContentPath: String) {
|
||||
self.websiteData = websiteData
|
||||
self.posts = posts
|
||||
@ -49,6 +53,7 @@ final class Content: ObservableObject {
|
||||
self.tags = tags
|
||||
self.images = images
|
||||
self.files = files
|
||||
self.videos = videos
|
||||
self.storedContentPath = storedContentPath
|
||||
self.contentPath = storedContentPath
|
||||
self.storage = Storage(baseFolder: URL(filePath: storedContentPath))
|
||||
@ -70,6 +75,7 @@ final class Content: ObservableObject {
|
||||
self.tags = []
|
||||
self.images = []
|
||||
self.files = []
|
||||
self.videos = []
|
||||
|
||||
contentPath = storedContentPath
|
||||
do {
|
||||
@ -142,21 +148,23 @@ final class Content: ObservableObject {
|
||||
let postsData = try storage.loadAllPosts()
|
||||
let filesData = try storage.loadAllFiles()
|
||||
|
||||
let images: [String : ImageResource] = filesData.reduce(into: [:]) { dict, item in
|
||||
let (file, url) = item
|
||||
let ext = file.components(separatedBy: ".").last!.lowercased()
|
||||
let type = FileType(fileExtension: ext)
|
||||
guard type == .image else { return }
|
||||
dict[file] = ImageResource(uniqueId: file, altText: .init(en: "", de: ""), fileUrl: url)
|
||||
}
|
||||
var images: [String : ImageResource] = [:]
|
||||
var files: [FileResource] = []
|
||||
var videos: [String] = []
|
||||
|
||||
let files: [FileResource] = filesData.compactMap { file, url in
|
||||
for (file, url) in filesData {
|
||||
let ext = file.components(separatedBy: ".").last!.lowercased()
|
||||
let type = FileType(fileExtension: ext)
|
||||
guard type == .file else {
|
||||
return nil
|
||||
switch type {
|
||||
case .image:
|
||||
images[file] = ImageResource(uniqueId: file, altText: .init(en: "", de: ""), fileUrl: url)
|
||||
case .file:
|
||||
files.append(FileResource(uniqueId: file, description: ""))
|
||||
case .video:
|
||||
videos.append(file)
|
||||
case .resource:
|
||||
break
|
||||
}
|
||||
return FileResource(uniqueId: file, description: "")
|
||||
}
|
||||
|
||||
let tags = tagData.reduce(into: [:]) { (tags, data) in
|
||||
@ -189,6 +197,7 @@ final class Content: ObservableObject {
|
||||
self.pages = pages.values.sorted(ascending: false) { $0.startDate }
|
||||
self.files = files.sorted { $0.uniqueId }
|
||||
self.images = images.values.sorted { $0.id }
|
||||
self.videos = videos
|
||||
self.posts = posts.sorted(ascending: false) { $0.startDate }
|
||||
self.websiteData = WebsiteData(
|
||||
navigationTags: websiteData.navigationTags.map { tags[$0]! },
|
||||
@ -228,6 +237,15 @@ final class Content: ObservableObject {
|
||||
}
|
||||
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")
|
||||
}
|
||||
|
@ -10,3 +10,7 @@ enum ContentLanguage: String {
|
||||
extension ContentLanguage: Codable {
|
||||
|
||||
}
|
||||
|
||||
extension ContentLanguage: CaseIterable {
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user