Cross-platform refinements to appearance/battery/charger editors, tabs and navigation, plus persistence, screenshot previews and CLAUDE.md docs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
83 lines
2.8 KiB
Swift
83 lines
2.8 KiB
Swift
import Foundation
|
|
import SwiftData
|
|
|
|
struct ChargerConfiguration: Identifiable, Hashable {
|
|
let id: UUID
|
|
var name: String
|
|
var inputVoltage: Double
|
|
var outputVoltage: Double
|
|
var maxCurrentAmps: Double
|
|
var maxPowerWatts: Double
|
|
var iconName: String
|
|
var colorName: String
|
|
var system: ElectricalSystem
|
|
var powerSourceType: SavedCharger.PowerSourceType
|
|
var componentID: String?
|
|
var remoteIconURLString: String?
|
|
|
|
init(
|
|
id: UUID = UUID(),
|
|
name: String,
|
|
inputVoltage: Double = LocaleDefaults.mainsVoltage,
|
|
outputVoltage: Double = 14.2,
|
|
maxCurrentAmps: Double = 30.0,
|
|
maxPowerWatts: Double = 0.0,
|
|
iconName: String = "bolt.fill",
|
|
colorName: String = "orange",
|
|
system: ElectricalSystem,
|
|
powerSourceType: SavedCharger.PowerSourceType = .shore,
|
|
componentID: String? = nil,
|
|
remoteIconURLString: String? = nil
|
|
) {
|
|
self.id = id
|
|
self.name = name
|
|
self.inputVoltage = inputVoltage
|
|
self.outputVoltage = outputVoltage
|
|
self.maxCurrentAmps = maxCurrentAmps
|
|
self.maxPowerWatts = maxPowerWatts
|
|
self.iconName = iconName
|
|
self.colorName = colorName
|
|
self.system = system
|
|
self.powerSourceType = powerSourceType
|
|
self.componentID = componentID
|
|
self.remoteIconURLString = remoteIconURLString
|
|
}
|
|
|
|
init(savedCharger: SavedCharger, system: ElectricalSystem) {
|
|
self.id = savedCharger.id
|
|
self.name = savedCharger.name
|
|
self.inputVoltage = savedCharger.inputVoltage
|
|
self.outputVoltage = savedCharger.outputVoltage
|
|
self.maxCurrentAmps = savedCharger.maxCurrentAmps
|
|
self.maxPowerWatts = savedCharger.maxPowerWatts
|
|
self.iconName = savedCharger.iconName
|
|
self.colorName = savedCharger.colorName
|
|
self.system = system
|
|
self.powerSourceType = savedCharger.sourceType
|
|
self.componentID = savedCharger.componentID
|
|
self.remoteIconURLString = savedCharger.remoteIconURLString
|
|
}
|
|
|
|
var effectivePowerWatts: Double {
|
|
if maxPowerWatts > 0 {
|
|
return maxPowerWatts
|
|
}
|
|
return outputVoltage * maxCurrentAmps
|
|
}
|
|
|
|
func apply(to savedCharger: SavedCharger) {
|
|
savedCharger.name = name
|
|
savedCharger.inputVoltage = inputVoltage
|
|
savedCharger.outputVoltage = outputVoltage
|
|
savedCharger.maxCurrentAmps = maxCurrentAmps
|
|
savedCharger.maxPowerWatts = maxPowerWatts
|
|
savedCharger.iconName = iconName
|
|
savedCharger.colorName = colorName
|
|
savedCharger.system = system
|
|
savedCharger.powerSourceType = powerSourceType.rawValue
|
|
savedCharger.componentID = componentID
|
|
savedCharger.remoteIconURLString = remoteIconURLString
|
|
savedCharger.timestamp = Date()
|
|
}
|
|
}
|