package io.heckel.ntfy.ui import android.content.Context import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import io.heckel.ntfy.db.* import io.heckel.ntfy.up.Distributor import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlin.collections.List class SubscriptionsViewModel(private val repository: Repository) : ViewModel() { fun list(): LiveData> { return repository.getSubscriptionsLiveData() } fun listIdsWithInstantStatus(): LiveData>> { return repository.getSubscriptionIdsWithInstantStatusLiveData() } fun add(subscription: Subscription) = viewModelScope.launch(Dispatchers.IO) { repository.addSubscription(subscription) } fun remove(context: Context, subscriptionId: Long) = viewModelScope.launch(Dispatchers.IO) { val subscription = repository.getSubscription(subscriptionId) ?: return@launch if (subscription.upAppId != null && subscription.upConnectorToken != null) { val distributor = Distributor(context) distributor.sendUnregistered(subscription.upAppId, subscription.upConnectorToken) } repository.removeAllNotifications(subscriptionId) repository.removeSubscription(subscriptionId) } suspend fun get(baseUrl: String, topic: String): Subscription? { return repository.getSubscription(baseUrl, topic) } } class SubscriptionsViewModelFactory(private val repository: Repository) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class) = with(modelClass){ when { isAssignableFrom(SubscriptionsViewModel::class.java) -> SubscriptionsViewModel(repository) as T else -> throw IllegalArgumentException("Unknown viewModel class $modelClass") } } }