Refactor into smaller functions

This commit is contained in:
ronaldheft 2022-07-09 15:57:45 -04:00
parent a29a7669e1
commit f56561b898

View file

@ -22,26 +22,50 @@ public class AbsDownloader: CAPPlugin {
call.resolve() call.resolve()
} else { } else {
NSLog("Got library item from server \(libraryItem!.id)") NSLog("Got library item from server \(libraryItem!.id)")
self.startLibraryItemDownload(item: libraryItem!)
self.startLibraryItemDownload(libraryItem: libraryItem!)
call.resolve() call.resolve()
} }
} }
} }
func startLibraryItemDownload(libraryItem: LibraryItem) { private func startLibraryItemDownload(item: LibraryItem) {
let length = libraryItem.media.tracks?.count ?? 0 let length = item.media.tracks?.count ?? 0
if length > 0 { if length > 0 {
libraryItem.media.tracks?.enumerated().forEach { position, track in item.media.tracks?.enumerated().forEach { position, track in
NSLog("TRACK \(track.contentUrl!)") startLibraryItemTrackDownload(item: item, position: position, track: track)
// filename needs to be encoded otherwise would just use contentUrl }
let filename = track.metadata?.filename ?? "" } else {
let filenameEncoded = filename.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) NSLog("No audio tracks for the supplied library item")
let urlstr = "\(Store.serverConfig!.address)/s/item/\(libraryItem.id)/\(filenameEncoded ?? "")?token=\(Store.serverConfig!.token)" }
let url = URL(string: urlstr)! }
private func startLibraryItemTrackDownload(item: LibraryItem, position: Int, track: AudioTrack) -> URLSessionDownloadTask? {
NSLog("TRACK \(track.contentUrl!)")
// If we don't name metadata, then we can't proceed
guard let filename = track.metadata?.filename else {
NSLog("No metadata for track, unable to download")
return nil
}
let serverUrl = urlForTrack(item: item, track: track)
let itemDirectory = createLibraryItemFileDirectory(item: item)
let localUrl = itemDirectory.appendingPathComponent("\(filename)")
return downloadTrack(serverUrl: serverUrl, localUrl: localUrl)
}
private func urlForTrack(item: LibraryItem, track: AudioTrack) -> URL {
// filename needs to be encoded otherwise would just use contentUrl
let filenameEncoded = track.metadata?.filename.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
let urlstr = "\(Store.serverConfig!.address)/s/item/\(item.id)/\(filenameEncoded ?? "")?token=\(Store.serverConfig!.token)"
return URL(string: urlstr)!
}
private func createLibraryItemFileDirectory(item: LibraryItem) -> URL {
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let itemDirectory = documentsDirectory.appendingPathComponent("\(libraryItem.id)") let itemDirectory = documentsDirectory.appendingPathComponent("\(item.id)")
NSLog("ITEM DIR \(itemDirectory)") NSLog("ITEM DIR \(itemDirectory)")
// Create library item directory // Create library item directory
@ -51,32 +75,31 @@ public class AbsDownloader: CAPPlugin {
NSLog("Failed to CREATE LI DIRECTORY \(error)") NSLog("Failed to CREATE LI DIRECTORY \(error)")
} }
// Output filename return itemDirectory
let trackFilename = itemDirectory.appendingPathComponent("\(filename)") }
let downloadTask = URLSession.shared.downloadTask(with: url) { urlOrNil, responseOrNil, errorOrNil in private func downloadTrack(serverUrl: URL, localUrl: URL) -> URLSessionDownloadTask {
let downloadTask = URLSession.shared.downloadTask(with: serverUrl) { urlOrNil, responseOrNil, errorOrNil in
guard let fileURL = urlOrNil else { return } guard let fileURL = urlOrNil else { return }
do { do {
NSLog("Download TMP file URL \(fileURL)") NSLog("Download TMP file URL \(fileURL)")
let audioData = try Data(contentsOf:fileURL) let audioData = try Data(contentsOf:fileURL)
try audioData.write(to: trackFilename) try audioData.write(to: localUrl)
NSLog("Download written to \(trackFilename)") NSLog("Download written to \(localUrl)")
} catch { } catch {
NSLog("FILE ERROR: \(error)") NSLog("FILE ERROR: \(error)")
} }
} }
// Start the download
downloadTask.resume() downloadTask.resume()
}
} else { return downloadTask
NSLog("No audio tracks for the supplied library item")
}
// let encoder = JSONEncoder()
// let jsobj = try encoder.encode(Download)
// notifyListeners("onItemDownloadComplete", data: jsobj)
} }
} }
struct DownloadItem: Codable { struct DownloadItem: Codable {
var isDownloading = false var isDownloading = false
var progress: Float = 0 var progress: Float = 0