Loading app/src/main/java/foundation/e/notificationsreceiver/repositories/SubscriptionsRepositoryImpl.kt +25 −0 Original line number Diff line number Diff line Loading @@ -20,20 +20,32 @@ import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.notificationsreceiver.domain.entities.Topic import foundation.e.notificationsreceiver.domain.repositories.SubscriptionsRepository import foundation.e.notificationsreceiver.domain.utils.AppBackgroundScope import io.heckel.ntfy.R import io.heckel.ntfy.db.Database import io.heckel.ntfy.db.Repository import io.heckel.ntfy.db.Subscription import io.heckel.ntfy.db.SubscriptionDao import io.heckel.ntfy.service.SubscriberServiceManager import io.heckel.ntfy.util.randomSubscriptionId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.util.Date import javax.inject.Inject import javax.inject.Singleton @Singleton class SubscriptionsRepositoryImpl @Inject constructor( @ApplicationContext private val appContext: Context, @AppBackgroundScope private val backgroundScope: CoroutineScope, ) : SubscriptionsRepository { companion object { private const val REFRESH_SUBSCRIPTION_DEBOUNCE_PERIOD_MS = 500L } private val subscriptionDao: SubscriptionDao private val repository: Repository Loading @@ -43,6 +55,8 @@ class SubscriptionsRepositoryImpl @Inject constructor( repository = Repository.getInstance(appContext) } private var willRefreshSubscriptionJob: Job? = null override fun getBaseUrl(): String { return repository.getDefaultBaseUrl() ?: appContext.getString(R.string.app_base_url) } Loading Loading @@ -73,9 +87,20 @@ class SubscriptionsRepositoryImpl @Inject constructor( ) subscriptionDao.add(subscription) debouncedRefreshSubscriptions() } override suspend fun unsubscribe(topic: Topic): Unit = withContext(Dispatchers.IO) { subscriptionDao.remove(topic.localId) debouncedRefreshSubscriptions() } private fun debouncedRefreshSubscriptions() { willRefreshSubscriptionJob?.cancel() willRefreshSubscriptionJob = backgroundScope.launch { delay(REFRESH_SUBSCRIPTION_DEBOUNCE_PERIOD_MS) SubscriberServiceManager.refresh(appContext) } } } Loading
app/src/main/java/foundation/e/notificationsreceiver/repositories/SubscriptionsRepositoryImpl.kt +25 −0 Original line number Diff line number Diff line Loading @@ -20,20 +20,32 @@ import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.notificationsreceiver.domain.entities.Topic import foundation.e.notificationsreceiver.domain.repositories.SubscriptionsRepository import foundation.e.notificationsreceiver.domain.utils.AppBackgroundScope import io.heckel.ntfy.R import io.heckel.ntfy.db.Database import io.heckel.ntfy.db.Repository import io.heckel.ntfy.db.Subscription import io.heckel.ntfy.db.SubscriptionDao import io.heckel.ntfy.service.SubscriberServiceManager import io.heckel.ntfy.util.randomSubscriptionId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.util.Date import javax.inject.Inject import javax.inject.Singleton @Singleton class SubscriptionsRepositoryImpl @Inject constructor( @ApplicationContext private val appContext: Context, @AppBackgroundScope private val backgroundScope: CoroutineScope, ) : SubscriptionsRepository { companion object { private const val REFRESH_SUBSCRIPTION_DEBOUNCE_PERIOD_MS = 500L } private val subscriptionDao: SubscriptionDao private val repository: Repository Loading @@ -43,6 +55,8 @@ class SubscriptionsRepositoryImpl @Inject constructor( repository = Repository.getInstance(appContext) } private var willRefreshSubscriptionJob: Job? = null override fun getBaseUrl(): String { return repository.getDefaultBaseUrl() ?: appContext.getString(R.string.app_base_url) } Loading Loading @@ -73,9 +87,20 @@ class SubscriptionsRepositoryImpl @Inject constructor( ) subscriptionDao.add(subscription) debouncedRefreshSubscriptions() } override suspend fun unsubscribe(topic: Topic): Unit = withContext(Dispatchers.IO) { subscriptionDao.remove(topic.localId) debouncedRefreshSubscriptions() } private fun debouncedRefreshSubscriptions() { willRefreshSubscriptionJob?.cancel() willRefreshSubscriptionJob = backgroundScope.launch { delay(REFRESH_SUBSCRIPTION_DEBOUNCE_PERIOD_MS) SubscriberServiceManager.refresh(appContext) } } }