diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.kt b/app/src/main/java/info/nightscout/androidaps/MainApp.kt
index d56c3d2855..784980d894 100644
--- a/app/src/main/java/info/nightscout/androidaps/MainApp.kt
+++ b/app/src/main/java/info/nightscout/androidaps/MainApp.kt
@@ -11,7 +11,7 @@ import dagger.android.AndroidInjector
import dagger.android.DaggerApplication
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.TherapyEvent
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction
+import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampTherapyEventTransaction
import info.nightscout.androidaps.database.transactions.VersionChangeTransaction
import info.nightscout.androidaps.db.CompatDBHelper
import info.nightscout.androidaps.db.DatabaseHelper
@@ -70,7 +70,7 @@ class MainApp : DaggerApplication() {
commitHash = null
}
disposable += repository.runTransaction(VersionChangeTransaction(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, gitRemote, commitHash)).subscribe()
- disposable += repository.runTransaction(InsertTherapyEventIfNewTransaction(timestamp = dateUtil._now(), type = TherapyEvent.Type.NOTE, note = getString(info.nightscout.androidaps.core.R.string.androidaps_start).toString() + " - " + Build.MANUFACTURER + " " + Build.MODEL, glucoseUnit = TherapyEvent.GlucoseUnit.MGDL)).subscribe()
+ disposable += repository.runTransaction(InsertIfNewByTimestampTherapyEventTransaction(timestamp = dateUtil._now(), type = TherapyEvent.Type.NOTE, note = getString(info.nightscout.androidaps.core.R.string.androidaps_start).toString() + " - " + Build.MANUFACTURER + " " + Build.MODEL, glucoseUnit = TherapyEvent.GlucoseUnit.MGDL)).subscribe()
disposable += compatDBHelper.dbChangeDisposable()
registerActivityLifecycleCallbacks(activityMonitor)
JodaTimeAndroid.init(this)
diff --git a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/AppModule.kt b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/AppModule.kt
index e3271f0c32..a152186ced 100644
--- a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/AppModule.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/AppModule.kt
@@ -20,6 +20,7 @@ import info.nightscout.androidaps.plugins.general.nsclient.DataSyncSelectorImple
import info.nightscout.androidaps.plugins.general.nsclient.UploadQueue
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
+import info.nightscout.androidaps.plugins.pump.PumpSyncImplementation
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.queue.CommandQueue
import info.nightscout.androidaps.utils.androidNotification.NotificationHolder
@@ -30,6 +31,7 @@ import info.nightscout.androidaps.utils.sharedPreferences.SP
import info.nightscout.androidaps.utils.storage.FileStorage
import info.nightscout.androidaps.utils.storage.Storage
import javax.inject.Singleton
+@Suppress("unused")
@Module(includes = [
AppModule.AppBindings::class
])
@@ -87,6 +89,7 @@ open class AppModule {
@Binds fun bindSmsCommunicatorInterface(smsCommunicatorPlugin: SmsCommunicatorPlugin): SmsCommunicatorInterface
@Binds fun bindUploadQueueAdminInterfaceToUploadQueue(uploadQueueAdminInterface: UploadQueueAdminInterface) : UploadQueueInterface
@Binds fun bindDataSyncSelector(dataSyncSelectorImplementation: DataSyncSelectorImplementation): DataSyncSelector
+ @Binds fun bindPumpSync(pumpSyncImplementation: PumpSyncImplementation): PumpSync
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
index a8ecbde5f7..d566359e36 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt
@@ -18,7 +18,7 @@ import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.database.entities.UserEntry.Action
import info.nightscout.androidaps.database.entities.UserEntry.Units
import info.nightscout.androidaps.database.entities.UserEntry.ValueWithUnit
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction
+import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampTherapyEventTransaction
import info.nightscout.androidaps.databinding.DialogCareBinding
import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.logging.LTag
@@ -222,7 +222,7 @@ class CareDialog : DialogFragmentWithDate() {
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(event), HtmlHelper.fromHtml(Joiner.on("
").join(actions)), {
- disposable += repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(therapyEvent))
+ disposable += repository.runTransactionForResult(InsertIfNewByTimestampTherapyEventTransaction(therapyEvent))
.subscribe(
{ result -> result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted therapy event $it") } },
{ aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", it) }
diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt
index 7a14da76e4..dc45e32bbb 100644
--- a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt
+++ b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt
@@ -14,7 +14,7 @@ import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.database.entities.UserEntry.Action
import info.nightscout.androidaps.database.entities.UserEntry.Units
import info.nightscout.androidaps.database.entities.UserEntry.ValueWithUnit
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction
+import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampTherapyEventTransaction
import info.nightscout.androidaps.databinding.DialogFillBinding
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
@@ -140,7 +140,7 @@ class FillDialog : DialogFragmentWithDate() {
}
if (siteChange) {
uel.log(Action.CAREPORTAL, notes, ValueWithUnit(TherapyEvent.Type.CANNULA_CHANGE.text, Units.TherapyEvent))
- disposable += repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(
+ disposable += repository.runTransactionForResult(InsertIfNewByTimestampTherapyEventTransaction(
timestamp = eventTime,
type = TherapyEvent.Type.CANNULA_CHANGE,
note = notes,
@@ -153,7 +153,7 @@ class FillDialog : DialogFragmentWithDate() {
if (insulinChange) {
// add a second for case of both checked
uel.log(Action.CAREPORTAL, notes, ValueWithUnit(TherapyEvent.Type.INSULIN_CHANGE.text, Units.TherapyEvent))
- disposable += repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(
+ disposable += repository.runTransactionForResult(InsertIfNewByTimestampTherapyEventTransaction(
timestamp = eventTime + 1000,
type = TherapyEvent.Type.INSULIN_CHANGE,
note = notes,
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt
index 72530f6105..22b780a4fa 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/aps/loop/LoopPlugin.kt
@@ -18,7 +18,7 @@ import info.nightscout.androidaps.data.PumpEnactResult
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction
+import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampTherapyEventTransaction
import info.nightscout.androidaps.events.EventAcceptOpenLoopChange
import info.nightscout.androidaps.events.EventAutosensCalculationFinished
import info.nightscout.androidaps.events.EventNewBG
@@ -653,7 +653,7 @@ open class LoopPlugin @Inject constructor(
}
override fun createOfflineEvent(durationInMinutes: Int) {
- disposable += repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(
+ disposable += repository.runTransactionForResult(InsertIfNewByTimestampTherapyEventTransaction(
timestamp = dateUtil._now(),
type = TherapyEvent.Type.APS_OFFLINE,
duration = T.mins(durationInMinutes.toLong()).msecs(),
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodPlugin.kt
index 27d68d2c0b..55a1c3a98a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodPlugin.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/food/FoodPlugin.kt
@@ -7,7 +7,7 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.Food
-import info.nightscout.androidaps.database.transactions.SyncFoodTransaction
+import info.nightscout.androidaps.database.transactions.SyncNsFoodTransaction
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
import info.nightscout.androidaps.interfaces.PluginType
@@ -18,7 +18,6 @@ import info.nightscout.androidaps.utils.JsonHelper
import info.nightscout.androidaps.utils.extensions.foodFromJson
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
-import org.json.JSONArray
import org.json.JSONObject
import javax.inject.Inject
import javax.inject.Singleton
@@ -75,7 +74,7 @@ class FoodPlugin @Inject constructor(
isValid = false
).also { it.interfaceIDs.nightscoutId = JsonHelper.safeGetString(jsonFood, "_id") }
- repository.runTransactionForResult(SyncFoodTransaction(delFood))
+ repository.runTransactionForResult(SyncNsFoodTransaction(delFood))
.doOnError {
aapsLogger.error(LTag.DATABASE, "Error while removing food", it)
ret = Result.failure()
@@ -89,7 +88,7 @@ class FoodPlugin @Inject constructor(
else -> {
val food = foodFromJson(jsonFood)
if (food != null) {
- repository.runTransactionForResult(SyncFoodTransaction(food))
+ repository.runTransactionForResult(SyncNsFoodTransaction(food))
.doOnError {
aapsLogger.error(LTag.DATABASE, "Error while adding/updating food", it)
ret = Result.failure()
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/DataSyncSelectorImplementation.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/DataSyncSelectorImplementation.kt
index 5cb20ed3f7..b3e49e8c16 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/DataSyncSelectorImplementation.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/DataSyncSelectorImplementation.kt
@@ -205,10 +205,10 @@ class DataSyncSelectorImplementation @Inject constructor(
nsClientPlugin.nsClientService?.dbRemove("food", tt.first.interfaceIDs.nightscoutId, DataSyncSelector.PairFood(tt.first, tt.second))
// existing without nsId = create new
tt.first.isValid && tt.first.interfaceIDs.nightscoutId == null ->
- nsClientPlugin.nsClientService?.dbAdd("food", tt.first.toJson(profileFunction.getUnits()), DataSyncSelector.PairFood(tt.first, tt.second))
+ nsClientPlugin.nsClientService?.dbAdd("food", tt.first.toJson(), DataSyncSelector.PairFood(tt.first, tt.second))
// existing with nsId = update
tt.first.isValid && tt.first.interfaceIDs.nightscoutId != null ->
- nsClientPlugin.nsClientService?.dbUpdate("food", tt.first.interfaceIDs.nightscoutId, tt.first.toJson(profileFunction.getUnits()), DataSyncSelector.PairFood(tt.first, tt.second))
+ nsClientPlugin.nsClientService?.dbUpdate("food", tt.first.interfaceIDs.nightscoutId, tt.first.toJson(), DataSyncSelector.PairFood(tt.first, tt.second))
}
return true
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt
index c3e96e33c4..2be9f8d4b5 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientAddUpdateWorker.kt
@@ -9,8 +9,8 @@ import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.database.entities.UserEntry
import info.nightscout.androidaps.database.entities.UserEntry.ValueWithUnit
-import info.nightscout.androidaps.database.transactions.SyncTemporaryTargetTransaction
-import info.nightscout.androidaps.database.transactions.SyncTherapyEventTransaction
+import info.nightscout.androidaps.database.transactions.SyncNsTemporaryTargetTransaction
+import info.nightscout.androidaps.database.transactions.SyncNsTherapyEventTransaction
import info.nightscout.androidaps.events.EventNsTreatment
import info.nightscout.androidaps.interfaces.ConfigInterface
import info.nightscout.androidaps.interfaces.DatabaseHelperInterface
@@ -78,7 +78,7 @@ class NSClientAddUpdateWorker(
rxBus.send(EventNsTreatment(EventNsTreatment.ADD, json))
eventType == TherapyEvent.Type.TEMPORARY_TARGET.text ->
temporaryTargetFromJson(json)?.let { temporaryTarget ->
- repository.runTransactionForResult(SyncTemporaryTargetTransaction(temporaryTarget))
+ repository.runTransactionForResult(SyncNsTemporaryTargetTransaction(temporaryTarget))
.doOnError {
aapsLogger.error(LTag.DATABASE, "Error while saving temporary target", it)
ret = Result.failure()
@@ -123,7 +123,7 @@ class NSClientAddUpdateWorker(
eventType == TherapyEvent.Type.APS_OFFLINE.text ||
eventType == TherapyEvent.Type.PUMP_BATTERY_CHANGE.text ->
therapyEventFromJson(json)?.let { therapyEvent ->
- repository.runTransactionForResult(SyncTherapyEventTransaction(therapyEvent))
+ repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEvent))
.doOnError {
aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", it)
ret = Result.failure()
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientMbgWorker.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientMbgWorker.kt
index 7c05af0fc8..a2639ddd45 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientMbgWorker.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientMbgWorker.kt
@@ -6,7 +6,7 @@ import androidx.work.WorkerParameters
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.database.AppRepository
-import info.nightscout.androidaps.database.transactions.SyncTherapyEventTransaction
+import info.nightscout.androidaps.database.transactions.SyncNsTherapyEventTransaction
import info.nightscout.androidaps.interfaces.ConfigInterface
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
@@ -40,7 +40,7 @@ class NSClientMbgWorker(
for (i in 0 until mbgArray.length()) {
val nsMbg = NSMbg(mbgArray.getJSONObject(i))
if (!nsMbg.isValid()) continue
- repository.runTransactionForResult(SyncTherapyEventTransaction(therapyEventFromNsMbg(nsMbg)))
+ repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEventFromNsMbg(nsMbg)))
.doOnError {
aapsLogger.error("Error while saving therapy event", it)
ret = Result.failure()
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientRemoveWorker.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientRemoveWorker.kt
index a80c71c803..34156d6f3a 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientRemoveWorker.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/nsclient/NSClientRemoveWorker.kt
@@ -8,8 +8,8 @@ import info.nightscout.androidaps.R
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.UserEntry
import info.nightscout.androidaps.database.entities.UserEntry.ValueWithUnit
-import info.nightscout.androidaps.database.transactions.SyncTemporaryTargetTransaction
-import info.nightscout.androidaps.database.transactions.SyncTherapyEventTransaction
+import info.nightscout.androidaps.database.transactions.SyncNsTemporaryTargetTransaction
+import info.nightscout.androidaps.database.transactions.SyncNsTherapyEventTransaction
import info.nightscout.androidaps.events.EventNsTreatment
import info.nightscout.androidaps.events.EventNsTreatment.Companion.REMOVE
import info.nightscout.androidaps.interfaces.ConfigInterface
@@ -59,7 +59,7 @@ class NSClientRemoveWorker(
// room Temporary target
val temporaryTarget = temporaryTargetFromNsIdForInvalidating(nsId)
- repository.runTransactionForResult(SyncTemporaryTargetTransaction(temporaryTarget))
+ repository.runTransactionForResult(SyncNsTemporaryTargetTransaction(temporaryTarget))
.doOnError {
aapsLogger.error(LTag.DATABASE, "Error while removing temporary target", it)
ret = Result.failure()
@@ -79,7 +79,7 @@ class NSClientRemoveWorker(
// room Therapy Event
val therapyEvent = therapyEventFromNsIdForInvalidating(nsId)
- repository.runTransactionForResult(SyncTherapyEventTransaction(therapyEvent))
+ repository.runTransactionForResult(SyncNsTherapyEventTransaction(therapyEvent))
.doOnError {
aapsLogger.error(LTag.DATABASE, "Error while removing therapy event", it)
ret = Result.failure()
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt
index ef60a84ea8..5bfa2e14cd 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.kt
@@ -51,6 +51,7 @@ class VirtualPumpPlugin @Inject constructor(
private val profileFunction: ProfileFunction,
private val treatmentsPlugin: TreatmentsPlugin,
commandQueue: CommandQueueProvider,
+ private val pumpSync: PumpSync,
private val config: Config,
private val dateUtil: DateUtil
) : PumpPluginBase(PluginDescription()
@@ -181,22 +182,21 @@ class VirtualPumpPlugin @Inject constructor(
override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult {
val result = PumpEnactResult(injector)
- result.success = true
- result.bolusDelivered = detailedBolusInfo.insulin
- result.carbsDelivered = detailedBolusInfo.carbs
- result.enacted = result.bolusDelivered > 0 || result.carbsDelivered > 0
- result.comment = resourceHelper.gs(R.string.virtualpump_resultok)
+ .success(true)
+ .bolusDelivered(detailedBolusInfo.insulin)
+ .carbsDelivered(detailedBolusInfo.carbs)
+ .enacted(detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0)
+ .comment(resourceHelper.gs(R.string.virtualpump_resultok))
+ val bolusingEvent = EventOverviewBolusProgress
var delivering = 0.0
while (delivering < detailedBolusInfo.insulin) {
SystemClock.sleep(200)
- val bolusingEvent = EventOverviewBolusProgress
bolusingEvent.status = resourceHelper.gs(R.string.bolusdelivering, delivering)
bolusingEvent.percent = min((delivering / detailedBolusInfo.insulin * 100).toInt(), 100)
rxBus.send(bolusingEvent)
delivering += 0.1
}
SystemClock.sleep(200)
- val bolusingEvent = EventOverviewBolusProgress
bolusingEvent.status = resourceHelper.gs(R.string.bolusdelivered, detailedBolusInfo.insulin)
bolusingEvent.percent = 100
rxBus.send(bolusingEvent)
@@ -204,7 +204,10 @@ class VirtualPumpPlugin @Inject constructor(
aapsLogger.debug(LTag.PUMP, "Delivering treatment insulin: " + detailedBolusInfo.insulin + "U carbs: " + detailedBolusInfo.carbs + "g " + result)
rxBus.send(EventVirtualPumpUpdateGui())
lastDataTime = System.currentTimeMillis()
- treatmentsPlugin.addToHistoryTreatment(detailedBolusInfo, false)
+ pumpSync.syncBolusWithPumpId(dateUtil._now(), detailedBolusInfo.insulin, detailedBolusInfo.bolusType, dateUtil._now(), pumpType
+ ?: PumpType.GENERIC_AAPS, serialNumber())
+ pumpSync.syncCarbsWithTimestamp(dateUtil._now(), detailedBolusInfo.carbs, dateUtil._now(), pumpType
+ ?: PumpType.GENERIC_AAPS, serialNumber())
return result
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/source/EversensePlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/source/EversensePlugin.kt
index 359ad234da..0a5fbeb500 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/source/EversensePlugin.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/source/EversensePlugin.kt
@@ -9,7 +9,7 @@ import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.GlucoseValue
import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.database.transactions.CgmSourceTransaction
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction
+import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampTherapyEventTransaction
import info.nightscout.androidaps.interfaces.BgSourceInterface
import info.nightscout.androidaps.interfaces.PluginBase
import info.nightscout.androidaps.interfaces.PluginDescription
@@ -131,7 +131,7 @@ class EversensePlugin @Inject constructor(
aapsLogger.debug(LTag.BGSOURCE, "calibrationTimestamps" + Arrays.toString(calibrationTimestamps))
aapsLogger.debug(LTag.BGSOURCE, "calibrationRecordNumbers" + Arrays.toString(calibrationRecordNumbers))
for (i in calibrationGlucoseLevels.indices) {
- repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(
+ repository.runTransactionForResult(InsertIfNewByTimestampTherapyEventTransaction(
timestamp = calibrationTimestamps[i],
type = TherapyEvent.Type.FINGER_STICK_BG_VALUE,
glucose = calibrationGlucoseLevels[i].toDouble(),
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsBolusCarbsFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsBolusCarbsFragment.kt
index ad98524b31..66256414b7 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsBolusCarbsFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsBolusCarbsFragment.kt
@@ -24,7 +24,6 @@ import info.nightscout.androidaps.events.EventAutosensCalculationFinished
import info.nightscout.androidaps.events.EventTreatmentChange
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.ProfileFunction
-import info.nightscout.androidaps.interfaces.UploadQueueInterface
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.logging.UserEntryLogger
@@ -57,8 +56,6 @@ class TreatmentsBolusCarbsFragment : DaggerFragment() {
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var profileFunction: ProfileFunction
- @Inject lateinit var nsUpload: NSUpload
- @Inject lateinit var uploadQueue: UploadQueueInterface
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var buildHelper: BuildHelper
@Inject lateinit var aapsSchedulers: AapsSchedulers
@@ -120,13 +117,10 @@ class TreatmentsBolusCarbsFragment : DaggerFragment() {
.subscribe { list ->
list.forEach { bolus ->
disposable += repository.runTransactionForResult(InvalidateBolusTransaction(bolus.id))
- .subscribe({
- val id = bolus.interfaceIDs.nightscoutId
- if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
- else uploadQueue.removeByMongoId("dbAdd", bolus.timestamp.toString())
- }, {
- aapsLogger.error(LTag.DATABASE, "Error while invalidating bolus", it)
- })
+ .subscribe(
+ { result -> result.invalidated.forEach { aapsLogger.debug(LTag.DATABASE, "Invalidated bolus $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while invalidating bolus", it) }
+ )
}
}
repository
@@ -135,13 +129,10 @@ class TreatmentsBolusCarbsFragment : DaggerFragment() {
.subscribe { list ->
list.forEach { carb ->
disposable += repository.runTransactionForResult(InvalidateCarbsTransaction(carb.id))
- .subscribe({
- val id = carb.interfaceIDs.nightscoutId
- if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
- else uploadQueue.removeByMongoId("dbAdd", carb.timestamp.toString())
- }, {
- aapsLogger.error(LTag.DATABASE, "Error while invalidating carbs", it)
- })
+ .subscribe(
+ { result -> result.invalidated.forEach { aapsLogger.debug(LTag.DATABASE, "Invalidated carbs $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while invalidating carbs", it) }
+ )
}
}
repository
@@ -150,13 +141,10 @@ class TreatmentsBolusCarbsFragment : DaggerFragment() {
.subscribe { list ->
list.forEach { bolusCalc ->
disposable += repository.runTransactionForResult(InvalidateBolusCalculatorResultTransaction(bolusCalc.id))
- .subscribe({
- val id = bolusCalc.interfaceIDs.nightscoutId
- if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
- else uploadQueue.removeByMongoId("dbAdd", bolusCalc.timestamp.toString())
- }, {
- aapsLogger.error(LTag.DATABASE, "Error while invalidating carbs", it)
- })
+ .subscribe(
+ { result -> result.invalidated.forEach { aapsLogger.debug(LTag.DATABASE, "Invalidated bolusCalculatorResult $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while invalidating bolusCalculatorResult", it) }
+ )
}
}
binding.deleteFutureTreatments.visibility = View.GONE
@@ -350,13 +338,10 @@ class TreatmentsBolusCarbsFragment : DaggerFragment() {
// ValueWithUnit(mealLinkLoaded.carbs.toInt(), Units.G)
)
disposable += repository.runTransactionForResult(InvalidateBolusTransaction(bolus.id))
- .subscribe({
- val id = bolus.interfaceIDs.nightscoutId
- if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
- else uploadQueue.removeByMongoId("dbAdd", bolus.timestamp.toString())
- }, {
- aapsLogger.error(LTag.DATABASE, "Error while invalidating bolus", it)
- })
+ .subscribe(
+ { result -> result.invalidated.forEach { aapsLogger.debug(LTag.DATABASE, "Invalidated bolus $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while invalidating bolus", it) }
+ )
})
}
}
@@ -374,13 +359,10 @@ class TreatmentsBolusCarbsFragment : DaggerFragment() {
ValueWithUnit(carb.amount, Units.G)
)
disposable += repository.runTransactionForResult(InvalidateCarbsTransaction(carb.id))
- .subscribe({
- val id = carb.interfaceIDs.nightscoutId
- if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
- else uploadQueue.removeByMongoId("dbAdd", carb.timestamp.toString())
- }, {
- aapsLogger.error(LTag.DATABASE, "Error while invalidating carbs", it)
- })
+ .subscribe(
+ { result -> result.invalidated.forEach { aapsLogger.debug(LTag.DATABASE, "Invalidated carbs $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while invalidating carbs", it) }
+ )
})
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsCareportalFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsCareportalFragment.kt
index 67bb408722..180bf12864 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsCareportalFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsCareportalFragment.kt
@@ -11,18 +11,18 @@ import dagger.android.support.DaggerFragment
import info.nightscout.androidaps.R
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.TherapyEvent
+import info.nightscout.androidaps.database.entities.UserEntry.Action
+import info.nightscout.androidaps.database.entities.UserEntry.Units
+import info.nightscout.androidaps.database.entities.UserEntry.ValueWithUnit
import info.nightscout.androidaps.database.transactions.InvalidateAAPSStartedTherapyEventTransaction
import info.nightscout.androidaps.database.transactions.InvalidateTherapyEventTransaction
-import info.nightscout.androidaps.database.entities.UserEntry.*
import info.nightscout.androidaps.databinding.TreatmentsCareportalFragmentBinding
import info.nightscout.androidaps.databinding.TreatmentsCareportalItemBinding
import info.nightscout.androidaps.events.EventTherapyEventChange
-import info.nightscout.androidaps.interfaces.UploadQueueInterface
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.logging.UserEntryLogger
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
-import info.nightscout.androidaps.plugins.general.nsclient.NSUpload
import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientRestart
import info.nightscout.androidaps.plugins.treatments.events.EventTreatmentUpdateGui
import info.nightscout.androidaps.plugins.treatments.fragments.TreatmentsCareportalFragment.RecyclerViewAdapter.TherapyEventsViewHolder
@@ -51,8 +51,6 @@ class TreatmentsCareportalFragment : DaggerFragment() {
@Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var fabricPrivacy: FabricPrivacy
@Inject lateinit var translator: Translator
- @Inject lateinit var nsUpload: NSUpload
- @Inject lateinit var uploadQueue: UploadQueueInterface
@Inject lateinit var dateUtil: DateUtil
@Inject lateinit var buildHelper: BuildHelper
@Inject lateinit var aapsSchedulers: AapsSchedulers
@@ -95,18 +93,11 @@ class TreatmentsCareportalFragment : DaggerFragment() {
activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal), resourceHelper.gs(R.string.careportal_removestartedevents), Runnable {
uel.log(Action.RESTART_EVENTS_REMOVED)
- // val events = databaseHelper.getCareportalEvents(false)
- repository.runTransactionForResult(InvalidateAAPSStartedTherapyEventTransaction())
- .subscribe({ result ->
- result.invalidated.forEach { event ->
- if (NSUpload.isIdValid(event.interfaceIDs.nightscoutId))
- nsUpload.removeCareportalEntryFromNS(event.interfaceIDs.nightscoutId)
- else
- uploadQueue.removeByMongoId("dbAdd", event.timestamp.toString())
- }
- }, {
- aapsLogger.error(LTag.DATABASE, "Error while invalidating therapy event", it)
- })
+ repository.runTransactionForResult(InvalidateAAPSStartedTherapyEventTransaction(resourceHelper.gs(R.string.androidaps_start)))
+ .subscribe(
+ { result -> result.invalidated.forEach { aapsLogger.debug(LTag.DATABASE, "Invalidated therapy event $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while invalidating therapy event", it) }
+ )
}, null)
}
}
@@ -199,13 +190,10 @@ class TreatmentsCareportalFragment : DaggerFragment() {
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.removerecord), text, Runnable {
uel.log(Action.CAREPORTAL_REMOVED, therapyEvent.note, ValueWithUnit(therapyEvent.timestamp, Units.Timestamp), ValueWithUnit(therapyEvent.type.text, Units.TherapyEvent))
disposable += repository.runTransactionForResult(InvalidateTherapyEventTransaction(therapyEvent.id))
- .subscribe({
- val id = therapyEvent.interfaceIDs.nightscoutId
- if (NSUpload.isIdValid(id)) nsUpload.removeCareportalEntryFromNS(id)
- else uploadQueue.removeByMongoId("dbAdd", therapyEvent.timestamp.toString())
- }, {
- aapsLogger.error(LTag.DATABASE, "Error while invalidating therapy event", it)
- })
+ .subscribe(
+ { result -> result.invalidated.forEach { aapsLogger.debug(LTag.DATABASE, "Invalidated therapy event $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while invalidating therapy event", it) }
+ )
}, null)
}
}
diff --git a/combo/build.gradle b/combo/build.gradle
index 55565f892b..8020051b31 100644
--- a/combo/build.gradle
+++ b/combo/build.gradle
@@ -17,5 +17,4 @@ android {
dependencies {
implementation project(':core')
- implementation project(':database')
}
\ No newline at end of file
diff --git a/core/src/main/java/info/nightscout/androidaps/data/DetailedBolusInfo.kt b/core/src/main/java/info/nightscout/androidaps/data/DetailedBolusInfo.kt
index fd0621e3c0..06e15429bd 100644
--- a/core/src/main/java/info/nightscout/androidaps/data/DetailedBolusInfo.kt
+++ b/core/src/main/java/info/nightscout/androidaps/data/DetailedBolusInfo.kt
@@ -72,7 +72,11 @@ class DetailedBolusInfo {
MEAL_BOLUS,
BOLUS_WIZARD,
CORRECTION_BOLUS,
- CARBS_CORRECTION;
+ CARBS_CORRECTION,
+ CANNULA_CHANGE,
+ INSULIN_CHANGE,
+ PUMP_BATTERY_CHANGE,
+ NOTE;
fun toDBbEventType(): TherapyEvent.Type =
when (this) {
@@ -80,6 +84,10 @@ class DetailedBolusInfo {
BOLUS_WIZARD -> TherapyEvent.Type.BOLUS_WIZARD
CORRECTION_BOLUS -> TherapyEvent.Type.CORRECTION_BOLUS
CARBS_CORRECTION -> TherapyEvent.Type.CARBS_CORRECTION
+ CANNULA_CHANGE -> TherapyEvent.Type.CANNULA_CHANGE
+ INSULIN_CHANGE -> TherapyEvent.Type.INSULIN_CHANGE
+ PUMP_BATTERY_CHANGE -> TherapyEvent.Type.PUMP_BATTERY_CHANGE
+ NOTE -> TherapyEvent.Type.NOTE
}
}
diff --git a/core/src/main/java/info/nightscout/androidaps/interfaces/PumpSync.kt b/core/src/main/java/info/nightscout/androidaps/interfaces/PumpSync.kt
new file mode 100644
index 0000000000..7e838b62c7
--- /dev/null
+++ b/core/src/main/java/info/nightscout/androidaps/interfaces/PumpSync.kt
@@ -0,0 +1,79 @@
+package info.nightscout.androidaps.interfaces
+
+import info.nightscout.androidaps.data.DetailedBolusInfo
+import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
+
+interface PumpSync {
+ fun addBolusWithTempId(timestamp: Long, amount: Double, driverId: Long, pumpType: PumpType, pumpSerial: String)
+ fun syncBolusWithTempId(timestamp: Long, amount: Double, driverId: Long, pumpId: Long?, pumpType: PumpType, pumpSerial: String)
+
+ /**
+ * Synchronization of boluses
+ *
+ * Search for combination of pumpId, PumpType, pumpSerial
+ *
+ * If db record doesn't exist, new record is created.
+ * If exists, data is updated
+ * isValid field is preserved
+ *
+ * @param timestamp timestamp of event from pump history
+ * @param amount amount of insulin
+ * @param type type of bolus (NORMAL, SMB, PRIME). Default is NORMAL
+ * @param pumpId pump id from history
+ * @param pumpType pump type like PumpType.ACCU_CHEK_COMBO
+ * @param pumpSerial pump serial number
+ **/
+ fun syncBolusWithPumpId(timestamp: Long, amount: Double, type: DetailedBolusInfo.BolusType = DetailedBolusInfo.BolusType.NORMAL, pumpId: Long, pumpType: PumpType, pumpSerial: String)
+
+ /**
+ * Synchronization of carbs
+ *
+ * Assuming there will be no clash on timestamp from different pumps or UI
+ * only timestamp is compared
+ *
+ * If db record doesn't exist, new record is created.
+ * If exists, data is ignored
+ *
+ * @param timestamp timestamp of event from pump history
+ * @param amount amount of carbs
+ * @param pumpId pump id from history if coming form pump history
+ * @param pumpType pump type like PumpType.ACCU_CHEK_COMBO
+ * @param pumpSerial pump serial number
+ **/
+ fun syncCarbsWithTimestamp(timestamp: Long, amount: Double, pumpId: Long?, pumpType: PumpType, pumpSerial: String)
+
+ /**
+ * Synchronization of events like CANNULA_CHANGE
+ *
+ * Assuming there will be no clash on timestamp from different pumps
+ * only timestamp and type is compared
+ *
+ * If db record doesn't exist, new record is created.
+ * If exists, data is ignored
+ *
+ * @param timestamp timestamp of event from pump history
+ * @param type type like CANNULA_CHANGE, INSULIN_CHANGE
+ * @param note note
+ * @param pumpId pump id from history if available
+ * @param pumpType pump type like PumpType.ACCU_CHEK_COMBO
+ * @param pumpSerial pump serial number
+ **/
+ fun insertTherapyEventIfNewWithTimestamp(timestamp: Long, type: DetailedBolusInfo.EventType, note: String? = null, pumpId: Long? = null, pumpType: PumpType, pumpSerial: String)
+
+ /**
+ * Create an announcement
+ *
+ * It's common TherapyEvent NOTE
+ * Event is sent to NS as an announcement
+ *
+ * Common use is report failures like occlusion, empty reservoir etc
+ *
+ * Created with now() as a timestamp
+ *
+ * @param error error message
+ * @param pumpId pump id from history if available
+ * @param pumpType pump type like PumpType.ACCU_CHEK_COMBO
+ * @param pumpSerial pump serial number
+ **/
+ fun insertAnnouncement(error: String, pumpId: Long? = null, pumpType: PumpType, pumpSerial: String)
+}
\ No newline at end of file
diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/pump/PumpSyncImplementation.kt b/core/src/main/java/info/nightscout/androidaps/plugins/pump/PumpSyncImplementation.kt
new file mode 100644
index 0000000000..df3d5b2a9b
--- /dev/null
+++ b/core/src/main/java/info/nightscout/androidaps/plugins/pump/PumpSyncImplementation.kt
@@ -0,0 +1,102 @@
+package info.nightscout.androidaps.plugins.pump
+
+import info.nightscout.androidaps.data.DetailedBolusInfo
+import info.nightscout.androidaps.database.AppRepository
+import info.nightscout.androidaps.database.embedments.InterfaceIDs
+import info.nightscout.androidaps.database.entities.Bolus
+import info.nightscout.androidaps.database.entities.Carbs
+import info.nightscout.androidaps.database.entities.TherapyEvent
+import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampCarbsTransaction
+import info.nightscout.androidaps.database.transactions.InsertIfNewByTimestampTherapyEventTransaction
+import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction
+import info.nightscout.androidaps.database.transactions.SyncPumpBolusTransaction
+import info.nightscout.androidaps.interfaces.PumpSync
+import info.nightscout.androidaps.logging.AAPSLogger
+import info.nightscout.androidaps.logging.LTag
+import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
+import io.reactivex.disposables.CompositeDisposable
+import io.reactivex.rxkotlin.plusAssign
+import javax.inject.Inject
+
+class PumpSyncImplementation @Inject constructor(
+ private val aapsLogger: AAPSLogger,
+ private val repository: AppRepository
+) : PumpSync {
+
+ private val disposable = CompositeDisposable()
+
+ override fun addBolusWithTempId(timestamp: Long, amount: Double, driverId: Long, pumpType: PumpType, pumpSerial: String) {
+ TODO("Not yet implemented")
+ }
+
+ override fun syncBolusWithTempId(timestamp: Long, amount: Double, driverId: Long, pumpId: Long?, pumpType: PumpType, pumpSerial: String) {
+ TODO("Not yet implemented")
+ }
+
+ override fun syncBolusWithPumpId(timestamp: Long, amount: Double, type: DetailedBolusInfo.BolusType, pumpId: Long, pumpType: PumpType, pumpSerial: String) {
+ val bolus = Bolus(
+ timestamp = timestamp,
+ amount = amount,
+ type = type.toDBbBolusType(),
+ interfaceIDs_backing = InterfaceIDs(
+ pumpId = pumpId,
+ pumpType = pumpType.toDbPumpType(),
+ pumpSerial = pumpSerial
+ ),
+ isBasalInsulin = false
+ )
+ disposable += repository.runTransactionForResult(SyncPumpBolusTransaction(bolus))
+ .subscribe(
+ { result ->
+ result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted carbs $it") }
+ result.updated.forEach { aapsLogger.debug(LTag.DATABASE, "Updated carbs $it") }
+ },
+ { aapsLogger.error(LTag.DATABASE, "Error while saving carbs", it) }
+ )
+ }
+
+ override fun syncCarbsWithTimestamp(timestamp: Long, amount: Double, pumpId: Long?, pumpType: PumpType, pumpSerial: String) {
+ val carbs = Carbs(
+ timestamp = timestamp,
+ amount = amount,
+ duration = 0,
+ interfaceIDs_backing = InterfaceIDs(
+ pumpId = pumpId,
+ pumpType = pumpType.toDbPumpType(),
+ pumpSerial = pumpSerial)
+ )
+ disposable += repository.runTransactionForResult(InsertIfNewByTimestampCarbsTransaction(carbs))
+ .subscribe(
+ { result -> result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted carbs $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while saving carbs", it) }
+ )
+ }
+
+ override fun insertTherapyEventIfNewWithTimestamp(timestamp: Long, type: DetailedBolusInfo.EventType, note: String?, pumpId: Long?, pumpType: PumpType, pumpSerial: String) {
+ val therapyEvent = TherapyEvent(
+ timestamp = timestamp,
+ type = type.toDBbEventType(),
+ duration = 0,
+ note = null,
+ enteredBy = "AndroidAPS",
+ glucose = null,
+ glucoseType = null,
+ glucoseUnit = TherapyEvent.GlucoseUnit.MGDL,
+ interfaceIDs_backing = InterfaceIDs(
+ pumpId = pumpId,
+ pumpType = pumpType.toDbPumpType(),
+ pumpSerial = pumpSerial)
+ )
+ disposable += repository.runTransactionForResult(InsertIfNewByTimestampTherapyEventTransaction(therapyEvent))
+ .subscribe(
+ { result -> result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted therapy event $it") } },
+ { aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", it) }
+ )
+ }
+
+ override fun insertAnnouncement(error: String, pumpId: Long?, pumpType: PumpType, pumpSerial: String) {
+ disposable += repository.runTransaction(InsertTherapyEventAnnouncementTransaction(error, pumpId, pumpType.toDbPumpType(), pumpSerial))
+ .subscribe()
+ }
+
+}
\ No newline at end of file
diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.kt b/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.kt
index 23d825f179..b00427a8fe 100644
--- a/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.kt
+++ b/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.kt
@@ -1,6 +1,7 @@
package info.nightscout.androidaps.plugins.pump.common.defs
import info.nightscout.androidaps.core.R
+import info.nightscout.androidaps.database.embedments.InterfaceIDs
import info.nightscout.androidaps.plugins.common.ManufacturerType
import info.nightscout.androidaps.plugins.pump.common.data.DoseSettings
import info.nightscout.androidaps.utils.Round
@@ -160,6 +161,8 @@ enum class PumpType {
baseBasalStep = 0.01,
baseBasalSpecialSteps = null,
pumpCapability = PumpCapability.DanaWithHistoryCapabilities),
+ DANA_RS_KOREAN(description = "DanaRSKorean", model = "DanaRSKorean", parent = DANA_RS),
+ DANA_I(description = "DanaI", model = "DanaI", parent = DANA_RS),
DANA_RV2(description = "DanaRv2", model = "DanaRv2", parent = DANA_RS),
OMNIPOD_EROS(description = "Omnipod Eros",
manufacturer = ManufacturerType.Insulet,
@@ -275,6 +278,7 @@ enum class PumpType {
tbrSettings = DoseSettings(1.0, 15, 24 * 60, 0.0, 500.0),
extendedBolusSettings = DoseSettings(0.1, 15, 12 * 60, 0.1),
pumpCapability = PumpCapability.MDI),
+
// Not real pump. Used for User as a source
USER(description = "USER",
manufacturer = ManufacturerType.AndroidAPS,
@@ -408,4 +412,38 @@ enum class PumpType {
return Round.roundTo(min(basalAmount, tSettings.maxDose), baseBasalSpecialSteps?.getStepSizeForAmount(basalAmount)
?: baseBasalStep)
}
+
+ fun toDbPumpType(): InterfaceIDs.PumpType =
+ when (this) {
+ GENERIC_AAPS -> InterfaceIDs.PumpType.GENERIC_AAPS
+ CELLNOVO -> InterfaceIDs.PumpType.CELLNOVO
+ ACCU_CHEK_COMBO -> InterfaceIDs.PumpType.ACCU_CHEK_COMBO
+ ACCU_CHEK_SPIRIT -> InterfaceIDs.PumpType.ACCU_CHEK_SPIRIT
+ ACCU_CHEK_INSIGHT -> InterfaceIDs.PumpType.ACCU_CHEK_INSIGHT
+ ACCU_CHEK_INSIGHT_BLUETOOTH -> InterfaceIDs.PumpType.ACCU_CHEK_INSIGHT_BLUETOOTH
+ ACCU_CHEK_SOLO -> InterfaceIDs.PumpType.ACCU_CHEK_SOLO
+ ANIMAS_VIBE -> InterfaceIDs.PumpType.ANIMAS_VIBE
+ ANIMAS_PING -> InterfaceIDs.PumpType.ANIMAS_PING
+ DANA_R -> InterfaceIDs.PumpType.DANA_R
+ DANA_R_KOREAN -> InterfaceIDs.PumpType.DANA_R_KOREAN
+ DANA_RS -> InterfaceIDs.PumpType.DANA_RS
+ DANA_RS_KOREAN -> InterfaceIDs.PumpType.DANA_RS_KOREAN
+ DANA_RV2 -> InterfaceIDs.PumpType.DANA_RV2
+ DANA_I -> InterfaceIDs.PumpType.DANA_I
+ OMNIPOD_EROS -> InterfaceIDs.PumpType.OMNIPOD_EROS
+ OMNIPOD_DASH -> InterfaceIDs.PumpType.OMNIPOD_DASH
+ MEDTRONIC_512_712 -> InterfaceIDs.PumpType.MEDTRONIC_512_517
+ MEDTRONIC_515_715 -> InterfaceIDs.PumpType.MEDTRONIC_515_715
+ MEDTRONIC_522_722 -> InterfaceIDs.PumpType.MEDTRONIC_522_722
+ MEDTRONIC_523_723_REVEL -> InterfaceIDs.PumpType.MEDTRONIC_523_723_REVEL
+ MEDTRONIC_554_754_VEO -> InterfaceIDs.PumpType.MEDTRONIC_554_754_VEO
+ MEDTRONIC_640G -> InterfaceIDs.PumpType.MEDTRONIC_640G
+ TANDEM_T_SLIM -> InterfaceIDs.PumpType.TANDEM_T_SLIM
+ TANDEM_T_SLIM_G4 -> InterfaceIDs.PumpType.TANDEM_T_SLIM_G4
+ TANDEM_T_FLEX -> InterfaceIDs.PumpType.TANDEM_T_FLEX
+ TANDEM_T_SLIM_X2 -> InterfaceIDs.PumpType.TANDEM_T_SLIM_X2
+ YPSOPUMP -> InterfaceIDs.PumpType.YPSOPUMP
+ MDI -> InterfaceIDs.PumpType.MDI
+ USER -> InterfaceIDs.PumpType.USER
+ }
}
\ No newline at end of file
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/extensions/BolusCalculatorResultExtension.kt b/core/src/main/java/info/nightscout/androidaps/utils/extensions/BolusCalculatorResultExtension.kt
index 2fd06b077c..64a7cdf38c 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/extensions/BolusCalculatorResultExtension.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/extensions/BolusCalculatorResultExtension.kt
@@ -2,11 +2,9 @@ package info.nightscout.androidaps.utils.extensions
import com.google.gson.Gson
import info.nightscout.androidaps.Constants
-import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.database.entities.BolusCalculatorResult
import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.utils.DateUtil
-import org.json.JSONException
import org.json.JSONObject
fun BolusCalculatorResult.toJson(): JSONObject =
@@ -14,11 +12,10 @@ fun BolusCalculatorResult.toJson(): JSONObject =
.put("eventType", TherapyEvent.Type.BOLUS_WIZARD)
.put("created_at", DateUtil.toISOString(timestamp))
.put("bolusCalculatorResult", Gson().toJson(this))
- .put("date", timestamp).also {
- if (glucoseValue != null) {
- it.put("glucose", glucoseValue)
- it.put("units", Constants.MGDL)
- }
- if (note != null) it.put("notes", note)
+ .put("date", timestamp)
+ .put("glucose", glucoseValue)
+ .put("units", Constants.MGDL)
+ .put("notes", note)
+ .also {
if (interfaceIDs.nightscoutId != null) it.put("_id", interfaceIDs.nightscoutId)
}
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/extensions/FoodExtension.kt b/core/src/main/java/info/nightscout/androidaps/utils/extensions/FoodExtension.kt
index b14afaff50..b3620fb71e 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/extensions/FoodExtension.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/extensions/FoodExtension.kt
@@ -38,7 +38,7 @@ fun foodFromJson(jsonObject: JSONObject): Food? {
return null
}
-fun Food.toJson(units: String): JSONObject =
+fun Food.toJson(): JSONObject =
JSONObject()
.put("type", "food")
.put("name", name)
diff --git a/core/src/main/java/info/nightscout/androidaps/utils/extensions/TemporaryTargetExtension.kt b/core/src/main/java/info/nightscout/androidaps/utils/extensions/TemporaryTargetExtension.kt
index 391c7ebf8d..b203453c77 100644
--- a/core/src/main/java/info/nightscout/androidaps/utils/extensions/TemporaryTargetExtension.kt
+++ b/core/src/main/java/info/nightscout/androidaps/utils/extensions/TemporaryTargetExtension.kt
@@ -1,16 +1,10 @@
package info.nightscout.androidaps.utils.extensions
-import androidx.work.ListenableWorker
-import com.google.gson.Gson
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.data.Profile
-import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.TemporaryTarget
import info.nightscout.androidaps.database.entities.TherapyEvent
-import info.nightscout.androidaps.database.transactions.SyncTemporaryTargetTransaction
-import info.nightscout.androidaps.database.transactions.UpdateTemporaryTargetTransaction
-import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.JsonHelper
diff --git a/dana/src/main/java/info/nightscout/androidaps/dana/DanaPump.kt b/dana/src/main/java/info/nightscout/androidaps/dana/DanaPump.kt
index 2966a25807..430916d0d5 100644
--- a/dana/src/main/java/info/nightscout/androidaps/dana/DanaPump.kt
+++ b/dana/src/main/java/info/nightscout/androidaps/dana/DanaPump.kt
@@ -7,6 +7,7 @@ import info.nightscout.androidaps.db.Treatment
import info.nightscout.androidaps.interfaces.ProfileStore
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
+import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
import info.nightscout.androidaps.utils.T
import info.nightscout.androidaps.utils.sharedPreferences.SP
import org.joda.time.DateTime
@@ -19,9 +20,6 @@ import java.util.concurrent.TimeUnit
import javax.inject.Inject
import javax.inject.Singleton
-/**
- * Created by mike on 04.07.2016.
- */
@Singleton
class DanaPump @Inject constructor(
private val aapsLogger: AAPSLogger,
@@ -38,6 +36,7 @@ class DanaPump @Inject constructor(
NOPRIME(0x10);
companion object {
+
private val map = values().associateBy(ErrorState::code)
operator fun get(value: Int) = map[value]
}
@@ -286,9 +285,11 @@ class DanaPump @Inject constructor(
when (hwModel) {
0x01 -> "DanaR Korean"
0x03 ->
- if (protocol == 0x00) "DanaR old"
- else if (protocol == 0x02) "DanaR v2"
- else "DanaR" // 0x01 and 0x03 known
+ when (protocol) {
+ 0x00 -> "DanaR old"
+ 0x02 -> "DanaR v2"
+ else -> "DanaR" // 0x01 and 0x03 known
+ }
0x05 ->
if (protocol < 10) "DanaRS"
else "DanaRS v3"
@@ -297,7 +298,23 @@ class DanaPump @Inject constructor(
else -> "Unknown Dana pump"
}
+ fun pumpType(): PumpType =
+ when (hwModel) {
+ 0x01 -> PumpType.DANA_R_KOREAN
+ 0x03 ->
+ when (protocol) {
+ 0x00 -> PumpType.DANA_R
+ 0x02 -> PumpType.DANA_RV2
+ else -> PumpType.DANA_R // 0x01 and 0x03 known
+ }
+ 0x05 -> PumpType.DANA_RS
+ 0x06 -> PumpType.DANA_RS_KOREAN
+ 0x07 -> PumpType.DANA_I
+ else -> PumpType.DANA_R
+ }
+
companion object {
+
const val UNITS_MGDL = 0
const val UNITS_MMOL = 1
const val DELIVERY_PRIME = 0x01
diff --git a/danar/build.gradle b/danar/build.gradle
index 8275bcf881..09899f5540 100644
--- a/danar/build.gradle
+++ b/danar/build.gradle
@@ -17,5 +17,4 @@ android {
dependencies {
implementation project(':core')
implementation project(':dana')
- implementation project(':database')
}
\ No newline at end of file
diff --git a/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java b/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java
index 1fab52bbe3..e8bfd4fa91 100644
--- a/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java
+++ b/danar/src/main/java/info/nightscout/androidaps/danaRKorean/services/DanaRKoreanExecutionService.java
@@ -38,8 +38,6 @@ import info.nightscout.androidaps.danar.comm.MsgStatusTempBasal;
import info.nightscout.androidaps.danar.services.AbstractDanaRExecutionService;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
-import info.nightscout.androidaps.database.AppRepository;
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction;
import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.dialogs.BolusProgressDialog;
import info.nightscout.androidaps.events.EventInitializationChanged;
@@ -48,17 +46,18 @@ import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.interfaces.CommandQueueProvider;
import info.nightscout.androidaps.interfaces.ProfileFunction;
+import info.nightscout.androidaps.interfaces.PumpSync;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
+import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.queue.commands.Command;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.T;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
-import io.reactivex.disposables.CompositeDisposable;
public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService {
@Inject AAPSLogger aapsLogger;
@@ -72,9 +71,7 @@ public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService {
@Inject MessageHashTableRKorean messageHashTableRKorean;
@Inject ActivePluginProvider activePlugin;
@Inject ProfileFunction profileFunction;
- @Inject AppRepository repository;
-
- private final CompositeDisposable disposable = new CompositeDisposable();
+ @Inject PumpSync pumpSync;
public DanaRKoreanExecutionService() {
}
@@ -202,7 +199,7 @@ public class DanaRKoreanExecutionService extends AbstractDanaRExecutionService {
if (System.currentTimeMillis() > lastApproachingDailyLimit + 30 * 60 * 1000) {
Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, resourceHelper.gs(R.string.approachingdailylimit), Notification.URGENT);
rxBus.send(new EventNewNotification(reportFail));
- disposable.add(repository.runTransaction(new InsertTherapyEventAnnouncementTransaction(resourceHelper.gs(R.string.approachingdailylimit) + ": " + danaPump.getDailyTotalUnits() + "/" + danaPump.getMaxDailyTotalUnits() + "U")).subscribe());
+ pumpSync.insertAnnouncement(resourceHelper.gs(R.string.approachingdailylimit) + ": " + danaPump.getDailyTotalUnits() + "/" + danaPump.getMaxDailyTotalUnits() + "U", null, PumpType.DANA_R_KOREAN, danaRKoreanPlugin.serialNumber());
lastApproachingDailyLimit = System.currentTimeMillis();
}
}
diff --git a/danar/src/main/java/info/nightscout/androidaps/danaRv2/comm/MsgHistoryEvents_v2.kt b/danar/src/main/java/info/nightscout/androidaps/danaRv2/comm/MsgHistoryEvents_v2.kt
index f6bc47e6b9..83fe642c80 100644
--- a/danar/src/main/java/info/nightscout/androidaps/danaRv2/comm/MsgHistoryEvents_v2.kt
+++ b/danar/src/main/java/info/nightscout/androidaps/danaRv2/comm/MsgHistoryEvents_v2.kt
@@ -4,7 +4,6 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.danar.R
import info.nightscout.androidaps.danar.comm.MessageBase
import info.nightscout.androidaps.data.DetailedBolusInfo
-import info.nightscout.androidaps.database.embedments.InterfaceIDs
import info.nightscout.androidaps.db.ExtendedBolus
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.db.TemporaryBasal
diff --git a/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java b/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java
index 1f28187713..ada2d39a22 100644
--- a/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java
+++ b/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java
@@ -52,8 +52,6 @@ import info.nightscout.androidaps.danar.comm.MsgStatusBasic;
import info.nightscout.androidaps.danar.services.AbstractDanaRExecutionService;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
-import info.nightscout.androidaps.database.AppRepository;
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction;
import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.dialogs.BolusProgressDialog;
import info.nightscout.androidaps.events.EventInitializationChanged;
@@ -64,6 +62,7 @@ import info.nightscout.androidaps.interfaces.CommandQueueProvider;
import info.nightscout.androidaps.interfaces.ConfigBuilderInterface;
import info.nightscout.androidaps.interfaces.ProfileFunction;
import info.nightscout.androidaps.interfaces.PumpInterface;
+import info.nightscout.androidaps.interfaces.PumpSync;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
@@ -72,13 +71,13 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotifi
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress;
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
import info.nightscout.androidaps.plugins.pump.common.bolusInfo.DetailedBolusInfoStorage;
+import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.queue.commands.Command;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.T;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
-import io.reactivex.disposables.CompositeDisposable;
public class DanaRv2ExecutionService extends AbstractDanaRExecutionService {
@Inject HasAndroidInjector injector;
@@ -98,12 +97,11 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService {
@Inject DetailedBolusInfoStorage detailedBolusInfoStorage;
@Inject ActivePluginProvider activePluginProvider;
@Inject ProfileFunction profileFunction;
- @Inject AppRepository repository;
+ @Inject PumpSync pumpSync;
@Inject SP sp;
@Inject DateUtil dateUtil;
private long lastHistoryFetched = 0;
- private final CompositeDisposable disposable = new CompositeDisposable();
public DanaRv2ExecutionService() {
}
@@ -251,7 +249,7 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService {
if (System.currentTimeMillis() > lastApproachingDailyLimit + 30 * 60 * 1000) {
Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, resourceHelper.gs(R.string.approachingdailylimit), Notification.URGENT);
rxBus.send(new EventNewNotification(reportFail));
- disposable.add(repository.runTransaction(new InsertTherapyEventAnnouncementTransaction(resourceHelper.gs(R.string.approachingdailylimit) + ": " + danaPump.getDailyTotalUnits() + "/" + danaPump.getMaxDailyTotalUnits() + "U")).subscribe());
+ pumpSync.insertAnnouncement(resourceHelper.gs(R.string.approachingdailylimit) + ": " + danaPump.getDailyTotalUnits() + "/" + danaPump.getMaxDailyTotalUnits() + "U", null, PumpType.DANA_R_KOREAN, danaRKoreanPlugin.serialNumber());
lastApproachingDailyLimit = System.currentTimeMillis();
}
}
diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.java b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.java
index efc4a72bae..aab2402847 100644
--- a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.java
+++ b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MessageBase.java
@@ -17,21 +17,19 @@ import info.nightscout.androidaps.dana.DanaPump;
import info.nightscout.androidaps.danaRKorean.DanaRKoreanPlugin;
import info.nightscout.androidaps.danaRv2.DanaRv2Plugin;
import info.nightscout.androidaps.danar.DanaRPlugin;
-import info.nightscout.androidaps.database.AppRepository;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.interfaces.CommandQueueProvider;
import info.nightscout.androidaps.interfaces.ConfigBuilderInterface;
import info.nightscout.androidaps.interfaces.DatabaseHelperInterface;
+import info.nightscout.androidaps.interfaces.PumpSync;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
-import info.nightscout.androidaps.plugins.general.nsclient.NSUpload;
import info.nightscout.androidaps.plugins.pump.common.bolusInfo.DetailedBolusInfoStorage;
import info.nightscout.androidaps.utils.CRC;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
-import io.reactivex.disposables.CompositeDisposable;
/*
* 00 01 02 03 04 05 06
@@ -53,12 +51,10 @@ public class MessageBase {
@Inject public CommandQueueProvider commandQueue;
@Inject public DetailedBolusInfoStorage detailedBolusInfoStorage;
@Inject public ConstraintChecker constraintChecker;
- @Inject public AppRepository repository;
+ @Inject public PumpSync pumpSync;
@Inject public DatabaseHelperInterface databaseHelper;
HasAndroidInjector injector;
- final CompositeDisposable disposable = new CompositeDisposable();
-
public byte[] buffer = new byte[512];
private int position = 6;
@@ -67,7 +63,7 @@ public class MessageBase {
public MessageBase(HasAndroidInjector injector) {
injector.androidInjector().inject(this);
- this. injector = injector;
+ this.injector = injector;
}
public void SetCommand(int cmd) {
diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgError.kt b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgError.kt
index 4d1052e57c..af635686a0 100644
--- a/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgError.kt
+++ b/danar/src/main/java/info/nightscout/androidaps/danar/comm/MsgError.kt
@@ -2,10 +2,8 @@ package info.nightscout.androidaps.danar.comm
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.danar.R
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress
-import io.reactivex.rxkotlin.plusAssign
class MsgError(
injector: HasAndroidInjector
@@ -36,6 +34,6 @@ class MsgError(
failed = false
}
aapsLogger.debug(LTag.PUMPCOMM, "Error detected: $errorString")
- disposable += repository.runTransaction(InsertTherapyEventAnnouncementTransaction(errorString)).subscribe();
+ pumpSync.insertAnnouncement(errorString, null, danaPump.pumpType(), danaPump.serialNumber)
}
}
\ No newline at end of file
diff --git a/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java b/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java
index 661f62f718..c6f523780f 100644
--- a/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java
+++ b/danar/src/main/java/info/nightscout/androidaps/danar/services/DanaRExecutionService.java
@@ -45,48 +45,41 @@ import info.nightscout.androidaps.danar.comm.MsgStatusBolusExtended;
import info.nightscout.androidaps.danar.comm.MsgStatusTempBasal;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
-import info.nightscout.androidaps.database.AppRepository;
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction;
import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.dialogs.BolusProgressDialog;
import info.nightscout.androidaps.events.EventInitializationChanged;
import info.nightscout.androidaps.events.EventProfileNeedsUpdate;
import info.nightscout.androidaps.events.EventPumpStatusChanged;
-import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.interfaces.CommandQueueProvider;
import info.nightscout.androidaps.interfaces.ProfileFunction;
+import info.nightscout.androidaps.interfaces.PumpSync;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
-import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker;
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.general.overview.events.EventOverviewBolusProgress;
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
+import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.queue.Callback;
import info.nightscout.androidaps.queue.commands.Command;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
-import io.reactivex.disposables.CompositeDisposable;
public class DanaRExecutionService extends AbstractDanaRExecutionService {
@Inject AAPSLogger aapsLogger;
@Inject RxBusWrapper rxBus;
@Inject ResourceHelper resourceHelper;
- @Inject ConstraintChecker constraintChecker;
@Inject DanaPump danaPump;
@Inject DanaRPlugin danaRPlugin;
@Inject DanaRKoreanPlugin danaRKoreanPlugin;
@Inject CommandQueueProvider commandQueue;
@Inject MessageHashTableR messageHashTableR;
- @Inject ActivePluginProvider activePlugin;
@Inject ProfileFunction profileFunction;
- @Inject AppRepository repository;
+ @Inject PumpSync pumpSync;
@Inject SP sp;
@Inject HasAndroidInjector injector;
- private final CompositeDisposable disposable = new CompositeDisposable();
-
public DanaRExecutionService() {
}
@@ -215,7 +208,7 @@ public class DanaRExecutionService extends AbstractDanaRExecutionService {
if (System.currentTimeMillis() > lastApproachingDailyLimit + 30 * 60 * 1000) {
Notification reportFail = new Notification(Notification.APPROACHING_DAILY_LIMIT, resourceHelper.gs(R.string.approachingdailylimit), Notification.URGENT);
rxBus.send(new EventNewNotification(reportFail));
- disposable.add(repository.runTransaction(new InsertTherapyEventAnnouncementTransaction(resourceHelper.gs(R.string.approachingdailylimit) + ": " + danaPump.getDailyTotalUnits() + "/" + danaPump.getMaxDailyTotalUnits() + "U")).subscribe());
+ pumpSync.insertAnnouncement(resourceHelper.gs(R.string.approachingdailylimit) + ": " + danaPump.getDailyTotalUnits() + "/" + danaPump.getMaxDailyTotalUnits() + "U", null, PumpType.DANA_R_KOREAN, danaRKoreanPlugin.serialNumber());
lastApproachingDailyLimit = System.currentTimeMillis();
}
}
diff --git a/danars/build.gradle b/danars/build.gradle
index f1437136ca..9ac3aa3f9a 100644
--- a/danars/build.gradle
+++ b/danars/build.gradle
@@ -23,5 +23,4 @@ android {
dependencies {
implementation project(':core')
implementation project(':dana')
- implementation project(':database')
}
\ No newline at end of file
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_APS_History_Events.kt b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_APS_History_Events.kt
index cf435edc66..5c01008eb3 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_APS_History_Events.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_APS_History_Events.kt
@@ -5,14 +5,12 @@ import info.nightscout.androidaps.dana.DanaPump
import info.nightscout.androidaps.danars.R
import info.nightscout.androidaps.danars.encryption.BleEncryption
import info.nightscout.androidaps.data.DetailedBolusInfo
-import info.nightscout.androidaps.database.AppRepository
-import info.nightscout.androidaps.database.entities.TherapyEvent
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction
import info.nightscout.androidaps.db.ExtendedBolus
import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.db.TemporaryBasal
import info.nightscout.androidaps.events.EventPumpStatusChanged
import info.nightscout.androidaps.interfaces.ActivePluginProvider
+import info.nightscout.androidaps.interfaces.PumpSync
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.pump.common.bolusInfo.DetailedBolusInfoStorage
@@ -20,8 +18,6 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpType
import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
-import io.reactivex.disposables.CompositeDisposable
-import io.reactivex.rxkotlin.plusAssign
import org.joda.time.DateTime
import org.joda.time.DateTimeZone
import javax.inject.Inject
@@ -37,9 +33,7 @@ open class DanaRS_Packet_APS_History_Events(
@Inject lateinit var danaPump: DanaPump
@Inject lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
@Inject lateinit var sp: SP
- @Inject lateinit var repository: AppRepository
-
- private val disposable = CompositeDisposable()
+ @Inject lateinit var pumpSync: PumpSync
init {
opCode = BleEncryption.DANAR_PACKET__OPCODE__APS_HISTORY_EVENTS
@@ -181,14 +175,12 @@ open class DanaRS_Packet_APS_History_Events(
DanaPump.REFILL -> {
aapsLogger.debug(LTag.PUMPCOMM, "[" + id + "] " + "EVENT REFILL (" + recordCode + ") " + dateUtil.dateAndTimeString(datetime) + " (" + datetime + ")" + " Amount: " + param1 / 100.0 + "U")
if (sp.getBoolean(R.string.key_rs_loginsulinchange, true))
- disposable += repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(
+ pumpSync.insertTherapyEventIfNewWithTimestamp(
timestamp = datetime,
- type = TherapyEvent.Type.INSULIN_CHANGE,
- note = resourceHelper.gs(R.string.danarspump),
- glucoseUnit = TherapyEvent.GlucoseUnit.MGDL
- )).subscribe(
- { result -> result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted therapy event $it") } },
- { aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", it) }
+ type = DetailedBolusInfo.EventType.INSULIN_CHANGE,
+ pumpId = pumpId,
+ pumpType = danaPump.pumpType(),
+ pumpSerial = danaPump.serialNumber
)
status = "REFILL " + dateUtil.timeString(datetime)
}
@@ -218,14 +210,12 @@ open class DanaRS_Packet_APS_History_Events(
DanaPump.PRIMECANNULA -> {
aapsLogger.debug(LTag.PUMPCOMM, "[" + id + "] " + "EVENT PRIMECANNULA(" + recordCode + ") " + dateUtil.dateAndTimeString(datetime) + " (" + datetime + ")" + " Amount: " + param1 / 100.0 + "U")
if (sp.getBoolean(R.string.key_rs_logcanulachange, true))
- disposable += repository.runTransactionForResult(InsertTherapyEventIfNewTransaction(
+ pumpSync.insertTherapyEventIfNewWithTimestamp(
timestamp = datetime,
- type = TherapyEvent.Type.CANNULA_CHANGE,
- note = resourceHelper.gs(R.string.danarspump),
- glucoseUnit = TherapyEvent.GlucoseUnit.MGDL
- )).subscribe(
- { result -> result.inserted.forEach { aapsLogger.debug(LTag.DATABASE, "Inserted therapy event $it") } },
- { aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", it) }
+ type = DetailedBolusInfo.EventType.CANNULA_CHANGE,
+ pumpId = pumpId,
+ pumpType = danaPump.pumpType(),
+ pumpSerial = danaPump.serialNumber
)
status = "PRIMECANNULA " + dateUtil.timeString(datetime)
}
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Notify_Alarm.kt b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Notify_Alarm.kt
index feb8114dbc..f49f25010a 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Notify_Alarm.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/comm/DanaRS_Packet_Notify_Alarm.kt
@@ -1,17 +1,15 @@
package info.nightscout.androidaps.danars.comm
import dagger.android.HasAndroidInjector
+import info.nightscout.androidaps.dana.DanaPump
import info.nightscout.androidaps.danars.R
import info.nightscout.androidaps.danars.encryption.BleEncryption
-import info.nightscout.androidaps.database.AppRepository
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction
+import info.nightscout.androidaps.interfaces.PumpSync
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
import info.nightscout.androidaps.utils.resources.ResourceHelper
-import io.reactivex.disposables.CompositeDisposable
-import io.reactivex.rxkotlin.plusAssign
import javax.inject.Inject
class DanaRS_Packet_Notify_Alarm(
@@ -20,9 +18,8 @@ class DanaRS_Packet_Notify_Alarm(
@Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var resourceHelper: ResourceHelper
- @Inject lateinit var repository: AppRepository
-
- private val disposable = CompositeDisposable()
+ @Inject lateinit var pumpSync: PumpSync
+ @Inject lateinit var danaPump: DanaPump
init {
type = BleEncryption.DANAR_PACKET__TYPE_NOTIFY
@@ -69,7 +66,7 @@ class DanaRS_Packet_Notify_Alarm(
}
val notification = Notification(Notification.USER_MESSAGE, errorString, Notification.URGENT)
rxBus.send(EventNewNotification(notification))
- disposable += repository.runTransaction(InsertTherapyEventAnnouncementTransaction(errorString)).subscribe()
+ pumpSync.insertAnnouncement(errorString, null, danaPump.pumpType(), danaPump.serialNumber)
}
override fun getFriendlyName(): String {
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/services/BLEComm.kt b/danars/src/main/java/info/nightscout/androidaps/danars/services/BLEComm.kt
index 86d2f80b44..3661590e90 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/services/BLEComm.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/services/BLEComm.kt
@@ -16,9 +16,8 @@ import info.nightscout.androidaps.danars.comm.DanaRS_Packet
import info.nightscout.androidaps.danars.comm.DanaRS_Packet_Etc_Keep_Connection
import info.nightscout.androidaps.danars.encryption.BleEncryption
import info.nightscout.androidaps.danars.events.EventDanaRSPairingSuccess
-import info.nightscout.androidaps.database.AppRepository
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction
import info.nightscout.androidaps.events.EventPumpStatusChanged
+import info.nightscout.androidaps.interfaces.PumpSync
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
@@ -32,8 +31,6 @@ import info.nightscout.androidaps.utils.extensions.notify
import info.nightscout.androidaps.utils.extensions.waitMillis
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
-import io.reactivex.disposables.CompositeDisposable
-import io.reactivex.rxkotlin.plusAssign
import java.util.*
import java.util.concurrent.ScheduledFuture
import javax.inject.Inject
@@ -51,7 +48,7 @@ class BLEComm @Inject internal constructor(
private val danaPump: DanaPump,
private val danaRSPlugin: DanaRSPlugin,
private val bleEncryption: BleEncryption,
- private val repository: AppRepository
+ private val pumpSync: PumpSync
) {
companion object {
@@ -64,8 +61,6 @@ class BLEComm @Inject internal constructor(
private const val PACKET_END_BYTE = 0x5A.toByte()
}
- private val disposable = CompositeDisposable()
-
private var scheduledDisconnection: ScheduledFuture<*>? = null
private var processedMessage: DanaRS_Packet? = null
private val mSendQueue = ArrayList()
@@ -493,7 +488,7 @@ class BLEComm @Inject internal constructor(
aapsLogger.debug(LTag.PUMPBTCOMM, "<<<<< " + "ENCRYPTION__PUMP_CHECK (PUMP)" + " " + DanaRS_Packet.toHexString(decryptedBuffer))
mSendQueue.clear()
rxBus.send(EventPumpStatusChanged(EventPumpStatusChanged.Status.DISCONNECTED, resourceHelper.gs(R.string.pumperror)))
- disposable += repository.runTransaction(InsertTherapyEventAnnouncementTransaction(resourceHelper.gs(R.string.pumperror))).subscribe()
+ pumpSync.insertAnnouncement(resourceHelper.gs(R.string.pumperror), null, danaPump.pumpType(), danaPump.serialNumber)
val n = Notification(Notification.PUMP_ERROR, resourceHelper.gs(R.string.pumperror), Notification.URGENT)
rxBus.send(EventNewNotification(n))
// response BUSY: error status
diff --git a/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt b/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt
index 5acbac1937..5ce7fb1407 100644
--- a/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt
+++ b/danars/src/main/java/info/nightscout/androidaps/danars/services/DanaRSService.kt
@@ -18,8 +18,6 @@ import info.nightscout.androidaps.danars.R
import info.nightscout.androidaps.danars.comm.*
import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.data.PumpEnactResult
-import info.nightscout.androidaps.database.AppRepository
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction
import info.nightscout.androidaps.db.Treatment
import info.nightscout.androidaps.dialogs.BolusProgressDialog
import info.nightscout.androidaps.events.EventAppExit
@@ -29,6 +27,7 @@ import info.nightscout.androidaps.events.EventPumpStatusChanged
import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.interfaces.CommandQueueProvider
import info.nightscout.androidaps.interfaces.ProfileFunction
+import info.nightscout.androidaps.interfaces.PumpSync
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
@@ -46,7 +45,6 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import info.nightscout.androidaps.utils.sharedPreferences.SP
import io.reactivex.disposables.CompositeDisposable
-import io.reactivex.rxkotlin.plusAssign
import org.joda.time.DateTime
import org.joda.time.DateTimeZone
import java.util.concurrent.TimeUnit
@@ -73,7 +71,7 @@ class DanaRSService : DaggerService() {
@Inject lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
@Inject lateinit var bleComm: BLEComm
@Inject lateinit var fabricPrivacy: FabricPrivacy
- @Inject lateinit var repository: AppRepository
+ @Inject lateinit var pumpSync: PumpSync
@Inject lateinit var dateUtil: DateUtil
private val disposable = CompositeDisposable()
@@ -208,7 +206,7 @@ class DanaRSService : DaggerService() {
if (System.currentTimeMillis() > lastApproachingDailyLimit + 30 * 60 * 1000) {
val reportFail = Notification(Notification.APPROACHING_DAILY_LIMIT, resourceHelper.gs(R.string.approachingdailylimit), Notification.URGENT)
rxBus.send(EventNewNotification(reportFail))
- disposable += repository.runTransaction(InsertTherapyEventAnnouncementTransaction(resourceHelper.gs(R.string.approachingdailylimit) + ": " + danaPump.dailyTotalUnits + "/" + danaPump.maxDailyTotalUnits + "U")).subscribe()
+ pumpSync.insertAnnouncement(resourceHelper.gs(R.string.approachingdailylimit) + ": " + danaPump.dailyTotalUnits + "/" + danaPump.maxDailyTotalUnits + "U", null, danaPump.pumpType(), danaPump.serialNumber)
lastApproachingDailyLimit = System.currentTimeMillis()
}
}
diff --git a/database/src/main/java/info/nightscout/androidaps/database/AppRepository.kt b/database/src/main/java/info/nightscout/androidaps/database/AppRepository.kt
index 2fe99bd818..7f142e5e34 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/AppRepository.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/AppRepository.kt
@@ -1,5 +1,6 @@
package info.nightscout.androidaps.database
+import info.nightscout.androidaps.database.embedments.InterfaceIDs
import info.nightscout.androidaps.database.entities.*
import info.nightscout.androidaps.database.interfaces.DBEntry
import info.nightscout.androidaps.database.transactions.Transaction
@@ -277,6 +278,9 @@ open class AppRepository @Inject internal constructor(
database.bolusDao.getModifiedFrom(lastId)
.subscribeOn(Schedulers.io())
+ fun findBolusByPumpIds(pumpId: Long, pumpType: InterfaceIDs.PumpType, pumpSerial: String): Bolus? =
+ database.bolusDao.findByPumpIds(pumpId, pumpType, pumpSerial)
+
fun getBolusesDataFromTime(timestamp: Long, ascending: Boolean): Single> =
database.bolusDao.getBolusesFromTime(timestamp)
.map { if (!ascending) it.reversed() else it }
@@ -314,6 +318,9 @@ open class AppRepository @Inject internal constructor(
database.carbsDao.getModifiedFrom(lastId)
.subscribeOn(Schedulers.io())
+ fun getCarbsByTimestamp(timestamp: Long): Carbs? =
+ database.carbsDao.findByTimestamp(timestamp)
+
fun getCarbsDataFromTime(timestamp: Long, ascending: Boolean): Single> =
database.carbsDao.getCarbsFromTime(timestamp)
.map { if (!ascending) it.reversed() else it }
diff --git a/database/src/main/java/info/nightscout/androidaps/database/daos/BolusDao.kt b/database/src/main/java/info/nightscout/androidaps/database/daos/BolusDao.kt
index 8744a4426a..4c9aa1f31a 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/daos/BolusDao.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/daos/BolusDao.kt
@@ -3,6 +3,7 @@ package info.nightscout.androidaps.database.daos
import androidx.room.Dao
import androidx.room.Query
import info.nightscout.androidaps.database.TABLE_BOLUSES
+import info.nightscout.androidaps.database.embedments.InterfaceIDs
import info.nightscout.androidaps.database.entities.Bolus
import io.reactivex.Maybe
import io.reactivex.Single
@@ -17,6 +18,9 @@ internal interface BolusDao : TraceableDao {
@Query("DELETE FROM $TABLE_BOLUSES")
override fun deleteAllEntries()
+ @Query("SELECT * FROM $TABLE_BOLUSES WHERE pumpId = :pumpId AND pumpType = :pumpType AND pumpSerial = :pumpSerial AND referenceId IS NULL")
+ fun findByPumpIds(pumpId: Long, pumpType: InterfaceIDs.PumpType, pumpSerial: String): Bolus?
+
@Query("SELECT * FROM $TABLE_BOLUSES WHERE isValid = 1 AND timestamp >= :timestamp AND referenceId IS NULL ORDER BY id DESC")
fun getBolusesFromTime(timestamp: Long): Single>
diff --git a/database/src/main/java/info/nightscout/androidaps/database/daos/CarbsDao.kt b/database/src/main/java/info/nightscout/androidaps/database/daos/CarbsDao.kt
index 18d31a712f..89eaf47b94 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/daos/CarbsDao.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/daos/CarbsDao.kt
@@ -3,7 +3,10 @@ package info.nightscout.androidaps.database.daos
import androidx.room.Dao
import androidx.room.Query
import info.nightscout.androidaps.database.TABLE_CARBS
+import info.nightscout.androidaps.database.TABLE_THERAPY_EVENTS
+import info.nightscout.androidaps.database.embedments.InterfaceIDs
import info.nightscout.androidaps.database.entities.Carbs
+import info.nightscout.androidaps.database.entities.TherapyEvent
import io.reactivex.Maybe
import io.reactivex.Single
@@ -17,6 +20,9 @@ internal interface CarbsDao : TraceableDao {
@Query("DELETE FROM $TABLE_CARBS")
override fun deleteAllEntries()
+ @Query("SELECT * FROM $TABLE_CARBS WHERE timestamp = :timestamp AND referenceId IS NULL")
+ fun findByTimestamp(timestamp: Long): Carbs?
+
@Query("SELECT * FROM $TABLE_CARBS WHERE isValid = 1 AND timestamp >= :timestamp AND referenceId IS NULL ORDER BY id DESC")
fun getCarbsFromTime(timestamp: Long): Single>
diff --git a/database/src/main/java/info/nightscout/androidaps/database/embedments/InterfaceIDs.kt b/database/src/main/java/info/nightscout/androidaps/database/embedments/InterfaceIDs.kt
index 0f3d10483d..c9de90aa4b 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/embedments/InterfaceIDs.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/embedments/InterfaceIDs.kt
@@ -23,7 +23,9 @@ data class InterfaceIDs(
DANA_R,
DANA_R_KOREAN,
DANA_RV2,
+ DANA_I,
DANA_RS,
+ DANA_RS_KOREAN,
OMNIPOD_EROS,
OMNIPOD_DASH,
MEDTRONIC_512_517,
diff --git a/database/src/main/java/info/nightscout/androidaps/database/entities/TherapyEvent.kt b/database/src/main/java/info/nightscout/androidaps/database/entities/TherapyEvent.kt
index 57222ce9f4..15e7a1a7fd 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/entities/TherapyEvent.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/entities/TherapyEvent.kt
@@ -26,7 +26,7 @@ data class TherapyEvent(
override var isValid: Boolean = true,
override var referenceId: Long? = null,
@Embedded
- override var interfaceIDs_backing: InterfaceIDs? = InterfaceIDs(),
+ override var interfaceIDs_backing: InterfaceIDs? = null,
override var timestamp: Long,
override var utcOffset: Long = TimeZone.getDefault().getOffset(timestamp).toLong(),
override var duration: Long = 0,
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertIfNewByTimestampCarbsTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertIfNewByTimestampCarbsTransaction.kt
new file mode 100644
index 0000000000..9fed606fde
--- /dev/null
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertIfNewByTimestampCarbsTransaction.kt
@@ -0,0 +1,41 @@
+package info.nightscout.androidaps.database.transactions
+
+import info.nightscout.androidaps.database.embedments.InterfaceIDs
+import info.nightscout.androidaps.database.entities.Carbs
+
+/**
+ * Creates Carbs if record doesn't exist
+ */
+class InsertIfNewByTimestampCarbsTransaction(
+ private val carbs: Carbs
+) : Transaction() {
+
+ constructor(
+ timestamp: Long,
+ amount: Double,
+ duration: Long,
+ interfaceIDs_backing: InterfaceIDs? = null
+ ) : this(Carbs(
+ timestamp = timestamp,
+ amount = amount,
+ duration = duration,
+ interfaceIDs_backing = interfaceIDs_backing
+ ))
+
+ override fun run(): TransactionResult {
+ val result = TransactionResult()
+ val current = database.carbsDao.findByTimestamp(carbs.timestamp)
+ if (current == null) {
+ database.carbsDao.insertNewEntry(carbs)
+ result.inserted.add(carbs)
+ } else
+ result.existing.add(carbs)
+ return result
+ }
+
+ class TransactionResult {
+
+ val inserted = mutableListOf()
+ val existing = mutableListOf()
+ }
+}
\ No newline at end of file
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertTherapyEventIfNewTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertIfNewByTimestampTherapyEventTransaction.kt
similarity index 89%
rename from database/src/main/java/info/nightscout/androidaps/database/transactions/InsertTherapyEventIfNewTransaction.kt
rename to database/src/main/java/info/nightscout/androidaps/database/transactions/InsertIfNewByTimestampTherapyEventTransaction.kt
index b8946777ed..d283f0c6ca 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertTherapyEventIfNewTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertIfNewByTimestampTherapyEventTransaction.kt
@@ -2,9 +2,9 @@ package info.nightscout.androidaps.database.transactions
import info.nightscout.androidaps.database.entities.TherapyEvent
-class InsertTherapyEventIfNewTransaction(
+class InsertIfNewByTimestampTherapyEventTransaction(
val therapyEvent: TherapyEvent
-) : Transaction() {
+) : Transaction() {
constructor(timestamp: Long, type: TherapyEvent.Type, duration: Long = 0, note: String? = null, enteredBy: String? = null, glucose: Double? = null, glucoseType: TherapyEvent.MeterType? = null, glucoseUnit: TherapyEvent.GlucoseUnit) :
this(TherapyEvent(timestamp = timestamp, type = type, duration = duration, note = note, enteredBy = enteredBy, glucose = glucose, glucoseType = glucoseType, glucoseUnit = glucoseUnit))
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertTherapyEventAnnouncementTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertTherapyEventAnnouncementTransaction.kt
index 2dfec00090..990b8b1c40 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertTherapyEventAnnouncementTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/InsertTherapyEventAnnouncementTransaction.kt
@@ -1,13 +1,28 @@
package info.nightscout.androidaps.database.transactions
+import info.nightscout.androidaps.database.embedments.InterfaceIDs
import info.nightscout.androidaps.database.entities.TherapyEvent
class InsertTherapyEventAnnouncementTransaction(
val therapyEvent: TherapyEvent
) : Transaction() {
- constructor(error: String) :
- this(TherapyEvent(timestamp = System.currentTimeMillis(), type = TherapyEvent.Type.ANNOUNCEMENT, duration = 0, note = error, enteredBy = "AndroidAPS", glucose = null, glucoseType = null, glucoseUnit = TherapyEvent.GlucoseUnit.MGDL))
+ constructor(error: String, pumpId: Long? = null, pumpType: InterfaceIDs.PumpType? = null, pumpSerial: String? = null) :
+ this(
+ TherapyEvent(
+ timestamp = System.currentTimeMillis(),
+ type = TherapyEvent.Type.ANNOUNCEMENT,
+ duration = 0, note = error,
+ enteredBy = "AndroidAPS",
+ glucose = null,
+ glucoseType = null,
+ glucoseUnit = TherapyEvent.GlucoseUnit.MGDL,
+ interfaceIDs_backing = InterfaceIDs(
+ pumpId = pumpId,
+ pumpType = pumpType,
+ pumpSerial = pumpSerial)
+ )
+ )
override fun run(): TransactionResult {
val result = TransactionResult()
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateAAPSStartedTherapyEventTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateAAPSStartedTherapyEventTransaction.kt
index fb1d347a15..79d4ab3073 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateAAPSStartedTherapyEventTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateAAPSStartedTherapyEventTransaction.kt
@@ -2,15 +2,17 @@ package info.nightscout.androidaps.database.transactions
import info.nightscout.androidaps.database.entities.TherapyEvent
-class InvalidateAAPSStartedTherapyEventTransaction : Transaction() {
+class InvalidateAAPSStartedTherapyEventTransaction(private val note: String) : Transaction() {
override fun run(): TransactionResult {
val result = TransactionResult()
val therapyEvents = database.therapyEventDao.getValidByType(TherapyEvent.Type.NOTE)
for (event in therapyEvents) {
- event.isValid = false
- database.therapyEventDao.updateExistingEntry(event)
- result.invalidated.add(event)
+ if (event.note == note) {
+ event.isValid = false
+ database.therapyEventDao.updateExistingEntry(event)
+ result.invalidated.add(event)
+ }
}
return result
}
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateBolusCalculatorResultTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateBolusCalculatorResultTransaction.kt
index b2932f71c6..968efee665 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateBolusCalculatorResultTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateBolusCalculatorResultTransaction.kt
@@ -1,12 +1,22 @@
package info.nightscout.androidaps.database.transactions
-class InvalidateBolusCalculatorResultTransaction(val id: Long) : Transaction() {
+import info.nightscout.androidaps.database.entities.BolusCalculatorResult
- override fun run() {
+class InvalidateBolusCalculatorResultTransaction(val id: Long) : Transaction() {
+
+ override fun run(): TransactionResult {
+ val result = TransactionResult()
val bolusCalculatorResult = database.bolusCalculatorResultDao.findById(id)
?: throw IllegalArgumentException("There is no such BolusCalculatorResult with the specified ID.")
bolusCalculatorResult.isValid = false
database.bolusCalculatorResultDao.updateExistingEntry(bolusCalculatorResult)
+ result.invalidated.add(bolusCalculatorResult)
+ return result
+ }
+
+ class TransactionResult {
+
+ val invalidated = mutableListOf()
}
}
\ No newline at end of file
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateBolusTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateBolusTransaction.kt
index 8824690ff8..ac2dcad063 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateBolusTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateBolusTransaction.kt
@@ -1,11 +1,20 @@
package info.nightscout.androidaps.database.transactions
-class InvalidateBolusTransaction(val id: Long) : Transaction() {
+import info.nightscout.androidaps.database.entities.Bolus
- override fun run() {
+class InvalidateBolusTransaction(val id: Long) : Transaction() {
+
+ override fun run() : TransactionResult {
+ val result = TransactionResult()
val bolus = database.bolusDao.findById(id)
?: throw IllegalArgumentException("There is no such Bolus with the specified ID.")
bolus.isValid = false
database.bolusDao.updateExistingEntry(bolus)
+ result.invalidated.add(bolus)
+ return result
+ }
+
+ class TransactionResult {
+ val invalidated = mutableListOf()
}
}
\ No newline at end of file
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateCarbsTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateCarbsTransaction.kt
index 70646231bc..7055606468 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateCarbsTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateCarbsTransaction.kt
@@ -1,11 +1,21 @@
package info.nightscout.androidaps.database.transactions
-class InvalidateCarbsTransaction(val id: Long) : Transaction() {
+import info.nightscout.androidaps.database.entities.Carbs
- override fun run() {
+class InvalidateCarbsTransaction(val id: Long) : Transaction() {
+
+ override fun run(): TransactionResult {
+ val result = InvalidateCarbsTransaction.TransactionResult()
val carbs = database.carbsDao.findById(id)
?: throw IllegalArgumentException("There is no such Carbs with the specified ID.")
carbs.isValid = false
database.carbsDao.updateExistingEntry(carbs)
+ result.invalidated.add(carbs)
+ return result
+ }
+
+ class TransactionResult {
+
+ val invalidated = mutableListOf()
}
}
\ No newline at end of file
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateTherapyEventTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateTherapyEventTransaction.kt
index 6a66fa97a8..3368d05996 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateTherapyEventTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/InvalidateTherapyEventTransaction.kt
@@ -1,10 +1,21 @@
package info.nightscout.androidaps.database.transactions
-class InvalidateTherapyEventTransaction(val id: Long) : Transaction() {
- override fun run() {
+import info.nightscout.androidaps.database.entities.TherapyEvent
+
+class InvalidateTherapyEventTransaction(val id: Long) : Transaction() {
+
+ override fun run(): TransactionResult {
+ val result = TransactionResult()
val therapyEvent = database.therapyEventDao.findById(id)
?: throw IllegalArgumentException("There is no such TherapyEvent with the specified ID.")
therapyEvent.isValid = false
database.therapyEventDao.updateExistingEntry(therapyEvent)
+ result.invalidated.add(therapyEvent)
+ return result
+ }
+
+ class TransactionResult {
+
+ val invalidated = mutableListOf()
}
}
\ No newline at end of file
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncFoodTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsFoodTransaction.kt
similarity index 91%
rename from database/src/main/java/info/nightscout/androidaps/database/transactions/SyncFoodTransaction.kt
rename to database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsFoodTransaction.kt
index bd2ab7b3cf..019c43a8b8 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncFoodTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsFoodTransaction.kt
@@ -5,7 +5,7 @@ import info.nightscout.androidaps.database.entities.Food
/**
* Sync the TherapyEvents from NS
*/
-class SyncFoodTransaction(private val food: Food) : Transaction() {
+class SyncNsFoodTransaction(private val food: Food) : Transaction() {
override fun run(): TransactionResult {
val result = TransactionResult()
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncTemporaryTargetTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryTargetTransaction.kt
similarity index 94%
rename from database/src/main/java/info/nightscout/androidaps/database/transactions/SyncTemporaryTargetTransaction.kt
rename to database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryTargetTransaction.kt
index ecfa1632ec..5d9bf14fcb 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncTemporaryTargetTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTemporaryTargetTransaction.kt
@@ -7,7 +7,7 @@ import kotlin.math.abs
/**
* Sync the TemporaryTarget from NS
*/
-class SyncTemporaryTargetTransaction(private val temporaryTarget: TemporaryTarget) : Transaction() {
+class SyncNsTemporaryTargetTransaction(private val temporaryTarget: TemporaryTarget) : Transaction() {
override fun run(): TransactionResult {
val result = TransactionResult()
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncTherapyEventTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTherapyEventTransaction.kt
similarity index 92%
rename from database/src/main/java/info/nightscout/androidaps/database/transactions/SyncTherapyEventTransaction.kt
rename to database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTherapyEventTransaction.kt
index 007419d9d8..3709910081 100644
--- a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncTherapyEventTransaction.kt
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncNsTherapyEventTransaction.kt
@@ -5,7 +5,7 @@ import info.nightscout.androidaps.database.entities.TherapyEvent
/**
* Sync the TherapyEvents from NS
*/
-class SyncTherapyEventTransaction(private val therapyEvent: TherapyEvent) : Transaction() {
+class SyncNsTherapyEventTransaction(private val therapyEvent: TherapyEvent) : Transaction() {
override fun run(): TransactionResult {
val result = TransactionResult()
diff --git a/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncPumpBolusTransaction.kt b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncPumpBolusTransaction.kt
new file mode 100644
index 0000000000..de4a3d168c
--- /dev/null
+++ b/database/src/main/java/info/nightscout/androidaps/database/transactions/SyncPumpBolusTransaction.kt
@@ -0,0 +1,36 @@
+package info.nightscout.androidaps.database.transactions
+
+import info.nightscout.androidaps.database.embedments.InsulinConfiguration
+import info.nightscout.androidaps.database.embedments.InterfaceIDs
+import info.nightscout.androidaps.database.entities.Bolus
+import java.lang.IllegalStateException
+
+/**
+ * Creates or updates the Bolus from pump synchronization
+ */
+class SyncPumpBolusTransaction(
+ private val bolus: Bolus,
+) : Transaction() {
+
+ override fun run(): TransactionResult {
+ bolus.interfaceIDs.pumpId ?: bolus.interfaceIDs.pumpType ?: bolus.interfaceIDs.pumpSerial ?:
+ throw IllegalStateException("Some pump ID is null")
+ val result = TransactionResult()
+ val current = database.bolusDao.findByPumpIds(bolus.interfaceIDs.pumpId!!, bolus.interfaceIDs.pumpType!!, bolus.interfaceIDs.pumpSerial!!)
+ if (current == null) {
+ database.bolusDao.insertNewEntry(bolus)
+ result.inserted.add(bolus)
+ } else {
+ bolus.isValid = current.isValid
+ database.bolusDao.updateExistingEntry(bolus)
+ result.updated.add(bolus)
+ }
+ return result
+ }
+
+ class TransactionResult {
+
+ val inserted = mutableListOf()
+ val updated = mutableListOf()
+ }
+}
\ No newline at end of file
diff --git a/insight/build.gradle b/insight/build.gradle
index 55565f892b..8020051b31 100644
--- a/insight/build.gradle
+++ b/insight/build.gradle
@@ -17,5 +17,4 @@ android {
dependencies {
implementation project(':core')
- implementation project(':database')
}
\ No newline at end of file
diff --git a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java
index 04998e4741..ee34a2acee 100644
--- a/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java
+++ b/insight/src/main/java/info/nightscout/androidaps/plugins/pump/insight/LocalInsightPlugin.java
@@ -30,9 +30,6 @@ import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
-import info.nightscout.androidaps.database.AppRepository;
-import info.nightscout.androidaps.database.entities.TherapyEvent;
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction;
import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.InsightBolusID;
import info.nightscout.androidaps.db.InsightHistoryOffset;
@@ -55,6 +52,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.PumpPluginBase;
+import info.nightscout.androidaps.interfaces.PumpSync;
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.interfaces.UploadQueueInterface;
import info.nightscout.androidaps.logging.AAPSLogger;
@@ -136,7 +134,6 @@ import info.nightscout.androidaps.plugins.pump.insight.utils.ParameterBlockUtil;
import info.nightscout.androidaps.utils.DateUtil;
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
-import io.reactivex.disposables.CompositeDisposable;
@Singleton
public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface, ConstraintsInterface, InsightConnectionService.StateCallback {
@@ -153,7 +150,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
private final UploadQueueInterface uploadQueue;
private final DateUtil dateUtil;
private final DatabaseHelperInterface databaseHelper;
- private final AppRepository repository;
+ private final PumpSync pumpSync;
public static final String ALERT_CHANNEL_ID = "AndroidAPS-InsightAlert";
@@ -199,8 +196,6 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
private boolean statusLoaded;
private TBROverNotificationBlock tbrOverNotificationBlock;
- private final CompositeDisposable disposable = new CompositeDisposable();
-
@Inject
public LocalInsightPlugin(
HasAndroidInjector injector,
@@ -217,7 +212,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
ConfigInterface config,
DateUtil dateUtil,
DatabaseHelperInterface databaseHelper,
- AppRepository repository
+ PumpSync pumpSync
) {
super(new PluginDescription()
.pluginIcon(R.drawable.ic_insight_128)
@@ -242,7 +237,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
this.uploadQueue = uploadQueue;
this.dateUtil = dateUtil;
this.databaseHelper = databaseHelper;
- this.repository = repository;
+ this.pumpSync = pumpSync;
pumpDescription = new PumpDescription();
pumpDescription.setPumpDescription(PumpType.ACCU_CHEK_INSIGHT_BLUETOOTH);
@@ -1270,7 +1265,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
if (!sp.getBoolean("insight_log_site_changes", false)) return;
long timestamp = parseDate(event.getEventYear(), event.getEventMonth(), event.getEventDay(),
event.getEventHour(), event.getEventMinute(), event.getEventSecond()) + timeOffset;
- uploadCareportalEvent(timestamp, TherapyEvent.Type.CANNULA_CHANGE);
+ uploadCareportalEvent(timestamp, DetailedBolusInfo.EventType.CANNULA_CHANGE);
}
private void processTotalDailyDoseEvent(TotalDailyDoseEvent event) {
@@ -1298,14 +1293,14 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
if (!sp.getBoolean("insight_log_reservoir_changes", false)) return;
long timestamp = parseDate(event.getEventYear(), event.getEventMonth(), event.getEventDay(),
event.getEventHour(), event.getEventMinute(), event.getEventSecond()) + timeOffset;
- uploadCareportalEvent(timestamp, TherapyEvent.Type.INSULIN_CHANGE);
+ uploadCareportalEvent(timestamp, DetailedBolusInfo.EventType.INSULIN_CHANGE);
}
private void processPowerUpEvent(PowerUpEvent event) {
if (!sp.getBoolean("insight_log_battery_changes", false)) return;
long timestamp = parseDate(event.getEventYear(), event.getEventMonth(), event.getEventDay(),
event.getEventHour(), event.getEventMinute(), event.getEventSecond()) + timeOffset;
- uploadCareportalEvent(timestamp, TherapyEvent.Type.PUMP_BATTERY_CHANGE);
+ uploadCareportalEvent(timestamp, DetailedBolusInfo.EventType.PUMP_BATTERY_CHANGE);
}
private void processOperatingModeChangedEvent(String serial, List pumpStartedEvents, OperatingModeChangedEvent event) {
@@ -1555,12 +1550,7 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
}
private void logNote(long date, String note) {
- if (repository.getTherapyEventByTimestamp(TherapyEvent.Type.NOTE, date) != null) return;
- disposable.add(repository.runTransactionForResult(new InsertTherapyEventIfNewTransaction(date, TherapyEvent.Type.NOTE, 0, note, sp.getString("careportal_enteredby", "AndroidAPS"), null, null, TherapyEvent.GlucoseUnit.MGDL))
- .subscribe(
- result -> result.getInserted().forEach(event -> aapsLogger.debug(LTag.DATABASE, "Inserted therapy event " + event)),
- error -> aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", error)
- ));
+ pumpSync.insertTherapyEventIfNewWithTimestamp(date, DetailedBolusInfo.EventType.NOTE, note, null, PumpType.ACCU_CHEK_INSIGHT, serialNumber());
}
private long parseRelativeDate(int year, int month, int day, int hour, int minute, int second, int relativeHour, int relativeMinute, int relativeSecond) {
@@ -1576,13 +1566,8 @@ public class LocalInsightPlugin extends PumpPluginBase implements PumpInterface,
return calendar.getTimeInMillis();
}
- private void uploadCareportalEvent(long date, TherapyEvent.Type event) {
- if (repository.getTherapyEventByTimestamp(event, date) != null) return;
- disposable.add(repository.runTransactionForResult(new InsertTherapyEventIfNewTransaction(date, event, 0, null, sp.getString("careportal_enteredby", "AndroidAPS"), null, null, TherapyEvent.GlucoseUnit.MGDL))
- .subscribe(
- result -> result.getInserted().forEach(record -> aapsLogger.debug(LTag.DATABASE, "Inserted therapy event " + record)),
- error -> aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", error)
- ));
+ private void uploadCareportalEvent(long date, DetailedBolusInfo.EventType event) {
+ pumpSync.insertTherapyEventIfNewWithTimestamp(date, event, null, null, PumpType.ACCU_CHEK_INSIGHT, serialNumber());
}
@NonNull @Override
diff --git a/medtronic/build.gradle b/medtronic/build.gradle
index 6578de3917..a3cb9f789e 100644
--- a/medtronic/build.gradle
+++ b/medtronic/build.gradle
@@ -17,5 +17,4 @@ android {
dependencies {
implementation project(':core')
implementation project(':rileylink')
- implementation project(':database')
}
diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java
index b06b75300c..48cdc84322 100644
--- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java
+++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java
@@ -32,7 +32,6 @@ import info.nightscout.androidaps.activities.ErrorHelperActivity;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
-import info.nightscout.androidaps.database.entities.Bolus;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.events.EventRefreshOverview;
@@ -55,7 +54,6 @@ import info.nightscout.androidaps.plugins.pump.common.defs.PumpDriverState;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
import info.nightscout.androidaps.plugins.pump.common.events.EventRefreshButtonState;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
-import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpDevice;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkPumpInfo;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.defs.RileyLinkServiceState;
@@ -101,7 +99,6 @@ import info.nightscout.androidaps.utils.sharedPreferences.SP;
public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInterface, RileyLinkPumpDevice {
private final SP sp;
- private final RileyLinkUtil rileyLinkUtil;
private final MedtronicUtil medtronicUtil;
private final MedtronicPumpStatus medtronicPumpStatus;
private final MedtronicHistoryData medtronicHistoryData;
@@ -133,7 +130,6 @@ public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInter
SP sp,
CommandQueueProvider commandQueue,
FabricPrivacy fabricPrivacy,
- RileyLinkUtil rileyLinkUtil,
MedtronicUtil medtronicUtil,
MedtronicPumpStatus medtronicPumpStatus,
MedtronicHistoryData medtronicHistoryData,
@@ -155,7 +151,6 @@ public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInter
injector, resourceHelper, aapsLogger, commandQueue, rxBus, activePlugin, sp, context, fabricPrivacy, dateUtil, aapsSchedulers
);
- this.rileyLinkUtil = rileyLinkUtil;
this.medtronicUtil = medtronicUtil;
this.sp = sp;
this.medtronicPumpStatus = medtronicPumpStatus;
diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryData.java b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryData.java
index b33119916e..5d1190ee65 100644
--- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryData.java
+++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryData.java
@@ -21,9 +21,6 @@ import javax.inject.Singleton;
import dagger.android.HasAndroidInjector;
import info.nightscout.androidaps.data.DetailedBolusInfo;
-import info.nightscout.androidaps.database.AppRepository;
-import info.nightscout.androidaps.database.entities.TherapyEvent;
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction;
import info.nightscout.androidaps.db.DbObjectBase;
import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.Source;
@@ -32,6 +29,7 @@ import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.interfaces.DatabaseHelperInterface;
+import info.nightscout.androidaps.interfaces.PumpSync;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.pump.common.defs.PumpType;
@@ -54,7 +52,6 @@ import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
import info.nightscout.androidaps.plugins.treatments.TreatmentUpdateReturn;
import info.nightscout.androidaps.utils.Round;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
-import io.reactivex.disposables.CompositeDisposable;
/**
@@ -80,7 +77,7 @@ public class MedtronicHistoryData {
private final MedtronicPumpHistoryDecoder medtronicPumpHistoryDecoder;
private final MedtronicPumpStatus medtronicPumpStatus;
private final DatabaseHelperInterface databaseHelper;
- private final AppRepository repository;
+ private final PumpSync pumpSync;
private final List allHistory;
private List newHistory = null;
@@ -94,10 +91,9 @@ public class MedtronicHistoryData {
private long lastIdUsed = 0;
- private final CompositeDisposable disposable = new CompositeDisposable();
/**
* Double bolus debug. We seem to have small problem with double Boluses (or sometimes also missing boluses
- * from history. This flag turns on debugging for that (default is off=false)... Debuging is pretty detailed,
+ * from history. This flag turns on debugging for that (default is off=false)... Debugging is pretty detailed,
* so log files will get bigger.
* Note: June 2020. Since this seems to be fixed, I am disabling this per default. I will leave code inside
* in case we need it again. Code that turns this on is commented out RileyLinkMedtronicService#verifyConfiguration()
@@ -114,7 +110,7 @@ public class MedtronicHistoryData {
MedtronicPumpHistoryDecoder medtronicPumpHistoryDecoder,
MedtronicPumpStatus medtronicPumpStatus,
DatabaseHelperInterface databaseHelperInterface,
- AppRepository repository
+ PumpSync pumpSync
) {
this.allHistory = new ArrayList<>();
@@ -126,7 +122,7 @@ public class MedtronicHistoryData {
this.medtronicPumpHistoryDecoder = medtronicPumpHistoryDecoder;
this.medtronicPumpStatus = medtronicPumpStatus;
this.databaseHelper = databaseHelperInterface;
- this.repository = repository;
+ this.pumpSync = pumpSync;
}
private Gson gson() {
@@ -552,7 +548,7 @@ public class MedtronicHistoryData {
long lastPrimeFromAAPS = sp.getLong(MedtronicConst.Statistics.LastPrime, 0L);
if (lastPrimeRecord != lastPrimeFromAAPS) {
- uploadCareportalEvent(DateTimeUtil.toMillisFromATD(lastPrimeRecord), TherapyEvent.Type.CANNULA_CHANGE);
+ uploadCareportalEvent(DateTimeUtil.toMillisFromATD(lastPrimeRecord), DetailedBolusInfo.EventType.CANNULA_CHANGE);
sp.putLong(MedtronicConst.Statistics.LastPrime, lastPrimeRecord);
}
@@ -575,7 +571,7 @@ public class MedtronicHistoryData {
long lastRewindFromAAPS = sp.getLong(MedtronicConst.Statistics.LastRewind, 0L);
if (lastRewindRecord != lastRewindFromAAPS) {
- uploadCareportalEvent(DateTimeUtil.toMillisFromATD(lastRewindRecord), TherapyEvent.Type.INSULIN_CHANGE);
+ uploadCareportalEvent(DateTimeUtil.toMillisFromATD(lastRewindRecord), DetailedBolusInfo.EventType.INSULIN_CHANGE);
sp.putLong(MedtronicConst.Statistics.LastRewind, lastRewindRecord);
}
@@ -583,15 +579,8 @@ public class MedtronicHistoryData {
}
- private void uploadCareportalEvent(long date, TherapyEvent.Type event) {
- if (repository.getTherapyEventByTimestamp(event, date) != null) return;
- disposable.add(repository.runTransactionForResult(new InsertTherapyEventIfNewTransaction(date,
- event, 0, null, sp.getString("careportal_enteredby", "AndroidAPS"),
- null, null, TherapyEvent.GlucoseUnit.MGDL))
- .subscribe(
- result -> result.getInserted().forEach(record -> aapsLogger.debug(LTag.DATABASE, "Inserted therapy event " + record)),
- error -> aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", error)
- ));
+ private void uploadCareportalEvent(long date, DetailedBolusInfo.EventType event) {
+ pumpSync.insertTherapyEventIfNewWithTimestamp(date, event, null, null, medtronicPumpStatus.pumpType, medtronicPumpStatus.serialNumber);
}
private void processTDDs(List tddsIn) {
diff --git a/omnipod-eros/build.gradle b/omnipod-eros/build.gradle
index 046d3a5060..63fcffcef6 100644
--- a/omnipod-eros/build.gradle
+++ b/omnipod-eros/build.gradle
@@ -18,5 +18,4 @@ dependencies {
implementation project(':core')
implementation project(':omnipod-common')
implementation project(':rileylink')
- implementation project(':database')
}
diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java
index 661531f18c..9792bc74ff 100644
--- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java
+++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/OmnipodErosPumpPlugin.java
@@ -33,8 +33,6 @@ import info.nightscout.androidaps.activities.ErrorHelperActivity;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
-import info.nightscout.androidaps.database.AppRepository;
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventAnnouncementTransaction;
import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TemporaryBasal;
@@ -50,6 +48,7 @@ import info.nightscout.androidaps.interfaces.ProfileFunction;
import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.PumpPluginBase;
+import info.nightscout.androidaps.interfaces.PumpSync;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
@@ -141,7 +140,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements PumpInterfa
private final PumpDescription pumpDescription;
private final ServiceConnection serviceConnection;
private final PumpType pumpType = PumpType.OMNIPOD_EROS;
- private final AppRepository repository;
+ private final PumpSync pumpSync;
private final CompositeDisposable disposable = new CompositeDisposable();
@@ -178,7 +177,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements PumpInterfa
RileyLinkUtil rileyLinkUtil,
OmnipodAlertUtil omnipodAlertUtil,
ProfileFunction profileFunction,
- AppRepository repository
+ PumpSync pumpSync
) {
super(new PluginDescription() //
.mainType(PluginType.PUMP) //
@@ -205,7 +204,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements PumpInterfa
this.rileyLinkUtil = rileyLinkUtil;
this.omnipodAlertUtil = omnipodAlertUtil;
this.profileFunction = profileFunction;
- this.repository = repository;
+ this.pumpSync = pumpSync;
pumpDescription = new PumpDescription(pumpType);
@@ -408,7 +407,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements PumpInterfa
String notificationText = resourceHelper.gq(R.plurals.omnipod_common_pod_alerts, activeAlerts.size(), alerts);
Notification notification = new Notification(Notification.OMNIPOD_POD_ALERTS, notificationText, Notification.URGENT);
rxBus.send(new EventNewNotification(notification));
- disposable.add(repository.runTransaction(new InsertTherapyEventAnnouncementTransaction(notificationText)).subscribe());
+ pumpSync.insertAnnouncement(notificationText, null, PumpType.OMNIPOD_EROS, serialNumber());
if (aapsOmnipodErosManager.isAutomaticallyAcknowledgeAlertsEnabled() && !getCommandQueue().isCustomCommandInQueue(CommandAcknowledgeAlerts.class)) {
queueAcknowledgeAlertsCommand();
@@ -420,7 +419,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements PumpInterfa
private void handlePodFaultEvent() {
if (podStateManager.isPodFaulted()) {
String notificationText = resourceHelper.gs(R.string.omnipod_common_pod_status_pod_fault_description, podStateManager.getFaultEventCode().getValue(), podStateManager.getFaultEventCode().name());
- disposable.add(repository.runTransaction(new InsertTherapyEventAnnouncementTransaction(notificationText)).subscribe());
+ pumpSync.insertAnnouncement(notificationText, null, PumpType.OMNIPOD_EROS, serialNumber());
}
}
diff --git a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java
index d6988a701b..e797b78551 100644
--- a/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java
+++ b/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java
@@ -18,9 +18,6 @@ import info.nightscout.androidaps.activities.ErrorHelperActivity;
import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.PumpEnactResult;
-import info.nightscout.androidaps.database.AppRepository;
-import info.nightscout.androidaps.database.entities.TherapyEvent;
-import info.nightscout.androidaps.database.transactions.InsertTherapyEventIfNewTransaction;
import info.nightscout.androidaps.db.OmnipodHistoryRecord;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TemporaryBasal;
@@ -28,6 +25,7 @@ import info.nightscout.androidaps.events.Event;
import info.nightscout.androidaps.events.EventRefreshOverview;
import info.nightscout.androidaps.interfaces.ActivePluginProvider;
import info.nightscout.androidaps.interfaces.DatabaseHelperInterface;
+import info.nightscout.androidaps.interfaces.PumpSync;
import info.nightscout.androidaps.logging.AAPSLogger;
import info.nightscout.androidaps.logging.LTag;
import info.nightscout.androidaps.plugins.bus.RxBusWrapper;
@@ -85,7 +83,6 @@ import info.nightscout.androidaps.plugins.pump.omnipod.eros.util.OmnipodAlertUti
import info.nightscout.androidaps.utils.resources.ResourceHelper;
import info.nightscout.androidaps.utils.rx.AapsSchedulers;
import info.nightscout.androidaps.utils.sharedPreferences.SP;
-import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.subjects.SingleSubject;
@Singleton
@@ -103,7 +100,7 @@ public class AapsOmnipodErosManager {
private final DatabaseHelperInterface databaseHelper;
private final OmnipodAlertUtil omnipodAlertUtil;
private final Context context;
- private final AppRepository repository;
+ private final PumpSync pumpSync;
private boolean basalBeepsEnabled;
private boolean bolusBeepsEnabled;
@@ -120,8 +117,6 @@ public class AapsOmnipodErosManager {
private boolean showRileyLinkBatteryLevel;
private boolean batteryChangeLoggingEnabled;
- private final CompositeDisposable disposable = new CompositeDisposable();
-
@Inject
public AapsOmnipodErosManager(OmnipodRileyLinkCommunicationManager communicationService,
PodStateManager podStateManager,
@@ -136,7 +131,7 @@ public class AapsOmnipodErosManager {
DatabaseHelperInterface databaseHelper,
OmnipodAlertUtil omnipodAlertUtil,
Context context,
- AppRepository repository) {
+ PumpSync pumpSync) {
this.podStateManager = podStateManager;
this.aapsOmnipodUtil = aapsOmnipodUtil;
@@ -149,7 +144,7 @@ public class AapsOmnipodErosManager {
this.databaseHelper = databaseHelper;
this.omnipodAlertUtil = omnipodAlertUtil;
this.context = context;
- this.repository = repository;
+ this.pumpSync = pumpSync;
delegate = new OmnipodManager(aapsLogger, aapsSchedulers, communicationService, podStateManager);
@@ -218,8 +213,8 @@ public class AapsOmnipodErosManager {
addToHistory(System.currentTimeMillis(), PodHistoryEntryType.INSERT_CANNULA, result.getComment(), result.getSuccess());
if (result.getSuccess()) {
- uploadCareportalEvent(System.currentTimeMillis() - 1000, TherapyEvent.Type.INSULIN_CHANGE);
- uploadCareportalEvent(System.currentTimeMillis(), TherapyEvent.Type.CANNULA_CHANGE);
+ uploadCareportalEvent(System.currentTimeMillis() - 1000, DetailedBolusInfo.EventType.INSULIN_CHANGE);
+ uploadCareportalEvent(System.currentTimeMillis(), DetailedBolusInfo.EventType.CANNULA_CHANGE);
dismissNotification(Notification.OMNIPOD_POD_NOT_ATTACHED);
@@ -999,13 +994,8 @@ public class AapsOmnipodErosManager {
return new BasalSchedule(entries);
}
- private void uploadCareportalEvent(long date, TherapyEvent.Type event) {
- if (repository.getTherapyEventByTimestamp(event, date) != null) return;
- disposable.add(repository.runTransactionForResult(new InsertTherapyEventIfNewTransaction(date, event, 0, null, sp.getString("careportal_enteredby", "AndroidAPS"), null, null, TherapyEvent.GlucoseUnit.MGDL))
- .subscribe(
- result -> result.getInserted().forEach(record -> aapsLogger.debug(LTag.DATABASE, "Inserted therapy event " + record)),
- error -> aapsLogger.error(LTag.DATABASE, "Error while saving therapy event", error)
- ));
+ private void uploadCareportalEvent(long date, DetailedBolusInfo.EventType event) {
+ pumpSync.insertTherapyEventIfNewWithTimestamp(date, event, null, null, PumpType.OMNIPOD_EROS, Integer.toString(podStateManager.getAddress()));
}
public String serialNumber() {