mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-28 22:08:47 +02:00
Refactor into smaller functions
This commit is contained in:
parent
a29a7669e1
commit
f56561b898
1 changed files with 66 additions and 43 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue