broken changes

This commit is contained in:
Mark Gregory
2026-11-05 12:19:00 +00:00
parent 2ac7619ee1
commit 528e10b43a
3 changed files with 22 additions and 6 deletions
+16 -5
View File
@@ -65,7 +65,9 @@ struct SongDragReference: Codable, Sendable {
@Published var activeSection = "Library"
@Published var studio = StudioSettings() { didSet { applyStudioSettings(save:true,previous:oldValue) } }
let backgroundDeck = BackgroundDeck()
#if KJMIX_DJ_CONSOLE
let dj = DJSystem()
#endif
var backgroundAutomationReady = false
var backgroundPlaybackObserver: AnyCancellable?
var backgroundHandoff: Task<Void,Never>?
@@ -717,8 +719,7 @@ struct LibraryView: View {
}
private var selectedSong: Song? { model.songs.first { $0.id == selected } }
private var workspace: some View {
VSplitView {
private var libraryWorkspace: some View {
HSplitView {
sidebar.frame(minWidth:220,idealWidth:240,maxWidth:260)
VStack(spacing:0) {
@@ -754,9 +755,19 @@ struct LibraryView: View {
footer.padding(.horizontal,18).padding(.vertical,8)
}.frame(minWidth:780)
}
.frame(minHeight:400)
DJConsole(model:model,system:model.dj).frame(minHeight:400,idealHeight:470)
}
@ViewBuilder private var workspaceLayout: some View {
#if KJMIX_DJ_CONSOLE
VSplitView {
libraryWorkspace.frame(minHeight:400)
DJConsole(model:model,system:model.dj).frame(minHeight:400,idealHeight:470)
}
#else
libraryWorkspace
#endif
}
private var workspace: some View {
workspaceLayout
.background(StudioTheme.frame)
.tint(.accentColor)
.focusedSceneValue(\.nameReinterpretation,NameReinterpretationCommands(perform:{beginReinterpretation()},enabled:["Library","Singer Songs"].contains(source) && (selectedSong != nil || !tableSelection.isEmpty)))
@@ -1016,7 +1027,7 @@ struct LibraryView: View {
}.width(65)
TableColumn("Tempo") { song in
Picker("Tempo",selection:Binding(get:{model.tuningForControls(song.id).tempo},set:{model.updateTuning(song.id,tempo:$0)})) {
ForEach(10..<31) { Text("\($0*5)%").tag(Double($0)/20) }
ForEach(50...150,id:\.self) { Text("\($0)%").tag(Double($0)/100) }
}.labelsHidden().controlSize(.small)
}.width(78)
TableColumn("Rating",value:\Song.rating) { song in
+4
View File
@@ -160,3 +160,7 @@ See [the Reinterpret Names guide](docs/REINTERPRETING.md) for folder templates,
## Live tuning and library pages
Key and Tempo controls beside the main transport adjust the loaded performance immediately. Changes save to the performing singer and song, even while browsing another singer or track. With no assigned performer, live changes are temporary. The library shows 20 songs per page; search and sorting cover the entire library, and Next Song can cross page boundaries.
### Optional DJ console development
The pending `DJSystem` / `DJConsole` integration is retained behind `KJMIX_DJ_CONSOLE`. Default Debug and Release builds compile the working karaoke interface. Add the missing console implementation to the target before enabling that Active Compilation Condition.
+2 -1
View File
@@ -2,10 +2,11 @@
Verified on 5 November 2026.
- Debug build was also verified with `xcodebuild` in the normal `build` directory. Unfinished DJSystem/DJConsole references added during this work are retained behind the optional KJMIX_DJ_CONSOLE compilation condition, restoring the default build without deleting that pending integration.
- Dedicated live Key and Tempo controls beside the main transport identify the performing singer. Both the existing detail controls and a loaded song’s inline tuning controls route live changes to the same performance. Audio effect parameters change without restarting playback.
- Live changes save only to the performing singer/song pair, using playbackSinger rather than the singer being browsed. Other singers, other songs, global defaults and the singer’s saved rating are preserved. Without an assigned performer, adjustments are temporary.
- Library results are paginated at 20 songs per page, with first/previous/next/last controls, page count and matching-song range. Search and sorting operate before pagination. Filtering/sorting resets the page; page navigation clears row selection; Next Song traverses all filtered results and follows the appropriate page. Generate All Library Waveforms continues to use the full library.
- 105 XCTest cases passed, zero failures (`/tmp/kjmix-live-pages-final-tests.log`). New cases exercise live playback while browsing another singer, persistence and rating isolation, inline/live routing, temporary unassigned tuning, invalid values and first/middle/last/empty/filtered page boundaries. Prior native UI, import, playback, rotation, metadata and storage tests passed.
- 105 XCTest cases passed, zero failures (`/tmp/kjmix-live-pages-buildfix-tests.log`). New cases exercise live playback while browsing another singer, persistence and rating isolation, inline/live routing, temporary unassigned tuning, invalid values and first/middle/last/empty/filtered page boundaries. Prior native UI, import, playback, rotation, metadata and storage tests passed.
- The library was rendered at 1320 × 900 with 45 isolated demo entries. The performing singer’s +3 key/95% tempo remained visible while another singer was selected; pagination displayed songs 1–20 and Page 1 of 3.
- Release signing, Apple notarization, stapling and Gatekeeper results are stored under `build-release/release-verification/KJMixPro-0.6.9-macOS/`. Only the current DMG is retained in `dist`.