Rework storage structs, link preview
This commit is contained in:
58
CHDataManagement/Model/LinkPreview.swift
Normal file
58
CHDataManagement/Model/LinkPreview.swift
Normal file
@ -0,0 +1,58 @@
|
||||
import Foundation
|
||||
|
||||
/**
|
||||
The information to use when constructing the link preview of a page.
|
||||
|
||||
The information will be placed in the `<head>` of the page as `<meta>` tags.
|
||||
*/
|
||||
final class LinkPreview: ObservableObject {
|
||||
|
||||
/// The description to show when linking to a page (contained in the `<head>` of the page)
|
||||
@Published
|
||||
var title: String?
|
||||
|
||||
/// The image id of the thumbnail to attach to the link preview (contained in the `<head>` of the page)
|
||||
@Published
|
||||
var description: String?
|
||||
|
||||
/// The title to show for a link preview (contained in the `<head>` of the page)
|
||||
@Published
|
||||
var image: FileResource?
|
||||
|
||||
init(title: String? = nil, description: String? = nil, image: FileResource? = nil) {
|
||||
self.title = title
|
||||
self.description = description
|
||||
self.image = image
|
||||
}
|
||||
|
||||
/**
|
||||
Remove a file if it is used in the link preview.
|
||||
*/
|
||||
func remove(_ file: FileResource) {
|
||||
if image == file {
|
||||
image = nil
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Storage
|
||||
|
||||
var data: Data {
|
||||
.init(title: title, description: description, image: image?.id)
|
||||
}
|
||||
|
||||
init(context: LoadingContext, data: Data) {
|
||||
self.title = data.title
|
||||
self.description = data.description
|
||||
self.image = data.image.map(context.image)
|
||||
}
|
||||
}
|
||||
|
||||
extension LinkPreview {
|
||||
|
||||
/// The object to serialize a link preview for storage
|
||||
struct Data: Codable {
|
||||
let title: String?
|
||||
let description: String?
|
||||
let image: String?
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user