Commit e4981120 by Demid Merzlyakov

Settings migration.

parent 571c527f
......@@ -18,6 +18,7 @@
87D815AC2636D61D0015A6D1 /* NWSAlertViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D815AB2636D61D0015A6D1 /* NWSAlertViewModel.swift */; };
87DE8C81263BFBCE00E1C8D4 /* LegacyMigrationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DE8C80263BFBCE00E1C8D4 /* LegacyMigrationManager.swift */; };
87DE8CB2263C09BA00E1C8D4 /* LegacyWdtLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DE8CB1263C09BA00E1C8D4 /* LegacyWdtLocation.swift */; };
87DE8CF4263C267B00E1C8D4 /* LegacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DE8CF3263C267B00E1C8D4 /* LegacySettings.swift */; };
C27F92C189A9C9E637AF6C3A /* Pods_OneWeatherNotificationServiceExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 871EA87D239E6F89F6F8818E /* Pods_OneWeatherNotificationServiceExtension.framework */; };
CD1237C3255D5C5900C98139 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1237C2255D5C5900C98139 /* AppDelegate.swift */; };
CD1237CC255D5C5C00C98139 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD1237CB255D5C5C00C98139 /* Assets.xcassets */; };
......@@ -337,6 +338,7 @@
87D815B22636F2040015A6D1 /* NWSAlertInfoBlockTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NWSAlertInfoBlockTableViewCell.swift; sourceTree = "<group>"; };
87DE8C80263BFBCE00E1C8D4 /* LegacyMigrationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyMigrationManager.swift; sourceTree = "<group>"; };
87DE8CB1263C09BA00E1C8D4 /* LegacyWdtLocation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyWdtLocation.swift; sourceTree = "<group>"; };
87DE8CF3263C267B00E1C8D4 /* LegacySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacySettings.swift; sourceTree = "<group>"; };
C8C576F6184B547435CFF0F3 /* Pods-1Weather.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-1Weather.debug.xcconfig"; path = "Target Support Files/Pods-1Weather/Pods-1Weather.debug.xcconfig"; sourceTree = "<group>"; };
CD1237BF255D5C5900C98139 /* 1Weather.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = 1Weather.app; sourceTree = BUILT_PRODUCTS_DIR; };
CD1237C2255D5C5900C98139 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
......@@ -1584,6 +1586,7 @@
CEE0A178262FA9650044C257 /* DelayedSaveStorage.swift */,
87DE8C80263BFBCE00E1C8D4 /* LegacyMigrationManager.swift */,
87DE8CB1263C09BA00E1C8D4 /* LegacyWdtLocation.swift */,
87DE8CF3263C267B00E1C8D4 /* LegacySettings.swift */,
);
path = Storage;
sourceTree = "<group>";
......@@ -1998,6 +2001,7 @@
CD8B60AE263819400055CB3F /* NWSAlertViewController.swift in Sources */,
CD593BCF2608A50900C93428 /* ForecastHourlyCell.swift in Sources */,
CD6B3036257262C2004B34B3 /* UIColor+Highlight.swift in Sources */,
87DE8CF4263C267B00E1C8D4 /* LegacySettings.swift in Sources */,
CEE0A17B263179E60044C257 /* NWSAlertInfoBlock.swift in Sources */,
CD1DDD332602305200AC62B2 /* ForecastInfoCell.swift in Sources */,
CEDE4E8425EEFD56007457E9 /* WdtDailySummariesArray.swift in Sources */,
......
......@@ -238,6 +238,7 @@ public class LocationManager {
storage.load { (locations, selectedIndex, error) in
if locations?.count ?? 0 == 0 && self.legacyMigrator.migrationNeeded {
self.legacyMigrator.migrateSettings()
self.legacyMigrator.loadLegacyLocations { [weak self] (legacyLocations, migrationError) in
guard let self = self else { return }
guard migrationError == nil else {
......
......@@ -87,6 +87,11 @@ class LegacyMigrationManager {
return true
}
func migrateSettings() {
let legacySettings = LegacySettings()
legacySettings.loadLegacySettings()
}
func loadLegacyLocations(completion: @escaping Completion) {
internalQueue.addOperation { [weak self] in
guard let self = self else { return }
......
//
// LegacySettings.swift
// 1Weather
//
// Created by Demid Merzlyakov on 30.04.2021.
//
import Foundation
// Used in Settings and Widget
enum LegacyTempUnits: Int {
case fahrenheit, celsius
}
enum LegacyDistanceUnits: Int {
case miles, kilometers
}
enum LegacyWindUnits: Int {
case mph, kph, mps, knots, beaufort
}
enum LegacyPressureUnits: Int {
case inches, mb, mmhg, atm, kpa
}
public enum LegacySettingsEnum: String {
case metric
case unitsDistance
case unitsWind
case unitsPressure
static func registerDefaults() {
//log("B commentsLimit: \(UserDefaults.standard.integer(for: .commentsLimit))")
var isLocaleMetric = false
if let num = (Locale.current as NSLocale).object(forKey: NSLocale.Key.usesMetricSystem) {
isLocaleMetric = (num as AnyObject).intValue == 1
print("isMetric \(isLocaleMetric)")
}
UserDefaults.standard.register(defaults: [
//Setting.installedDate.rawValue: Date().getWithFormat("MM dd yyyy"),
LegacySettingsEnum.metric.rawValue: isLocaleMetric,
LegacySettingsEnum.unitsDistance.rawValue: isLocaleMetric ? DistanceUnits.kilometers.rawValue : DistanceUnits.miles.rawValue,
LegacySettingsEnum.unitsWind.rawValue: isLocaleMetric ? WindUnits.kph.rawValue : WindUnits.mph.rawValue,
LegacySettingsEnum.unitsPressure.rawValue: isLocaleMetric ? PressureUnits.mb.rawValue : PressureUnits.inches.rawValue
])
}
}
fileprivate extension UserDefaults {
func bool(for setting: LegacySettingsEnum) -> Bool {
return bool(forKey: setting.rawValue)
}
func set(_ bool: Bool, for setting: LegacySettingsEnum) {
set(bool, forKey: setting.rawValue)
}
func integer(for setting: LegacySettingsEnum) -> Int {
return integer(forKey: setting.rawValue)
}
}
class LegacySettings: NSObject {
func loadLegacySettings() {
LegacySettingsEnum.registerDefaults()
let ud = UserDefaults.standard
let metric = ud.bool(for: .metric)
let distanceUnits = LegacyDistanceUnits(rawValue: ud.integer(for: .unitsDistance))
let windSpeedUnits = LegacyWindUnits(rawValue: ud.integer(for: .unitsWind))
let pressureUnits = LegacyPressureUnits(rawValue: ud.integer(for: .unitsPressure))
let settings = Settings.shared
if metric {
settings.temperatureType = .celsius
}
else {
settings.temperatureType = .fahrenheit
}
if let distanceUnits = distanceUnits {
if distanceUnits == .kilometers {
settings.distanceType = .kilometers
}
else {
settings.distanceType = .miles
}
}
if let windSpeedUnits = windSpeedUnits {
switch windSpeedUnits {
case .mps:
settings.windSpeedType = .metersPerSecond
case .mph:
settings.windSpeedType = .milesPerHour
case .kph:
settings.windSpeedType = .kilometersPerHour
case .knots:
settings.windSpeedType = .knots
case .beaufort:
settings.windSpeedType = metric ? .metersPerSecond : .milesPerHour // TODO: handle this
}
}
if let pressureUnits = pressureUnits {
switch pressureUnits {
case .atm:
settings.pressureType = .atmosphere
case .inches:
settings.pressureType = .inchesOfMercury
case .kpa:
settings.pressureType = .kilopascals
case .mb:
settings.pressureType = .millibars
case .mmhg:
settings.pressureType = .millimetersOfMercury
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment