69 lines
2.1 KiB
Kotlin
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)
|
|
}
|
|
}
|
|
}
|