From 37fa9316729473f58ddd76e6b47ab9916a0c2ec3 Mon Sep 17 00:00:00 2001 From: ronaldheft Date: Tue, 2 Aug 2022 17:32:40 -0400 Subject: [PATCH] Don't save in database until download is complete --- ios/App/App/plugins/AbsDownloader.swift | 25 ++++++++++++++++--------- ios/App/Shared/util/Database.swift | 6 ++++-- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/ios/App/App/plugins/AbsDownloader.swift b/ios/App/App/plugins/AbsDownloader.swift index 37cd92c2..b7f4f3a3 100644 --- a/ios/App/App/plugins/AbsDownloader.swift +++ b/ios/App/App/plugins/AbsDownloader.swift @@ -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) + } + downloadDispatch.notify(queue: .main) { + let localLibraryItem = LocalLibraryItem(item, localUrl: self.documentsDirectory, server: Store.serverConfig!, files: files) + Database.shared.saveLocalLibraryItem(localLibraryItem: localLibraryItem) } - - let localLibraryItem = LocalLibraryItem(item, localUrl: 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) { + private func downloadTrack(serverUrl: URL, localUrl: URL, dispatch: DispatchGroup) { + dispatch.enter() + let downloadTask = URLSession.shared.downloadTask(with: serverUrl) { urlOrNil, responseOrNil, errorOrNil in - - guard let fileURL = urlOrNil else { return } + defer { dispatch.leave() } + + guard let fileURL = urlOrNil else { + return + } do { NSLog("Download TMP file URL \(fileURL)") diff --git a/ios/App/Shared/util/Database.swift b/ios/App/Shared/util/Database.swift index fac3f342..1dcdaf6a 100644 --- a/ios/App/Shared/util/Database.swift +++ b/ios/App/Shared/util/Database.swift @@ -76,8 +76,10 @@ class Database { } } - private func setLastActiveConfigIndexToNil() { - setLastActiveConfigIndex(index: nil) + public func setLastActiveConfigIndexToNil() { + Database.realmQueue.sync { + setLastActiveConfigIndex(index: nil) + } } private func setLastActiveConfigIndex(index: Int?) {