38 lines
827 B
Swift
38 lines
827 B
Swift
//
|
|
// PlaylistsViewModel.swift
|
|
// furumi_macos
|
|
//
|
|
|
|
import Foundation
|
|
import Observation
|
|
|
|
@MainActor
|
|
@Observable
|
|
final class PlaylistsViewModel {
|
|
private(set) var playlists: [PlaylistCard] = []
|
|
private(set) var isLoading = false
|
|
private(set) var error: String?
|
|
private var service: CatalogService
|
|
|
|
init(service: CatalogService) { self.service = service }
|
|
|
|
func reset(service: CatalogService) {
|
|
self.service = service
|
|
playlists = []
|
|
isLoading = false
|
|
error = nil
|
|
}
|
|
|
|
func load() async {
|
|
guard !isLoading else { return }
|
|
isLoading = true
|
|
error = nil
|
|
defer { isLoading = false }
|
|
do {
|
|
playlists = try await service.playlists()
|
|
} catch {
|
|
self.error = error.localizedDescription
|
|
}
|
|
}
|
|
}
|