From 12a3609565ea52c9ca2edebdd5894756a560f17e Mon Sep 17 00:00:00 2001 From: Andy Rozman Date: Wed, 5 May 2021 16:57:48 +0100 Subject: [PATCH] - started working TBR - added Dropbox stuff (not part of project) --- .../maintenance/dropbox/UploadFileTask.java | 72 +++++++ .../maintenance/dropbox/UriHelpers.java | 119 ++++++++++++ .../pump/common/sync/PumpSyncStorage.kt | 16 +- .../pump/medtronic/MedtronicPumpPlugin.kt | 38 ++-- .../medtronic/data/MedtronicHistoryData.kt | 181 ++++++++++++++---- .../medtronic/data/dto/TempBasalProcessDTO.kt | 14 +- 6 files changed, 378 insertions(+), 62 deletions(-) create mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/dropbox/UploadFileTask.java create mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/dropbox/UriHelpers.java diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/dropbox/UploadFileTask.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/dropbox/UploadFileTask.java new file mode 100644 index 0000000000..0bedd145a8 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/dropbox/UploadFileTask.java @@ -0,0 +1,72 @@ +package info.nightscout.androidaps.plugins.general.maintenance.dropbox; + +import android.content.Context; +import android.net.Uri; +import android.os.AsyncTask; + +import com.dropbox.core.DbxException; +import com.dropbox.core.v2.DbxClientV2; +import com.dropbox.core.v2.files.FileMetadata; +import com.dropbox.core.v2.files.WriteMode; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class UploadFileTask extends AsyncTask { + + private final Context mContext; + private final DbxClientV2 mDbxClient; + private final Callback mCallback; + private Exception mException; + + public interface Callback { + void onUploadComplete(FileMetadata result); + void onError(Exception e); + } + + UploadFileTask(Context context, DbxClientV2 dbxClient, Callback callback) { + mContext = context; + mDbxClient = dbxClient; + mCallback = callback; + } + + @Override + protected void onPostExecute(FileMetadata result) { + super.onPostExecute(result); + if (mException != null) { + mCallback.onError(mException); + } else if (result == null) { + mCallback.onError(null); + } else { + mCallback.onUploadComplete(result); + } + } + + @Override + protected FileMetadata doInBackground(String... params) { + String localUri = params[0]; + File localFile = UriHelpers.getFileForUri(mContext, Uri.parse(localUri)); + + if (localFile != null) { + String remoteFolderPath = params[1]; + + // Note - this is not ensuring the name is a valid dropbox file name + String remoteFileName = localFile.getName(); + + try (InputStream inputStream = new FileInputStream(localFile)) { + return mDbxClient.files().uploadBuilder(remoteFolderPath + "/" + remoteFileName) + .withMode(WriteMode.OVERWRITE) + .uploadAndFinish(inputStream); + } catch (DbxException | IOException e) { + mException = e; + } + } + + return null; + } + + + +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/dropbox/UriHelpers.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/dropbox/UriHelpers.java new file mode 100644 index 0000000000..67a1d9c0dd --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/dropbox/UriHelpers.java @@ -0,0 +1,119 @@ +package info.nightscout.androidaps.plugins.general.maintenance.dropbox; + +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.os.Environment; +import android.provider.DocumentsContract; +import android.provider.MediaStore; + +import java.io.File; + +public class UriHelpers { + + private UriHelpers() {} + + /** + * Get the file path for a uri. This is a convoluted way to get the path for an Uri created using the + * StorageAccessFramework. This in no way is the official way to do this but there does not seem to be a better + * way to do this at this point. It is taken from https://github.com/iPaulPro/aFileChooser. + * + * @param context The context of the application + * @param uri The uri of the saved file + * @return The file with path pointing to the saved file. It can return null if we can't resolve the uri properly. + */ + public static File getFileForUri(final Context context, final Uri uri) { + String path = null; + // DocumentProvider + if (DocumentsContract.isDocumentUri(context, uri)) { + // ExternalStorageProvider + if (isExternalStorageDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + if ("primary".equalsIgnoreCase(type)) { + path = Environment.getExternalStorageDirectory() + "/" + split[1]; + } + } else if (isDownloadsDocument(uri)) { + // DownloadsProvider + final String id = DocumentsContract.getDocumentId(uri); + final Uri contentUri = ContentUris + .withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); + + path = getDataColumn(context, contentUri, null, null); + } else if (isMediaDocument(uri)) { + // MediaProvider + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + Uri contentUri = null; + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + + final String selection = "_id=?"; + final String[] selectionArgs = new String[] { + split[1] + }; + + path = getDataColumn(context, contentUri, selection, selectionArgs); + } + } else if ("content".equalsIgnoreCase(uri.getScheme())) { + // MediaStore (and general) + path = getDataColumn(context, uri, null, null); + } else if ("file".equalsIgnoreCase(uri.getScheme())) { + // File + path = uri.getPath(); + } + + if (path != null) { + return new File(path); + } + return null; + } + + private static String getDataColumn(Context context, Uri uri, String selection, + String[] selectionArgs) { + + Cursor cursor = null; + final String column = "_data"; + final String[] projection = { + column + }; + + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, + null); + if (cursor != null && cursor.moveToFirst()) { + final int column_index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(column_index); + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + return null; + } + + + private static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri.getAuthority()); + } + + private static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); + } + + private static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri.getAuthority()); + } + +} diff --git a/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/sync/PumpSyncStorage.kt b/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/sync/PumpSyncStorage.kt index ef13ad9f0d..83d4a85745 100644 --- a/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/sync/PumpSyncStorage.kt +++ b/core/src/main/java/info/nightscout/androidaps/plugins/pump/common/sync/PumpSyncStorage.kt @@ -8,6 +8,7 @@ import info.nightscout.androidaps.db.TemporaryBasal 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 info.nightscout.androidaps.utils.sharedPreferences.SP import java.lang.reflect.Type import java.util.* @@ -132,12 +133,17 @@ class PumpSyncStorage @Inject constructor( // TODO fun addTemporaryBasalRateWithTempId(temporaryBasal: PumpDbEntryTBR, writeToInternalHistory: Boolean, creator: PumpSyncEntriesCreator) : Boolean { val timenow : Long = System.currentTimeMillis() - val temporaryId = creator.generateTempId(timenow) - val response = false - // pumpSync.addBolusWithTempId(temporaryBasal.timestamp, detailedBolusInfo.insulin, - // generateTempId(detailedBolusInfo.timestamp), detailedBolusInfo.getBolusType(), - // getPumpType(), serialNumber()); + + val response = pumpSync.addTemporaryBasalWithTempId( + timenow, + temporaryBasal.rate, + (temporaryBasal.durationInMinutes * 60L * 1000L), + temporaryBasal.isAbsolute, + temporaryId, + temporaryBasal.tbrType, + creator.model(), + creator.serialNumber()) if (response && writeToInternalHistory) { var innerList: MutableList = pumpSyncStorage[TBR]!! diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt index 511f6ef70e..2fe0482bd1 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt @@ -759,17 +759,17 @@ class MedtronicPumpPlugin @Inject constructor( medtronicPumpStatus.tempBasalStart = Date() medtronicPumpStatus.tempBasalAmount = absoluteRate medtronicPumpStatus.tempBasalLength = durationInMinutes - val tempStart = TemporaryBasal(injector) // - .date(System.currentTimeMillis()) // - .duration(durationInMinutes) // - .absolute(absoluteRate) // - .source(Source.USER) - - activePlugin.activeTreatments.addToHistoryTempBasal(tempStart) - - // val tempData = PumpDbEntryTBR(absoluteRate, true, durationInMinutes, tbrType) + // val tempStart = TemporaryBasal(injector) // + // .date(System.currentTimeMillis()) // + // .duration(durationInMinutes) // + // .absolute(absoluteRate) // + // .source(Source.USER) // - // pumpSyncStorage.addTemporaryBasalRateWithTempId(tempData, true, this) + // activePlugin.activeTreatments.addToHistoryTempBasal(tempStart) + + val tempData = PumpDbEntryTBR(absoluteRate, true, durationInMinutes, tbrType) + + pumpSyncStorage.addTemporaryBasalRateWithTempId(tempData, true, this) incrementStatistics(MedtronicConst.Statistics.TBRsSet) finishAction("TBR") @@ -1003,17 +1003,17 @@ class MedtronicPumpPlugin @Inject constructor( finishAction("TBR") return if (response!!) { aapsLogger.info(LTag.PUMP, logPrefix + "cancelTempBasal - Cancel TBR successful.") - val tempBasal = TemporaryBasal(injector) // - .date(System.currentTimeMillis()) // - .duration(0) // - .source(Source.USER) - - activePlugin.activeTreatments.addToHistoryTempBasal(tempBasal) + // val tempBasal = TemporaryBasal(injector) // + // .date(System.currentTimeMillis()) // + // .duration(0) // + // .source(Source.USER) + // + // activePlugin.activeTreatments.addToHistoryTempBasal(tempBasal) // TODO need to find solution for this !? - // val tempData = PumpDbEntryTBR(absoluteRate, true, durationInMinutes, tbrType) - // - // pumpSyncStorage.addTemporaryBasalRateWithTempId(tempData, true, this) + val tempData = PumpDbEntryTBR(0.0, true, 0, TemporaryBasalType.NORMAL) + + pumpSyncStorage.addTemporaryBasalRateWithTempId(tempData, true, this) PumpEnactResult(injector).success(true).enacted(true) // .isTempCancel(true) diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryData.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryData.kt index e731eb1ce9..22068001b2 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryData.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/MedtronicHistoryData.kt @@ -26,7 +26,6 @@ import info.nightscout.androidaps.plugins.pump.medtronic.defs.PumpBolusType import info.nightscout.androidaps.plugins.pump.medtronic.driver.MedtronicPumpStatus import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicConst import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil -import info.nightscout.androidaps.utils.Round import info.nightscout.androidaps.utils.sharedPreferences.SP import org.apache.commons.lang3.StringUtils import org.joda.time.LocalDateTime @@ -579,23 +578,24 @@ class MedtronicHistoryData @Inject constructor( entryList.removeAt(0) } } - val oldestTimestamp = getOldestTimestamp(entryList) - val entriesFromHistory = getDatabaseEntriesByLastTimestamp(oldestTimestamp, ProcessHistoryRecord.TBR) + + val tbrRecords = pumpSyncStorage.getTBRs() aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, ProcessHistoryRecord.TBR.description + " List (before filter): %s, FromDb=%s", gson.toJson(entryList), - gson.toJson(entriesFromHistory))) + gson.toJson(tbrRecords))) var processDTO: TempBasalProcessDTO? = null - val processList: MutableList = ArrayList() + val processList: MutableList = mutableListOf() for (treatment in entryList) { val tbr2 = treatment.getDecodedDataEntry("Object") as TempBasalPair? if (tbr2!!.isCancelTBR) { if (processDTO != null) { processDTO.itemTwo = treatment + processDTO.cancelPresent = true if (readOldItem) { processDTO.processOperation = TempBasalProcessDTO.Operation.Edit readOldItem = false } } else { - aapsLogger.error("processDTO was null - shouldn't happen. ItemTwo=$treatment") + aapsLogger.warn(LTag.PUMP,"processDTO was null - shouldn't happen, ignoring item. ItemTwo=$treatment") } } else { if (processDTO != null) { @@ -609,41 +609,152 @@ class MedtronicHistoryData @Inject constructor( if (processDTO != null) { processList.add(processDTO) } - if (isCollectionNotEmpty(processList)) { + if (processList.isNotEmpty()) { for (tempBasalProcessDTO in processList) { - if (tempBasalProcessDTO.processOperation === TempBasalProcessDTO.Operation.Edit) { - // edit - val tempBasal = findTempBasalWithPumpId(tempBasalProcessDTO.itemOne!!.pumpId!!, entriesFromHistory) - if (tempBasal != null) { - tempBasal.durationInMinutes = tempBasalProcessDTO.duration - // TODO pumpSync - createOrUpdate(tempBasal) - databaseHelper.createOrUpdate(tempBasal) - aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "Edit " + ProcessHistoryRecord.TBR.description + " - (entryFromDb=%s) ", tempBasal)) - } else { - aapsLogger.error(LTag.PUMP, "TempBasal not found. Item: " + tempBasalProcessDTO.itemOne) - } + + val entryWithTempId = findDbEntry(tempBasalProcessDTO.itemOne, tbrRecords) + + val tbrEntry = tempBasalProcessDTO.itemOne!!.getDecodedDataEntry("Object") as TempBasalPair + + removeCancelTBRTemporaryRecord(tempBasalProcessDTO, tbrRecords) // TODO + + if (entryWithTempId!=null) { + val result = pumpSync.syncTemporaryBasalWithTempId( + tryToGetByLocalTime(tempBasalProcessDTO.atechDateTime), + tbrEntry.insulinRate, + tempBasalProcessDTO.duration * 60L * 1000L, + !tbrEntry.isPercent, + entryWithTempId.temporaryId, + PumpSync.TemporaryBasalType.NORMAL, + tempBasalProcessDTO.pumpId, + medtronicPumpStatus.pumpType, + medtronicPumpStatus.serialNumber!!) + + aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "syncTemporaryBasalWithTempId [date=%d, temporaryId=%d, pumpId=%d, rate=%.2f %s, duration=%d, pumpSerial=%s] - Result: %b", + tempBasalProcessDTO.atechDateTime, entryWithTempId.temporaryId, tempBasalProcessDTO.pumpId, + tbrEntry.insulinRate, (if (tbrEntry.isPercent) "%" else "U"), tempBasalProcessDTO.duration, + medtronicPumpStatus.serialNumber!!, result)) + + pumpSyncStorage.removeTemporaryBasalWithTemporaryId(entryWithTempId.temporaryId) + } else { - // add - val treatment = tempBasalProcessDTO.itemOne - val tbr2 = treatment!!.decodedData!!["Object"] as TempBasalPair? - tbr2!!.durationMinutes = tempBasalProcessDTO.duration - val tempBasal = findTempBasalWithPumpId(tempBasalProcessDTO.itemOne!!.pumpId!!, entriesFromHistory) - if (tempBasal == null) { - val treatmentDb = findDbEntry_Old(treatment, entriesFromHistory) - aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "Add " + ProcessHistoryRecord.TBR.description + " %s - (entryFromDb=%s) ", treatment, treatmentDb)) - addTBR(treatment, treatmentDb as TemporaryBasal?) - } else { - // this shouldn't happen - if (tempBasal.durationInMinutes != tempBasalProcessDTO.duration) { - aapsLogger.debug(LTag.PUMP, "Found entry with wrong duration (shouldn't happen)... updating") - tempBasal.durationInMinutes = tempBasalProcessDTO.duration - } - } - } // if + val result = pumpSync.syncTemporaryBasalWithPumpId( + tryToGetByLocalTime(tempBasalProcessDTO.atechDateTime), + tbrEntry.insulinRate, + tempBasalProcessDTO.duration * 60L * 1000L, + !tbrEntry.isPercent, + PumpSync.TemporaryBasalType.NORMAL, + tempBasalProcessDTO.pumpId, + medtronicPumpStatus.pumpType, + medtronicPumpStatus.serialNumber!!) + + aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "syncTemporaryBasalWithPumpId [date=%d, pumpId=%d, rate=%.2f %s, duration=%d, pumpSerial=%s] - Result: %b", + tempBasalProcessDTO.atechDateTime, tempBasalProcessDTO.pumpId, + tbrEntry.insulinRate, (if (tbrEntry.isPercent) "%" else "U"), tempBasalProcessDTO.duration, + medtronicPumpStatus.serialNumber!!, result)) + } } // for } // collection } + + private fun removeCancelTBRTemporaryRecord(tempBasalProcessDTO: TempBasalProcessDTO, tbrRecords: MutableList) { + //fun syncTemporaryBasalWithPumpId(timestamp: Long, rate: Double, duration: Long, isAbsolute: Boolean, type: PumpSync.TemporaryBasalType?, pumpId: Long, pumpType: PumpType, pumpSerial: String): Boolean + if (tempBasalProcessDTO.cancelPresent) { + + //val dateTime : Long = DateTimeUtil.getMillisFromATDWithAddedMinutes(tempBasalProcessDTO.atechDateTime, tempBasalProcessDTO.duration) + + val dbEntry = findDbEntry(tempBasalProcessDTO.itemTwo!!, tbrRecords) + + if (dbEntry!=null) { + if (dbEntry.tbrData!!.durationInMinutes == 0) { + pumpSync.invalidateTemporaryBasal(dbEntry.temporaryId) // TODO fix + } + } + + // + } + } + + + // private fun processTBREntries_Old(entryList: MutableList) { + // Collections.reverse(entryList) + // val tbr = entryList[0].getDecodedDataEntry("Object") as TempBasalPair? + // var readOldItem = false + // if (tbr!!.isCancelTBR) { + // val oneMoreEntryFromHistory = getOneMoreEntryFromHistory(PumpHistoryEntryType.TempBasalCombined) + // if (oneMoreEntryFromHistory != null) { + // entryList.add(0, oneMoreEntryFromHistory) + // readOldItem = true + // } else { + // entryList.removeAt(0) + // } + // } + // val oldestTimestamp = getOldestTimestamp(entryList) + // val entriesFromHistory = getDatabaseEntriesByLastTimestamp(oldestTimestamp, ProcessHistoryRecord.TBR) + // aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, ProcessHistoryRecord.TBR.description + " List (before filter): %s, FromDb=%s", gson.toJson(entryList), + // gson.toJson(entriesFromHistory))) + // var processDTO: TempBasalProcessDTO? = null + // val processList: MutableList = ArrayList() + // for (treatment in entryList) { + // val tbr2 = treatment.getDecodedDataEntry("Object") as TempBasalPair? + // if (tbr2!!.isCancelTBR) { + // if (processDTO != null) { + // processDTO.itemTwo = treatment + // if (readOldItem) { + // processDTO.processOperation = TempBasalProcessDTO.Operation.Edit + // readOldItem = false + // } + // } else { + // aapsLogger.error("processDTO was null - shouldn't happen. ItemTwo=$treatment") + // } + // } else { + // if (processDTO != null) { + // processList.add(processDTO) + // } + // processDTO = TempBasalProcessDTO() + // processDTO.itemOne = treatment + // processDTO.processOperation = TempBasalProcessDTO.Operation.Add + // } + // } + // if (processDTO != null) { + // processList.add(processDTO) + // } + // if (isCollectionNotEmpty(processList)) { + // for (tempBasalProcessDTO in processList) { + // if (tempBasalProcessDTO.processOperation === TempBasalProcessDTO.Operation.Edit) { + // // edit + // val tempBasal = findTempBasalWithPumpId(tempBasalProcessDTO.itemOne!!.pumpId!!, entriesFromHistory) + // if (tempBasal != null) { + // tempBasal.durationInMinutes = tempBasalProcessDTO.duration + // // pumpSync - createOrUpdate(tempBasal) + // databaseHelper.createOrUpdate(tempBasal) + // aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "Edit " + ProcessHistoryRecord.TBR.description + " - (entryFromDb=%s) ", tempBasal)) + // } else { + // aapsLogger.error(LTag.PUMP, "TempBasal not found. Item: " + tempBasalProcessDTO.itemOne) + // } + // } else { + // // add + // val treatment = tempBasalProcessDTO.itemOne + // val tbr2 = treatment!!.decodedData!!["Object"] as TempBasalPair? + // tbr2!!.durationMinutes = tempBasalProcessDTO.duration + // val tempBasal = findTempBasalWithPumpId(tempBasalProcessDTO.itemOne!!.pumpId!!, entriesFromHistory) + // if (tempBasal == null) { + // val treatmentDb = findDbEntry_Old(treatment, entriesFromHistory) + // aapsLogger.debug(LTag.PUMP, String.format(Locale.ENGLISH, "Add " + ProcessHistoryRecord.TBR.description + " %s - (entryFromDb=%s) ", treatment, treatmentDb)) + // addTBR(treatment, treatmentDb as TemporaryBasal?) + // } else { + // // this shouldn't happen + // if (tempBasal.durationInMinutes != tempBasalProcessDTO.duration) { + // aapsLogger.debug(LTag.PUMP, "Found entry with wrong duration (shouldn't happen)... updating") + // tempBasal.durationInMinutes = tempBasalProcessDTO.duration + // } + // } + // } // if + // } // for + // } // collection + // } + private fun findTempBasalWithPumpId(pumpId: Long, entriesFromHistory: List): TemporaryBasal? { for (dbObjectBase in entriesFromHistory) { val tbr = dbObjectBase as TemporaryBasal diff --git a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/dto/TempBasalProcessDTO.kt b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/dto/TempBasalProcessDTO.kt index a7705f8c2f..52e6152b38 100644 --- a/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/dto/TempBasalProcessDTO.kt +++ b/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/data/dto/TempBasalProcessDTO.kt @@ -4,9 +4,17 @@ import info.nightscout.androidaps.plugins.pump.common.utils.DateTimeUtil import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntry class TempBasalProcessDTO { - @JvmField var itemOne: PumpHistoryEntry? = null - @JvmField var itemTwo: PumpHistoryEntry? = null - @JvmField var processOperation = Operation.None + var itemOne: PumpHistoryEntry? = null + var itemTwo: PumpHistoryEntry? = null + var processOperation = Operation.None + var cancelPresent: Boolean = false + + val atechDateTime: Long + get() = if (itemOne==null) 0L else itemOne!!.atechDateTime!! + + val pumpId: Long + get() = if (itemOne==null) 0L else itemOne!!.pumpId!! + val duration: Int get() = if (itemTwo == null) { val tbr = itemOne!!.getDecodedDataEntry("Object") as TempBasalPair?