Files
Kisani/Features/Backup/BackupViewModel.swift

47 lines
1.6 KiB
Swift
Raw Normal View History

import Foundation
import Photos
@MainActor
final class BackupViewModel: ObservableObject {
@Published var totalPhotoCount: Int = 0
@Published var alreadySafeCount: Int = 0
@Published var notBackedUpCount: Int = 0
@Published var photosAuthStatus: PHAuthorizationStatus = PHPhotoLibrary.authorizationStatus(for: .readWrite)
private let photoService = PhotoLibraryService()
private var fetchedAssets: [PhotoAsset] = []
func loadPhotoCount(filter: BackupFilter) {
let assets = photoService.fetchAssets(filter: filter)
fetchedAssets = assets
totalPhotoCount = assets.count
// Conservative initial state until NAS scan completes
alreadySafeCount = 0
notBackedUpCount = assets.count
}
// Called after NAS directory listing loads.
// Matches by lowercased filename same heuristic BackupEngine uses for skip checks.
// This gives an accurate pre-scan "Already Safe / Not Backed Up" split before
// the user ever taps Start Backup.
func compareWithNAS(nasItems: [NASItem]) {
let nasFilenames = Set(
nasItems
.filter { !$0.isDirectory }
.map { $0.name.lowercased() }
)
var safe = 0
for asset in fetchedAssets {
if nasFilenames.contains(asset.filename.lowercased()) {
safe += 1
}
}
alreadySafeCount = safe
notBackedUpCount = totalPhotoCount - safe
}
func requestPhotosAccess() async {
photosAuthStatus = await photoService.requestAuthorization()
}
}