ntfy-android/app/src/main/java/io/heckel/ntfy/ui/MainViewModel.kt

60 lines
2.2 KiB
Kotlin
Raw Normal View History

2021-10-28 16:04:14 +13:00
package io.heckel.ntfy.ui
2021-12-31 02:23:47 +13:00
import android.content.Context
2022-05-09 12:41:17 +12:00
import android.net.Uri
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
2021-10-30 14:13:58 +13:00
import androidx.lifecycle.viewModelScope
2022-01-19 08:28:48 +13:00
import io.heckel.ntfy.db.*
2021-12-31 02:23:47 +13:00
import io.heckel.ntfy.up.Distributor
2021-10-30 14:13:58 +13:00
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
2021-10-30 14:13:58 +13:00
class SubscriptionsViewModel(private val repository: Repository) : ViewModel() {
fun list(): LiveData<List<Subscription>> {
return repository.getSubscriptionsLiveData()
}
fun listIdsWithInstantStatus(): LiveData<Set<Pair<Long, Boolean>>> {
return repository.getSubscriptionIdsWithInstantStatusLiveData()
2021-11-14 13:26:37 +13:00
}
2021-11-01 08:19:25 +13:00
fun add(subscription: Subscription) = viewModelScope.launch(Dispatchers.IO) {
repository.addSubscription(subscription)
}
2021-12-31 02:23:47 +13:00
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)
2021-11-01 08:19:25 +13:00
repository.removeSubscription(subscriptionId)
2022-05-09 12:41:17 +12:00
if (subscription.icon != null) {
val resolver = context.applicationContext.contentResolver
try {
resolver.delete(Uri.parse(subscription.icon), null, null)
} catch (_: Exception) {
// Don't care
}
}
}
suspend fun get(baseUrl: String, topic: String): Subscription? {
return repository.getSubscription(baseUrl, topic)
}
}
2021-10-30 14:13:58 +13:00
class SubscriptionsViewModelFactory(private val repository: Repository) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
2022-11-19 13:54:32 +13:00
override fun <T : ViewModel> create(modelClass: Class<T>): T =
with(modelClass){
when {
2021-10-30 14:13:58 +13:00
isAssignableFrom(SubscriptionsViewModel::class.java) -> SubscriptionsViewModel(repository) as T
else -> throw IllegalArgumentException("Unknown viewModel class $modelClass")
}
}
}