NSCv3: process NSTherapyEvent
This commit is contained in:
parent
88c162e1a1
commit
c2e314bd42
|
@ -5,14 +5,14 @@ import info.nightscout.sdk.localmodel.entry.NsUnits
|
|||
|
||||
data class NSTherapyEvent(
|
||||
override val date: Long,
|
||||
override val device: String?,
|
||||
override val device: String? = null,
|
||||
override val identifier: String?,
|
||||
override val units: NsUnits?,
|
||||
override val srvModified: Long?,
|
||||
override val srvCreated: Long?,
|
||||
override val srvModified: Long? = null,
|
||||
override val srvCreated: Long? = null,
|
||||
override val utcOffset: Long,
|
||||
override val subject: String?,
|
||||
override var isReadOnly: Boolean,
|
||||
override val subject: String? = null,
|
||||
override var isReadOnly: Boolean = false,
|
||||
override val isValid: Boolean,
|
||||
override val eventType: EventType,
|
||||
override val notes: String?,
|
||||
|
@ -35,7 +35,7 @@ data class NSTherapyEvent(
|
|||
|
||||
companion object {
|
||||
|
||||
fun fromString(text: String?) = values().firstOrNull { it.text == text } ?: MANUAL
|
||||
fun fromString(text: String?) = values().firstOrNull { it.text == text }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ data class TherapyEvent(
|
|||
var glucoseUnit: GlucoseUnit,
|
||||
) : TraceableDBEntry, DBEntryWithTimeAndDuration {
|
||||
|
||||
private fun contentEqualsTo(other: TherapyEvent): Boolean =
|
||||
fun contentEqualsTo(other: TherapyEvent): Boolean =
|
||||
isValid == other.isValid &&
|
||||
timestamp == other.timestamp &&
|
||||
utcOffset == other.utcOffset &&
|
||||
|
@ -79,7 +79,7 @@ data class TherapyEvent(
|
|||
|
||||
companion object {
|
||||
|
||||
fun fromString(text: String?) = values().firstOrNull { it.text == text } ?: MANUAL
|
||||
fun fromString(text: String?) = values().firstOrNull { it.text == text }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,6 @@ class TddCalculatorImpl @Inject constructor(
|
|||
}
|
||||
|
||||
override fun calculate(startTime: Long, endTime: Long, allowMissingData: Boolean): TotalDailyDose? {
|
||||
val isWholeDay = (endTime - startTime) >= T.days(1).msecs()
|
||||
val startTimeAligned = startTime - startTime % (5 * 60 * 1000)
|
||||
val endTimeAligned = endTime - endTime % (5 * 60 * 1000)
|
||||
val tdd = TotalDailyDose(timestamp = startTimeAligned)
|
||||
|
|
|
@ -40,6 +40,7 @@ import info.nightscout.plugins.sync.nsclientV3.extensions.toNSEffectiveProfileSw
|
|||
import info.nightscout.plugins.sync.nsclientV3.extensions.toNSProfileSwitch
|
||||
import info.nightscout.plugins.sync.nsclientV3.extensions.toNSTemporaryBasal
|
||||
import info.nightscout.plugins.sync.nsclientV3.extensions.toNSTemporaryTarget
|
||||
import info.nightscout.plugins.sync.nsclientV3.extensions.toNSTherapyEvent
|
||||
import info.nightscout.plugins.sync.nsclientV3.workers.LoadBgWorker
|
||||
import info.nightscout.plugins.sync.nsclientV3.workers.LoadLastModificationWorker
|
||||
import info.nightscout.plugins.sync.nsclientV3.workers.LoadStatusWorker
|
||||
|
@ -327,10 +328,11 @@ class NSClientV3Plugin @Inject constructor(
|
|||
is DataSyncSelector.PairBolus -> dataPair.value.toNSBolus()
|
||||
is DataSyncSelector.PairCarbs -> dataPair.value.toNSCarbs()
|
||||
// is DataSyncSelector.PairBolusCalculatorResult -> dataPair.value.toJson(false, dateUtil, profileFunction)
|
||||
is DataSyncSelector.PairTemporaryTarget -> dataPair.value.toNSTemporaryTarget()
|
||||
is DataSyncSelector.PairTemporaryTarget -> dataPair.value.toNSTemporaryTarget()
|
||||
// is DataSyncSelector.PairFood -> dataPair.value.toJson(false)
|
||||
// is DataSyncSelector.PairGlucoseValue -> dataPair.value.toJson(false, dateUtil)
|
||||
// is DataSyncSelector.PairTherapyEvent -> dataPair.value.toJson(false, dateUtil)
|
||||
is DataSyncSelector.PairTherapyEvent -> dataPair.value.toNSTherapyEvent()
|
||||
|
||||
is DataSyncSelector.PairTemporaryBasal -> {
|
||||
val profile = profileFunction.getProfile(dataPair.value.timestamp)
|
||||
if (profile == null) {
|
||||
|
@ -391,7 +393,15 @@ class NSClientV3Plugin @Inject constructor(
|
|||
}
|
||||
// is DataSyncSelector.PairFood -> dataPair.value.toJson(false)
|
||||
// is DataSyncSelector.PairGlucoseValue -> dataPair.value.toJson(false, dateUtil)
|
||||
// is DataSyncSelector.PairTherapyEvent -> dataPair.value.toJson(false, dateUtil)
|
||||
is DataSyncSelector.PairTherapyEvent -> {
|
||||
if (result.response == 201) { // created
|
||||
dataPair.value.interfaceIDs.nightscoutId = result.identifier
|
||||
storeDataForDb.nsIdTherapyEvents.add(dataPair.value)
|
||||
storeDataForDb.scheduleNsIdUpdate()
|
||||
}
|
||||
dataSyncSelector.confirmLastTherapyEventIdIfGreater(dataPair.id)
|
||||
}
|
||||
|
||||
is DataSyncSelector.PairTemporaryBasal -> {
|
||||
if (result.response == 201) { // created
|
||||
dataPair.value.interfaceIDs.nightscoutId = result.identifier
|
||||
|
|
|
@ -22,47 +22,46 @@ fun NSTherapyEvent.toTherapyEvent(): TherapyEvent =
|
|||
)
|
||||
|
||||
fun EventType.toType(): TherapyEvent.Type =
|
||||
when (this) {
|
||||
EventType.CANNULA_CHANGE -> TherapyEvent.Type.CANNULA_CHANGE
|
||||
EventType.INSULIN_CHANGE -> TherapyEvent.Type.INSULIN_CHANGE
|
||||
EventType.PUMP_BATTERY_CHANGE -> TherapyEvent.Type.PUMP_BATTERY_CHANGE
|
||||
EventType.SENSOR_CHANGE -> TherapyEvent.Type.SENSOR_CHANGE
|
||||
EventType.SENSOR_STARTED -> TherapyEvent.Type.SENSOR_STARTED
|
||||
EventType.SENSOR_STOPPED -> TherapyEvent.Type.SENSOR_STOPPED
|
||||
EventType.FINGER_STICK_BG_VALUE -> TherapyEvent.Type.FINGER_STICK_BG_VALUE
|
||||
EventType.EXERCISE -> TherapyEvent.Type.EXERCISE
|
||||
EventType.ANNOUNCEMENT -> TherapyEvent.Type.ANNOUNCEMENT
|
||||
EventType.QUESTION -> TherapyEvent.Type.QUESTION
|
||||
EventType.NOTE -> TherapyEvent.Type.NOTE
|
||||
EventType.APS_OFFLINE -> TherapyEvent.Type.APS_OFFLINE
|
||||
EventType.DAD_ALERT -> TherapyEvent.Type.DAD_ALERT
|
||||
EventType.NS_MBG -> TherapyEvent.Type.NS_MBG
|
||||
EventType.CARBS_CORRECTION -> TherapyEvent.Type.CARBS_CORRECTION
|
||||
EventType.BOLUS_WIZARD -> TherapyEvent.Type.BOLUS_WIZARD
|
||||
EventType.CORRECTION_BOLUS -> TherapyEvent.Type.CORRECTION_BOLUS
|
||||
EventType.MEAL_BOLUS -> TherapyEvent.Type.MEAL_BOLUS
|
||||
EventType.COMBO_BOLUS -> TherapyEvent.Type.COMBO_BOLUS
|
||||
EventType.TEMPORARY_TARGET -> TherapyEvent.Type.TEMPORARY_TARGET
|
||||
EventType.TEMPORARY_TARGET_CANCEL -> TherapyEvent.Type.TEMPORARY_TARGET_CANCEL
|
||||
EventType.PROFILE_SWITCH -> TherapyEvent.Type.PROFILE_SWITCH
|
||||
EventType.SNACK_BOLUS -> TherapyEvent.Type.SNACK_BOLUS
|
||||
EventType.TEMPORARY_BASAL -> TherapyEvent.Type.TEMPORARY_BASAL
|
||||
EventType.TEMPORARY_BASAL_START -> TherapyEvent.Type.TEMPORARY_BASAL_START
|
||||
EventType.TEMPORARY_BASAL_END -> TherapyEvent.Type.TEMPORARY_BASAL_END
|
||||
EventType.NONE -> TherapyEvent.Type.NONE
|
||||
}
|
||||
TherapyEvent.Type.fromString(this.text)
|
||||
|
||||
fun NSTherapyEvent.MeterType?.toMeterType(): TherapyEvent.MeterType =
|
||||
when (this) {
|
||||
NSTherapyEvent.MeterType.FINGER -> TherapyEvent.MeterType.FINGER
|
||||
NSTherapyEvent.MeterType.SENSOR -> TherapyEvent.MeterType.SENSOR
|
||||
NSTherapyEvent.MeterType.MANUAL -> TherapyEvent.MeterType.MANUAL
|
||||
null -> TherapyEvent.MeterType.MANUAL
|
||||
}
|
||||
fun NSTherapyEvent.MeterType?.toMeterType(): TherapyEvent.MeterType? =
|
||||
TherapyEvent.MeterType.fromString(this?.text)
|
||||
|
||||
fun NsUnits?.toUnits(): TherapyEvent.GlucoseUnit =
|
||||
when (this) {
|
||||
NsUnits.MG_DL -> TherapyEvent.GlucoseUnit.MGDL
|
||||
NsUnits.MMOL_L -> TherapyEvent.GlucoseUnit.MMOL
|
||||
null -> TherapyEvent.GlucoseUnit.MGDL
|
||||
}
|
||||
|
||||
fun TherapyEvent.toNSTherapyEvent(): NSTherapyEvent =
|
||||
NSTherapyEvent(
|
||||
isValid = isValid,
|
||||
date = timestamp,
|
||||
utcOffset = utcOffset,
|
||||
units = glucoseUnit.toUnits(),
|
||||
eventType = type.toType(),
|
||||
notes = note,
|
||||
enteredBy = enteredBy,
|
||||
glucose = glucose,
|
||||
glucoseType = glucoseType.toNSMeterType(),
|
||||
duration = duration,
|
||||
identifier = interfaceIDs.nightscoutId,
|
||||
pumpId = interfaceIDs.pumpId,
|
||||
pumpType = interfaceIDs.pumpType?.name,
|
||||
pumpSerial = interfaceIDs.pumpSerial,
|
||||
endId = interfaceIDs.endId
|
||||
)
|
||||
|
||||
fun TherapyEvent.Type.toType(): EventType =
|
||||
EventType.fromString(this.text)
|
||||
|
||||
fun TherapyEvent.MeterType?.toNSMeterType(): NSTherapyEvent.MeterType? =
|
||||
NSTherapyEvent.MeterType.fromString(this?.text)
|
||||
|
||||
fun TherapyEvent.GlucoseUnit?.toUnits(): NsUnits =
|
||||
when (this) {
|
||||
TherapyEvent.GlucoseUnit.MGDL -> NsUnits.MG_DL
|
||||
TherapyEvent.GlucoseUnit.MMOL -> NsUnits.MMOL_L
|
||||
null -> NsUnits.MG_DL
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
package info.nightscout.plugins.sync.nsclientV3.extensions
|
||||
|
||||
import info.nightscout.androidaps.TestBaseWithProfile
|
||||
import info.nightscout.database.entities.TemporaryTarget
|
||||
import info.nightscout.database.entities.TherapyEvent
|
||||
import info.nightscout.database.entities.embedments.InterfaceIDs
|
||||
import info.nightscout.sdk.localmodel.treatment.NSTherapyEvent
|
||||
import info.nightscout.sdk.mapper.convertToRemoteAndBack
|
||||
import org.junit.jupiter.api.Assertions
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@Suppress("SpellCheckingInspection")
|
||||
internal class TherapyEventExtensionKtTest : TestBaseWithProfile() {
|
||||
|
||||
@Test
|
||||
fun toTherapyEvent() {
|
||||
var therapyEvent = TherapyEvent(
|
||||
timestamp = 10000,
|
||||
isValid = true,
|
||||
type = TherapyEvent.Type.ANNOUNCEMENT,
|
||||
note = "ccccc",
|
||||
enteredBy = "dddd",
|
||||
glucose = 101.0,
|
||||
glucoseType = TherapyEvent.MeterType.FINGER,
|
||||
glucoseUnit = TherapyEvent.GlucoseUnit.MGDL,
|
||||
duration = 3600000,
|
||||
interfaceIDs_backing = InterfaceIDs(
|
||||
nightscoutId = "nightscoutId",
|
||||
pumpId = 11000,
|
||||
pumpType = InterfaceIDs.PumpType.DANA_I,
|
||||
pumpSerial = "bbbb"
|
||||
)
|
||||
)
|
||||
|
||||
var therapyEvent2 = (therapyEvent.toNSTherapyEvent().convertToRemoteAndBack() as NSTherapyEvent).toTherapyEvent()
|
||||
Assertions.assertTrue(therapyEvent.contentEqualsTo(therapyEvent2))
|
||||
Assertions.assertTrue(therapyEvent.interfaceIdsEqualsTo(therapyEvent2))
|
||||
|
||||
|
||||
therapyEvent = TherapyEvent(
|
||||
timestamp = 10000,
|
||||
isValid = true,
|
||||
type = TherapyEvent.Type.QUESTION,
|
||||
note = null,
|
||||
enteredBy = null,
|
||||
glucose = null,
|
||||
glucoseType = null,
|
||||
glucoseUnit = TherapyEvent.GlucoseUnit.MMOL,
|
||||
duration = 30000,
|
||||
interfaceIDs_backing = InterfaceIDs(
|
||||
nightscoutId = "nightscoutId",
|
||||
pumpId = 11000,
|
||||
pumpType = InterfaceIDs.PumpType.DANA_I,
|
||||
pumpSerial = "bbbb"
|
||||
)
|
||||
)
|
||||
|
||||
therapyEvent2 = (therapyEvent.toNSTherapyEvent().convertToRemoteAndBack() as NSTherapyEvent).toTherapyEvent()
|
||||
Assertions.assertTrue(therapyEvent.contentEqualsTo(therapyEvent2))
|
||||
Assertions.assertTrue(therapyEvent.interfaceIdsEqualsTo(therapyEvent2))
|
||||
|
||||
therapyEvent = TherapyEvent(
|
||||
timestamp = 10000,
|
||||
isValid = true,
|
||||
type = TherapyEvent.Type.NOTE,
|
||||
note = "qqqq",
|
||||
enteredBy = null,
|
||||
glucose = 10.0,
|
||||
glucoseType = null,
|
||||
glucoseUnit = TherapyEvent.GlucoseUnit.MGDL,
|
||||
duration = 0,
|
||||
interfaceIDs_backing = InterfaceIDs(
|
||||
nightscoutId = "nightscoutId",
|
||||
pumpId = 11000,
|
||||
pumpType = InterfaceIDs.PumpType.DANA_I,
|
||||
pumpSerial = "bbbb"
|
||||
)
|
||||
)
|
||||
|
||||
therapyEvent2 = (therapyEvent.toNSTherapyEvent().convertToRemoteAndBack() as NSTherapyEvent).toTherapyEvent()
|
||||
Assertions.assertTrue(therapyEvent.contentEqualsTo(therapyEvent2))
|
||||
Assertions.assertTrue(therapyEvent.interfaceIdsEqualsTo(therapyEvent2))
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue