Fix issues during history read.

This commit is contained in:
Johannes Mockenhaupt 2017-11-21 23:08:31 +01:00
parent 066d138e59
commit b27ee06ebe
No known key found for this signature in database
GPG key ID: 9E1EA6AF7BBBB0D1
6 changed files with 58 additions and 35 deletions

View file

@ -1,7 +1,8 @@
- [ ] Bugs
- [ ] Taking over benign warnings on connect doesn't work properly
(Notification raised but not confirmed?)
- [ ] Reading full history multiple times duplicates entries shown in Stats/TDD dialog
- [x] Optimization reading full history doesn't seem to work
- [x] Reading full history multiple times duplicates entries shown in Stats/TDD dialog
- [x] ruffy: Accessing the quick info menu yields noMenu when cartridge is low
- [x] ruffy: Multi-digit error codes in error history aren't supported
- [-] No connection can be established anymore; ruffy issue i can't solve

View file

@ -21,7 +21,7 @@ public class ComboErrorHistoryDialog extends DialogFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.combo_error_history_fragment, container, false);
TextView text = (TextView) layout.findViewById(R.id.combo_error_history_text);
List<PumpError> errors = ComboPlugin.getPlugin().getPump().history.pumpErrorHistory;
List<PumpError> errors = ComboPlugin.getPlugin().getPump().errorHistory;
StringBuilder sb = new StringBuilder();
// TODO i18n
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM. HH:mm");

View file

@ -868,9 +868,25 @@ public class ComboPlugin implements PluginBase, PumpInterface, ConstraintsInterf
return false;
}
updateDbFromPumpHistory(historyResult.history);
CommandResult reservoirBolusResult = runCommand(null, 3, ruffyScripter::readReservoirLevelAndLastBolus);
return historyResult.success && reservoirBolusResult.success;
// update local cache
PumpHistory history = historyResult.history;
if (!history.bolusHistory.isEmpty()) {
pump.lastHistoryBolusTime = history.bolusHistory.get(0).timestamp;
}
if (!history.tbrHistory.isEmpty()) {
pump.lastHistoryTbrTime = history.tbrHistory.get(0).timestamp;
}
if (!history.pumpErrorHistory.isEmpty()) {
pump.errorHistory = history.pumpErrorHistory;
}
if (!history.tddHistory.isEmpty()) {
pump.tddHistory = history.tddHistory;
}
updateDbFromPumpHistory(history);
return historyResult.success;
}
private synchronized void updateDbFromPumpHistory(@NonNull PumpHistory history) {
@ -905,34 +921,27 @@ public class ComboPlugin implements PluginBase, PumpInterface, ConstraintsInterf
MainApp.getConfigBuilder().addToHistoryTempBasal(temporaryBasal);
}
}
// errors (not persisted in DB, read from pump on start up and cached in plugin)
for (PumpError pumpError : history.pumpErrorHistory) {
if (!pump.history.pumpErrorHistory.contains(pumpError)) {
pump.history.pumpErrorHistory.add(pumpError);
}
}
// TDDs (not persisted in DB, read from pump on start up and cached in plugin)
for (Tdd tdd : history.tddHistory) {
if (!pump.history.tddHistory.contains(tdd)) {
pump.history.tddHistory.add(tdd);
}
}
}
// TODO, opt doesn't seem to work
void readAllPumpData() {
readHistory(new PumpHistoryRequest()
.bolusHistory(pump.history.bolusHistory.isEmpty() ? PumpHistoryRequest.FULL : pump.history.bolusHistory.get(0).timestamp)
.tbrHistory(pump.history.tbrHistory.isEmpty() ? PumpHistoryRequest.FULL : pump.history.tbrHistory.get(0).timestamp)
.pumpErrorHistory(pump.history.pumpErrorHistory.isEmpty() ? PumpHistoryRequest.FULL : pump.history.pumpErrorHistory.get(0).timestamp)
.tddHistory(pump.history.tddHistory.isEmpty() ? PumpHistoryRequest.FULL : pump.history.tddHistory.get(0).timestamp));
CommandResult commandResult = runCommand("Reading basal profile", 2,
ruffyScripter::readBasalProfile);
if (commandResult.success) {
pump.basalProfile = commandResult.basalProfile;
.bolusHistory(pump.lastHistoryBolusTime)
.tbrHistory(pump.lastHistoryTbrTime)
.pumpErrorHistory(PumpHistoryRequest.FULL)
.tddHistory(PumpHistoryRequest.FULL));
CommandResult reservoirResult = runCommand("Checking reservoir level", 2,
ruffyScripter::readReservoirLevelAndLastBolus);
if (!reservoirResult.success) {
return;
}
CommandResult basalResult = runCommand("Reading basal profile", 2, ruffyScripter::readBasalProfile);
if (!basalResult.success) {
return;
}
pump.basalProfile = basalResult.basalProfile;
}
@Override

View file

@ -3,11 +3,17 @@ package info.nightscout.androidaps.plugins.PumpCombo;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import de.jotomo.ruffy.spi.BasalProfile;
import de.jotomo.ruffy.spi.CommandResult;
import de.jotomo.ruffy.spi.PumpState;
import de.jotomo.ruffy.spi.history.Bolus;
import de.jotomo.ruffy.spi.history.PumpError;
import de.jotomo.ruffy.spi.history.PumpHistory;
import de.jotomo.ruffy.spi.history.PumpHistoryRequest;
import de.jotomo.ruffy.spi.history.Tdd;
class ComboPump {
boolean initialized = false;
@ -22,8 +28,15 @@ class ComboPump {
volatile Bolus lastBolus = null;
@NonNull
volatile BasalProfile basalProfile = new BasalProfile();
@NonNull
volatile PumpHistory history = new PumpHistory();
/** Time the active TBR was set (if any). Needed to calculate remaining time in fragment */
long tbrSetTime;
// Last known history record times to skip over old ones when reading history
long lastHistoryBolusTime = PumpHistoryRequest.FULL;
long lastHistoryTbrTime = PumpHistoryRequest.FULL;
// Alert and TDD histories are not stored in DB, but are read on demand and just cached here
List<PumpError> errorHistory = new ArrayList<>(0);
List<Tdd> tddHistory = new ArrayList<>(0);
}

View file

@ -21,7 +21,7 @@ public class ComboTddHistoryDialog extends DialogFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.combo_tdd_history_fragment, container, false);
TextView text = (TextView) layout.findViewById(R.id.combo_tdd_history_text);
List<Tdd> tdds = ComboPlugin.getPlugin().getPump().history.tddHistory;
List<Tdd> tdds = ComboPlugin.getPlugin().getPump().tddHistory;
StringBuilder sb = new StringBuilder();
// TODO i18n
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.");

View file

@ -138,11 +138,11 @@ public class ReadHistoryCommand extends BaseCommand {
int record = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.CURRENT_RECORD);
int totalRecords = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.TOTAL_RECORD);
while (true) {
log.debug("Reading TDD record #" + record + "/" + totalRecords);
Tdd tdd = readTddRecord();
if (requestedTime != PumpHistoryRequest.FULL && tdd.timestamp <= requestedTime) {
break;
}
log.debug("Read TDD record #" + record + "/" + totalRecords);
history.tddHistory.add(tdd);
log.debug("Parsed " + scripter.getCurrentMenu().toString() + " => " + tdd);
if (record == totalRecords) {
@ -174,11 +174,11 @@ public class ReadHistoryCommand extends BaseCommand {
int record = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.CURRENT_RECORD);
int totalRecords = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.TOTAL_RECORD);
while (true) {
log.debug("Reading TBR record #" + record + "/" + totalRecords);
Tbr tbr = readTbrRecord();
if (requestedTime != PumpHistoryRequest.FULL && tbr.timestamp <= requestedTime) {
break;
}
log.debug("Read TBR record #" + record + "/" + totalRecords);
history.tbrHistory.add(tbr);
log.debug("Parsed " + scripter.getCurrentMenu().toString() + " => " + tbr);
if (record == totalRecords) {
@ -204,11 +204,11 @@ public class ReadHistoryCommand extends BaseCommand {
int record = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.CURRENT_RECORD);
int totalRecords = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.TOTAL_RECORD);
while (true) {
log.debug("Reading bolus record #" + record + "/" + totalRecords);
Bolus bolus = readBolusRecord();
if (requestedTime != PumpHistoryRequest.FULL && bolus.timestamp <= requestedTime) {
break;
}
log.debug("Read bolus record #" + record + "/" + totalRecords);
history.bolusHistory.add(bolus);
log.debug("Parsed " + scripter.getCurrentMenu().toString() + " => " + bolus);
if (record == totalRecords) {
@ -234,11 +234,11 @@ public class ReadHistoryCommand extends BaseCommand {
int record = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.CURRENT_RECORD);
int totalRecords = (int) scripter.getCurrentMenu().getAttribute(MenuAttribute.TOTAL_RECORD);
while (true) {
log.debug("Reading error record #" + record + "/" + totalRecords);
PumpError error = readErrorRecord();
if (requestedTime != PumpHistoryRequest.FULL && error.timestamp <= requestedTime) {
break;
}
log.debug("Read error record #" + record + "/" + totalRecords);
history.pumpErrorHistory.add(error);
log.debug("Parsed " + scripter.getCurrentMenu().toString() + " => " + error);
if (record == totalRecords) {