mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-05-11 21:55:04 +00:00
6a2f2a512f
* ios: UI to export/import/delete chat database * move files * ui for database migration * migration screen layout * ios: export archive and delete chat database * import archive * refactor, update texts * database migration (almost works) * fix missing import * delete legacy database * update migration errors
108 lines
2.6 KiB
Swift
108 lines
2.6 KiB
Swift
//
|
|
// GroupDefaults.swift
|
|
// SimpleX (iOS)
|
|
//
|
|
// Created by Evgeny on 26/04/2022.
|
|
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftUI
|
|
|
|
let GROUP_DEFAULT_APP_STATE = "appState"
|
|
let GROUP_DEFAULT_DB_CONTAINER = "dbContainer"
|
|
public let GROUP_DEFAULT_CHAT_LAST_START = "chatLastStart"
|
|
|
|
let APP_GROUP_NAME = "group.chat.simplex.app"
|
|
|
|
public let groupDefaults = UserDefaults(suiteName: APP_GROUP_NAME)!
|
|
|
|
public enum AppState: String {
|
|
case active
|
|
case pausing
|
|
case paused
|
|
case suspending
|
|
case suspended
|
|
|
|
public init(appPhase: AgentPhase) {
|
|
switch appPhase {
|
|
case .active: self = .active
|
|
case .paused: self = .paused
|
|
case .suspended: self = .suspended
|
|
}
|
|
}
|
|
|
|
public var running: Bool {
|
|
switch self {
|
|
case .paused: return false
|
|
case .suspending: return false
|
|
case .suspended: return false
|
|
default: return true
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum DBContainer: String {
|
|
case documents
|
|
case group
|
|
}
|
|
|
|
public let appStateGroupDefault = EnumDefault<AppState>(
|
|
defaults: groupDefaults,
|
|
forKey: GROUP_DEFAULT_APP_STATE,
|
|
withDefault: .active
|
|
)
|
|
|
|
public let dbContainerGroupDefault = EnumDefault<DBContainer>(
|
|
defaults: groupDefaults,
|
|
forKey: GROUP_DEFAULT_DB_CONTAINER,
|
|
withDefault: .documents
|
|
)
|
|
|
|
public let chatLastStartGroupDefault = DateDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_CHAT_LAST_START)
|
|
|
|
public class DateDefault {
|
|
var defaults: UserDefaults
|
|
var key: String
|
|
|
|
public init(defaults: UserDefaults = UserDefaults.standard, forKey: String) {
|
|
self.defaults = defaults
|
|
self.key = forKey
|
|
}
|
|
|
|
public func get() -> Date {
|
|
let ts = defaults.double(forKey: key)
|
|
return Date(timeIntervalSince1970: ts)
|
|
}
|
|
|
|
public func set(_ ts: Date) {
|
|
defaults.set(ts.timeIntervalSince1970, forKey: key)
|
|
defaults.synchronize()
|
|
}
|
|
}
|
|
|
|
public class EnumDefault<T: RawRepresentable> where T.RawValue == String {
|
|
var defaults: UserDefaults
|
|
var key: String
|
|
var defaultValue: T
|
|
|
|
public init(defaults: UserDefaults = UserDefaults.standard, forKey: String, withDefault: T) {
|
|
self.defaults = defaults
|
|
self.key = forKey
|
|
self.defaultValue = withDefault
|
|
}
|
|
|
|
public func get() -> T {
|
|
if let rawValue = defaults.string(forKey: key),
|
|
let value = T(rawValue: rawValue) {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
public func set(_ value: T) {
|
|
defaults.set(value.rawValue, forKey: key)
|
|
defaults.synchronize()
|
|
}
|
|
}
|