Rework storage structs, link preview

This commit is contained in:
Christoph Hagen
2025-01-08 14:59:04 +01:00
parent b99c064d10
commit a7197b9628
75 changed files with 1365 additions and 1454 deletions

View File

@ -1,6 +1,6 @@
import Foundation
final class PostSettings: ObservableObject {
final class PostSettings: ObservableObject, LocalizedItem {
/// The number of posts to show in a single page of the news feed
@Published
@ -41,28 +41,6 @@ final class PostSettings: ObservableObject {
self.english = english
}
// MARK: Storage
init(file: PostSettingsFile, files: [String : FileResource]) {
self.postsPerPage = file.postsPerPage
self.contentWidth = file.contentWidth
self.swiperCssFile = file.swiperCssFile.map { files[$0] }
self.swiperJsFile = file.swiperJsFile.map { files[$0] }
self.defaultCssFile = file.defaultCssFile.map { files[$0] }
self.german = .init(file: file.german)
self.english = .init(file: file.english)
}
var file: PostSettingsFile {
.init(postsPerPage: postsPerPage,
contentWidth: contentWidth,
swiperCssFile: swiperCssFile?.id,
swiperJsFile: swiperJsFile?.id,
defaultCssFile: defaultCssFile?.id,
german: german.file,
english: english.file)
}
func remove(_ file: FileResource) {
if swiperJsFile == file {
swiperJsFile = nil
@ -76,13 +54,38 @@ final class PostSettings: ObservableObject {
}
}
// MARK: Storage
extension PostSettings {
static var `default`: PostSettings {
.init(file: .default, files: [:])
convenience init(context: LoadingContext, data: Data) {
self.init(
postsPerPage: data.postsPerPage,
contentWidth: data.contentWidth,
swiperCssFile: data.swiperCssFile.map(context.file),
swiperJsFile: data.swiperJsFile.map(context.file),
defaultCssFile: data.defaultCssFile.map(context.file),
german: .init(data: data.german),
english: .init(data: data.english))
}
var data: PostSettings.Data {
.init(postsPerPage: postsPerPage,
contentWidth: contentWidth,
swiperCssFile: swiperCssFile?.id,
swiperJsFile: swiperJsFile?.id,
defaultCssFile: defaultCssFile?.id,
german: german.data,
english: english.data)
}
struct Data: Codable {
let postsPerPage: Int
let contentWidth: Int
let swiperCssFile: String?
let swiperJsFile: String?
let defaultCssFile: String?
let german: LocalizedPostSettings.Data
let english: LocalizedPostSettings.Data
}
}
extension PostSettings: LocalizedItem {
}