Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d26f3e8b authored by Guillaume Jacquart's avatar Guillaume Jacquart
Browse files

fix:3189: listen to updated subscription on lang change.

parent ff38143c
Loading
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -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
@@ -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)
    }
@@ -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)
        }
    }
}