Improve content saving, label editing
This commit is contained in:
@ -184,7 +184,9 @@ final class Content: ObservableObject {
|
||||
private(set) var lastModification: Date = .now
|
||||
|
||||
func update(saveState: SaveState) {
|
||||
self.saveState = saveState
|
||||
DispatchQueue.main.async {
|
||||
self.saveState = saveState
|
||||
}
|
||||
}
|
||||
|
||||
func setModificationTimestamp() {
|
||||
|
@ -1,17 +1,10 @@
|
||||
import Foundation
|
||||
|
||||
final class ContentLabel: ObservableObject {
|
||||
struct ContentLabel {
|
||||
|
||||
@Published
|
||||
var icon: PageIcon
|
||||
|
||||
@Published
|
||||
var value: String
|
||||
|
||||
init(icon: PageIcon, value: String) {
|
||||
self.icon = icon
|
||||
self.value = value
|
||||
}
|
||||
}
|
||||
|
||||
extension ContentLabel: Equatable {
|
||||
@ -34,7 +27,7 @@ extension ContentLabel {
|
||||
.init(icon: icon.rawValue, value: value)
|
||||
}
|
||||
|
||||
convenience init?(context: LoadingContext, data: Data) {
|
||||
init?(context: LoadingContext, data: Data) {
|
||||
guard let icon = PageIcon(rawValue: data.icon) else {
|
||||
context.error("Unknown label icon '\(data.icon)'")
|
||||
return nil
|
||||
|
27
CHDataManagement/Model/Item/ChangeObservingItem.swift
Normal file
27
CHDataManagement/Model/Item/ChangeObservingItem.swift
Normal file
@ -0,0 +1,27 @@
|
||||
import Foundation
|
||||
import Combine
|
||||
|
||||
class ChangeObservingItem: ObservableContentItem {
|
||||
|
||||
unowned let content: Content
|
||||
|
||||
/// A dummy property to force views to update when properties change
|
||||
@Published
|
||||
private var changeToggle = false
|
||||
|
||||
var cancellables = Set<AnyCancellable>()
|
||||
|
||||
init(content: Content) {
|
||||
self.content = content
|
||||
|
||||
observeChanges()
|
||||
}
|
||||
|
||||
// MARK: Change observation
|
||||
|
||||
func didChange() {
|
||||
DispatchQueue.main.async {
|
||||
self.changeToggle.toggle()
|
||||
}
|
||||
}
|
||||
}
|
@ -1,9 +1,7 @@
|
||||
import Foundation
|
||||
import Combine
|
||||
|
||||
class Item: ObservableContentItem, Identifiable {
|
||||
|
||||
unowned let content: Content
|
||||
class Item: ChangeObservingItem, Identifiable {
|
||||
|
||||
/// A dummy property to force views to update when properties change
|
||||
@Published
|
||||
@ -12,23 +10,13 @@ class Item: ObservableContentItem, Identifiable {
|
||||
@Published
|
||||
var id: String
|
||||
|
||||
var cancellables = Set<AnyCancellable>()
|
||||
|
||||
init(content: Content, id: String) {
|
||||
self.content = content
|
||||
self.id = id
|
||||
super.init(content: content)
|
||||
|
||||
observeChanges()
|
||||
}
|
||||
|
||||
// MARK: Change observation
|
||||
|
||||
func didChange() {
|
||||
DispatchQueue.main.async {
|
||||
self.changeToggle.toggle()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Paths
|
||||
|
||||
func makeCleanAbsolutePath(_ path: String) -> String {
|
||||
|
@ -6,9 +6,7 @@ import SwiftUI
|
||||
including the title, url path and required resources
|
||||
|
||||
*/
|
||||
final class LocalizedPage: ObservableObject {
|
||||
|
||||
unowned let content: Content
|
||||
final class LocalizedPage: ChangeObservingItem {
|
||||
|
||||
/**
|
||||
The string to use when creating the url for the page.
|
||||
@ -50,13 +48,13 @@ final class LocalizedPage: ObservableObject {
|
||||
originalUrl: String? = nil,
|
||||
linkPreview: LinkPreview = .init(),
|
||||
hideTitle: Bool = false) {
|
||||
self.content = content
|
||||
self.urlString = urlString
|
||||
self.title = title
|
||||
self.lastModified = lastModified
|
||||
self.originalUrl = originalUrl
|
||||
self.linkPreview = linkPreview
|
||||
self.hideTitle = hideTitle
|
||||
super.init(content: content)
|
||||
}
|
||||
|
||||
func isValid(urlComponent: String) -> Bool {
|
||||
|
@ -1,9 +1,7 @@
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
final class LocalizedPost: ObservableObject {
|
||||
|
||||
unowned let content: Content
|
||||
final class LocalizedPost: ChangeObservingItem {
|
||||
|
||||
@Published
|
||||
var title: String?
|
||||
@ -36,7 +34,6 @@ final class LocalizedPost: ObservableObject {
|
||||
labels: [ContentLabel] = [],
|
||||
pageLinkText: String? = nil,
|
||||
linkPreview: LinkPreview = .init()) {
|
||||
self.content = content
|
||||
self.title = title
|
||||
self.text = text
|
||||
self.lastModified = lastModified
|
||||
@ -44,6 +41,7 @@ final class LocalizedPost: ObservableObject {
|
||||
self.labels = labels
|
||||
self.pageLinkText = pageLinkText
|
||||
self.linkPreview = linkPreview
|
||||
super.init(content: content)
|
||||
}
|
||||
|
||||
func contains(_ string: String) -> Bool {
|
||||
|
@ -1,8 +1,6 @@
|
||||
import Foundation
|
||||
|
||||
final class LocalizedTag: ObservableObject {
|
||||
|
||||
unowned let content: Content
|
||||
final class LocalizedTag: ChangeObservingItem {
|
||||
|
||||
@Published
|
||||
var urlComponent: String
|
||||
@ -22,11 +20,11 @@ final class LocalizedTag: ObservableObject {
|
||||
name: String,
|
||||
linkPreview: LinkPreview = .init(),
|
||||
originalUrl: String? = nil) {
|
||||
self.content = content
|
||||
self.urlComponent = urlComponent
|
||||
self.name = name
|
||||
self.linkPreview = linkPreview
|
||||
self.originalUrl = originalUrl
|
||||
super.init(content: content)
|
||||
}
|
||||
|
||||
func isValid(urlComponent: String) -> Bool {
|
||||
|
Reference in New Issue
Block a user