From 715bd3a6a2c5f15a760b05e4b7f2838bfe4856fd Mon Sep 17 00:00:00 2001 From: Jordan Baird Date: Tue, 9 Jul 2024 05:43:49 -0600 Subject: [PATCH] Hot fix --- Ice/Utilities/Defaults.swift | 1 + Ice/Utilities/MigrationManager.swift | 81 +++++++++++++++++++++++++++- 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/Ice/Utilities/Defaults.swift b/Ice/Utilities/Defaults.swift index d87ea56e..663e6efa 100644 --- a/Ice/Utilities/Defaults.swift +++ b/Ice/Utilities/Defaults.swift @@ -175,6 +175,7 @@ extension Defaults { case hasMigrated0_8_0 = "hasMigrated0_8_0" case hasMigrated0_10_0 = "hasMigrated0_10_0" + case hasMigrated0_10_1 = "hasMigrated0_10_1" // MARK: Deprecated diff --git a/Ice/Utilities/MigrationManager.swift b/Ice/Utilities/MigrationManager.swift index fdb96102..3e4023cc 100644 --- a/Ice/Utilities/MigrationManager.swift +++ b/Ice/Utilities/MigrationManager.swift @@ -3,7 +3,7 @@ // Ice // -import Foundation +import Cocoa import OSLog @MainActor @@ -22,8 +22,27 @@ extension MigrationManager { migrate0_10_0, ]) } catch { - Logger.migration.error("Migration failed with error: \(error)") + logError(error) } + + let results = [ + migrate0_10_1(), + ] + + for result in results { + switch result { + case .success: + break + case .successButShowAlert(let alert): + alert.runModal() + case .failureLoggingError(let error): + logError(error) + } + } + } + + private func logError(_ error: any Error) { + Logger.migration.error("Migration failed with error: \(error)") } } @@ -181,6 +200,54 @@ extension MigrationManager { } } +// MARK: - Migrate 0.10.1 + +extension MigrationManager { + /// Performs all migrations for the `0.10.1` release. + private func migrate0_10_1() -> MigrationResult { + guard !Defaults.bool(forKey: .hasMigrated0_10_1) else { + return .success + } + let result = migrateControlItems0_10_1() + switch result { + case .success, .successButShowAlert: + Defaults.set(true, forKey: .hasMigrated0_10_1) + Logger.migration.info("Successfully migrated to 0.10.1 settings") + case .failureLoggingError: + break + } + return result + } + + private func migrateControlItems0_10_1() -> MigrationResult { + var needsResetPreferredPositions = false + + for identifier in ControlItem.Identifier.allCases { + if + StatusItemDefaults[.isVisible, identifier.rawValue] == false, + StatusItemDefaults[.preferredPosition, identifier.rawValue] == nil + { + needsResetPreferredPositions = true + } + StatusItemDefaults[.isVisible, identifier.rawValue] = nil + } + + if needsResetPreferredPositions { + for identifier in ControlItem.Identifier.allCases { + StatusItemDefaults[.preferredPosition, identifier.rawValue] = nil + } + + let alert = NSAlert() + alert.messageText = "Due to a bug in the 0.10.0 release, the data for Ice's menu bar items was corrupted and their positions had to be reset." + alert.informativeText = "Our sincerest apologies for the inconvenience." + + return .successButShowAlert(alert) + } + + return .success + } +} + // MARK: - Helpers extension MigrationManager { @@ -215,6 +282,16 @@ extension MigrationManager { } } +// MARK: - MigrationResult + +extension MigrationManager { + enum MigrationResult { + case success + case successButShowAlert(NSAlert) + case failureLoggingError(MigrationError) + } +} + // MARK: - MigrationError extension MigrationManager {