112 lines
3.0 KiB
Swift
112 lines
3.0 KiB
Swift
import Foundation
|
||
import SwiftUI
|
||
|
||
enum SessionRole {
|
||
case main
|
||
case other
|
||
}
|
||
|
||
enum ToolKind: String, Codable {
|
||
case bash, read, write, edit, attach, other
|
||
}
|
||
|
||
enum ActivityKind: Codable, Equatable {
|
||
case job
|
||
case tool(ToolKind)
|
||
}
|
||
|
||
enum IconState: Equatable {
|
||
case idle
|
||
case workingMain(ActivityKind)
|
||
case workingOther(ActivityKind)
|
||
case overridden(ActivityKind)
|
||
|
||
enum BadgeProminence: Equatable {
|
||
case primary
|
||
case secondary
|
||
case overridden
|
||
}
|
||
|
||
var badgeSymbolName: String {
|
||
switch self.activity {
|
||
case .tool(.bash): "chevron.left.slash.chevron.right"
|
||
case .tool(.read): "doc"
|
||
case .tool(.write): "pencil"
|
||
case .tool(.edit): "pencil.tip"
|
||
case .tool(.attach): "paperclip"
|
||
case .tool(.other), .job: "gearshape.fill"
|
||
}
|
||
}
|
||
|
||
var badgeProminence: BadgeProminence? {
|
||
switch self {
|
||
case .idle: nil
|
||
case .workingMain: .primary
|
||
case .workingOther: .secondary
|
||
case .overridden: .overridden
|
||
}
|
||
}
|
||
|
||
var isWorking: Bool {
|
||
switch self {
|
||
case .idle: false
|
||
default: true
|
||
}
|
||
}
|
||
|
||
private var activity: ActivityKind {
|
||
switch self {
|
||
case let .workingMain(kind),
|
||
let .workingOther(kind),
|
||
let .overridden(kind):
|
||
kind
|
||
case .idle:
|
||
.job
|
||
}
|
||
}
|
||
}
|
||
|
||
enum IconOverrideSelection: String, CaseIterable, Identifiable {
|
||
case system
|
||
case idle
|
||
case mainBash, mainRead, mainWrite, mainEdit, mainOther
|
||
case otherBash, otherRead, otherWrite, otherEdit, otherOther
|
||
|
||
var id: String { self.rawValue }
|
||
|
||
var label: String {
|
||
switch self {
|
||
case .system: "System (auto)"
|
||
case .idle: "Idle"
|
||
case .mainBash: "Working main – bash"
|
||
case .mainRead: "Working main – read"
|
||
case .mainWrite: "Working main – write"
|
||
case .mainEdit: "Working main – edit"
|
||
case .mainOther: "Working main – other"
|
||
case .otherBash: "Working other – bash"
|
||
case .otherRead: "Working other – read"
|
||
case .otherWrite: "Working other – write"
|
||
case .otherEdit: "Working other – edit"
|
||
case .otherOther: "Working other – other"
|
||
}
|
||
}
|
||
|
||
func toIconState() -> IconState {
|
||
let map: (ToolKind) -> ActivityKind = { .tool($0) }
|
||
switch self {
|
||
case .system: return .idle
|
||
case .idle: return .idle
|
||
case .mainBash: return .workingMain(map(.bash))
|
||
case .mainRead: return .workingMain(map(.read))
|
||
case .mainWrite: return .workingMain(map(.write))
|
||
case .mainEdit: return .workingMain(map(.edit))
|
||
case .mainOther: return .workingMain(map(.other))
|
||
case .otherBash: return .workingOther(map(.bash))
|
||
case .otherRead: return .workingOther(map(.read))
|
||
case .otherWrite: return .workingOther(map(.write))
|
||
case .otherEdit: return .workingOther(map(.edit))
|
||
case .otherOther: return .workingOther(map(.other))
|
||
}
|
||
}
|
||
}
|