mirror of
https://github.com/InsanusMokrassar/PsychomatrixBase.git
synced 2024-06-01 23:45:15 +00:00
51 lines
1.9 KiB
Kotlin
51 lines
1.9 KiB
Kotlin
package com.github.insanusmokrassar.PsychomatrixBase.data.repository.realisations
|
|
|
|
import com.github.insanusmokrassar.PsychomatrixBase.data.repository.HistoryDatesRepository
|
|
import com.github.insanusmokrassar.PsychomatrixBase.domain.UseCases.CalculatePsychomatrixByDate
|
|
import com.github.insanusmokrassar.PsychomatrixBase.utils.extensions.SUBSCRIPTIONS_EXTRA_SMALL
|
|
import com.github.insanusmokrassar.PsychomatrixBase.utils.extensions.subscribe
|
|
import kotlinx.coroutines.experimental.*
|
|
import kotlinx.coroutines.experimental.channels.BroadcastChannel
|
|
import kotlinx.coroutines.experimental.channels.ReceiveChannel
|
|
import org.joda.time.DateTime
|
|
|
|
abstract class HistoryDatesRepositoryImpl(
|
|
calculatePsychomatrixByDate: CalculatePsychomatrixByDate
|
|
) : HistoryDatesRepository {
|
|
private val dateAddedBroadcast = BroadcastChannel<DateTime>(SUBSCRIPTIONS_EXTRA_SMALL)
|
|
private val dateRemovedBroadcast = BroadcastChannel<DateTime>(SUBSCRIPTIONS_EXTRA_SMALL)
|
|
|
|
init {
|
|
runBlocking {
|
|
calculatePsychomatrixByDate.openPsychomatrixCreatedSubscription().subscribe {
|
|
it.date.also {
|
|
date ->
|
|
onDateCalculated(date)
|
|
dateAddedBroadcast.send(date)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
override suspend fun openDateAddedSubscription(): ReceiveChannel<DateTime> {
|
|
return dateAddedBroadcast.openSubscription()
|
|
}
|
|
|
|
override suspend fun openDateRemovedSubscription(): ReceiveChannel<DateTime> {
|
|
return dateRemovedBroadcast.openSubscription()
|
|
}
|
|
|
|
protected abstract fun onDateCalculated(dateTime: DateTime)
|
|
|
|
override suspend fun removeDate(date: DateTime): Deferred<Boolean> {
|
|
return async {
|
|
internalRemoveDate(date).also {
|
|
if (it) {
|
|
dateRemovedBroadcast.send(date)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected abstract fun internalRemoveDate(date: DateTime): Boolean
|
|
} |