ntfy-android/app/src/main/java/io/heckel/ntfy/data/Repository.kt

59 lines
1.8 KiB
Kotlin
Raw Normal View History

2021-10-27 13:34:09 +13:00
package io.heckel.ntfy.data
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
2021-10-27 15:41:19 +13:00
2021-10-27 14:44:12 +13:00
class Repository {
2021-10-28 09:15:59 +13:00
private val subscriptions = mutableListOf<Subscription>()
private val subscriptionsLiveData: MutableLiveData<List<Subscription>> = MutableLiveData(subscriptions)
2021-10-27 13:34:09 +13:00
2021-10-28 09:15:59 +13:00
fun add(subscription: Subscription) {
synchronized(subscriptions) {
subscriptions.add(subscription)
subscriptionsLiveData.postValue(ArrayList(subscriptions)) // Copy!
2021-10-27 15:41:19 +13:00
}
}
fun update(subscription: Subscription?) {
if (subscription == null) {
return
}
2021-10-28 09:15:59 +13:00
synchronized(subscriptions) {
val index = subscriptions.indexOfFirst { it.id == subscription.id } // Find index by Topic ID
if (index == -1) return
subscriptions[index] = subscription
subscriptionsLiveData.postValue(ArrayList(subscriptions)) // Copy!
2021-10-27 13:34:09 +13:00
}
}
2021-10-28 09:15:59 +13:00
fun remove(subscription: Subscription) {
synchronized(subscriptions) {
if (subscriptions.remove(subscription)) {
subscriptionsLiveData.postValue(ArrayList(subscriptions)) // Copy!
2021-10-27 13:34:09 +13:00
}
}
}
2021-10-28 09:15:59 +13:00
fun get(id: Long): Subscription? {
synchronized(subscriptions) {
return subscriptions.firstOrNull { it.id == id } // Find index by Topic ID
2021-10-27 15:56:03 +13:00
}
2021-10-28 09:15:59 +13:00
}
2021-10-27 15:41:19 +13:00
2021-10-28 09:15:59 +13:00
fun list(): LiveData<List<Subscription>> {
return subscriptionsLiveData
2021-10-27 13:34:09 +13:00
}
companion object {
2021-10-27 14:44:12 +13:00
private var instance: Repository? = null
2021-10-27 13:34:09 +13:00
2021-10-27 14:44:12 +13:00
fun getInstance(): Repository {
return synchronized(Repository::class) {
val newInstance = instance ?: Repository()
2021-10-27 13:34:09 +13:00
instance = newInstance
newInstance
}
}
}
}