Put audiodownload in its own class (#7)
This commit is contained in:
parent
049af120f4
commit
ebbf6a583c
|
@ -8,5 +8,20 @@
|
|||
import Foundation
|
||||
|
||||
class AudioDownloader {
|
||||
//TODO: Implement
|
||||
|
||||
let fileManager: FileManager
|
||||
let apiClient: APIClient
|
||||
|
||||
init(fileManager: FileManager = .default, apiClient: APIClient) {
|
||||
self.fileManager = fileManager
|
||||
self.apiClient = apiClient
|
||||
}
|
||||
|
||||
func downloadAudioFile(for track: Track) async throws {
|
||||
let url = try fileManager.url(for: track)
|
||||
if fileManager.fileExists(atPath: url.path()) == false {
|
||||
let data = try await apiClient.downloadTrack(for: track)
|
||||
try fileManager.store(data: data, track: track)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ class AppCoordinator: Coordinator {
|
|||
let branding: Branding
|
||||
|
||||
let audioPlayer: AudioPlayer
|
||||
let audioDownloader: AudioDownloader
|
||||
var currentDownloadTask: Task<Void, Never>?
|
||||
|
||||
init(window: UIWindow, fileManager: FileManager = .default, audioPlayer: AudioPlayer = .shared) {
|
||||
|
@ -42,6 +43,7 @@ class AppCoordinator: Coordinator {
|
|||
self.branding = Branding.shared
|
||||
self.audioPlayer = audioPlayer
|
||||
|
||||
|
||||
keychain = Keychain(service: "pinniped")
|
||||
|
||||
let baseURL: URL?
|
||||
|
@ -55,6 +57,8 @@ class AppCoordinator: Coordinator {
|
|||
|
||||
artistsCoordinator = ArtistsCoordinator(apiClient: apiClient, keychain: keychain)
|
||||
albumsCoordinator = AlbumsCoordinator(apiClient: apiClient, keychain: keychain)
|
||||
|
||||
audioDownloader = AudioDownloader(fileManager: fileManager, apiClient: apiClient)
|
||||
}
|
||||
|
||||
func start() {
|
||||
|
@ -110,11 +114,8 @@ extension AppCoordinator: AlbumsCoordinatorDelegate {
|
|||
|
||||
let download = Task {
|
||||
do {
|
||||
let url = try fileManager.url(for: track)
|
||||
if fileManager.fileExists(atPath: url.path()) == false {
|
||||
let data = try await apiClient.downloadTrack(for: track)
|
||||
try fileManager.store(data: data, track: track)
|
||||
}
|
||||
|
||||
try await audioDownloader.downloadAudioFile(for: track)
|
||||
|
||||
_ = await MainActor.run {
|
||||
audioPlayer.play(track: track, from: album, trackList: trackList)
|
||||
|
|
Loading…
Reference in New Issue