Put audiodownload in its own class (#7)

This commit is contained in:
Nathan Mattes 2023-08-25 12:14:04 +02:00
parent 049af120f4
commit ebbf6a583c
2 changed files with 22 additions and 6 deletions

View File

@ -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)
}
}
}

View File

@ -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)