// // LatestRecentlyPlayedAudioViewModel.swift // Bremer // // Created by yhornisse on 2023/08/22. // import Combine import Foundation public final class LatestRecentlyPlayedAudioViewModel : ObservableObject { @Published var result : [Audio] = [] @Published var hasError = false @Published var messageText : String = "" @Published var bremerApiBaseUrl = "" @Published var disposables = [AnyCancellable]() func getAllAudio() { sendApi(url: URL(string: "\(bremerApiBaseUrl)/audio/history" .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!) .sink { completion in switch completion { case .finished: break case .failure(let error): self.hasError = true self.messageText = getApiFailureTextByError(error) self.result = [] } } receiveValue: { (response : AudioApiResponse) in self.result = response.audioList if (self.result.isEmpty) { self.hasError = false self.messageText = "再生する曲がありません" } else { self.hasError = false self.messageText = "" } } .store(in: &disposables) } func updateAudio(slug:String, audioName:String, artistName:String, albumName:String) { sendApi(url: URL(string: "\(bremerApiBaseUrl)/audio/\(slug)" .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)!, httpMethod: "PUT", requestBody: AudioRequest(name: audioName, artist: artistName, album: albumName)) .sink { completion in switch completion { case .finished: break case .failure(let error): self.hasError = true self.messageText = getApiFailureTextByError(error) } } receiveValue: { (response : Any) in self.hasError = false self.messageText = "" } .store(in: &disposables) } }