mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-24 11:35:45 +02:00
Don't save in database until download is complete
This commit is contained in:
parent
a7424cc428
commit
37fa931672
2 changed files with 20 additions and 11 deletions
|
@ -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)")
|
||||
|
|
|
@ -76,9 +76,11 @@ class Database {
|
|||
}
|
||||
}
|
||||
|
||||
private func setLastActiveConfigIndexToNil() {
|
||||
public func setLastActiveConfigIndexToNil() {
|
||||
Database.realmQueue.sync {
|
||||
setLastActiveConfigIndex(index: nil)
|
||||
}
|
||||
}
|
||||
|
||||
private func setLastActiveConfigIndex(index: Int?) {
|
||||
do {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue