Files
SyncFlow/app/src/main/kotlin/com/syncflow/ui/pairdetail/PairDetailViewModel.kt
T
amir d6220b7bd7 fix: add edit button, bypass constraints on manual sync
- Add Edit icon to PairDetailScreen top bar
- Wire onEdit callback through NavGraph to AddPairScreen with pairId
- Manual "Sync now" (home card + detail screen) now ignores wifiOnly
  and chargingOnly constraints so it runs immediately on tap

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 23:32:46 +00:00

48 lines
1.6 KiB
Kotlin

package com.syncflow.ui.pairdetail
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.work.WorkManager
import com.syncflow.data.db.SyncConflictDao
import com.syncflow.data.db.SyncEventDao
import com.syncflow.data.db.SyncPairDao
import com.syncflow.worker.SyncWorker
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class PairDetailViewModel @Inject constructor(
private val syncPairDao: SyncPairDao,
private val eventDao: SyncEventDao,
private val conflictDao: SyncConflictDao,
private val workManager: WorkManager,
savedState: SavedStateHandle,
) : ViewModel() {
private val pairId = savedState.get<Long>("pairId")!!
val pair = syncPairDao.observeById(pairId)
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), null)
val events = eventDao.observeRecent(pairId)
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList())
val unresolvedConflicts = conflictDao.observeUnresolvedCount(pairId)
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), 0)
fun syncNow() {
val p = pair.value ?: return
workManager.enqueue(SyncWorker.buildOneTimeRequest(p.id, wifiOnly = false, chargingOnly = false))
}
fun delete() {
viewModelScope.launch {
pair.value?.let { syncPairDao.delete(it) }
}
}
}