diff --git a/CHDataManagement/Model/Content.swift b/CHDataManagement/Model/Content.swift index 26b61cd..f367c50 100644 --- a/CHDataManagement/Model/Content.swift +++ b/CHDataManagement/Model/Content.swift @@ -123,6 +123,22 @@ final class Content: ObservableObject { func remove(_ file: FileResource) { files.remove(file) - #warning("Remove file from required files, thumbnails, post images, etc.") + for post in posts { + post.remove(file) + } + + for page in pages { + page.remove(file) + } + + for tag in tags { + tag.remove(file) + } + settings.remove(file) + #warning("Remove MainView.selectedFile when deleting file") + } + + func file(withOutputPath: String) -> FileResource? { + files.first { $0.absoluteUrl == withOutputPath } } } diff --git a/CHDataManagement/Model/Item/LinkPreviewItem.swift b/CHDataManagement/Model/Item/LinkPreviewItem.swift index bdb620a..4b8a864 100644 --- a/CHDataManagement/Model/Item/LinkPreviewItem.swift +++ b/CHDataManagement/Model/Item/LinkPreviewItem.swift @@ -1,9 +1,18 @@ -protocol LinkPreviewItem { +protocol LinkPreviewItem: AnyObject { - var linkPreviewImage: FileResource? { get } + var linkPreviewImage: FileResource? { get set } var linkPreviewTitle: String? { get } var linkPreviewDescription: String? { get } } + +extension LinkPreviewItem { + + func remove(linkPreviewImage file: FileResource) { + if linkPreviewImage == file { + linkPreviewImage = nil + } + } +} diff --git a/CHDataManagement/Model/LocalizedPost.swift b/CHDataManagement/Model/LocalizedPost.swift index 928a3a0..12a0330 100644 --- a/CHDataManagement/Model/LocalizedPost.swift +++ b/CHDataManagement/Model/LocalizedPost.swift @@ -79,6 +79,13 @@ final class LocalizedPost: ObservableObject { } return text.contains(string) } + + func remove(_ file: FileResource) { + if images.contains(file) { + images.remove(file) + } + remove(linkPreviewImage: file) + } } extension LocalizedPost: LinkPreviewItem { diff --git a/CHDataManagement/Model/Page.swift b/CHDataManagement/Model/Page.swift index e9d00f3..38ee208 100644 --- a/CHDataManagement/Model/Page.swift +++ b/CHDataManagement/Model/Page.swift @@ -156,6 +156,14 @@ final class Page: Item { func hasContent(in language: ContentLanguage) -> Bool { content.storage.hasPageContent(for: id, language: language) } + + func remove(_ file: FileResource) { + if requiredFiles.contains(file) { + requiredFiles.remove(file) + } + english.remove(linkPreviewImage: file) + german.remove(linkPreviewImage: file) + } } extension Page: DateItem { diff --git a/CHDataManagement/Model/Post.swift b/CHDataManagement/Model/Post.swift index 50cdf02..30c8f1b 100644 --- a/CHDataManagement/Model/Post.swift +++ b/CHDataManagement/Model/Post.swift @@ -135,6 +135,11 @@ final class Post: Item { id = newId return true } + + func remove(_ file: FileResource) { + english.remove(file) + german.remove(file) + } } extension Post: DateItem { diff --git a/CHDataManagement/Model/Settings/AudioPlayerSettings.swift b/CHDataManagement/Model/Settings/AudioPlayerSettings.swift index 7c32e7c..d6b9ae0 100644 --- a/CHDataManagement/Model/Settings/AudioPlayerSettings.swift +++ b/CHDataManagement/Model/Settings/AudioPlayerSettings.swift @@ -51,6 +51,15 @@ final class AudioPlayerSettings: ObservableObject { german: german.file, english: english.file) } + + func remove(_ file: FileResource) { + if audioPlayerJsFile == file { + audioPlayerJsFile = nil + } + if audioPlayerCssFile == file { + audioPlayerCssFile = nil + } + } } extension AudioPlayerSettings { diff --git a/CHDataManagement/Model/Settings/PageSettings.swift b/CHDataManagement/Model/Settings/PageSettings.swift index 8187e2f..5f00021 100644 --- a/CHDataManagement/Model/Settings/PageSettings.swift +++ b/CHDataManagement/Model/Settings/PageSettings.swift @@ -57,6 +57,24 @@ final class PageSettings: ObservableObject { german: german.file, english: english.file) } + + func remove(_ file: FileResource) { + if codeHighlightingJsFile == file { + codeHighlightingJsFile = nil + } + if modelViewerJsFile == file { + modelViewerJsFile = nil + } + if defaultCssFile == file { + defaultCssFile = nil + } + if imageCompareJsFile == file { + imageCompareJsFile = nil + } + if imageCompareCssFile == file { + imageCompareCssFile = nil + } + } } extension PageSettings: LocalizedItem { diff --git a/CHDataManagement/Model/Settings/PostSettings.swift b/CHDataManagement/Model/Settings/PostSettings.swift index 068e86d..e0aefee 100644 --- a/CHDataManagement/Model/Settings/PostSettings.swift +++ b/CHDataManagement/Model/Settings/PostSettings.swift @@ -62,6 +62,18 @@ final class PostSettings: ObservableObject { german: german.file, english: english.file) } + + func remove(_ file: FileResource) { + if swiperJsFile == file { + swiperJsFile = nil + } + if swiperCssFile == file { + swiperCssFile = nil + } + if defaultCssFile == file { + defaultCssFile = nil + } + } } extension PostSettings { diff --git a/CHDataManagement/Model/Settings/Settings.swift b/CHDataManagement/Model/Settings/Settings.swift index 14918a7..82421f2 100644 --- a/CHDataManagement/Model/Settings/Settings.swift +++ b/CHDataManagement/Model/Settings/Settings.swift @@ -48,6 +48,12 @@ final class Settings: ObservableObject { audioPlayer: audioPlayer.file, tagOverview: tagOverview?.file) } + + func remove(_ file: FileResource) { + pages.remove(file) + posts.remove(file) + audioPlayer.remove(file) + } } extension Settings { diff --git a/CHDataManagement/Model/Tag.swift b/CHDataManagement/Model/Tag.swift index c288678..b5a1ff0 100644 --- a/CHDataManagement/Model/Tag.swift +++ b/CHDataManagement/Model/Tag.swift @@ -66,6 +66,11 @@ final class Tag: Item { func contains(urlComponent: String) -> Bool { german.urlComponent == urlComponent || english.urlComponent == urlComponent } + + func remove(_ file: FileResource) { + english.remove(linkPreviewImage: file) + german.remove(linkPreviewImage: file) + } } extension Tag: LocalizedItem {