- Added separate method for TreatmentService.createOrUpdate for Medtronic (createOrUpdateMedtronic)
- MedtronicUtil added method to detect if pump is Medtronic (reads ConfigBuilder.getActivePump().deviceID) - TreatementService call from NS checks pump type and calls correct method - TreatmentPlugin checks pumptype and calls correct createOrUpdate method
This commit is contained in:
parent
0b1ef81d40
commit
8c8fba5522
|
@ -18,6 +18,7 @@ import java.util.Map;
|
|||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.logging.L;
|
||||
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
|
||||
import info.nightscout.androidaps.plugins.general.overview.dialogs.MessageHelperActivity;
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNotification;
|
||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
|
||||
|
@ -91,6 +92,10 @@ public class MedtronicUtil extends RileyLinkUtil {
|
|||
return k;
|
||||
}
|
||||
|
||||
public static boolean isMedtronicPump() {
|
||||
return ConfigBuilderPlugin.getPlugin().getActivePump().deviceID().equals("Medtronic");
|
||||
}
|
||||
|
||||
|
||||
public static byte[] getByteArrayFromUnsignedShort(int shortValue, boolean returnFixedSize) {
|
||||
byte highByte = (byte) (shortValue >> 8 & 0xFF);
|
||||
|
|
|
@ -244,8 +244,12 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
|
|||
public void createTreatmentFromJsonIfNotExists(JSONObject json) {
|
||||
try {
|
||||
Treatment treatment = Treatment.createFromJson(json);
|
||||
if (treatment != null)
|
||||
createOrUpdate(treatment, true);
|
||||
if (treatment != null) {
|
||||
if (!MedtronicUtil.isMedtronicPump())
|
||||
createOrUpdate(treatment);
|
||||
else
|
||||
createOrUpdateMedtronic(treatment, false);
|
||||
}
|
||||
else
|
||||
log.error("Date is null: " + treatment.toString());
|
||||
} catch (JSONException e) {
|
||||
|
@ -254,7 +258,137 @@ public class TreatmentService extends OrmLiteBaseService<DatabaseHelper> {
|
|||
}
|
||||
|
||||
|
||||
public UpdateReturn createOrUpdate(Treatment treatment, boolean fromNightScout) {
|
||||
// return true if new record is created
|
||||
public UpdateReturn createOrUpdate(Treatment treatment) {
|
||||
try {
|
||||
Treatment old;
|
||||
treatment.date = DatabaseHelper.roundDateToSec(treatment.date);
|
||||
|
||||
if (treatment.source == Source.PUMP) {
|
||||
// check for changed from pump change in NS
|
||||
Treatment existingTreatment = getPumpRecordById(treatment.pumpId);
|
||||
if (existingTreatment != null) {
|
||||
boolean equalRePumpHistory = existingTreatment.equalsRePumpHistory(treatment);
|
||||
boolean sameSource = existingTreatment.source == treatment.source;
|
||||
if (!equalRePumpHistory) {
|
||||
// another treatment exists. Update it with the treatment coming from the pump
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("Pump record already found in database: " + existingTreatment.toString() + " wanting to add " + treatment.toString());
|
||||
long oldDate = existingTreatment.date;
|
||||
|
||||
//preserve carbs
|
||||
if (existingTreatment.isValid && existingTreatment.carbs > 0 && treatment.carbs == 0) {
|
||||
treatment.carbs = existingTreatment.carbs;
|
||||
}
|
||||
|
||||
getDao().delete(existingTreatment); // need to delete/create because date may change too
|
||||
existingTreatment.copyBasics(treatment);
|
||||
getDao().create(existingTreatment);
|
||||
DatabaseHelper.updateEarliestDataChange(oldDate);
|
||||
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(sameSource, false); //updating a pump treatment with another one from the pump is not counted as clash
|
||||
}
|
||||
return new UpdateReturn(equalRePumpHistory, false);
|
||||
}
|
||||
existingTreatment = getDao().queryForId(treatment.date);
|
||||
if (existingTreatment != null) {
|
||||
// another treatment exists with different pumpID. Update it with the treatment coming from the pump
|
||||
boolean equalRePumpHistory = existingTreatment.equalsRePumpHistory(treatment);
|
||||
boolean sameSource = existingTreatment.source == treatment.source;
|
||||
long oldDate = existingTreatment.date;
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("Pump record already found in database: " + existingTreatment.toString() + " wanting to add " + treatment.toString());
|
||||
|
||||
//preserve carbs
|
||||
if (existingTreatment.isValid && existingTreatment.carbs > 0 && treatment.carbs == 0) {
|
||||
treatment.carbs = existingTreatment.carbs;
|
||||
}
|
||||
|
||||
getDao().delete(existingTreatment); // need to delete/create because date may change too
|
||||
existingTreatment.copyFrom(treatment);
|
||||
getDao().create(existingTreatment);
|
||||
DatabaseHelper.updateEarliestDataChange(oldDate);
|
||||
DatabaseHelper.updateEarliestDataChange(existingTreatment.date);
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(equalRePumpHistory || sameSource, false);
|
||||
}
|
||||
getDao().create(treatment);
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("New record from: " + Source.getString(treatment.source) + " " + treatment.toString());
|
||||
DatabaseHelper.updateEarliestDataChange(treatment.date);
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(true, true);
|
||||
}
|
||||
if (treatment.source == Source.NIGHTSCOUT) {
|
||||
old = getDao().queryForId(treatment.date);
|
||||
if (old != null) {
|
||||
if (!old.isEqual(treatment)) {
|
||||
boolean historyChange = old.isDataChanging(treatment);
|
||||
long oldDate = old.date;
|
||||
getDao().delete(old); // need to delete/create because date may change too
|
||||
old.copyFrom(treatment);
|
||||
getDao().create(old);
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("Updating record by date from: " + Source.getString(treatment.source) + " " + old.toString());
|
||||
if (historyChange) {
|
||||
DatabaseHelper.updateEarliestDataChange(oldDate);
|
||||
DatabaseHelper.updateEarliestDataChange(old.date);
|
||||
}
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(true, true);
|
||||
}
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("Equal record by date from: " + Source.getString(treatment.source) + " " + old.toString());
|
||||
return new UpdateReturn(true, false);
|
||||
}
|
||||
// find by NS _id
|
||||
if (treatment._id != null) {
|
||||
old = findByNSId(treatment._id);
|
||||
if (old != null) {
|
||||
if (!old.isEqual(treatment)) {
|
||||
boolean historyChange = old.isDataChanging(treatment);
|
||||
long oldDate = old.date;
|
||||
getDao().delete(old); // need to delete/create because date may change too
|
||||
old.copyFrom(treatment);
|
||||
getDao().create(old);
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("Updating record by _id from: " + Source.getString(treatment.source) + " " + old.toString());
|
||||
if (historyChange) {
|
||||
DatabaseHelper.updateEarliestDataChange(oldDate);
|
||||
DatabaseHelper.updateEarliestDataChange(old.date);
|
||||
}
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(true, true);
|
||||
}
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("Equal record by _id from: " + Source.getString(treatment.source) + " " + old.toString());
|
||||
return new UpdateReturn(true, false);
|
||||
}
|
||||
}
|
||||
getDao().create(treatment);
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("New record from: " + Source.getString(treatment.source) + " " + treatment.toString());
|
||||
DatabaseHelper.updateEarliestDataChange(treatment.date);
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(true, true);
|
||||
}
|
||||
if (treatment.source == Source.USER) {
|
||||
getDao().create(treatment);
|
||||
if (L.isEnabled(L.DATATREATMENTS))
|
||||
log.debug("New record from: " + Source.getString(treatment.source) + " " + treatment.toString());
|
||||
DatabaseHelper.updateEarliestDataChange(treatment.date);
|
||||
scheduleTreatmentChange(treatment);
|
||||
return new UpdateReturn(true, true);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
log.error("Unhandled exception", e);
|
||||
}
|
||||
return new UpdateReturn(false, false);
|
||||
}
|
||||
|
||||
|
||||
public UpdateReturn createOrUpdateMedtronic(Treatment treatment, boolean fromNightScout) {
|
||||
try {
|
||||
treatment.date = DatabaseHelper.roundDateToSec(treatment.date);
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ import info.nightscout.androidaps.plugins.general.overview.events.EventDismissNo
|
|||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.AutosensData;
|
||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin;
|
||||
import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil;
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityAAPSPlugin;
|
||||
import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin;
|
||||
import info.nightscout.androidaps.utils.DateUtil;
|
||||
|
@ -518,6 +519,8 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
|
|||
// return true if new record is created
|
||||
@Override
|
||||
public boolean addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo, boolean allowUpdate) {
|
||||
boolean medtronicPump = MedtronicUtil.isMedtronicPump();
|
||||
|
||||
Treatment treatment = new Treatment();
|
||||
treatment.date = detailedBolusInfo.date;
|
||||
treatment.source = detailedBolusInfo.source;
|
||||
|
@ -530,7 +533,13 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
|
|||
treatment.source = detailedBolusInfo.source;
|
||||
treatment.mealBolus = treatment.carbs > 0;
|
||||
treatment.boluscalc = detailedBolusInfo.boluscalc != null ? detailedBolusInfo.boluscalc.toString() : null;
|
||||
TreatmentService.UpdateReturn creatOrUpdateResult = getService().createOrUpdate(treatment, false);
|
||||
TreatmentService.UpdateReturn creatOrUpdateResult;
|
||||
|
||||
if (!medtronicPump)
|
||||
creatOrUpdateResult = getService().createOrUpdate(treatment);
|
||||
else
|
||||
creatOrUpdateResult = getService().createOrUpdateMedtronic(treatment, false);
|
||||
|
||||
boolean newRecordCreated = creatOrUpdateResult.newRecord;
|
||||
//log.debug("Adding new Treatment record" + treatment.toString());
|
||||
if (detailedBolusInfo.carbTime != 0) {
|
||||
|
@ -540,7 +549,10 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
|
|||
carbsTreatment.date = detailedBolusInfo.date + detailedBolusInfo.carbTime * 60 * 1000L + 1000L; // add 1 sec to make them different records
|
||||
carbsTreatment.carbs = detailedBolusInfo.carbs;
|
||||
carbsTreatment.source = detailedBolusInfo.source;
|
||||
getService().createOrUpdate(carbsTreatment, false);
|
||||
if (!medtronicPump)
|
||||
getService().createOrUpdate(carbsTreatment);
|
||||
else
|
||||
getService().createOrUpdateMedtronic(carbsTreatment, false);
|
||||
//log.debug("Adding new Treatment record" + carbsTreatment);
|
||||
}
|
||||
if (newRecordCreated && detailedBolusInfo.isValid)
|
||||
|
@ -567,6 +579,10 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
|
|||
return newRecordCreated;
|
||||
}
|
||||
|
||||
private boolean isMedtronicPump() {
|
||||
return ConfigBuilderPlugin.getPlugin().getActivePump().deviceID().equals("Medtronic");
|
||||
}
|
||||
|
||||
@Override
|
||||
public long oldestDataAvailable() {
|
||||
long oldestTime = System.currentTimeMillis();
|
||||
|
|
Loading…
Reference in a new issue