performance updates now qwith progress on import
This commit is contained in:
@@ -184,6 +184,8 @@ struct DJAudioDevice: Identifiable, Equatable {
|
||||
@Published var songs = [Song]()
|
||||
@Published var playlists = [PersonPlace]()
|
||||
@Published var importProgress: ImportProgress?
|
||||
@Published var lastImportReport: ImportProgress?
|
||||
@Published var importLogVisible = false
|
||||
@Published private(set) var importing = false
|
||||
private var importTask: Task<Void,Never>?
|
||||
private var queuedFileLoads = [(urls:[URL],deck:String,override:Bool,song:Int64?)]()
|
||||
@@ -217,7 +219,7 @@ struct DJAudioDevice: Identifiable, Equatable {
|
||||
func dragReference(_ song: Int64) -> SongDragReference { .init(song:song,library:dragSession,singer:nil,venue:nil,fromTonight:false) }
|
||||
func importFiles(_ urls: [URL],loadInto: String? = nil,overridePlaying: Bool = false) {
|
||||
guard !importing,!urls.isEmpty else { return }
|
||||
importing = true;importProgress = .init()
|
||||
importing = true;importProgress = .init();importLogVisible = true
|
||||
let database = root.appendingPathComponent("Library.sqlite"),media = root.appendingPathComponent("Media"),replacedSong = loadInto.flatMap{channel($0).song?.id}
|
||||
importTask = Task.detached(priority:.utility) { [weak self] in
|
||||
let access = urls.filter{$0.startAccessingSecurityScopedResource()}
|
||||
@@ -235,8 +237,9 @@ struct DJAudioDevice: Identifiable, Equatable {
|
||||
latest.finished = true;let result = latest,loadedIDs = importedIDs
|
||||
await MainActor.run { [weak self] in
|
||||
guard let self else { return };self.importing = false;self.importTask = nil;self.importProgress = result
|
||||
self.lastImportReport = result
|
||||
self.perform { try self.refresh() }
|
||||
if let failure = result.failure { self.error = failure }
|
||||
if let failure = result.failure { if loadInto != nil,!self.importLogVisible { self.error = failure } }
|
||||
else if let loadInto,let song = self.songs.first(where:{loadedIDs.contains($0.id)}) { self.load(song,into:loadInto,overridePlaying:overridePlaying && self.channel(loadInto).song?.id == replacedSong) }
|
||||
self.continueFileLoads()
|
||||
}
|
||||
@@ -728,8 +731,8 @@ struct DJConsole: View {
|
||||
HStack {
|
||||
Text(progress.current).lineLimit(1);Text("\(progress.completed)/\(progress.total)").monospacedDigit()
|
||||
Spacer()
|
||||
if system.importing { ProgressView().controlSize(.mini);Button("Cancel") { system.cancelImport() } }
|
||||
else { Button("Dismiss") { system.importProgress = nil } }
|
||||
if system.importing { ProgressView().controlSize(.mini);Button("View Progress") { system.importLogVisible = true };Button("Cancel") { system.cancelImport() } }
|
||||
else { Button("View Log") { system.importLogVisible = true };Button("Dismiss") { system.importProgress = nil } }
|
||||
}.font(.caption).controlSize(.mini)
|
||||
}
|
||||
}.padding(14).frame(maxWidth:.infinity,maxHeight:.infinity,alignment:.top)
|
||||
@@ -739,6 +742,12 @@ struct DJConsole: View {
|
||||
Button("Cancel",role:.cancel) { system.cancelReplacement() }
|
||||
Button("Replace & Load",role:.destructive) { system.confirmReplacement(request) }
|
||||
} message: { request in Text("Deck \(request.deck) is playing. Replacing it with \(request.title) stops the current track. Continue?") }
|
||||
.sheet(isPresented:$system.importLogVisible) {
|
||||
if let progress = system.importing ? system.importProgress : system.lastImportReport {
|
||||
ImportProgressPanel(progress:progress,studio:"DJ Studio",cancel:{ system.cancelImport() },close:{ system.importLogVisible = false },background:{ system.importLogVisible = false })
|
||||
.interactiveDismissDisabled(system.importing)
|
||||
}
|
||||
}
|
||||
.sheet(isPresented:$system.cueEditing) { DJCueEditor(system:system) }
|
||||
.sheet(isPresented:Binding(get:{system.loopEditor != nil},set:{if !$0 { system.loopEditor = nil }})) { let deck = system.channel(system.loopEditor ?? "A");DJLoopEditor(player:deck.player,letter:deck.letter) }
|
||||
.sheet(isPresented:$playlistEditor) { playlistSheet }
|
||||
|
||||
Reference in New Issue
Block a user