Add MigratablePreferenceKey protocol
This commit is contained in:
parent
cb5488dcaa
commit
70227a7fa1
|
@ -8,10 +8,10 @@
|
|||
import Foundation
|
||||
import Pachyderm
|
||||
|
||||
struct StatusContentTypeKey: PreferenceKey {
|
||||
struct StatusContentTypeKey: MigratablePreferenceKey {
|
||||
static var defaultValue: StatusContentType { .plain }
|
||||
}
|
||||
|
||||
struct FeatureFlagsKey: PreferenceKey {
|
||||
struct FeatureFlagsKey: MigratablePreferenceKey {
|
||||
static var defaultValue: Set<FeatureFlag> { [] }
|
||||
}
|
||||
|
|
|
@ -8,31 +8,31 @@
|
|||
import Foundation
|
||||
import UIKit
|
||||
|
||||
struct ThemeKey: PreferenceKey {
|
||||
struct ThemeKey: MigratablePreferenceKey {
|
||||
static var defaultValue: Theme { .unspecified }
|
||||
}
|
||||
|
||||
struct AccentColorKey: PreferenceKey {
|
||||
struct AccentColorKey: MigratablePreferenceKey {
|
||||
static var defaultValue: AccentColor { .default }
|
||||
}
|
||||
|
||||
struct AvatarStyleKey: PreferenceKey {
|
||||
struct AvatarStyleKey: MigratablePreferenceKey {
|
||||
static var defaultValue: AvatarStyle { .roundRect }
|
||||
}
|
||||
|
||||
struct LeadingSwipeActionsKey: PreferenceKey {
|
||||
struct LeadingSwipeActionsKey: MigratablePreferenceKey {
|
||||
static var defaultValue: [StatusSwipeAction] { [.favorite, .reblog] }
|
||||
}
|
||||
|
||||
struct TrailingSwipeActionsKey: PreferenceKey {
|
||||
struct TrailingSwipeActionsKey: MigratablePreferenceKey {
|
||||
static var defaultValue: [StatusSwipeAction] { [.reply, .share] }
|
||||
}
|
||||
|
||||
struct WidescreenNavigationModeKey: PreferenceKey {
|
||||
struct WidescreenNavigationModeKey: MigratablePreferenceKey {
|
||||
static var defaultValue: WidescreenNavigationMode { .splitScreen }
|
||||
}
|
||||
|
||||
struct AttachmentBlurModeKey: PreferenceKey {
|
||||
struct AttachmentBlurModeKey: MigratablePreferenceKey {
|
||||
static var defaultValue: AttachmentBlurMode { .useStatusSetting }
|
||||
|
||||
static func didSet(in store: PreferenceStore, newValue: AttachmentBlurMode) {
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
struct OppositeCollapseKeywordsKey: PreferenceKey {
|
||||
struct OppositeCollapseKeywordsKey: MigratablePreferenceKey {
|
||||
static var defaultValue: [String] { [] }
|
||||
}
|
||||
|
||||
struct ConfirmReblogKey: PreferenceKey {
|
||||
struct ConfirmReblogKey: MigratablePreferenceKey {
|
||||
static var defaultValue: Bool {
|
||||
#if os(visionOS)
|
||||
true
|
||||
|
@ -21,11 +21,11 @@ struct ConfirmReblogKey: PreferenceKey {
|
|||
}
|
||||
}
|
||||
|
||||
struct TimelineSyncModeKey: PreferenceKey {
|
||||
struct TimelineSyncModeKey: MigratablePreferenceKey {
|
||||
static var defaultValue: TimelineSyncMode { .icloud }
|
||||
}
|
||||
|
||||
struct InAppSafariKey: PreferenceKey {
|
||||
struct InAppSafariKey: MigratablePreferenceKey {
|
||||
static var defaultValue: Bool {
|
||||
#if targetEnvironment(macCatalyst) || os(visionOS)
|
||||
false
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
struct TrueKey: PreferenceKey {
|
||||
struct TrueKey: MigratablePreferenceKey {
|
||||
static var defaultValue: Bool { true }
|
||||
}
|
||||
|
||||
struct FalseKey: PreferenceKey {
|
||||
struct FalseKey: MigratablePreferenceKey {
|
||||
static var defaultValue: Bool { false }
|
||||
}
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
struct PostVisibilityKey: PreferenceKey {
|
||||
struct PostVisibilityKey: MigratablePreferenceKey {
|
||||
static var defaultValue: PostVisibility { .serverDefault }
|
||||
}
|
||||
|
||||
struct ReplyVisibilityKey: PreferenceKey {
|
||||
struct ReplyVisibilityKey: MigratablePreferenceKey {
|
||||
static var defaultValue: ReplyVisibility { .sameAsPost }
|
||||
}
|
||||
|
||||
struct ContentWarningCopyModeKey: PreferenceKey {
|
||||
struct ContentWarningCopyModeKey: MigratablePreferenceKey {
|
||||
static var defaultValue: ContentWarningCopyMode { .asIs }
|
||||
}
|
||||
|
|
|
@ -7,6 +7,6 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
struct NotificationsModeKey: PreferenceKey {
|
||||
struct NotificationsModeKey: MigratablePreferenceKey {
|
||||
static var defaultValue: NotificationsMode { .allNotifications }
|
||||
}
|
||||
|
|
|
@ -80,13 +80,13 @@ private protocol MigrationProtocol {
|
|||
func migrate(from legacy: LegacyPreferences, to store: PreferenceStore)
|
||||
}
|
||||
|
||||
private struct Migration<Key: PreferenceKey>: MigrationProtocol where Key.Value: Equatable {
|
||||
private struct Migration<Key: MigratablePreferenceKey>: MigrationProtocol where Key.Value: Equatable {
|
||||
let from: KeyPath<LegacyPreferences, Key.Value>
|
||||
let to: KeyPath<PreferenceStore, PreferencePublisher<Key>>
|
||||
|
||||
func migrate(from legacy: LegacyPreferences, to store: PreferenceStore) {
|
||||
let value = legacy[keyPath: from]
|
||||
if value != Key.defaultValue {
|
||||
if Key.shouldMigrate(oldValue: value) {
|
||||
Preference.set(enclosingInstance: store, storage: to.appending(path: \.preference), newValue: value)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,3 +18,13 @@ public protocol PreferenceKey {
|
|||
extension PreferenceKey {
|
||||
static func didSet(in store: PreferenceStore, newValue: Value) {}
|
||||
}
|
||||
|
||||
protocol MigratablePreferenceKey: PreferenceKey where Value: Equatable {
|
||||
static func shouldMigrate(oldValue: Value) -> Bool
|
||||
}
|
||||
|
||||
extension MigratablePreferenceKey {
|
||||
static func shouldMigrate(oldValue: Value) -> Bool {
|
||||
oldValue != defaultValue
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue