69 lines
2.1 KiB
Kotlin

package com.shaarit.presentation.deadlinks
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.paging.PagingData
import androidx.paging.cachedIn
import com.shaarit.data.local.dao.LinkDao
import com.shaarit.domain.model.ShaarliLink
import com.shaarit.domain.repository.LinkRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class DeadLinksViewModel @Inject constructor(
private val linkRepository: LinkRepository,
private val linkDao: LinkDao
) : ViewModel() {
val pagedDeadLinks: Flow<PagingData<ShaarliLink>> =
linkRepository.getDeadLinksStream()
.cachedIn(viewModelScope)
private val _selectedLinkIds = MutableStateFlow<Set<Int>>(emptySet())
val selectedLinkIds: StateFlow<Set<Int>> = _selectedLinkIds.asStateFlow()
private val _isSelectionMode = MutableStateFlow(false)
val isSelectionMode: StateFlow<Boolean> = _isSelectionMode.asStateFlow()
fun toggleSelection(linkId: Int) {
_selectedLinkIds.value = if (_selectedLinkIds.value.contains(linkId)) {
_selectedLinkIds.value - linkId
} else {
_selectedLinkIds.value + linkId
}
if (_selectedLinkIds.value.isEmpty()) {
_isSelectionMode.value = false
} else if (!_isSelectionMode.value) {
_isSelectionMode.value = true
}
}
fun clearSelection() {
_selectedLinkIds.value = emptySet()
_isSelectionMode.value = false
}
fun excludeSelectedFromHealthCheck() {
viewModelScope.launch {
val ids = _selectedLinkIds.value.toList()
if (ids.isNotEmpty()) {
linkDao.updateHealthCheckExclusionBatch(ids, true)
clearSelection()
}
}
}
fun deleteLink(id: Int) {
viewModelScope.launch {
linkRepository.deleteLink(id)
}
}
}