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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-28 09:15:59 +13:00
|
|
|
fun update(subscription: Subscription) {
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|