better sync TBR
This commit is contained in:
parent
f09d967e59
commit
e14fc44957
8 changed files with 27 additions and 21 deletions
|
@ -621,7 +621,6 @@ class DataSyncSelectorImplementation @Inject constructor(
|
||||||
//private var lastTbrId = -1L
|
//private var lastTbrId = -1L
|
||||||
//private var lastTbrTime = -1L
|
//private var lastTbrTime = -1L
|
||||||
override fun processChangedTemporaryBasalsCompat(): Boolean {
|
override fun processChangedTemporaryBasalsCompat(): Boolean {
|
||||||
val useAbsolute = sp.getBoolean(R.string.key_ns_sync_use_absolute, false)
|
|
||||||
val lastDbIdWrapped = appRepository.getLastTemporaryBasalIdWrapped().blockingGet()
|
val lastDbIdWrapped = appRepository.getLastTemporaryBasalIdWrapped().blockingGet()
|
||||||
val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L
|
val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L
|
||||||
var startId = sp.getLong(R.string.key_ns_temporary_basal_last_synced_id, 0)
|
var startId = sp.getLong(R.string.key_ns_temporary_basal_last_synced_id, 0)
|
||||||
|
@ -658,7 +657,7 @@ class DataSyncSelectorImplementation @Inject constructor(
|
||||||
tb.first.interfaceIDs.nightscoutId == null ->
|
tb.first.interfaceIDs.nightscoutId == null ->
|
||||||
nsClientPlugin.nsClientService?.dbAdd(
|
nsClientPlugin.nsClientService?.dbAdd(
|
||||||
"treatments",
|
"treatments",
|
||||||
tb.first.toJson(true, profile, dateUtil, useAbsolute),
|
tb.first.toJson(true, profile, dateUtil),
|
||||||
DataSyncSelector.PairTemporaryBasal(tb.first, tb.second.id),
|
DataSyncSelector.PairTemporaryBasal(tb.first, tb.second.id),
|
||||||
"$startId/$lastDbId"
|
"$startId/$lastDbId"
|
||||||
)
|
)
|
||||||
|
@ -667,7 +666,7 @@ class DataSyncSelectorImplementation @Inject constructor(
|
||||||
nsClientPlugin.nsClientService?.dbUpdate(
|
nsClientPlugin.nsClientService?.dbUpdate(
|
||||||
"treatments",
|
"treatments",
|
||||||
tb.first.interfaceIDs.nightscoutId,
|
tb.first.interfaceIDs.nightscoutId,
|
||||||
tb.first.toJson(false, profile, dateUtil, useAbsolute),
|
tb.first.toJson(false, profile, dateUtil),
|
||||||
DataSyncSelector.PairTemporaryBasal(tb.first, tb.second.id),
|
DataSyncSelector.PairTemporaryBasal(tb.first, tb.second.id),
|
||||||
"$startId/$lastDbId"
|
"$startId/$lastDbId"
|
||||||
)
|
)
|
||||||
|
@ -700,7 +699,6 @@ class DataSyncSelectorImplementation @Inject constructor(
|
||||||
//private var lastEbId = -1L
|
//private var lastEbId = -1L
|
||||||
//private var lastEbTime = -1L
|
//private var lastEbTime = -1L
|
||||||
override fun processChangedExtendedBolusesCompat(): Boolean {
|
override fun processChangedExtendedBolusesCompat(): Boolean {
|
||||||
val useAbsolute = sp.getBoolean(R.string.key_ns_sync_use_absolute, false)
|
|
||||||
val lastDbIdWrapped = appRepository.getLastExtendedBolusIdWrapped().blockingGet()
|
val lastDbIdWrapped = appRepository.getLastExtendedBolusIdWrapped().blockingGet()
|
||||||
val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L
|
val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L
|
||||||
var startId = sp.getLong(R.string.key_ns_extended_bolus_last_synced_id, 0)
|
var startId = sp.getLong(R.string.key_ns_extended_bolus_last_synced_id, 0)
|
||||||
|
@ -737,7 +735,7 @@ class DataSyncSelectorImplementation @Inject constructor(
|
||||||
eb.first.interfaceIDs.nightscoutId == null ->
|
eb.first.interfaceIDs.nightscoutId == null ->
|
||||||
nsClientPlugin.nsClientService?.dbAdd(
|
nsClientPlugin.nsClientService?.dbAdd(
|
||||||
"treatments",
|
"treatments",
|
||||||
eb.first.toJson(true, profile, dateUtil, useAbsolute),
|
eb.first.toJson(true, profile, dateUtil),
|
||||||
DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id),
|
DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id),
|
||||||
"$startId/$lastDbId"
|
"$startId/$lastDbId"
|
||||||
)
|
)
|
||||||
|
@ -746,7 +744,7 @@ class DataSyncSelectorImplementation @Inject constructor(
|
||||||
nsClientPlugin.nsClientService?.dbUpdate(
|
nsClientPlugin.nsClientService?.dbUpdate(
|
||||||
"treatments",
|
"treatments",
|
||||||
eb.first.interfaceIDs.nightscoutId,
|
eb.first.interfaceIDs.nightscoutId,
|
||||||
eb.first.toJson(false, profile, dateUtil, useAbsolute),
|
eb.first.toJson(false, profile, dateUtil),
|
||||||
DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id),
|
DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id),
|
||||||
"$startId/$lastDbId"
|
"$startId/$lastDbId"
|
||||||
)
|
)
|
||||||
|
|
|
@ -152,7 +152,7 @@ class NSClientPlugin @Inject constructor(
|
||||||
|
|
||||||
preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_ns_create_announcements_from_errors))?.isVisible = false
|
preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_ns_create_announcements_from_errors))?.isVisible = false
|
||||||
preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_ns_create_announcements_from_carbs_req))?.isVisible = false
|
preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_ns_create_announcements_from_carbs_req))?.isVisible = false
|
||||||
preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_ns_sync_use_absolute))?.isVisible = false
|
// preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_ns_sync_use_absolute))?.isVisible = false
|
||||||
} else {
|
} else {
|
||||||
// APS or pumpControl mode
|
// APS or pumpControl mode
|
||||||
preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_ns_receive_profile_switch))?.isVisible = buildHelper.isEngineeringMode()
|
preferenceFragment.findPreference<SwitchPreference>(rh.gs(R.string.key_ns_receive_profile_switch))?.isVisible = buildHelper.isEngineeringMode()
|
||||||
|
|
|
@ -66,7 +66,6 @@
|
||||||
<string name="nav_resetdb">Reset Databases</string>
|
<string name="nav_resetdb">Reset Databases</string>
|
||||||
<string name="reset_db_confirm">Do you really want to reset the databases?</string>
|
<string name="reset_db_confirm">Do you really want to reset the databases?</string>
|
||||||
<string name="nav_exit">Exit</string>
|
<string name="nav_exit">Exit</string>
|
||||||
<string name="ns_sync_use_absolute_title">Always use basal absolute values</string>
|
|
||||||
<string name="alert_dialog_permission_battery_optimization_failed">This device does not appear to support battery optimization whitelisting - you may experience performance issues.</string>
|
<string name="alert_dialog_permission_battery_optimization_failed">This device does not appear to support battery optimization whitelisting - you may experience performance issues.</string>
|
||||||
|
|
||||||
<string name="description_actions">Some buttons to quickly access common features</string>
|
<string name="description_actions">Some buttons to quickly access common features</string>
|
||||||
|
|
|
@ -184,11 +184,6 @@
|
||||||
android:summary="@string/ns_localbroadcasts"
|
android:summary="@string/ns_localbroadcasts"
|
||||||
android:title="@string/ns_localbroadcasts_title" />
|
android:title="@string/ns_localbroadcasts_title" />
|
||||||
|
|
||||||
<SwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="@string/key_ns_sync_use_absolute"
|
|
||||||
android:title="@string/ns_sync_use_absolute_title" />
|
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="@string/key_ns_sync_slow"
|
android:key="@string/key_ns_sync_slow"
|
||||||
|
|
|
@ -50,10 +50,10 @@ fun ExtendedBolus.toTemporaryBasal(profile: Profile): TemporaryBasal =
|
||||||
type = TemporaryBasal.Type.FAKE_EXTENDED
|
type = TemporaryBasal.Type.FAKE_EXTENDED
|
||||||
)
|
)
|
||||||
|
|
||||||
fun ExtendedBolus.toJson(isAdd: Boolean, profile: Profile, dateUtil: DateUtil, useAbsolute: Boolean): JSONObject =
|
fun ExtendedBolus.toJson(isAdd: Boolean, profile: Profile, dateUtil: DateUtil): JSONObject =
|
||||||
if (isEmulatingTempBasal)
|
if (isEmulatingTempBasal)
|
||||||
toTemporaryBasal(profile)
|
toTemporaryBasal(profile)
|
||||||
.toJson(isAdd, profile, dateUtil, useAbsolute)
|
.toJson(isAdd, profile, dateUtil)
|
||||||
.put("extendedEmulated", toRealJson(isAdd, dateUtil))
|
.put("extendedEmulated", toRealJson(isAdd, dateUtil))
|
||||||
else toRealJson(isAdd, dateUtil)
|
else toRealJson(isAdd, dateUtil)
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ fun TemporaryBasal.toStringFull(profile: Profile, dateUtil: DateUtil): String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun TemporaryBasal.toJson(isAdd: Boolean, profile: Profile, dateUtil: DateUtil, useAbsolute: Boolean): JSONObject =
|
fun TemporaryBasal.toJson(isAdd: Boolean, profile: Profile, dateUtil: DateUtil): JSONObject =
|
||||||
JSONObject()
|
JSONObject()
|
||||||
.put("created_at", dateUtil.toISOString(timestamp))
|
.put("created_at", dateUtil.toISOString(timestamp))
|
||||||
.put("enteredBy", "openaps://" + "AndroidAPS")
|
.put("enteredBy", "openaps://" + "AndroidAPS")
|
||||||
|
@ -72,9 +72,10 @@ fun TemporaryBasal.toJson(isAdd: Boolean, profile: Profile, dateUtil: DateUtil,
|
||||||
.put("durationInMilliseconds", duration) // rounded duration leads to different basal IOB
|
.put("durationInMilliseconds", duration) // rounded duration leads to different basal IOB
|
||||||
.put("rate", rate)
|
.put("rate", rate)
|
||||||
.put("type", type.name)
|
.put("type", type.name)
|
||||||
|
.put("isAbsolute", isAbsolute)
|
||||||
|
.put("absolute", convertedToAbsolute(timestamp, profile))
|
||||||
|
.put("percent", convertedToPercent(timestamp, profile) - 100)
|
||||||
.also {
|
.also {
|
||||||
if (useAbsolute) it.put("absolute", convertedToAbsolute(timestamp, profile))
|
|
||||||
else it.put("percent", convertedToPercent(timestamp, profile) - 100)
|
|
||||||
if (interfaceIDs.pumpId != null) it.put("pumpId", interfaceIDs.pumpId)
|
if (interfaceIDs.pumpId != null) it.put("pumpId", interfaceIDs.pumpId)
|
||||||
if (interfaceIDs.endId != null) it.put("endId", interfaceIDs.endId)
|
if (interfaceIDs.endId != null) it.put("endId", interfaceIDs.endId)
|
||||||
if (interfaceIDs.pumpType != null) it.put("pumpType", interfaceIDs.pumpType!!.name)
|
if (interfaceIDs.pumpType != null) it.put("pumpType", interfaceIDs.pumpType!!.name)
|
||||||
|
@ -97,6 +98,8 @@ fun temporaryBasalFromNsIdForInvalidating(nsId: String): TemporaryBasal =
|
||||||
|
|
||||||
fun temporaryBasalFromJson(jsonObject: JSONObject): TemporaryBasal? {
|
fun temporaryBasalFromJson(jsonObject: JSONObject): TemporaryBasal? {
|
||||||
val timestamp = JsonHelper.safeGetLongAllowNull(jsonObject, "mills", null) ?: return null
|
val timestamp = JsonHelper.safeGetLongAllowNull(jsonObject, "mills", null) ?: return null
|
||||||
|
var rate = JsonHelper.safeGetDoubleAllowNull(jsonObject, "rate")
|
||||||
|
var isAbsolute = JsonHelper.safeGetBooleanAllowNull(jsonObject, "isAbsolute")
|
||||||
val percent = JsonHelper.safeGetDoubleAllowNull(jsonObject, "percent")
|
val percent = JsonHelper.safeGetDoubleAllowNull(jsonObject, "percent")
|
||||||
val absolute = JsonHelper.safeGetDoubleAllowNull(jsonObject, "absolute")
|
val absolute = JsonHelper.safeGetDoubleAllowNull(jsonObject, "absolute")
|
||||||
val duration = JsonHelper.safeGetLongAllowNull(jsonObject, "duration") ?: return null
|
val duration = JsonHelper.safeGetLongAllowNull(jsonObject, "duration") ?: return null
|
||||||
|
@ -109,7 +112,8 @@ fun temporaryBasalFromJson(jsonObject: JSONObject): TemporaryBasal? {
|
||||||
val pumpType = InterfaceIDs.PumpType.fromString(JsonHelper.safeGetStringAllowNull(jsonObject, "pumpType", null))
|
val pumpType = InterfaceIDs.PumpType.fromString(JsonHelper.safeGetStringAllowNull(jsonObject, "pumpType", null))
|
||||||
val pumpSerial = JsonHelper.safeGetStringAllowNull(jsonObject, "pumpSerial", null)
|
val pumpSerial = JsonHelper.safeGetStringAllowNull(jsonObject, "pumpSerial", null)
|
||||||
|
|
||||||
val rate = if (percent != null) percent + 100 else absolute ?: return null
|
rate = rate ?: if (percent != null) percent + 100 else absolute ?: return null
|
||||||
|
isAbsolute = isAbsolute ?: percent == null
|
||||||
if (duration == 0L) return null
|
if (duration == 0L) return null
|
||||||
if (timestamp == 0L) return null
|
if (timestamp == 0L) return null
|
||||||
|
|
||||||
|
@ -118,7 +122,7 @@ fun temporaryBasalFromJson(jsonObject: JSONObject): TemporaryBasal? {
|
||||||
rate = rate,
|
rate = rate,
|
||||||
duration = durationInMilliseconds ?: T.mins(duration).msecs(),
|
duration = durationInMilliseconds ?: T.mins(duration).msecs(),
|
||||||
type = type,
|
type = type,
|
||||||
isAbsolute = percent == null,
|
isAbsolute = isAbsolute,
|
||||||
isValid = isValid
|
isValid = isValid
|
||||||
).also {
|
).also {
|
||||||
it.interfaceIDs.nightscoutId = id
|
it.interfaceIDs.nightscoutId = id
|
||||||
|
|
|
@ -150,4 +150,15 @@ object JsonHelper {
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun safeGetBooleanAllowNull(json: JSONObject?, fieldName: String, defaultValue: Boolean? = null): Boolean? {
|
||||||
|
var result = defaultValue
|
||||||
|
if (json != null && json.has(fieldName)) {
|
||||||
|
try {
|
||||||
|
result = json.getBoolean(fieldName)
|
||||||
|
} catch (ignored: JSONException) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -24,7 +24,6 @@
|
||||||
<string name="key_pump_unreachable_threshold_minutes" translatable="false">pump_unreachable_threshold</string>
|
<string name="key_pump_unreachable_threshold_minutes" translatable="false">pump_unreachable_threshold</string>
|
||||||
<string name="key_missed_bg_readings_threshold_minutes" translatable="false">missed_bg_readings_threshold</string>
|
<string name="key_missed_bg_readings_threshold_minutes" translatable="false">missed_bg_readings_threshold</string>
|
||||||
<string name="key_gradually_increase_notification_volume" translatable="false">gradually_increase_notification_volume</string>
|
<string name="key_gradually_increase_notification_volume" translatable="false">gradually_increase_notification_volume</string>
|
||||||
<string name="key_ns_sync_use_absolute" translatable="false">ns_sync_use_absolute</string>
|
|
||||||
<string name="key_virtualpump_type" translatable="false">virtualpump_type</string>
|
<string name="key_virtualpump_type" translatable="false">virtualpump_type</string>
|
||||||
<string name="key_quickwizard" translatable="false">QuickWizard</string>
|
<string name="key_quickwizard" translatable="false">QuickWizard</string>
|
||||||
<string name="key_wear_control" translatable="false">wearcontrol</string>
|
<string name="key_wear_control" translatable="false">wearcontrol</string>
|
||||||
|
|
Loading…
Reference in a new issue