spiegel-keyman/mac/Config/Installation/InstallationTask.swift
Shawn Schantz ddabddd720
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
feat(mac): repair installation support
created installation task list instead of incrementing state
2026-06-05 18:12:50 -04:00

59 lines
1.9 KiB
Swift

/*
* Keyman is copyright (C) SIL Global. MIT License.
*
* Created by Shawn Schantz on 2026-06-01
*
* Class for tracking the state of a single installation task.
* Includes functions for mapping to a Dictionary to store in the UserDefaults.
*/
import Foundation
import KeymanSettings
// String raw value for each task type is used as key for Dictionary
// when storing the task state in the UserDefaults
public enum InstallationTaskType: String {
case verifyInputMethod = "verify" // verify the new input method was installed
case migrateData = "migrateData" // only called for new install
case enableInputMethod = "enableInputMethod" // triggers register and enable
case requestAccess = "requestAccess" // causes prompt to user to grant Accessibility
case restartMac = "restartMac" // prompts user to restart machine
}
public struct InstallationTask: Hashable, Equatable {
public let taskType: InstallationTaskType
public let isComplete: Bool
/**
* Hashable conformance based on taskType
*/
public func hash(into hasher: inout Hasher) {
hasher.combine(taskType)
}
/**
* Hashable conformance based on taskType
*/
public static func == (lhs: InstallationTask, rhs: InstallationTask) -> Bool {
return lhs.taskType == rhs.taskType
}
/**
* Create new InstallationTask: `completed` set to `false`
*/
static func createNewInstallationTask(type: InstallationTaskType) -> InstallationTask {
return InstallationTask(task: type, completed: false)
}
/**
* Create InstallationTask with `completed` set to `true`
*/
static func createCompletedInstallationTask(type: InstallationTaskType) -> InstallationTask {
return InstallationTask(task: type, completed: true)
}
init(task: InstallationTaskType, completed: Bool) {
self.taskType = task
self.isComplete = completed
}
}