48 lines
1.2 KiB
Swift
48 lines
1.2 KiB
Swift
//
|
|
// ActivityViewModel.swift
|
|
// WatchRunner Watch App
|
|
//
|
|
// Created by LittleSheep on 2025/10/29.
|
|
//
|
|
|
|
import Foundation
|
|
import Combine
|
|
|
|
// MARK: - View Models
|
|
|
|
@MainActor
|
|
class ActivityViewModel: ObservableObject {
|
|
@Published var activities: [SnActivity] = []
|
|
@Published var isLoading = false
|
|
@Published var errorMessage: String?
|
|
|
|
private let networkService = NetworkService()
|
|
let filter: String
|
|
private var isMock = false
|
|
|
|
init(filter: String, mockActivities: [SnActivity]? = nil) {
|
|
self.filter = filter
|
|
if let mockActivities = mockActivities {
|
|
self.activities = mockActivities
|
|
self.isMock = true
|
|
}
|
|
}
|
|
|
|
func fetchActivities(token: String, serverUrl: String) async {
|
|
if isMock { return }
|
|
guard !isLoading else { return }
|
|
isLoading = true
|
|
errorMessage = nil
|
|
|
|
do {
|
|
let fetchedActivities = try await networkService.fetchActivities(filter: filter, token: token, serverUrl: serverUrl)
|
|
self.activities = fetchedActivities
|
|
} catch {
|
|
self.errorMessage = error.localizedDescription
|
|
print("[watchOS] fetchActivities failed with error: \(error)")
|
|
}
|
|
|
|
isLoading = false
|
|
}
|
|
}
|