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) {
let length = item.media.tracks?.count ?? 0
if length > 0 {
let downloadDispatch = DispatchGroup()
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)
}
let localLibraryItem = LocalLibraryItem(item, localUrl: documentsDirectory, server: Store.serverConfig!, files: files)
downloadDispatch.notify(queue: .main) {
let localLibraryItem = LocalLibraryItem(item, localUrl: self.documentsDirectory, server: Store.serverConfig!, files: files)
Database.shared.saveLocalLibraryItem(localLibraryItem: localLibraryItem)
}
} else {
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!)")
// 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 localUrl = itemDirectory.appendingPathComponent("\(filename)")
downloadTrack(serverUrl: serverUrl, localUrl: localUrl)
downloadTrack(serverUrl: serverUrl, localUrl: localUrl, dispatch: dispatch)
return LocalFile(item.id, filename, track.mimeType, localUrl)
}
@ -83,10 +85,15 @@ public class AbsDownloader: CAPPlugin {
return itemDirectory
}
private func downloadTrack(serverUrl: URL, localUrl: URL) {
let downloadTask = URLSession.shared.downloadTask(with: serverUrl) { urlOrNil, responseOrNil, errorOrNil in
private func downloadTrack(serverUrl: URL, localUrl: URL, dispatch: DispatchGroup) {
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 {
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)
}
}
private func setLastActiveConfigIndex(index: Int?) {
do {