Files
luma/Sources/LumaCore/Models/SessionUIState.swift
Ole André Vadla Ravnås b2e1849901 Collapse the modules sidebar group by default
Match threads; both groups start collapsed. A stored expansion
state is still honored.
2026-06-27 23:55:55 +02:00

75 lines
2.7 KiB
Swift

import Foundation
import GRDB
public enum SidebarExpansion: String, Codable, Sendable {
case expanded
case collapsed
}
public enum SessionSidebarGroup: Sendable {
case modules
case threads
}
public struct SessionUIState: Codable, Equatable, Identifiable, Sendable, FetchableRecord, PersistableRecord {
public static let databaseTableName = "session_ui_state"
public var sessionID: UUID
public var sidebarExpansion: SidebarExpansion
public var modulesExpansion: SidebarExpansion
public var threadsExpansion: SidebarExpansion
public var collapsedHookInstruments: Set<UUID>
public var detailSection: String?
public var lastSelectedModuleID: String?
public var lastSelectedThreadID: UInt?
public var ambientMissionID: UUID?
public var replLanguage: REPLLanguage
public var replDraft: String?
public var replSeekAnchor: AddressAnchor?
public var id: UUID { sessionID }
enum CodingKeys: String, CodingKey {
case sessionID = "session_id"
case sidebarExpansion = "sidebar_expansion"
case modulesExpansion = "modules_expansion"
case threadsExpansion = "threads_expansion"
case collapsedHookInstruments = "collapsed_hook_instruments"
case detailSection = "detail_section"
case lastSelectedModuleID = "last_selected_module_id"
case lastSelectedThreadID = "last_selected_thread_id"
case ambientMissionID = "ambient_mission_id"
case replLanguage = "repl_language"
case replDraft = "repl_draft"
case replSeekAnchor = "repl_seek_anchor"
}
public init(
sessionID: UUID,
sidebarExpansion: SidebarExpansion = .expanded,
modulesExpansion: SidebarExpansion = .collapsed,
threadsExpansion: SidebarExpansion = .collapsed,
collapsedHookInstruments: Set<UUID> = [],
detailSection: String? = nil,
lastSelectedModuleID: String? = nil,
lastSelectedThreadID: UInt? = nil,
ambientMissionID: UUID? = nil,
replLanguage: REPLLanguage = .javascript,
replDraft: String? = nil,
replSeekAnchor: AddressAnchor? = nil
) {
self.sessionID = sessionID
self.sidebarExpansion = sidebarExpansion
self.modulesExpansion = modulesExpansion
self.threadsExpansion = threadsExpansion
self.collapsedHookInstruments = collapsedHookInstruments
self.detailSection = detailSection
self.lastSelectedModuleID = lastSelectedModuleID
self.lastSelectedThreadID = lastSelectedThreadID
self.ambientMissionID = ambientMissionID
self.replLanguage = replLanguage
self.replDraft = replDraft
self.replSeekAnchor = replSeekAnchor
}
}