Don't save in database until download is complete

This commit is contained in:
ronaldheft 2022-08-02 17:32:40 -04:00
parent a7424cc428
commit 37fa931672
2 changed files with 20 additions and 11 deletions

View file

@ -33,18 +33,20 @@ public class AbsDownloader: CAPPlugin {
private func startLibraryItemDownload(item: LibraryItem) { private func startLibraryItemDownload(item: LibraryItem) {
let length = item.media.tracks?.count ?? 0 let length = item.media.tracks?.count ?? 0
if length > 0 { if length > 0 {
let downloadDispatch = DispatchGroup()
let files = item.media.tracks!.enumerated().map { let files = item.media.tracks!.enumerated().map {
position, track -> LocalFile in startLibraryItemTrackDownload(item: item, position: position, track: track) position, track -> LocalFile in startLibraryItemTrackDownload(item: item, position: position, track: track, dispatch: downloadDispatch)
} }
downloadDispatch.notify(queue: .main) {
let localLibraryItem = LocalLibraryItem(item, localUrl: documentsDirectory, server: Store.serverConfig!, files: files) let localLibraryItem = LocalLibraryItem(item, localUrl: self.documentsDirectory, server: Store.serverConfig!, files: files)
Database.shared.saveLocalLibraryItem(localLibraryItem: localLibraryItem) Database.shared.saveLocalLibraryItem(localLibraryItem: localLibraryItem)
}
} else { } else {
NSLog("No audio tracks for the supplied library item") NSLog("No audio tracks for the supplied library item")
} }
} }
private func startLibraryItemTrackDownload(item: LibraryItem, position: Int, track: AudioTrack) -> LocalFile { private func startLibraryItemTrackDownload(item: LibraryItem, position: Int, track: AudioTrack, dispatch: DispatchGroup) -> LocalFile {
NSLog("TRACK \(track.contentUrl!)") NSLog("TRACK \(track.contentUrl!)")
// If we don't name metadata, then we can't proceed // If we don't name metadata, then we can't proceed
@ -57,7 +59,7 @@ public class AbsDownloader: CAPPlugin {
let itemDirectory = createLibraryItemFileDirectory(item: item) let itemDirectory = createLibraryItemFileDirectory(item: item)
let localUrl = itemDirectory.appendingPathComponent("\(filename)") let localUrl = itemDirectory.appendingPathComponent("\(filename)")
downloadTrack(serverUrl: serverUrl, localUrl: localUrl) downloadTrack(serverUrl: serverUrl, localUrl: localUrl, dispatch: dispatch)
return LocalFile(item.id, filename, track.mimeType, localUrl) return LocalFile(item.id, filename, track.mimeType, localUrl)
} }
@ -83,10 +85,15 @@ public class AbsDownloader: CAPPlugin {
return itemDirectory return itemDirectory
} }
private func downloadTrack(serverUrl: URL, localUrl: URL) { private func downloadTrack(serverUrl: URL, localUrl: URL, dispatch: DispatchGroup) {
let downloadTask = URLSession.shared.downloadTask(with: serverUrl) { urlOrNil, responseOrNil, errorOrNil in dispatch.enter()
guard let fileURL = urlOrNil else { return } let downloadTask = URLSession.shared.downloadTask(with: serverUrl) { urlOrNil, responseOrNil, errorOrNil in
defer { dispatch.leave() }
guard let fileURL = urlOrNil else {
return
}
do { do {
NSLog("Download TMP file URL \(fileURL)") NSLog("Download TMP file URL \(fileURL)")

View file

@ -76,9 +76,11 @@ class Database {
} }
} }
private func setLastActiveConfigIndexToNil() { public func setLastActiveConfigIndexToNil() {
Database.realmQueue.sync {
setLastActiveConfigIndex(index: nil) setLastActiveConfigIndex(index: nil)
} }
}
private func setLastActiveConfigIndex(index: Int?) { private func setLastActiveConfigIndex(index: Int?) {
do { do {