mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-19 00:58:54 +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) {
|
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)")
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue