diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 1a7db0dd5c..f42b91b134 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -46,7 +46,6 @@ Удостоверяването неуспешно Създаването на профила невъзможно. Профилът е невалиден. Не убивай приложението? - Време за ядене!\nИзпълнете болус съветника и направете изчисления отново. Качването на данни за проблеми е забранено!(Fabric) Премахни филтъра Канюла diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 664addee47..9aa0159769 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -44,7 +44,6 @@ L\'autorització ha fallat No s\'ha pogut crear el perfil local. Perfil no vàlid. No matar la meva app? - Hora de menjar!\nExecuteu l\'assistent de bolus i torneu a fer els càlculs. Enviament de logs d\'error desactivat! Netejar filtres Cànula diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 2345b42700..76402c65fb 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -46,7 +46,6 @@ Autorizace selhala Nelze vytvořit profil. Profil je neplatný. Nezabíjet mou aplikaci? - Čas k jídlu!\nSpusťte Bolusovou kalkulačku a proveďte výpočet znovu. Nahrávání protokolů o pádech zakázáno! Vymazat filtr Kanyla diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 1db0beb3e9..f5d3a39f62 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -46,7 +46,6 @@ Godkendelse mislykkedes Kunne ikke oprette profil. Profilen er ugyldig. Luk ikke min app? - Tid til at spise!\nKør Bolus guiden og lav beregning igen. Upload af Crash logs deaktiveret! Nulstil filter Kanyle diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 31c649effa..3d8646bd4f 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -46,7 +46,6 @@ Autorisierung fehlgeschlagen Profil kann nicht erstellt werden. Profil ist ungültig. Don\'t kill my app? - Zeit zum Essen!\nStarte den Bolus-Rechner und gib die KH ein. Hochladen von Crash-Protokollen deaktiviert! Filter löschen Kanüle diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index a832b3d914..93e3a6dfb3 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -46,7 +46,6 @@ Ha fallado la autorización No se puede crear el perfil. El perfil es inválido. ¿No matar mi aplicación? - ¡Hora de comer!\nEjecutar el asistente de bolo y calcular de nuevo. ¡Carga de registros de errores desactivada! Borrar filtro Cánula diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index f1a7419126..4dd1c84b24 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -46,7 +46,6 @@ Echec de l\'authentification Impossible de créer le profil. Le profil est invalide. Garder l\'appli en arrière plan ? - Il est temps de manger !\nExécutez l\'assistant Bolus et refaites le calcul. Téléchargement logs crashs désactivé! Effacer le filtre Canule diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 6cea5dd5aa..ba4bf39d49 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -46,7 +46,6 @@ Autorizzazione fallita Impossibile creare il profilo. Il profilo non è valido. Non terminare l\'app? - Tempo di mangiare!\nEsegui il calcolatore e fai di nuovi i calcoli. Caricamento log dei crash disabilitato! Cancella filtro Cannula diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index ef523eb712..a07111a2a0 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -46,7 +46,6 @@ ההרשאה נכשלה לא ניתן ליצור פרופיל מקומי. הפרופיל אינו חוקי. איך לא להשבית את האפליקציה שלי? - זמן לאכול!\nהפעילו את אשף הבולוסים וחשבו בולוס חדש. העלאת רשומות קריסה מושבתת! נקה סינון צינורית diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 6e2e601e50..eaf67357d2 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -43,7 +43,6 @@ 차트 메뉴 인증 실패 앱이 종료되지 않도록 합니다? - 식사할 시간입니다! \nBolus wizard를 켜고 다시 계산하십시오. 충돌 로그 업로드가 작동하지 않습니다. 필터 지우기 캐뉼라 diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index 5a1e454810..6954c628bf 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -46,7 +46,6 @@ Autorizacija nepavyko Nepavyksta sukurti profilio. Profilis neteisingas. Don\'t kill my app? - Laikas valgyti!\nĮjunkite Boluso patarėją ir atlikite skaičiavimą dar kartą. Sutrikimų žurnalo įrašų įkėlimas išjungtas! Valyti filtrą Kaniulė diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index fc3900a149..02e0b87228 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -46,7 +46,6 @@ Autorisatie mislukt Kan profiel niet aanmaken. Profiel is ongeldig. Don\'t kill my app? - Tijd om te eten!\nVoer de boluswizard opnieuw uit. Upload van crashrapporten is uitgeschakeld! Verwijder filter Canule diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 1780e7999c..e556fd19ba 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -46,7 +46,6 @@ Autentisering feilet Klarte ikke å opprette profil. Profilen er ikke gyldig. Avslutte app? - Nå må du spise!\Bruk bolus veiviseren og beregn på nytt. Opplast av krasj logger er deaktivert! Nullstill filtre Kanyle diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 32ab99571c..b400c4310d 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -44,7 +44,6 @@ Autoryzacja nie powiodła się Nie można utworzyć profilu. Profil jest nieprawidłowy. Nie zabij mojej aplikacji? - Czas jeść!\nUruchom kreatora bolusa i zrób obliczenia ponownie. Przesyłanie dzienników awarii jest wyłączone! Wyczyść filtr Kaniula diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 06d026d264..7c1a2074f1 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -46,7 +46,6 @@ Falha na autorização Não foi possível criar o perfil. Perfil inválido. Não encerre meu aplicativo? - Hora de comer!\nAbra o assistente de bolus e faça o cálculo novamente. Envio de logs de erro desativado! Limpar filtro Cânula diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index e57116ad69..ab64e43735 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -44,7 +44,6 @@ Falha na autorização Não é possível criar o perfil. O perfil é inválido. Não encerre minha app? - Hora de comer!\nExecutar assistente de Bólus e fazer cálculo novamente. Envio de registos de erro desativado! Limpar filtros Cânula diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 8a8aa9b8df..3ea8624597 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -44,7 +44,6 @@ Autorizarea a eșuat Nu se poate crea profilul. Profilul este invalid. Nu-mi opri aplicația? - Timpul sa mănânci!\nRuleaza Calculatorul de Bolus pentru a face calculele din nou. Încărcarea jurnalelor de erori este dezactivata! Șterge filtru Canula diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 835b8abfe4..0c5dec9871 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -46,7 +46,6 @@ Ошибка авторизации Не удается создать локальный профиль. Настройки профиля неправильны. Не закрывать приложение? - Пора есть!\nЗапустите помощник болюса снова для подсчета. Загрузка журналов сбоя на сервер отключена! Очистить фильтр Катетер помпы diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 6b908ff304..771d8a4f51 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -46,7 +46,6 @@ Autorizácia zlyhala Nie je možné vytvoriť lokálny profil. Profil je neplatný. Nepotláčať moju aplikáciu? - Čas na jedlo!\nSpustite Bolusovú kalkulačku a urobte výpočet znova. Odosielanie protokolov o zlyhaní je zakázané! Vyčistiť filter Kanyla diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index d4ac53d28c..d4f2f7f4cc 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -44,7 +44,6 @@ Behörighetskontroll misslyckades Kan inte att skapa profilen. Profilen är felaktig. Döda inte min app? - Dags att äta!\nKör bolusguiden igen för ny beräkning. Uppladdning av kraschloggar inaktiverad! Rensa filter Kanyl diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index db88fc05c8..e727c94fac 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -46,7 +46,6 @@ Yetkilendirme başarısız oldu Profil oluşturulamıyor. Profil geçersiz. Uygulamamı devre dışı bırakma? - Yemek zamanı!\nBolus sihirbazını çalıştırın ve yeniden hesaplama yapın. Çökme günlükleri yükleme devre dışı bırakıldı! Filtreyi temizle Kanül diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d2b96a9b61..0a5b99d13e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -46,7 +46,6 @@ 授权失败 无法创建配置文件。配置文件无效。 不要杀死我的应用程序? - 吃饭时间到了!\n请运行大剂量向导,然后进行计算。 已禁用崩溃日志上传! 清除筛选 输注导管 diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/StoreDataForDb.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/StoreDataForDb.kt index d01b23f829..7bb85952c0 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/StoreDataForDb.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/nsclient/StoreDataForDb.kt @@ -1,7 +1,48 @@ package info.nightscout.interfaces.nsclient +import info.nightscout.database.entities.Bolus +import info.nightscout.database.entities.BolusCalculatorResult +import info.nightscout.database.entities.Carbs +import info.nightscout.database.entities.DeviceStatus +import info.nightscout.database.entities.EffectiveProfileSwitch +import info.nightscout.database.entities.ExtendedBolus +import info.nightscout.database.entities.Food +import info.nightscout.database.entities.GlucoseValue +import info.nightscout.database.entities.OfflineEvent +import info.nightscout.database.entities.ProfileSwitch +import info.nightscout.database.entities.TemporaryBasal +import info.nightscout.database.entities.TemporaryTarget +import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.transactions.TransactionGlucoseValue interface StoreDataForDb { val glucoseValues: MutableList + val boluses: MutableList + val carbs: MutableList + val temporaryTargets: MutableList + val effectiveProfileSwitches: MutableList + val bolusCalculatorResults: MutableList + val therapyEvents: MutableList + val extendedBoluses: MutableList + val temporaryBasals: MutableList + val profileSwitches: MutableList + val offlineEvents: MutableList + + val nsIdGlucoseValues: MutableList + val nsIdBoluses: MutableList + val nsIdCarbs: MutableList + val nsIdFoods: MutableList + val nsIdTemporaryTargets: MutableList + val nsIdEffectiveProfileSwitches: MutableList + val nsIdBolusCalculatorResults: MutableList + val nsIdTherapyEvents: MutableList + val nsIdExtendedBoluses: MutableList + val nsIdTemporaryBasals: MutableList + val nsIdProfileSwitches: MutableList + val nsIdOfflineEvents: MutableList + val nsIdDeviceStatuses: MutableList + + fun storeTreatmentsToDb() + fun storeGlucoseValuesToDb() + fun scheduleNsIdUpdate() } \ No newline at end of file diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/sync/DataSyncSelector.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/sync/DataSyncSelector.kt index dc097f6b8f..73ae9bd313 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/sync/DataSyncSelector.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/sync/DataSyncSelector.kt @@ -17,19 +17,21 @@ import org.json.JSONObject interface DataSyncSelector { - data class PairTemporaryTarget(val value: TemporaryTarget, val updateRecordId: Long) - data class PairGlucoseValue(val value: GlucoseValue, val updateRecordId: Long) - data class PairTherapyEvent(val value: TherapyEvent, val updateRecordId: Long) - data class PairFood(val value: Food, val updateRecordId: Long) - data class PairBolus(val value: Bolus, val updateRecordId: Long) - data class PairCarbs(val value: Carbs, val updateRecordId: Long) - data class PairBolusCalculatorResult(val value: BolusCalculatorResult, val updateRecordId: Long) - data class PairTemporaryBasal(val value: TemporaryBasal, val updateRecordId: Long) - data class PairExtendedBolus(val value: ExtendedBolus, val updateRecordId: Long) - data class PairProfileSwitch(val value: ProfileSwitch, val updateRecordId: Long) - data class PairEffectiveProfileSwitch(val value: EffectiveProfileSwitch, val updateRecordId: Long) - data class PairOfflineEvent(val value: OfflineEvent, val updateRecordId: Long) - data class PairProfileStore(val value: JSONObject, val timestampSync: Long) + interface DataPair + data class PairTemporaryTarget(val value: TemporaryTarget, val updateRecordId: Long): DataPair + data class PairGlucoseValue(val value: GlucoseValue, val updateRecordId: Long): DataPair + data class PairTherapyEvent(val value: TherapyEvent, val updateRecordId: Long): DataPair + data class PairFood(val value: Food, val updateRecordId: Long): DataPair + data class PairBolus(val value: Bolus, val updateRecordId: Long): DataPair + data class PairCarbs(val value: Carbs, val updateRecordId: Long): DataPair + data class PairBolusCalculatorResult(val value: BolusCalculatorResult, val updateRecordId: Long): DataPair + data class PairTemporaryBasal(val value: TemporaryBasal, val updateRecordId: Long): DataPair + data class PairExtendedBolus(val value: ExtendedBolus, val updateRecordId: Long): DataPair + data class PairProfileSwitch(val value: ProfileSwitch, val updateRecordId: Long): DataPair + data class PairEffectiveProfileSwitch(val value: EffectiveProfileSwitch, val updateRecordId: Long): DataPair + data class PairOfflineEvent(val value: OfflineEvent, val updateRecordId: Long): DataPair + data class PairProfileStore(val value: JSONObject, val timestampSync: Long): DataPair + data class PairDeviceStatus(val value: DeviceStatus, val unused: Long?): DataPair fun queueSize(): Long @@ -38,81 +40,42 @@ interface DataSyncSelector { fun resetToNextFullSync() fun confirmLastBolusIdIfGreater(lastSynced: Long) - fun changedBoluses(): List - - // Until NS v3 fun processChangedBolusesCompat() fun confirmLastCarbsIdIfGreater(lastSynced: Long) - fun changedCarbs(): List - - // Until NS v3 fun processChangedCarbsCompat() fun confirmLastBolusCalculatorResultsIdIfGreater(lastSynced: Long) - fun changedBolusCalculatorResults(): List - - // Until NS v3 fun processChangedBolusCalculatorResultsCompat() fun confirmLastTempTargetsIdIfGreater(lastSynced: Long) - fun changedTempTargets(): List - - // Until NS v3 fun processChangedTempTargetsCompat() fun confirmLastGlucoseValueIdIfGreater(lastSynced: Long) - fun changedGlucoseValues(): List - - // Until NS v3 fun processChangedGlucoseValuesCompat() fun confirmLastTherapyEventIdIfGreater(lastSynced: Long) - fun changedTherapyEvents(): List - - // Until NS v3 fun processChangedTherapyEventsCompat() fun confirmLastFoodIdIfGreater(lastSynced: Long) - fun changedFoods(): List - - // Until NS v3 fun processChangedFoodsCompat() fun confirmLastDeviceStatusIdIfGreater(lastSynced: Long) - fun changedDeviceStatuses(): List - - // Until NS v3 fun processChangedDeviceStatusesCompat() fun confirmLastTemporaryBasalIdIfGreater(lastSynced: Long) - fun changedTemporaryBasals(): List - - // Until NS v3 fun processChangedTemporaryBasalsCompat() fun confirmLastExtendedBolusIdIfGreater(lastSynced: Long) - fun changedExtendedBoluses(): List - - // Until NS v3 fun processChangedExtendedBolusesCompat() fun confirmLastProfileSwitchIdIfGreater(lastSynced: Long) - fun changedProfileSwitch(): List - - // Until NS v3 fun processChangedProfileSwitchesCompat() fun confirmLastEffectiveProfileSwitchIdIfGreater(lastSynced: Long) - fun changedEffectiveProfileSwitch(): List - - // Until NS v3 fun processChangedEffectiveProfileSwitchesCompat() fun confirmLastOfflineEventIdIfGreater(lastSynced: Long) - fun changedOfflineEvents(): List - - // Until NS v3 fun processChangedOfflineEventsCompat() fun confirmLastProfileStore(lastSynced: Long) diff --git a/core/interfaces/src/main/java/info/nightscout/interfaces/sync/NsClient.kt b/core/interfaces/src/main/java/info/nightscout/interfaces/sync/NsClient.kt index 9b53c5f59b..f45013aa16 100644 --- a/core/interfaces/src/main/java/info/nightscout/interfaces/sync/NsClient.kt +++ b/core/interfaces/src/main/java/info/nightscout/interfaces/sync/NsClient.kt @@ -2,7 +2,6 @@ package info.nightscout.interfaces.sync import android.text.Spanned import info.nightscout.interfaces.nsclient.NSAlarm -import org.json.JSONObject interface NsClient : Sync { enum class Version { @@ -11,7 +10,6 @@ interface NsClient : Sync { val version: Version val address: String - val nsClientService: NSClientService? fun pause(newState: Boolean) fun resend(reason: String) @@ -24,9 +22,6 @@ interface NsClient : Sync { fun resetToFullSync() - interface NSClientService { - - fun dbAdd(collection: String, data: JSONObject, originalObject: Any, progress: String) - fun dbUpdate(collection: String, _id: String?, data: JSONObject?, originalObject: Any, progress: String) - } + fun dbAdd(collection: String, dataPair: DataSyncSelector.DataPair, progress: String) + fun dbUpdate(collection: String, dataPair: DataSyncSelector.DataPair, progress: String) } \ No newline at end of file diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/NSAndroidClientImpl.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/NSAndroidClientImpl.kt index 4a5b3ffa10..e5ef49e3c4 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/NSAndroidClientImpl.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/NSAndroidClientImpl.kt @@ -3,12 +3,16 @@ package info.nightscout.sdk import android.content.Context import info.nightscout.sdk.exceptions.DateHeaderOutOfToleranceException import info.nightscout.sdk.exceptions.InvalidAccessTokenException +import info.nightscout.sdk.exceptions.InvalidFormatNightscoutException import info.nightscout.sdk.exceptions.TodoNightscoutException +import info.nightscout.sdk.exceptions.UnknownResponseNightscoutException import info.nightscout.sdk.interfaces.NSAndroidClient import info.nightscout.sdk.localmodel.Status import info.nightscout.sdk.localmodel.entry.NSSgvV3 +import info.nightscout.sdk.localmodel.treatment.CreateUpdateResponse import info.nightscout.sdk.localmodel.treatment.NSTreatment import info.nightscout.sdk.mapper.toLocal +import info.nightscout.sdk.mapper.toRemoteTreatment import info.nightscout.sdk.mapper.toSgv import info.nightscout.sdk.mapper.toTreatment import info.nightscout.sdk.networking.NetworkStackBuilder @@ -58,6 +62,8 @@ class NSAndroidClientImpl( accessToken = accessToken, logging = logging ) + override var lastStatus: Status? = null + private set /* * TODO: how should our result look like? @@ -81,7 +87,7 @@ class NSAndroidClientImpl( } override suspend fun getStatus(): Status = callWrapper(dispatcher) { - api.statusSimple().result!!.toLocal() + api.statusSimple().result!!.toLocal().also { lastStatus = it } } // TODO: return something better than a String @@ -152,6 +158,38 @@ class NSAndroidClientImpl( } } + override suspend fun createTreatment(nsTreatment: NSTreatment): CreateUpdateResponse = callWrapper(dispatcher) { + + val remoteTreatment = nsTreatment.toRemoteTreatment() ?: throw InvalidFormatNightscoutException() + val response = api.createTreatment(remoteTreatment) + if (response.isSuccessful) { + return@callWrapper CreateUpdateResponse( + identifier = response.body()?.result?.identifier ?: throw UnknownResponseNightscoutException(), + isDeduplication = response.body()?.result?.isDeduplication ?: false, + deduplicatedIdentifier = response.body()?.result?.deduplicatedIdentifier, + lastModified = response.body()?.result?.lastModified + ) + } else { + throw TodoNightscoutException() // TODO: react to response errors (offline, ...) + } + } + + override suspend fun updateTreatment(nsTreatment: NSTreatment): CreateUpdateResponse = callWrapper(dispatcher) { + + val remoteTreatment = nsTreatment.toRemoteTreatment() ?: throw InvalidFormatNightscoutException() + val response = api.updateTreatment(remoteTreatment) + if (response.isSuccessful) { + return@callWrapper CreateUpdateResponse( + identifier = response.body()?.result?.identifier ?: throw UnknownResponseNightscoutException(), + isDeduplication = response.body()?.result?.isDeduplication ?: false, + deduplicatedIdentifier = response.body()?.result?.deduplicatedIdentifier, + lastModified = response.body()?.result?.lastModified + ) + } else { + throw TodoNightscoutException() // TODO: react to response errors (offline, ...) + } + } + private suspend fun callWrapper(dispatcher: CoroutineDispatcher, block: suspend () -> T): T = withContext(dispatcher) { retry( diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/exceptions/InvalidFormatNightscoutException.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/exceptions/InvalidFormatNightscoutException.kt new file mode 100644 index 0000000000..80ab0f019e --- /dev/null +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/exceptions/InvalidFormatNightscoutException.kt @@ -0,0 +1,3 @@ +package info.nightscout.sdk.exceptions + +class InvalidFormatNightscoutException : NightscoutException() diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/exceptions/UnknownResponseNightscoutException.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/exceptions/UnknownResponseNightscoutException.kt new file mode 100644 index 0000000000..f706d499b9 --- /dev/null +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/exceptions/UnknownResponseNightscoutException.kt @@ -0,0 +1,3 @@ +package info.nightscout.sdk.exceptions + +class UnknownResponseNightscoutException : NightscoutException() diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/interfaces/NSAndroidClient.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/interfaces/NSAndroidClient.kt index 918f4e8538..2e4f24f0d6 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/interfaces/NSAndroidClient.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/interfaces/NSAndroidClient.kt @@ -2,12 +2,14 @@ package info.nightscout.sdk.interfaces import info.nightscout.sdk.localmodel.Status import info.nightscout.sdk.localmodel.entry.NSSgvV3 +import info.nightscout.sdk.localmodel.treatment.CreateUpdateResponse import info.nightscout.sdk.localmodel.treatment.NSTreatment import info.nightscout.sdk.remotemodel.LastModified import info.nightscout.sdk.remotemodel.RemoteDeviceStatus interface NSAndroidClient { + val lastStatus: Status? suspend fun getVersion(): String suspend fun getStatus(): Status suspend fun getEntries(): String @@ -18,4 +20,6 @@ interface NSAndroidClient { suspend fun getSgvsNewerThan(from: Long, limit: Long): List suspend fun getTreatmentsModifiedSince(from: Long, limit: Long): List suspend fun getDeviceStatusModifiedSince(from: Long): List + suspend fun createTreatment(nsTreatment: NSTreatment): CreateUpdateResponse + suspend fun updateTreatment(nsTreatment: NSTreatment): CreateUpdateResponse } \ No newline at end of file diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/ApiPermissions.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/ApiPermissions.kt index d78861667a..5eaa012fde 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/ApiPermissions.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/ApiPermissions.kt @@ -7,4 +7,7 @@ data class ApiPermissions( val profile: ApiPermission, val settings: ApiPermission, val treatments: ApiPermission -) +) { + fun isFull() = deviceStatus.full && entries.full && food.full && profile.full && settings.full && treatments.full + fun isRead() = deviceStatus.read && entries.read && food.read && profile.read && settings.read && treatments.read +} diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/CreateUpdateResponse.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/CreateUpdateResponse.kt new file mode 100644 index 0000000000..ad7a3835a2 --- /dev/null +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/CreateUpdateResponse.kt @@ -0,0 +1,8 @@ +package info.nightscout.sdk.localmodel.treatment + +class CreateUpdateResponse( + val identifier: String?, + val isDeduplication: Boolean? = false, + val deduplicatedIdentifier: String? = null, + val lastModified: Long? = null +) \ No newline at end of file diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSBolus.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSBolus.kt index 76d482f222..f7cda2174e 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSBolus.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSBolus.kt @@ -4,14 +4,14 @@ import info.nightscout.sdk.localmodel.entry.NsUnits data class NSBolus( override val date: Long, - override val device: String?, - override val identifier: String, - override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val device: String?= null, + override val identifier: String?, + override val units: NsUnits?= null, + override val srvModified: Long? = null, + override val srvCreated: Long? = null, override val utcOffset: Long, - override val subject: String?, - override var isReadOnly: Boolean, + override val subject: String? = null, + override var isReadOnly: Boolean = false, override val isValid: Boolean, override val eventType: EventType, override val notes: String?, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSBolusWizard.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSBolusWizard.kt index 11a1ab3a48..01be68e231 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSBolusWizard.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSBolusWizard.kt @@ -6,10 +6,10 @@ import org.json.JSONObject data class NSBolusWizard( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSCarbs.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSCarbs.kt index 9f3dd66be2..15003a02f3 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSCarbs.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSCarbs.kt @@ -5,10 +5,10 @@ import info.nightscout.sdk.localmodel.entry.NsUnits data class NSCarbs( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSEffectiveProfileSwitch.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSEffectiveProfileSwitch.kt index 4fa8b1e322..312d542daf 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSEffectiveProfileSwitch.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSEffectiveProfileSwitch.kt @@ -6,10 +6,10 @@ import org.json.JSONObject data class NSEffectiveProfileSwitch( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSExtendedBolus.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSExtendedBolus.kt index 0fc041d9e5..8228c45200 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSExtendedBolus.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSExtendedBolus.kt @@ -5,10 +5,10 @@ import info.nightscout.sdk.localmodel.entry.NsUnits data class NSExtendedBolus( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, @@ -21,5 +21,5 @@ data class NSExtendedBolus( override val pumpSerial: String?, val duration: Long, val enteredinsulin: Double, - val isEmulatingTempbasal: Boolean + val isEmulatingTempBasal: Boolean? ) : NSTreatment diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSOfflineEvent.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSOfflineEvent.kt index 1abffef44c..dd95c02c3b 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSOfflineEvent.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSOfflineEvent.kt @@ -5,10 +5,10 @@ import info.nightscout.sdk.localmodel.entry.NsUnits data class NSOfflineEvent( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSProfileSwitch.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSProfileSwitch.kt index c97e5de38c..bd6fa96888 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSProfileSwitch.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSProfileSwitch.kt @@ -6,10 +6,10 @@ import org.json.JSONObject data class NSProfileSwitch( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTemporaryBasal.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTemporaryBasal.kt index 8a025e7097..3592c25135 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTemporaryBasal.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTemporaryBasal.kt @@ -6,10 +6,10 @@ import org.json.JSONObject data class NSTemporaryBasal( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, @@ -21,9 +21,11 @@ data class NSTemporaryBasal( override val pumpType: String?, override val pumpSerial: String?, val duration: Long, - val rate: Double, + val rate: Double, // when sending to NS always convertedToAbsolute(timestamp, profile) val isAbsolute: Boolean, - val type: Type + val type: Type, + val percent: Double? = null, // when sending to NS (rate - 100) + val absolute: Double? = null // when sending to NS (rate) ) : NSTreatment { enum class Type { diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTemporaryTarget.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTemporaryTarget.kt index c4a03bca18..cf9158d3b2 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTemporaryTarget.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTemporaryTarget.kt @@ -5,10 +5,10 @@ import info.nightscout.sdk.localmodel.entry.NsUnits data class NSTemporaryTarget( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTherapyEvent.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTherapyEvent.kt index 503c9ee65f..a893fb447d 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTherapyEvent.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTherapyEvent.kt @@ -6,10 +6,10 @@ import info.nightscout.sdk.localmodel.entry.NsUnits data class NSTherapyEvent( override val date: Long, override val device: String?, - override val identifier: String, + override val identifier: String?, override val units: NsUnits?, - override val srvModified: Long, - override val srvCreated: Long, + override val srvModified: Long?, + override val srvCreated: Long?, override val utcOffset: Long, override val subject: String?, override var isReadOnly: Boolean, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTreatment.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTreatment.kt index f522b0673c..55bb153732 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTreatment.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/localmodel/treatment/NSTreatment.kt @@ -5,11 +5,11 @@ import info.nightscout.sdk.localmodel.entry.NsUnits interface NSTreatment { val date: Long val device: String? - val identifier: String + val identifier: String? val units: NsUnits? val eventType: EventType - val srvModified: Long - val srvCreated: Long + val srvModified: Long? + val srvCreated: Long? val utcOffset: Long val subject: String? var isReadOnly: Boolean diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/mapper/TreatmentMapper.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/mapper/TreatmentMapper.kt index 7af6badcbb..47cb5e7b2a 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/mapper/TreatmentMapper.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/mapper/TreatmentMapper.kt @@ -117,7 +117,7 @@ internal fun RemoteTreatment.toTreatment(): NSTreatment? { pumpSerial = extendedEmulated.pumpSerial, enteredinsulin = extendedEmulated.enteredinsulin ?: 0.0, duration = extendedEmulated.durationInMilliseconds ?: TimeUnit.MINUTES.toMillis(extendedEmulated.duration ?: 0L), - isEmulatingTempbasal = extendedEmulated.isEmulatingTempBasal + isEmulatingTempBasal = extendedEmulated.isEmulatingTempBasal ) } @@ -329,10 +329,270 @@ internal fun RemoteTreatment.toTreatment(): NSTreatment? { pumpSerial = this.pumpSerial, enteredinsulin = this.enteredinsulin, duration = this.durationInMilliseconds ?: TimeUnit.MINUTES.toMillis(this.duration ?: 0L), - isEmulatingTempbasal = this.isEmulatingTempBasal + isEmulatingTempBasal = this.isEmulatingTempBasal ) } } return null } + +internal fun NSTreatment.toRemoteTreatment(): RemoteTreatment? = + when (this) { + is NSBolus -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + insulin = insulin, + type = type.name + ) + + is NSCarbs -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + carbs = carbs, + duration = duration + ) + + is NSTemporaryTarget -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + duration = TimeUnit.MILLISECONDS.toMinutes(duration), + durationInMilliseconds = duration, + targetBottom = targetBottom, + targetTop = targetTop, + reason = reason.text + ) + /* + // Convert back emulated TBR -> EB + eventType == EventType.TEMPORARY_BASAL && extendedEmulated != null -> + + return RemoteTreatment( + date = treatmentTimestamp, + device = device, + identifier = identifier, + units = NsUnits.fromString(extendedEmulated.units), + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset ?: 0, + subject = subject, + isReadOnly = extendedEmulated.isReadOnly ?: false, + isValid = extendedEmulated.isValid ?: true, + eventType = extendedEmulated.eventType, + notes = extendedEmulated.notes, + pumpId = extendedEmulated.pumpId, + endId = extendedEmulated.endId, + pumpType = extendedEmulated.pumpType, + pumpSerial = extendedEmulated.pumpSerial, + enteredinsulin = extendedEmulated.enteredinsulin ?: 0.0, + duration = extendedEmulated.durationInMilliseconds ?: TimeUnit.MINUTES.toMillis(extendedEmulated.duration ?: 0L), + isEmulatingTempbasal = extendedEmulated.isEmulatingTempBasal + ) + } + */ + is NSTemporaryBasal -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + duration = TimeUnit.MILLISECONDS.toMinutes(duration), + durationInMilliseconds = duration, + absolute = absolute, + percent = percent, + rate = absolute, + type = type.name + ) + + is NSEffectiveProfileSwitch -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + profileJson = profileJson.toString(), + originalProfileName = originalProfileName, + originalCustomizedName = originalCustomizedName, + originalTimeshift = originalTimeshift, + originalPercentage = originalPercentage, + originalDuration = originalDuration, + originalEnd = originalEnd + ) + + is NSProfileSwitch -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + profileJson = profileJson.toString(), // must be de-customized + profile = profileName, + originalProfileName = originalProfileName, + originalDuration = originalDuration, + duration = duration, + timeshift = timeShift, + percentage = percentage, + ) + + is NSBolusWizard -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + bolusCalculatorResult = bolusCalculatorResult, + glucose = glucose + ) + + is NSTherapyEvent -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + duration = TimeUnit.MILLISECONDS.toMinutes(duration), + durationInMilliseconds = duration, + glucose = glucose, + enteredBy = enteredBy, + glucoseType = glucoseType?.text + ) + + is NSOfflineEvent -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + duration = TimeUnit.MILLISECONDS.toMinutes(duration), + durationInMilliseconds = duration, + reason = reason.name + ) + + is NSExtendedBolus -> RemoteTreatment( + date = date, + device = device, + identifier = identifier, + units = units?.value, + srvModified = srvModified, + srvCreated = srvCreated, + utcOffset = utcOffset, + subject = subject, + isReadOnly = isReadOnly, + isValid = isValid, + eventType = eventType, + notes = notes, + pumpId = pumpId, + endId = endId, + pumpType = pumpType, + pumpSerial = pumpSerial, + enteredinsulin = enteredinsulin, + duration = TimeUnit.MILLISECONDS.toMinutes(duration), + durationInMilliseconds = duration, + isEmulatingTempBasal = isEmulatingTempBasal + ) + + else -> null + } diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/networking/NightscoutRemoteService.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/networking/NightscoutRemoteService.kt index 4619aef0c0..1fc95dfe24 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/networking/NightscoutRemoteService.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/networking/NightscoutRemoteService.kt @@ -4,11 +4,18 @@ import com.google.gson.JsonElement import info.nightscout.sdk.remotemodel.LastModified import info.nightscout.sdk.remotemodel.RemoteDeviceStatus import info.nightscout.sdk.remotemodel.NSResponse +import info.nightscout.sdk.remotemodel.RemoteCreateUpdateResponse import info.nightscout.sdk.remotemodel.RemoteEntry import info.nightscout.sdk.remotemodel.RemoteStatusResponse import info.nightscout.sdk.remotemodel.RemoteTreatment +import okhttp3.RequestBody +import retrofit2.Call import retrofit2.Response +import retrofit2.http.Body import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.POST +import retrofit2.http.PUT import retrofit2.http.Path import retrofit2.http.Query @@ -48,4 +55,11 @@ internal interface NightscoutRemoteService { @GET("v3/devicestatus/history/{from}") suspend fun getDeviceStatusModifiedSince(@Path("from") from: Long): Response>> + + @POST("v3/treatments") + fun createTreatment(@Body remoteTreatment: RemoteTreatment): Response> + + @PUT("v3/treatments") + fun updateTreatment(@Body remoteTreatment: RemoteTreatment): Response> + } diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/remotemodel/RemoteStatusResponse.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/remotemodel/RemoteStatusResponse.kt index 15055f9051..be313118ba 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/remotemodel/RemoteStatusResponse.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/remotemodel/RemoteStatusResponse.kt @@ -17,6 +17,13 @@ internal data class RemoteStorage( @SerializedName("version") val version: String ) +internal data class RemoteCreateUpdateResponse( + @SerializedName("identifier") val identifier: String?, + @SerializedName("isDeduplication") val isDeduplication: Boolean?, + @SerializedName("deduplicatedIdentifier") val deduplicatedIdentifier: String?, + @SerializedName("lastModified") val lastModified: Long? +) + internal data class RemoteApiPermissions( @SerializedName("devicestatus") val deviceStatus: RemoteApiPermission, @SerializedName("entries") val entries: RemoteApiPermission, diff --git a/core/ns-sdk/src/main/java/info/nightscout/sdk/remotemodel/RemoteTreatment.kt b/core/ns-sdk/src/main/java/info/nightscout/sdk/remotemodel/RemoteTreatment.kt index 80929a2133..5f29c0f96b 100644 --- a/core/ns-sdk/src/main/java/info/nightscout/sdk/remotemodel/RemoteTreatment.kt +++ b/core/ns-sdk/src/main/java/info/nightscout/sdk/remotemodel/RemoteTreatment.kt @@ -17,73 +17,72 @@ import org.json.JSONObject * * */ internal data class RemoteTreatment( - @SerializedName("identifier") val identifier: String, // string Main addressing, required field that identifies document in the collection. The client should not create the identifier, the server automatically assigns it when the document is inserted. - @SerializedName("date") val date: Long?, // integer($int64) or string required timestamp when the record or event occurred, you can choose from three input formats Unix epoch in milliseconds (1525383610088), Unix epoch in seconds (1525383610), ISO 8601 with optional timezone ('2018-05-03T21:40:10.088Z' or '2018-05-03T23:40:10.088+02:00') - @SerializedName("mills") val mills: Long?, // integer($int64) or string required timestamp when the record or event occurred, you can choose from three input formats Unix - @SerializedName("timestamp") val timestamp: Long?, // integer($int64) or string required timestamp when the record or event occurred, you can choose from three input formats Unix epoch in milliseconds (1525383610088), Unix epoch in seconds (1525383610), ISO 8601 with optional timezone ('2018-05-03T21:40:10.088Z' or '2018-05-03T23:40:10.088+02:00') - @SerializedName("created_at") val created_at: String, // integer($int64) or string timestamp on previous version of api, in my examples, a lot of treatments don't have date, only created_at, some of them with string others with long... - @SerializedName("utcOffset") val utcOffset: Long?, // integer Local UTC offset (timezone) of the event in minutes. This field can be set either directly by the client (in the incoming - // document) or it is automatically parsed from the date field. + @SerializedName("identifier") val identifier: String?, // string Main addressing, required field that identifies document in the collection. The client should not create the identifier, the server automatically assigns it when the document is inserted. + @SerializedName("date") val date: Long? = null, // integer($int64) or string required timestamp when the record or event occurred, you can choose from three input formats Unix epoch in milliseconds (1525383610088), Unix epoch in seconds (1525383610), ISO 8601 with optional timezone ('2018-05-03T21:40:10.088Z' or '2018-05-03T23:40:10.088+02:00') + @SerializedName("mills") val mills: Long? = null, // integer($int64) or string required timestamp when the record or event occurred, you can choose from three input formats Unix + @SerializedName("timestamp") val timestamp: Long? = null, // integer($int64) or string required timestamp when the record or event occurred, you can choose from three input formats Unix epoch in milliseconds (1525383610088), Unix epoch in seconds (1525383610), ISO 8601 with optional timezone ('2018-05-03T21:40:10.088Z' or '2018-05-03T23:40:10.088+02:00') + @SerializedName("created_at") val created_at: String? = null, // integer($int64) or string timestamp on previous version of api, in my examples, a lot of treatments don't have date, only created_at, some of them with string others with long... + @SerializedName("utcOffset") val utcOffset: Long? = null, // integer Local UTC offset (timezone) of the event in minutes. This field can be set either directly by the client (in the incoming document) or it is automatically parsed from the date field. // @SerializedName("app") val app : String, // TODO required ? Application or system in which the record was entered by human or device for the first time. - @SerializedName("device") val device: String?, // string The device from which the data originated (including serial number of the device, if it is relevant and safe). - @SerializedName("srvCreated") val srvCreated: Long, // integer($int64) example: 1525383610088 The server's timestamp of document insertion into the database (Unix epoch in ms). This field appears only for documents which were inserted by API v3. - @SerializedName("subject") val subject: String?, // string Name of the security subject (within Nightscout scope) which has created the document. This field is automatically set by the server from the passed token or JWT. - @SerializedName("srvModified") val srvModified: Long, // integer($int64) example: 1525383610088 The server's timestamp of the last document modification in the database (Unix epoch in ms). This field appears only for documents which were somehow modified by API v3 (inserted, updated or deleted). - @SerializedName("modifiedBy") val modifiedBy: String?, // string Name of the security subject (within Nightscout scope) which has patched or deleted the document for the last time. This field is automatically set by the server. - @SerializedName("isValid") val isValid: Boolean?, // boolean A flag set by the server only for deleted documents. This field appears only within history operation and for documents which were deleted by API v3 (and they always have a false value) - @SerializedName("isReadOnly") val isReadOnly: Boolean?, // boolean A flag set by client that locks the document from any changes. Every document marked with isReadOnly=true is forever immutable and cannot even be deleted. + @SerializedName("device") val device: String? = null, // string The device from which the data originated (including serial number of the device, if it is relevant and safe). + @SerializedName("srvCreated") val srvCreated: Long? = null, // integer($int64) example: 1525383610088 The server's timestamp of document insertion into the database (Unix epoch in ms). This field appears only for documents which were inserted by API v3. + @SerializedName("subject") val subject: String? = null, // string Name of the security subject (within Nightscout scope) which has created the document. This field is automatically set by the server from the passed token or JWT. + @SerializedName("srvModified") val srvModified: Long? = null, // integer($int64) example: 1525383610088 The server's timestamp of the last document modification in the database (Unix epoch in ms). This field appears only for documents which were somehow modified by API v3 (inserted, updated or deleted). + @SerializedName("modifiedBy") val modifiedBy: String? = null, // string Name of the security subject (within Nightscout scope) which has patched or deleted the document for the last time. This field is automatically set by the server. + @SerializedName("isValid") val isValid: Boolean? = null, // boolean A flag set by the server only for deleted documents. This field appears only within history operation and for documents which were deleted by API v3 (and they always have a false value) + @SerializedName("isReadOnly") val isReadOnly: Boolean? = null, // boolean A flag set by client that locks the document from any changes. Every document marked with isReadOnly=true is forever immutable and cannot even be deleted. @SerializedName("eventType") val eventType: EventType, // string "BG Check", "Snack Bolus", "Meal Bolus", "Correction Bolus", "Carb Correction", "Combo Bolus", "Announcement", "Note", "Question", "Exercise", "Site Change", "Sensor Start", "Sensor Change", "Pump Battery Change", "Insulin Change", "Temp Basal", "Profile Switch", "D.A.D. Alert", "Temporary Target", "OpenAPS Offline", "Bolus Wizard" - @SerializedName("glucose") val glucose: Double?, // double Current glucose - @SerializedName("glucoseType") val glucoseType: String?, // string example: "Sensor", "Finger", "Manual" - @SerializedName("units") val units: String?, // string The units for the glucose value, mg/dl or mmol/l. It is strongly recommended to fill in this field. - @SerializedName("carbs") val carbs: Double?, // number... Amount of carbs given. - @SerializedName("protein") val protein: Int?, // number... Amount of protein given. - @SerializedName("fat") val fat: Int?, // number... Amount of fat given. - @SerializedName("insulin") val insulin: Double?, // number... Amount of insulin, if any. - @SerializedName("duration") val duration: Long?, // number... Duration in minutes. - @SerializedName("durationInMilliseconds") val durationInMilliseconds: Long?, // number... Duration in milliseconds. - @SerializedName("preBolus") val preBolus: Int?, // number... How many minutes the bolus was given before the meal started. - @SerializedName("splitNow") val splitNow: Int?, // number... Immediate part of combo bolus (in percent). - @SerializedName("splitExt") val splitExt: Int?, // number... Extended part of combo bolus (in percent). - @SerializedName("percent") val percent: Double?, // number... Eventual basal change in percent. - @SerializedName("absolute") val absolute: Double?, // number... Eventual basal change in absolute value (insulin units per hour). - @SerializedName("targetTop") val targetTop: Double?, // number... Top limit of temporary target. - @SerializedName("targetBottom") val targetBottom: Double?, // number... Bottom limit of temporary target. - @SerializedName("profile") val profile: String?, // string Name of the profile to which the pump has been switched. - @SerializedName("reason") val reason: String?, // string For example the reason why the profile has been switched or why the temporary target has been set. - @SerializedName("notes") val notes: String?, // string Description/notes of treatment. - @SerializedName("enteredBy") val enteredBy: String?, // string Who entered the treatment. + @SerializedName("glucose") val glucose: Double? = null, // double Current glucose + @SerializedName("glucoseType") val glucoseType: String? = null, // string example: "Sensor", "Finger", "Manual" + @SerializedName("units") val units: String? = null, // string The units for the glucose value, mg/dl or mmol/l. It is strongly recommended to fill in this field. + @SerializedName("carbs") val carbs: Double? = null, // number... Amount of carbs given. + @SerializedName("protein") val protein: Int? = null, // number... Amount of protein given. + @SerializedName("fat") val fat: Int? = null, // number... Amount of fat given. + @SerializedName("insulin") val insulin: Double? = null, // number... Amount of insulin, if any. + @SerializedName("duration") val duration: Long? = null, // number... Duration in minutes. + @SerializedName("durationInMilliseconds") val durationInMilliseconds: Long? = null, // number... Duration in milliseconds. + @SerializedName("preBolus") val preBolus: Int? = null, // number... How many minutes the bolus was given before the meal started. + @SerializedName("splitNow") val splitNow: Int? = null, // number... Immediate part of combo bolus (in percent). + @SerializedName("splitExt") val splitExt: Int? = null, // number... Extended part of combo bolus (in percent). + @SerializedName("percent") val percent: Double? = null, // number... Eventual basal change in percent. + @SerializedName("absolute") val absolute: Double? = null, // number... Eventual basal change in absolute value (insulin units per hour). + @SerializedName("targetTop") val targetTop: Double? = null, // number... Top limit of temporary target. + @SerializedName("targetBottom") val targetBottom: Double? = null, // number... Bottom limit of temporary target. + @SerializedName("profile") val profile: String? = null, // string Name of the profile to which the pump has been switched. + @SerializedName("reason") val reason: String? = null, // string For example the reason why the profile has been switched or why the temporary target has been set. + @SerializedName("notes") val notes: String? = null, // string Description/notes of treatment. + @SerializedName("enteredBy") val enteredBy: String? = null, // string Who entered the treatment. - @SerializedName("endId") val endId: Long?, // long id of record which ended this - @SerializedName("pumpId") val pumpId: Long?, // long or "Meal Bolus", "Correction Bolus", "Combo Bolus" ex 4102 not sure if long or int - @SerializedName("pumpType") val pumpType: String?, // string "Meal Bolus", "Correction Bolus", "Combo Bolus" ex "ACCU_CHEK_INSIGHT_BLUETOOTH", - @SerializedName("pumpSerial") val pumpSerial: String?, // string "Meal Bolus", "Correction Bolus", "Combo Bolus" "33013206", + @SerializedName("endId") val endId: Long? = null, // long id of record which ended this + @SerializedName("pumpId") val pumpId: Long? = null, // long or "Meal Bolus", "Correction Bolus", "Combo Bolus" ex 4102 not sure if long or int + @SerializedName("pumpType") val pumpType: String? = null, // string "Meal Bolus", "Correction Bolus", "Combo Bolus" ex "ACCU_CHEK_INSIGHT_BLUETOOTH", + @SerializedName("pumpSerial") val pumpSerial: String? = null, // string "Meal Bolus", "Correction Bolus", "Combo Bolus" "33013206", // other fields found in examples but not in documentation - @SerializedName("profileJson") val profileJson: String?, // string "Profile Switch" ex json toString "{\"units\":\"mg\\/dl\",\"dia\":5,\"timezone\":\"Africa\\/Cairo\", + @SerializedName("profileJson") val profileJson: String? = null, // string "Profile Switch" ex json toString "{\"units\":\"mg\\/dl\",\"dia\":5,\"timezone\":\"Africa\\/Cairo\", // \"sens\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":60},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":60},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":61.33333333333333},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":65.33333333333333},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":69.33333333333333},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":73.33333333333333},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":72},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":68},{\"time\":\"15:00\",\"timeAsSeconds\":54000,\"value\":65.33333333333333},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":65.33333333333333}],\"carbratio\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":5.7333333333333325},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":7.333333333333333},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":6.666666666666666}],\"basal\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":0.5249999999999999},{\"time\":\"01:00\",\"timeAsSeconds\":3600,\"value\":0.585},{\"time\":\"02:00\",\"timeAsSeconds\":7200,\"value\":0.6375},{\"time\":\"03:00\",\"timeAsSeconds\":10800,\"value\":0.5625},{\"time\":\"04:00\",\"timeAsSeconds\":14400,\"value\":0.4575},{\"time\":\"05:00\",\"timeAsSeconds\":18000,\"value\":0.5175},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":0.48},{\"time\":\"07:00\",\"timeAsSeconds\":25200,\"value\":0.51},{\"time\":\"08:00\",\"timeAsSeconds\":28800,\"value\":0.48750000000000004},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":0.48},{\"time\":\"10:00\",\"timeAsSeconds\":36000,\"value\":0.48750000000000004},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":0.5025000000000001},{\"time\":\"12:00\",\"timeAsSeconds\":43200,\"value\":0.5549999999999999},{\"time\":\"13:00\",\"timeAsSeconds\":46800,\"value\":0.5700000000000001},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":0.5700000000000001},{\"time\":\"15:00\",\"timeAsSeconds\":54000,\"value\":0.5775},{\"time\":\"16:00\",\"timeAsSeconds\":57600,\"value\":0.51},{\"time\":\"17:00\",\"timeAsSeconds\":61200,\"value\":0.54},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":0.48750000000000004},{\"time\":\"19:00\",\"timeAsSeconds\":68400,\"value\":0.5249999999999999},{\"time\":\"20:00\",\"timeAsSeconds\":72000,\"value\":0.46499999999999997},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":0.46499999999999997},{\"time\":\"22:00\",\"timeAsSeconds\":79200,\"value\":0.43499999999999994},{\"time\":\"23:00\",\"timeAsSeconds\":82800,\"value\":0.41250000000000003}],\"target_low\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}],\"target_high\":[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":100},{\"time\":\"06:00\",\"timeAsSeconds\":21600,\"value\":90},{\"time\":\"09:00\",\"timeAsSeconds\":32400,\"value\":100},{\"time\":\"11:00\",\"timeAsSeconds\":39600,\"value\":90},{\"time\":\"14:00\",\"timeAsSeconds\":50400,\"value\":100},{\"time\":\"18:00\",\"timeAsSeconds\":64800,\"value\":90},{\"time\":\"21:00\",\"timeAsSeconds\":75600,\"value\":100}]}", - @SerializedName("originalProfileName") val originalProfileName: String?, // string "Effective Profile Switch" - @SerializedName("originalCustomizedName") val originalCustomizedName: String?, // string "Effective Profile Switch" - @SerializedName("originalTimeshift") val originalTimeshift: Long?, // long "Effective Profile Switch" - @SerializedName("originalPercentage") val originalPercentage: Int?, // int "Effective Profile Switch" - @SerializedName("originalDuration") val originalDuration: Long?, // long "Effective Profile Switch" - @SerializedName("originalEnd") val originalEnd: Long?, // long "Effective Profile Switch" + @SerializedName("originalProfileName") val originalProfileName: String? = null, // string "Effective Profile Switch" + @SerializedName("originalCustomizedName") val originalCustomizedName: String? = null, // string "Effective Profile Switch" + @SerializedName("originalTimeshift") val originalTimeshift: Long? = null, // long "Effective Profile Switch" + @SerializedName("originalPercentage") val originalPercentage: Int? = null, // int "Effective Profile Switch" + @SerializedName("originalDuration") val originalDuration: Long? = null, // long "Effective Profile Switch" + @SerializedName("originalEnd") val originalEnd: Long? = null, // long "Effective Profile Switch" - @SerializedName("bolusCalculatorResult") val bolusCalculatorResult: String?, // string "Bolus Wizard" json toString ex "bolusCalculatorResult": "{\"basalIOB\":-0.247,\"bolusIOB\":-1.837,\"carbs\":45.0,\"carbsInsulin\":9.0,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1626202788810,\"glucoseDifference\":44.0,\"glucoseInsulin\":0.8979591836734694,\"glucoseTrend\":5.5,\"glucoseValue\":134.0,\"ic\":5.0,\"id\":331,\"interfaceIDs_backing\":{\"nightscoutId\":\"60ede2a4c574da0004a3869d\"},\"isValid\":true,\"isf\":49.0,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":90,\"profileName\":\"Tuned 13/01 90%Lyum\",\"superbolusInsulin\":0.0,\"targetBGHigh\":90.0,\"targetBGLow\":90.0,\"timestamp\":1626202783325,\"totalInsulin\":7.34,\"trendInsulin\":0.336734693877551,\"utcOffset\":7200000,\"version\":1,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", - @SerializedName("type") val type: String?, // string "Meal Bolus", "Correction Bolus", "Combo Bolus", "Temp Basal" type of bolus "NORMAL", "SMB", "FAKE_EXTENDED" - @SerializedName("isSMB") val isSMB: Boolean, // boolean "Meal Bolus", "Correction Bolus", "Combo Bolus" - @SerializedName("enteredinsulin") val enteredinsulin: Double?, // number... "Combo Bolus" insulin is missing only enteredinsulin field found - @SerializedName("relative") val relative: Double?, // number... "Combo Bolus", "extendedEmulated" (not in doc see below) - @SerializedName("isEmulatingTempBasal") val isEmulatingTempBasal: Boolean, // boolean "Combo Bolus", "extendedEmulated" (not in doc see below) - @SerializedName("isAnnouncement") val isAnnouncement: Boolean, // boolean "Announcement" - @SerializedName("rate") val rate: Double?, // Double "Temp Basal" absolute rate (could be calculated with percent and profile information...) - @SerializedName("extendedEmulated") val extendedEmulated: RemoteTreatment?, // Gson of emulated EB - @SerializedName("timeshift") val timeshift: Long, // integer "Profile Switch" - @SerializedName("percentage") val percentage: Int?, // integer "Profile Switch" + @SerializedName("bolusCalculatorResult") val bolusCalculatorResult: String? = null, // string "Bolus Wizard" json toString ex "bolusCalculatorResult": "{\"basalIOB\":-0.247,\"bolusIOB\":-1.837,\"carbs\":45.0,\"carbsInsulin\":9.0,\"cob\":0.0,\"cobInsulin\":0.0,\"dateCreated\":1626202788810,\"glucoseDifference\":44.0,\"glucoseInsulin\":0.8979591836734694,\"glucoseTrend\":5.5,\"glucoseValue\":134.0,\"ic\":5.0,\"id\":331,\"interfaceIDs_backing\":{\"nightscoutId\":\"60ede2a4c574da0004a3869d\"},\"isValid\":true,\"isf\":49.0,\"note\":\"\",\"otherCorrection\":0.0,\"percentageCorrection\":90,\"profileName\":\"Tuned 13/01 90%Lyum\",\"superbolusInsulin\":0.0,\"targetBGHigh\":90.0,\"targetBGLow\":90.0,\"timestamp\":1626202783325,\"totalInsulin\":7.34,\"trendInsulin\":0.336734693877551,\"utcOffset\":7200000,\"version\":1,\"wasBasalIOBUsed\":true,\"wasBolusIOBUsed\":true,\"wasCOBUsed\":true,\"wasGlucoseUsed\":true,\"wasSuperbolusUsed\":false,\"wasTempTargetUsed\":false,\"wasTrendUsed\":true,\"wereCarbsUsed\":false}", + @SerializedName("type") val type: String? = null, // string "Meal Bolus", "Correction Bolus", "Combo Bolus", "Temp Basal" type of bolus "NORMAL", "SMB", "FAKE_EXTENDED" + @SerializedName("isSMB") val isSMB: Boolean? = null, // boolean "Meal Bolus", "Correction Bolus", "Combo Bolus" + @SerializedName("enteredinsulin") val enteredinsulin: Double? = null, // number... "Combo Bolus" insulin is missing only enteredinsulin field found + @SerializedName("relative") val relative: Double? = null, // number... "Combo Bolus", "extendedEmulated" (not in doc see below) + @SerializedName("isEmulatingTempBasal") val isEmulatingTempBasal: Boolean? = null, // boolean "Combo Bolus", "extendedEmulated" (not in doc see below) + @SerializedName("isAnnouncement") val isAnnouncement: Boolean? = null, // boolean "Announcement" + @SerializedName("rate") val rate: Double? = null, // Double "Temp Basal" absolute rate (could be calculated with percent and profile information...) + @SerializedName("extendedEmulated") val extendedEmulated: RemoteTreatment? = null, // Gson of emulated EB + @SerializedName("timeshift") val timeshift: Long? = null, // integer "Profile Switch" + @SerializedName("percentage") val percentage: Int? = null // integer "Profile Switch" ) { fun timestamp(): Long { - return date ?: mills ?: timestamp ?: fromISODateString(created_at) + return date ?: mills ?: timestamp ?: created_at?. let { fromISODateString(created_at) } ?: 0L } private fun fromISODateString(isoDateString: String): Long = diff --git a/core/ui/src/main/java/info/nightscout/core/ui/extensions/RadioGroupExtension.kt b/core/ui/src/main/java/info/nightscout/core/ui/extensions/RadioGroupExtension.kt index 0bf51f656f..54b61b97db 100644 --- a/core/ui/src/main/java/info/nightscout/core/ui/extensions/RadioGroupExtension.kt +++ b/core/ui/src/main/java/info/nightscout/core/ui/extensions/RadioGroupExtension.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.utils.extensions +package info.nightscout.core.ui.extensions import android.widget.RadioGroup import androidx.appcompat.widget.AppCompatRadioButton diff --git a/core/ui/src/main/res/values-af-rZA/strings.xml b/core/ui/src/main/res/values-af-rZA/strings.xml index b034c45d97..f4a299a001 100644 --- a/core/ui/src/main/res/values-af-rZA/strings.xml +++ b/core/ui/src/main/res/values-af-rZA/strings.xml @@ -113,6 +113,7 @@ Geslote lus Oop lus DIA + Oplaaistatus aan NS Verkeerde wagwoord diff --git a/core/ui/src/main/res/values-bg-rBG/strings.xml b/core/ui/src/main/res/values-bg-rBG/strings.xml index e5ccf673f8..dec4c15896 100644 --- a/core/ui/src/main/res/values-bg-rBG/strings.xml +++ b/core/ui/src/main/res/values-bg-rBG/strings.xml @@ -138,6 +138,7 @@ DIA И / Въгл Чувств + Качва статуса в NS Грешна парола Паролите не съвпадат diff --git a/core/ui/src/main/res/values-ca-rES/strings.xml b/core/ui/src/main/res/values-ca-rES/strings.xml index 27c09850c3..77a503114a 100644 --- a/core/ui/src/main/res/values-ca-rES/strings.xml +++ b/core/ui/src/main/res/values-ca-rES/strings.xml @@ -137,6 +137,9 @@ DIA (Durada de l\'Acció de la Insulina) IC ISF + Enviar estat a NS + Llaç desactivat/aturat + Insulina \"a bord\" (IOB) Contrasenya incorrecta Les contrasenyes no coincideixen diff --git a/core/ui/src/main/res/values-cs-rCZ/strings.xml b/core/ui/src/main/res/values-cs-rCZ/strings.xml index 00eefa7fca..359b8c7e08 100644 --- a/core/ui/src/main/res/values-cs-rCZ/strings.xml +++ b/core/ui/src/main/res/values-cs-rCZ/strings.xml @@ -164,6 +164,9 @@ ISF Rušení dočasného bazálu selhalo Zastavení prodlouženého bolusu selhalo + Nahrávat status do NS + Zakázaná/pozastavená smyčka + Aktivní inzulín (IOB) Chybné heslo Nesprávný PIN diff --git a/core/ui/src/main/res/values-da-rDK/strings.xml b/core/ui/src/main/res/values-da-rDK/strings.xml index 1957375bfb..914927f484 100644 --- a/core/ui/src/main/res/values-da-rDK/strings.xml +++ b/core/ui/src/main/res/values-da-rDK/strings.xml @@ -155,6 +155,9 @@ DIA IC ISF + Upload status til NS + Deaktiveret/Suspendéret Loop + Insulin om bord (IOB) Forkert kodeord Forkert pinkode diff --git a/core/ui/src/main/res/values-de-rDE/strings.xml b/core/ui/src/main/res/values-de-rDE/strings.xml index 977918bf6c..09a8cd1872 100644 --- a/core/ui/src/main/res/values-de-rDE/strings.xml +++ b/core/ui/src/main/res/values-de-rDE/strings.xml @@ -101,6 +101,7 @@ Lade… Notizen Löschen + Neu hinzufügen Neu oben hinzufügen Daten kommen von einer anderen Pumpe. Wechsle den Pumpentreiber. BZ @@ -155,6 +156,9 @@ DIA IC ISF + Status zu Nightscout hochladen + Deaktiviere/Pausiere den Loop + Aktives Insulin (IOB) Falsches Passwort Falsche PIN @@ -316,6 +320,7 @@ EINSTELLUNGEN EXPORTIEREN EINSTELLUNGEN IMPORTIEREN DATENBANK ZURÜCKSETZEN + DATENBANKEN BEREINIGEN DATENBANK EXPORTIEREN DATENBANK IMPORTIEREN OTP EXPORT diff --git a/core/ui/src/main/res/values-el-rGR/strings.xml b/core/ui/src/main/res/values-el-rGR/strings.xml index 56ad6faf47..c4df755597 100644 --- a/core/ui/src/main/res/values-el-rGR/strings.xml +++ b/core/ui/src/main/res/values-el-rGR/strings.xml @@ -116,6 +116,7 @@ Κλειστό Κύκλωμα Ανοιχτό Κύκλωμα Αναστολή Χαμηλής Γλυκόζης + Φόρτωση κατάστασης στο NS Λάθος κωδικός diff --git a/core/ui/src/main/res/values-es-rES/strings.xml b/core/ui/src/main/res/values-es-rES/strings.xml index ca6539ff4b..e246d677e8 100644 --- a/core/ui/src/main/res/values-es-rES/strings.xml +++ b/core/ui/src/main/res/values-es-rES/strings.xml @@ -164,6 +164,9 @@ ISF Error cancelando la basal temporal Error cancelando el bolo extendido + Subir estado a Nightscout + Desactiva/suspende el lazo + Insulina a bordo (IOB) Contraseña incorrecta Pin erróneo diff --git a/core/ui/src/main/res/values-fr-rFR/strings.xml b/core/ui/src/main/res/values-fr-rFR/strings.xml index 5253d3c963..f36b0cea34 100644 --- a/core/ui/src/main/res/values-fr-rFR/strings.xml +++ b/core/ui/src/main/res/values-fr-rFR/strings.xml @@ -14,6 +14,7 @@ %1$.2f U/h Pompe non initialisée, profil non défini ! La mise à jour du profil basal a échouée + Bolus de %1$.2f U délivré avec succès Aucun débit basal valide lu depuis la pompe Limiter l’IA %1$.1f U en raison de la %2$s BOUCLE DÉSACTIVÉE PAR RESTRICTIONS @@ -161,6 +162,11 @@ DAI G/I SI + Echec de l\'annulation du basal temporaire + Échec de l\'annulation du Bolus étendu + Remontée des informations vers NS + Boucle désactivée/suspendue + Insuline Active (IA) Mot de passe incorrect Code PIN incorrect @@ -243,6 +249,7 @@ %1$dg de glucides requis dans %2$d min. + DTQ cumulée DTQ avec Pondération Exponentielle Basal Bolus diff --git a/core/ui/src/main/res/values-hr-rHR/strings.xml b/core/ui/src/main/res/values-hr-rHR/strings.xml index d54ebac72f..8fe1732817 100644 --- a/core/ui/src/main/res/values-hr-rHR/strings.xml +++ b/core/ui/src/main/res/values-hr-rHR/strings.xml @@ -108,6 +108,7 @@ DIA IC ISF + Prijenos statusa u NS Pogrešna lozinka Pogrešan PIN diff --git a/core/ui/src/main/res/values-it-rIT/strings.xml b/core/ui/src/main/res/values-it-rIT/strings.xml index 62fa0720ce..5867022486 100644 --- a/core/ui/src/main/res/values-it-rIT/strings.xml +++ b/core/ui/src/main/res/values-it-rIT/strings.xml @@ -156,6 +156,9 @@ DIA IC ISF + Carica stato in NS + Loop disabilitato/sospeso + Insulina attiva (IOB) Password errata PIN errato diff --git a/core/ui/src/main/res/values-iw-rIL/strings.xml b/core/ui/src/main/res/values-iw-rIL/strings.xml index 25f8fac1f6..c99a6fcdea 100644 --- a/core/ui/src/main/res/values-iw-rIL/strings.xml +++ b/core/ui/src/main/res/values-iw-rIL/strings.xml @@ -156,6 +156,9 @@ משך פעילות אינסולין IC ISF + טוען מצב ל-Nightscout + השבתת \\ השהיית לולאה + אינסולין פעיל בגוף (IOB) סיסמה שגויה קוד PIN שגוי diff --git a/core/ui/src/main/res/values-ko-rKR/strings.xml b/core/ui/src/main/res/values-ko-rKR/strings.xml index 6f44561f90..e6c511e6c5 100644 --- a/core/ui/src/main/res/values-ko-rKR/strings.xml +++ b/core/ui/src/main/res/values-ko-rKR/strings.xml @@ -136,6 +136,9 @@ DIA IC ISF + NS에 상태 업로드하기 + 중지 또는 일시중지된 loop + 활성 인슐린 (IOB) 잘못된 비밀번호 비밀번호가 일치하지 않습니다. diff --git a/core/ui/src/main/res/values-lt-rLT/strings.xml b/core/ui/src/main/res/values-lt-rLT/strings.xml index a247458036..e88c71198a 100644 --- a/core/ui/src/main/res/values-lt-rLT/strings.xml +++ b/core/ui/src/main/res/values-lt-rLT/strings.xml @@ -141,6 +141,9 @@ IVT IA JIF + Perduoti būsenos duomenis į NS + Ciklas išjungtas/sustabdytas + Aktyvus insulinas organizme (AIO) Neteisingas slaptažodis Slaptažodžiai nesutampa diff --git a/core/ui/src/main/res/values-nl-rNL/strings.xml b/core/ui/src/main/res/values-nl-rNL/strings.xml index feaa7500a1..001d79204d 100644 --- a/core/ui/src/main/res/values-nl-rNL/strings.xml +++ b/core/ui/src/main/res/values-nl-rNL/strings.xml @@ -158,6 +158,9 @@ DIA KH-ratio ISF + Upload status naar NS + Uitgeschakelde/onderbroken loop + Insuline aan boord (IOB) Verkeerd wachtwoord Onjuiste PIN-code diff --git a/core/ui/src/main/res/values-no-rNO/strings.xml b/core/ui/src/main/res/values-no-rNO/strings.xml index cc59c713bb..c26b75ec52 100644 --- a/core/ui/src/main/res/values-no-rNO/strings.xml +++ b/core/ui/src/main/res/values-no-rNO/strings.xml @@ -164,6 +164,9 @@ ISF Kansellering av Temp Basal feilet Kansellering av forlenget bolus feilet + Last opp status til Nightscout + Deaktiver/pause loop + Aktivt insulin (IOB) Feil passord Feil PIN-kode diff --git a/core/ui/src/main/res/values-pl-rPL/strings.xml b/core/ui/src/main/res/values-pl-rPL/strings.xml index 029f265d00..0899124568 100644 --- a/core/ui/src/main/res/values-pl-rPL/strings.xml +++ b/core/ui/src/main/res/values-pl-rPL/strings.xml @@ -141,6 +141,9 @@ DIA IC ISF + Przesyłaj status do NS + Wyłączona/zawieszona pętla + Aktywna insulina (IOB) Złe hasło Hasła się nie zgadzają diff --git a/core/ui/src/main/res/values-pt-rBR/protection.xml b/core/ui/src/main/res/values-pt-rBR/protection.xml index 272d4c10ba..86522c3e44 100644 --- a/core/ui/src/main/res/values-pt-rBR/protection.xml +++ b/core/ui/src/main/res/values-pt-rBR/protection.xml @@ -6,13 +6,26 @@ Proteção Aplicação Proteção Bólus Definições de senha + Configurações do PIN Senha da aplicação + PIN do Aplicativo Senha do bólus + Bolus PIN + PIN e senha de segurança + Tempo até que a senha ou PIN sejam inseridos Biometria Senha personalizada + PIN personalizado Sem proteção + Retorno Inseguro + Para ser eficaz, a proteção biométrica precisa de uma senha mestra definida para a substituição.\n\nPor favor defina uma senha mestra! Senha foi definida! + PIN definido! Senha não foi definida + PIN não definido Senha não foi alterada + PIN não alterado + PIN apagado! Insira a senha aqui + Insira o PIN aqui diff --git a/core/ui/src/main/res/values-pt-rBR/strings.xml b/core/ui/src/main/res/values-pt-rBR/strings.xml index 7a5a500da2..70eb1193f6 100644 --- a/core/ui/src/main/res/values-pt-rBR/strings.xml +++ b/core/ui/src/main/res/values-pt-rBR/strings.xml @@ -14,6 +14,7 @@ %1$.2f U/h Bomba não inicializada, perfil não definido! Falha ao atualizar o perfil basal + Bolus %1$.2f U aplicado com sucesso Nenhum valor de basal temporaria valido foi lido da bomba A limitar IOB para %1$.1f U porque %2$s LOOP DESATIVADO POR RESTRIÇÕES @@ -46,6 +47,7 @@ Sucesso Configurações Avançadas Erro na entrega Bólus Estendido + Modo APS Bólus estendido Pausado DDT Total @@ -60,6 +62,8 @@ Por favor aguarde… Parar Carbos + Perfil inválido! + SEM PERFIL DEFINIDO ]]> Data Unidades @@ -149,6 +153,7 @@ IOB Basal INVÁLIDO Login + Purgar/Preencher Insulina Parar Alvo Temp Loop Fechado @@ -157,6 +162,11 @@ DIA IC FSI + Cancelamento do basal temporário falhou + Falhou o cancelamento do bolus extendido + Enviar estado para NS + Loop Desativado/Suspenso + Insulina ativa (IA) Senha incorreta PIN incorreto @@ -172,6 +182,7 @@ Iniciar perfil %1$d%% para %2$d min + Cancelar basal temporário Deixa o basal temporário em andamento Rácio Duração @@ -193,9 +204,12 @@ Observação: %1$s Questão : %1$s Exercício : %1$s + Alteração do local do cateter + Colocação do Sensor CGM Início do Sensor CGM Parar Sensor CGM Alerta D.A.D + Troca de Reservatório de Insulina Troca de Perfil Bólus Lanche Bólus Refeição @@ -205,6 +219,8 @@ Fim do Basal Temp Correção Carboidratos OpenAPS Offline + Troca de Bateria da Bomba + Alvo Temporário Valor do Alvo Temporário Cancelar alvo temporário Assistente de Bólus @@ -233,6 +249,7 @@ %1$d g de carboidratos necessários em %2$d minutos + Dose diária acumulada (TDD) Dose diária exponencialmente ponderada Basal Bólus @@ -402,7 +419,7 @@ Aviso : Selecione o perfil para ajustar O perfil selecionado tem %1$d valores de IC. Autotune vai usar %2$.2f g/U - O perfil selecionado tem %1$d valores de ISF. Autotune vai usar %2$.1f g/U + O perfil selecionado tem %1$d valores de ISF. Autotune usará %2$.1f %3$s/U Erro nos dados de entrada, tente executar novamente autotune ou reduza o número de dias Cálculos do Autotune iniciados, por favor aguarde Verifique os resultados cuidadosamente antes de usá-los! @@ -431,9 +448,13 @@ Alarme Urgente INFO + Assistente de bolus + Sua glicemia está alta. Em vez de comer agora, é recomendado esperar por uma glicemia melhor. Quer fazer um bolus de correção agora e ser lembrado de quando for hora de comer? Neste caso, nenhum carboidrato será registrado e você deverá usar o assistente novamente quando lembrarmos você. CA vs IA !!!!! Absorção lenta de hidratos detectada: %2$d%% do tempo. Verifique o seu cálculo. COB pode estar sobreestimado, assim mais insulina pode ser dada !!!]]> Entregue esta parte do resultado do assistente de bólus [%] + Restrição de bólus aplicada: %1$.2f U para %2$.2f U + Bolus será apenas registrado (não administrado pela bomba) Disparar alarme quando for a hora de comer Nenhuma acção seleccionada, nada irá acontecer Nenhuma glicemia recente para base de cálculo! @@ -453,9 +474,15 @@ %1$s para %2$s Nenhuma bomba disponível! + Criança Adolescente Adulto + Adulto resistente à insulina Grávida + Selecione o tipo de paciente para configurar os limites de segurança + Máximo bolus permitido [U] + Máximo de carbs permitidos [g] + Tipo de paciente Definições de desbloqueio diff --git a/core/ui/src/main/res/values-pt-rPT/strings.xml b/core/ui/src/main/res/values-pt-rPT/strings.xml index 3918c63e3c..2261b66379 100644 --- a/core/ui/src/main/res/values-pt-rPT/strings.xml +++ b/core/ui/src/main/res/values-pt-rPT/strings.xml @@ -139,6 +139,9 @@ DIA IHC FSI + Enviar estado para NS + Loop Desactivado/Suspenso + Insulina ativa (IA ) Palavra-passe incorreta Palavras-passe não correspondem diff --git a/core/ui/src/main/res/values-ro-rRO/strings.xml b/core/ui/src/main/res/values-ro-rRO/strings.xml index db4936ab40..cae13b03b8 100644 --- a/core/ui/src/main/res/values-ro-rRO/strings.xml +++ b/core/ui/src/main/res/values-ro-rRO/strings.xml @@ -140,6 +140,9 @@ DIA IC ISF + Trimitere status către NS + Buclă dezactivată/suspendată + Insulină activă (IOB) Parola greșită Parolele nu corespund diff --git a/core/ui/src/main/res/values-ru-rRU/strings.xml b/core/ui/src/main/res/values-ru-rRU/strings.xml index 113c3e0715..3ee938b1fc 100644 --- a/core/ui/src/main/res/values-ru-rRU/strings.xml +++ b/core/ui/src/main/res/values-ru-rRU/strings.xml @@ -162,6 +162,11 @@ Время действия инсулина DIA IC углкоэф ГУ/инс ISF (чувствительность к инсулину) + Отмена врем базала не состоялась + Сбой отмены пролонгированного болюса + статус передачи данных в NS + Отключенный/приостановленный цикл + Активный инсулин (IOB) Неверный пароль Неверный PIN-код @@ -423,7 +428,6 @@ Парам % Отсутствует - Профиль авто тюн Выполнить Autotune Проверьте профиль ввода Сравнить профили diff --git a/core/ui/src/main/res/values-sk-rSK/strings.xml b/core/ui/src/main/res/values-sk-rSK/strings.xml index 547f6a389b..d49b2f6c1f 100644 --- a/core/ui/src/main/res/values-sk-rSK/strings.xml +++ b/core/ui/src/main/res/values-sk-rSK/strings.xml @@ -162,6 +162,9 @@ DIA I:C ISF + Nahrať stav do NS + Deaktivovaný/pozastavený uzavretý okruh + Aktívny inzulín (IOB) Nesprávne heslo Nesprávny PIN diff --git a/core/ui/src/main/res/values-sv-rSE/strings.xml b/core/ui/src/main/res/values-sv-rSE/strings.xml index 44781af85c..595d802f63 100644 --- a/core/ui/src/main/res/values-sv-rSE/strings.xml +++ b/core/ui/src/main/res/values-sv-rSE/strings.xml @@ -153,6 +153,9 @@ Duration IC ISF + Ladda upp status till Nightscout + Inaktiverad/pausad loop + Aktivt Insulin (IOB) Fel lösenord Lösenorden stämmer inte överens diff --git a/core/ui/src/main/res/values-tr-rTR/strings.xml b/core/ui/src/main/res/values-tr-rTR/strings.xml index b15948f734..4f04e95b60 100644 --- a/core/ui/src/main/res/values-tr-rTR/strings.xml +++ b/core/ui/src/main/res/values-tr-rTR/strings.xml @@ -160,6 +160,9 @@ İES IC Karbonhidrat İnsülin Oranı IDF İnsülin Duyarlılık Faktörü + Nightscout\'a durum aktar + Döngüyü Devre Dışı bırakma/Askıya alma + Aktif İnsülin (AİNS) Hatalı parola Yanlış PIN diff --git a/core/ui/src/main/res/values-zh-rCN/strings.xml b/core/ui/src/main/res/values-zh-rCN/strings.xml index f75e73850b..afe0f6964f 100644 --- a/core/ui/src/main/res/values-zh-rCN/strings.xml +++ b/core/ui/src/main/res/values-zh-rCN/strings.xml @@ -154,6 +154,9 @@ DIA IC ISF + 将状态上传到 NS + 禁用/暂停闭环 + 活性胰岛素(IOB) 密码错误 PIN 码错误 @@ -480,7 +483,7 @@ 最大基础率被限定为 %1$.2f U/h 由于 %2$s 泵限制 - 由于 %2$s, 将最大百分比限制为 %1$d% + 由于 %2$s, 将最大百分比限制为 %1$d%% 它必须是正数 由于 %2$s, 将大剂量限制为 %1$.1f U diff --git a/core/utils/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt b/core/utils/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt index bfcf039497..8f38aab753 100644 --- a/core/utils/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt +++ b/core/utils/src/main/java/info/nightscout/core/utils/extensions/JSONObjectExt.kt @@ -1,4 +1,4 @@ -package info.nightscout.core.extensions +package info.nightscout.core.utils.extensions import androidx.annotation.StringRes import info.nightscout.shared.interfaces.ResourceHelper diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdBolusCalculatorResultTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdBolusCalculatorResultTransaction.kt index 99c9329a9c..d0796b6c70 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdBolusCalculatorResultTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdBolusCalculatorResultTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.BolusCalculatorResult -class UpdateNsIdBolusCalculatorResultTransaction(val bolusCalculatorResult: BolusCalculatorResult) : Transaction() { +class UpdateNsIdBolusCalculatorResultTransaction(private val bolusCalculatorResults: List) : Transaction() { - override fun run() { - val current = database.bolusCalculatorResultDao.findById(bolusCalculatorResult.id) - if (current != null && current.interfaceIDs.nightscoutId != bolusCalculatorResult.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = bolusCalculatorResult.interfaceIDs.nightscoutId - database.bolusCalculatorResultDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (bolusCalculatorResult in bolusCalculatorResults) { + val current = database.bolusCalculatorResultDao.findById(bolusCalculatorResult.id) + if (current != null && current.interfaceIDs.nightscoutId != bolusCalculatorResult.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = bolusCalculatorResult.interfaceIDs.nightscoutId + database.bolusCalculatorResultDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdBolusTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdBolusTransaction.kt index 1075094e0b..b75b15f303 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdBolusTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdBolusTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.Bolus -class UpdateNsIdBolusTransaction(val bolus: Bolus) : Transaction() { +class UpdateNsIdBolusTransaction(private val boluses: List) : Transaction() { - override fun run() { - val current = database.bolusDao.findById(bolus.id) - if (current != null && current.interfaceIDs.nightscoutId != bolus.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = bolus.interfaceIDs.nightscoutId - database.bolusDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (bolus in boluses) { + val current = database.bolusDao.findById(bolus.id) + if (current != null && current.interfaceIDs.nightscoutId != bolus.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = bolus.interfaceIDs.nightscoutId + database.bolusDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdCarbsTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdCarbsTransaction.kt index 2c6ae614e3..15b376ef47 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdCarbsTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdCarbsTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.Carbs -class UpdateNsIdCarbsTransaction(val carbs: Carbs) : Transaction() { +class UpdateNsIdCarbsTransaction(private val carbs: List) : Transaction() { - override fun run() { - val current = database.carbsDao.findById(carbs.id) - if (current != null && current.interfaceIDs.nightscoutId != carbs.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = carbs.interfaceIDs.nightscoutId - database.carbsDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (carb in carbs) { + val current = database.carbsDao.findById(carb.id) + if (current != null && current.interfaceIDs.nightscoutId != carb.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = carb.interfaceIDs.nightscoutId + database.carbsDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdDeviceStatusTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdDeviceStatusTransaction.kt index fc582722a3..5b63815049 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdDeviceStatusTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdDeviceStatusTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.DeviceStatus -class UpdateNsIdDeviceStatusTransaction(val deviceStatus: DeviceStatus) : Transaction() { +class UpdateNsIdDeviceStatusTransaction(private val deviceStatuses: List) : Transaction() { - override fun run() { - val current = database.deviceStatusDao.findById(deviceStatus.id) - if (current != null && current.interfaceIDs.nightscoutId != deviceStatus.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = deviceStatus.interfaceIDs.nightscoutId - database.deviceStatusDao.update(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (deviceStatus in deviceStatuses) { + val current = database.deviceStatusDao.findById(deviceStatus.id) + if (current != null && current.interfaceIDs.nightscoutId != deviceStatus.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = deviceStatus.interfaceIDs.nightscoutId + database.deviceStatusDao.update(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdEffectiveProfileSwitchTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdEffectiveProfileSwitchTransaction.kt index d76205f75b..89cb509d40 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdEffectiveProfileSwitchTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdEffectiveProfileSwitchTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.EffectiveProfileSwitch -class UpdateNsIdEffectiveProfileSwitchTransaction(val effectiveProfileSwitch: EffectiveProfileSwitch) : Transaction() { +class UpdateNsIdEffectiveProfileSwitchTransaction(private val effectiveProfileSwitches: List) : Transaction() { - override fun run() { - val current = database.effectiveProfileSwitchDao.findById(effectiveProfileSwitch.id) - if (current != null && current.interfaceIDs.nightscoutId != effectiveProfileSwitch.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = effectiveProfileSwitch.interfaceIDs.nightscoutId - database.effectiveProfileSwitchDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (effectiveProfileSwitch in effectiveProfileSwitches) { + val current = database.effectiveProfileSwitchDao.findById(effectiveProfileSwitch.id) + if (current != null && current.interfaceIDs.nightscoutId != effectiveProfileSwitch.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = effectiveProfileSwitch.interfaceIDs.nightscoutId + database.effectiveProfileSwitchDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdExtendedBolusTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdExtendedBolusTransaction.kt index 6d070a6516..43beaebd3d 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdExtendedBolusTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdExtendedBolusTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.ExtendedBolus -class UpdateNsIdExtendedBolusTransaction(val bolus: ExtendedBolus) : Transaction() { +class UpdateNsIdExtendedBolusTransaction(val boluses: List) : Transaction() { - override fun run() { - val current = database.extendedBolusDao.findById(bolus.id) - if (current != null && current.interfaceIDs.nightscoutId != bolus.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = bolus.interfaceIDs.nightscoutId - database.extendedBolusDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (bolus in boluses) { + val current = database.extendedBolusDao.findById(bolus.id) + if (current != null && current.interfaceIDs.nightscoutId != bolus.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = bolus.interfaceIDs.nightscoutId + database.extendedBolusDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdFoodTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdFoodTransaction.kt index f35b5a3efe..228d8665ff 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdFoodTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdFoodTransaction.kt @@ -2,13 +2,24 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.Food -class UpdateNsIdFoodTransaction(val food: Food) : Transaction() { +class UpdateNsIdFoodTransaction(private val foods: List) : Transaction() { - override fun run() { - val current = database.foodDao.findById(food.id) - if (current != null && current.interfaceIDs.nightscoutId != food.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = food.interfaceIDs.nightscoutId - database.foodDao.updateExistingEntry(current) + val result = TransactionResult() + + override fun run(): TransactionResult { + for (food in foods) { + val current = database.foodDao.findById(food.id) + if (current != null && current.interfaceIDs.nightscoutId != food.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = food.interfaceIDs.nightscoutId + database.foodDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdGlucoseValueTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdGlucoseValueTransaction.kt index eb047a377b..073b7f2fcf 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdGlucoseValueTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdGlucoseValueTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.GlucoseValue -class UpdateNsIdGlucoseValueTransaction(val glucoseValue: GlucoseValue) : Transaction() { +class UpdateNsIdGlucoseValueTransaction(private val glucoseValues: List) : Transaction() { - override fun run() { - val current = database.glucoseValueDao.findById(glucoseValue.id) - if (current != null && current.interfaceIDs.nightscoutId != glucoseValue.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = glucoseValue.interfaceIDs.nightscoutId - database.glucoseValueDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (glucoseValue in glucoseValues) { + val current = database.glucoseValueDao.findById(glucoseValue.id) + if (current != null && current.interfaceIDs.nightscoutId != glucoseValue.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = glucoseValue.interfaceIDs.nightscoutId + database.glucoseValueDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdOfflineEventTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdOfflineEventTransaction.kt index 48f8676d44..b568b5b3f9 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdOfflineEventTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdOfflineEventTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.OfflineEvent -class UpdateNsIdOfflineEventTransaction(val offlineEvent: OfflineEvent) : Transaction() { +class UpdateNsIdOfflineEventTransaction(private val offlineEvents: List) : Transaction() { - override fun run() { - val current = database.offlineEventDao.findById(offlineEvent.id) - if (current != null && current.interfaceIDs.nightscoutId != offlineEvent.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = offlineEvent.interfaceIDs.nightscoutId - database.offlineEventDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (offlineEvent in offlineEvents) { + val current = database.offlineEventDao.findById(offlineEvent.id) + if (current != null && current.interfaceIDs.nightscoutId != offlineEvent.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = offlineEvent.interfaceIDs.nightscoutId + database.offlineEventDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdProfileSwitchTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdProfileSwitchTransaction.kt index b8886ed610..d15421d316 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdProfileSwitchTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdProfileSwitchTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.ProfileSwitch -class UpdateNsIdProfileSwitchTransaction(val profileSwitch: ProfileSwitch) : Transaction() { +class UpdateNsIdProfileSwitchTransaction(val profileSwitches: List) : Transaction() { - override fun run() { - val current = database.profileSwitchDao.findById(profileSwitch.id) - if (current != null && current.interfaceIDs.nightscoutId != profileSwitch.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = profileSwitch.interfaceIDs.nightscoutId - database.profileSwitchDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (profileSwitch in profileSwitches) { + val current = database.profileSwitchDao.findById(profileSwitch.id) + if (current != null && current.interfaceIDs.nightscoutId != profileSwitch.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = profileSwitch.interfaceIDs.nightscoutId + database.profileSwitchDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTemporaryBasalTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTemporaryBasalTransaction.kt index 1daa83442f..667daae619 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTemporaryBasalTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTemporaryBasalTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.TemporaryBasal -class UpdateNsIdTemporaryBasalTransaction(val temporaryBasal: TemporaryBasal) : Transaction() { +class UpdateNsIdTemporaryBasalTransaction(private val temporaryBasals: List) : Transaction() { - override fun run() { - val current = database.temporaryBasalDao.findById(temporaryBasal.id) - if (current != null && current.interfaceIDs.nightscoutId != temporaryBasal.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = temporaryBasal.interfaceIDs.nightscoutId - database.temporaryBasalDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (temporaryBasal in temporaryBasals) { + val current = database.temporaryBasalDao.findById(temporaryBasal.id) + if (current != null && current.interfaceIDs.nightscoutId != temporaryBasal.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = temporaryBasal.interfaceIDs.nightscoutId + database.temporaryBasalDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTemporaryTargetTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTemporaryTargetTransaction.kt index 0b4a369708..f629302486 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTemporaryTargetTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTemporaryTargetTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.TemporaryTarget -class UpdateNsIdTemporaryTargetTransaction(val temporaryTarget: TemporaryTarget) : Transaction() { +class UpdateNsIdTemporaryTargetTransaction(private val temporaryTargets: List) : Transaction() { - override fun run() { - val current = database.temporaryTargetDao.findById(temporaryTarget.id) - if (current != null && current.interfaceIDs.nightscoutId != temporaryTarget.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = temporaryTarget.interfaceIDs.nightscoutId - database.temporaryTargetDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (temporaryTarget in temporaryTargets) { + val current = database.temporaryTargetDao.findById(temporaryTarget.id) + if (current != null && current.interfaceIDs.nightscoutId != temporaryTarget.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = temporaryTarget.interfaceIDs.nightscoutId + database.temporaryTargetDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTherapyEventTransaction.kt b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTherapyEventTransaction.kt index e310f1c1d3..d82086e9b1 100644 --- a/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTherapyEventTransaction.kt +++ b/database/impl/src/main/java/info/nightscout/database/impl/transactions/UpdateNsIdTherapyEventTransaction.kt @@ -2,13 +2,23 @@ package info.nightscout.database.impl.transactions import info.nightscout.database.entities.TherapyEvent -class UpdateNsIdTherapyEventTransaction(val therapyEvent: TherapyEvent) : Transaction() { +class UpdateNsIdTherapyEventTransaction(val therapyEvents: List) : Transaction() { - override fun run() { - val current = database.therapyEventDao.findById(therapyEvent.id) - if (current != null && current.interfaceIDs.nightscoutId != therapyEvent.interfaceIDs.nightscoutId) { - current.interfaceIDs.nightscoutId = therapyEvent.interfaceIDs.nightscoutId - database.therapyEventDao.updateExistingEntry(current) + val result = TransactionResult() + override fun run(): TransactionResult { + for (therapyEvent in therapyEvents) { + val current = database.therapyEventDao.findById(therapyEvent.id) + if (current != null && current.interfaceIDs.nightscoutId != therapyEvent.interfaceIDs.nightscoutId) { + current.interfaceIDs.nightscoutId = therapyEvent.interfaceIDs.nightscoutId + database.therapyEventDao.updateExistingEntry(current) + result.updatedNsId.add(current) + } } + return result + } + + class TransactionResult { + + val updatedNsId = mutableListOf() } } \ No newline at end of file diff --git a/implementation/src/main/res/values-bg-rBG/strings.xml b/implementation/src/main/res/values-bg-rBG/strings.xml index 053c3762b7..626a596679 100644 --- a/implementation/src/main/res/values-bg-rBG/strings.xml +++ b/implementation/src/main/res/values-bg-rBG/strings.xml @@ -3,8 +3,6 @@ xDrip+ не е инсталиран Калибрацията е изпратена към xDrip+ КЗ - Време е за ядене - Време е за болус!\nВключи болус съветника и направи изчисление отново. Командата се изпълнява в момента Базалните стойности са под минимума. Не е зададен профил! Разрешение diff --git a/implementation/src/main/res/values-ca-rES/strings.xml b/implementation/src/main/res/values-ca-rES/strings.xml index 477ec540ed..e52c6270fc 100644 --- a/implementation/src/main/res/values-ca-rES/strings.xml +++ b/implementation/src/main/res/values-ca-rES/strings.xml @@ -3,8 +3,6 @@ xDrip+ no instal·lat Calibració enviada a xDrip+ Glucèmia - Hora de menjar - Hora d’aplicar bolus!\nExecuteu l\'assistent de bolus i torneu a fer els càlculs. Ordre executant-se ara mateix Valor de basal per sota del mínim. Perfil no definit! Permís diff --git a/implementation/src/main/res/values-cs-rCZ/strings.xml b/implementation/src/main/res/values-cs-rCZ/strings.xml index 618307654f..eeaa565d54 100644 --- a/implementation/src/main/res/values-cs-rCZ/strings.xml +++ b/implementation/src/main/res/values-cs-rCZ/strings.xml @@ -3,8 +3,6 @@ xDrip+ není nainstalován Kalibrace odeslána do xDripu+ Gly - Čas k jídlu - Čas na bolus!\nSpusťte Bolusovou kalkulačku a proveďte výpočet znovu. Příkaz je právě prováděn Hodnota bazálu pod povoleným minimem. Nenastaveno! Povolení diff --git a/implementation/src/main/res/values-da-rDK/strings.xml b/implementation/src/main/res/values-da-rDK/strings.xml index 8e92f5775d..bbbf8750dd 100644 --- a/implementation/src/main/res/values-da-rDK/strings.xml +++ b/implementation/src/main/res/values-da-rDK/strings.xml @@ -3,8 +3,6 @@ xDrip+ ikke installeret Kalibrering sendt til xDrip+ BG - Tid til at spise - Tid til bolus!\nKør Bolus-guiden og lav beregningen igen. Kommando udføres lige nu Basal værdi under minimum. Profil ikke angivet! Tilladelse diff --git a/implementation/src/main/res/values-de-rDE/strings.xml b/implementation/src/main/res/values-de-rDE/strings.xml index d65647d9d3..5c4bd725c7 100644 --- a/implementation/src/main/res/values-de-rDE/strings.xml +++ b/implementation/src/main/res/values-de-rDE/strings.xml @@ -3,8 +3,6 @@ xDrip+ nicht installiert Kalibrierung an xDrip+ gesendet+ BZ - Zeit zum Essen - Zeit für den nächsten Bolus!\nFühre den Bolus-Assistenten aus, um die Berechnung erneut durchzuführen. Befehl wird zurzeit ausgeführt Wert der Basalrate unter Minimum. Profil nicht gesetzt! Berechtigung diff --git a/implementation/src/main/res/values-es-rES/strings.xml b/implementation/src/main/res/values-es-rES/strings.xml index f26267d73c..fdcd036346 100644 --- a/implementation/src/main/res/values-es-rES/strings.xml +++ b/implementation/src/main/res/values-es-rES/strings.xml @@ -3,8 +3,6 @@ xDrip+ no se encuentra instalado Calibración enviada a xDrip+ BG - Hora de comer - ¡Hora de comer!\nEjecutar el asistente de bolo y calcular de nuevo. Orden se esta efectuando en este momento Valor basal por debajo del mínimo. Perfil no establecido. Permiso diff --git a/implementation/src/main/res/values-fr-rFR/strings.xml b/implementation/src/main/res/values-fr-rFR/strings.xml index 67e5c10fc9..58811711e8 100644 --- a/implementation/src/main/res/values-fr-rFR/strings.xml +++ b/implementation/src/main/res/values-fr-rFR/strings.xml @@ -3,8 +3,6 @@ xDrip+ n\'est pas installé Étalonnage envoyé à xDrip+ Gly - Il est temps de manger - Il est temps de faire le bolus !\nExécutez l\'Assistant et faites de nouveau le calcul. Commande exécutée à l\'instant Le débit Basal est inférieur au minimum autorisé. Profil non accepté ! Autorisation diff --git a/implementation/src/main/res/values-hr-rHR/strings.xml b/implementation/src/main/res/values-hr-rHR/strings.xml index 920aa62f37..105a2e32eb 100644 --- a/implementation/src/main/res/values-hr-rHR/strings.xml +++ b/implementation/src/main/res/values-hr-rHR/strings.xml @@ -3,8 +3,6 @@ xDrip+ nije instaliran Kalibracija poslana na xDrip+ GUK - Vrijeme za jelo - Vrijeme je za bolus!\nPokrenite čarobnjak za bolus i ponovite izračun. Naredba se izvršava upravo sada Bazalna vrijednost ispod minimuma. Profil nije postavljen! Dozvola diff --git a/implementation/src/main/res/values-hu-rHU/strings.xml b/implementation/src/main/res/values-hu-rHU/strings.xml index b943c52e03..7b0ced20c0 100644 --- a/implementation/src/main/res/values-hu-rHU/strings.xml +++ b/implementation/src/main/res/values-hu-rHU/strings.xml @@ -2,7 +2,6 @@ xDrip+ nincs telepítve VC - Ideje enni Alacsony Magas diff --git a/implementation/src/main/res/values-it-rIT/strings.xml b/implementation/src/main/res/values-it-rIT/strings.xml index 4d40d46a57..4d146e6414 100644 --- a/implementation/src/main/res/values-it-rIT/strings.xml +++ b/implementation/src/main/res/values-it-rIT/strings.xml @@ -3,7 +3,6 @@ xDrip+ non installato Calibrazione inviata a xDrip+ BG - Tempo di fare un bolo!\nEsegui il calcolatore e fai di nuovi i calcoli. Il comando sarà eseguito ora Valore basale inferiore al minimo. Profilo non impostato! Autorizzazione diff --git a/implementation/src/main/res/values-iw-rIL/strings.xml b/implementation/src/main/res/values-iw-rIL/strings.xml index a9e70d1725..a53bab2a40 100644 --- a/implementation/src/main/res/values-iw-rIL/strings.xml +++ b/implementation/src/main/res/values-iw-rIL/strings.xml @@ -3,8 +3,6 @@ xDrip+ אינו מותקן כיול נשלח ל-xDrip+ BG - זמן לאכול - זמן להזריק בולוס!\nהשתמשו במחשבון וחשבו מחדש. הפקודה מבוצעת כעת ערך הבסיס מתחת למינימום. פרופיל אינו מוגדר! הרשאה diff --git a/implementation/src/main/res/values-ko-rKR/strings.xml b/implementation/src/main/res/values-ko-rKR/strings.xml index 57f9ab29de..72fe956529 100644 --- a/implementation/src/main/res/values-ko-rKR/strings.xml +++ b/implementation/src/main/res/values-ko-rKR/strings.xml @@ -3,7 +3,6 @@ xDrip+가 설치되지 않았습니다 보정이 xDrip으로 전송되었습니다+ 혈당 - 식사할 시간 명령을 지금 실행합니다. Basal값이 최소값 이하입니다. 프로파일이 설정되지 않습니다! 권한 diff --git a/implementation/src/main/res/values-lt-rLT/strings.xml b/implementation/src/main/res/values-lt-rLT/strings.xml index 5ce414e2c2..af293a1316 100644 --- a/implementation/src/main/res/values-lt-rLT/strings.xml +++ b/implementation/src/main/res/values-lt-rLT/strings.xml @@ -3,8 +3,6 @@ xDrip+ neįdiegta Kalibracija nusiųsta į xDrip+ KG - Laikas valgyti - Laikas bolusui!\nĮjunkite Skaičiuotuvą ir pakartokite skaičiavimus. Komanda vykdoma Valandinės bazės vertė mažesnė už minimalią. Profilis nenustatytas! Leidimas diff --git a/implementation/src/main/res/values-nl-rNL/strings.xml b/implementation/src/main/res/values-nl-rNL/strings.xml index bccd5c6419..09e67b5431 100644 --- a/implementation/src/main/res/values-nl-rNL/strings.xml +++ b/implementation/src/main/res/values-nl-rNL/strings.xml @@ -3,8 +3,6 @@ xDrip+ niet geïnstalleerd Kalibratie verzonden naar xDrip+ BG - Tijd om te eten - Tijd om te bolussen!\nVoer de boluswizard uit en maak de berekening opnieuw. Opdracht wordt nu uitgevoerd Basaalwaarde onder minimum. Profiel niet ingesteld! Toestemming diff --git a/implementation/src/main/res/values-no-rNO/strings.xml b/implementation/src/main/res/values-no-rNO/strings.xml index 78cbec0a4b..12bfa0f41b 100644 --- a/implementation/src/main/res/values-no-rNO/strings.xml +++ b/implementation/src/main/res/values-no-rNO/strings.xml @@ -3,8 +3,6 @@ xDrip+ ikke installert Kalibrering er sendt til xDrip+ BS - Nå må du spise - Tid for bolus!\nStart bolus-veiviser og gjør beregning på nytt. Kommandoen utføres akkurat nå Basalverdi under minimum. Profilen settes ikke! Tillatelse diff --git a/implementation/src/main/res/values-pl-rPL/strings.xml b/implementation/src/main/res/values-pl-rPL/strings.xml index 816d781504..01697b1533 100644 --- a/implementation/src/main/res/values-pl-rPL/strings.xml +++ b/implementation/src/main/res/values-pl-rPL/strings.xml @@ -3,8 +3,6 @@ xDrip+ nie zainstalowany Kalibracja przesłana do xDrip+ BG - Czas na jedzenie - Czas na bolus!\nUruchom Kalkulator bolusa aby ponownie wykonać obliczenia. Polecenie jest teraz wykonywane Wartość bazy poniżej minimum. Nie ustawiono profilu! Uprawnienia diff --git a/implementation/src/main/res/values-pt-rBR/strings.xml b/implementation/src/main/res/values-pt-rBR/strings.xml index f2767da327..cedd2a45c0 100644 --- a/implementation/src/main/res/values-pt-rBR/strings.xml +++ b/implementation/src/main/res/values-pt-rBR/strings.xml @@ -3,8 +3,6 @@ xDrip+ não está instalado Calibração enviada para o xDrip+ GLIC - Hora de comer - Hora do bolus!\nAbra o assistente de bolus e faça o cálculo novamente. Comando será executado agora Valor da basal abaixo do mínimo. Perfil não definido! Permissão diff --git a/implementation/src/main/res/values-pt-rPT/strings.xml b/implementation/src/main/res/values-pt-rPT/strings.xml index c54dab06f6..17e7004db1 100644 --- a/implementation/src/main/res/values-pt-rPT/strings.xml +++ b/implementation/src/main/res/values-pt-rPT/strings.xml @@ -3,8 +3,6 @@ xDrip+ não está instalado Calibração enviada para xDrip+ GLIC - Hora de comer - Hora de fazer o bólus!\nExecute o assistente de bólus e faça o cálculo novamente. Comando será executado agora Valor da basal abaixo do mínimo. Perfil não definido! Permissão diff --git a/implementation/src/main/res/values-ro-rRO/strings.xml b/implementation/src/main/res/values-ro-rRO/strings.xml index 15656fca6b..9b05ddf2a9 100644 --- a/implementation/src/main/res/values-ro-rRO/strings.xml +++ b/implementation/src/main/res/values-ro-rRO/strings.xml @@ -3,8 +3,6 @@ xDrip+ nu este instalat. Calibrare trimisă către xDrip+ Gl - Timpul sa mănânci - Timpul sa faci bolus!\nRuleaza Calculatorul de Bolus pentru a face calculele din nou. Se execută comanda chiar acum Valoarea bazalei este sub minimul permis. Profilul nu este setat! Permisiune diff --git a/implementation/src/main/res/values-ru-rRU/strings.xml b/implementation/src/main/res/values-ru-rRU/strings.xml index fdf3b00b2e..f0ed2effbf 100644 --- a/implementation/src/main/res/values-ru-rRU/strings.xml +++ b/implementation/src/main/res/values-ru-rRU/strings.xml @@ -3,8 +3,6 @@ xdrip+ не установлен Калибровка отправлена на xDrip+ ГК - Пора есть - Пора дать болюс!\nЗапустите помощник болюса и повторите расчет. Команда выполняется значение базала ниже минимума. профиль не создан! Права доступа diff --git a/implementation/src/main/res/values-sk-rSK/strings.xml b/implementation/src/main/res/values-sk-rSK/strings.xml index dfb4deef39..9aca0897f2 100644 --- a/implementation/src/main/res/values-sk-rSK/strings.xml +++ b/implementation/src/main/res/values-sk-rSK/strings.xml @@ -3,8 +3,6 @@ xDrip+ nie je nainštalovaný Kalibrácia odoslaná do xDrip+ Glykémia - Čas na jedlo - Čas na bolus!\nSpustite Bolusovú kalkulačku a urobte výpočet znova. Príkaz sa práve vykonáva Hodnota bazálu pod povoleným minimom. Profil nenastavený! Povolenie diff --git a/implementation/src/main/res/values-sv-rSE/strings.xml b/implementation/src/main/res/values-sv-rSE/strings.xml index 9cb53165f8..3896d8c132 100644 --- a/implementation/src/main/res/values-sv-rSE/strings.xml +++ b/implementation/src/main/res/values-sv-rSE/strings.xml @@ -3,8 +3,6 @@ xDrip+ inte installerat Kalibrering skickad till xDrip+ BG - Dags att äta - Dags för bolus!\nKör Bolusguiden och gör beräkningar igen. Kommando körs just nu Basal understiger miniminivå. Profilen sattes inte. Behörighet diff --git a/implementation/src/main/res/values-tr-rTR/strings.xml b/implementation/src/main/res/values-tr-rTR/strings.xml index 7cdb7e4005..a8372bce29 100644 --- a/implementation/src/main/res/values-tr-rTR/strings.xml +++ b/implementation/src/main/res/values-tr-rTR/strings.xml @@ -3,8 +3,6 @@ xDrip+ uygulaması yüklenmemiş Kalibrasyon xDrip+ a gönderildi - Yemek zamanı - Bolus zamanı!\nBolus sihirbazını çalıştırın ve yeniden hesaplama yapın. Komut şu anda çalıştırıldı Bazal değer minimumun altında. Profil ayarlanmadı! Yetki diff --git a/implementation/src/main/res/values-zh-rCN/strings.xml b/implementation/src/main/res/values-zh-rCN/strings.xml index 7d9b1e84cd..2c1ec08e5b 100644 --- a/implementation/src/main/res/values-zh-rCN/strings.xml +++ b/implementation/src/main/res/values-zh-rCN/strings.xml @@ -3,8 +3,6 @@ 没有安装xDrip+ 校准发送到 xDrip+ 血糖 - 吃饭时间 - 输注胰岛素时间到了!\n请运行大剂量向导,然后再次进行计算。 现在命令被执行了 基础率值低于泵支持的最小值。配置文件没有设定 权限 diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneCore.kt b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneCore.kt index 3c0de91b51..a173b54a22 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneCore.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneCore.kt @@ -165,7 +165,7 @@ class AutotuneCore @Inject constructor( for (i in 0..23) { newHourlyBasalProfile[i] = hourlyBasalProfile[i] } - val basalUnTuned = previousAutotune.basalUntuned + val basalUnTuned = previousAutotune.basalUnTuned //autotune-core (lib/autotune/index.js) #210-#266 // look at net deviations for each hour @@ -484,7 +484,7 @@ class AutotuneCore @Inject constructor( previousAutotune.basal = basalProfile previousAutotune.isf = isf previousAutotune.ic = Round.roundTo(carbRatio, 0.001) - previousAutotune.basalUntuned = basalUnTuned + previousAutotune.basalUnTuned = basalUnTuned previousAutotune.dia = newDia previousAutotune.peak = newPeak val localInsulin = LocalInsulin("Ins_$newPeak-$newDia", newPeak, newDia) diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFS.kt b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFS.kt index fb32c8bb6f..69d655462d 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFS.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFS.kt @@ -89,14 +89,14 @@ class AutotuneFS @Inject constructor( } fun exportPumpProfile(profile: ATProfile) { - createAutotunefile(PUMPPROFILE, profile.profiletoOrefJSON(), true) - createAutotunefile(PUMPPROFILE, profile.profiletoOrefJSON()) + createAutotunefile(PUMPPROFILE, profile.profileToOrefJSON(), true) + createAutotunefile(PUMPPROFILE, profile.profileToOrefJSON()) } fun exportTunedProfile(tunedProfile: ATProfile) { - createAutotunefile(TUNEDPROFILE + formatDate(tunedProfile.from) + ".json", tunedProfile.profiletoOrefJSON()) + createAutotunefile(TUNEDPROFILE + formatDate(tunedProfile.from) + ".json", tunedProfile.profileToOrefJSON()) try { - createAutotunefile(rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name) + ".json", tunedProfile.profiletoOrefJSON(), true) + createAutotunefile(rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name) + ".json", tunedProfile.profileToOrefJSON(), true) } catch (e: JSONException) { } } diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFragment.kt b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFragment.kt index 2bfd3b5e14..be1c6f5f76 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFragment.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotuneFragment.kt @@ -28,9 +28,9 @@ import info.nightscout.interfaces.Constants import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin +import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.ProfileStore import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.MidnightTime @@ -149,12 +149,12 @@ class AutotuneFragment : DaggerFragment() { } binding.autotuneUpdateProfile.setOnClickListener { - val localName = autotunePlugin.pumpProfile.profilename + val localName = autotunePlugin.pumpProfile.profileName OKDialog.showConfirmation(requireContext(), rh.gs(info.nightscout.core.ui.R.string.autotune_update_input_profile_button), rh.gs(info.nightscout.core.ui.R.string.autotune_update_local_profile_message, localName), Runnable { - autotunePlugin.tunedProfile?.profilename = localName + autotunePlugin.tunedProfile?.profileName = localName autotunePlugin.updateProfile(autotunePlugin.tunedProfile) autotunePlugin.updateButtonVisibility = View.GONE autotunePlugin.saveLastRun() @@ -169,12 +169,12 @@ class AutotuneFragment : DaggerFragment() { } binding.autotuneRevertProfile.setOnClickListener { - val localName = autotunePlugin.pumpProfile.profilename + val localName = autotunePlugin.pumpProfile.profileName OKDialog.showConfirmation(requireContext(), rh.gs(info.nightscout.core.ui.R.string.autotune_revert_input_profile_button), rh.gs(info.nightscout.core.ui.R.string.autotune_revert_local_profile_message, localName), Runnable { - autotunePlugin.tunedProfile?.profilename = "" + autotunePlugin.tunedProfile?.profileName = "" autotunePlugin.updateProfile(autotunePlugin.pumpProfile) autotunePlugin.updateButtonVisibility = View.VISIBLE autotunePlugin.saveLastRun() @@ -192,11 +192,11 @@ class AutotuneFragment : DaggerFragment() { val pumpProfile = profileFunction.getProfile()?.let { currentProfile -> profileStore.getSpecificProfile(profileName)?.let { specificProfile -> ATProfile(ProfileSealed.Pure(specificProfile), LocalInsulin(""), injector).also { - it.profilename = profileName + it.profileName = profileName } } ?: ATProfile(currentProfile, LocalInsulin(""), injector).also { - it.profilename = profileFunction.getProfileName() + it.profileName = profileFunction.getProfileName() } } pumpProfile?.let { @@ -205,7 +205,7 @@ class AutotuneFragment : DaggerFragment() { time = dateUtil.now(), mode = UiInteraction.Mode.CUSTOM_PROFILE, customProfile = pumpProfile.profile.toPureNsJson(dateUtil).toString(), - customProfileName = pumpProfile.profilename + customProfileName = pumpProfile.profileName ) } } @@ -219,7 +219,7 @@ class AutotuneFragment : DaggerFragment() { time = dateUtil.now(), mode = UiInteraction.Mode.PROFILE_COMPARE, customProfile = pumpProfile.profile.toPureNsJson(dateUtil).toString(), - customProfileName = pumpProfile.profilename + "\n" + rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name), + customProfileName = pumpProfile.profileName + "\n" + rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name), customProfile2 = tunedProfile?.toPureNsJson(dateUtil).toString() ) } @@ -231,17 +231,17 @@ class AutotuneFragment : DaggerFragment() { tunedProfile?.let { tunedP -> tunedP.profileStore(circadian)?.let { OKDialog.showConfirmation(requireContext(), - rh.gs(info.nightscout.core.ui.R.string.activate_profile) + ": " + tunedP.profilename + " ?", + rh.gs(info.nightscout.core.ui.R.string.activate_profile) + ": " + tunedP.profileName + " ?", { uel.log( UserEntry.Action.STORE_PROFILE, UserEntry.Sources.Autotune, - ValueWithUnit.SimpleString(tunedP.profilename) + ValueWithUnit.SimpleString(tunedP.profileName) ) val now = dateUtil.now() if (profileFunction.createProfileSwitch( it, - profileName = tunedP.profilename, + profileName = tunedP.profileName, durationInMinutes = 0, percentage = 100, timeShiftInHours = 0, @@ -252,7 +252,7 @@ class AutotuneFragment : DaggerFragment() { UserEntry.Action.PROFILE_SWITCH, UserEntry.Sources.Autotune, "Autotune AutoSwitch", - ValueWithUnit.SimpleString(autotunePlugin.tunedProfile!!.profilename) + ValueWithUnit.SimpleString(autotunePlugin.tunedProfile!!.profileName) ) } rxBus.send(EventLocalProfileChanged()) @@ -472,7 +472,7 @@ class AutotuneFragment : DaggerFragment() { val time = df.format(h.toLong()) + ":00" totalPump += autotunePlugin.pumpProfile.basal[h] totalTuned += tuned.basal[h] - layout.addView(toTableRowValue(context, time, autotunePlugin.pumpProfile.basal[h], tuned.basal[h], "%.3f", tuned.basalUntuned[h].toString())) + layout.addView(toTableRowValue(context, time, autotunePlugin.pumpProfile.basal[h], tuned.basal[h], "%.3f", tuned.basalUnTuned[h].toString())) } layout.addView(toTableRowValue(context, "∑", totalPump, totalTuned, "%.3f", " ")) } diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt index 50c4ab61c2..461797ea48 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/AutotunePlugin.kt @@ -14,9 +14,9 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType +import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.interfaces.utils.MidnightTime import info.nightscout.plugins.aps.R @@ -131,10 +131,10 @@ class AutotunePlugin @Inject constructor( val starttime = endTime - daysBack * 24 * 60 * 60 * 1000L autotuneFS.exportSettings(settings(lastRun, daysBack, starttime, endTime)) tunedProfile = ATProfile(profile, localInsulin, injector).also { - it.profilename = rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name) + it.profileName = rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name) } pumpProfile = ATProfile(profile, localInsulin, injector).also { - it.profilename = selectedProfile + it.profileName = selectedProfile } autotuneFS.exportPumpProfile(pumpProfile) @@ -195,31 +195,31 @@ class AutotunePlugin @Inject constructor( if (autoSwitch) { val circadian = sp.getBoolean(info.nightscout.core.utils.R.string.key_autotune_circadian_ic_isf, false) tunedProfile?.let { tunedP -> - tunedP.profilename = pumpProfile.profilename + tunedP.profileName = pumpProfile.profileName updateProfile(tunedP) uel.log( UserEntry.Action.STORE_PROFILE, UserEntry.Sources.Automation, rh.gs(info.nightscout.core.ui.R.string.autotune), - ValueWithUnit.SimpleString(tunedP.profilename) + ValueWithUnit.SimpleString(tunedP.profileName) ) updateButtonVisibility = View.GONE tunedP.profileStore(circadian)?.let { profilestore -> if (profileFunction.createProfileSwitch( profilestore, - profileName = tunedP.profilename, + profileName = tunedP.profileName, durationInMinutes = 0, percentage = 100, timeShiftInHours = 0, timestamp = dateUtil.now() ) ) { - log("Profile Switch succeed ${tunedP.profilename}") + log("Profile Switch succeed ${tunedP.profileName}") uel.log( UserEntry.Action.PROFILE_SWITCH, UserEntry.Sources.Automation, rh.gs(info.nightscout.core.ui.R.string.autotune), - ValueWithUnit.SimpleString(tunedP.profilename) + ValueWithUnit.SimpleString(tunedP.profileName) ) } rxBus.send(EventLocalProfileChanged()) @@ -262,7 +262,7 @@ class AutotunePlugin @Inject constructor( totalBasal += pumpProfile.basal[i] totalTuned += tunedProfile.basal[i] val percentageChangeValue = tunedProfile.basal[i] / pumpProfile.basal[i] * 100 - 100 - strResult += rh.gs(info.nightscout.core.ui.R.string.autotune_log_basal, i.toDouble(), pumpProfile.basal[i], tunedProfile.basal[i], tunedProfile.basalUntuned[i], percentageChangeValue) + strResult += rh.gs(info.nightscout.core.ui.R.string.autotune_log_basal, i.toDouble(), pumpProfile.basal[i], tunedProfile.basal[i], tunedProfile.basalUnTuned[i], percentageChangeValue) } strResult += line strResult += rh.gs(info.nightscout.core.ui.R.string.autotune_log_sum_basal, totalBasal, totalTuned) @@ -329,10 +329,10 @@ class AutotunePlugin @Inject constructor( val profileList: ArrayList = profileStore.getProfileList() var indexLocalProfile = -1 for (p in profileList.indices) - if (profileList[p] == newProfile.profilename) + if (profileList[p] == newProfile.profileName) indexLocalProfile = p if (indexLocalProfile == -1) { - profilePlugin.addProfile(profilePlugin.copyFrom(newProfile.getProfile(circadian), newProfile.profilename)) + profilePlugin.addProfile(profilePlugin.copyFrom(newProfile.getProfile(circadian), newProfile.profileName)) return } profilePlugin.currentProfileIndex = indexLocalProfile @@ -348,17 +348,17 @@ class AutotunePlugin @Inject constructor( json.put("lastNbDays", lastNbDays) json.put("lastRun", lastRun) json.put("pumpProfile", pumpProfile.profile.toPureNsJson(dateUtil)) - json.put("pumpProfileName", pumpProfile.profilename) + json.put("pumpProfileName", pumpProfile.profileName) json.put("pumpPeak", pumpProfile.peak) json.put("pumpDia", pumpProfile.dia) tunedProfile?.let { atProfile -> json.put("tunedProfile", atProfile.profile.toPureNsJson(dateUtil)) json.put("tunedCircadianProfile", atProfile.circadianProfile.toPureNsJson(dateUtil)) - json.put("tunedProfileName", atProfile.profilename) + json.put("tunedProfileName", atProfile.profileName) json.put("tunedPeak", atProfile.peak) json.put("tunedDia", atProfile.dia) for (i in 0..23) { - json.put("missingDays_$i", atProfile.basalUntuned[i]) + json.put("missingDays_$i", atProfile.basalUnTuned[i]) } } json.put("result", result) @@ -379,7 +379,7 @@ class AutotunePlugin @Inject constructor( selectedProfile = JsonHelper.safeGetString(json, "pumpProfileName", "") val profile = JsonHelper.safeGetJSONObject(json, "pumpProfile", null)?.let { pureProfileFromJson(it, dateUtil) } ?: return - pumpProfile = ATProfile(ProfileSealed.Pure(profile), localInsulin, injector).also { it.profilename = selectedProfile } + pumpProfile = ATProfile(ProfileSealed.Pure(profile), localInsulin, injector).also { it.profileName = selectedProfile } val tunedPeak = JsonHelper.safeGetInt(json, "tunedPeak") val tunedDia = JsonHelper.safeGetDouble(json, "tunedDia") localInsulin = LocalInsulin("PumpInsulin", tunedPeak, tunedDia) @@ -389,10 +389,10 @@ class AutotunePlugin @Inject constructor( val circadianTuned = JsonHelper.safeGetJSONObject(json, "tunedCircadianProfile", null)?.let { pureProfileFromJson(it, dateUtil) } ?: return tunedProfile = ATProfile(ProfileSealed.Pure(tuned), localInsulin, injector).also { atProfile -> - atProfile.profilename = tunedProfileName + atProfile.profileName = tunedProfileName atProfile.circadianProfile = ProfileSealed.Pure(circadianTuned) for (i in 0..23) { - atProfile.basalUntuned[i] = JsonHelper.safeGetInt(json, "missingDays_$i") + atProfile.basalUnTuned[i] = JsonHelper.safeGetInt(json, "missingDays_$i") } } result = JsonHelper.safeGetString(json, "result", "") diff --git a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/data/ATProfile.kt b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/data/ATProfile.kt index f8b139736a..e8861d37ef 100644 --- a/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/data/ATProfile.kt +++ b/plugins/aps/src/main/java/info/nightscout/plugins/general/autotune/data/ATProfile.kt @@ -10,13 +10,15 @@ import info.nightscout.interfaces.Config import info.nightscout.interfaces.GlucoseUnit import info.nightscout.interfaces.insulin.Insulin import info.nightscout.interfaces.plugin.ActivePlugin +import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.Profile import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.ProfileStore import info.nightscout.interfaces.profile.PureProfile import info.nightscout.interfaces.utils.Round import info.nightscout.rx.bus.RxBus +import info.nightscout.rx.logging.AAPSLogger +import info.nightscout.rx.logging.LTag import info.nightscout.shared.SafeParse import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP @@ -28,6 +30,7 @@ import org.json.JSONObject import java.text.DecimalFormat import java.util.TimeZone import javax.inject.Inject +import kotlin.math.min class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: HasAndroidInjector) { @@ -39,30 +42,31 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: @Inject lateinit var rxBus: RxBus @Inject lateinit var rh: ResourceHelper @Inject lateinit var instantiator: Instantiator + @Inject lateinit var aapsLogger: AAPSLogger var profile: ProfileSealed var circadianProfile: ProfileSealed - lateinit var pumpProfile: ProfileSealed - var profilename: String = "" + private lateinit var pumpProfile: ProfileSealed + var profileName: String = "" var basal = DoubleArray(24) - var basalUntuned = IntArray(24) + var basalUnTuned = IntArray(24) var ic = 0.0 var isf = 0.0 var dia = 0.0 var peak = 0 var isValid: Boolean = false var from: Long = 0 - var pumpProfileAvgISF = 0.0 - var pumpProfileAvgIC = 0.0 + private var pumpProfileAvgISF = 0.0 + private var pumpProfileAvgIC = 0.0 val icSize: Int get() = profile.getIcsValues().size val isfSize: Int get() = profile.getIsfsMgdlValues().size - val avgISF: Double - get() = if (profile.getIsfsMgdlValues().size == 1) profile.getIsfsMgdlValues().get(0).value else Round.roundTo(averageProfileValue(profile.getIsfsMgdlValues()), 0.01) - val avgIC: Double - get() = if (profile.getIcsValues().size == 1) profile.getIcsValues().get(0).value else Round.roundTo(averageProfileValue(profile.getIcsValues()), 0.01) + private val avgISF: Double + get() = if (profile.getIsfsMgdlValues().size == 1) profile.getIsfsMgdlValues()[0].value else Round.roundTo(averageProfileValue(profile.getIsfsMgdlValues()), 0.01) + private val avgIC: Double + get() = if (profile.getIcsValues().size == 1) profile.getIcsValues()[0].value else Round.roundTo(averageProfileValue(profile.getIcsValues()), 0.01) fun getBasal(timestamp: Long): Double = basal[MidnightUtils.secondsFromMidnight(timestamp) / 3600] @@ -94,12 +98,12 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: //Export json string with oref0 format used for autotune // Include min_5m_carbimpact, insulin type, single value for carb_ratio and isf - fun profiletoOrefJSON(): String { + fun profileToOrefJSON(): String { var jsonString = "" val json = JSONObject() val insulinInterface: Insulin = activePlugin.activeInsulin try { - json.put("name", profilename) + json.put("name", profileName) json.put("min_5m_carbimpact", sp.getDouble("openapsama_min_5m_carbimpact", 3.0)) json.put("dia", dia) if (insulinInterface.id === Insulin.InsulinType.OREF_ULTRA_RAPID_ACTING) json.put( @@ -110,32 +114,31 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: json.put("useCustomPeakTime", true) json.put("insulinPeakTime", 45) } else if (insulinInterface.id === Insulin.InsulinType.OREF_FREE_PEAK) { - val peaktime: Int = sp.getInt(rh.gs(info.nightscout.core.utils.R.string.key_insulin_oref_peak), 75) - json.put("curve", if (peaktime > 50) "rapid-acting" else "ultra-rapid") + val peakTime: Int = sp.getInt(rh.gs(info.nightscout.core.utils.R.string.key_insulin_oref_peak), 75) + json.put("curve", if (peakTime > 50) "rapid-acting" else "ultra-rapid") json.put("useCustomPeakTime", true) - json.put("insulinPeakTime", peaktime) + json.put("insulinPeakTime", peakTime) } val basals = JSONArray() for (h in 0..23) { - val secondfrommidnight = h * 60 * 60 - var time: String - time = DecimalFormat("00").format(h) + ":00:00" + val secondFromMidnight = h * 60 * 60 + val time: String = DecimalFormat("00").format(h) + ":00:00" basals.put( JSONObject() .put("start", time) .put("minutes", h * 60) .put( - "rate", profile.getBasalTimeFromMidnight(secondfrommidnight) + "rate", profile.getBasalTimeFromMidnight(secondFromMidnight) ) ) } json.put("basalprofile", basals) - val isfvalue = Round.roundTo(avgISF, 0.001) + val isfValue = Round.roundTo(avgISF, 0.001) json.put( "isfProfile", JSONObject().put( "sensitivities", - JSONArray().put(JSONObject().put("i", 0).put("start", "00:00:00").put("sensitivity", isfvalue).put("offset", 0).put("x", 0).put("endoffset", 1440)) + JSONArray().put(JSONObject().put("i", 0).put("start", "00:00:00").put("sensitivity", isfValue).put("offset", 0).put("x", 0).put("endoffset", 1440)) ) ) json.put("carb_ratio", avgIC) @@ -145,6 +148,7 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: json.put("timezone", TimeZone.getDefault().id) jsonString = json.toString(2).replace("\\/", "/") } catch (e: JSONException) { + aapsLogger.error(LTag.CORE, e.stackTraceToString()) } return jsonString @@ -163,6 +167,7 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: } json.put("basal", jsonArray(basal)) } catch (e: JSONException) { + aapsLogger.error(LTag.CORE, e.stackTraceToString()) } return pureProfileFromJson(json, dateUtil, profile.units.asText) } @@ -172,36 +177,37 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: val json = JSONObject() val store = JSONObject() val tunedProfile = if (circadian) circadianProfile else profile - if (profilename.isEmpty()) - profilename = rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name) + if (profileName.isEmpty()) + profileName = rh.gs(info.nightscout.core.ui.R.string.autotune_tunedprofile_name) try { - store.put(profilename, tunedProfile.toPureNsJson(dateUtil)) - json.put("defaultProfile", profilename) + store.put(profileName, tunedProfile.toPureNsJson(dateUtil)) + json.put("defaultProfile", profileName) json.put("store", store) json.put("startDate", dateUtil.toISOAsUTC(dateUtil.now())) profileStore = instantiator.provideProfileStore(json) } catch (e: JSONException) { + aapsLogger.error(LTag.CORE, e.stackTraceToString()) } return profileStore } - fun jsonArray(values: DoubleArray): JSONArray { + private fun jsonArray(values: DoubleArray): JSONArray { val json = JSONArray() for (h in 0..23) { - val secondfrommidnight = h * 60 * 60 + val secondFromMidnight = h * 60 * 60 val df = DecimalFormat("00") val time = df.format(h.toLong()) + ":00" json.put( JSONObject() .put("time", time) - .put("timeAsSeconds", secondfrommidnight) + .put("timeAsSeconds", secondFromMidnight) .put("value", values[h]) ) } return json } - fun jsonArray(value: Double) = + private fun jsonArray(value: Double): JSONArray = JSONArray().put( JSONObject() .put("time", "00:00") @@ -209,7 +215,7 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: .put("value", value) ) - fun jsonArray(values: List, multiplier: Double = 1.0): JSONArray { + private fun jsonArray(values: List, multiplier: Double = 1.0): JSONArray { val json = JSONArray() var elapsedHours = 0L values.forEach { @@ -249,7 +255,7 @@ class ATProfile(profile: Profile, var localInsulin: LocalInsulin, val injector: var minBasal = 1.0 for (h in 0..23) { basal[h] = Round.roundTo(profile.basalBlocks.blockValueBySeconds(T.hours(h.toLong()).secs().toInt(), 1.0, 0), 0.001) - minBasal = Math.min(minBasal, basal[h]) + minBasal = min(minBasal, basal[h]) } ic = avgIC isf = avgISF diff --git a/plugins/automation/src/main/res/values-af-rZA/strings.xml b/plugins/automation/src/main/res/values-af-rZA/strings.xml index 6071a92bd3..d2cba784db 100644 --- a/plugins/automation/src/main/res/values-af-rZA/strings.xml +++ b/plugins/automation/src/main/res/values-af-rZA/strings.xml @@ -87,4 +87,5 @@ Snellers: Vereistes: + diff --git a/plugins/automation/src/main/res/values-bg-rBG/strings.xml b/plugins/automation/src/main/res/values-bg-rBG/strings.xml index e6a790c349..2e8f09e316 100644 --- a/plugins/automation/src/main/res/values-bg-rBG/strings.xml +++ b/plugins/automation/src/main/res/values-bg-rBG/strings.xml @@ -117,4 +117,6 @@ П С Н + + Време е за болус!\nВключи болус съветника и направи изчисление отново. diff --git a/plugins/automation/src/main/res/values-ca-rES/strings.xml b/plugins/automation/src/main/res/values-ca-rES/strings.xml index da4005636f..9bc7028faa 100644 --- a/plugins/automation/src/main/res/values-ca-rES/strings.xml +++ b/plugins/automation/src/main/res/values-ca-rES/strings.xml @@ -117,4 +117,6 @@ Dv Ds Dg + + Hora d’aplicar bolus!\nExecuteu l\'assistent de bolus i torneu a fer els càlculs. diff --git a/plugins/automation/src/main/res/values-cs-rCZ/strings.xml b/plugins/automation/src/main/res/values-cs-rCZ/strings.xml index 42e3c7c566..3d2f3e84ab 100644 --- a/plugins/automation/src/main/res/values-cs-rCZ/strings.xml +++ b/plugins/automation/src/main/res/values-cs-rCZ/strings.xml @@ -126,4 +126,7 @@ So Ne + + Čas k jídlu!\nSpusťte Bolusovou kalkulačku a proveďte výpočet znovu. + Čas na bolus!\nSpusťte Bolusovou kalkulačku a proveďte výpočet znovu. diff --git a/plugins/automation/src/main/res/values-da-rDK/strings.xml b/plugins/automation/src/main/res/values-da-rDK/strings.xml index 5f965468d2..8dd3478e8c 100644 --- a/plugins/automation/src/main/res/values-da-rDK/strings.xml +++ b/plugins/automation/src/main/res/values-da-rDK/strings.xml @@ -126,4 +126,6 @@ Fr + + Tid til bolus!\nKør Bolus-guiden og lav beregningen igen. diff --git a/plugins/automation/src/main/res/values-de-rDE/strings.xml b/plugins/automation/src/main/res/values-de-rDE/strings.xml index 401e8fb630..d7468ab9bf 100644 --- a/plugins/automation/src/main/res/values-de-rDE/strings.xml +++ b/plugins/automation/src/main/res/values-de-rDE/strings.xml @@ -126,4 +126,6 @@ Fr Sa So + + Zeit für den nächsten Bolus!\nFühre den Bolus-Assistenten aus, um die Berechnung erneut durchzuführen. diff --git a/plugins/automation/src/main/res/values-el-rGR/strings.xml b/plugins/automation/src/main/res/values-el-rGR/strings.xml index 0a64d4244e..3639370d1a 100644 --- a/plugins/automation/src/main/res/values-el-rGR/strings.xml +++ b/plugins/automation/src/main/res/values-el-rGR/strings.xml @@ -88,4 +88,5 @@ Ενεργοποιήσεις: Προϋποθέσεις: + diff --git a/plugins/automation/src/main/res/values-es-rES/strings.xml b/plugins/automation/src/main/res/values-es-rES/strings.xml index 355310430c..0955fe90a1 100644 --- a/plugins/automation/src/main/res/values-es-rES/strings.xml +++ b/plugins/automation/src/main/res/values-es-rES/strings.xml @@ -126,4 +126,7 @@ V S D + + ¡Hora de comer!\nEjecuta el asistente de bolo y calcula de nuevo. + ¡Hora de comer!\nEjecutar el asistente de bolo y calcular de nuevo. diff --git a/plugins/automation/src/main/res/values-fr-rFR/strings.xml b/plugins/automation/src/main/res/values-fr-rFR/strings.xml index 3d4d01bafd..c0efca8739 100644 --- a/plugins/automation/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/automation/src/main/res/values-fr-rFR/strings.xml @@ -126,4 +126,7 @@ V S D + + Il est temps de manger !\nExécutez l\'assistant Bolus et refaites le calcul. + Il est temps de faire le bolus !\nExécutez l\'Assistant et faites de nouveau le calcul. diff --git a/plugins/automation/src/main/res/values-ga-rIE/strings.xml b/plugins/automation/src/main/res/values-ga-rIE/strings.xml index 7460b5a67a..64389c84ce 100644 --- a/plugins/automation/src/main/res/values-ga-rIE/strings.xml +++ b/plugins/automation/src/main/res/values-ga-rIE/strings.xml @@ -17,4 +17,5 @@ Riamh Gníomh: + diff --git a/plugins/automation/src/main/res/values-hr-rHR/strings.xml b/plugins/automation/src/main/res/values-hr-rHR/strings.xml index 8146812719..a9e556cff8 100644 --- a/plugins/automation/src/main/res/values-hr-rHR/strings.xml +++ b/plugins/automation/src/main/res/values-hr-rHR/strings.xml @@ -13,4 +13,6 @@ Pe Su Ne + + Vrijeme je za bolus!\nPokrenite čarobnjak za bolus i ponovite izračun. diff --git a/plugins/automation/src/main/res/values-hu-rHU/strings.xml b/plugins/automation/src/main/res/values-hu-rHU/strings.xml index 94dc40020d..54989ab1ed 100644 --- a/plugins/automation/src/main/res/values-hu-rHU/strings.xml +++ b/plugins/automation/src/main/res/values-hu-rHU/strings.xml @@ -26,4 +26,5 @@ Feladat neve SZERK + diff --git a/plugins/automation/src/main/res/values-it-rIT/strings.xml b/plugins/automation/src/main/res/values-it-rIT/strings.xml index 3a5f9103b5..996a86be31 100644 --- a/plugins/automation/src/main/res/values-it-rIT/strings.xml +++ b/plugins/automation/src/main/res/values-it-rIT/strings.xml @@ -126,4 +126,6 @@ V S D + + Tempo di fare un bolo!\nEsegui il calcolatore e fai di nuovi i calcoli. diff --git a/plugins/automation/src/main/res/values-iw-rIL/strings.xml b/plugins/automation/src/main/res/values-iw-rIL/strings.xml index 8f86752a1e..c91d3d325a 100644 --- a/plugins/automation/src/main/res/values-iw-rIL/strings.xml +++ b/plugins/automation/src/main/res/values-iw-rIL/strings.xml @@ -126,4 +126,6 @@ ו\' ש\' א\' + + זמן להזריק בולוס!\nהשתמשו במחשבון וחשבו מחדש. diff --git a/plugins/automation/src/main/res/values-ja-rJP/strings.xml b/plugins/automation/src/main/res/values-ja-rJP/strings.xml index 2a4513dffb..49a964a9e8 100644 --- a/plugins/automation/src/main/res/values-ja-rJP/strings.xml +++ b/plugins/automation/src/main/res/values-ja-rJP/strings.xml @@ -2,4 +2,5 @@ デルタ + diff --git a/plugins/automation/src/main/res/values-ko-rKR/strings.xml b/plugins/automation/src/main/res/values-ko-rKR/strings.xml index f4fe1d9b87..6ae81d9407 100644 --- a/plugins/automation/src/main/res/values-ko-rKR/strings.xml +++ b/plugins/automation/src/main/res/values-ko-rKR/strings.xml @@ -111,4 +111,5 @@ + diff --git a/plugins/automation/src/main/res/values-lt-rLT/strings.xml b/plugins/automation/src/main/res/values-lt-rLT/strings.xml index dc5742b296..4c9e4b76fd 100644 --- a/plugins/automation/src/main/res/values-lt-rLT/strings.xml +++ b/plugins/automation/src/main/res/values-lt-rLT/strings.xml @@ -119,4 +119,6 @@ Pn Š S + + Laikas bolusui!\nĮjunkite Skaičiuotuvą ir pakartokite skaičiavimus. diff --git a/plugins/automation/src/main/res/values-nl-rNL/strings.xml b/plugins/automation/src/main/res/values-nl-rNL/strings.xml index dba944f584..1b09437c7a 100644 --- a/plugins/automation/src/main/res/values-nl-rNL/strings.xml +++ b/plugins/automation/src/main/res/values-nl-rNL/strings.xml @@ -126,4 +126,6 @@ F S S + + Tijd om te bolussen!\nVoer de boluswizard uit en maak de berekening opnieuw. diff --git a/plugins/automation/src/main/res/values-no-rNO/strings.xml b/plugins/automation/src/main/res/values-no-rNO/strings.xml index c61bf347d3..07adfb90c3 100644 --- a/plugins/automation/src/main/res/values-no-rNO/strings.xml +++ b/plugins/automation/src/main/res/values-no-rNO/strings.xml @@ -126,4 +126,7 @@ F L S + + Nå må du spise!\nBruk bolus-veiviser og gjør beregning på nytt. + Tid for bolus!\nStart bolus-veiviser og gjør beregning på nytt. diff --git a/plugins/automation/src/main/res/values-pl-rPL/strings.xml b/plugins/automation/src/main/res/values-pl-rPL/strings.xml index b4060b648d..b2aa7f7531 100644 --- a/plugins/automation/src/main/res/values-pl-rPL/strings.xml +++ b/plugins/automation/src/main/res/values-pl-rPL/strings.xml @@ -122,4 +122,6 @@ P S N + + Czas na bolus!\nUruchom Kalkulator bolusa aby ponownie wykonać obliczenia. diff --git a/plugins/automation/src/main/res/values-pt-rBR/strings.xml b/plugins/automation/src/main/res/values-pt-rBR/strings.xml index 8e021ba8fc..43c664df79 100644 --- a/plugins/automation/src/main/res/values-pt-rBR/strings.xml +++ b/plugins/automation/src/main/res/values-pt-rBR/strings.xml @@ -126,4 +126,6 @@ 6a Sáb Dom + + Hora do bolus!\nAbra o assistente de bolus e faça o cálculo novamente. diff --git a/plugins/automation/src/main/res/values-pt-rPT/strings.xml b/plugins/automation/src/main/res/values-pt-rPT/strings.xml index f4771665f5..83970b1316 100644 --- a/plugins/automation/src/main/res/values-pt-rPT/strings.xml +++ b/plugins/automation/src/main/res/values-pt-rPT/strings.xml @@ -117,4 +117,6 @@ Se Sa D + + Hora de fazer o bólus!\nExecute o assistente de bólus e faça o cálculo novamente. diff --git a/plugins/automation/src/main/res/values-ro-rRO/strings.xml b/plugins/automation/src/main/res/values-ro-rRO/strings.xml index 2736a14a20..fc3fd75f29 100644 --- a/plugins/automation/src/main/res/values-ro-rRO/strings.xml +++ b/plugins/automation/src/main/res/values-ro-rRO/strings.xml @@ -119,4 +119,6 @@ V S D + + Timpul sa faci bolus!\nRuleaza Calculatorul de Bolus pentru a face calculele din nou. diff --git a/plugins/automation/src/main/res/values-ru-rRU/strings.xml b/plugins/automation/src/main/res/values-ru-rRU/strings.xml index 2362aa54e9..08f70cf702 100644 --- a/plugins/automation/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/automation/src/main/res/values-ru-rRU/strings.xml @@ -126,4 +126,7 @@ Пт Сб Вс + + Пора есть!\n Запустите помощник болюса снова для подсчета. + Пора дать болюс!\nЗапустите помощник болюса и повторите расчет. diff --git a/plugins/automation/src/main/res/values-sk-rSK/strings.xml b/plugins/automation/src/main/res/values-sk-rSK/strings.xml index 6ed3b36e83..bc2f95cded 100644 --- a/plugins/automation/src/main/res/values-sk-rSK/strings.xml +++ b/plugins/automation/src/main/res/values-sk-rSK/strings.xml @@ -126,4 +126,6 @@ Pi So Ne + + Čas na bolus!\nSpustite Bolusovú kalkulačku a urobte výpočet znova. diff --git a/plugins/automation/src/main/res/values-sr-rCS/strings.xml b/plugins/automation/src/main/res/values-sr-rCS/strings.xml index e6bafe046d..b73b1e1ef6 100644 --- a/plugins/automation/src/main/res/values-sr-rCS/strings.xml +++ b/plugins/automation/src/main/res/values-sr-rCS/strings.xml @@ -2,4 +2,5 @@ Delta + diff --git a/plugins/automation/src/main/res/values-sv-rSE/strings.xml b/plugins/automation/src/main/res/values-sv-rSE/strings.xml index 66e28d04e2..aa0e8d2e4b 100644 --- a/plugins/automation/src/main/res/values-sv-rSE/strings.xml +++ b/plugins/automation/src/main/res/values-sv-rSE/strings.xml @@ -117,4 +117,6 @@ F L S + + Dags för bolus!\nKör Bolusguiden och gör beräkningar igen. diff --git a/plugins/automation/src/main/res/values-tr-rTR/strings.xml b/plugins/automation/src/main/res/values-tr-rTR/strings.xml index d3994580c3..66d19eade8 100644 --- a/plugins/automation/src/main/res/values-tr-rTR/strings.xml +++ b/plugins/automation/src/main/res/values-tr-rTR/strings.xml @@ -126,4 +126,6 @@ Cum Cmt Paz + + Bolus zamanı!\nBolus sihirbazını çalıştırın ve yeniden hesaplama yapın. diff --git a/plugins/automation/src/main/res/values-zh-rCN/strings.xml b/plugins/automation/src/main/res/values-zh-rCN/strings.xml index 2ba9c3f206..80659e0799 100644 --- a/plugins/automation/src/main/res/values-zh-rCN/strings.xml +++ b/plugins/automation/src/main/res/values-zh-rCN/strings.xml @@ -125,4 +125,6 @@ 周五 周六 周日 + + 输注胰岛素时间到了!\n请运行大剂量向导,然后再次进行计算。 diff --git a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt index 7dfaa68fcb..c748fa957b 100644 --- a/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt +++ b/plugins/constraints/src/main/java/info/nightscout/plugins/constraints/safety/SafetyPlugin.kt @@ -1,12 +1,12 @@ package info.nightscout.plugins.constraints.safety import dagger.android.HasAndroidInjector -import info.nightscout.core.extensions.putDouble -import info.nightscout.core.extensions.putInt -import info.nightscout.core.extensions.putString -import info.nightscout.core.extensions.storeDouble -import info.nightscout.core.extensions.storeInt -import info.nightscout.core.extensions.storeString +import info.nightscout.core.utils.extensions.putDouble +import info.nightscout.core.utils.extensions.putInt +import info.nightscout.core.utils.extensions.putString +import info.nightscout.core.utils.extensions.storeDouble +import info.nightscout.core.utils.extensions.storeInt +import info.nightscout.core.utils.extensions.storeString import info.nightscout.interfaces.Config import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Constraints diff --git a/plugins/constraints/src/main/res/values-af-rZA/exam.xml b/plugins/constraints/src/main/res/values-af-rZA/exam.xml index 4a1657dcab..34e814725d 100644 --- a/plugins/constraints/src/main/res/values-af-rZA/exam.xml +++ b/plugins/constraints/src/main/res/values-af-rZA/exam.xml @@ -13,30 +13,9 @@ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me Wat moet gedoen word as CGM data raserig is? https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data - https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings \'n Google-rekening. \'n Github rekening. - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html \'n Slimhorlosie. - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html - Kyk al die korrekte antwoorde. - https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch - https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting - https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - Fiasp® - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin - Kyk al die korrekte antwoorde. - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u - https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html - https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u - https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#profile-switch - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy diff --git a/plugins/constraints/src/main/res/values-af-rZA/strings.xml b/plugins/constraints/src/main/res/values-af-rZA/strings.xml index c66f78b6b8..960ad5f64e 100644 --- a/plugins/constraints/src/main/res/values-af-rZA/strings.xml +++ b/plugins/constraints/src/main/res/values-af-rZA/strings.xml @@ -4,10 +4,26 @@ - ou weergawe - baie ou weergawe - Die weergawe is ongeldig. Lus afgeskakel! - Weergawe %1$s beskikbaar + + Beperk koolhidrate tot %1$d g agv %2$s + Pomp is nie tydelike basale bekwame + Geslote lus modus in voorkeure gedeaktiveer + Veranderende ontwikkelende weergawe. Geslote lus is gedeaktiveerd. + SMB is altyd na koolhidrate versper omdat aktiewe BG bron nie gevorderde filter ondersteun nie + SMB nie toegelaat in open lus modus + maks waarde in voorkeure + harde limiet + Behandelings veiligheid + + Nog nie voltooi nie + Tydsverloop + Maksimum IAB behoorlik gestel + BG beskikbaar vanaf geselekteerde bron + Lus geaktiveer + APS gekies + Geslote modus geaktiveer + OBJ + Onderrig program diff --git a/plugins/constraints/src/main/res/values-bg-rBG/strings.xml b/plugins/constraints/src/main/res/values-bg-rBG/strings.xml index 87f2d26078..55a4248b4d 100644 --- a/plugins/constraints/src/main/res/values-bg-rBG/strings.xml +++ b/plugins/constraints/src/main/res/values-bg-rBG/strings.xml @@ -2,18 +2,32 @@ - Смяна на времето след по-малко от 24ч - Смяна на времето след по-малко от 3 часа - минавам в отворен режим - стара версия - много стара версия - Прилагането изтече - Има нова версия от най-малко %1$d дни! Ще спре подаването на инсулин след %2$d дни, цикълът ще бъде изключен след %3$d дни - Използвате грешна версия. APS е изключен! - Има налично обновяване до версия %1$s - Рекалкулирани използвани данни - КЗ близо до:\n%1$s\n%2$s + + Ограничаване на въглехидрати до %1$d гр. поради %2$s + Помпата не поддържа временен базал + Затворения кръг е забранен в настройките + Използвате dev версия. Затворения кръг е недостъпен за Вас. + Затворен цикъл е недостъпен поради стартиран Удължен болус + SMB \"винаги включен\" и \"след въглехидрати\" е забранен, защото е активен източник на КЗ, който не поддържа необходимата филтрация + SMB не е позволен в режим Отворен кръг + макс. стойност в настройките + твърд лимит + Настройки на сигурността + + Все още не сме неприключили + Изминало време + Максимален IOB е зададен правилно + Има данни за КЗ от избрания източник + APS разрешен + Избран APS + APS - Затворен кръг е позволен + Цел + Разучаване на програмата + Искате ли да нулирате прогреса си? + Изчисти приключение + Изчисти стартираните diff --git a/plugins/constraints/src/main/res/values-ca-rES/exam.xml b/plugins/constraints/src/main/res/values-ca-rES/exam.xml index 5246dd2fa2..514d2315d1 100644 --- a/plugins/constraints/src/main/res/values-ca-rES/exam.xml +++ b/plugins/constraints/src/main/res/values-ca-rES/exam.xml @@ -55,7 +55,6 @@ Deixar l\'objectiu glucèmic com està. Esperar que la glucèmia baixi per sota del vostre objectiu temporal d\'hipoglucèmia i llavors prendre 15g de carbohidrats d\'acció ràpida. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Llaç desactivat/aturat Rebo insulina quan el llaç està desactivat/aturat? Sí, la insulina basal es continua lliurant. No, s\'atura el lliurament d\'insulina. @@ -99,8 +98,6 @@ Preguntant a la clínica on us porten la diabetis o a la vostra endocrinòloga. https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - Plugins d\'insulina Quina insulina s\'ha de fer servir amb el plugin Ultra-Rapid Oref? Fiasp® NovoRapid®/Novolog® @@ -113,7 +110,6 @@ L\'enregistrament d\'un canvi de cànula restableix la ràtio Autosens, deixant-lo de nou a un 100%. Algunes de les opcions de plugins es poden configurar segons rangs horaris que poden ser definits per l\'usuari. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Errors d\'entrada de carbohidrats Què cal fer si feu una entrada incorrecta de carbohidrats? Elimineu la entrada incorrecta a Tractaments i introduïu el valor correcte de carbohidrats. @@ -123,7 +119,6 @@ Què cal fer si rebeu menys insulina de la que suggereix l\'historial de la bomba, p.ex. degut a una oclusió, a una cànula que no funciona o un oblit de reconnexió de la bomba després d\'una dutxa? Eliminar dades d\'insulina del portal de cures Nightscout per eliminar-les de l\'historial de la bomba. Lliurar un bolus amb part de la insulina que falta utilitzant una jeringa/ploma o el menú d\'encebat. - Insulina \"a bord\" (IOB) El valor d\'IOB es veu afectat per les basals temporals lliurades. Una basal temporal alta no serà lliurada si la glucèmia està per sota de l\'objectiu. Un valor d\'IOB negatiu durant un període de temps important i en absència d\'exercici físic suggereix que el vostre perfil és massa \"fort\" i necessiteu menys insulina en la vostra configuració. diff --git a/plugins/constraints/src/main/res/values-ca-rES/strings.xml b/plugins/constraints/src/main/res/values-ca-rES/strings.xml index 624e14fdb0..e9bb0c21b8 100644 --- a/plugins/constraints/src/main/res/values-ca-rES/strings.xml +++ b/plugins/constraints/src/main/res/values-ca-rES/strings.xml @@ -2,19 +2,32 @@ - Canvi a horari d\'estiu en 24h o menys - Canvi a horari d\'estiu fa menys de 3h - Llaç tancat desactivat - versió antiga - versió molt antiga - Aplicació expirada - Nova versió disponible almenys %1$d dies! Retorn a LGS (Low Glucose Suspend = suspensió per glucèmia baixa) en %2$d dies, el llaç serà desactivat en %3$d dies - Hem detectat que esteu executant una versió no vàlida. Llaç desactivat! - Versió %1$s disponible - Versió: %1$s | Mida: %2$s - Dades recalculades utilitzades - Glucèmia massa semblant: \n%1$s\n%2$s + + Limitant carbs a %1$d g a causa de %2$s + La bomba no té la funcionalitat de basals temporals + Mode llaç tancat desactivat a la configuració + Executant versió de desenvolupament. Llaç tancat no disponible. + Llaç tancat desactivat degut a bolus estès actiu + Les funcions \"SMB sempre\" i \"SMB després de carbohidrats\" estan desactivades pq la font de glucèmia no fa filtrat avançat + SMB no permès en mode llaç obert + valor màxim a la configuració + límit estricte + Seguretat tractaments + + No finalitzat encara + Temps transcorregut + Màx IOB correctament configurada + Glucèmia disponible des de la font seleccionada + Llaç activat + APS seleccionat + Llaç tancat activat + OBJ + Programa d\'aprenentatge + Voleu reiniciar l\'objectiu? Podeu perdre el vostre progrés. + Cancel·lar finalització + Cancel·lar inici diff --git a/plugins/constraints/src/main/res/values-cs-rCZ/exam.xml b/plugins/constraints/src/main/res/values-cs-rCZ/exam.xml index f9a9292403..f0732757a8 100644 --- a/plugins/constraints/src/main/res/values-cs-rCZ/exam.xml +++ b/plugins/constraints/src/main/res/values-cs-rCZ/exam.xml @@ -59,7 +59,6 @@ Nechte svůj cíl glykémie beze změny. Počkejte, dokud glykémie neklesne pod Váš dočasný cíl hypoglykémie a pak snězte15 g rychlých sacharidů. https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Usage/temptarget.html#docasny-cil-pri-pohybove-aktivite - Zakázaná/pozastavená smyčka Dostávám inzulín, když je smyčka zakázána/pozastavena? Ano, bazální inzulín se dále dodává. Ne, podávání inzulínu je zastaveno. @@ -149,7 +148,6 @@ Nastavením profilu na 150 % dojde k prodloužení doby absorpce sacharidů Nastavením profilu na 150 % dojde ke zkrácení doby absorpce sacharidů Nastavení profilu na 150% neovlivní vypočtenou absorpci sacharidů - Aktivní inzulín (IOB) Hodnota IOB je ovlivněna vydanými dočasnými bazály. Vysoký dočasný bazál nebude spuštěn, pokud je Vaše glykémie nižší než cíl. Negativní IOB po značnou dobu bez cvičení naznačuje, že váš profil je příliš \"silný\" a ve vašem profilu je potřeba méně inzulínu. diff --git a/plugins/constraints/src/main/res/values-cs-rCZ/strings.xml b/plugins/constraints/src/main/res/values-cs-rCZ/strings.xml index 30758c945d..5356c4ed95 100644 --- a/plugins/constraints/src/main/res/values-cs-rCZ/strings.xml +++ b/plugins/constraints/src/main/res/values-cs-rCZ/strings.xml @@ -19,5 +19,35 @@ Použita přepočítaná data Glykémie je příliš blízko:\n%1$s\n%2$s přepočítáno - dvojité položky + zdvojené záznamy + Neměnná data. Pravděpodobně jsou neplatná + + Prodloužený bolus omezen na %1$.1f U z důvodu %2$s + Sacharidy omezeny na %1$d g: %2$s + Pumpa nepodporuje dočasné bazály + Uzavřená smyčka zakázána v nastavení + Běží DEV verze. Uzavřená smyčka je zakázána. + Uzavřená smyčka je zastavena kvůli běžícímu prodlouženému bolusu + \"SMB vždy\" a \"po jídle\" zakázáno protože zdroj glykémie nepodporuje rozšířené filtrování + SBM není povoleno v otevřené smyčce + maximální hodnota v nastavení + pevný limit + Bezpečnost zadání ošetřeni + + Hotovo, gratulujeme! + Nedokončeno + Čas + Maximální IOB nastaveno správně + Glykémie dostupné z vybraného zdroje + Služba synchronizace má oprávnění k zápisu + Smyčka povolena + APS vybráno + Uzavřená smyčka povolena + CÍLE + Výukový program + Chcete resetovat začátek cíle? Můžete přijít o svůj pokrok. + Další + Zpět + Vymazat dokončeno + Vymazat start diff --git a/plugins/constraints/src/main/res/values-da-rDK/exam.xml b/plugins/constraints/src/main/res/values-da-rDK/exam.xml index 80b7c1e5dd..4adb828d08 100644 --- a/plugins/constraints/src/main/res/values-da-rDK/exam.xml +++ b/plugins/constraints/src/main/res/values-da-rDK/exam.xml @@ -59,7 +59,6 @@ Lad dit blodsukker være uændret. Vent, til blodsukkeret falder under din midlertidige hypo-basal, og spis 15g hurtigt virkende kulhydrater. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Deaktiveret/Suspendéret Loop Modtager jeg insulin, når Loop er deaktiveret/suspenderet? Ja, basal insulin fortsætter med at blive levereret. Nej, levering af insulin er stoppet. @@ -109,7 +108,6 @@ https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ https://discord.gg/4fQUWHZ4Mw - Insulin Plugins Hvilken insulin skal du bruge sammen med Ultra-Rapid Oref-pluginnet? Fiasp® NovoRapid®/Novolog® @@ -149,7 +147,6 @@ Ved indstilling af profil til 150%, vil kulhydrater være længere tid om at absorberes Ved indstilling af profil til 150%, vil kulhydrater være kortere tid om at absorberes Ved indstilling af profil til 150%, påvirkes absorbering af beregnet kulhydrat ikke - Insulin om bord (IOB) IOB-værdi påvirkes af midlertidige basaler. Høj midlertidlig basal vil ikke blive givet, når dit blodsukker er under målet. Negative IOB i en længere periode uden motion tyder på, at din profil er for stærk, og at der er behov for mindre insulin i dine indstillinger. diff --git a/plugins/constraints/src/main/res/values-da-rDK/strings.xml b/plugins/constraints/src/main/res/values-da-rDK/strings.xml index 10d59aee65..05ae83b335 100644 --- a/plugins/constraints/src/main/res/values-da-rDK/strings.xml +++ b/plugins/constraints/src/main/res/values-da-rDK/strings.xml @@ -2,21 +2,32 @@ - Sommertids ændring inden de næste 24 timer eller mindre - Sommertids ændring mindre end 3 timer siden - Lukket loop deaktiveret - gammel version - meget gammel version - Applikationen er udløbet - Ny version har været tilgængelig i mindst %1$d dage! Falder til LGS efter %2$d dage, loop vil blive deaktiveret efter %3$d dage - Vi har opdaget, at du kører en ugyldig version. Loop deaktiveret! - Version %1$s tilgængelig - Version %1$s udløber den %2$s - Genberegnede data anvendt - BG for tæt:\n%1$s\n%2$s - genberegnet - dobbelt postering + + Begrænser kulhydrater til %1$d g på grund af %2$s + Pumpe er ikke egnet til midlertidig basal + Lukket loop tilstand deaktiveret i præferencer + Kører dev version. Lukket loop er deaktiveret. + Lukket loop deaktiveret på grund af kørsel af forlænget bolus + SMB altid og efter kulhydrater deaktiveret, fordi den aktive BS kilde ikke understøtter avanceret filtrering + SMB er ikke tilladt i åben loop mode + max værdi i præferencer + hård grænse + Behandlings sikkerhed + + Ikke afsluttet endnu + Tid forløbet + Maksimal IOB sat korrekt + BS tilgængelig fra valgte kilde + Loop aktiveret + APS valgt + Lukket tilstand aktiveret + OBJ + Oplæringsprogram + Vil du nulstille objektiv start? Du kan miste dine fremskridt. + Ryd færdigt + Ryd startet diff --git a/plugins/constraints/src/main/res/values-de-rDE/exam.xml b/plugins/constraints/src/main/res/values-de-rDE/exam.xml index a2a18e2baa..670ac4c7f2 100644 --- a/plugins/constraints/src/main/res/values-de-rDE/exam.xml +++ b/plugins/constraints/src/main/res/values-de-rDE/exam.xml @@ -20,6 +20,8 @@ Nichts, da kein Insulin abgegeben wird, wenn die Pumpe physisch getrennt ist. Unterbricht die Insulinzufuhr nicht, wenn die Pumpe physikalisch verbunden bleibt. https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Getting-Started/FAQ.html#andere-einstellungen + AAPS-Einstellungen + AAPS-Einstellungen Welches ist die empfohlene Vorgehensweise, um ein Backup Deiner Einstellungen zu erstellen? Du brauchst Deine Einstellungen nicht zu exportieren, sofern Du Dir diese notierst. Exportiere die Einstellungen nach Abschluss eines Objectives (Ziels). @@ -51,7 +53,6 @@ Lasse Dein Blutzuckerziel unverändert. Warte, bis die Blutglukose unter das temporäre Hypoziel abfällt und esse dann 15 g schnell wirkende Kohlenhydrate. https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Usage/temptarget.html#aktivitaten-temp-target - Deaktiviere/Pausiere den Loop Bekomme ich Insulin, wenn der Loop deaktiviert/pausiert ist? Ja, Basalinsulin wird weiter abgegeben. Nein, die Insulinabgabe ist gestoppt. @@ -79,8 +80,10 @@ Voraussetzungen Überprüfte und belastbare Profileinstellungen (ISF, I:C Verhältnis, Basalraten, DIA etc.). Ein kompatibles Android-Gerät (z.B. Handy, Android-Uhr oder Tablet). + AAPS benötigt eine Internetverbindung, um im Closed Loop laufen zu können. Ein unterstütztes CGM und eine passende App, um Blutzuckerwerte auf dem Gerät zu erhalten. https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Module/module.html + Aktualisiere AAPS Kreuze alle richtigen Antworten an. Du musst Git auf Deinem Computer installiert und konfiguriert haben. Du solltest den Speicherort des Keystores speichern und immer den gleichen Signaturschlüssel für Updates verwenden wie für die vorherige Installation. @@ -88,11 +91,11 @@ Wenn Du Schwierigkeiten beim Erstellen der apk hast, kannst Du eine apk installieren, die von einem Freund erstellt wurde. https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Installing-AndroidAPS/Update-to-new-version.html Problembehandlung + Wo können Sie nach Hilfe bei AAPS suchen? Du solltest Deine Diabetesklinik / Deinen Diabetologen fragen. https://androidaps.readthedocs.io/en/latest/CROWDIN/de/Installing-AndroidAPS/Update-to-new-version.html#problembehandlung https://www.facebook.com/groups/loopedDE/ https://discord.gg/4fQUWHZ4Mw - Insulin-Plugins Welches Insulin kann mit dem Ultra-Rapid-Oref-Plugin verwendet werden? Fiasp® NovoRapid®/Novolog® @@ -128,7 +131,6 @@ Die Einstellung des Profils auf 150% verlängert die Zeit für Kohlenhydrataufnahme Die Einstellung des Profils auf 150% verkürzt die Zeit für Kohlenhydrataufnahme Die Einstellung des Profils auf 150% verändert die Zeit für die Kohlenhydrataufnahme nicht - Aktives Insulin (IOB) IOB wird von den abgegebenen temporären Basalraten beeinflusst. Eine hohe temporäre Basalrate wird nicht abgegeben, wenn der BZ unterhalb des Zielwerts liegt. Ein negativer IOB über einen längeren Zeitraum bei fehlender Bewegung deutet darauf hin, dass Dein Profil zu stark ist und weniger Insulin in Deinen Einstellungen benötigt wird. diff --git a/plugins/constraints/src/main/res/values-de-rDE/strings.xml b/plugins/constraints/src/main/res/values-de-rDE/strings.xml index b7796ca7ed..871093f4f9 100644 --- a/plugins/constraints/src/main/res/values-de-rDE/strings.xml +++ b/plugins/constraints/src/main/res/values-de-rDE/strings.xml @@ -2,21 +2,31 @@ - Zeitumstellung in weniger als 24 Stunden - Zeitumstellung vor weniger als 3 Stunden - Closed Loop deaktiviert - Vorherige Version - sehr alte Version - Anwendung abgelaufen - Neue Version seit mindestens %1$d Tagen verfügbar! Rückfall zur sensorunterstützten Pumpentherapie nach %2$d Tagen, Loop wird nach %3$d Tagen deaktiviert. - Wir haben festgestellt, dass Du eine ungültige Version verwendest. Loop deaktiviert! - Version %1$s ist verfügbar. - Version %1$s läuft am %2$s ab - Verwendete Daten neu berechnet - BZ zu nah:\n%1$s\n%2$s - neu berechnet - doppelte Einträge + + Begrenze Kohlenhydrate auf %1$d g wegen %2$s + Pumpe verfügt nicht über temporäre Basalraten + Closed-Loop-Modus in den Einstellungen deaktiviert + Entwickler-Version, Closed Loop ist nicht verfügbar. + Closed Loop wegen Verzögerungsbolus unterbrochen + SMB wird immer und nach Kohlenhydraten deaktiviert, weil die aktive BZ-Quelle keine geeignete Filterung der Werte unterstützt. + SMB sind im Open Loop Modus nicht erlaubt + Max. Wert in den Einstellungen + festem Grenzwert + Sicherheitseinstellungen der Behandlungen + + Verstrichene Zeit + Maximales IOB richtig gesetzt + BZ verfügbar von gewählter Quelle + Loop aktiviert + APS ausgewählt + Closed mode aktiviert + ZIEL + Das Programm kennenlernen + Möchtest Du den Start der Ziele zurücksetzen? Du verlierst Deine Fortschritte. + Ziel erneut öffnen + Ziel neu starten diff --git a/plugins/constraints/src/main/res/values-el-rGR/exam.xml b/plugins/constraints/src/main/res/values-el-rGR/exam.xml index fe556808fa..fdce573d26 100644 --- a/plugins/constraints/src/main/res/values-el-rGR/exam.xml +++ b/plugins/constraints/src/main/res/values-el-rGR/exam.xml @@ -2,7 +2,6 @@ Ποια είναι η αλήθεια για το DIA; https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin - Υπογλυκαιμικός Ρυθμός-Στόχος https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html Ποιο προφίλ μπορεί να χρησιμοποιηθεί και να διαμορφωθεί χωρίς σύνδεση; Θέμα: Προφίλ Εκτός Σύνδεσης @@ -14,7 +13,6 @@ https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me Τι πρέπει να κάνετε αν τα δεδομένα του CGM έχουν θόρυβο; https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data - https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target Λαμβάνω ινσουλίνη όταν το κύκλωμα είναι απενεργοποιημένο/αναστολή; Ναι, ο βασικός ρυθμός συνεχίζει να χορηγείται. @@ -29,22 +27,15 @@ https://androidaps.readthedocs.io/en/latest/EN/Module/module.html Ένα Smartwatch. Ένα Υποστηριζόμενο CGM. - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html - Ελέγξτε όλες τις σωστές απαντήσεις. Ποτέ μην αναβαθμίζετε εάν το σύστημα λειτουργεί καλά. https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch - Αντιμετώπιση προβλημάτων https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw Fiasp® Humalog® https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin - Ελέγξτε όλες τις σωστές απαντήσεις. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Τι πρέπει να κάνετε αν γίνει μια λανθασμένη εισαγωγή υδατανθράκων; - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u e-carbs https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html @@ -54,8 +45,6 @@ Αν έχετε 0 COB Ενεργούς Υδατ., αλλάζοντας την αναλογία IC θα οδηγήσει σε μια διαφορετική ποσότητα ινσουλίνης για να διορθωθεί μια συγκεκριμένη τιμή BG. https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#profile-switch - Ξεκινήστε μία αλλαγή προφίλ με χρονική μετατόπιση 2 - Ξεκινήστε μία αλλαγή προφίλ με χρονική μετατόπιση -2 https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html?highlight=profile%20switch#timeshift https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy Πού θα πάτε για βοήθεια με Βασικό ρυθμό κτλ. diff --git a/plugins/constraints/src/main/res/values-el-rGR/strings.xml b/plugins/constraints/src/main/res/values-el-rGR/strings.xml index 5c05d758c6..9478ce1b3f 100644 --- a/plugins/constraints/src/main/res/values-el-rGR/strings.xml +++ b/plugins/constraints/src/main/res/values-el-rGR/strings.xml @@ -4,10 +4,26 @@ - παλιά έκδοση - πολύ παλιά έκδοση - Διαπιστώσαμε ότι εκτελείτε μη έγκυρη έκδοση. Κύκλωμα απενεργοποιήθηκε! - Έκδοση %1$s διαθέσιμη + + Περιορίζονται οι υδατάνθρακες σε %1$d g λόγω %2$s + Η αντλία δεν υποστηρίζει προσωρινό βασικό ρυθμό + Το κλειστό κύκλωμα είναι απενεργοποιημένο στις Επιλογές + Εκτελείται έκδοση Dev. Το κλειστό κύκλωμα είναι απενεργοποιημένο. + Το SMB πάντα και μετά το γεύμα απενεργοποιείται επειδή η ενεργή πηγή BG δεν υποστηρίζει προηγμένο φιλτράρισμα + To SMB δεν επιτρέπεται σε λειτουργία ανοιχτού κυκλώματος + μέγιστη τιμή στις Επιλογές + σταθερό όριο + Ασφάλεια Θεραπειών + + Δεν ολοκληρώθηκε ακόμη + Ο χρόνος που πέρασε + Το μέγιστο IOB έχει ρυθμιστεί σωστά + BG διαθέσιμη από επιλεγμένη πηγή + Κύκλωμα ενεργοποιημένο + Επιλέχθηκε APS + Ενεργοποιήθηκε η κλειστή λειτουργία + ΣΤΟΧΟΙ + Πρόγραμμα εκμάθησης diff --git a/plugins/constraints/src/main/res/values-es-rES/exam.xml b/plugins/constraints/src/main/res/values-es-rES/exam.xml index 5ef973f368..22ddaba8ce 100644 --- a/plugins/constraints/src/main/res/values-es-rES/exam.xml +++ b/plugins/constraints/src/main/res/values-es-rES/exam.xml @@ -1,146 +1,68 @@ - ¿Qué es cierto acerca de DIA? - Duración de la acción de insulina (DIA) - Debes establecer el valor de DIA en tu perfil. - El valor mínimo permitido es 5 horas. - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin - Si estás satisfecho con el valor de DIA que utilizaste en tu bomba antes de utilizar AAPS y te funcionó bien, no hay necesidad de cambarlo cuando empieces a cerrar el lazo. - Deberías determinar por ti mismo el valor apropiado para DIA. - Objetivo temporal ante Hipoglucemia - ¿Cuál es la razón principal para establecer un objetivo temporal por hipoglucemia? - Para corregir hipoglucemias causadas por ajustes incorrectos de la tasa basal. - Para evitar que AAPS corrija de forma excesiva ante un aumento rápido de la glucosa por tomar carbohidratos rápidos para recuperarse de una hipoglucemia. - Para corregir una hipoglucemia que sucedió como resultando del ejercicio. - Para evitar que la glucosa sanguínea continue bajando si ya hay una tasa basal temporal igual a 0% en funcionamiento. - https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html - ¿Qué perfil puede ser usado y configurado estando desconectado? - Tema: Perfil desconectado - El perfil que proviene de Nightscout (NS) puede ser utilizado, pero no configurado. - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile - Razones para aplicar \"Desconectar bomba\" en AAPS - ¿Qué se debe hacer al desconectar la bomba? - Esto es innecesario, ya que no se entregará insulina si la bomba está físicamente desconectada. - Evita que AAPS tenga en cuenta la insulina que no se administró cuando la bomba estaba físicamente desconectada - Si la bomba permanece conectada, no se detendrá el suministro de insulina. - Pasará AAPS a modo de lazo abierto + ¿Qué es cierto acerca de DAI? + Duración de la acción de insulina (DAI) + Debes establecer el valor de DAI en tu perfil. + El valor mínimo permitido es de 5 horas. + Si estás satisfecho con el valor de DAI que utilizas en tu bomba antes de utilizar AAPS y te funcionó bien, no hay necesidad de cambiarlo cuando empieces a usar el bucle cerrado. + Deberás determinar por ti mismo el valor apropiado para DAI. + Evita que AAPS considere la insulina que no se suministró cuando la bomba estaba físicamente desconectada + Se activará el modo de bucle abierto en AAPS. https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings - Ajustes de AAPS - Ajustes de AAPS - ¿Cuáles son las mejores prácticas para hacer copias de seguridad de sus configuraciones? - No necesita exportar sus configuraciones siempre que haga una nota de ellos. - Exporta tu configuración después de completar un objetivo. - Exportar la configuración después de cambiar cualquiera de sus ajustes. - Exportar la configuración una vez finalizada la configuración inicial y haber establecido sus preferencias. - Exportar la configuración localmente usando el menú de mantenimiento. - El archivo de configuración se encuentra en la carpeta Almacenamiento/AAPS/preferencias en el teléfono. - Copie el archivo de preferencias a una ubicación segura fuera de su teléfono (p.e. mediante el uso del alamacenamiento en la nube, conectándose con un cable a una computadora, correo electrónico, etc.) - Si su teléfono está dañado o perdido, hay formas fáciles de recuperar remotamente su configuración sin hacer una copia de seguridad. - https://androidaps.readthedocs.io/en/latest/EN/Usage/ExportImportSettings.html - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me - Lecturas CGM ruidosas - ¿Qué se debe hacer si los datos de CGM tienen ruido? - No hacer nada: AAPS se ocupará de ello. - Deshabilita el lazo cerrado para evitar posibles sobredosis o subdosis. - Sustituya los sensores con valores ruidosos o inexactos. - Comprueba que tu aplicación del CGM proporciona datos suavizados. - https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data - Ejercicio y perfiles - ¿Cómo puede usar perfiles para ayudar mejor al sistema a hacer frente al ejercicio aeróbico? - Haga un cambio de perfil a menos de 100%. - Haga un cambio de perfil a más de 100%. - Dejar el perfil configurado al 100%. - Suspender el lazo - https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Ejercicios y objetivos temporales - ¿Cómo se puede usar objetivos temporales para ayudar mejor al sistema a hacer frente al ejercicio aeróbico? - Establece un objetivo de glucosa en la sangre actividad que comienza un tiempo adecuado antes de comenzar el ejercicio. - Establece un objetivo de glucosa en la sangre actividad después de finalizar el ejercicio. - Deja tu objetivo de glucosa sanguíneo sin cambios. - Espere hasta que la glucosa en sangre caiga por debajo de su objetivo de hipo temp y luego coma 15 g de hidratos de carbono de actividad rápida. - https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Desactiva/suspende el lazo - ¿Recibo insulina cuando el lazo está desactivado/suspendido? - Sí, la insulina basal sigue siendo entregada. - No, la administración de la insulina está detenida. - Pruebas basales, ISF, e I:C - ¿Cuándo se deben validar estos valores? - Antes de empezar el lazo - Cuando se tienen valores de glucosa altos o bajos frecuentemente. - Al menos una vez a la semana. - Una vez fijados y validados, estos valores no debrían cambiar a lo largo del tiempo. - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings - Requisitos previos - ¿Qué es esencial para configurar y utilizar AAPS? - Información de perfil validada (Basal, IC, ISF, DIA). - Un ordenador con Android Studio instalado y configurado. - Un teléfono compatible. - Una bomba de insulina compatible, si planeas usar el sistema en modo \"lazo cerrado\". - Nightscout, para tener un registro de los datos y revisar los parámetros de configuración. - Una cuenta de Tidepool. - Una cuenta de Google. - Una cuenta de Github. - Experiencia programando o editando código. - Una bomba MiniMed 670G. - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html - Un Smartwatch. - Un MCG soportado. - Requisitos previos - ¿Qué es esencial para configurar y utilizar AAPS? - Parámetros validados para poder configurar un perfil (ISF, I:C ratio, perfil basal, DIA etc.). - Un dispositivo Android compatible (e.j. un móvil, un smartwatch Android compatible o una tablet). - AAPS requiere una conexión a Internet para funcionar en modo lazo cerrado. - Un medidor continuo de glucosa (MCG) y una aplicación capaz de recibir los valores proporcionados por el medidor en el móvil o tablet. - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html - Actualizando AAPS - Compruebe todas las respuestas correctas. - Es necesario tener Git instalado y configurado en el ordenador. - Cuando esté disponible una versión más reciente de AAPS, las funciones de las versiones anteriores pueden ser limitadas de forma remota después de una fecha determinada. - Se debe guardar en un lugar seguro la \"keystore\" que se ha empleado y usar la misma\"key\" para futuras actulizaciones. - Nunca actualice si el sistema está funcionando bien. - Si tienes problemas construyendo la aplicación (. apk), puedes instalar el mismo archivo. apk compilado por un amigo. - https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch - Solución de problemas - ¿Dónde puedes buscar ayuda con AAPS? - Puede solicitar asesoramiento en el grupo de usuarios de AAPS en Facebook. - Deberías leer (y volver a leer) la documentación de AAPS. - Puedes solicitar asesoramiento y registrar problemas técnicos o indidencias en el grupo de Discord de AAPS. - Debes preguntar a tu endocrino o educador diabetológico. - https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting - https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - Plugins de insulina - ¿Qué insulina debes usar con el plugin Ultra-Rapid Oref? - Fiasp® - NovoRapid®/Novolog® - Humalog® - Actrapid®/Humalin R®/\"insulina humana estándar\". - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin - Plugins de sensibilidad - Compruebe todas las respuestas correctas. - Los plugins de sensibilidad permiten a AAPS ajustarse para cambios temporales o de corta duración en la sensibilidad a la insulina (por ejemplo, cambios hormonales o problemas con la absorción en el sitio de infusión). - Los plugins de sensibilidad sugieren al usuario cambios en la cantidad de insulina basal a suministrar, en el factor de sensibiliad a la insulina (ISF) y en el ratio I:C y pueden ser incorporados al perfil definido. - Registrar el cámbio de cánula reseteará Autosens, dejándolo de nuevo al 100%. - Algunas de las opciones del plugin tienen rangos de tiempo configurables que pueden ser definidos por el usuario. - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/es/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens - Error de entrada de Carbohidratos - ¿Qué deberías hacer si has hecho una entrada incorrecta de carbohidratos? - Elimina la entrada incorrecta en los tratamientos e introduce el valor correcto de carbohidratos. - Bolo con insulina usando el menú de llenado de la infusión. - No hacer nada - AAPS realizará los ajustes apropiados. - Bolo con insulina usando el botón de Insulina (bolus) en página general. - Errores de entrega/entrada de insulina - ¿Qué debes hacer si recibiste menos insulina de la que sugiere la historia de la bomba p.ej. debido a una oclusión, una cánula fallida o olvidarse de reponer la bomba después de una ducha? - Elimina los datos de insulina del portal de Nightscout Careportal para eliminarlos del historial de la bomba. - Comparar valores en AAPS con el historial de la bomba (si la bomba lo soporta). - Bolo una proporción de la insulina calculada “perdida” por jeringa/pluma o usando menú de llenado. - No hacer nada y permite que AAPS corrija cualquier resultado de nivel alto de glucosa en sangre. - Carbohidratos activos (COB) - ¿Cómo afecta el cambio del valor ISF al cálculo de COB? - Incrementar el ISF hará que los carbohidratos se absorban más lentamente - Incrementar el ISF hará que los carbohidratos se absorban más rápidamente - Incrementar el ISF no afectará la absorción calculada de carbohidratos + No necesita exportar sus configuraciones siempre que haga las tenga anotadas. + Exportar tu configuración después de completar un objetivo. + Exportar las configuraciones después de cambiar cualquiera de sus ajustes. + Exportar las configuraciones una vez finalizada la configuración inicial y haber establecido sus preferencias. + Copie el archivo de preferencias a una ubicación segura fuera de su teléfono (p.e. mediante el uso del almacenamiento en la nube, conectando su teléfono con un cable a una computadora, correo electrónico, etc.) + Si su teléfono es dañado o perdido, hay formas fáciles de recuperar remotamente su configuración sin hacer una copia de seguridad. + Lecturas CGM con mucha variabilidad + ¿Qué se debe hacer si los datos de CGM tienen mucha variabilidad? + Deshabilitar el bucle cerrado para evitar posibles sobredosis o subdosis. + Sustituya el sensor con valores muy variables o inexactos. + ¿Cómo puede usar los perfiles para mejorar el sistema durante el ejercicio aeróbico? + Cambie el perfil por un valor menor a 100%. + Cambie el perfil por un valor mayor a 100%. + Suspender el bucle. + ¿Cómo se puede usar el objetivo temporal de glucosa para ayudar al sistema durante los ejercicios aeróbicos? + Establezca el objetivo de tipo actividad antes de comenzar el ejercicio, considerando un tiempo razonable antes de la actividad. + Establezca un objetivo de tipo actividad después de finalizar el ejercicio. + Deja tu objetivo de glucosa sin cambios. + Espere hasta que los valores de glucosa se encuentren por debajo del valor definido en el objetivo de tipo hipoglicemia. Luego consuma 15 g de carbohidratos de rápida absorción. + ¿Puedo recibir insulina cuando el bucle está desactivado/suspendido? + Sí, la insulina basal sigue siendo suministrada. + No, la administración de la insulina se detiene. + Pruebas para basales, I:C y FSI + Antes de empezar cualquier bucle. + Cuando los valores de glucosa son muy altos o bajos de manera frecuente. + Una vez establecidos y validados, estos valores no deberían cambiar a lo largo del tiempo. + Información de perfil previamente validada (Basal, IC, FSI, DAI). + Una computadora con Android Studio instalado y configurado. + Una bomba de insulina compatible, si planeas usar el sistema en modo bucle cerrado. + AAPS requiere una conexión a Internet para funcionar con el modo bucle cerrado. + Seleccione todas las respuestas correctas. + Es necesario tener Git instalado y configurado en la computadora. + Cuando esté disponible una versión más reciente de AAPS, las funciones de las versiones anteriores pueden ser limitadas de forma remota después de una fecha especifica. + Se debe guardar en un lugar seguro de su computadora la \"keystore\" (archivo.jks) que se ha empleado previamente y usar la misma \"keystore\" para futuras actualizaciones. + Nunca se debe actualizar AAPS si el sistema está funcionando bien. + Puedes solicitar asesoramiento y registrar problemas técnicos o incidencias en el grupo de Discord de AAPS. + Debes preguntar a tu endocrinólogo o educador en diabetes. + Seleccione todas las respuestas correctas. + Los plugins de sensibilidad sugieren al usuario cambios en la cantidad de insulina basal a suministrar, en el factor de sensibilidad a la insulina (ISF) y en el ratio I:C y pueden ser incorporados al perfil definido. + Registrar el cámbio de cánula reinicia Autosens, volviendo de nuevo al 100%. + Error de ingreso de Carbohidratos + ¿Qué deberías hacer si has cometido un error al ingresar carbohidratos? + Elimina la entrada incorrecta en pestaña de tratamientos e introduce el valor correcto. + Darse un bolo desde el menú de llenado de la infusión. + No hacer nada - AAPS realizará los ajustes necesarios. + Darse un bolo usando el botón de Insulina (bolus) en página general. + Elimina los valores de insulina del portal de Nightscout o Careportal para eliminarlos del historial de la bomba. + Comparar valores en AAPS con el historial de la bomba (si la bomba los registra). + Bolo una proporción de la insulina calculada “perdida” por jeringa/pluma o usando menú de Insulina. + No hacer nada y permite que AAPS corrija cualquier resultado de nivel alto de glucosa. + ¿Cómo afecta el cambio del valor FSI al cálculo de COB? + Incrementar el FSI hará que los carbohidratos se absorban más lentamente + Incrementar el FSI hará que los carbohidratos se absorban más rápidamente + Incrementar el FSI no afectará la absorción calculada de carbohidratos ¿Cómo afecta cambiar los valores de IC a los cálculos de COB? Incrementar el IC hará que los carbohidratos se absorban más lentamente Incrementar el IC hará que los carbohidratos se absorban más rápidamente @@ -149,7 +71,6 @@ Establecer el perfil a 150% hará que los carbohidratos se absorban más lentamente Establecer el perfil a 150% hará que los carbohidratos se absorban más rápidamente Establecer el perfil a 150% no afectará la absorción calculada de carbohidratos - Insulina a bordo (IOB) El valor del IOB se ve afectado por las bases temporales ejecutadas. No se dará alta tasa basal temporal cuando su nivel de azúcar en sangre esté por debajo del objetivo. El IOB negativo durante un período sustancial en ausencia de ejercicio sugiere que tu perfil es demasiado fuerte y que se necesita menos insulina en tus ajustes. diff --git a/plugins/constraints/src/main/res/values-es-rES/strings.xml b/plugins/constraints/src/main/res/values-es-rES/strings.xml index d357cb7287..2a9a98586f 100644 --- a/plugins/constraints/src/main/res/values-es-rES/strings.xml +++ b/plugins/constraints/src/main/res/values-es-rES/strings.xml @@ -5,7 +5,7 @@ Cambio al horario de verano en menos de 24 horas Cambio al horario de verano hace menos de 3 horas - Lazo cerrado deshabilitado - Debe liberar al menos %1$d MB de almacenamiento interno. ¡Loop se encuentra desactivado! + Debe liberar al menos %1$d MB de almacenamiento interno. ¡El lazo se encuentra desactivado! versión antigua versión muy antigua @@ -20,4 +20,34 @@ Datos de glucosa demasiado cercanos:\n%1$s\n%2$s recalculado entradas dobles + Datos planos. Considerados erróneos + + Limitando el bolo extendido a %1$.1f U debido a %2$s + Limitando carbohidratos a %1$d g debido a %2$s + La bomba no tiene capacidad de basal temporal + Lazo cerrado deshabilitado en preferencias + Ejecutando la versión dev. Lazo cerrado no disponible. + Lazo cerrado deshabilitado debido a la ejecución de un bolo extendido + SMB siempre y después de carbohidratos desactivados porque la fuente activa de BG no soporta filtrado avanzado + SMB no permitido en modo de lazo abierto + valor máximo en preferencias + límite estricto + Seguridad de tratamientos + + ¡Completado, bien hecho! + No completado + Tiempo agotado + Máximo IOB ajustado correctamente + Glucosa disponible desde la fuente seleccionada + El servicio de sincronización tiene permiso de escritura + Lazo activado + APS seleccionado + Lazo cerrado activado + OBJ + Programa de aprendizaje + ¿Desea reiniciar el objetivo? Puedes perder tu progreso. + Siguiente + Anterior + Limpieza finalizada + Limpieza iniciada diff --git a/plugins/constraints/src/main/res/values-fr-rFR/exam.xml b/plugins/constraints/src/main/res/values-fr-rFR/exam.xml index c865261ea0..60e78065a4 100644 --- a/plugins/constraints/src/main/res/values-fr-rFR/exam.xml +++ b/plugins/constraints/src/main/res/values-fr-rFR/exam.xml @@ -59,7 +59,6 @@ Laissez votre cible de glycémie inchangée. Attendez que la glycémie tombe en dessous de votre cible temporaire d\'hypo, puis mangez 15 g de glucides à action rapide. https://androidaps.readthedocs.io/en/latest/CROWDIN/fr/Usage/temptarget.html#activity-temp-target - Boucle désactivée/suspendue Est-ce que je reçois de l\'insuline lorsque la boucle est désactivée / suspendue ? Oui, l\'insuline basale continue à être délivrée. Non, l\'injection d\'insuline est arrêtée. @@ -149,7 +148,6 @@ Définir le profil à 150% rendra l\'absorption des glucides plus longue Définir le profil à 150% réduira le temps d\'absorption des glucides Définir le profil à 150% n\'impactera pas le calcul de l\'absorption des glucides - Insuline Active (IA) La valeur de l\'IA est impactée par les débits de basal temporaires émis. Une basale temp haute ne sera pas donnée quand votre glycémie est en dessous de la cible. Une IA négative pendant une période significative en l\'absence d\'exercice indique que votre profil est trop fort et qu\'il faut moins d\'insuline dans vos paramètres. diff --git a/plugins/constraints/src/main/res/values-fr-rFR/strings.xml b/plugins/constraints/src/main/res/values-fr-rFR/strings.xml index aa028b63ec..668de616e0 100644 --- a/plugins/constraints/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/constraints/src/main/res/values-fr-rFR/strings.xml @@ -2,7 +2,7 @@ - Changement d\'heure d\'été/hiver dans moins de 24 heures + Changement d\'heure dans moins de 24 heures Changement d\'heure dans moins de 3 heures - Boucle fermée désactivée Boucle désactivée ! Libérez au moins %1$d Mo du stockage interne ! @@ -20,4 +20,34 @@ Gly trop proche :\n%1$s\n%2$s recalculé entrées doubles + Données plates. Considérées comme incorrectes + + Bolus étendu limité à %1$.1f U à cause de %2$s + Limiter les glucides %1$d g à cause de %2$s + Pompe n’est pas capable de basals temporaires + Mode de Boucle Fermée désactivé dans les préférences + Version Dev. La Boucle Fermée est désactivée. + Boucle fermée désactivée à cause du bolus étendu + SMB toujours et post-ingestion de glucides désactivé car la source de glycémies actuelle ne supporte pas de filtrage avancé + SMB non autorisé en mode boucle ouverte + valeur Max dans les préférences + limite fixée + Sécurité des traitements + + Terminé, félicitations ! + Pas encore terminé + Temps écoulé + Maximum IA réglé correctement + Glycémie disponible depuis la source sélectionnée + Le service de synchronisation a l\'autorisation d\'écriture + Boucle activée + APS Sélectionné + Mode boucle fermée activé + OBJ + Programme d’apprentissage + Voulez-vous réinitialiser le début de l\'objectif ? Vous risquez de perdre vos progrès. + Suivant + Préc + Refaire l\'objectif + Suppression démarrée diff --git a/plugins/constraints/src/main/res/values-ga-rIE/exam.xml b/plugins/constraints/src/main/res/values-ga-rIE/exam.xml index 40c22282a9..3ea04e700d 100644 --- a/plugins/constraints/src/main/res/values-ga-rIE/exam.xml +++ b/plugins/constraints/src/main/res/values-ga-rIE/exam.xml @@ -1,4 +1,2 @@ - - Fiasp® - + diff --git a/plugins/constraints/src/main/res/values-ga-rIE/objectives.xml b/plugins/constraints/src/main/res/values-ga-rIE/objectives.xml index d9d309bd63..693890deb0 100644 --- a/plugins/constraints/src/main/res/values-ga-rIE/objectives.xml +++ b/plugins/constraints/src/main/res/values-ga-rIE/objectives.xml @@ -2,5 +2,4 @@ Tosaigh Fhíorú - Tosaigh ag lúb oscailte diff --git a/plugins/constraints/src/main/res/values-ga-rIE/strings.xml b/plugins/constraints/src/main/res/values-ga-rIE/strings.xml index bf1d7d9314..5d683010a5 100644 --- a/plugins/constraints/src/main/res/values-ga-rIE/strings.xml +++ b/plugins/constraints/src/main/res/values-ga-rIE/strings.xml @@ -6,4 +6,8 @@ + + + Lúb cumasaithe + APS roghnaithe diff --git a/plugins/constraints/src/main/res/values-hr-rHR/exam.xml b/plugins/constraints/src/main/res/values-hr-rHR/exam.xml index b4d6eabf2b..88a331afbf 100644 --- a/plugins/constraints/src/main/res/values-hr-rHR/exam.xml +++ b/plugins/constraints/src/main/res/values-hr-rHR/exam.xml @@ -3,63 +3,38 @@ Što je istina o DIA-i? Trajanje djelovanja inzulina (DIA) Trebali biste postaviti vrijednost za DIA u svom profilu. - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html?#insulin Ako ste zadovoljni da je vrijednost za DIA koju ste koristili u svojoj pumpi prije AAPS-a, nema potrebe da je mijenjate kada počnete raditi u petlji. Kako bi se spriječilo pretjerano korigiranje AAPS-a za porast glukoze u krvi uzrokovan brzodjelujućim ugljikohidratima koji se koriste za tretiranje hipoglikemije. - https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#profile Razlozi za primjenu \"Otkači pumpu\" u AAPS Sprječava APPS da obračuna inzulin koji nije isporučen dok je pumpa fizički odspojena. Poslat će AAPS u način rada otvorene petlje. - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#other-settings AAPS postavke AAPS postavke - https://androidaps.readthedocs.io/en/latest/EN/Usage/ExportImportSettings.html - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-emergency-equipment-is-recommended-to-take-with-me Ne činiti ništa - AAPS će se pozabaviti time. - https://androidaps.readthedocs.io/en/latest/EN/Usage/Smoothing-Blood-Glucose-Data-in-xDrip.html#smoothing-blood-glucose-data - https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#androidaps-settings Što je bitno za postavljanje i korištenje AAPS-a? - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html Što je bitno za postavljanje i korištenje AAPS-a? AAPS zahtijeva internetsku vezu kako bi radio u zatvorenoj petlji. - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html Ažuriranje AAPS-a Kada se objave ažurirane verzije AAPS-a, starije verzije mogu biti udaljeno ograničene nakon određenog vremena. - https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#update-to-a-new-version-or-branch Gdje možete potražiti pomoć za AAPS? Za savjet možete zatražiti u Facebook grupi Korisnici AAPS-a. Trebali biste pročitati (i ponovno pročitati) AAPS dokumentaciju. Možete zatražiti savjet i prijaviti tehničke probleme ili probleme u AAPS Discord. - https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting - https://www.facebook.com/groups/AndroidAPSUsers/ - Fiasp® - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Config-Builder.html#insulin Dodaci za osjetljivost omogućuju AAPS-u da se prilagodi privremenim ili kratkotrajnim promjenama u osjetljivosti na inzulin (na primjer, hormonalne promjene ili problemi s apsorpcijom na mjestu infuzije). - https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Ne poduzimati ništa – AAPS će izvršiti odgovarajuće prilagodbe. Usporedite vrijednosti u AAPS i povijesti pumpe (ako pumpa to podržava). Ne poduzimajte ništa i dopustite APPS-u da ispravi sve rezultirajuće visoke razine glukoze u krvi. AAPS koristi dinamički model za procjenu \"raspada\" ugljikohidrata i izračunavanje COB-a. - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-to-carb-ratio-ic-g-u Za bilježenje \'besplatnih\' ugljikohidrata za vježbanje koje želite sakriti od AAPS-a. e-ugljikohidrati (distribuirani u budućnosti) mogu pomoći AAPS-u u rješavanju obroka s visokim udjelom masti/proteina. - https://androidaps.readthedocs.io/en/latest/EN/Usage/Extended-Carbs.html Kako možete nadzirati APPS (na primjer za svoje dijete) na daljinu? Aplikacija AAPSClient, aplikacija Nightscout i web stranica Nightscout omogućuju vam praćenje AAPS-a na daljinu. Da biste pratili AAPS na daljinu, oba uređaja moraju imati pristup internetu (npr. putem Wi-Fi ili podatkovne mreže mobilne/mobilne mreže). AAPSClient koji se koristi kao daljinski pratitelj nadzirat će i pružiti potpunu kontrolu nad AAPS-om. - https://androidaps.readthedocs.io/en/latest/EN/Children/Children.html ISF trebate unijeti u svoje postavke AAPS-a. - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#insulin-sensitivity-factor-isf-mmol-l-u-or-mg-dl-u - https://androidaps.readthedocs.io/en/latest/EN/Usage/Profiles.html - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#carbohydrate-to-insulin-ratio-cr-g-u Ako ustanete 2 sata ranije nego inače, kako biste trebali obavijestiti AAPS o promjeni svog rasporeda? Aktiviranje promjena vašeg Nightscout profila zahtijeva da vaš AAPS telefon ima internetsku vezu. - https://androidaps.readthedocs.io/en/latest/EN/Module/module.html#good-individual-dosage-algorithm-for-your-diabetes-therapy AAPS smanjuje bazalne doze ili obustavlja isporuku inzulina radi povećanja šećera u krvi. Lijekovi iz klase inhibitora SGLT2 (gliflozini) mogu spriječiti povećanje glukoze u krvi i stoga mogu izazvati opasan nedostatak inzulina koji dovodi do DKA. \nUobičajeni brendovi su: Invokana®, Forxiga®, Jardiance®, Steglatro®, Suglat®, Apleway®, Deberza®, Synjardy®, Vokanamet®, Xigduo®.\n\nOvime obećavam da neću uzimati takve lijekove kada koristeći AAPS ili će deaktivirati petlju prije upotrebe takvih lijekova. diff --git a/plugins/constraints/src/main/res/values-hr-rHR/objectives.xml b/plugins/constraints/src/main/res/values-hr-rHR/objectives.xml index 1e9d56258e..01623f2c9e 100644 --- a/plugins/constraints/src/main/res/values-hr-rHR/objectives.xml +++ b/plugins/constraints/src/main/res/values-hr-rHR/objectives.xml @@ -2,8 +2,4 @@ Naučite kako kontrolirati AAPS Izvršite različite radnje u AAPS-u - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/FAQ.html#what-to-do-when-taking-a-shower-or-bath - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#the-homescreen - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#config-builder - https://androidaps.readthedocs.io/en/latest/EN/Getting-Started/Screenshots.html#the-homescreen diff --git a/plugins/constraints/src/main/res/values-hr-rHR/strings.xml b/plugins/constraints/src/main/res/values-hr-rHR/strings.xml index d7dc1f9292..efc53c1b2c 100644 --- a/plugins/constraints/src/main/res/values-hr-rHR/strings.xml +++ b/plugins/constraints/src/main/res/values-hr-rHR/strings.xml @@ -2,22 +2,15 @@ - Promjena računanja vremena za 24 sata ili manje - Promjena računanja vremena prije manje od 3 sata - zatvorena petlja onemogućena - Oslobodite najmanje %1$d MB iz interne pohrane! Petlja onemogućena! - stara verzija - vrlo stara verzija - Aplikacija je istekla - Nova verzija dostupna najmanje %1$d dana! Vraćanje na LGS nakon %2$d dana, petlja će biti onemogućena nakon %3$d dana - Otkrili smo da koristite nevažeću verziju. Petlja onemogućena! - Dostupna je verzija %1$s - Verzija %1$s ističe %2$s - Korišteni preračunati podaci - BG preblizu:\n%1$s\n%2$s - preračunato - dvostruki unosi + + Sigurnosne postavke medikacije + + Dovršeno, bravo! + Nije još dovršeno + Prošlo vrijeme + Program učenja diff --git a/plugins/constraints/src/main/res/values-hu-rHU/exam.xml b/plugins/constraints/src/main/res/values-hu-rHU/exam.xml index 40c22282a9..3ea04e700d 100644 --- a/plugins/constraints/src/main/res/values-hu-rHU/exam.xml +++ b/plugins/constraints/src/main/res/values-hu-rHU/exam.xml @@ -1,4 +1,2 @@ - - Fiasp® - + diff --git a/plugins/constraints/src/main/res/values-hu-rHU/strings.xml b/plugins/constraints/src/main/res/values-hu-rHU/strings.xml index 7094a53c00..3fbb6840b8 100644 --- a/plugins/constraints/src/main/res/values-hu-rHU/strings.xml +++ b/plugins/constraints/src/main/res/values-hu-rHU/strings.xml @@ -4,9 +4,10 @@ - régi verzió - nagyon régi verzió - Alkalmazás lejárt + + + Eltelt idő + APS kiválasztva diff --git a/plugins/constraints/src/main/res/values-it-rIT/exam.xml b/plugins/constraints/src/main/res/values-it-rIT/exam.xml index b9986b1467..71e065f5bd 100644 --- a/plugins/constraints/src/main/res/values-it-rIT/exam.xml +++ b/plugins/constraints/src/main/res/values-it-rIT/exam.xml @@ -59,7 +59,6 @@ Lasciare il tuo target glicemico invariato. Attendere che la glicemia scenda al di sotto del tuo target temporaneo \"ipoglicemia\" e poi mangiare 15 g di carboidrati a rapido assorbimento. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Loop disabilitato/sospeso Ricevo insulina quando il loop è disabilitato/sospeso? Sì, l\'insulina basale continua a essere erogata. No, l\'erogazione di insulina è interrotta. @@ -109,7 +108,6 @@ https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/aapsitalia/ https://discord.gg/4fQUWHZ4Mw - Plugin insulina Quale insulina dovresti usare con il plugin Ultra-Rapid Oref? Fiasp® NovoRapid®/Novolog® @@ -149,7 +147,6 @@ Impostare il profilo al 150% richiederà un tempo maggiore per l\'assorbimento dei CHO Impostare il profilo al 150% richiederà un tempo minore per l\'assorbimento dei CHO Impostare il profilo al 150% non influirà sull\'assorbimento calcolato dei CHO - Insulina attiva (IOB) Il valore IOB è influenzato dalle basali temporanee emesse. Non verrà emessa una basale temporanea alta quando la tua glicemia è al di sotto del target. IOB negativo per un periodo considerevole in assenza di esercizio fisico suggerisce che il tuo profilo è troppo incisivo e che è necessaria meno insulina nelle tue impostazioni. diff --git a/plugins/constraints/src/main/res/values-it-rIT/strings.xml b/plugins/constraints/src/main/res/values-it-rIT/strings.xml index 0858490cec..ce0a2dec6e 100644 --- a/plugins/constraints/src/main/res/values-it-rIT/strings.xml +++ b/plugins/constraints/src/main/res/values-it-rIT/strings.xml @@ -2,22 +2,32 @@ - Cambio all\'ora legale/solare in 24h o meno - Cambio all\'ora legale/solare avvenuto meno di 3 ore fa - Loop chiuso disabilitato - Libera almeno %1$d MB dalla memoria interna! Loop disabilitato! - versione datata - versione molto datata - Applicazione scaduta - Nuova versione disponibile da almeno %1$d giorni! Ritorno a LGS dopo %2$d giorni, disattivazione del loop dopo %3$d giorni - Abbiamo rilevato che stai eseguendo una versione non valida. Loop disabilitato! - Versione %1$s disponibile - Versione: %1$s | Scadenza: %2$s - Dati ricalcolati usati - BG troppo vicino:\n%1$s\n%2$s - ricalcolato - doppi caricamenti + + Limitazione carboidrati a %1$d g a causa di: %2$s + Micro non in grado di impostare la basale temporanea + Modalità loop chiuso disabilitata nelle preferenze + Versione sviluppatore in esecuzione. Loop chiuso disabilitato. + Loop chiuso disabilitato a causa dell\'esecuzione di un bolo esteso + Le funzioni \"SMB sempre\" e \"SMB dopo i CHO\" sono disabilitate perché l\'attuale sorgente delle glicemie non supporta il filtraggio avanzato + SMB non consentito in modalità loop aperto + valore max nelle preferenze + limite fisso + Sicurezza trattamenti + + Non ancora completato + Tempo trascorso + Max IOB impostata correttamente + BG disponibile da sorgente selezionata + Loop abilitato + APS selezionato + Modalità chiusa abilitata + OBT + Programma di apprendimento + Vuoi resettare l\'avvio dell\'obiettivo? Potresti perdere i tuoi progressi. + Cancella completamento + Cancella avvio diff --git a/plugins/constraints/src/main/res/values-iw-rIL/exam.xml b/plugins/constraints/src/main/res/values-iw-rIL/exam.xml index 3a678aa5cf..d76b046268 100644 --- a/plugins/constraints/src/main/res/values-iw-rIL/exam.xml +++ b/plugins/constraints/src/main/res/values-iw-rIL/exam.xml @@ -59,7 +59,6 @@ השאירו את ערך מטרת הסוכר ללא שינוי. המתינו עד שהגלוקוז בדם יירד מתחת לערך המטרה של היפו ואז אכלו 15 גרם של פחמימות מהירות. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - השבתת \\ השהיית לולאה האם אני מקבל\\ת אינסולין כאשר הלולאה מושבתת\\מושהית? כן, אינסולין בזאלי ממשיך להינתן. לא, אספקת האינסולין נפסקת. @@ -109,7 +108,6 @@ https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ https://discord.gg/4fQUWHZ4Mw - תוספי אינסולין באיזה אינסולין להשתמש עם תוסף האולטרה מהיר? Fiasp® NovoRapid®/Novolog® @@ -149,7 +147,6 @@ הגדרת 150% פרופיל תגרום להארכת משך ספיגת הפחמימות הגדרת 150% פרופיל תגרום לקיצור משך ספיגת הפחמימות הגדרת 150% פרופיל לא תשפיע על חישוב משך ספיגת הפחמימות - אינסולין פעיל בגוף (IOB) ערך האינסולין הפעיל (IOB) מושפע ממינונים בזאליים זמניים שסופקו. מינון בזאלי גבוה לא יינתן כאשר רמת הסוכר נמוכה מערך המטרה. אינסולין פעיל שלילי לאורך זמן בו לא נעשית פעילות מצביע על כך שהפרופיל חזק מדי, נדרש פחות אינסולין ויש להגדיר זאת בפרופיל. diff --git a/plugins/constraints/src/main/res/values-iw-rIL/strings.xml b/plugins/constraints/src/main/res/values-iw-rIL/strings.xml index 9e57fd52ce..966fb64ff1 100644 --- a/plugins/constraints/src/main/res/values-iw-rIL/strings.xml +++ b/plugins/constraints/src/main/res/values-iw-rIL/strings.xml @@ -2,21 +2,32 @@ - שינוי לשעון קיץ ב-24 השעות הקרובות - חל מעבר לשעון קיץ לפני פחות מ-3 שעות - לולאה סגורה מושבתת - גרסה ישנה - גרסה ישנה מאוד - תוקף האפליקציה פג - גרסה חדשה זמינה כבר %1$d ימים! הגבלה להשהיה עקב סוכר נמוך תחל אחרי %2$d ימים, הלולאה תושבת אחרי %3$d ימים - זיהינו שאתם משתמשים בגרסה לא תקפה. הלולאה מושבתת! - גרסה %1$s זמינה - גרסה: %1$s תפוג תוקפה: %2$s - משתמש בנתונים מחושבים מחדש - רמת הסוכר קרובה מדי:\n%1$s\n%2$s - חושב מחדש - רישומים כפולים + + הגבלת פחמימות ל-%1$d גר\' בגלל %2$s + המשאבה אינה מסוגלת לבצע בזאלי זמני + מצב לולאה סגור מושבת בהעדפות + זוהי גרסת פיתוח. לולאה סגורה אינה מורשת. + הלולאה הסגורה מופסקת עקב מתן בולוס ממושך + SMB תמידי ו-SMB לאחר פחמימות מושבתים כיוון שמקור ערכי הסוכר הפעיל אינו תומך בסינון נתונים מתקדם + SMB אינו פעיל במצב לולאה פתוחה + ערך מקסימלי בהעדפות + מגבלה קשיחה + בטיחות טיפולים + + עוד לא הושלם + זמן שחלף + ערך IOB מקסימלי הוגדר כראוי + ערכי סוכר זמינים מהמקור הנבחר + הלולאה פעילה + נבחר APS + מצב סגור מופעל + OBJ + תוכנית הלימוד + האם ברצונכם לאפס את התחלת המשימה? אתם עלולים לאבד את התקדמותכם במשימה. + ביטול השלמה + ביטול התחלה diff --git a/plugins/constraints/src/main/res/values-ja-rJP/strings.xml b/plugins/constraints/src/main/res/values-ja-rJP/strings.xml index bf1d7d9314..25fed4a847 100644 --- a/plugins/constraints/src/main/res/values-ja-rJP/strings.xml +++ b/plugins/constraints/src/main/res/values-ja-rJP/strings.xml @@ -6,4 +6,6 @@ + + diff --git a/plugins/constraints/src/main/res/values-ko-rKR/exam.xml b/plugins/constraints/src/main/res/values-ko-rKR/exam.xml index 40db45293e..92f993064a 100644 --- a/plugins/constraints/src/main/res/values-ko-rKR/exam.xml +++ b/plugins/constraints/src/main/res/values-ko-rKR/exam.xml @@ -51,7 +51,6 @@ 임시 목표를 변경하지 않습니다. \"저혈당 임시 목표\"보다 혈당이 떨어질 때까지 기다린 후 빠르게 반응하는 탄수화물 15g을 섭취합니다. https://androidaps.readthedocs.io/en/latest/CROWDIN/ko/Usage/temptarget.html#activity-temp-target - 중지 또는 일시중지된 loop Loop가 중지/일시중지 되었을때 인슐린이 주입됩니까? 네, Basal 인슐린은 계속 주입됩니다. 아니오, 인슐린 주입이 모두 중지됩니다. @@ -91,8 +90,6 @@ 당뇨병 클리닉/내분비내과의사에게 문의해야 합니다. https://androidaps.readthedocs.io/en/latest/CROWDIN/ko/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - 인슐린 플러그인 어떤 인슐린에서 초-초속효성의 Oref 플러그인을 사용해야 할까요? 피아스프(Fiasp®) 노보래피드(NovoRapid®)/노보로그(Novolog®) @@ -105,7 +102,6 @@ 캐뉼라 교체를 입력하면 Autosens 비율은 100%로 되돌아갑니다. 일부 플러그인 옵션은 사용자가 설정 가능한 시간 범위를 갖습니다. https://androidaps.readthedocs.io/en/latest/CROWDIN/ko/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens 탄수화물 입력 오류 부적절한 탄수화물을 입력하였다면 어떻게 하여야 합니까? 관리 메뉴에서 잘못된 입력을 삭제하고, 새로운 탄수화물 양으로 수정합니다. @@ -115,7 +111,6 @@ 만약 펌프 기록에서 보여지는 것보다 인슐린이 적게 주입되었을 때 어떻게 해야 할까요? (예를 들어, 주입 막힘, 캐뉼라 문제, 샤워 후 펌프 재부착을 잊어버렸을 때) Nightscout 케어포탈에서 인슐린 데이터를 삭제하여 펌프 기록에서 이를 제거합니다. \"주입되지 않은\" 인슐린양을 계산하여 시린지/펜 또는 prime 기능을 사용하여 인슐린을 주입합니다. - 활성 인슐린 (IOB) IOB 값은 실행된 임시 basal의 영향을 받습니다. 혈당이 목표보다 낮을 경우 높은 임시 basal은 실행되지 않습니다. 운동 없이도 음수의 IOB (마이너스 IOB) 구간이 많을 경우, 프로파일이 너무 강한 것이며 인슐린 양을 적게 설정해야 합니다. diff --git a/plugins/constraints/src/main/res/values-ko-rKR/strings.xml b/plugins/constraints/src/main/res/values-ko-rKR/strings.xml index da17b37396..f240316029 100644 --- a/plugins/constraints/src/main/res/values-ko-rKR/strings.xml +++ b/plugins/constraints/src/main/res/values-ko-rKR/strings.xml @@ -2,15 +2,32 @@ - 24시간 미만의 썸머타임 변경 - 썸머타임 변경이 3시간 미만입니다 - Closed Loop 비활성됨 - 오래된 버전 - 아주 오래된 버전 - 최소 %1$d일 새버전이 가능합니다! %2$d일 후엔 LGS(저혈당주입중지)으로 복귀되며, %3$d일이후엔 Loop가 비활성화 될 것입니다 - 유효하지 않은 버전을 이용 중입니다. Loop가 비활성화 되었습니다! - %1$s 버전이 사용 가능합니다. + + %2$s로 인해 탄수화물이 %1$d g로 제한됩니다. + 이 펌프 임시Basal을 지원하지 않습니다. + 설정에서 Closed Loop 모드가 비활성화되었습니다. + 개발자버전을 실행중입니다. Closed Loop는 비활성화 됩니다. + 확장 Bolus 사용으로 인해 Closed Loop가 비활성화됨 + 선택한 혈당 출처가 고급 필터링을 지원하지 않기 때문에 SMB가 항상 비활성화됩니다. + Open Loop모드에선 SMB가 허용되지 않습니다. + 설정에서의 최대값 + 하드한계 + 관리 안전설정 + + 아직 완료되지 않았습니다. + 경과 시간 + 최대 IOB가 바르게 설정됨 + 선택한 소스에서 혈당이 들어옵니다. + Loop 활성화됨 + APS 선택됨 + Closed 모드가 활성화됨 + OBJ + 프로그램 배우기 + 목표를 초기화하시겠습니까? 진행상황이 삭제됩니다. + 완료 초기화 + 시작 초기화 diff --git a/plugins/constraints/src/main/res/values-lt-rLT/exam.xml b/plugins/constraints/src/main/res/values-lt-rLT/exam.xml index 83e8db76d9..84ca888a45 100644 --- a/plugins/constraints/src/main/res/values-lt-rLT/exam.xml +++ b/plugins/constraints/src/main/res/values-lt-rLT/exam.xml @@ -51,7 +51,6 @@ Palikti tikslinę glikemiją nepakeistą. Palaukti, kol glikemija nukris žemiau laikino hipoglikemijos tikslo, tada suvalgyti 15 g greitųjų angliavandenių. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Ciklas išjungtas/sustabdytas Ar man leidžiamas insulinas, kai ciklas yra išjungtas / pristabdytas? Taip, bazinis insulinas ir toliau leidžiamas. Ne, insulino tiekimas sustabdytas. @@ -91,8 +90,6 @@ Turėtumėte kreiptis į savo diabeto kliniką/endokrinologą. https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - Insulino įskiepiai Kurį insuliną reikėtų naudoti su Ultra-Rapid Oref įskiepiu? Fiasp® NovoRapid®/Novolog® @@ -105,7 +102,6 @@ Pažymėjus kaniulės pakeitimą, Autosens santykis vėl bus grąžintas į 100%. Kai kurios įskiepo parinktys turi konfigūruojamus laiko intervalus, kuriuos gali nustatyti vartotojas. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Angliavandenių įvedimo klaidos Ką reikia daryti, jei įrašyti neteisingi angliavandeniai? Ištrinti neteisingą įrašą Terapijos skiltyje ir įvesti teisingą angliavandenių kiekį. @@ -115,7 +111,6 @@ Ką turėtumėte daryti, jei buvo suleista mažiau insulino nei rodo pompos istorija, pvz. dėl užsikimšimo, neveikiančios kaniulės ar pamiršus po dušo vėl pritvirtinti pompą?  Ištrinti insulino suleidimo įrašą per Nightscout Careportal, kad pašalintumėte jį iš pompos istorijos. Susileisti trūkstamą insulino kiekį švirkštu ar naudojantis infuzinės sistemos užpildymo funkcija. - Aktyvus insulinas organizme (AIO) AIO reikšmei įtakos turi nustatyta laikina valandinė bazė. Padidinta laikina bazė nebus nustatyta, jei kraujo glikemija yra žemiau nustatyto tikslo. Jei ilgą laiką stebima neigiama AIO reikšmė ir nėra fizinio aktyvumo, tai rodo, kad jūsų nustatymai yra per „agresyvūs“ ir kad jums reikia mažiau insulino nei nustatyta. diff --git a/plugins/constraints/src/main/res/values-lt-rLT/strings.xml b/plugins/constraints/src/main/res/values-lt-rLT/strings.xml index 3699f31ded..10a2171592 100644 --- a/plugins/constraints/src/main/res/values-lt-rLT/strings.xml +++ b/plugins/constraints/src/main/res/values-lt-rLT/strings.xml @@ -2,19 +2,32 @@ - Laiko persukimas įvyks po 24 val ar mažiau - Laiko persukimas įvyks po mažiau nei 3 val - Uždaras ciklas deaktyvuotas - sena versija - labai sena versija - Aplikacijos laikas baigėsi - Nauja versija pasiekiama mažiausiai %1$d d.! Po %2$d grįšite prie stabdymo prie žemo, po %3$d ciklas bus išjungtas - Nustatyta, kad naudojate neteisingą versiją. Ciklas išjungtas! - Versiją %1$s jau galima naudoti - Versija %1$s baigia galioti %2$s - Naudojami perskaičiuoti duomenys - KG per arti:\n%1$s\n%2$s + + Ribojami angliavandeniai iki %1$d g dėl %2$s + Pompa negali nustatyti laikinos bazės + Uždaro ciklo būsena išjungta nustatymuose + Naudojama neužbaigta versija. Uždaras ciklas neaktyvus. + Uždara ciklas išjungtas dėl ištęsto boluso veikimo + Funkcijos \"SMB visada\" ir \"SMB po angliavandenių\" išjungtos, nes kraujo gliukozės duomenų šaltinis neturi reikalingo filtravimo + SMB neleidžiami atviro ciklo režime + Maksimali reikšmė nustatymuose + Nekeičiama riba + Terapijos saugumas + + Dar nebaigta + Praėjo laiko + Maksimalus AIO nustatytas tinkamai + KG šaltinis pasirinktas teisingai + Ciklas aktyvuotas + DKS pasirinkta + Uždaras ciklas aktyvus + TIKSL + Mokymosi programa + Ar norite iš naujo nustatyti tikslų pradžią? Jūs galite prarasti jau pasiektus. + Išvalyti užbaigtus + Išvalyti pradėtus diff --git a/plugins/constraints/src/main/res/values-nl-rNL/exam.xml b/plugins/constraints/src/main/res/values-nl-rNL/exam.xml index cc969863bf..9700b08b4a 100644 --- a/plugins/constraints/src/main/res/values-nl-rNL/exam.xml +++ b/plugins/constraints/src/main/res/values-nl-rNL/exam.xml @@ -59,7 +59,6 @@ Je streefdoel ongewijzigd laten. Wachten totdat de bloedclose tot onder het Hypo tijdelijk streefdoel daalt en dan 15 g snelwerkende koolhydraten eten. https://androidaps.readthedocs.io/en/latest/CROWDIN/nl/Usage/temptarget.html#activiteit-tijdelijk-streefdoel - Uitgeschakelde/onderbroken loop Ontvang ik insuline wanneer de Loop is uitgeschakeld/onderbroken? Ja, de basale insuline wordt nog steeds geleverd. Nee, de levering van insuline is gestopt. @@ -109,7 +108,6 @@ https://androidaps.readthedocs.io/en/latest/CROWDIN/nl/Installing-AndroidAPS/Update-to-new-version.html#problemen-oplossen https://www.facebook.com/groups/AndroidAPSUsers/ https://discord.gg/4fQUWHZ4Mw - Insuline-plugins Welke insuline gebruik je met de Ultra-Rapid Oref plugin? Fiasp® NovoRapid®/Novolog® @@ -149,7 +147,6 @@ Instellen van een profiel op 150% zal de absorptie van koolhydraten vertragen Instellen van een profiel op 150% zal de absorptie van koolhydraten versnellen Instellen van profiel op 150% heeft geen invloed op berekende koolhydraten absorptie - Insuline aan boord (IOB) De IOB-waarde wordt beïnvloed door eerdere tijdelijke basaalstanden. Een hoge tijdelijke basaal zal niet worden ingesteld wanneer je bloedsuiker onder het streefdoel ligt. Negatieve IOB voor een aanzienlijke periode vrij van inspanning, suggereert dat je profiel te hoog is ingesteld, dus dat er minder insuline nodig is. diff --git a/plugins/constraints/src/main/res/values-nl-rNL/strings.xml b/plugins/constraints/src/main/res/values-nl-rNL/strings.xml index ec6caa9d12..d227f5c638 100644 --- a/plugins/constraints/src/main/res/values-nl-rNL/strings.xml +++ b/plugins/constraints/src/main/res/values-nl-rNL/strings.xml @@ -2,22 +2,35 @@ - Omschakeling van zomer- of wintertijd in 24 uur of minder - Omschakeling zomer/wintertijd minder dan 3 uur geleden - Gesloten Lus modus gedeactiveerd - Maak minstens %1$d MB vrij in interne opslag! Loop is uitgeschakeld! - oude versie - zeer oude versie - Applicatie is verlopen - Nieuwe versie al zeker %1$d dagen beschikbaar! Terugval LGS na %2$d dagen, loop zal worden uitgeschakeld na %3$d dagen - We hebben gedetecteerd dat je een ongeldige versie gebruikt. Loop is uitgeschakeld! - Versie %1$s is beschikbaar - Versie %1$s verloopt op %2$s - Herberekende data gebruikt - BG data interval to kort:\n%1$s\n%2$s - opnieuw berekend - dubbele items + Vlakke data. Beschouwd als onjuist + + Koolhydraten worden beperkt tot %1$d gr doordat %2$s + Pomp kan geen tijdelijk basaal aanvaarden + Closed Loop modus gedeactiveerd in de instellingen + Dev versie actief. Closed loop gedeactiveerd + Closed loop modus uitgeschakeld vanwege afgeven Vertraagde bolus + SMB altijd gedeactiveerd doordat de gekozen BG bron geen optimale filtering toepast + SMB niet toegestaan in Open Loop modus + Maximum waarde in instellingen + max limiet (SC) + Behandelingen veiligheid + + Voltooid, goed gedaan! + Nog niet voltooid + Verstreken tijd + Maximum IOB juist ingesteld + BG beschikbaar op gekozen bron + Synchronisatieservice heeft schrijfrechten + Loop Actief + APS geslecteerd + Closed modus actief + DOEL + Leerprogramma + Wil je dit leerdoel opnieuw starten? Je kunt je voortgang verliezen. + Voltooiing wissen + Start wissen diff --git a/plugins/constraints/src/main/res/values-no-rNO/exam.xml b/plugins/constraints/src/main/res/values-no-rNO/exam.xml index 708f615564..7e8a3f46da 100644 --- a/plugins/constraints/src/main/res/values-no-rNO/exam.xml +++ b/plugins/constraints/src/main/res/values-no-rNO/exam.xml @@ -59,7 +59,6 @@ La målverdien for ditt blodsukker være uforandret. Vent til blodsukkeret ditt synker under Hypo temp target og spis så 15 gram med hurtigvirkende karbohydrater. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#active temp-target - Deaktiver/pause loop Får jag insulin når loop er stanset/pauset? Ja, basal insulin vil fortsatt bli levert. Nei, levering av insulin er stanset. @@ -149,7 +148,6 @@ Ved å sette profilen til 150% vil karbohydrater absorberes over lengre tid Ved å sette profilen til 150% vil karbohydrater absorberes over kortere tid Ved å sette profilen til 150% påvirkes ikke beregningen av absorbering av karbohydrater - Aktivt insulin (IOB) IOB verdi påvirkes av midlertidige temp basaler. Høy temp basal vil ikke bli gitt når ditt blodsukker er under målverdi. Negativ IOB i en lengre periode selv om du ikke trener tyder på at profilen din gir for mye insulin og kanskje bør reduseres i innstillingene. diff --git a/plugins/constraints/src/main/res/values-no-rNO/strings.xml b/plugins/constraints/src/main/res/values-no-rNO/strings.xml index 1eeec3c0cd..a82a423259 100644 --- a/plugins/constraints/src/main/res/values-no-rNO/strings.xml +++ b/plugins/constraints/src/main/res/values-no-rNO/strings.xml @@ -9,16 +9,45 @@ gammel versjon veldig gammel versjon - Applikasjon utløpt - oppdater - Ny versjon tilgjengelig i minst %1$d dager! Systemet vil bytte til \"stopp innen lavt (LGS)\" etter %2$d dager og loop vil deaktiveres etter %3$d dager + Applikasjon utløpt + Ny versjon tilgjengelig i minst %1$d dager! Systemet vil bytte til \"stopp ved lavt BS (LGS)\" etter %2$d dager og loop vil deaktiveres etter %3$d dager Vi har oppdaget at du kjører en ugyldig versjon. Loop deaktivert! Versjon %1$s er tilgjengelig Versjon %1$s utløper den %2$s - Rekalkulerte siste data + Rekalkulerte data er brukt BS for nær:\n%1$s\n%2$s beregnet på nytt doble registreringer Flate verdier. Vurderer dette til å være feil + + Begrenser forlenget bolus til %1$.1f E på grunn av %2$s + Begrenser karbohydrater til %1$d g på grunn av %2$s + Pumpen støtter ikke temp basaler + Lukket Loop er eaktivert i innstillinger + Du kjører dev-versjonen. Lukket loop ikke aktivert. + Lukket loop deaktivert på grunn av forlenget bolus + SMB Alltid På og SMB Etter Karbohydrater er deaktivert fordi BS kilden ikke støtter avansert filtrering + SMB ikke tillatt i åpen loop + maks verdi i innstillingene + hard begrensning + Sikkerhet ved behandlinger + + Fullført, bra jobba! + Enda Ikke fullført + Tid brukt + Maks IOB er angitt riktig + BS tilgjengelig fra valgt kilde + Synkroniseringstjeneste har skriverettigheter + Loop er aktivert + APS valgt + Lukket loop aktivert + MÅL + Opplæringsprogram + Ønsker du å omstarte læringsmålet? Du vil miste fullførte trinn. + Neste + Forrige + Sletting ferdig + Sletting startet diff --git a/plugins/constraints/src/main/res/values-pl-rPL/exam.xml b/plugins/constraints/src/main/res/values-pl-rPL/exam.xml index 322f3d2f03..3a1674137c 100644 --- a/plugins/constraints/src/main/res/values-pl-rPL/exam.xml +++ b/plugins/constraints/src/main/res/values-pl-rPL/exam.xml @@ -51,7 +51,6 @@ Pozostaw cel poziomu glukozy we krwi niezmieniony. Poczekaj, aż poziom glukozy we krwi spadnie poniżej celu tymczasowego \"Hipo\", a następnie zjedz 15 g szybko działających węglowodanów. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Wyłączona/zawieszona pętla Czy otrzymuję insulinę, gdy pętla jest wyłączona/zawieszona? Tak, insulina bazowa nadal jest dostarczana. Nie, podawanie insuliny jest zatrzymane. @@ -91,8 +90,6 @@ Należy zwrócić się do diabetologa lub lekarza endokrynologa. https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - Wtyczki insuliny Która insulina powinna być używana z wtyczką Ultra-Rapid Oref? Fiasp® NovoRapid ® /Novolog ® @@ -105,7 +102,6 @@ Rejestracja zmiany wkłucia spowoduje zresetowanie współczynnika Autosens z powrotem do 100%. Niektóre z opcji wtyczki mają konfigurowalne zakresy czasu, które mogą być ustawiane przez użytkownika. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Błędy wprowadzania węglowodanów Co powinieneś zrobić, gdy wprowadziłeś niewłaściwą ilość węglowodanów? Usuń niepoprawny wpis w leczeniu (Treat) i wprowadź poprawną nową wartość węglowodanów. @@ -115,7 +111,6 @@ Co należy zrobić, jeśli otrzymano mniej insuliny niż sugeruje historia pompy, np. z powodu niedrożności, uszkodzonej kaniuli lub zapomnienia o ponownym podłączeniu pompy po prysznicu? Usuń dane insuliny z portalu Nightscout aby usunąć je z historii pompy. Podaj obliczoną dawkę „pominiętej” insuliny za pomocą strzykawki / wstrzykiwacza lub za pomocą pompy funkcji wypełnienia. - Aktywna insulina (IOB) Na wartość IOB mają wpływ wykonane tymczasowe dawki bazowe. Wysoka tymczasowa dawka bazowa nie zostanie podana, gdy twóje poziom cukru we krwi jest poniżej poziomu docelowego. Negatywne IOB utrzymujące się przez znaczny okres czasu bez wysiłku fizycznego sugeruje, że Twój profil jest zbyt silny i mniej insuliny jest wymagane w Twoich ustawieniach. diff --git a/plugins/constraints/src/main/res/values-pl-rPL/strings.xml b/plugins/constraints/src/main/res/values-pl-rPL/strings.xml index 0af41a6505..4245afa1a4 100644 --- a/plugins/constraints/src/main/res/values-pl-rPL/strings.xml +++ b/plugins/constraints/src/main/res/values-pl-rPL/strings.xml @@ -2,19 +2,32 @@ - Zmiana czasu w 24h lub mniej - Zmiana czasu nastąpiła mniej niż 3 godziny temu - Zamknięta pętla wyłączona - stara wersja - bardzo stara wersja - Aplikacja wygasła - Nowa wersja dostępna co najmniej %1$d dni! Powrót do LGS (zawieszania podawania bazy przy niskim poziomie) po %2$d dniach, pętla zostanie wyłączona po %3$d dniach - Wykryliśmy, że używasz nieprawidlowej wersji. Pętla wyłączona! - Wersja %1$s dostępna - Wersja %1$s wygasa %2$s - Użyto przeliczonych wartości - Zbyt bliskie pomiary glikemii:\n%1$s\n%2$s + + Ograniczam węglow. do %1$d g z uwagi na %2$s + Pompa nie jest zdolna do wykonywania dawek bazowych tymczasowych + Tryb zamkniętej pętli wyłączony w ustawieniach + Uruchomiona jest wersja dev. Zamknięta pętla jest wyłączona. + Zamknięta pętla wyłączona, ponieważ działa Extended Bolus (bolus przedłużony) + SMB zawsze i po węglow. wyłączone z uwagi na brak źródła BG z zaawansowanym filtrowaniem + SMB nie dozwolone w trybie otwartej pętli + maks. wartość w ustawieniach + twarde ograniczenie + Bezpieczeństwo terapii + + Nie ukończono + Czas jaki upłynął + Maks. IOB ustawione poprawnie + BG dostępne z wybranego źródła + Pętla włączona + Wybrano APS + Tryb zamknięty włączony + OBJ + Program do nauki + Czy chcesz zresetować czas rozpoczęcia zadania? Możesz utracić postępy. + Wyczyść skończone + Wyczyść rozpoczęte diff --git a/plugins/constraints/src/main/res/values-pt-rBR/exam.xml b/plugins/constraints/src/main/res/values-pt-rBR/exam.xml index 28e1363397..9c1946d1da 100644 --- a/plugins/constraints/src/main/res/values-pt-rBR/exam.xml +++ b/plugins/constraints/src/main/res/values-pt-rBR/exam.xml @@ -59,7 +59,6 @@ Não altere o seu alvo de glicemia. Aguarde até que a glicemia fique abaixo do seu alvo temporário de hipoglicemia e coma 15g de carbos de ação rápida. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Loop Desativado/Suspenso Eu recebo insulina quando o loop estiver desactivado/suspenso? Sim, a insulina basal continua sendo administrada. Não, a administração da insulina será interrompida. @@ -109,7 +108,6 @@ https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ https://discord.gg/4fQUWHZ4Mw - Plugins de Insulina Qual insulina você deveria usar com o plugin \"Oref Ultra-Rapid\"? Fiasp® NovoRapid®/Novolog® @@ -149,7 +147,6 @@ Definir o perfil para 150% levará a absorção de carboidratos em mais tempo Definir o perfil para 150% levará a absorção de carboidratos em menos tempo Definir o perfil para 150% não afetará a absorção de carboidratos calculados - Insulina ativa (IA) O valor de IA é afetado por basais temporárias efetuadas. Um basal alto temporário não será efetuado quando sua glicose estiver abaixo do alvo. Insulina Ativa (IA) negativa por um período substancial na ausência de exercícios, sugere que seu perfil é muito agressivo e menos insulina deve ser considerada nas suas configurações. diff --git a/plugins/constraints/src/main/res/values-pt-rBR/strings.xml b/plugins/constraints/src/main/res/values-pt-rBR/strings.xml index 9b559db21b..09369c76e4 100644 --- a/plugins/constraints/src/main/res/values-pt-rBR/strings.xml +++ b/plugins/constraints/src/main/res/values-pt-rBR/strings.xml @@ -2,22 +2,34 @@ - Mudança do horário de verão em 24h ou menos - Alteração do horário de verão há menos de 3 horas. Circuito fechado desativado - Libere pelo menos %1$d MB do armazenamento interno! ‘Loop’ desativado! - versão antiga - versão muito antiga - Aplicativo expirado - Nova versão para pelo menos %1$d dias disponíveis! Retorno a LGS após %2$d dias, o loop será desativado após %3$d dias - Detectamos que você está executando uma versão inválida. \"Loop\" desativado! - Disponível %1$s disponível - A versão %1$s expira em %2$s - Dados recalculados foram utilizados - Glicemia muito próxima:\n%1$s\n%2$s - recalculado - entradas duplicadas + Dados fixos. Considere que podem ser imprecisos. + + A limitar hidratos para %1$d g porque %2$s + A bomba não é capaz de basais temporárias + Loop fecchado disabilitado nas preferências + A correr a versão dev. O Loop fechado está desabilitado. + Closed Loop desabilitado por causa da execução do Bólus Estendido + SMB sempre e depois dos hidratos desactivado por fonte da Glicemia activa não suportar filtro avançado + SMB não permitido no modo open loop + valor máx nas preferências + limite rígido + Segurança do Tratamento + + Incompleto + Tempo decorrido + IOB máxima definida correctamente + Glicemia disponivel desde a fonte selecionada + O serviço de sincronização tem permissão de escrita + Loop activado + APS seleccionado + Modo fechado ativado + OBJ + Programa de aprendizagem + Deseja reiniciar o objetivo? Pode perder seu progresso. + Limpeza terminado + Limpeza iniciado diff --git a/plugins/constraints/src/main/res/values-pt-rPT/exam.xml b/plugins/constraints/src/main/res/values-pt-rPT/exam.xml index c4adf5f331..7d76cf7ece 100644 --- a/plugins/constraints/src/main/res/values-pt-rPT/exam.xml +++ b/plugins/constraints/src/main/res/values-pt-rPT/exam.xml @@ -51,7 +51,6 @@ Deixe o seu alvo de glicose inalterado. Espere até que a glicose no sangue baixe abaixo do seu alvo temporário de hipo e, em seguida, coma 15 g de hidratos rápidos. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Loop Desactivado/Suspenso Eu recebo insulina quando o loop estiver desactivado/suspenso? Sim, a insulina basal continua a ser administrada. Não, administração da insulina está parada. @@ -91,8 +90,6 @@ Deveria pedir à sua clínica de diabetes/endocrinologista. https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - Plugins de Insulina Que insulina deve utilizar com o plugin Oref Ultra-Rápida ? Fiasp® NovoRapid®/Novolog® @@ -105,7 +102,6 @@ Registar uma mudança de cânula irá redefinir a taxa de Autosens de volta para 100%. Algumas opções de plugin têm intervalos de tempo configuráveis que podem ser configurados pelo utilizador. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Erros de Entrada de Hidratos O que deve fazer se tiver feito uma entrada incorrecta de hidratos? Elimine a entrada incorreta em Tratamentos e insira o novo valor correto dos hidratos. @@ -115,7 +111,6 @@ O que deve fazer se receber menos insulina do que o histórico da bomba sugere por exemplo devido a uma oclusão, uma cânula danificada ou esquecer-se de reanexar a bomba após um banho? Elimine dados de insulina do Nightscout Careportal para removê-lo do histórico da bomba. Bólus uma proporção de insulina calculada \'não administrada\' ou com seringa/caneta ou purgando. - Insulina ativa (IA ) O valor do IA é afectado por basais temporárias emitidas. Basal temporária alta não será dada quando a sua glicose estiver abaixo do alvo. IA negativa por um período substancial na ausência de exercício, sugere que o seu perfil é muito alto e é necessária menos insulina nas suas configurações. diff --git a/plugins/constraints/src/main/res/values-pt-rPT/strings.xml b/plugins/constraints/src/main/res/values-pt-rPT/strings.xml index 066bc4b40f..df6b3be19b 100644 --- a/plugins/constraints/src/main/res/values-pt-rPT/strings.xml +++ b/plugins/constraints/src/main/res/values-pt-rPT/strings.xml @@ -2,19 +2,32 @@ - Horário de Verão em 24h ou menos - Horário de Verão a menos de 3 horas - Loop Fechado desativado - versão antiga - versão muito antiga - A aplicação expirou - Nova versão para pelo menos %1$d dias disponíveis! Retorno a SGB após %2$d dias, o loop será desactivado após %3$d dias - Detectamos que está a correr uma versão inválida. Loop desactivado! - Disponível %1$s disponível - Versão: %1$s criada em %2$s - Dados utilizados foram recalculados - Glicemia demasiado próxima:\n%1$s\n%2$s + + A limitar hidratos para %1$d g porque %2$s + A bomba não é capaz de basais temporárias + Loop fechado desativado nas preferências + A correr a versão dev. O Loop fechado está desativado. + Loop Fechado desativado por causa da execução do Bólus Prolongado + SMB sempre e depois dos hidratos desactivado por fonte da Glicose activa não suportar filtro avançado + SMB não permitido no modo open loop + valor máx nas preferências + limite rígido + Segurança de Tratamentos + + Não concluído ainda + Tempo decorrido + IA máxima definida corretamente + Glicose disponível da fonte seleccionada + Loop activado + APS seleccionado + Modo fechado ativado + OBJ + Programa de aprendizagem + Deseja reiniciar o objectivo? Pode perder seu progresso. + Limpar terminado + Limpar iniciado diff --git a/plugins/constraints/src/main/res/values-ro-rRO/exam.xml b/plugins/constraints/src/main/res/values-ro-rRO/exam.xml index 4154dffca1..18ea37c096 100644 --- a/plugins/constraints/src/main/res/values-ro-rRO/exam.xml +++ b/plugins/constraints/src/main/res/values-ro-rRO/exam.xml @@ -51,7 +51,6 @@ Lăsaţi valoarea ţintă a glicemiei dumneavoastră neschimbată. Aşteptaţi până când glicemia scade sub Ținta Temporară de hipoglicemie şi apoi mâncaţi 15 g de carbohidraţi cu acţiune rapidă. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Buclă dezactivată/suspendată Primesc insulina atunci când bucla închisă este dezactivata/suspendata? Da, insulina bazală este livrată în continuare. Nu, livrarea de insulină este oprită. @@ -91,8 +90,6 @@ Ar trebui să întrebați medicul diabetolog. https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - Plugin-uri insulină Ce insulină trebuie să utilizaţi cu plugin-ul Ultra-Rapid Oref? Fiasp® NovoRapid®/Novolog® @@ -105,7 +102,6 @@ Înregistrarea unei schimbări de canula va reseta raportul Autosens înapoi la 100%. Unele dintre opțiunile plugin-ului au intervale de timp configurabile care pot fi setate de către utilizator. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Erori la introducerea carbohidraților Ce ar trebui sa faceți dacă ați introdus o cantitate de carbohidrați greșită? Ştergeţi intrarea incorectă din Tratamente şi introduceţi noua valoare de carbohidrați corectă. @@ -115,7 +111,6 @@ Ce trebuie să faci dacă ai primit mai putină insulină decât sugerează istoricul pompei, de exemplu datorită unei ocluzii, a unei canule defecte sau pentru ca ai uitat sa reatașezi pompa după un dus?  Șterge datele despre insulină din Nightscout Careportal pentru a le înlătura din istoricul pompei. Bolusati o cantitate parțiala de insulina din insulina calculata ca fiind lipsa utilizând seringa/penul sau amorsarea. - Insulină activă (IOB) Valoarea IOB este afectată de bazalele temporare emise. Rata bazala ridicata temporara nu va fi livrata atunci când glicemia este sub nivelul țintă. Un IOB negativ pentru o perioadă substanțială în absența exercițiilor fizice sugerează că profilul tău este prea puternic și este nevoie de mai puţină insulină în setările inițiale. diff --git a/plugins/constraints/src/main/res/values-ro-rRO/strings.xml b/plugins/constraints/src/main/res/values-ro-rRO/strings.xml index 5351f94628..f0e6785ec6 100644 --- a/plugins/constraints/src/main/res/values-ro-rRO/strings.xml +++ b/plugins/constraints/src/main/res/values-ro-rRO/strings.xml @@ -2,19 +2,32 @@ - Schimbare oră vară/iarnă în mai puțin de 24h - Schimbare oră vară/iarnă în mai puțin de 3 ore - buclă închisă dezactivată - versiune veche - versiune foarte veche - Aplicația a expirat - O versiune nouă este disponibilă de cel puțin %1$d zile! Reveniți la LGS după %2$d zile, bucla închisă va fi dezactivată după %3$d zile - S-a detectat rularea unei versiuni invalide. Buclă dezactivată! - Versiunea %1$s este disponibilă - Versiunea %1$s expiră pe %2$s - Date recalculate utilizate - BG prea aproape:\n%1$s\n%2$s + + Se limitează carbohidrații %1$d g datorită %2$s + Pompa nu suportă bazale temporare + Modul buclă închisă dezactivat în preferințe + Se folosește versiunea dev. Bucla închisă este dezactivată. + Bucla închisă dezactivată din cauza livrării bolusului extins + SMB dezactivat întotdeauna și după carbohidrați, deoarece sursa glicemiei nu suportă filtrare avansată + SMB nu este permis în mod buclă deschisă + valoare maximă în preferințe + limită fizică + Setări siguranță tratament + + Încă incomplet + Timp scurs + IOB maxim configurat corect + Glicemie disponibilă din sursa selectată + Buclă activată + APS selectat + Mod buclă închisă activat + OBI + Program de învăţare + Doriți să reîncepeți obiectivul? Vă puteți pierde progresul. + Șterge starea \"Terminat\" + Șterge starea \"Început\" diff --git a/plugins/constraints/src/main/res/values-ru-rRU/exam.xml b/plugins/constraints/src/main/res/values-ru-rRU/exam.xml index c5b2a36f02..9d2bed09e7 100644 --- a/plugins/constraints/src/main/res/values-ru-rRU/exam.xml +++ b/plugins/constraints/src/main/res/values-ru-rRU/exam.xml @@ -59,7 +59,6 @@ Оставить временную цель без изменений. Подождать пока глюкоза крови упадет ниже уровня цели \"Гипо\", а затем съесть 15г быстрых углеводов. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Отключенный/приостановленный цикл Получаю ли я инсулин, когда цикл отключен/приостановлен? Да, базальный инсулин продолжает подаваться. Нет, подача инсулина прекращается. @@ -149,7 +148,6 @@ Установка профиля на 150% потребует больше времени на усвоение углеводов Установка профиля на 150% потребует меньше времени на усвоение углеводов Установка профиля на 150% не повлияет на расчетное время усвоения углеводов - Активный инсулин (IOB) На величину IOB влияют устанавливаемые ВБС. Высокая ВБС не будет применяться, если уровень сахара в крови ниже целевого. Отрицательный IOB в течение длительного периода при отсутствии физнагрузки указывает на то, что ваш профиль завышен и требуется снизить кол-во инсулина в настройках. diff --git a/plugins/constraints/src/main/res/values-ru-rRU/strings.xml b/plugins/constraints/src/main/res/values-ru-rRU/strings.xml index f41072aac2..844423e9f1 100644 --- a/plugins/constraints/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/constraints/src/main/res/values-ru-rRU/strings.xml @@ -17,7 +17,37 @@ Используются пересчитанные данные - ГК слишком близко к \n%1$s\n%2$s + ГК слишком близко:\n%1$s\n%2$s пересчитано двойные записи + Неменяющиеся данные. Принимаю за неверные + + Ограничиваю пролонгированный болюс до %1$.1f ед. из-за %2$s + Ограничение углеводов до %1$d г. из-за %2$s + Помпа не рассчитана на подачу временного базала + Режим замкнутого цикла отключен в настройках + Работает версия разработчика. Замкнутый цикл отключен. + Замкнутый цикл отключен из-за работы Пролонгированного Болюса + Опция супер микро болюс всегда и после углеводов отключена т. к. активный источник ГК не поддерживает комплексное фильтрование + В режиме незамкнутого цикла open loop супер микро болюс SMB не допускается + максимальное значение в настройках + жесткий предел + Безопасность терапии + + Завершено, отлично! + Не завершено + Прошло времени + Максимум активного инсулина IOB установлен правильно + ГК доступна из выбранного источника + Служба синхронизации имеет разрешение на запись + Цикл активирован + Выбран APS + Режим замкнутого цикла включен + ЦЕЛИ + Обучающая программа + Хотите сбросить начатую цель? Можете потерять достигнутое. + Далее + Назад + Очистить завершенные + Очистить начатые diff --git a/plugins/constraints/src/main/res/values-sk-rSK/exam.xml b/plugins/constraints/src/main/res/values-sk-rSK/exam.xml index cb2a3d1ce9..c095f796c0 100644 --- a/plugins/constraints/src/main/res/values-sk-rSK/exam.xml +++ b/plugins/constraints/src/main/res/values-sk-rSK/exam.xml @@ -59,7 +59,6 @@ Nechajte svoju cieľovú glykémiu bez zmeny. Počkajte, kým glykémia neklesne pod Váš dočasný cieľ hypoglykémia a potom zjedzte 15 g rýchlych sacharidov. https://androidaps.readthedocs.io/en/latest/CROWDIN/cs/Usage/temptarget.html#docasny-cil-pri-pohybove-aktivite - Deaktivovaný/pozastavený uzavretý okruh Dostávam inzulín, keď je uzavretý okruh deaktivovaný/pozastavený? Áno, bazálny inzulín je podávaný naďalej. Nie, podávanie inzulínu je zastavené. @@ -149,7 +148,6 @@ Nastavením profilu na 150 % dôjde k predĺženiu doby absorbcie sacharidov Nastavením profilu na 150 % dôjde ku skráteniu doby absorbcie sacharidov Nastavenie profilu na 150% neovplyvní vypočítanú absorbciu sacharidov - Aktívny inzulín (IOB) Hodnota IOB je ovplyvnená vydanými dočasnými bazálmi. Vysoký dočasný bazál nebude spustený, pokiaľ je Vaša glykémia nižšia, ako cieľ. Negatívne IOB po značnú dobu bez cvičenia naznačuje, že váš profil je príliš \"silný\" a vo vašom profile je potrebného menej inzulínu. diff --git a/plugins/constraints/src/main/res/values-sk-rSK/strings.xml b/plugins/constraints/src/main/res/values-sk-rSK/strings.xml index 3a7cd92211..a07b76a8f2 100644 --- a/plugins/constraints/src/main/res/values-sk-rSK/strings.xml +++ b/plugins/constraints/src/main/res/values-sk-rSK/strings.xml @@ -2,22 +2,36 @@ - Zmena letného času za menej ako 24 hodín - Zmena letného času za menej ako 3 hodiny - Uzavretý okruh pozastavený - Uvoľnite aspoň %1$d MB z interného úložiska! Uzavretý okruh zakázaný! - stará verzia - veľmi stará verzia - Aplikácia expirovala - Nová verzia je dostupná minimálne %1$d dní! Prepnutie na ochranu pred nízkou glykémiou po %2$d dňoch, vypnutie uzavretého okruhu po %3$d dňoch - Zistili sme, že používate neplatnú verziu. Uzavretý okruh zakázaný! - Verzia %1$s je k dispozícii - Verzia %1$s expiruje dňa %2$s - Použité prepočítané dáta - Glykémia je príliš blízko:\n%1$s\n%2$s - prepočítané - dvojité zápisy + + Sacharidy obmedzené na %1$d g: %2$s + Pumpa nepodporuje dočasné bazály + Uzavretý okruh zakázaný v nastaveniach + Bežiaca vývojárska verzia. Uzavretý okruh je zakázaný. + Uzavretý okruh je zastavený kvôli prebiehajúcemu predĺženému bolusu + \"SMB vždy\" a \"po jedle\" zakázané pretože zdroj glykémie nepodporuje rozšírené filtrovánie + SBM nie sú povolené pri otvorenom okruhu + maximálna hodnota v nastaveniach + pevný limit + Bezpečnosť zadania ošetrenia + + Hotovo, gratulujeme! + Nedokončené + Uplynutý čas + Maximálne IOB nastavené správne + Glykémie dostupné z vybraného zdroja + Služba synchronizácie má oprávnenie k zápisu + Uzavretý okruh povolený + APS vybrané + Uzavretý okruh povolený + CIEĽ + Výukový program + Chcete resetovať začiatok cieľa? Môžete prísť o svoj pokrok. + Ďalej + Späť + Vymazanie dokončené + Vymazanie začaté diff --git a/plugins/constraints/src/main/res/values-sr-rCS/strings.xml b/plugins/constraints/src/main/res/values-sr-rCS/strings.xml index bf1d7d9314..33cd0ab853 100644 --- a/plugins/constraints/src/main/res/values-sr-rCS/strings.xml +++ b/plugins/constraints/src/main/res/values-sr-rCS/strings.xml @@ -6,4 +6,8 @@ + + Sigurnost tretmana + + Program učenja diff --git a/plugins/constraints/src/main/res/values-sv-rSE/exam.xml b/plugins/constraints/src/main/res/values-sv-rSE/exam.xml index 83c0266e5b..b602ecf91c 100644 --- a/plugins/constraints/src/main/res/values-sv-rSE/exam.xml +++ b/plugins/constraints/src/main/res/values-sv-rSE/exam.xml @@ -51,7 +51,6 @@ Lämna ditt målvärde oförändrat. Vänta tills blodglukosnivån sjunker under ditt Hypo temp mål och sen äter du 15 g av snabbverkande kolhydrater. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Inaktiverad/pausad loop Får jag insulin när loopen är avstängd eller pausad? Ja. Basalinsulin fortsätter att levereras. Nej, leverans av insulin är stoppad. @@ -91,8 +90,6 @@ Du bör fråga din diabetesklinik/endokrinolog. https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ - https://discord.gg/4fQUWHZ4Mw - Insulininställningar Vilket insulin ska du använda med insticksprogrammet Ultra-Rapid Oref? Fiasp® NovoRapid®/Novolog® @@ -105,7 +102,6 @@ Om du loggar ett kanylbyte återställs autosens-värdet tillbaka till 100%. Vissa av insticksprogrammen har konfigurerbara tidsintervall som kan ställas in av användaren. https://androidaps.readthedocs.io/en/latest/EN/Configuration/Sensitivity-detection-and-COB.html - https://androidaps.readthedocs.io/en/latest/Usage/Open-APS-features.html?highlight=Autosens#autosens Fel i KH-inmatning Vad ska du göra om du har gjort en felaktig inmatning? Ta bort den felaktiga posten i Behandlingar och ange rätt kolhydratmängd. @@ -115,7 +111,6 @@ Vad ska du göra om du fått mindre insulin än vad pumpens historik visar, t.ex. på grund av en ocklusion, en felaktig kanyl eller om du glömt att sätta fast pumpen efter en dusch?  Ta bort insulindata från Nightscout för att ta bort den från pumpens historik. Ge en bolus med en del av det insulin du saknar antingen med penna eller genom att använda förfyllningsfunktionen. - Aktivt Insulin (IOB) IOB-värdet påverkas av temp basaler. Hög temp basal kommer inte att ges när ditt BG-värde är under målet. Negativ IOB under en längre period även om du inte motionerat, tyder på att din profil ger för mycket insulin. diff --git a/plugins/constraints/src/main/res/values-sv-rSE/strings.xml b/plugins/constraints/src/main/res/values-sv-rSE/strings.xml index 7e636e8e03..f5af7a434c 100644 --- a/plugins/constraints/src/main/res/values-sv-rSE/strings.xml +++ b/plugins/constraints/src/main/res/values-sv-rSE/strings.xml @@ -2,21 +2,32 @@ - Sommar/vintertid inträffar inom 24 timmar - Sommar/vintertid ändrades för mindre än 3 timmar sedan. Closed Loop avstängt - gammal version - väldigt gammal version - Applikationen inte giltig längre - Ny version tillgänglig för %1$d dagar sedan. Systemet kommer att byta läge till \"stopp innan lågt\" efter %2$d dagar och sluta loopa helt efter %3$d dagar - Du kör en ogiltig version. Loop avstängd! - Version %1$s tillgänglig - Version %1$s upphör att gälla %2$s - Omräknad data används - BG för nära:\n%1$s\n%2$s - omräknad - dubbla poster + + Begränsar kolhydrater till %1$d g pga %2$s + Pumpen kan inte hantera temp basaler + Closed Loop inaktiverat i Inställningar + Du kör nu dev-versionen. Closed Loop inaktiverat. + Closed Loop-läget inaktiverat pga att en förlängd bolus är aktiv + SMB Alltid På och SMB Efter Kolhydrater är inaktiverat pga att den aktiva BG-källan inte stöder avancerad filtrering + SMB inte tillåtet i Open Loop + maxvärde i Inställningar + hård begränsning + Säkerhetsbegränsningar + + Inte slutfört ännu + Förfluten tid + Max IOB är korrekt angivet + BG tillgängligt från vald källa + Loop aktiverad + APS vald + Closed loop aktiverad + Mål + Inlärningsprogram + Vill du starta om målet? Du kan förlora de steg du gjort hittills. + Rensa avslutade + Rensa påbörjade diff --git a/plugins/constraints/src/main/res/values-tr-rTR/exam.xml b/plugins/constraints/src/main/res/values-tr-rTR/exam.xml index 9e8cc068b7..71e5f8380a 100644 --- a/plugins/constraints/src/main/res/values-tr-rTR/exam.xml +++ b/plugins/constraints/src/main/res/values-tr-rTR/exam.xml @@ -59,7 +59,6 @@ Kan şekeri hedefinizi değiştirmeden bırakın. Kan şekeri, hipo geçici hedefinizin altına düşene kadar bekleyin ve ardından 15 g hızlı etkili karbonhidrat yiyin. https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - Döngüyü Devre Dışı bırakma/Askıya alma Döngü devre dışı bırakıldığında/askıya alındığında insülin alır mıyım? Evet, bazal insülin verilmeye devam ediyor. Hayır, insülin iletimi durdurulur. @@ -149,7 +148,6 @@ Profili %150\'ye ayarlamak karbonhidratların daha uzun sürede emilmesini sağlar Profili %150\'ye ayarlamak karbonhidratların daha kısa sürede emilmesini sağlar Profili %150\'ye ayarlamak hesaplanan karbonhidrat emilimini etkilemez - Aktif İnsülin (AİNS) AİNS değeri, verilen geçici bazallardan etkilenir. Kan şekeriniz hedefin altına düştüğünde yüksek geçici bazal verilmeyecektir. Egzersiz yapmadığınız halde uzun bir dönem için negatif AİNS, profilinizin çok güçlü olduğunu ve ayarlarınızda daha az insüline ihtiyaç duyulduğunu gösterir. diff --git a/plugins/constraints/src/main/res/values-tr-rTR/strings.xml b/plugins/constraints/src/main/res/values-tr-rTR/strings.xml index bb9440f446..60355c3d2b 100644 --- a/plugins/constraints/src/main/res/values-tr-rTR/strings.xml +++ b/plugins/constraints/src/main/res/values-tr-rTR/strings.xml @@ -2,22 +2,19 @@ - 24 saat veya daha kısa süre içinde yaz saati değişikliği - Yaz Saati Uygulaması 3 saatten daha kısa bir süre önce değişti - Kapalı döngü devre dışı - Dahili depolama biriminden en az %1$d MB yer kaldı! Döngü devre dışı! - eski sürüm - çok eski sürüm - Uygulamanın süresi doldu - En az %1$d gündür yeni sürüm mevcut! %2$d gün sonra LGS\'ye (Düşük Glukoz gönderimine) dönülecek, %3$d gün sonra da döngü devre dışı bırakılacaktır - Geçersiz bir sürüm çalıştırdığınızı tespit ettik. Döngü devre dışı! - Sürüm %1$s mevcut - %1$s sürümünün süresi %2$s tarihinde sona eriyor - Kullanılan veriler yeniden hesaplandı - KŞ çok yakın:\n%1$s\n%2$s - tekrar hesaplandı - çift giriş + Düz veri. Yanlış kabul edildi + + %2$s\'den dolayı karbonhidratlar %1$d g ile sınırlandırılıyor + Pompa geçici bazal özellikli değil + Kapalı Döngü tercihlerde devre dışı bırakıldı + Geliştirici sürümü çalışıyor. Kapalı Döngü devre dışı. + Yayma bolus çalıştığı için kapalı döngü devre dışı bırakıldı + Aktif KŞ kaynağı gelişmiş filtrelemeyi desteklemediği için SMB (Super Micro Bolus) her zaman ve karbonhidratlardan sonra devre dışı bırakıldı + Açık Döngü modunda SMB\'ye (Super Micro Bolus) izin verilmiyor + tercihlerde maksimum değer + diff --git a/plugins/constraints/src/main/res/values-zh-rCN/exam.xml b/plugins/constraints/src/main/res/values-zh-rCN/exam.xml index 7148e5a434..46a8a8e815 100644 --- a/plugins/constraints/src/main/res/values-zh-rCN/exam.xml +++ b/plugins/constraints/src/main/res/values-zh-rCN/exam.xml @@ -51,7 +51,6 @@ 让你的血糖目标保持不变。 等血糖值低于你的低血糖警戒线之后,吃15克速升的活性碳水合物。 https://androidaps.readthedocs.io/en/latest/EN/Usage/temptarget.html#activity-temp-target - 禁用/暂停闭环 在禁用/暂停闭环时,我是否接收了胰岛素输注? 是的,胰岛素基础率仍在继续输注。 不,胰岛素停止输注。 @@ -92,7 +91,6 @@ https://androidaps.readthedocs.io/en/latest/EN/Installing-AndroidAPS/Update-to-new-version.html#troubleshooting https://www.facebook.com/groups/AndroidAPSUsers/ https://discord.gg/4fQUWHZ4Mw - 胰岛素插件 在超速效Oref插件中你应该使用哪种胰岛素? Fiasp®速效门冬胰岛素(超速效) 诺和锐®/门冬胰岛素® @@ -128,7 +126,6 @@ 指定一个150%的配置文件切换会更快吸收碳水 指定一个150%的配置文件切换会更快吸收碳水 指定一个150%的配置文件切换不会影响碳水吸收 - 活性胰岛素(IOB) 活性胰岛素IOB数值受发布的临时基础率影响。 当您的血糖低于目标值时,不会被给予高临时基础率。 在没有运动的情况下,活性胰岛素IOB长时间负数表明你的个人配置太强,你需要在配置中减少的胰岛素用量。 diff --git a/plugins/constraints/src/main/res/values-zh-rCN/strings.xml b/plugins/constraints/src/main/res/values-zh-rCN/strings.xml index 3cbe0046ba..87a84b754d 100644 --- a/plugins/constraints/src/main/res/values-zh-rCN/strings.xml +++ b/plugins/constraints/src/main/res/values-zh-rCN/strings.xml @@ -2,21 +2,32 @@ - 在24小时或更少时间内变更\"夏令时\" - 夏令时变更在三小时内-已禁用闭环 - 旧版本 - 非常旧版本 - 应用版本已过期。 - 新版本已发布至少%1$d天!将在%2$d天后回退到LGS (低血糖维持模式),闭环功能将在%3$d天后禁用。 - 我们检测到您运行的版本无效。 已禁用循环! - 版本 %1$s 可用 - 版本 %1$s 将在 %2$s 过期 - 重新计算的数据 - 血糖间隔太近:\n%1$s\n%2$s - 重新计算 - 双重条目 + + 由于 %2$s, 将碳水化合物限制为 %1$d 克 + 这个泵无法设置临时基础率 + 在参数选项中禁用了闭环模式 + 正在运行开发版本,闭环被禁用了 + 由于运行扩展大剂量而禁用了闭环 + SMB always and after carbs disabled 因为实时的血糖来源不支持高级筛选 + 在开环模式下不允许使用SMB-微型大剂量 + 在参数选项里的最大值 + 硬限制 + 治疗安全 + + 尚未完成 + 已用时间 + 合理地设置最大 IOB + 所选的血糖值来源的血糖是可用的 + 闭环启用了 + APS已选择 + 闭环模式启用了 + 目标 + 学习计划 + 你想要重置已启动的目标? 你会失去已有的进度。 + 清除已完成 + 清除已启动 diff --git a/plugins/insulin/src/main/java/info/nightscout/insulin/InsulinOrefFreePeakPlugin.kt b/plugins/insulin/src/main/java/info/nightscout/insulin/InsulinOrefFreePeakPlugin.kt index 30ed94d058..60582ac68f 100644 --- a/plugins/insulin/src/main/java/info/nightscout/insulin/InsulinOrefFreePeakPlugin.kt +++ b/plugins/insulin/src/main/java/info/nightscout/insulin/InsulinOrefFreePeakPlugin.kt @@ -1,8 +1,8 @@ package info.nightscout.insulin import dagger.android.HasAndroidInjector -import info.nightscout.core.extensions.putInt -import info.nightscout.core.extensions.storeInt +import info.nightscout.core.utils.extensions.putInt +import info.nightscout.core.utils.extensions.storeInt import info.nightscout.interfaces.Config import info.nightscout.interfaces.insulin.Insulin import info.nightscout.interfaces.profile.ProfileFunction diff --git a/plugins/insulin/src/main/res/values-af-rZA/strings.xml b/plugins/insulin/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 0000000000..5fb6d9b49a --- /dev/null +++ b/plugins/insulin/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,13 @@ + + + + Insulien voorkeure vir Humalog en NovoRapid / NovoLog + Insulien voorkeure vir Fiasp + Laat jou toe om die piek van die insulien aktiwiteit definieer en behoort slegs gebruik te word deur gevorderde gebruikers + INS + IAB kurwe piek tyd + Piek tyd [min] + Vry-piek Oref + Snelaksie Oref + DIA van %1$f is te kort - %2$f in stede gebruik! + diff --git a/plugins/insulin/src/main/res/values-bg-rBG/strings.xml b/plugins/insulin/src/main/res/values-bg-rBG/strings.xml new file mode 100644 index 0000000000..231eb1958f --- /dev/null +++ b/plugins/insulin/src/main/res/values-bg-rBG/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Действие на инсулините Humalog и NovoRapid / NovoLog + Действие на инсулин Fiasp + Действие на инсулин Lyumjev + Позволява да зададете сами пика на инсулиновата активност (не използвайте, ако сте нови потребители) + ИНС + Пик на кривата на IOB + Време на пик [мин.] + Със свободен пик по Oref + Бързодействащ по Oref + DIA от %1$f е твърде кратка - използвай %2$f вместо това! + diff --git a/plugins/insulin/src/main/res/values-ca-rES/strings.xml b/plugins/insulin/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 0000000000..8e232783a9 --- /dev/null +++ b/plugins/insulin/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Configuració preestablerta per insulina Humalog i NovoRapid/NovoLog + Configuració preestablerta per insulina Fiasp + Configuració preestablerta per insulina Lyumjev + Permet definir el pic d\'activitat de la insulina. A utilitzar només per usuaris avançats + INS + Pic de la corba IOB + Temps del pic [min] + Oref sense pic + Oref ràpida + DIA de %1$f massa curt - utilitzant %2$f! + diff --git a/plugins/insulin/src/main/res/values-cs-rCZ/strings.xml b/plugins/insulin/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 0000000000..c826e5ddc5 --- /dev/null +++ b/plugins/insulin/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Předvolba pro Novorapid + Předvolba pro Fiasp + Předvolba pro Lyumjev + Možnost definice vrcholu účinnosti inzulínu pro pokročilé uživatele + INZ + Čas vrcholu IOB křivky + Vrchol křivky [min] + Volitelný vrchol - Oref + Rychle působící - Oref + Ultra rychlý - Oref + DIA %1$f je příliš krátké - použito %2$f ! + Novorapid + Fiasp + diff --git a/plugins/insulin/src/main/res/values-da-rDK/strings.xml b/plugins/insulin/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 0000000000..f6c2efdda1 --- /dev/null +++ b/plugins/insulin/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Insulin forudindstillet til Humalog og NovoRapid / NovoLog + Insulinforudindstilling til Fiasp + Insulin forudindstillet til Lyumjev + Giver dig mulighed for at definere spidsbelastningen af insulin-aktiviteten og bør kun bruges af avancerede brugere + INS + IOB Kurve Peak-Tid + Spidstidspunkt [min] + Free-Peak Oref + Rapid-Acting Oref + DIA af %1$f for kort - bruger %2$f i stedet! + diff --git a/plugins/insulin/src/main/res/values-de-rDE/strings.xml b/plugins/insulin/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 0000000000..154c9660a7 --- /dev/null +++ b/plugins/insulin/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Insulinprofil für Humalog und NovoRapid / NovoLog + Insulinprofil für Fiasp + Insulin-Voreinstellung für Lyumjev + Erlaubt dir, das Wirkmaximum der Insulinaktivität zu definieren, und sollte nur von erfahrenen Anwendern genutzt werden + INS + Wirkungshoch der IOB-Kurve + Wirkungshoch [min] + Free-Peak Oref + Rapid-Acting Oref + DIA von %1$f ist zu kurz - AAPS nutzt stattdessen %2$f! + diff --git a/plugins/insulin/src/main/res/values-el-rGR/strings.xml b/plugins/insulin/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 0000000000..52f2b7adf4 --- /dev/null +++ b/plugins/insulin/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,14 @@ + + + + Η ινσουλίνη που ορίζεται Humalog και NovoRapid / NovoLog + Η ινσουλίνη που ορίζεται για Fiasp + Προκαθορισμός ινσουλίνης για την Lyumjev + Σας επιτρέπει να ορίσετε το μέγιστο της δράσης της ινσουλίνης και πρέπει να χρησιμοποιείται μόνο από προχωρημένους χρήστες + INS + Μέγιστη τιμή καμπύλης IOB + Μέγιστο καμπύλης [λεπτά] + Προαιρετικά-αιχμή Oref + Γρήγορη δράση - Oref + DIA για %1$f πολύ μικρή - χρησιμοποιήστε %2$f! + diff --git a/plugins/insulin/src/main/res/values-es-rES/strings.xml b/plugins/insulin/src/main/res/values-es-rES/strings.xml new file mode 100644 index 0000000000..cfae27e7b6 --- /dev/null +++ b/plugins/insulin/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Ajustes de insulina preestablecidos para Humalog y NovoRapid/NovoLog + Ajuste de insulina preestablecido para Fiasp + Ajuste de insulina preestablecido para Lyumjev + Permite personalizar el pico de acción máxima de la insulina. Debe ser utilizado únicamente por usuarios avanzados + INS + Tiempo del pico máximo de la curva de IOB + Tiempo del pico máximo de acción de la insulina [min] + Personalizar Pico + Acción Rápida + Ultra-Rápido Oref + DIA de %1$f demasiado corto - usando %2$f! + Novorapid, Novolog, Humalog + Fiasp + diff --git a/plugins/insulin/src/main/res/values-fr-rFR/strings.xml b/plugins/insulin/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 0000000000..3554c0dc9d --- /dev/null +++ b/plugins/insulin/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Réglages pour les insulines Humalog et NovoRapid / NovoLog + Réglages pour l\'insuline Fiasp + Réglages pour l\'insuline Lyumjev + Permet de définir le pic de l’activité de l’insuline et ne doit être utilisé que par les utilisateurs avancés + INS + Délai du pic de la courbe IA + Délai du pic [min] + Profil d\'insuline ajustable Oref + Insuline à Action Rapide Oref + Insuline Ultra Rapide Oref + Durée d’Action pour %1$f trop courte - utiliser %2$f à la place ! + Novorapid, Novolog, Humalog + Fiasp + diff --git a/plugins/insulin/src/main/res/values-ga-rIE/strings.xml b/plugins/insulin/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 0000000000..3a488759e1 --- /dev/null +++ b/plugins/insulin/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,8 @@ + + + + Lyumjev + INS + Free-Peak Oref + Rapid-Acting Oref + diff --git a/plugins/insulin/src/main/res/values-hr-rHR/strings.xml b/plugins/insulin/src/main/res/values-hr-rHR/strings.xml new file mode 100644 index 0000000000..9ae27b2a08 --- /dev/null +++ b/plugins/insulin/src/main/res/values-hr-rHR/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Unaprijed podešen predložak za inzulin Humalog i NovoRapid / NovoLog + Unaprijed podešen predložak za inzulin Fiasp + Unaprijed podešen predložak za inzulin Lyumjev + Omogućuje definiranje vrhunca aktivnosti inzulina i trebaju ga koristiti samo napredni korisnici + INS + Vršno vrijeme IOB krivulje + Špica [min] + Free-Peak Oref + Rapid-Acting Oref + Ultra-Rapid Oref + DIA od %1$f prekratak - umjesto njega koristite %2$f! + Novorapid, Novolog, Humalog + Fiasp + diff --git a/plugins/insulin/src/main/res/values-hu-rHU/strings.xml b/plugins/insulin/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 0000000000..66babda07f --- /dev/null +++ b/plugins/insulin/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,5 @@ + + + + Lyumjev + diff --git a/plugins/insulin/src/main/res/values-it-rIT/strings.xml b/plugins/insulin/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 0000000000..3a56fd08d9 --- /dev/null +++ b/plugins/insulin/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Preset per insulina Humalog e NovoRapid / NovoLog + Preset per insulina Fiasp + Preset per insulina Lyumjev + Ti consente di definire il picco di attività dell\'insulina e dovrebbe essere usato solo dagli utenti avanzati + INS + Tempo picco Curva IOB + Tempo del picco [min] + Free-Peak Oref + Rapid-Acting Oref + Ultra-Rapid Oref + DIA di %1$f troppo breve - uso %2$f. + Novorapid, Novolog, Humalog + Fiasp + diff --git a/plugins/insulin/src/main/res/values-iw-rIL/strings.xml b/plugins/insulin/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 0000000000..c646250f3d --- /dev/null +++ b/plugins/insulin/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + הגדרת אינסולין ל-Humalog ו- NovoRapid / Novolog + הגדרת אינסולין מסוג Fiasp + הגדרת אינסולין מסוג Lyumjev + מאפשר להגדיר את שיא פעילות האינסולין, לשימוש על ידי משתמשים מתקדמים בלבד + אינסולין + שעת שיא של עקומת IOB + זמן שיא [min] + Oref שיא חופשי + Oref אינסולין מהיר + DIA במשך %1$f הוא קצר מדי - משתמש ב-%2$f במקום! + diff --git a/plugins/insulin/src/main/res/values-ja-rJP/strings.xml b/plugins/insulin/src/main/res/values-ja-rJP/strings.xml new file mode 100644 index 0000000000..202a838052 --- /dev/null +++ b/plugins/insulin/src/main/res/values-ja-rJP/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plugins/insulin/src/main/res/values-ko-rKR/strings.xml b/plugins/insulin/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 0000000000..f7b478b739 --- /dev/null +++ b/plugins/insulin/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + 휴마로그와 노보래피드에 대한 인슐린 설정 + 피아스프에 대한 인슐린 설정 + Lyumjev에 대한 인슐린 설정 + 인슐린활동의 피크를 직접 정의할 수 있습니다. 고급 사용자만 사용해야 합니다. + INS + IOB 커브 피크 시간 + 피크 시간 [min] + 사용자지정-피크 Oref + 초속효성 Oref + DIA %1$f는 너무 짧습니다. 대신 %2$f을 사용하세요! + diff --git a/plugins/insulin/src/main/res/values-lt-rLT/strings.xml b/plugins/insulin/src/main/res/values-lt-rLT/strings.xml new file mode 100644 index 0000000000..eefafe7eeb --- /dev/null +++ b/plugins/insulin/src/main/res/values-lt-rLT/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Nustatymai Humalog ir NovoRapid / NovoLog insulinams + Nustatymai Fiasp insulinui + Nustatymai Lyumjev insulinui + Leidžia pasirinkti insulino veikimo piką ir turėtų būti naudojama tik patyrusių vartotojų + INS + AIO kreivės pikas + Piko laikas [min] + Oref be piko + Greito veikimo Oref + IVT %1$f per trumpa - bus naudojama %2$f! + diff --git a/plugins/insulin/src/main/res/values-nl-rNL/strings.xml b/plugins/insulin/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 0000000000..34babec837 --- /dev/null +++ b/plugins/insulin/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Insuline instelling voor Humalog en NovoRapid / NovoLog + Insuline instelling voor Fiasp + Insuline instelling voor Lyumjev + Hiermee kan je de piek van de insulineactiviteit definiëren, mag alleen worden gebruikt door gevorderde gebruikers + INS + IOB curve piek tijd + Piek tijd [min] + Free-Peak Oref + Snel-werkende Oref + Ultra-Rapid Oref + DIA van %1$f te kort - %2$f wordt inplaats gebruikt! + Novorapid, Novolog, Humalog + Fiasp + diff --git a/plugins/insulin/src/main/res/values-no-rNO/strings.xml b/plugins/insulin/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 0000000000..946d281446 --- /dev/null +++ b/plugins/insulin/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Insulininnstillinger for Humalog og NovoRapid / NovoLog + Insulininnstillinger for Fiasp + Insulininnstillinger for Lyumjev + Lar deg definere toppen på insulinaktiviteten og skal kun brukes av avanserte brukere + INS + IOB-kurvens topptid + Topptid [min] + Egendefinert topp Oref + Hurtigvirkende Oref + Ultra-Rapid Oref + DIA på %1$f er for kort - bruker %2$f i stedet! + Novorapid, Novolog, Humalog + Fiasp + diff --git a/plugins/insulin/src/main/res/values-pl-rPL/strings.xml b/plugins/insulin/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 0000000000..617a4262c2 --- /dev/null +++ b/plugins/insulin/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Profil insulinowy dla Humalog i Novorapid / NovoLog + Profil insulinowy dla Fiasp + Profil insulinowy dla Lyumjev + Pozwala na określenie czasu wartości szczytowej działania insuliny i powinno być używane tylko przez zaawansowanych użytkowników + INS + IOB Czas piku krzywej działania insuliny + Czas piku [min] + Swobodny-Pik Oref + Szybko-Działający Oref + DIA %1$f zbyt krótki - przyjmuję %2$f w zamian! + diff --git a/plugins/insulin/src/main/res/values-pt-rBR/strings.xml b/plugins/insulin/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..b5d07bbb0e --- /dev/null +++ b/plugins/insulin/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Predefinição de Insulina para Humalog e NovoRapid / NovoLog + Pré-ajuste de Insulina para Fiasp + Configuração pre-definida para a Insulina Lyumyev + Permite que você defina o pico da atividade de insulina, deve ser usado apenas por usuários avançados + INS + Tempo Pico da curva de IOB + Tempo Pico [min] + Oref Pico-Livre + Oref Ação Rápida + Duração de Acção da Insulina (DIA) de %1$f demasiado curto - corrigido para %2$f! + diff --git a/plugins/insulin/src/main/res/values-pt-rPT/strings.xml b/plugins/insulin/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..590034c689 --- /dev/null +++ b/plugins/insulin/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Predefinição de Insulina Humalog e NovoRapid / NovoLog + Predefinição de Insulina Fiasp + Predefinição para Insulina Lyumjev + Permite definir o pico de atividade da insulina e deve ser usado somente por usuários avançados + INS + Tempo do Pico da curva de IA + Tempo Pico [min] + Oref Pico-Livre + Oref Acção-Rápida + Duração de Acção da Insulina (DIA) de %1$f demasiado curto - corrigido para %2$f! + diff --git a/plugins/insulin/src/main/res/values-ro-rRO/strings.xml b/plugins/insulin/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 0000000000..202a838052 --- /dev/null +++ b/plugins/insulin/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plugins/insulin/src/main/res/values-ru-rRU/strings.xml b/plugins/insulin/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 0000000000..34cce261e1 --- /dev/null +++ b/plugins/insulin/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Предустановки для Humalog и Novorapid / Novolog + Предустановки для Fiasp + Предустановки для Lyumjev + Позволяет самостоятельно задавать пик активности инсулина - только для опытных пользователей + ИНС + Время пика активного инс IOB + Время пика [min] + Свободный от пиков Oref + Быстро действующий Oref + Сверхбыстрый Oref + Значение времени действия инс %1$f слишком мало - применено %2$f! + Новорапид, Хумалог + Фиасп + diff --git a/plugins/insulin/src/main/res/values-sk-rSK/strings.xml b/plugins/insulin/src/main/res/values-sk-rSK/strings.xml new file mode 100644 index 0000000000..4afb8f4947 --- /dev/null +++ b/plugins/insulin/src/main/res/values-sk-rSK/strings.xml @@ -0,0 +1,18 @@ + + + + Lyumjev + Predvoľba pre inzulín Humalog a Novorapid + Predvoľba pre inzulín Fiasp + Predvoľba pre inzulín Lyumjev + Umožňuje definovať vrchol účinnosti inzulínu a malo by byť používané iba pokročilými užívateľmi + INZ + Čas vrcholu IOB krivky + Vrchol krivky [min] + Voliteľný vrchol - Oref + Rýchlo pôsobiaci - Oref + Ultra rýchly - Oref + DIA %1$f je príliš krátke - AAPS namiesto toho použilo %2$f ! + Novorapid, Novolog, Humalog + Fiasp + diff --git a/plugins/insulin/src/main/res/values-sr-rCS/strings.xml b/plugins/insulin/src/main/res/values-sr-rCS/strings.xml new file mode 100644 index 0000000000..72aa6dbdc2 --- /dev/null +++ b/plugins/insulin/src/main/res/values-sr-rCS/strings.xml @@ -0,0 +1,8 @@ + + + + Unapred podešena postavka insulina za Humalog i NovoRapid / NovoLog + Unapred podešena postavka insulina za Fiasp + Unapred podešena postavka insulina za Lyumjev + Omogućava definisanje vrhunca aktivnosti insulina i trebaju ga koriste samo napredni korisnici + diff --git a/plugins/insulin/src/main/res/values-sv-rSE/strings.xml b/plugins/insulin/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 0000000000..c067f3fa91 --- /dev/null +++ b/plugins/insulin/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev + Insulininställning för vanliga direktverkande insuliner som Humalog, Lispro, Apidra och Novorapid/Novolog + Insulininställning för ultrasnabba insuliner, t ex Fiasp + Insulininställning för Lyumjev + Låter dig ställa in tidpunkten för toppen på insulinets aktivitet. Bör bara användas av avancerade användare + INS + Peaktid för IOB-kurvan + Peaktid [min] + Free-Peak Oref + Rapid-Acting Oref + %1$f tim DIA är för kort. Använder %2$f istället! + diff --git a/plugins/insulin/src/main/res/values-tr-rTR/strings.xml b/plugins/insulin/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 0000000000..18be9640f5 --- /dev/null +++ b/plugins/insulin/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,11 @@ + + + + Lyumjev + Humalog ve NovoRapid / NovoLog için İnsülin Profili + Fiasp için insülin Profili + Lyumjev için insülin ayarı + İnsülin aktivitesinin zirvesini tanımlamanıza izin verir ve yalnızca ileri düzey kullanıcılar tarafından kullanılmalıdır. + İNS + DIA %1$f çok kısa - bunun yerine %2$f kullanıyor! + diff --git a/plugins/insulin/src/main/res/values-zh-rCN/strings.xml b/plugins/insulin/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..fc0ef79491 --- /dev/null +++ b/plugins/insulin/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,15 @@ + + + + Lyumjev(超速效赖脯胰岛素) + 胰岛素预设为 Humalog(优泌乐) 和 NovoRapid(门冬)/NovoLog(诺和锐) + Fiasp 胰岛素预设 + 预设为Lyumjev速效赖脯胰岛素 + 允许您定义胰岛素作用的峰值, 并且只应由高级用户使用 + INS + IOB 曲线峰值时间 + 峰值时间 [min] + Free-Peak Oref + 速效 Oref + DIA of %1$f 太短了,请使用 %2$f 代替 + diff --git a/plugins/main/src/main/AndroidManifest.xml b/plugins/main/src/main/AndroidManifest.xml index aff7ae7188..1bcf09f595 100644 --- a/plugins/main/src/main/AndroidManifest.xml +++ b/plugins/main/src/main/AndroidManifest.xml @@ -1,11 +1,14 @@ + + - diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewPlugin.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewPlugin.kt index be8198fd6c..09facd21a8 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewPlugin.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/OverviewPlugin.kt @@ -7,14 +7,14 @@ import androidx.preference.SwitchPreference import dagger.android.HasAndroidInjector import info.nightscout.core.events.EventIobCalculationProgress import info.nightscout.core.events.EventNewNotification -import info.nightscout.core.extensions.putDouble -import info.nightscout.core.extensions.putInt -import info.nightscout.core.extensions.putString -import info.nightscout.core.extensions.storeDouble -import info.nightscout.core.extensions.storeInt -import info.nightscout.core.extensions.storeString import info.nightscout.core.graph.OverviewData import info.nightscout.core.ui.dialogs.OKDialog +import info.nightscout.core.utils.extensions.putDouble +import info.nightscout.core.utils.extensions.putInt +import info.nightscout.core.utils.extensions.putString +import info.nightscout.core.utils.extensions.storeDouble +import info.nightscout.core.utils.extensions.storeInt +import info.nightscout.core.utils.extensions.storeString import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.Config import info.nightscout.interfaces.Overview diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/dialogs/EditQuickWizardDialog.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/dialogs/EditQuickWizardDialog.kt index 78e3fac0f1..217b5adc92 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/overview/dialogs/EditQuickWizardDialog.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/overview/dialogs/EditQuickWizardDialog.kt @@ -10,9 +10,9 @@ import android.view.WindowManager import com.google.android.material.timepicker.MaterialTimePicker import com.google.android.material.timepicker.TimeFormat import dagger.android.support.DaggerDialogFragment -import info.nightscout.androidaps.utils.extensions.selectedItemPosition -import info.nightscout.androidaps.utils.extensions.setEnableForChildren -import info.nightscout.androidaps.utils.extensions.setSelection +import info.nightscout.core.ui.extensions.selectedItemPosition +import info.nightscout.core.ui.extensions.setEnableForChildren +import info.nightscout.core.ui.extensions.setSelection import info.nightscout.core.wizard.QuickWizard import info.nightscout.core.wizard.QuickWizardEntry import info.nightscout.plugins.R diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/WearFragment.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/WearFragment.kt index 12d516917d..57cd89ec9d 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/WearFragment.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/WearFragment.kt @@ -5,9 +5,9 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import dagger.android.support.DaggerFragment -import info.nightscout.androidaps.plugins.general.wear.events.EventWearUpdateGui import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.plugins.databinding.WearFragmentBinding +import info.nightscout.plugins.general.wear.events.EventWearUpdateGui import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventMobileToWear diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/events/EventWearUpdateGui.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/events/EventWearUpdateGui.kt index e7cb807f01..b8c4761358 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/events/EventWearUpdateGui.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/events/EventWearUpdateGui.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.general.wear.events +package info.nightscout.plugins.general.wear.events import info.nightscout.rx.events.Event diff --git a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt index 8e9696e0f4..13a8ff47f9 100644 --- a/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt +++ b/plugins/main/src/main/java/info/nightscout/plugins/general/wear/wearintegration/DataLayerListenerServiceMobile.kt @@ -15,7 +15,6 @@ import com.google.android.gms.wearable.PutDataMapRequest import com.google.android.gms.wearable.Wearable import com.google.android.gms.wearable.WearableListenerService import dagger.android.AndroidInjection -import info.nightscout.androidaps.plugins.general.wear.events.EventWearUpdateGui import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Config @@ -27,6 +26,7 @@ import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.receivers.ReceiverStatusStore import info.nightscout.plugins.R import info.nightscout.plugins.general.wear.WearPlugin +import info.nightscout.plugins.general.wear.events.EventWearUpdateGui import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventMobileToWear diff --git a/plugins/main/src/main/res/values-af-rZA/strings.xml b/plugins/main/src/main/res/values-af-rZA/strings.xml index f9a4b38857..fde8d81627 100644 --- a/plugins/main/src/main/res/values-af-rZA/strings.xml +++ b/plugins/main/src/main/res/values-af-rZA/strings.xml @@ -47,19 +47,6 @@ Opgeskort (%1$d m) Lees status gefaal Profiel skakelaar geskep - - Insulien voorkeure vir Humalog en NovoRapid / NovoLog - Insulien voorkeure vir Fiasp - Laat jou toe om die piek van die insulien aktiwiteit definieer en behoort slegs gebruik te word deur gevorderde gebruikers - INS - IAB kurwe piek tyd - Piek tyd [min] - Vry-piek Oref - Snelaksie Oref - Ultra-Snel Oref - DIA van %1$f is te kort - %2$f in stede gebruik! - Novorapid, Novolog, Humalog - Fiasp xds @@ -89,19 +76,6 @@ Foute DIA BAS - - Voltooi, baie mooi gedoen! - Nog nie voltooi nie - Tydsverloop - Maksimum IAB behoorlik gestel - BG beskikbaar vanaf geselekteerde bron - Lus geaktiveer - APS gekies - Geslote modus geaktiveer - OBJ - Onderrig program - Volgende - Vorige Aksies \'n Paar knoppies vir vinnige algemene nutsfunskies @@ -112,17 +86,6 @@ Geskiedenis blaaier Sensor Insulien - - Verlengde bolus is beperk tot %1$.1f U as gevolg van %2$s - Beperk koolhidrate tot %1$d g agv %2$s - Pomp is nie tydelike basale bekwame - Geslote lus modus in voorkeure gedeaktiveer - Veranderende ontwikkelende weergawe. Geslote lus is gedeaktiveerd. - SMB is altyd na koolhidrate versper omdat aktiewe BG bron nie gevorderde filter ondersteun nie - SMB nie toegelaat in open lus modus - maks waarde in voorkeure - harde limiet - Behandelings veiligheid Wys status vlae op tuisskerm Drempel waarskuwings stoor vlak [U] @@ -204,36 +167,6 @@ ACT BEHANDEL SENS - - Virtuele Pomp - Pomp definisie - Bolus: Stap =%1$s\nVerlengde Bolus: [stap%2$s, duur = =%3$smin -%4$sh]\nBasal: stap =%5$s\nTBR: %6$s (deur %7$s), duur =%8$smin -%9$sh\n%10$s - VPOMP - Pomp integrasie vir pompe wat nog nie enige drywer het nie (oop lus) - VIRTUELE POMP - Virtuele pomp instellings - Oplaaistatus aan NS - - NSClient BG - Laai BG data af vanaf Nightscout - xDrip+ - Ontvang BG waardes vana xDrip+. - Eversense App (bygewerk) - Ontvang BG waardes uit die gelapte Eversense toep. - Glimp - Ontvang BG waardes vanaf Glimp. - MM640g - Onvang BG waardes vanaf die 600SeriesAndroidUploader. - Poctech - Ontvang BG waardes van Poctech toepassing - Tomato (MiaoMiao) - Tomato - Ontvang BG waardes vanaf Tomato toep (MiaoMiao toestel) - BG - Stuur BG data na xDrip+ - Xdrip+ kies 640g/Eversense data bron - BG oplaai instellings - Log sensor verander na NS diff --git a/plugins/main/src/main/res/values-bg-rBG/strings.xml b/plugins/main/src/main/res/values-bg-rBG/strings.xml index 782fcaa974..6c1d1ea0de 100644 --- a/plugins/main/src/main/res/values-bg-rBG/strings.xml +++ b/plugins/main/src/main/res/values-bg-rBG/strings.xml @@ -97,21 +97,6 @@ Четенето на статуса се провали Създаден запис - Промяна на профил Продължителността на временния база; трябва да бъде кратна на %1$d минути и по-голяма от 0. - - Lyumjev - Действие на инсулините Humalog и NovoRapid / NovoLog - Действие на инсулин Fiasp - Действие на инсулин Lyumjev - Позволява да зададете сами пика на инсулиновата активност (не използвайте, ако сте нови потребители) - ИНС - Пик на кривата на IOB - Време на пик [мин.] - Със свободен пик по Oref - Бързодействащ по Oref - Ултра бързодействащ по Oref - DIA от %1$f е твърде кратка - използвай %2$f вместо това! - Novorapid Novolog, Humalog - Fiasp xDrip+ линия със статута (часовник) @@ -158,22 +143,6 @@ DIA Цел БАЗА - - Приключихме, Браво! - Все още не сме неприключили - Изминало време - Максимален IOB е зададен правилно - Има данни за КЗ от избрания източник - APS разрешен - Избран APS - APS - Затворен кръг е позволен - Цел - Разучаване на програмата - Искате ли да нулирате прогреса си? - Следващ - Предишен - Изчисти приключение - Изчисти стартираните Действия Бутони за бърз достъп до основни функции @@ -190,18 +159,6 @@ Батерия на помпата Канюла Използване на удължен болус ще спре режим затворен цикъл за времето на болуса. Сигурни ли сте? - - Ограничение на удължен болус до %1$.1f Е поради %2$s - Ограничаване на въглехидрати до %1$d гр. поради %2$s - Помпата не поддържа временен базал - Затворения кръг е забранен в настройките - Използвате dev версия. Затворения кръг е недостъпен за Вас. - Затворен цикъл е недостъпен поради стартиран Удължен болус - SMB \"винаги включен\" и \"след въглехидрати\" е забранен, защото е активен източник на КЗ, който не поддържа необходимата филтрация - SMB не е позволен в режим Отворен кръг - макс. стойност в настройките - твърд лимит - Настройки на сигурността Покажи статус светлини на началния екран Праг за инсулинова възраст [часа] @@ -315,43 +272,6 @@ Леч ЧУВСТВ Графика - - Виртуална помпа тип - Описание на помпата - Болус: Стъпка =%1$s\Удължен болус: [стъпка =%2$s, продължителност =%3$smin -%4$sh] \nБазал: стъпка =%5$s\ nTBR: %6$s (от %7$s), продължителност =%8$sмин -%9$sh\n%10$s - ВП - За помпи, който все още не работят с AndroidAPS(Open Loop) - ВИРТУАЛНА ПОМПА - Настойки Виртуална Помпа - Качва статуса в NS - - КЗ от NS - NS КЗ - Изтегля стойности на КЗ от Nightscout - xDrip+ - Получаване на данни за КЗ от xDrip+. - BYODA - BYODA - Eversense приложение(модифицирано) - Получава данни за КЗ от модифицираното приложение на Eversense. - Glimp - Получава данни за КЗ от Glimp. - MM640g - Получават стойности на КЗ от 600SeriesAndroidUploader. - Poctech - Получавай данни за КЗ от Poctech апликацията. - Глуново - Получавай данните от Glunowo апликацията - Tomato(MяоМяо) - Tomato - Получавай КЗ от Tomato апликация (устройство МяоМяо) - Произволна КЗ - Генерира произволни захари(демо режим) - КЗ - Изпращай данни за КЗ към xDrip+ - В xDrip+ изберете 640g/Eversense за източник на данни - Настройки при качване на КЗ към Nightscout - Записвай смяната на сензор в NS Оригинален изглед Скин за ниска резолюция diff --git a/plugins/main/src/main/res/values-ca-rES/strings.xml b/plugins/main/src/main/res/values-ca-rES/strings.xml index ceb13e5ad8..a45d9d245f 100644 --- a/plugins/main/src/main/res/values-ca-rES/strings.xml +++ b/plugins/main/src/main/res/values-ca-rES/strings.xml @@ -97,21 +97,6 @@ Error en llegir estat Canvi de perfil creat La durada d\'una TBR ha de ser múltiple de %1$d minuts i més gran que 0. - - Lyumjev - Configuració preestablerta per insulina Humalog i NovoRapid/NovoLog - Configuració preestablerta per insulina Fiasp - Configuració preestablerta per insulina Lyumjev - Permet definir el pic d\'activitat de la insulina. A utilitzar només per usuaris avançats - INS - Pic de la corba IOB - Temps del pic [min] - Oref sense pic - Oref ràpida - Oref ultra ràpida - DIA de %1$f massa curt - utilitzant %2$f! - Novorapid, Novolog, Humalog - Fiasp Línia d\'estat d\'xDrip+ (rellotge) @@ -158,22 +143,6 @@ DIA OBJ BAS - - Enllestit, ben fet! - No finalitzat encara - Temps transcorregut - Màx IOB correctament configurada - Glucèmia disponible des de la font seleccionada - Llaç activat - APS seleccionat - Llaç tancat activat - OBJ - Programa d\'aprenentatge - Voleu reiniciar l\'objectiu? Podeu perdre el vostre progrés. - Següent - Previ - Cancel·lar finalització - Cancel·lar inici Accions Alguns botons per accedir ràpid a funcions habituals @@ -190,18 +159,6 @@ Pila de la bomba Cànula L\'ús d\'un bolus estès aturarà el mode llaç tancat mentre duri el bolus. Esteu segurs que voleu això? - - Limitant bolus estès a %1$.1f U a causa de %2$s - Limitant carbs a %1$d g a causa de %2$s - La bomba no té la funcionalitat de basals temporals - Mode llaç tancat desactivat a la configuració - Executant versió de desenvolupament. Llaç tancat no disponible. - Llaç tancat desactivat degut a bolus estès actiu - Les funcions \"SMB sempre\" i \"SMB després de carbohidrats\" estan desactivades pq la font de glucèmia no fa filtrat avançat - SMB no permès en mode llaç obert - valor màxim a la configuració - límit estricte - Seguretat tractaments Mostrar indicadors d\'estat a la pantalla d\'inici Llindar per avís d\'edat de l\'insulina [h] @@ -313,44 +270,6 @@ TRACT SENS Gràfica - - Tipus de bomba virtual - Definició de bomba - Bolus: Pas=%1$s\nBolus estès: [Pas=%2$s, Durada=%3$smin-%4$sh]\nBasal: Pas=%5$s\nTBR: %6$s (per %7$s), Durada=%8$smin-%9$sh\n%10$s - BOMBAV - Integració de bombes d\'insulina per les quals encara no existeix driver/controlador (Llaç obert) - BOMBA VIRTUAL - Configuració bomba virtual - Enviar estat a NS - - Glucèmia NSClient - Glucèmia NS - Descarrega dades de glucèmia des de Nightscout - xDrip+ - Rebre valors de glucèmia de xDrip+. - Dexcom (BYODA) - BYODA - Rebre els valors de glucosa de l\'aplicació Dexcom \'Build Your Own Device\'. - App Eversense (\"parxejada\") - Rebre valors de glucèmia de l\'app Eversense \"parxejada\". - Glimp - Rebre valors de glucèmia de Glimp. - MM640g - Rebre valors de glucèmia del 600SeriesAndroidUploader. - Poctech - Rebre valors de glucèmia de l\'app Poctech - Glunovo - Rebre valors de l\'app Glunovo - Tomato (MiaoMiao) - Tomato - Rebre valors de glucèmia de l\'app Tomato (dispositiu MiaoMiao) - Glucèmia aleatòria - Generar dades de glucèmia aleatòries (Només mode demo) - Glucèmia - Enviar dades de glucèmia a xDrip+ - A xDrip+ seleccionar font de dades 640g/Eversense - Configuració enviament dades glucèmia - Enregistrar canvi de sensor a NS Tema original Tema baixa resolució diff --git a/plugins/main/src/main/res/values-cs-rCZ/strings.xml b/plugins/main/src/main/res/values-cs-rCZ/strings.xml index 0c1a09254e..67f6bfc7cf 100644 --- a/plugins/main/src/main/res/values-cs-rCZ/strings.xml +++ b/plugins/main/src/main/res/values-cs-rCZ/strings.xml @@ -101,21 +101,6 @@ Přepnutí profilu vytvořeno Trvání dočasného bazálu musí být násobkem %1$d minut a musí být větší než 0. QR kód pro nastavení jednorázového hesla - - Lyumjev - Předvolba pro Novorapid - Předvolba pro Fiasp - Předvolba pro Lyumjev - Možnost definice vrcholu účinnosti inzulínu pro pokročilé uživatele - INZ - Čas vrcholu IOB křivky - Vrchol křivky [min] - Volitelný vrchol - Oref - Rychle působící - Oref - Ultra rychlý - Oref - DIA %1$f je příliš krátké - použito %2$f ! - Novorapid - Fiasp Stavová řádka xDrip+ (hodinky) @@ -171,23 +156,6 @@ DIA CÍL BAZ - - Hotovo, gratulujeme! - Nedokončeno - Čas - Maximální IOB nastaveno správně - Glykémie dostupné z vybraného zdroje - Služba synchronizace má oprávnění k zápisu - Smyčka povolena - APS vybráno - Uzavřená smyčka povolena - CÍLE - Výukový program - Chcete resetovat začátek cíle? Můžete přijít o svůj pokrok. - Další - Zpět - Vymazat dokončeno - Vymazat start Akce Tlačítka k běžně používaným úkonům @@ -198,7 +166,7 @@ Nástroje Prohlížeč historie Senzor - věk: + stáří: úroveň: Inzulín Baterie pumpy @@ -207,18 +175,6 @@ stáří kanyly stáří náplasťové pumpy Náplasťová pumpa - - Prodloužený bolus omezen na %1$.1f U: %2$s - Sacharidy omezeny na %1$d g: %2$s - Pumpa nepodporuje dočasné bazály - Uzavřená smyčka zakázána v nastavení - Běží DEV verze. Uzavřená smyčka je zakázána. - Uzavřená smyčka je zastavena kvůli běžícímu prodlouženému bolusu - \"SMB vždy\" a \"po jídle\" zakázáno protože zdroj glykémie nepodporuje rozšířené filtrování - SBM není povoleno v otevřené smyčce - maximální hodnota v nastavení - pevný limit - Bezpečnost zadání ošetřeni Zobrazit stavové indikátory na domovské obrazovce Úroveň varování stáří kanyly [h] @@ -345,50 +301,6 @@ SENZ Měřítko grafu Graf - - Typ virtuální pumpy - Definice pumpy - Bolus: Krok =%1$s\nProdl. bolus: [Krok=%2$s, Délka=%3$smin-%4$sh]\nBazál: Krok=%5$s\nDoč. bazál: %6$s (%7$s), Délka=%8$smin-%9$sh\n%10$s - VPUM - Ovladač pumpy pro uživatele bez podporované pumpy (Otevřená smyčka) - VIRTUÁLNÍ PUMPA - Nastavení virtuální pumpy - Nahrávat status do NS - - Glykémie z NS - NSGL - Příjem glykémií z Nightscoutu - xDrip+ - Příjem glykémií z xDripu+. - BYODA - BYODA - Příjem hodnot glykémií z upravené aplikace Dexcom (BYODA). - Eversense aplikace (upravená) - Příjem glykémií z modifikované Eversense aplikace. - Glimp - Příjem glykémií z Glimpu. - MM640g - Příjem glykémií z Uploaderu 640G. - Poctech - Získávat glykémie z aplikace Poctech - Glunovo - Získávat glykémie z aplikace Glunovo - Intelligo - Přijímat hodnoty z aplikace Intelligo - Tomato (MiaoMiao) - Tomato - Přijímat hodnoty glykémií z Tomato aplikace (MiaoMiao zařízení) - GlucoRx Aidex - Aidex - Přijímat hodnoty glykémie ze senzoru GlucoRx Aidex. - Náhodná glykémie - Generovat náhodná data glykémie (pouze režim Demo) - Gly - Odesílat data do xDrip+ - V xDrip+ vyberte zdroj dat 640g/Eversense - Nastavení nahrávání glykémií - Zaznamenávat výměnu senzoru do NS - Vytvořit událost \"Výměna senzoru\" v NS automaticky po spuštění senzoru Původní vzhled Vzhled pro nízké rozlišení diff --git a/plugins/main/src/main/res/values-da-rDK/strings.xml b/plugins/main/src/main/res/values-da-rDK/strings.xml index b1cfabde34..69a8eaad0a 100644 --- a/plugins/main/src/main/res/values-da-rDK/strings.xml +++ b/plugins/main/src/main/res/values-da-rDK/strings.xml @@ -100,21 +100,6 @@ Profil switch oprettet TBR-varigheden skal være et multiplum af %1$d minutter og større end 0. QR-kode til opsætning af engangs kodeord - - Lyumjev - Insulin forudindstillet til Humalog og NovoRapid / NovoLog - Insulinforudindstilling til Fiasp - Insulin forudindstillet til Lyumjev - Giver dig mulighed for at definere spidsbelastningen af insulin-aktiviteten og bør kun bruges af avancerede brugere - INS - IOB Kurve Peak-Tid - Spidstidspunkt [min] - Free-Peak Oref - Rapid-Acting Oref - Ultra-Rapid Oref - DIA af %1$f for kort - bruger %2$f i stedet! - Novorapid, Novolog, Humalog - Fiasp xDrip Statuslinje (ur) @@ -170,22 +155,6 @@ DIA MÅL BAS - - Fuldført, godt klaret! - Ikke afsluttet endnu - Tid forløbet - Maksimal IOB sat korrekt - BS tilgængelig fra valgte kilde - Loop aktiveret - APS valgt - Lukket tilstand aktiveret - OBJ - Oplæringsprogram - Vil du nulstille objektiv start? Du kan miste dine fremskridt. - Næste - Forrige - Ryd færdigt - Ryd startet Handlinger Nogle knapper til hurtigt at få adgang til almindelige funktioner @@ -205,18 +174,6 @@ Indstik alder patch pumpe alder Patch pumpe - - Begrænser udvidet bolus til %1$.1f IE på grund af %2$s - Begrænser kulhydrater til %1$d g på grund af %2$s - Pumpe er ikke egnet til midlertidig basal - Lukket loop tilstand deaktiveret i præferencer - Kører dev version. Lukket loop er deaktiveret. - Lukket loop deaktiveret på grund af kørsel af forlænget bolus - SMB altid og efter kulhydrater deaktiveret, fordi den aktive BS kilde ikke understøtter avanceret filtrering - SMB er ikke tilladt i åben loop mode - max værdi i præferencer - hård grænse - Behandlings sikkerhed Vis statuslys på startskærm Grænseværdi for insulin-alder [h] @@ -342,49 +299,6 @@ SENS Graf skala Graf - - Virtuel pumpe type - Pumpe Definition - Bolus: Trin=%1$s\nForlænget Bolus: [Trin=%2$s, Varighed=%3$smin-%4$sh]\nBasal: Trin=%5$s\nTBR: %6$s (by %7$s), Varighed=%8$smin-%9$sh\n%10$s - VPUMPE - Pumpeintegration til pumper, som endnu ikke har nogen driver (Åbent Loop) - VIRTUEL PUMPE - Indstillinger for virtuel pumpe - Upload status til NS - - NSClient BS - NS BS - Downloader BG data fra Nightscout - xDrip+ - Modtag BG-værdier fra xDrip+. - BYODA - BYODA - Modtag BS-værdier fra \'Byg din egen Dexcom App\'. - Eversense App (patched) - Modtag BG værdier fra den patchede Eversense app. - Glimp - Modtag BG-værdier fra Glimp. - MM640g - Modtag BG-værdier fra 600SeriesAndroidUploader. - Poctech - Modtag BS-værdier fra Poctech app - Glunovo - Modtag værdier fra Glunovo app - Intelligo - Modtag værdier fra Intelligo-appen - Tomato (MiaoMiao) - Tomato - Modtag BS-værdier fra Tomato-appen (MiaoMiao enhed) - GlucoRx Aidex - Aidex - Modtag BG-værdier fra GlucoRx Aidex CGMS. - Tilfældigt BS - Generér tilfældige BS-data (kun demotilstand) - BG - Seng BS data til xDrip+ - I xDrip+ vælg 640g/Eversense datakilde - BS upload indstillinger - Log sensor ændring til NS Original udseende Lav kvalitets udseende diff --git a/plugins/main/src/main/res/values-de-rDE/strings.xml b/plugins/main/src/main/res/values-de-rDE/strings.xml index 0bff22de4a..21ed1d0a1b 100644 --- a/plugins/main/src/main/res/values-de-rDE/strings.xml +++ b/plugins/main/src/main/res/values-de-rDE/strings.xml @@ -98,21 +98,6 @@ Profilwechsel wurde erstellt Die TBR-Dauer muss ein Vielfaches von %1$d Minuten und größer als 0 sein. QR Code für einmaliges Passwort einrichten - - Lyumjev - Insulinprofil für Humalog und NovoRapid / NovoLog - Insulinprofil für Fiasp - Insulin-Voreinstellung für Lyumjev - Erlaubt dir, das Wirkmaximum der Insulinaktivität zu definieren, und sollte nur von erfahrenen Anwendern genutzt werden - INS - Wirkungshoch der IOB-Kurve - Wirkungshoch [min] - Free-Peak Oref - Rapid-Acting Oref - Ultra-Rapid Oref - DIA von %1$f ist zu kurz - AAPS nutzt stattdessen %2$f! - NovoRapid, NovoLog, Humalog - Fiasp xDrip+ Statuszeile (Uhr) @@ -168,21 +153,6 @@ DIA ZIEL BAS - - Abgeschlossen, gut gemacht! - Verstrichene Zeit - Maximales IOB richtig gesetzt - BZ verfügbar von gewählter Quelle - Loop aktiviert - APS ausgewählt - Closed mode aktiviert - ZIEL - Das Programm kennenlernen - Möchtest Du den Start der Ziele zurücksetzen? Du verlierst Deine Fortschritte. - Weiter - Zurück - Ziel erneut öffnen - Ziel neu starten Aktionen Einige Schaltflächen, um auf häufig verwendete Funktionen zugreifen zu können. @@ -202,18 +172,6 @@ Kanülenalter Alter Patchpumpe Patch-Pumpe - - Begrenze verzögerten Bolus auf %1$.1f IE wegen %2$s - Begrenze Kohlenhydrate auf %1$d g wegen %2$s - Pumpe verfügt nicht über temporäre Basalraten - Closed-Loop-Modus in den Einstellungen deaktiviert - Entwickler-Version, Closed Loop ist nicht verfügbar. - Closed Loop wegen Verzögerungsbolus unterbrochen - SMB wird immer und nach Kohlenhydraten deaktiviert, weil die aktive BZ-Quelle keine geeignete Filterung der Werte unterstützt. - SMB sind im Open Loop Modus nicht erlaubt - Max. Wert in den Einstellungen - festem Grenzwert - Sicherheitseinstellungen der Behandlungen Statusanzeige auf Homescreen Warnschwelle Insulinalter [h] @@ -339,49 +297,6 @@ SENS Diagrammskala Diagramm - - Typ der virtuellen Pumpe - Pumpen-Definition - Bolus: Schritt=%1$s\nVerzögerter Bolus: [Schritt=%2$s, Dauer=%3$smin-%4$sh]\nBasal: Schritt=%5$s\nTBR: %6$s (bei %7$s), Dauer=%8$smin-%9$sh\n%10$s - VP - Pumpenintegration für Pumpen, die noch nicht über einen Treiber verfügen (Open Loop) - VIRTUELLE PUMPE - Einstellungen der virtuellen Pumpe - Status zu Nightscout hochladen - - Nightscout-Client BZ - NS BZ - Lade Blutzuckerdaten von Nightscout - xDrip+ - Empfange Blutzuckerwerte von xDrip+. - BYODA - BYODA - Erhalte BZ-Werte von der \'Build Your Own Dexcom App\'. - Eversense App (gepatcht) - Empfange BZ-Werte von der gepatchten Eversense-App. - Glimp - Empfange Blutzuckerwerte von Glimp. - MM640g - Empfange Blutzuckerwerte vom 600SeriesAndroidUploader. - Poctech - Empfange Blutzucker-Werte von der Poctech-App. - Glunovo - Werte von der Glunovo App erhalten - Intelligo - Empfange Werte von der Intelligo App - Tomato (MiaoMiao) - Tomato - Empfange Blutzucker-Werte von der Tomato-App (MiaoMiao-Geräte) - GlucoRx Aidex - Aidex - Erhalte BG-Werte von GlucoRx Aidex CGMS. - Zufalls-BZ - Zufalls-BZ Daten erstellen (nur Demo-Modus) - BZ - Sende BZ-Werte zu xDrip+ - Wähle in xDrip+ 640g/Eversense als Daten-Quelle. - BZ Upload Einstellungen - Speichere Sensor Wechsel in Nightscout Ursprüngliches Erscheinungsbild Darstellung niedrige Auflösung diff --git a/plugins/main/src/main/res/values-el-rGR/strings.xml b/plugins/main/src/main/res/values-el-rGR/strings.xml index 12066ace7b..db079c09e9 100644 --- a/plugins/main/src/main/res/values-el-rGR/strings.xml +++ b/plugins/main/src/main/res/values-el-rGR/strings.xml @@ -75,20 +75,6 @@ Αναστολή (%1$d m) Η ανάγνωση κατάστασης απέτυχε Δημιουργήθηκε αλλαγή προφίλ - - Η ινσουλίνη που ορίζεται Humalog και NovoRapid / NovoLog - Η ινσουλίνη που ορίζεται για Fiasp - Προκαθορισμός ινσουλίνης για την Lyumjev - Σας επιτρέπει να ορίσετε το μέγιστο της δράσης της ινσουλίνης και πρέπει να χρησιμοποιείται μόνο από προχωρημένους χρήστες - INS - Μέγιστη τιμή καμπύλης IOB - Μέγιστο καμπύλης [λεπτά] - Προαιρετικά-αιχμή Oref - Γρήγορη δράση - Oref - Έξτρα Γρήγορη δράση - Oref - DIA για %1$f πολύ μικρή - χρησιμοποιήστε %2$f! - Novorapid, Novolog, Humalog - Fiasp xds @@ -118,19 +104,6 @@ Σφάλματα DIA BAS - - Ολοκληρώθηκε, συγχαρητήρια! - Δεν ολοκληρώθηκε ακόμη - Ο χρόνος που πέρασε - Το μέγιστο IOB έχει ρυθμιστεί σωστά - BG διαθέσιμη από επιλεγμένη πηγή - Κύκλωμα ενεργοποιημένο - Επιλέχθηκε APS - Ενεργοποιήθηκε η κλειστή λειτουργία - ΣΤΟΧΟΙ - Πρόγραμμα εκμάθησης - Επόμενο - Προηγ Ενέργειες Ορισμένα πλήκτρα για γρήγορη πρόσβαση σε κοινά χαρακτηριστικά @@ -141,17 +114,6 @@ Ιστορικό περιήγησης Αισθητήρας Ινσουλίνη - - Περιορίζεται το εκτεταμένο bolus σε %1$.1f U λόγω %2$s - Περιορίζονται οι υδατάνθρακες σε %1$d g λόγω %2$s - Η αντλία δεν υποστηρίζει προσωρινό βασικό ρυθμό - Το κλειστό κύκλωμα είναι απενεργοποιημένο στις Επιλογές - Εκτελείται έκδοση Dev. Το κλειστό κύκλωμα είναι απενεργοποιημένο. - Το SMB πάντα και μετά το γεύμα απενεργοποιείται επειδή η ενεργή πηγή BG δεν υποστηρίζει προηγμένο φιλτράρισμα - To SMB δεν επιτρέπεται σε λειτουργία ανοιχτού κυκλώματος - μέγιστη τιμή στις Επιλογές - σταθερό όριο - Ασφάλεια Θεραπειών Εμφάνιση του φωτισμού κατάστασης στην αρχική οθόνη Όριο προειδοποίησης για την ηλικία της ινσουλίνης[h] @@ -245,36 +207,6 @@ -BGI ΘΕΡΑΠ SENS - - Τύπος εικονικής αντλίας - Ορισμός Αντλίας - Bolus: Άμεσο=%1$s\nΕκτεταμένο Bolus: [Άμεσο=%2$s, Διάρκεια=%3$smin-%4$sh]\nΒασικός: Άμεσο=%5$s\nTBR: %6$s (με %7$s), Διάρκεια=%8$smin-%9$sh\n%10$s - Εικ. αντλία - Ολοκλήρωση αντλίας για αντλίες που δεν έχουν κανέναν οδηγό ακόμα (Ανοιχτό Κύκλωμα) - ΕΙΚΟΝΙΚΗ ΑΝΤΛΙΑ - Ρυθμίσεις Εικονικής αντλίας - Φόρτωση κατάστασης στο NS - - NSClient BG - Λήψη δεδομένων BG από Nightscout - xDrip+ - Λάβετε τις τιμές BG από το xDrip+. - Eversense App (τροποποιημένη) - Λάβετε τις τιμές BG από την εφαρμογή του Eversense. - Glimp - Λάβετε τις τιμές BG από το Glimp. - MM640g - Λάβετε τις τιμές BG από το 600SeriesAndroidUploader. - Poctech - Λάβετε τις τιμές BG από την εφαρμογή Poctech - Tomato (MiaoMiao) - Tomato - Λάβετε τιμές BG από Tomato app (MiaoMiao) - BG - Αποστολή δεδομένων BG στο xDrip+ - Στο xDrip+, επιλέξτε την πηγή δεδομένων 640g / Eversense - Ανέβασμα ρυθμίσεων BG - Αλλαγή αρχείου αισθητήρα σε NS χρήσιμες συμβουλές: diff --git a/plugins/main/src/main/res/values-es-rES/strings.xml b/plugins/main/src/main/res/values-es-rES/strings.xml index 417b29c579..22be2dbe34 100644 --- a/plugins/main/src/main/res/values-es-rES/strings.xml +++ b/plugins/main/src/main/res/values-es-rES/strings.xml @@ -101,21 +101,6 @@ Cambio de perfil creado La duración de TBR debe ser un múltiplo de %1$d minutos y mayor a 0. Código QR para la configuración de la contraseña de un sólo uso - - Lyumjev - Ajustes de insulina preestablecidos para Humalog y NovoRapid/NovoLog - Ajuste de insulina preestablecido para Fiasp - Ajuste de insulina preestablecido para Lyumjev - Permite personalizar el pico de acción máxima de la insulina. Debe ser utilizado únicamente por usuarios avanzados - INS - Tiempo del pico máximo de la curva de IOB - Tiempo del pico máximo de acción de la insulina [min] - Personalizar Pico - Acción Rápida - Ultra-Rápido Oref - DIA de %1$f demasiado corto - usando %2$f! - Novorapid, Novolog, Humalog - Fiasp Línea de estado de xDrip+ (reloj) @@ -171,23 +156,6 @@ DIA OBJ BAS - - ¡Logrado, bien hecho! - No logrado - Tiempo agotado - Máximo IOB ajustado correctamente - Glucosa disponible desde la fuente seleccionada - El servicio de sincronización tiene permiso de escritura - Lazo activado - APS seleccionado - Lazo cerrado activado - OBJ - Programa de aprendizaje - ¿Desea reiniciar el objetivo? Puedes perder tu progreso. - Siguiente - Anterior - Limpieza finalizada - Limpieza iniciada Acciones Algunos botones para acceder rápidamente a funciones comunes @@ -207,18 +175,6 @@ edad de la cánula edad del parche de la bomba Bomba parche - - Limitando el bolo extendido a %1$.1f U debido a %2$s - Limitando carbohidratos a %1$d g debido a %2$s - La bomba no tiene capacidad basal temporal - Lazo cerrado deshabilitado en preferencias - Ejecutando la versión dev. Lazo cerrado no disponible. - Bucle cerrado inhabilitado debido a la ejecución del bolo extendido - SMB siempre y después de carbohidratos desactivados porque la fuente activa de BG no soporta filtrado avanzado - SMB no permitido en modo de lazo abierto - valor máximo en preferencias - límite estricto - Seguridad de tratamientos Mostrar luces de estado en la pantalla de inicio Umbral de advertencia de la edad de la cánula [h] @@ -346,50 +302,6 @@ Sens Escala gráfica Gráfico - - Tipo de bomba virtual - Definición de la bomba - Bolo: Paso =%1$s\nBolo Extendido: [paso =%2$s, Duración =%3$smin -%4$sh] \nBasal: Paso =%5$s\nTBR: %6$s ( %7$s), Duración =%8$sMin -%9$sh\n%10$s - BOMBAV - Integración de bombas de insulina que aún no tienen ningún controlador disponible (lazo abierto) - BOMBA VIRTUAL - Ajustes de bomba virtual - Subir estado a Nightscout - - NSClient BG - NS BG - Recibir los datos de glucosa de Nightscout - xDrip+ - Recibir los valores de glucosa de xDrip+ - Dexcom (BYODA) - BYODA - Recibir los valores de glucosa de la aplicación Dexcom \'Build Your Own Device\' - Eversense App (parcheada) - Recibir los valores de glucosa de la aplicación Eversense parcheada. - Glimp - Recibir valores de glucosa de Glimp. - MM640g - Recibir los valores de glucosa del 600SeriesAndroidUploader. - Poctech - Recibir los valores de glucosa de Poctech - Glunovo - Recibir los valores de glucosa de la aplicación Glunovo - Intelligo - Recibir los valores de glucosa de Intelligo - Tomato (MiaoMiao) - Tomato - Recibir los valores de glucosa de Tomato App (MiaoMiao) - GlucoRx Aidex - Aidex - Recibir los valores de glucosa de GlucoRx Aidex CGMS - Glucosa aleatoria - Generar datos aleatorios de glucosa (sólo modo Demo) - BG - Enviar datos de glucosa a xDrip+ - En xDrip+, selecciona 640G/Eversense como fuente de datos - Ajuste de subida de datos de glucosa - Registro de cambio de sensor en Nightscout - Crear evento \"Cambio de sensor\" en Nightscout automáticamente al iniciar el sensor Tema original Tema baja resolución diff --git a/plugins/main/src/main/res/values-fr-rFR/strings.xml b/plugins/main/src/main/res/values-fr-rFR/strings.xml index ef1ff49ccd..2e06af641d 100644 --- a/plugins/main/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/main/src/main/res/values-fr-rFR/strings.xml @@ -101,21 +101,6 @@ Changement de profil effectué La durée du DBT doit être un multiple de %1$d minutes et supérieure à 0. QR Code pour configurer un mot de passe à usage unique - - Lyumjev - Réglages pour les insulines Humalog et NovoRapid / NovoLog - Réglages pour l\'insuline Fiasp - Réglages pour l\'insuline Lyumjev - Permet de définir le pic de l’activité de l’insuline et ne doit être utilisé que par les utilisateurs avancés - INS - Durée du Pic de la Courbe IA - Temps du Pic [min] - Profil d\'insuline ajustable Oref - Insuline à Action Rapide Oref - Insuline Ultra Rapide Oref - Durée d’Action pour %1$f trop courte - utiliser %2$f à la place ! - Novorapid, Novolog, Humalog - Fiasp Barre d\'état pour xDrip+ (Montre) @@ -171,23 +156,6 @@ DAI CIBLE BAS - - Terminé, félicitations ! - Pas encore terminé - Temps écoulé - Maximum IA réglé correctement - Glycémie disponible depuis la source sélectionnée - Le service de synchronisation a l\'autorisation d\'écriture - Boucle activée - APS Sélectionné - Mode boucle fermée activé - OBJ - Programme d’apprentissage - Voulez-vous réinitialiser le début de l\'objectif ? Vous risquez de perdre vos progrès. - Suivant - Préc - Refaire l\'objectif - Suppression démarrée Actions Quelques boutons pour accéder rapidement aux fonctions communes @@ -207,18 +175,6 @@ âge canule âge pompe patch Pompe patch - - Limiter les bolus prolongé à %1$.1f U à cause de %2$s - Limiter les glucides %1$d g à cause de %2$s - Pompe n’est pas capable de basals temporaires - Mode de Boucle Fermée désactivé dans les préférences - Version Dev. La Boucle Fermée est désactivée. - Boucle fermée désactivée à cause du bolus étendu - SMB toujours et post-ingestion de glucides désactivé car la source de glycémies actuelle ne supporte pas de filtrage avancé - SMB non autorisé en mode boucle ouverte - valeur Max dans les préférences - limite fixée - Traitements de sécurité Afficher les voyants d\'état sur l\'écran d\'accueil Seuil d\'alerte âge canule [h] @@ -345,50 +301,6 @@ SENS Échelle du graph. Graph - - Type de pompe virtuelle - Définition de pompe - Bolus : Étape =%1$s\nExtended Bolus : [Étape =%2$s, Durée =%3$smin -%4$sh]\nBasal : Étape =%5$s\nTBR : %6$s (par %7$s), Durée =%8$smin -%9$sh\n%10$s - POMPEV - Intégration pour les pompes qui n’ont pas encore de pilote (Boucle Ouverte) - POMPE VIRTUELLE - Paramètres pompe virtuelle - Remontée des informations vers NS - - Glycémie NSClient - Gly NS - Télécharge les glycémies depuis Nightscout - xDrip+ - Recevoir les glycémies depuis xDrip+. - BYODA - BYODA - Recevoir les valeurs de glycémie de l’application Dexcom patchée (BYODA). - App Eversense (patché) - Recevoir les valeurs de glycémie de l’app Eversense patchée. - Glimp - Recevoir les glycémies depuis Glimp. - Medtronic 640g - Recevoir les glycémies depuis le 600SeriesAndroidUploder. - Poctech - Recevoir les glycémies depuis l\'app Poctech - Glunovo - Recevoir des valeurs de l\'application Glunovo - Intelligo - Recevoir des valeurs depuis l\'application Intelligo - Tomato (MiaoMiao) - Tomato - Recevoir les valeurs de glycémie de l\'application Tomato (appareil MiaoMiao) - GlucoRx Aidex - Aidex - Recevoir les valeurs de glycémie du MGC GlucoRx Aidex. - Gly Aléatoire - Générer des glycémies aléatoires (mode démo uniquement) - Gly - Transmettre les Gly vers xDrip+ - Dans xDrip+ veuillez séléctionner 640g/Eversense comme source de données - Paramètres de téléchargement des glycémies - Enreg. du changement de capteur sur NS - Créer automatiquement un événement \"Changement de capteur\" dans NS au démarrage du capteur Thème d\'origine Basse résolution diff --git a/plugins/main/src/main/res/values-ga-rIE/strings.xml b/plugins/main/src/main/res/values-ga-rIE/strings.xml index 4f2cbd4ce3..e592d3d2be 100644 --- a/plugins/main/src/main/res/values-ga-rIE/strings.xml +++ b/plugins/main/src/main/res/values-ga-rIE/strings.xml @@ -16,13 +16,6 @@ Bunaidh: %1$dnóim ó shin Ar fionraí (%1$d nóim) - - Lyumjev - INS - Free-Peak Oref - Rapid-Acting Oref - Ultra-Rapid Oref - Fiasp xds @@ -42,11 +35,6 @@ Ainm Próifíle: DIA BUN - - Lúb cumasaithe - APS roghnaithe - Ar Aghaidh - Roimhe seo Gníomhartha GNÍ @@ -54,7 +42,6 @@ aois: Inslin Caidéil ceallraí - inslin CGM @@ -81,18 +68,6 @@ Bunaidhi BUN GNÍ - - - Sonraí a íoslódáil ó Nightscout - xDrip+ - Luachanna BG a fháil ó xDrip+. - Glimp - MM640g - Luachanna BG a fháil ón 600SeriesAndroidUploader. - Poctech - Tomato (MiaoMiao) - Tomato - BG diff --git a/plugins/main/src/main/res/values-hr-rHR/strings.xml b/plugins/main/src/main/res/values-hr-rHR/strings.xml index 5ee4b66e0c..aa8a7784cc 100644 --- a/plugins/main/src/main/res/values-hr-rHR/strings.xml +++ b/plugins/main/src/main/res/values-hr-rHR/strings.xml @@ -57,21 +57,6 @@ Bolus: Bazal: QR kod za postavljanje jednokratne lozinke - - Lyumjev - Unaprijed podešen predložak za inzulin Humalog i NovoRapid / NovoLog - Unaprijed podešen predložak za inzulin Fiasp - Unaprijed podešen predložak za inzulin Lyumjev - Omogućuje definiranje vrhunca aktivnosti inzulina i trebaju ga koristiti samo napredni korisnici - INS - Vršno vrijeme IOB krivulje - Špica [min] - Free-Peak Oref - Rapid-Acting Oref - Ultra-Rapid Oref - DIA od %1$f prekratak - umjesto njega koristite %2$f! - Novorapid, Novolog, Humalog - Fiasp xDrip+ Statusna linija (sat) @@ -127,18 +112,10 @@ DIA CILJ BAZAL - - Dovršeno, bravo! - Nije još dovršeno - Prošlo vrijeme - Program učenja - Sljedeći Nekoliko izbora za brzi pristup uobičajenim funkcijama Senzor Inzulin - - Sigurnosne postavke medikacije inzulin samo na satu @@ -159,28 +136,6 @@ Tretmani BAZAL Skala grafikona - - Vrsta virtualne pumpe - Definicija pumpe - Bolus: korak=%1$s\nProduženi bolus: [korak=%2$s, trajanje=%3$smin-%4$sh]\nBazal: korak=%5$s\nTBR: %6$s (do %7$s), Trajanje=%8$smin-%9$sh\n%10$s - VPUMP - Integracija pumpe za pumpe koje još nemaju upravljački program (otvorena petlja) - VIRTUALNA PUMPA - Postavke virtualne pumpe - Prijenos statusa u NS - - Preuzima podatke o GUK-u s Nightscout-a - Preuzima podatke o GUK-a s xDrip+. - Primajte vrijednosti GUK-a iz zakrpane aplikacije Eversense. - Primajte vrijednosti GUK-a od Glimpa. - Primajte vrijednosti glukoze u krvi od 600SeriesAndroidUploader. - Intelligo - Primite vrijednosti iz aplikacije Intelligo - GlucoRx Aidex - Aidex - Primite vrijednosti GK od GlucoRx Aidex CGMS. - GUK - Stvorite događaj \"Promjena senzora\" u NS-u automatski pri pokretanju senzora diff --git a/plugins/main/src/main/res/values-hu-rHU/strings.xml b/plugins/main/src/main/res/values-hu-rHU/strings.xml index 83d009bfe9..021b2ae5b0 100644 --- a/plugins/main/src/main/res/values-hu-rHU/strings.xml +++ b/plugins/main/src/main/res/values-hu-rHU/strings.xml @@ -6,11 +6,6 @@ VC: Bólus: Bázis: - - Lyumjev - Ultra-Rapid Oref - Novorapid, Novolog, Humalog - Fiasp @@ -26,11 +21,6 @@ Hibák DIA BÁZ - - Eltelt idő - APS kiválasztva - Tovább - Vissza Műveletek Eszközök @@ -38,7 +28,6 @@ kor: Inzulin Kanül - grafikon inzulin @@ -65,15 +54,6 @@ Inzulin összesen BÁZ Grafikon - - - Glimp - MM640g - Poctech - Tomato (MiaoMiao) - Tomato - Véletlenszerű VC - VC Eredeti megjelenés Alacsony felbontás diff --git a/plugins/main/src/main/res/values-it-rIT/strings.xml b/plugins/main/src/main/res/values-it-rIT/strings.xml index e9fe91f8af..e7a84bad9b 100644 --- a/plugins/main/src/main/res/values-it-rIT/strings.xml +++ b/plugins/main/src/main/res/values-it-rIT/strings.xml @@ -101,21 +101,6 @@ Cambio profilo creato La durata del TBR deve essere un multiplo di %1$d minuti e maggiore di 0. Codice QR per configurare OTP - - Lyumjev - Preset per insulina Humalog e NovoRapid / NovoLog - Preset per insulina Fiasp - Preset per insulina Lyumjev - Ti consente di definire il picco di attività dell\'insulina e dovrebbe essere usato solo dagli utenti avanzati - INS - Tempo picco Curva IOB - Tempo del picco [min] - Free-Peak Oref - Rapid-Acting Oref - Ultra-Rapid Oref - DIA di %1$f troppo breve - uso %2$f. - Novorapid, Novolog, Humalog - Fiasp Statusline xDrip+ (smartwatch) @@ -171,22 +156,6 @@ DIA TARG BAS - - Completato, ben fatto! - Non ancora completato - Tempo trascorso - Max IOB impostata correttamente - BG disponibile da sorgente selezionata - Loop abilitato - APS selezionato - Modalità chiusa abilitata - OBT - Programma di apprendimento - Vuoi resettare l\'avvio dell\'obiettivo? Potresti perdere i tuoi progressi. - Avanti - Indietro - Cancella completamento - Cancella avvio Azioni Alcuni tasti per accedere rapidamente alle funzioni comuni @@ -206,18 +175,6 @@ Età cannula età micro a patch Micro a patch - - Limitazione bolo esteso a %1$.1f U a causa di: %2$s - Limitazione carboidrati a %1$d g a causa di: %2$s - Micro non in grado di impostare la basale temporanea - Modalità loop chiuso disabilitata nelle preferenze - Versione sviluppatore in esecuzione. Loop chiuso disabilitato. - Loop chiuso disabilitato a causa dell\'esecuzione di un bolo esteso - Le funzioni \"SMB sempre\" e \"SMB dopo i CHO\" sono disabilitate perché l\'attuale sorgente delle glicemie non supporta il filtraggio avanzato - SMB non consentito in modalità loop aperto - valore max nelle preferenze - limite fisso - Sicurezza trattamenti Mostra indicatori di stato sulla home Età cannula: soglia di avviso [h] @@ -344,50 +301,6 @@ TRATT SENS Scala del grafico - - Tipo micro virtuale - Definizione micro - Bolo: Step=%1$s\nBolo Esteso: [Step=%2$s, Durata=%3$smin-%4$sh]\nBasale: Step=%5$s\nTBR: %6$s (di %7$s), Durata=%8$smin-%9$sh\n%10$s - MICROV - Per microinfusori che non hanno ancora alcun driver (Loop aperto) - MICRO VIRTUALE - Impostazioni micro virtuale - Carica stato in NS - - BG NSClient - BG NS - Scarica dati glicemia da Nightscout - xDrip+ - Ricevi valori glicemia da xDrip+. - BYODA - BYODA - Ricevi valori glicemia dall\'app Dexcom ottenuta con \'Build Your Own Dexcom App\'. - Eversense app (modificata) - Ricevi valori glicemia dall\'app Eversense modificata. - Glimp - Ricevi valori glicemia da Glimp. - MM640g - Ricevi valori glicemia da 600SeriesAndroidUploader. - Poctech - Ricevi valori glicemia da app Poctech - Glunovo - Ricevi valori glicemia da app Glunovo - Intelligo - Ricevi valori da app Intelligo - Tomato (MiaoMiao) - Tomato - Ricevi valori glicemia da app Tomato (dispositivo MiaoMiao) - GlucoRx Aidex - GlucoRx Aidex - Ricevi valori glicemia da CGM GlucoRx Aidex. - BG casuale - Genera dati glicemia casuali (solo modalità demo) - BG - Invia dati BG a xDrip+ - In xDrip+ seleziona origine dati 640g/Eversense - Impostazioni caricamento BG - Registra cambio sensore in NS - Crea evento \"Cambio Sensore\" in NS all\'avvio del sensore Tema originale Tema a bassa risoluzione diff --git a/plugins/main/src/main/res/values-iw-rIL/strings.xml b/plugins/main/src/main/res/values-iw-rIL/strings.xml index 235e5df6c3..a148bc7cd3 100644 --- a/plugins/main/src/main/res/values-iw-rIL/strings.xml +++ b/plugins/main/src/main/res/values-iw-rIL/strings.xml @@ -98,21 +98,6 @@ נוצרה החלפת פרופיל משך הבזאלי הזמני חייב להיות כפולה של %1$d דקות ויותר מ-0. ברקוד QR ליצירת סיסמה חד פעמית - - Lyumjev - הגדרת אינסולין ל-Humalog ו- NovoRapid / Novolog - הגדרת אינסולין מסוג Fiasp - הגדרת אינסולין מסוג Lyumjev - מאפשר להגדיר את שיא פעילות האינסולין, לשימוש על ידי משתמשים מתקדמים בלבד - אינסולין - שעת שיא של עקומת IOB - זמן שיא [min] - Oref שיא חופשי - Oref אינסולין מהיר - Oref אינסולין אולטרה מהיר - DIA במשך %1$f הוא קצר מדי - משתמש ב-%2$f במקום! - Novorapid, Novolog, Humalog - Fiasp שורת מצב xDrip (שעון) @@ -168,22 +153,6 @@ DIA ע\' מטרה בזאלי - - הושלם, כל הכבוד! - עוד לא הושלם - זמן שחלף - ערך IOB מקסימלי הוגדר כראוי - ערכי סוכר זמינים מהמקור הנבחר - הלולאה פעילה - נבחר APS - מצב סגור מופעל - OBJ - תוכנית הלימוד - האם ברצונכם לאפס את התחלת המשימה? אתם עלולים לאבד את התקדמותכם במשימה. - הבא - הקודם - ביטול השלמה - ביטול התחלה פעולות לחצנים לגישה מהירה לפונקציות שימושיות @@ -203,18 +172,6 @@ גיל הצינורית גיל משאבה משאבה ללא צינורית - - הגבלת בולוס ממושך ל- %1$.1f יח\' בגלל %2$s - הגבלת פחמימות ל-%1$d גר\' בגלל %2$s - המשאבה אינה מסוגלת לבצע בזאלי זמני - מצב לולאה סגור מושבת בהעדפות - זוהי גרסת פיתוח. לולאה סגורה אינה מורשת. - הלולאה הסגורה מופסקת עקב מתן בולוס ממושך - SMB תמידי ו-SMB לאחר פחמימות מושבתים כיוון שמקור ערכי הסוכר הפעיל אינו תומך בסינון נתונים מתקדם - SMB אינו פעיל במצב לולאה פתוחה - ערך מקסימלי בהעדפות - מגבלה קשיחה - בטיחות טיפולים הצגת אורות חיווי במסך הבית סף התראה לתוקף האינסולין [h] @@ -340,50 +297,6 @@ רגישות קנה מידה של הגרף גרף - - סוג משאבה וירטואלית - הגדרת משאבה - בולוס: צעד=%1$s\nבולוס ממושך: [צעד=%2$s, משך=%3$s מינ\'-%4$sש\']\nבזאלי: צעד=%5$s\nבזאלי זמני: %6$s (עם %7$s), משך=%8$s מינ\'-%9$sש\'\n%10$s - VPUMP - שימוש במשאבות אשר עדיין אין להם מנהל התקן כלשהו (לולאה פתוחה) - משאבה וירטואלית - הגדרות משאבה וירטואלית - טוען מצב ל-Nightscout - - נתוני סוכר מ-NSClient - סוכר NS - הורדת ערכי סוכר בדם מ-Nightscout - xDrip+ - קבלת ערכי סוכר מ-xDrip. - BYODA - BYODA - השתמש בנתוני הסוכר מאפליקציית \"בנה לעצמך דקסקום\" (BYODA). - אפליקלציית Eversense (עם פאץ\') - קבלת ערכי רמת סוכר מאפליקציית Eversense עם פאץ\'. - Glimp - קבלת ערכי סוכר בדם מאפליקציית Glimp. - Minimed 640G - קבלת ערכי סוכר בדם מ-600SeriesAndroidUploader. - Poctech - קבלת ערכי סוכר מיישום Poctech - Glunovo - קבלת ערכי סוכר מיישום Glunovo - Intelligo - קבלת ערכי סוכר מיישום Intelligo - Tomato (MiaoMiao) - Tomato - קבלת ערכי סוכר מאפליקציית Tomato (התקן MiaoMiao) - GlucoRx Aidex - Aidex - קבלת נתוני סוכר מחיישני GlucoRx Aidex. - נתוני סוכר אקראיים - הפקת נתוני גלוקוז אקראיים (מצב הדגמה בלבד) - BG - שליחת נתוני סוכר אל xDrip - ב-xDrip בחרו 640g/Eversense כמקור נתונים - הגדרות העלאת ערכי סוכר בדם - רישום החלפת סנסור ב-Nightscout - רישום אירוע \"החלפת סנסור\" ב-Nightscout באופן אוטומטי בעת הפעלת החיישן סקין מקורי סקין רזולוציה נמוכה diff --git a/plugins/main/src/main/res/values-ja-rJP/strings.xml b/plugins/main/src/main/res/values-ja-rJP/strings.xml index f51be367e7..c87f7b9426 100644 --- a/plugins/main/src/main/res/values-ja-rJP/strings.xml +++ b/plugins/main/src/main/res/values-ja-rJP/strings.xml @@ -8,7 +8,6 @@ リモートボーラスが利用できません。後でもう一度お試しください。 デルタ: ベーサル: - @@ -18,10 +17,8 @@ Units: DIA BAS - ACT - 概要 HOME @@ -79,8 +76,6 @@ ABS DEVSLOPE TREAT - - diff --git a/plugins/main/src/main/res/values-ko-rKR/strings.xml b/plugins/main/src/main/res/values-ko-rKR/strings.xml index 161384ca53..2f23445e84 100644 --- a/plugins/main/src/main/res/values-ko-rKR/strings.xml +++ b/plugins/main/src/main/res/values-ko-rKR/strings.xml @@ -97,21 +97,6 @@ 상태를 읽지 못했습니다. 프로파일 변경 생성됨 TBR 기간은 %1$d분의 배수가 되어야 하고 0보다 커야 함. - - Lyumjev - 휴마로그와 노보래피드에 대한 인슐린 설정 - 피아스프에 대한 인슐린 설정 - Lyumjev에 대한 인슐린 설정 - 인슐린활동의 피크를 직접 정의할 수 있습니다. 고급 사용자만 사용해야 합니다. - INS - IOB 커브 피크 시간 - 피크 시간 [min] - 사용자지정-피크 Oref - 초속효성 Oref - 초-초속효성 Oref - DIA %1$f는 너무 짧습니다. 대신 %2$f을 사용하세요! - 노보래피드, 휴마로그, 에피드라 - 피아스프(Fiasp) xDrip+ 상태표시라인 (워치) @@ -151,22 +136,6 @@ DIA TARG BAS - - 훌륭합니다. 완료되었습니다! - 아직 완료되지 않았습니다. - 경과 시간 - 최대 IOB가 바르게 설정됨 - 선택한 소스에서 혈당이 들어옵니다. - Loop 활성화됨 - APS 선택됨 - Closed 모드가 활성화됨 - OBJ - 프로그램 배우기 - 목표를 초기화하시겠습니까? 진행상황이 삭제됩니다. - 다음 - 이전 - 완료 초기화 - 시작 초기화 실행 일반 기능을 빠르게 실행시킬 버튼 @@ -183,18 +152,6 @@ 펌프 배터리 캐뉼라 확장 Bolus 기능을 사용하는 동안에는 Closed Loop 모드가 중지됩니다. 정말 원하십니까? - - %2$s로 인해 확장Bolus가 %1$.1f U로 제한됩니다. - %2$s로 인해 탄수화물이 %1$d g로 제한됩니다. - 이 펌프 임시Basal을 지원하지 않습니다. - 설정에서 Closed Loop 모드가 비활성화되었습니다. - 개발자버전을 실행중입니다. Closed Loop는 비활성화 됩니다. - 확장 Bolus 사용으로 인해 Closed Loop가 비활성화됨 - 선택한 혈당 출처가 고급 필터링을 지원하지 않기 때문에 SMB가 항상 비활성화됩니다. - Open Loop모드에선 SMB가 허용되지 않습니다. - 설정에서의 최대값 - 하드한계 - 관리 안전설정 홈화면에 상태 표시등 보여주기 인슐린 사용 기간 경고 기준 [h] @@ -303,38 +260,6 @@ TREAT 민감도 그래프 - - 가성펌프 종류 - 펌프 정의 - Bolus: 스텝=%1$s\n확장Bolus: [Step=%2$s, 기간=%3$s분-%4$s시]\nBasal: 스텝=%5$s\n임시Basal: %6$s (by %7$s), 기간=%8$s분-%9$s시\n%10$s - VPUMP - 가상용 펌프를 위한 설정(Open Loop) - 가상 펌프 - 가상펌프 설정 - NS에 상태 업로드하기 - - NSClient 혈당 - Nightscout에서 다운로드하여 혈당값 받기 - xDrip+ - xDrip+에서 혈당값 받기 - Eversense 앱(패치버전) - 패치된 Eversense 앱에서 혈당값 받기 - Glimp - Glimp에서 혈당값 받기 - 미니메드640g - 600SeriesAndroidUploader에서 혈당값 받기 - Poctech - Poctech 앱에서 혈당값 받기 - Tomato (MiaoMiao) - Tomato - 혈당값이 Tomato앱(MiaoMaio장치) 으로부터 수신되었습니다. - 무작위 혈당 - 무작위로 혈당을 생성합니다(데모 버전 전용) - 혈당 - 혈당 데이터를 xDrip+에 전송하기 - xDrip+ 데이터 소스에서 640g/Eversense을 선택하세요 - 혈당 업로드 설정 - 센서 교체 NS에 기록하기 기본 스킨 저해상도 스킨 diff --git a/plugins/main/src/main/res/values-lt-rLT/strings.xml b/plugins/main/src/main/res/values-lt-rLT/strings.xml index 4c4fa8a24b..6b2c5a707f 100644 --- a/plugins/main/src/main/res/values-lt-rLT/strings.xml +++ b/plugins/main/src/main/res/values-lt-rLT/strings.xml @@ -97,21 +97,6 @@ Būsenos nuskaityti nepavyko Profilio perjungimas sukurtas Laikinos bazės trukmė turi būti kartotinė %1$d minučių ir didesnė nei 0. - - Lyumjev - Nustatymai Humalog ir NovoRapid / NovoLog insulinams - Nustatymai Fiasp insulinui - Nustatymai Lyumjev insulinui - Leidžia pasirinkti insulino veikimo piką ir turėtų būti naudojama tik patyrusių vartotojų - INS - AIO kreivės pikas - Piko laikas [min] - Oref be piko - Greito veikimo Oref - Staigaus veikimo Oref - IVT %1$f per trumpa - bus naudojama %2$f! - Novorapid, Novolog, Humalog - Fiasp xDrip+ būsenos juosta (laikrodyje) @@ -161,22 +146,6 @@ IVT TIKSLAS VB - - Užbaigta, puiku! - Dar nebaigta - Praėjo laiko - Maksimalus AIO nustatytas tinkamai - KG šaltinis pasirinktas teisingai - Ciklas aktyvuotas - DKS pasirinkta - Uždaras ciklas aktyvus - TIKSL - Mokymosi programa - Ar norite iš naujo nustatyti tikslų pradžią? Jūs galite prarasti jau pasiektus. - Kitas - Ankstesnis - Išvalyti užbaigtus - Išvalyti pradėtus Veiksmai Mygtukai greitesniam pagrindinių funkcijų paleidimui @@ -194,18 +163,6 @@ Kaniulė Ištęsto boluso funkcija sustabdys uždaro ciklo režimą ištęsto boluso veikimo metu. Ar tikrai norite patvirtinti savo pasirinkimą? kateterio amžius - - Ištęstinis bolusas ribojamas iki %1$.1f vv dėl %2$s - Ribojami angliavandeniai iki %1$d g dėl %2$s - Pompa negali nustatyti laikinos bazės - Uždaro ciklo būsena išjungta nustatymuose - Naudojama neužbaigta versija. Uždaras ciklas neaktyvus. - Uždara ciklas išjungtas dėl ištęsto boluso veikimo - Funkcijos \"SMB visada\" ir \"SMB po angliavandenių\" išjungtos, nes kraujo gliukozės duomenų šaltinis neturi reikalingo filtravimo - SMB neleidžiami atviro ciklo režime - Maksimali reikšmė nustatymuose - Nekeičiama riba - Terapijos saugumas Pradžios ekrane rodyti spalvotus indikatorius Kaniulės ribinio laiko įspėjimas [h] @@ -324,49 +281,6 @@ ĮRAŠ JAUTR Grafikas - - Virtualios pompos tipas - Pompos nustatymas - Bolusas: Žingsnis=%1$s\nIštęstinis bolusas: [Žingsnis=%2$s, Trukmė=%3$smin-%4$sh]\nBazė: Žingsnis=%5$s\nLDB: %6$s (iš %7$s), Trukmė=%8$smin -%9$sh\n%10$s - VPompa - Integracija pompoms, kurios dar neturi reikalingo valdiklio (Atviras Ciklas) - Virtuali pompa - Virtualios pompos nustatymai - Perduoti būsenos duomenis į NS - - NSClient KG - NS KG - Gauti kraujo gliukozės vertes iš Nightscout - xDrip+ - Gauti kraujo gliukozės reikšmes iš xDrip+. - BYODA - BYODA - Gauti kraujo gliukozės reikšmes iš \'Build Your Own Dexcom App\'. - Eversense programėlė (modifikuota) - Gauti kraujo gliukozės vertes iš modifikuotos Eversense programėlės. - Glimp - Gauti kraujo gliukozės vertes iš Glimp. - MM640g - Gauti kraujo gliukozės vertes iš 600SeriesAndroidUploader. - Poctech - Gauti KG vertes iš Poctech programėlės - Glunovo - Gauti KG reikšmes iš Glunovo programos - Intelligo - Gauti KG reikšmes iš Intelligo programos - Tomato (MiaoMiao) - Tomato - Gauti KG vertes iš Tomato programėlės (MiaoMiao) - GlucoRx Aidex - Aidex - Gauti KG reikšmes iš GlucoRx Aidex CGMS programos. - Atsitiktinė KG - Generuoti atsitiktinių KG duomenis (demonstracinis režimas) - KG - Siųsti KG duomenis į xDrip+ - Xdrip+ pasirinkite 640g/Eversense duomenų šaltinį - KG duomenų perdavimo nustatymai - Registruoti sensoriaus keitimą NS Originali išvaizda Žemos rezoliucijos išvaizda diff --git a/plugins/main/src/main/res/values-nl-rNL/strings.xml b/plugins/main/src/main/res/values-nl-rNL/strings.xml index 9d6be96279..10e9b0829c 100644 --- a/plugins/main/src/main/res/values-nl-rNL/strings.xml +++ b/plugins/main/src/main/res/values-nl-rNL/strings.xml @@ -101,21 +101,6 @@ Profiel wissel aangemaakt Tijdelijk basaal duur moet een veelvoud van %1$d minuten en groter dan 0 zijn. QR Code voor het instellen van een eenmalig wachtwoord - - Lyumjev - Insuline instelling voor Humalog en NovoRapid / NovoLog - Insuline instelling voor Fiasp - Insuline instelling voor Lyumjev - Hiermee kan je de piek van de insulineactiviteit definiëren, mag alleen worden gebruikt door gevorderde gebruikers - INS - IOB curve piek tijd - Piek tijd [min] - Free-Peak Oref - Snel-werkende Oref - Ultra-Rapid Oref - DIA van %1$f te kort - %2$f wordt inplaats gebruikt! - Novorapid, Novolog, Humalog - Fiasp xDrip+ Statuslijn (horloge) @@ -171,23 +156,6 @@ DIA DOEL BAS - - Voltooid, goed gedaan! - Nog niet voltooid - Verstreken tijd - Maximum IOB juist ingesteld - BG beschikbaar op gekozen bron - Synchronisatieservice heeft schrijfrechten - Loop Actief - APS geslecteerd - Closed modus actief - DOEL - Leerprogramma - Wil je dit leerdoel opnieuw starten? Je kunt je voortgang verliezen. - Volgende - Vorige - Voltooiing wissen - Start wissen Acties Een aantal knoppen voor snelle toegang tot algemene functies @@ -207,18 +175,6 @@ canule leeftijd patchpomp leeftijd Patchpomp - - Beperken van extended bolus op %1$.1f E vanwege %2$s - Koolhydraten worden beperkt tot %1$d gr doordat %2$s - Pomp kan geen tijdelijk basaal aanvaarden - Closed Loop modus gedeactiveerd in de instellingen - Dev versie actief. Closed loop gedeactiveerd - Closed loop modus uitgeschakeld vanwege afgeven Vertraagde bolus - SMB altijd gedeactiveerd doordat de gekozen BG bron geen optimale filtering toepast - SMB niet toegestaan in Open Loop modus - Maximum waarde in instellingen - max limiet (SC) - Behandelingen veiligheid Toon statusindicatoren op startscherm Drempelwaarde waarschuwing canule leeftijd [h] @@ -345,50 +301,6 @@ SENS Grafiek schaal Grafiek - - Virtuele pomp Type - Pomp definitie - Bolus: Stap=%1$s\nExtended Bolus: [Stap=%2$s, Duur=%3$smin-%4$sh]\nBasaal: Stap=%5$s\nTBR: %6$s (by %7$s), Duur=%8$smin-%9$sh\n%10$s - VPUMP - Pomp integratie voor pompen, waar nog geen driver voor is (Open Loop) - VIRTUELE POMP - Virtuele pomp instellingen - Upload status naar NS - - NSClient BG - NS BG - Download BG waardes van Nightscout - xDrip+ - Ontvang BG waardes van xDrip+. - BYODA - BYODA - Ontvang BG waarden van de \'Build Your Own Dexcom App\' (BYODA). - Eversense App (aangepast) - Ontvang BG waardes van de aangepaste Eversense app. - Glimp - Ontvang BG waardes van Glimp. - MM640g - Ontvang BG waardes van 600SeriesAndroidUploader. - Poctech - Ontvang BG waardes van Poctech app - Glunovo - Ontvang waardes van Glunovo app - Intelligo - Ontvang waarden van de Intelligo app - Tomato (MiaoMiao) - Tomato - Ontvang BG waardes van Tomato app (MiaoMiao apparaatje) - GlucoRx Aidex - Aidex - Ontvang BG waarden van GlucoRx Aidex CGMS. - Willekeurige BG - Willekeurige BG gegevens genereren (alleen Demo modus) - BG - Stuur BG data naar xDrip+ - In xDrip+ kies 640g/Eversense data bron - BG upload instellingen - Noteer sensor wissel in NS - Noteer automatisch \"Sensor Wissel\" in NS bij starten van sensor Klassiek weergave thema Lage resolutie skin diff --git a/plugins/main/src/main/res/values-no-rNO/strings.xml b/plugins/main/src/main/res/values-no-rNO/strings.xml index 4e12025dd8..72f426a3dd 100644 --- a/plugins/main/src/main/res/values-no-rNO/strings.xml +++ b/plugins/main/src/main/res/values-no-rNO/strings.xml @@ -101,21 +101,6 @@ Profilbytte opprettet Temp basal varighet må oppgis i antall %1$d minutter og større enn 0. QR-kode for oppsett av engangspassord - - Lyumjev - Insulininnstillinger for Humalog og NovoRapid / NovoLog - Insulininnstillinger for Fiasp - Insulininnstillinger for Lyumjev - Lar deg definere toppen på insulinaktiviteten og skal kun brukes av avanserte brukere - INS - IOB-kurvens topptid - Topptid [min] - Egendefinert topp Oref - Hurtigvirkende Oref - Ultra-Rapid Oref - DIA på %1$f er for kort - bruker %2$f i stedet! - Novorapid, Novolog, Humalog - Fiasp xDrip+ statuslinje (klokke) @@ -171,23 +156,6 @@ DIA MÅL BAS - - Fullført, godt gjort! - Enda Ikke fullført - Tid brukt - Maks IOB er angitt riktig - BS tilgjengelig fra valgt kilde - Synkroniseringstjeneste har skriverettigheter - Loop er aktivert - APS valgt - Lukket loop aktivert - MÅL - Opplæringsprogram - Ønsker du å omstarte læringsmålet? Du vil miste fullførte trinn. - Neste - Forrige - Sletting ferdig - Sletting startet Handlinger Hurtigknapper for rask tilgang til ofte brukte funksjoner @@ -207,18 +175,6 @@ kanyle alder patch pumpe alder Patch pumpe - - Begrenser forlenget bolus til %1$.1f E på grunn av %2$s - Begrenser karbohydrater til %1$d g på grunn av %2$s - Pumpen støtter ikke temp basaler - Lukket Loop er eaktivert i innstillinger - Du kjører dev-versjonen. Lukket loop ikke aktivert. - Lukket loop deaktivert på grunn av forlenget bolus - SMB Alltid På og SMB Etter Karbohydrater er deaktivert fordi BS kilden ikke støtter avansert filtrering - SMB ikke tillatt i åpen loop - maks verdi i innstillingene - hard begrensning - Sikkerhet ved behandlinger Vis statusindikatorer på hjem-skjermen Terskel for advarsel om alder på slangesett [h] @@ -345,50 +301,6 @@ SENS Graf skala Graf - - Virtuell pumpetype - Pumpedefinisjon - Bolus: Step=%1$s\nForlenget bolus: [Step=%2$s, Varighet=%3$smin-%4$sh]\nBasal: Step=%5$s\nTBR: %6$s (av %7$s), Varighet=%8$smin-%9$sh\n%10$s - VPUMP - Integrasjon mot pumper som ikke støttes av AndroidAPS (åpen loop) - VIRTUELL PUMPE - Innstillinger for virtuell pumpe - Last opp status til Nightscout - - NSClient BS - NS BS - Last ned BS-verdier fra Nightscout - xDrip+ - Motta BS-verdier fra xDrip+. - BYODA - BYODA - Motta BS verdier fra \'Build Your Own Dexcom App\'. - Eversense App (patched) - Motta BS-verdier fra den modifiserte Eversense-appen. - Glimp - Motta BS-verdier fra Glimp. - MM640G - Motta BS-verdier fra 600SeriesAndroidUploader. - Poctech - Motta BS verdier fra Poctech app - Glunovo - Motta BS verdier fra Glunovo app - Intelligo - Motta BS-verdier fra Intelligo-app - Tomato (MiaoMiao) - Tomato - Motta BS verdier fra Tomato app (MiaoMiao enhet) - GlucoRx Aidex - Aidex - Motta BS verdier fra GlucoRx Aidex CGM. - Vilkårlig BS - Generer vilkårlige BS data (kun demo formål) - BS - Send BS data til xDrip+ - I xDrip+, velg 640G/Eversens som datakilde - Innstillinger for opplasting av BS - Logg sensor bytte til NS - Opprett hendelse \"Sensor bytte\" automatisk i NS ved start av sensoren Opprinnelig visningstema Tema for lav oppløsning diff --git a/plugins/main/src/main/res/values-pl-rPL/strings.xml b/plugins/main/src/main/res/values-pl-rPL/strings.xml index 48962bf2d3..12cff13632 100644 --- a/plugins/main/src/main/res/values-pl-rPL/strings.xml +++ b/plugins/main/src/main/res/values-pl-rPL/strings.xml @@ -97,21 +97,6 @@ Odczyt statusu nie powiódł się Zmiana profilu wykonana Czas trwania TBR musi być wielokrotnością %1$d minut i większy niż 0. - - Lyumjev - Profil insulinowy dla Humalog i Novorapid / NovoLog - Profil insulinowy dla Fiasp - Profil insulinowy dla Lyumjev - Pozwala na określenie czasu wartości szczytowej działania insuliny i powinno być używane tylko przez zaawansowanych użytkowników - INS - IOB Czas piku krzywej działania insuliny - Czas piku [min] - Swobodny-Pik Oref - Szybko-Działający Oref - Ultra-Szybki Oref - DIA %1$f zbyt krótki - przyjmuję %2$f w zamian! - Novorapid, Novolog, Humalog - Fiasp Linia Statusu xDrip+ (zegarek) @@ -158,22 +143,6 @@ DIA CEL BAS - - Ukończone, wspaniale! - Nie ukończono - Czas jaki upłynął - Maks. IOB ustawione poprawnie - BG dostępne z wybranego źródła - Pętla włączona - Wybrano APS - Tryb zamknięty włączony - OBJ - Program do nauki - Czy chcesz zresetować czas rozpoczęcia zadania? Możesz utracić postępy. - Dalej - Poprzedni - Wyczyść skończone - Wyczyść rozpoczęte Akcje Niektóre przyciski umożliwiające szybki dostęp do typowych funkcji @@ -190,18 +159,6 @@ Bateria pompy Kaniula Użycie funkcji Extended bolus spowoduje zatrzymanie trybu pętli zamkniętej na czas działania przedłużonego bolusa. Czy na pewno tego chcesz? - - Ograniczam bolus do %1$.1f U z uwagi na %2$s - Ograniczam węglow. do %1$d g z uwagi na %2$s - Pompa nie jest zdolna do wykonywania dawek bazowych tymczasowych - Tryb zamkniętej pętli wyłączony w ustawieniach - Uruchomiona jest wersja dev. Zamknięta pętla jest wyłączona. - Zamknięta pętla wyłączona, ponieważ działa Extended Bolus (bolus przedłużony) - SMB zawsze i po węglow. wyłączone z uwagi na brak źródła BG z zaawansowanym filtrowaniem - SMB nie dozwolone w trybie otwartej pętli - maks. wartość w ustawieniach - twarde ograniczenie - Bezpieczeństwo terapii Pokaż diody stanu na ekranie głównym Ostrzeżenie o czasie insuliny [h] @@ -315,44 +272,6 @@ TREAT SENS Wykres - - Pompa wirtualna - Definicja Pompy - Bolus: Krok =%1$s\nBolus Przedłużony: [krok =%2$s, czas trwania =%3$smin -%4$sh] \nBasal: krok =%5$s\nTBR: %6$s (przez %7$s), czas trwania =%8$smin -%9$sh\n%10$s - VPUMP - Integracja z pompami, które nie posiadają jeszcze żadnego sterownika (Open Loop) - POMPA WIRTUALNA - Ustawienia pompy wirtualnej - Przesyłaj status do NS - - NSClient BG - NS BG - Pobieraj wartości BG z Nightscout - xDrip+ - Pobieraj wartości BG z xDrip+. - Dexcom Patched - DEX.PATCH. - Pobieraj glikemię ze spatchowanej aplikacji Dexcom. - Apka Eversense (spatchowana) - Pobieraj wartości BG ze spatchowanej aplikacji Eversense. - Glimp - Pobieraj wartości BG z Glimp. - MM640g - Pobieraj wartości BG z uploadera pomp serii 600. - Poctech - Odczytuj wartości BG z aplikacji Poctech - Glunovo - Otrzymuj wartości z aplikacji Glunovo - Tomato (MiaoMiao) - Tomato - Otrzymuj poziomy cukru (BG) z Apki Tomato) (urządzenie MiaoMiao) - Losowa BG - Generuj losowe dane BG (tylko tryb demonstracyjny) - BG - Prześlij dane BG do xDrip+ - W xDrip+ wybierz źródło danych 640g/Eversense - Ustawienia wysyłania wartości BG (poziomów cukru) - Prześlij zmianę sensora do NS Motyw oryginalny Mały ekran diff --git a/plugins/main/src/main/res/values-pt-rBR/strings.xml b/plugins/main/src/main/res/values-pt-rBR/strings.xml index 55d8e79adc..3acb6d5014 100644 --- a/plugins/main/src/main/res/values-pt-rBR/strings.xml +++ b/plugins/main/src/main/res/values-pt-rBR/strings.xml @@ -101,21 +101,6 @@ Troca de perfil criada A duração da basal temporária deve ser um múltiplo de %1$d minutos e maior que 0. Código QR para configuração de senha de uso único - - Lyumjev - Predefinição de Insulina para Humalog e NovoRapid / NovoLog - Pré-ajuste de Insulina para Fiasp - Configuração pre-definida para a Insulina Lyumyev - Permite que você defina o pico da atividade de insulina, deve ser usado apenas por usuários avançados - INS - Tempo Pico da curva de IOB - Tempo Pico [min] - Oref Pico-Livre - Oref Ação Rápida - Ultra-Rapid Oref - Duração de Acção da Insulina (DIA) de %1$f demasiado curto - corrigido para %2$f! - Novorapid, Novolog, Humalog - Fiasp Linha do estado do Xdrip+ (relógio) @@ -171,22 +156,6 @@ DIA ALV BAS - - Terminado, parabéns! - Incompleto - Tempo decorrido - IOB máxima definida correctamente - Glicemia disponivel desde a fonte selecionada - Loop activado - APS seleccionado - Modo fechado ativado - OBJ - Programa de aprendizagem - Deseja reiniciar o objetivo? Pode perder seu progresso. - Seguinte - Anterior - Limpeza terminado - Limpeza iniciado Ações Alguns botões para acessar rapidamente a funções comuns @@ -206,18 +175,6 @@ idade da cânula Idade da bomba patch Bomba patch - - A limitar bólus estendido para %1$.1f U porque %2$s - A limitar hidratos para %1$d g porque %2$s - A bomba não é capaz de basais temporárias - Loop fecchado disabilitado nas preferências - A correr a versão dev. O Loop fechado está desabilitado. - Closed Loop desabilitado por causa da execução do Bólus Estendido - SMB sempre e depois dos hidratos desactivado por fonte da Glicemia activa não suportar filtro avançado - SMB não permitido no modo open loop - valor máx nas preferências - limite rígido - Segurança do Tratamento Mostrar luzes de estado no ecrã principal Aviso de limite da vida útil da insulina [h] @@ -343,50 +300,6 @@ SENS Escala do gráfico Gráfico - - Tipo da Bomba Virtual - Definição da Bomba - Bólus: Passo=%1$s\nBólus Estendido: [Passo=%2$s, Duração=%3$smin -%4$sh] \nBasal: Passo=%5$s\ nTBR: %6$s (por %7$s), Duração=%8$smin-%9$sh\n%10$s - BOMBAV - Integração para as bombas que não têm qualquer driver ainda (Open Loop) - BOMBA VIRTUAL - Definições da bomba virtual - Enviar estado para NS - - Glic NSCliente - NS glicemia - Downloads de dados de Glicose do Nightscout - xDrip+ - Receber valores de glicose do xDrip+. - BYODA - BYODA - Receber valores de glicemia do \'Build Your Own Dexcom App\'. - Aplicação Eversense (com patch) - Receber valores de Glicose da aplicação Eversense modificada. - Glimp - Receber valores BG do Glimp. - MM640g - Receber valores de Glucose do 600SeriesAndroidUploader. - Poctech - Receber valores Glucose da app Poctech - Glunovo - Receber valores GLIC do aplicativo Glunovo - Intelligo - Receber valores da app Intelligo - Tomato (MiaoMiao) - Tomato - Receber valores de Glicose da aplicação Tomato (dispositivo MiaoMiao) - GlucoRx Aidex - Aidex - Receber valores BG do GlucoRx Aidex CGMS. - Glic. Aleatória - Gerar dados de Glic. aleatórios (Somente modo de Demonstração) - GLIC - Enviar dados Glic. para xDrip+ - Seleccionar 640g/Eversense como fonte no xDrip+ - Configurações de upload de BG - Registar mudança de sensor para NS - Criar evento \"Mudança de Sensor\" no NS automaticamente ao iniciar o sensor. Tema original Design de baixa resolução diff --git a/plugins/main/src/main/res/values-pt-rPT/strings.xml b/plugins/main/src/main/res/values-pt-rPT/strings.xml index 046ee6fcd0..9554ee4b65 100644 --- a/plugins/main/src/main/res/values-pt-rPT/strings.xml +++ b/plugins/main/src/main/res/values-pt-rPT/strings.xml @@ -97,21 +97,6 @@ Erro na leitura de estado Troca de perfil criada A duração do DBT deve ser de um múltiplo de %1$d minutos e maior que 0. - - Lyumjev - Predefinição de Insulina Humalog e NovoRapid / NovoLog - Predefinição de Insulina Fiasp - Predefinição para Insulina Lyumjev - Permite definir o pico de atividade da insulina e deve ser usado somente por usuários avançados - INS - Tempo do Pico da curva de IA - Tempo Pico [min] - Oref Pico-Livre - Oref Acção-Rápida - Oref Ultra-Rápida - Duração de Acção da Insulina (DIA) de %1$f demasiado curto - corrigido para %2$f! - Novorapid, Novolog, Humalog - Fiasp Linha Estado xDrip+ (relógio) @@ -158,22 +143,6 @@ DIA ALV BAS - - Terminado, parabéns! - Não concluído ainda - Tempo decorrido - IA máxima definida corretamente - Glicose disponível da fonte seleccionada - Loop activado - APS seleccionado - Modo fechado ativado - OBJ - Programa de aprendizagem - Deseja reiniciar o objectivo? Pode perder seu progresso. - Seguinte - Anterior - Limpar terminado - Limpar iniciado Acções Alguns botões para aceder rapidamente a funções comuns @@ -190,18 +159,6 @@ Bateria da Bomba Cânula O uso do Bólus Prolongado irá parar o modo Loop Fechado durante o tempo do bólus prolongado. Quer realmente isso? - - A limitar bólus prolongado para %1$.1f U porque %2$s - A limitar hidratos para %1$d g porque %2$s - A bomba não é capaz de basais temporárias - Loop fechado desativado nas preferências - A correr a versão dev. O Loop fechado está desativado. - Loop Fechado desativado por causa da execução do Bólus Prolongado - SMB sempre e depois dos hidratos desactivado por fonte da Glicose activa não suportar filtro avançado - SMB não permitido no modo open loop - valor máx nas preferências - limite rígido - Segurança de Tratamentos Mostrar luzes de estado no ecrã principal Limite aviso idade insulina [h] @@ -318,44 +275,6 @@ TRATA SENS Gráfico - - Tipo da Bomba Virtual - Definição da Bomba - Bólus: Passo=%1$s\nBólus Prolongado: [Passo=%2$s, Duração=%3$smin -%4$sh] \nBasal: Passo=%5$s\ nDBT: %6$s (por %7$s), Duração=%8$smin-%9$sh\n%10$s - BOMBAV - Integração para as bombas que não têm qualquer driver ainda (Open Loop) - BOMBA VIRTUAL - Definições da bomba virtual - Enviar estado para NS - - Glicose ClienteNS - Glicemia do NS - Descarrega dados Glicose do Nightscout - xDrip+ - Receber valores Glicose do xDrip+. - BYODA - BYODA - Receber valores de glicemia do aplicativo BYODA. - Aplicação Eversense (com patch) - Receber valores Glicose da aplicação Eversense modificada. - Glimp - Receber valores Glicose do Glimp. - MM640g - Receber valores Glicose do 600SeriesAndroidUploader. - Poctech - Receber valores Glucose da app Poctech - Glunovo - Receber valores do aplicativo Glunovo - Tomato (MiaoMiao) - Tomato - Receber valores de Glicose da app Tomato (dispositivo MiaoMiao) - Glicose Aleatória - Gerar dados de Glic. aleatórios (Somente modo de Demonstração) - GLIC - Enviar dados Glicose para xDrip+ - Seleccionar 640g/Eversense como fonte no xDrip+ - Definições de Envio da Glicose - Registar mudança de sensor para NS Tema Gráfico Original Design de Baixa Resolução diff --git a/plugins/main/src/main/res/values-ro-rRO/strings.xml b/plugins/main/src/main/res/values-ro-rRO/strings.xml index 5c8fabc17c..8961ea29ec 100644 --- a/plugins/main/src/main/res/values-ro-rRO/strings.xml +++ b/plugins/main/src/main/res/values-ro-rRO/strings.xml @@ -97,21 +97,6 @@ Citire eșuată a stării Schimbare de profil creată Durata RBT trebuie să fie un multiplu de %1$d minute și mai mare de 0. - - Lyumjev - Setări prestabilite pentru insulinele Humalog sau NovoRapid / NovoLog - Setări prestabilite pentru Fiasp - Setări prestabilite pentru Lyumjev - Vă permite definirea vârfului activităţii insulinei şi ar trebui folosit doar de către utilizatorii avansaţi - INS - Curbă timp vârf IOB - Timp vârf [min] - Oref Vârf-Liber - Oref Insulină-Rapidă - Oref Insulină-UltraRapidă - DIA din %1$f prea scurtă - se folosește %2$f în schimb! - Novorapid, Novolog, Humalog - Fiasp Linie de stare xDrip+ (ceas) @@ -159,22 +144,6 @@ DIA TARG BZL - - Finalizat cu succes! - Încă incomplet - Timp scurs - IOB maxim configurat corect - Glicemie disponibilă din sursa selectată - Buclă activată - APS selectat - Mod buclă închisă activat - OBI - Program de învăţare - Doriți să reîncepeți obiectivul? Vă puteți pierde progresul. - Următor - Anterior - Șterge starea \"Terminat\" - Șterge starea \"Început\" Acțiuni Butoane pentru accesarea celor mai comune facilităţi @@ -192,18 +161,6 @@ Canula Utilizarea unui bolus extins va opri modul buclă închisă pe timpul livrării bolusului extins. Sigur doriți acest lucru? vechime canulă - - Se limitează bolusul extins la %1$.1f U datorită %2$s - Se limitează carbohidrații %1$d g datorită %2$s - Pompa nu suportă bazale temporare - Modul buclă închisă dezactivat în preferințe - Se folosește versiunea dev. Bucla închisă este dezactivată. - Bucla închisă dezactivată din cauza livrării bolusului extins - SMB dezactivat întotdeauna și după carbohidrați, deoarece sursa glicemiei nu suportă filtrare avansată - SMB nu este permis în mod buclă deschisă - valoare maximă în preferințe - limită fizică - Setări siguranță tratament Afișați indicatorii luminoși ai pompei pe ecranul de start Prag de avertizare vechime insulină [h] @@ -320,44 +277,6 @@ TRAT SENS Grafic - - Tipul pompei virtuale - Definirea pompei - Bolus: Pas=%1$s\nBolus Extins: [Pas=%2$s, Durată=%3$smin-%4$sh]\nBazală: Pas=%5$s\nRBT: %6$s (cu %7$s), Durată=%8$smin-%9$sh\n%10$s - POMPĂV - Integrare cu pompele ce nu au încă un driver software disponibil (Buclă Deschisă) - POMPĂ VIRTUALĂ - Setări pompă virtuală - Trimitere status către NS - - Glicemie NSClient - NS GL - Descarcă datele despre glicemii din Nightscout - xDrip+ - Primește valorile glicemiei din xDrip+. - BYODA - BYODA - Primește valori de glicemie de la aplicația Dexcom modificată. - Aplicația Eversense (modificată) - Primește valorile glicemiei din aplicația Eversense modificată. - Glimp - Primește valorile glicemiei din aplicația Glimp. - MM640g - Primește valorile glicemiei din aplicația 600SeriesAndroidUploader (Medtronic). - Poctech - Citire a valorii glicemiei din aplicația Poctech - Glunovo - Primiți glicemii de la aplicația Glunovo - Tomato (MiaoMiao) - Tomato - Înregistrează valorile glicemiei din aplicația Tomato (dispozitiv MiaoMIao) - Glicemie aleatoare - Generare glicemie aleator (doar mod Demo) - Gl - Trimite date glicemie la xDrip+ - Selectați 640g/Eversense ca sursă de date în xDrip+ - Setări înregistrare glicemie - Înregistrează schimbarea senzorului în NS Tema originală Skin de rezoluție redusă diff --git a/plugins/main/src/main/res/values-ru-rRU/strings.xml b/plugins/main/src/main/res/values-ru-rRU/strings.xml index e709cb0e8b..3c56618229 100644 --- a/plugins/main/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/main/src/main/res/values-ru-rRU/strings.xml @@ -101,21 +101,6 @@ Переключатель профиля создан Длительность временного базала TBR должна быть кратной %1$d минутам и больше 0. QR код для создания одноразового пароля - - Lyumjev - Предустановки для Humalog и Novorapid / Novolog - Предустановки для Fiasp - Предустановки для Lyumjev - Позволяет самостоятельно задавать пик активности инсулина - только для опытных пользователей - ИНС - Время пика активного инс IOB - Время пика [min] - Свободный от пиков Oref - Быстро действующий Oref - Сверхбыстрый Oref - Значение времени действия инс %1$f слишком мало - применено %2$f! - Новорапид, Хумалог - Фиасп Cтрока состояния xDrip (часы) @@ -171,23 +156,6 @@ Время действия инсулина DIA ЦЕЛЬ БАЗАЛ - - Завершено, отлично! - Не завершено - Прошло времени - Максимум активного инсулина IOB установлен правильно - ГК доступна из выбранного источника - Служба синхронизации имеет разрешение на запись - Цикл активирован - Выбран APS - Режим замкнутого цикла включен - ЦЕЛИ - Обучающая программа - Хотите сбросить начатую цель? Можете потерять достигнутое. - Далее - Назад - Очистить завершенные - Очистить начатые Действия Кнопки быстрого доступа к некоторым распространенным настройкам @@ -207,18 +175,6 @@ время, отработанное катетером помпы время отработанное разовой помпой Разовая помпа - - Ограничение пролонгированного болюса до %1$.1f ед. из-за %2$s - Ограничение углеводов до %1$d г. из-за %2$s - Помпа не рассчитана на подачу временного базала - Режим замкнутого цикла отключен в настройках - Работает версия разработчика. Замкнутый цикл отключен. - Замкнутый цикл отключен из-за работы Пролонгированного Болюса - Опция супер микро болюс всегда и после углеводов отключена т. к. активный источник ГК не поддерживает комплексное фильтрование - В режиме незамкнутого цикла open loop супер микро болюс SMB не допускается - максимальное значение в настройках - жесткий предел - Безопасность терапии Показать индикаторы состояния на главном экране Порог предупреждения о времени, отработанном катетером [h] @@ -345,50 +301,6 @@ ЧУВСТВ Масштаб графика График - - Тип виртуальной помпы - Определение помпы - Болюс: Шаг =%1$s\n Пролонгированный Болюс: [Шаг =%2$s, Продолжительность =%3$sмин -%4$sh] \nБазал: Шаг =%5$s\n ВБС: %6$s (на %7$s), Продолжительность =%8$sмин -%9$sh\n%10$s - ВиртПомпа - Интеграция с помпами, еще не имеющими драйвера (незамкнутый цикл) - ВИРТУАЛЬНАЯ ПОМПА - настройки вирт помпы - статус передачи данных в NS - - СК с клиента Nightscout - ГК с NS - Получать данные гликемии с сайта Nightscout - xDrip + - Получать данные гликемии от xDrip+. - Самост собран прилож Dexcom - ССП DEXCOM - Получать данные ГК от \'Самостоятельно собранного приложения Dexcom\'. - Приложение Eversense (пропатченное) - Получать данные гликемии от пропатченного приложения Eversense. - Glimp - Получать данные гликемии от Glimp. - MM640g - Получать данные гликемии от 600SeriesAndroidUploader. - Poctech - Получать данные гликемии от приложения Poctech - Приложение Glunovo - Получать данные гликемии от приложения Glunovo - Приложение Intelligo - Получать данные гликемии от приложения Intelligo - Томато (MiaoMiao) - Томато - Получать значения ГК от приложения Tomato (устройство MiaoMiao) - Aidex GlucoRx - Aidex - Получить значения ГК от GlucoRx Aidex - Случайные значения ГК - Генерировать случайные данные ГК (только демо-режим) - ГК - Отправлять данные СК на xDrip+ - В xDrip + выберите источник данных 640g/Eversense - Параметры загрузки СК - Вносить запись о замене сенсора в NS - Автоматически создать событие \"Замена сенсора\" в NS при запуске сенсора Исходная тема оформления Тема для низкого разрешения diff --git a/plugins/main/src/main/res/values-sk-rSK/strings.xml b/plugins/main/src/main/res/values-sk-rSK/strings.xml index 05e2e9075c..abd63b9d3e 100644 --- a/plugins/main/src/main/res/values-sk-rSK/strings.xml +++ b/plugins/main/src/main/res/values-sk-rSK/strings.xml @@ -101,21 +101,6 @@ Prepnutie profilu vytvorené Trvanie dočasného bazálu musí byť násobkom %1$d minút a musí byť väčšie ako 0. QR kód pre nastavenie jednorázového hesla - - Lyumjev - Predvoľba pre inzulín Humalog a Novorapid - Predvoľba pre inzulín Fiasp - Predvoľba pre inzulín Lyumjev - Umožňuje definovať vrchol účinnosti inzulínu a malo by byť používané iba pokročilými užívateľmi - INZ - Čas vrcholu IOB krivky - Vrchol krivky [min] - Voliteľný vrchol - Oref - Rýchlo pôsobiaci - Oref - Ultra rýchly - Oref - DIA %1$f je príliš krátke - AAPS namiesto toho použilo %2$f ! - Novorapid, Novolog, Humalog - Fiasp Stavový riadok xDrip+ (hodinky) @@ -171,23 +156,6 @@ DIA CIEĽ BAZ - - Hotovo, gratulujeme! - Nedokončené - Uplynutý čas - Maximálne IOB nastavené správne - Glykémie dostupné z vybraného zdroja - Služba synchronizácie má oprávnenie k zápisu - Uzavretý okruh povolený - APS vybrané - Uzavretý okruh povolený - CIEĽ - Výukový program - Chcete resetovať začiatok cieľa? Môžete prísť o svoj pokrok. - Ďalej - Späť - Vymazanie dokončené - Vymazanie začaté Akcie Niektoré tlačidlá na rýchly prístup do spoločných funkcií @@ -207,18 +175,6 @@ vek kanyly vek náplasťovej pumpy Náplasťová pumpa - - Predĺžený bolus obmedzený na %1$.1f JI: %2$s - Sacharidy obmedzené na %1$d g: %2$s - Pumpa nepodporuje dočasné bazály - Uzavretý okruh zakázaný v nastaveniach - Bežiaca vývojárska verzia. Uzavretý okruh je zakázaný. - Uzavretý okruh je zastavený kvôli prebiehajúcemu predĺženému bolusu - \"SMB vždy\" a \"po jedle\" zakázané pretože zdroj glykémie nepodporuje rozšírené filtrovánie - SBM nie sú povolené pri otvorenom okruhu - maximálna hodnota v nastaveniach - pevný limit - Bezpečnosť zadania ošetrenia Zobraziť indikátory stavu na domovskej obrazovke Prah upozornenia na vek kanyly [h] @@ -346,50 +302,6 @@ SENZ Mierka grafu Graf - - Typ virtuálnej pumpy - Definícia pumpy - Bolus: Krok =%1$s\nPredl. bolus: [Krok=%2$s, Dĺžka=%3$smin-%4$sh]\nBazál: Krok=%5$s\nDoč. bazál: %6$s (%7$s), Dĺžka=%8$smin-%9$sh\n%10$s - VPUM - Ovládač pumpy pre užívateľov bez podporovanej pumpy (Otvorený okruh) - Virtuálna pumpa - Nastavenie virtuálnej pumpy - Nahrať stav do NS - - Glykémie z NS - NS GL - Získavať hodnoty glykémií z Nightscoutu - xDrip+ - Prijímať hodnoty glykémií z xDrip+. - BYODA - BYODA - Prijímať hodnoty glykémií z upravenej aplikácie Dexcom (BYODA). - Eversense aplikácia (upravená) - Získavať glykémie z upravenej Eversense aplikácie. - Glimp - Získavať hodnoty glykémií z aplikácie Glimp. - MM640g - Získavať hodnoty glykémií z 600SeriesAndroidUploader. - Poctech - Získavať glykémie z aplikácie Poctech - Glunovo - Získavať glykémie z aplikácie Glunovo - Intelligo - Prijímať hodnoty z aplikácie Intelligo - Tomato (MiaoMiao) - Tomato - Prijímať glykémie z aplikácie Tomato (zariadenie MiaoMiao) - GlucoRx Aidex - Aidex - Prijímať hodnoty glykémie zo senzora GlucoRx Aidex. - Náhodná glykémia - Vygeneruj náhodné dáta glykémií (iba Demo režim) - Gly - Odosielať glykémie do xDrip+ - V xDrip+ vyberte zdroj dát 640g/Eversense - Nastavenie nahrávania glykémie - Ulož výmenu senzora do NS - Vytvoriť udalosť \"Výmena senzora\" v NS automaticky pri spustení senzora Pôvodný vzhľad Vzhľad pre nízke rozlišenie diff --git a/plugins/main/src/main/res/values-sr-rCS/strings.xml b/plugins/main/src/main/res/values-sr-rCS/strings.xml index 2046cec927..e9e2429e2d 100644 --- a/plugins/main/src/main/res/values-sr-rCS/strings.xml +++ b/plugins/main/src/main/res/values-sr-rCS/strings.xml @@ -46,11 +46,6 @@ IOB: Bolus: Basal: - - Unapred podešena postavka insulina za Humalog i NovoRapid / NovoLog - Unapred podešena postavka insulina za Fiasp - Unapred podešena postavka insulina za Lyumjev - Omogućava definisanje vrhunca aktivnosti insulina i trebaju ga koriste samo napredni korisnici Prikažite informacije o tvom loop-u na tvom xDrip+ satu. @@ -62,16 +57,12 @@ Profil Definiši profil koji je dostupan bez internet veze. - - Program učenja Neke tipke za brzi pristup uobičajenim funkcijama Privremeni Basal Produženi Bolus Senzor Insulin - - Sigurnost tretmana insulin Prihvatite novi privremeni bazal: @@ -89,17 +80,6 @@ Tretmani Tretmani - - Integracija pumpe za pumpe koje još uvek nemaju upravljački program (Open Loop) - VIRTUALNA PUMPA - - Preuzimajte podatke GUK sa Nightscout-a - xDrip+ - Preuzimajte vrijednosti GUK od xDrip+. - Preuzimajte vrednosti GUK iz zakrpljene aplikacije Eversense. - Preuzimajte vrednosti GUK od Glimp-a. - Preuzimajte vrednosti GUK od 600SeriesAndroidUploader-a. - GUK diff --git a/plugins/main/src/main/res/values-sv-rSE/strings.xml b/plugins/main/src/main/res/values-sv-rSE/strings.xml index 2b858cf736..bc85bc3c5a 100644 --- a/plugins/main/src/main/res/values-sv-rSE/strings.xml +++ b/plugins/main/src/main/res/values-sv-rSE/strings.xml @@ -97,21 +97,6 @@ Statuskontroll misslyckad Skapade ett profilbyte Durationen måste vara större än 0 och en multipel av %1$d minuter. - - Lyumjev - Insulininställning för vanliga direktverkande insuliner som Humalog, Lispro, Apidra och Novorapid/Novolog - Insulininställning för ultrasnabba insuliner, t ex Fiasp - Insulininställning för Lyumjev - Låter dig ställa in tidpunkten för toppen på insulinets aktivitet. Bör bara användas av avancerade användare - INS - Peaktid för IOB-kurvan - Peaktid [min] - Free-Peak Oref - Rapid-Acting Oref - Ultra-Rapid Oref - %1$f tim DIA är för kort. Använder %2$f istället! - Novorapid, Novolog, Humalog, Apidra - Fiasp xDrip+ Statusrad (klocka) @@ -161,22 +146,6 @@ DIA Mål BAS - - Klart. Bra jobbat! - Inte slutfört ännu - Förfluten tid - Max IOB är korrekt angivet - BG tillgängligt från vald källa - Loop aktiverad - APS vald - Closed loop aktiverad - Mål - Inlärningsprogram - Vill du starta om målet? Du kan förlora de steg du gjort hittills. - Nästa - Föregående - Rensa avslutade - Rensa påbörjade Åtgärder Knappar för att snabbt komma åt vanliga funktioner @@ -196,18 +165,6 @@ kanylålder slanglös pump ålder Slanglös pump - - Begränsar bolus till %1$.1f enheter pga %2$s - Begränsar kolhydrater till %1$d g pga %2$s - Pumpen kan inte hantera temp basaler - Closed Loop inaktiverat i Inställningar - Du kör nu dev-versionen. Closed Loop inaktiverat. - Closed Loop-läget inaktiverat pga att en förlängd bolus är aktiv - SMB Alltid På och SMB Efter Kolhydrater är inaktiverat pga att den aktiva BG-källan inte stöder avancerad filtrering - SMB inte tillåtet i Open Loop - maxvärde i Inställningar - hård begränsning - Säkerhetsbegränsningar Visa \"statuslampor\" på hemskärmen Insulinålder - varning: [h] @@ -327,45 +284,6 @@ Beh SENS Graf - - Typ av virtuell pump - Pumpdefinition - Bolus: Steg =%1$s\nFörlängd bolus: [Steg=%2$s, duration =%3$smin -%4$sh] \nBasal: Steg=%5$s\nTempbasal: %6$s (av %7$s), duration =%8$smin -%9$sh\n%10$s - vPump - Integration för pumpar som ännu inte stöds av AndroidAPS (Open loop) - Virtuell pump - Inställningar för Virtuell pump - Ladda upp status till Nightscout - - NSClient BG - NS BG - Ladda ner BG-data från Nightscout - xDrip+ - Ta emot BG-data från xDrip+. - Patchad Dexcom-app - Dex - Ta emot BG-värden från \"Bygg din egen Dexcom-app\". - Eversense App (modifierad) - Ta emot BG-data från den modifierade -Eversense-appen. - Glimp - Ta emot BG-data från Glimp - Minimed 640G - Ta emot BG-data från 600SeriesAndroidUploader - Poctech - Ta emot BG-data från Poctechappen - Glunovo - Ta emot värden från Glunovo-appen - Tomato (MiaoMiao) - Tomato - Ta emot BG-data från tomato app (MiaoMiao-enhet) - Slumpgenerator för BG - Generera slumpmässiga BG-data (endast demo-läge) - BG - Skicka BG-data till xDrip+ - Välj \"640G/Eversense\" som datakälla i xDrip+ - Uppladdningsinställningar för BG - Logga sensorbyte till Nightscout Ursprungligt tema Lågupplöst tema diff --git a/plugins/main/src/main/res/values-tr-rTR/strings.xml b/plugins/main/src/main/res/values-tr-rTR/strings.xml index 8da2217a97..f13c29c1c6 100644 --- a/plugins/main/src/main/res/values-tr-rTR/strings.xml +++ b/plugins/main/src/main/res/values-tr-rTR/strings.xml @@ -101,21 +101,6 @@ Profil değiştirme yapıldı GBO süresi %1$d dakikanın katı ve 0\'dan büyük olmalıdır. Tek kullanımlık şifre kurulumu için QR Kodu - - Lyumjev - Humalog ve NovoRapid / NovoLog için İnsülin Profili - Fiasp için insülin Profili - Lyumjev için insülin ayarı - İnsülin aktivitesinin zirvesini tanımlamanıza izin verir ve yalnızca ileri düzey kullanıcılar tarafından kullanılmalıdır. - İNS - AİNS Eğrisi Tepe Zamanı - Tepe zamanı [min] - Serbest tepe Oref - Hızlı etkili Oref - Ultra Hızlı Oref - DIA %1$f çok kısa - bunun yerine %2$f kullanıyor! - Novorapid, Novolog, Humalog - Fiasp xDrip+ Durum Çizgisi (saat) @@ -171,23 +156,6 @@ İES HDF BAZ - - Tamamlandı, tebrikler! - Henüz tamamlanmadı - Geçen süre - Maksimal AİNS doğru şekilde ayarlandı - Seçili kaynaktan KŞ kullanılabilir - Senkronizasyon servisi yazma iznine sahip - Döngü etkin - APS Seçildi - Kapalı mod etkin - GRV - Eğitim programı - Görevleri sıfırlamak istiyor musunuz? Tüm yaptıklarınızı kaybedeceksiniz. - Sonraki - Geri - Komple tamamlandı - Yeniden Başla Eylemler Ortak özelliklere hızlıca erişmek için bazı düğmeler @@ -207,18 +175,6 @@ kanül yaşı yama pompa yaşı Yama pompa - - %2$s\'den dolayı yayma bolus %1$.1f Ü ile sınırlandırılıyor - %2$s\'den dolayı karbonhidratlar %1$d g ile sınırlandırılıyor - Pompa geçici bazal özellikli değil - Kapalı Döngü tercihlerde devre dışı bırakıldı - Geliştirici sürümü çalışıyor. Kapalı Döngü devre dışı. - Yayma bolus çalıştığı için kapalı döngü devre dışı bırakıldı - Aktif KŞ kaynağı gelişmiş filtrelemeyi desteklemediği için SMB (Super Micro Bolus) her zaman ve karbonhidratlardan sonra devre dışı bırakıldı - Açık Döngü modunda SMB\'ye (Super Micro Bolus) izin verilmiyor - tercihlerde maksimum değer - sert sınır - Tedavi güvenliği Ana ekranda durum ışıklarını göster Kanül ömrü uyarısı belirle (saat) [h] @@ -346,50 +302,6 @@ SENS Grafik ölçeği Grafik - - Sanal pompa tipi - Pompa tanımı - Bolus: Adım=%1$s\nYayma Bolus: [Adım=%2$s, Süre=%3$sdk-%4$ssa]\nBazal: Adım=%5$s\nGBO: %6$s (ile %7$s), Süre=%8$sdk-%9$ssa\n%10$s - VPOMP - Henüz herhangi bir sürücüye sahip olmayan pompalar için pompa entegrasyonu (Açık Döngü) - SANAL POMPA - Sanal pompa ayarları - Nightscout\'a durum aktar - - NSClient KŞ - NS KŞ - Nightscout\'tan KŞ verilerini yükler - xDrip+ - XDrip+\'ten KŞ değerlerini alır. - BYODA - BYODA - \'Kendi Dexcom Uygulamanızı Oluşturun\' uygulamasından KŞ değerlerini alın. - Eversense App (yamalı) - Yamalı Eversense uygulamasından KŞ değerleri alır. - Glimp - Glimp\'ten KŞ değerleri alır. - MM640g - 600SeriesAndroidUploader\'dan KŞ değerleri alır. - Poctech - Poctech uygulamasından KŞ değerlerini alır - Glunovo - Glunovo uygulamasından değerler alır - Intelligo - Intelligo uygulamasından değerler alır - Tomato (MiaoMiao) - Tomato - KŞ değerlerini Tomato uygulamasından (MiaoMiao Cihazından) al - GlucoRx Aidex - Aidex - GlucoRx Aidex CGMS\'den KŞ değerleri alır. - Rastgele KŞ - Rastgele KŞ verileri oluşturun (Yalnızca demo modunda) - - XDrip+\'a KŞ verilerini gönder - xDrip+ içerisinde 640g/Eversense veri kaynağı seç - KŞ yükleme ayarları - Sensör değişimlerini NS\'a kaydet - Sensör başlangıcında otomatik olarak NS\'de \"Sensör Değişimi\" olayı oluştur Orjinal görünüm Düşük çözünürlüklü görünüm diff --git a/plugins/main/src/main/res/values-zh-rCN/strings.xml b/plugins/main/src/main/res/values-zh-rCN/strings.xml index 25056e363a..fa3ba90a5e 100644 --- a/plugins/main/src/main/res/values-zh-rCN/strings.xml +++ b/plugins/main/src/main/res/values-zh-rCN/strings.xml @@ -98,21 +98,6 @@ 配置文件切换已创建 TBR(临时基础率) 的持续时间必须是 %1$d 分钟的倍数,且大于0。 用于安装一次性随机验证码的二维码 - - Lyumjev(超速效赖脯胰岛素) - 胰岛素预设为 Humalog(优泌乐) 和 NovoRapid(门冬)/NovoLog(诺和锐) - Fiasp 胰岛素预设 - 预设为Lyumjev速效赖脯胰岛素 - 允许您定义胰岛素作用的峰值, 并且只应由高级用户使用 - INS - IOB 曲线峰值时间 - 峰值时间 [min] - Free-Peak Oref - 速效 Oref - 超速效 Oref - DIA of %1$f 太短了,请使用 %2$f 代替 - 诺和锐, 门冬, 优泌乐 - Fiasp超速效 xDrip+状态线 (手表) @@ -168,22 +153,6 @@ DIA TARG 基础率 - - 完成了,做的好 - 尚未完成 - 已用时间 - 合理地设置最大 IOB - 所选的血糖值来源的血糖是可用的 - 闭环启用了 - APS已选择 - 闭环模式启用了 - 目标 - 学习计划 - 你想要重置已启动的目标? 你会失去已有的进度。 - 下一个 - 上一个 - 清除已完成 - 清除已启动 手动操作 一些快速访问常用功能的按钮 @@ -203,18 +172,6 @@ 导管年龄 patch 泵年龄 Patch 泵 - - 由于 %2$s, 将扩展大剂量限制为 %1$.1f U - 由于 %2$s, 将碳水化合物限制为 %1$d 克 - 这个泵无法设置临时基础率 - 在参数选项中禁用了闭环模式 - 正在运行开发版本,闭环被禁用了 - 由于运行扩展大剂量而禁用了闭环 - SMB always and after carbs disabled 因为实时的血糖来源不支持高级筛选 - 在开环模式下不允许使用SMB-微型大剂量 - 在参数选项里的最大值 - 硬限制 - 治疗安全 在主屏幕上显示状态指示灯 胰岛素状态灯警示阀值[小时] @@ -340,47 +297,6 @@ 灵敏度 图形缩放 绘图 - - 虚拟泵类型 - 泵定义 - 大剂量: Step=%1$s\n扩展大剂量: [Step=%2$s, 持续时间=%3$smin-%4$sh]\n基础率: Step=%5$s\nTBR临时基础率: %6$s (by %7$s), 持续时间=%8$smin-%9$sh\n%10$s - 虚拟泵 - 与我们还没有其驱动的泵集成(开环) - 虚拟泵 - 虚拟泵设置 - 将状态上传到 NS - - NSClient 血糖 - NS血糖 - 从 Nightscout 下载 血糖数据 - xDrip+ - 从 xDrip+ 接收血糖值。 - BYODA德康补丁版(构建你自己的德康应用Build Your Own Dexcom App) - BYODA - 从德康补丁版接收血糖数据(Build Your Own Dexcom App)。 - Everyang App (补丁) - 从 Eversense 补丁app接收血糖值。 - Glimp - 从 Glimp 接收血糖值。 - 美敦力640g - 从美敦力600Series 的AndroidUploader 接收血糖值。 - Poctech - 从 Poctech app 接收血糖值。 - Glunovo - 从Glunovo应用接收血糖数据。 - 番茄(喵喵) - 番茄 - 从番茄app(喵喵设备) 接收血糖值 - GlucoRx Aidex动泰 - Aidex动泰 - 从GlucoRx Aidex动泰持续葡萄糖监测系统接收血糖值。 - 随机血糖 - 生成随机血糖数据(仅限demo演示模式) - 血糖 - 将血糖数据发送到 xDrip + - 在 xDrip + 选择640g/Eversense 数据源 - 血糖上传设置 - 记录传感器更换至NS服务器 原始皮肤 低分辨率皮肤 diff --git a/plugins/source/src/main/java/info/nightscout/source/BGSourceFragment.kt b/plugins/source/src/main/java/info/nightscout/source/BGSourceFragment.kt index 29808634f9..a308813c4e 100644 --- a/plugins/source/src/main/java/info/nightscout/source/BGSourceFragment.kt +++ b/plugins/source/src/main/java/info/nightscout/source/BGSourceFragment.kt @@ -140,7 +140,7 @@ class BGSourceFragment : DaggerFragment(), MenuProvider { val newDay = position == 0 || !dateUtil.isSameDay(glucoseValue.timestamp, glucoseValues[position - 1].timestamp) holder.binding.date.visibility = newDay.toVisibility() holder.binding.date.text = if (newDay) dateUtil.dateStringRelative(glucoseValue.timestamp, rh) else "" - holder.binding.time.text = dateUtil.timeString(glucoseValue.timestamp) + holder.binding.time.text = dateUtil.timeStringWithSeconds(glucoseValue.timestamp) holder.binding.value.text = glucoseValue.valueToUnitsString(profileFunction.getUnits()) holder.binding.direction.setImageResource(glucoseValue.trendArrow.directionToIcon()) if (position > 0) { diff --git a/plugins/source/src/main/res/values-af-rZA/strings.xml b/plugins/source/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 0000000000..844c8e545d --- /dev/null +++ b/plugins/source/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,15 @@ + + + + Laai BG data af vanaf Nightscout + Eversense App (bygewerk) + Ontvang BG waardes uit die gelapte Eversense toep. + Ontvang BG waardes vanaf Glimp. + Onvang BG waardes vanaf die 600SeriesAndroidUploader. + Poctech + Ontvang BG waardes van Poctech toepassing + Tomato (MiaoMiao) + Tomato + Ontvang BG waardes vanaf Tomato toep (MiaoMiao toestel) + BG oplaai instellings + diff --git a/plugins/source/src/main/res/values-bg-rBG/strings.xml b/plugins/source/src/main/res/values-bg-rBG/strings.xml new file mode 100644 index 0000000000..0724dc5059 --- /dev/null +++ b/plugins/source/src/main/res/values-bg-rBG/strings.xml @@ -0,0 +1,21 @@ + + + + Изтегля стойности на КЗ от Nightscout + xDrip+ + Получаване на данни за КЗ от xDrip+. + BYODA + BYODA + Eversense приложение(модифицирано) + Получава данни за КЗ от модифицираното приложение на Eversense. + Получава данни за КЗ от Glimp. + Получават стойности на КЗ от 600SeriesAndroidUploader. + Poctech + Получавай данни за КЗ от Poctech апликацията. + Глуново + Получавай данните от Glunowo апликацията + Tomato(MяоМяо) + Tomato + Получавай КЗ от Tomato апликация (устройство МяоМяо) + Настройки при качване на КЗ към Nightscout + diff --git a/plugins/source/src/main/res/values-ca-rES/strings.xml b/plugins/source/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 0000000000..f43b3c3f92 --- /dev/null +++ b/plugins/source/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,22 @@ + + + + Descarrega dades de glucèmia des de Nightscout + xDrip+ + Rebre valors de glucèmia de xDrip+. + Dexcom (BYODA) + BYODA + Rebre els valors de glucosa de l\'aplicació Dexcom \'Build Your Own Device\'. + App Eversense (\"parxejada\") + Rebre valors de glucèmia de l\'app Eversense \"parxejada\". + Rebre valors de glucèmia de Glimp. + Rebre valors de glucèmia del 600SeriesAndroidUploader. + Poctech + Rebre valors de glucèmia de l\'app Poctech + Glunovo + Rebre valors de l\'app Glunovo + Tomato (MiaoMiao) + Tomato + Rebre valors de glucèmia de l\'app Tomato (dispositiu MiaoMiao) + Configuració enviament dades glucèmia + diff --git a/plugins/source/src/main/res/values-cs-rCZ/strings.xml b/plugins/source/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 0000000000..c6b21df27b --- /dev/null +++ b/plugins/source/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,39 @@ + + + + Glykémie z NS + NSGL + Příjem glykémií z Nightscoutu + xDrip+ + Příjem glykémií z xDripu+. + BYODA + BYODA + Příjem hodnot glykémií z upravené aplikace Dexcom (BYODA). + Eversense aplikace (upravená) + Příjem glykémií z modifikované Eversense aplikace. + Glimp + Příjem glykémií z Glimpu. + MM640g + Příjem glykémií z Uploaderu 640G. + Poctech + Získávat glykémie z aplikace Poctech + Glunovo + Získávat glykémie z aplikace Glunovo + Intelligo + Přijímat hodnoty z aplikace Intelligo + Tomato (MiaoMiao) + Tomato + Přijímat hodnoty glykémií z Tomato aplikace (MiaoMiao zařízení) + GlucoRx Aidex + Aidex + Přijímat hodnoty glykémie ze senzoru GlucoRx Aidex. + Náhodná glykémie + Generovat náhodná data glykémie (pouze režim Demo) + Gly + Odesílat data do xDrip+ + V xDrip+ vyberte zdroj dat 640g/Eversense + Nastavení nahrávání glykémií + Zaznamenávat výměnu senzoru do NS + Vytvořit událost \"Výměna senzoru\" v NS automaticky po spuštění senzoru + směr + diff --git a/plugins/source/src/main/res/values-da-rDK/strings.xml b/plugins/source/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 0000000000..74831ff338 --- /dev/null +++ b/plugins/source/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,26 @@ + + + + Downloader BG data fra Nightscout + xDrip+ + Modtag BG-værdier fra xDrip+. + BYODA + BYODA + Modtag BS-værdier fra \'Byg din egen Dexcom App\'. + Eversense App (patched) + Modtag BG værdier fra den patchede Eversense app. + Modtag BG-værdier fra Glimp. + Modtag BG-værdier fra 600SeriesAndroidUploader. + Poctech + Modtag BS-værdier fra Poctech app + Glunovo + Modtag værdier fra Glunovo app + Intelligo + Modtag værdier fra Intelligo-appen + Tomato (MiaoMiao) + Tomato + Modtag BS-værdier fra Tomato-appen (MiaoMiao enhed) + Aidex + Modtag BG-værdier fra GlucoRx Aidex CGMS. + BS upload indstillinger + diff --git a/plugins/source/src/main/res/values-de-rDE/strings.xml b/plugins/source/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 0000000000..f62cc41420 --- /dev/null +++ b/plugins/source/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,26 @@ + + + + Lade Blutzuckerdaten von Nightscout + xDrip+ + Empfange Blutzuckerwerte von xDrip+. + BYODA + BYODA + Erhalte BZ-Werte von der \'Build Your Own Dexcom App\'. + Eversense App (gepatcht) + Empfange BZ-Werte von der gepatchten Eversense-App. + Empfange Blutzuckerwerte von Glimp. + Empfange Blutzuckerwerte vom 600SeriesAndroidUploader. + Poctech + Empfange Blutzucker-Werte von der Poctech-App. + Glunovo + Werte von der Glunovo App erhalten + Intelligo + Empfange Werte von der Intelligo App + Tomato (MiaoMiao) + Tomato + Empfange Blutzucker-Werte von der Tomato-App (MiaoMiao-Geräte) + Aidex + Erhalte BG-Werte von GlucoRx Aidex CGMS. + BZ Upload Einstellungen + diff --git a/plugins/source/src/main/res/values-el-rGR/strings.xml b/plugins/source/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 0000000000..0458c2f588 --- /dev/null +++ b/plugins/source/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,15 @@ + + + + Λήψη δεδομένων BG από Nightscout + Eversense App (τροποποιημένη) + Λάβετε τις τιμές BG από την εφαρμογή του Eversense. + Λάβετε τις τιμές BG από το Glimp. + Λάβετε τις τιμές BG από το 600SeriesAndroidUploader. + Poctech + Λάβετε τις τιμές BG από την εφαρμογή Poctech + Tomato (MiaoMiao) + Tomato + Λάβετε τιμές BG από Tomato app (MiaoMiao) + Ανέβασμα ρυθμίσεων BG + diff --git a/plugins/source/src/main/res/values-es-rES/strings.xml b/plugins/source/src/main/res/values-es-rES/strings.xml new file mode 100644 index 0000000000..1af8d15dc1 --- /dev/null +++ b/plugins/source/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,24 @@ + + + + Eversense App (parchada) + Glunovo + Recibir los valores de glucosa de la aplicación Glunovo + Intelligo + Recibir los valores de glucosa de Intelligo + Tomato (MiaoMiao) + Tomato + Recibir los valores de glucosa de Tomato App (MiaoMiao) + GlucoRx Aidex + Aidex + Recibir los valores de glucosa de GlucoRx Aidex CGMS + Glucosa aleatoria + Generar datos aleatorios de glucosa (sólo modo Demo) + BG + Enviar datos de glucosa a xDrip+ + En xDrip+, selecciona 640G/Eversense como fuente de datos + Ajuste de subida de datos de glucosa + Registro de cambio de sensor en Nightscout + Crear evento \"Cambio de sensor\" en Nightscout automáticamente al iniciar el sensor + dirección + diff --git a/plugins/source/src/main/res/values-fr-rFR/strings.xml b/plugins/source/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 0000000000..a9e7d5075c --- /dev/null +++ b/plugins/source/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,39 @@ + + + + Glycémie NSClient + Gly NS + Télécharge les glycémies depuis Nightscout + xDrip+ + Recevoir les glycémies depuis xDrip+. + BYODA + BYODA + Recevoir les valeurs de glycémie de l’application Dexcom patchée (BYODA). + App Eversense (patché) + Recevoir les valeurs de glycémie de l’app Eversense patchée. + Glimp + Recevoir les glycémies depuis Glimp. + Medtronic 640g + Recevoir les glycémies depuis le 600SeriesAndroidUploder. + Poctech + Recevoir les glycémies depuis l\'app Poctech + Glunovo + Recevoir des valeurs de l\'application Glunovo + Intelligo + Recevoir des valeurs depuis l\'application Intelligo + Tomato (MiaoMiao) + Tomato + Recevoir les valeurs de glycémie de l\'application Tomato (appareil MiaoMiao) + GlucoRx Aidex + Aidex + Recevoir les valeurs de glycémie du MGC GlucoRx Aidex. + Gly Aléatoire + Générer des glycémies aléatoires (mode démo uniquement) + Gly + Transmettre les Gly vers xDrip+ + Dans xDrip+ veuillez séléctionner 640g/Eversense comme source de données + Paramètres de téléchargement des glycémies + Enreg. du changement de capteur sur NS + Créer automatiquement un événement \"Changement de capteur\" dans NS au démarrage du capteur + direction + diff --git a/plugins/source/src/main/res/values-ga-rIE/strings.xml b/plugins/source/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 0000000000..ffb3c50b04 --- /dev/null +++ b/plugins/source/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,11 @@ + + + + Sonraí a íoslódáil ó Nightscout + xDrip+ + Luachanna BG a fháil ó xDrip+. + Luachanna BG a fháil ón 600SeriesAndroidUploader. + Poctech + Tomato (MiaoMiao) + Tomato + diff --git a/plugins/source/src/main/res/values-hr-rHR/strings.xml b/plugins/source/src/main/res/values-hr-rHR/strings.xml new file mode 100644 index 0000000000..a2ed58684d --- /dev/null +++ b/plugins/source/src/main/res/values-hr-rHR/strings.xml @@ -0,0 +1,13 @@ + + + + Preuzima podatke o GUK-u s Nightscout-a + Preuzima podatke o GUK-a s xDrip+. + Primajte vrijednosti GUK-a iz zakrpane aplikacije Eversense. + Primajte vrijednosti GUK-a od Glimpa. + Primajte vrijednosti glukoze u krvi od 600SeriesAndroidUploader. + Intelligo + Primite vrijednosti iz aplikacije Intelligo + Aidex + Primite vrijednosti GK od GlucoRx Aidex CGMS. + diff --git a/plugins/source/src/main/res/values-hu-rHU/strings.xml b/plugins/source/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 0000000000..ec1117256e --- /dev/null +++ b/plugins/source/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,7 @@ + + + + Poctech + Tomato (MiaoMiao) + Tomato + diff --git a/plugins/source/src/main/res/values-it-rIT/strings.xml b/plugins/source/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 0000000000..2a8e8702d9 --- /dev/null +++ b/plugins/source/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,38 @@ + + + + BG NSClient + BG NS + Scarica dati glicemia da Nightscout + xDrip+ + Ricevi valori glicemia da xDrip+. + BYODA + BYODA + Ricevi valori glicemia dall\'app Dexcom ottenuta con \'Build Your Own Dexcom App\'. + Eversense app (modificata) + Ricevi valori glicemia dall\'app Eversense modificata. + Glimp + Ricevi valori glicemia da Glimp. + MM640g + Ricevi valori glicemia da 600SeriesAndroidUploader. + Poctech + Ricevi valori glicemia da app Poctech + Glunovo + Ricevi valori glicemia da app Glunovo + Intelligo + Ricevi valori da app Intelligo + Tomato (MiaoMiao) + Tomato + Ricevi valori glicemia da app Tomato (dispositivo MiaoMiao) + GlucoRx Aidex + GlucoRx Aidex + Ricevi valori glicemia da CGM GlucoRx Aidex. + BG casuale + Genera dati glicemia casuali (solo modalità demo) + BG + Invia dati BG a xDrip+ + In xDrip+ seleziona origine dati 640g/Eversense + Impostazioni caricamento BG + Registra cambio sensore in NS + Crea evento \"Cambio Sensore\" in NS all\'avvio del sensore + diff --git a/plugins/source/src/main/res/values-iw-rIL/strings.xml b/plugins/source/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 0000000000..88ad6ce57c --- /dev/null +++ b/plugins/source/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,26 @@ + + + + הורדת ערכי סוכר בדם מ-Nightscout + xDrip+ + קבלת ערכי סוכר מ-xDrip. + BYODA + BYODA + השתמש בנתוני הסוכר מאפליקציית \"בנה לעצמך דקסקום\" (BYODA). + אפליקלציית Eversense (עם פאץ\') + קבלת ערכי רמת סוכר מאפליקציית Eversense עם פאץ\'. + קבלת ערכי סוכר בדם מאפליקציית Glimp. + קבלת ערכי סוכר בדם מ-600SeriesAndroidUploader. + Poctech + קבלת ערכי סוכר מיישום Poctech + Glunovo + קבלת ערכי סוכר מיישום Glunovo + Intelligo + קבלת ערכי סוכר מיישום Intelligo + Tomato (MiaoMiao) + Tomato + קבלת ערכי סוכר מאפליקציית Tomato (התקן MiaoMiao) + Aidex + קבלת נתוני סוכר מחיישני GlucoRx Aidex. + הגדרות העלאת ערכי סוכר בדם + diff --git a/plugins/source/src/main/res/values-ja-rJP/strings.xml b/plugins/source/src/main/res/values-ja-rJP/strings.xml new file mode 100644 index 0000000000..c1e70718e3 --- /dev/null +++ b/plugins/source/src/main/res/values-ja-rJP/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/plugins/source/src/main/res/values-ko-rKR/strings.xml b/plugins/source/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 0000000000..d15c2e5f53 --- /dev/null +++ b/plugins/source/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,17 @@ + + + + Nightscout에서 다운로드하여 혈당값 받기 + xDrip+ + xDrip+에서 혈당값 받기 + Eversense 앱(패치버전) + 패치된 Eversense 앱에서 혈당값 받기 + Glimp에서 혈당값 받기 + 600SeriesAndroidUploader에서 혈당값 받기 + Poctech + Poctech 앱에서 혈당값 받기 + Tomato (MiaoMiao) + Tomato + 혈당값이 Tomato앱(MiaoMaio장치) 으로부터 수신되었습니다. + 혈당 업로드 설정 + diff --git a/plugins/source/src/main/res/values-lt-rLT/strings.xml b/plugins/source/src/main/res/values-lt-rLT/strings.xml new file mode 100644 index 0000000000..049e5b41b2 --- /dev/null +++ b/plugins/source/src/main/res/values-lt-rLT/strings.xml @@ -0,0 +1,27 @@ + + + + Gauti kraujo gliukozės vertes iš Nightscout + xDrip+ + Gauti kraujo gliukozės reikšmes iš xDrip+. + BYODA + BYODA + Gauti kraujo gliukozės reikšmes iš \'Build Your Own Dexcom App\'. + Eversense programėlė (modifikuota) + Gauti kraujo gliukozės vertes iš modifikuotos Eversense programėlės. + Gauti kraujo gliukozės vertes iš Glimp. + Gauti kraujo gliukozės vertes iš 600SeriesAndroidUploader. + Poctech + Gauti KG vertes iš Poctech programėlės + Glunovo + Gauti KG reikšmes iš Glunovo programos + Intelligo + Gauti KG reikšmes iš Intelligo programos + Tomato (MiaoMiao) + Tomato + Gauti KG vertes iš Tomato programėlės (MiaoMiao) + GlucoRx Aidex + Aidex + Gauti KG reikšmes iš GlucoRx Aidex CGMS programos. + KG duomenų perdavimo nustatymai + diff --git a/plugins/source/src/main/res/values-nl-rNL/strings.xml b/plugins/source/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 0000000000..b798634790 --- /dev/null +++ b/plugins/source/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,31 @@ + + + + NSClient BG + NS BG + Download BG waardes van Nightscout + xDrip+ + Ontvang BG waardes van xDrip+. + BYODA + BYODA + Ontvang BG waarden van de \'Build Your Own Dexcom App\' (BYODA). + Eversense App (aangepast) + Ontvang BG waardes van de aangepaste Eversense app. + Glimp + Ontvang BG waardes van Glimp. + MM640g + Ontvang BG waardes van 600SeriesAndroidUploader. + Poctech + Ontvang BG waardes van Poctech app + Glunovo + Ontvang waardes van Glunovo app + Intelligo + Ontvang waarden van de Intelligo app + Tomato (MiaoMiao) + Tomato + Ontvang BG waardes van Tomato app (MiaoMiao apparaatje) + GlucoRx Aidex + Aidex + Ontvang BG waarden van GlucoRx Aidex CGMS. + BG upload instellingen + diff --git a/plugins/source/src/main/res/values-no-rNO/strings.xml b/plugins/source/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 0000000000..c8bac042bb --- /dev/null +++ b/plugins/source/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,38 @@ + + + + NSClient BS + NS BS + Last ned BS-verdier fra Nightscout + xDrip+ + Motta BS-verdier fra xDrip+. + BYODA + BYODA + Motta BS verdier fra \'Build Your Own Dexcom App\'. + Eversense App (patched) + Motta BS-verdier fra den modifiserte Eversense-appen. + Glimp + Motta BS-verdier fra Glimp. + MM640G + Motta BS-verdier fra 600SeriesAndroidUploader. + Poctech + Motta BS verdier fra Poctech app + Glunovo + Motta BS verdier fra Glunovo app + Intelligo + Motta BS-verdier fra Intelligo-app + Tomato (MiaoMiao) + Tomato + Motta BS verdier fra Tomato app (MiaoMiao enhet) + GlucoRx Aidex + Aidex + Motta BS verdier fra GlucoRx Aidex CGM. + Vilkårlig BS + Generer vilkårlige BS data (kun demo formål) + BS + Send BS data til xDrip+ + I xDrip+, velg 640G/Eversens som datakilde + Innstillinger for opplasting av BS + Logg sensor bytte til NS + Opprett hendelse \"Sensor bytte\" automatisk i NS ved start av sensoren + diff --git a/plugins/source/src/main/res/values-pl-rPL/strings.xml b/plugins/source/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 0000000000..38c9cad9c8 --- /dev/null +++ b/plugins/source/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,22 @@ + + + + Pobieraj wartości BG z Nightscout + xDrip+ + Pobieraj wartości BG z xDrip+. + Dexcom Patched + DEX.PATCH. + Pobieraj glikemię ze spatchowanej aplikacji Dexcom. + Apka Eversense (spatchowana) + Pobieraj wartości BG ze spatchowanej aplikacji Eversense. + Pobieraj wartości BG z Glimp. + Pobieraj wartości BG z uploadera pomp serii 600. + Poctech + Odczytuj wartości BG z aplikacji Poctech + Glunovo + Otrzymuj wartości z aplikacji Glunovo + Tomato (MiaoMiao) + Tomato + Otrzymuj poziomy cukru (BG) z Apki Tomato) (urządzenie MiaoMiao) + Ustawienia wysyłania wartości BG (poziomów cukru) + diff --git a/plugins/source/src/main/res/values-pt-rBR/strings.xml b/plugins/source/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..6766e32d0e --- /dev/null +++ b/plugins/source/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,26 @@ + + + + Downloads de dados de Glicose do Nightscout + xDrip+ + Receber valores de glicose do xDrip+. + BYODA + BYODA + Receber valores de glicemia do \'Build Your Own Dexcom App\'. + Aplicação Eversense (com patch) + Receber valores de Glicose da aplicação Eversense modificada. + Receber valores BG do Glimp. + Receber valores de Glucose do 600SeriesAndroidUploader. + Poctech + Receber valores Glucose da app Poctech + Glunovo + Receber valores GLIC do aplicativo Glunovo + Intelligo + Receber valores da app Intelligo + Tomato (MiaoMiao) + Tomato + Receber valores de Glicose da aplicação Tomato (dispositivo MiaoMiao) + Aidex + Receber valores BG do GlucoRx Aidex CGMS. + Configurações de upload de BG + diff --git a/plugins/source/src/main/res/values-pt-rPT/strings.xml b/plugins/source/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..072a4fa9b3 --- /dev/null +++ b/plugins/source/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,22 @@ + + + + Descarrega dados Glicose do Nightscout + xDrip+ + Receber valores Glicose do xDrip+. + BYODA + BYODA + Receber valores de glicemia do aplicativo BYODA. + Aplicação Eversense (com patch) + Receber valores Glicose da aplicação Eversense modificada. + Receber valores Glicose do Glimp. + Receber valores Glicose do 600SeriesAndroidUploader. + Poctech + Receber valores Glucose da app Poctech + Glunovo + Receber valores do aplicativo Glunovo + Tomato (MiaoMiao) + Tomato + Receber valores de Glicose da app Tomato (dispositivo MiaoMiao) + Definições de Envio da Glicose + diff --git a/plugins/source/src/main/res/values-ro-rRO/strings.xml b/plugins/source/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 0000000000..a0be463419 --- /dev/null +++ b/plugins/source/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,22 @@ + + + + Descarcă datele despre glicemii din Nightscout + xDrip+ + Primește valorile glicemiei din xDrip+. + BYODA + BYODA + Primește valori de glicemie de la aplicația Dexcom modificată. + Aplicația Eversense (modificată) + Primește valorile glicemiei din aplicația Eversense modificată. + Primește valorile glicemiei din aplicația Glimp. + Primește valorile glicemiei din aplicația 600SeriesAndroidUploader (Medtronic). + Poctech + Citire a valorii glicemiei din aplicația Poctech + Glunovo + Primiți glicemii de la aplicația Glunovo + Tomato (MiaoMiao) + Tomato + Înregistrează valorile glicemiei din aplicația Tomato (dispozitiv MiaoMIao) + Setări înregistrare glicemie + diff --git a/plugins/source/src/main/res/values-ru-rRU/strings.xml b/plugins/source/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 0000000000..13210be58e --- /dev/null +++ b/plugins/source/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,39 @@ + + + + ГК с клиента Nightscout + ГК с NS + Получать данные гликемии с сайта Nightscout + xDrip + + Получать данные гликемии от xDrip+. + Самост собран прилож Dexcom + ССП DEXCOM + Получать данные ГК от \'Самостоятельно собранного приложения Dexcom\'. + Приложение Eversense (пропатченное) + Получать данные гликемии от пропатченного приложения Eversense. + Glimp + Получать данные гликемии от Glimp. + MM640g + Получать данные гликемии от 600SeriesAndroidUploader. + Poctech + Получать данные гликемии от приложения Poctech + Приложение Glunovo + Получать данные гликемии от приложения Glunovo + Приложение Intelligo + Получать данные гликемии от приложения Intelligo + Томато (MiaoMiao) + Томато + Получать значения ГК от приложения Tomato (устройство MiaoMiao) + Aidex GlucoRx + Aidex + Получить значения ГК от GlucoRx Aidex + Случайные значения ГК + Генерировать случайные данные ГК (только демо-режим) + ГК + Отправлять данные СК на xDrip+ + В xDrip + выберите источник данных 640g/Eversense + Параметры загрузки СК + Вносить запись о замене сенсора в NS + Автоматически создать событие \"Замена сенсора\" в NS при запуске сенсора + направление + diff --git a/plugins/source/src/main/res/values-sk-rSK/strings.xml b/plugins/source/src/main/res/values-sk-rSK/strings.xml new file mode 100644 index 0000000000..73aa3d2de6 --- /dev/null +++ b/plugins/source/src/main/res/values-sk-rSK/strings.xml @@ -0,0 +1,38 @@ + + + + Glykémie z NS + NS GL + Získavať hodnoty glykémií z Nightscoutu + xDrip+ + Prijímať hodnoty glykémií z xDrip+. + BYODA + BYODA + Prijímať hodnoty glykémií z upravenej aplikácie Dexcom (BYODA). + Eversense aplikácia (upravená) + Získavať glykémie z upravenej Eversense aplikácie. + Glimp + Získavať hodnoty glykémií z aplikácie Glimp. + MM640g + Získavať hodnoty glykémií z 600SeriesAndroidUploader. + Poctech + Získavať glykémie z aplikácie Poctech + Glunovo + Získavať glykémie z aplikácie Glunovo + Intelligo + Prijímať hodnoty z aplikácie Intelligo + Tomato (MiaoMiao) + Tomato + Prijímať glykémie z aplikácie Tomato (zariadenie MiaoMiao) + GlucoRx Aidex + Aidex + Prijímať hodnoty glykémie zo senzora GlucoRx Aidex. + Náhodná glykémia + Vygeneruj náhodné dáta glykémií (iba Demo režim) + Gly + Odosielať glykémie do xDrip+ + V xDrip+ vyberte zdroj dát 640g/Eversense + Nastavenie nahrávania glykémie + Ulož výmenu senzora do NS + Vytvoriť udalosť \"Výmena senzora\" v NS automaticky pri spustení senzora + diff --git a/plugins/source/src/main/res/values-sr-rCS/strings.xml b/plugins/source/src/main/res/values-sr-rCS/strings.xml new file mode 100644 index 0000000000..236ed456af --- /dev/null +++ b/plugins/source/src/main/res/values-sr-rCS/strings.xml @@ -0,0 +1,10 @@ + + + + Preuzimajte podatke GUK sa Nightscout-a + xDrip+ + Preuzimajte vrijednosti GUK od xDrip+. + Preuzimajte vrednosti GUK iz zakrpljene aplikacije Eversense. + Preuzimajte vrednosti GUK od Glimp-a. + Preuzimajte vrednosti GUK od 600SeriesAndroidUploader-a. + diff --git a/plugins/source/src/main/res/values-sv-rSE/strings.xml b/plugins/source/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 0000000000..6572f8a262 --- /dev/null +++ b/plugins/source/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,23 @@ + + + + Ladda ner BG-data från Nightscout + xDrip+ + Ta emot BG-data från xDrip+. + Patchad Dexcom-app + Dex + Ta emot BG-värden från \"Bygg din egen Dexcom-app\". + Eversense App (modifierad) + Ta emot BG-data från den modifierade +Eversense-appen. + Ta emot BG-data från Glimp + Ta emot BG-data från 600SeriesAndroidUploader + Poctech + Ta emot BG-data från Poctechappen + Glunovo + Ta emot värden från Glunovo-appen + Tomato (MiaoMiao) + Tomato + Ta emot BG-data från tomato app (MiaoMiao-enhet) + Uppladdningsinställningar för BG + diff --git a/plugins/source/src/main/res/values-tr-rTR/strings.xml b/plugins/source/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 0000000000..0752cdddcf --- /dev/null +++ b/plugins/source/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,38 @@ + + + + NSClient KŞ + NS KŞ + Nightscout\'tan KŞ verilerini yükler + xDrip+ + XDrip+\'ten KŞ değerlerini alır. + BYODA + BYODA + \'Kendi Dexcom Uygulamanızı Oluşturun\' uygulamasından KŞ değerlerini alın. + Eversense App (yamalı) + Yamalı Eversense uygulamasından KŞ değerleri alır. + Glimp + Glimp\'ten KŞ değerleri alır. + MM640g + 600SeriesAndroidUploader\'dan KŞ değerleri alır. + Poctech + Poctech uygulamasından KŞ değerlerini alır + Glunovo + Glunovo uygulamasından değerler alır + Intelligo + Intelligo uygulamasından değerler alır + Tomato (MiaoMiao) + Tomato + KŞ değerlerini Tomato uygulamasından (MiaoMiao Cihazından) al + GlucoRx Aidex + Aidex + GlucoRx Aidex CGMS\'den KŞ değerleri alır. + Rastgele KŞ + Rastgele KŞ verileri oluşturun (Yalnızca demo modunda) + + XDrip+\'a KŞ verilerini gönder + xDrip+ içerisinde 640g/Eversense veri kaynağı seç + KŞ yükleme ayarları + Sensör değişimlerini NS\'a kaydet + Sensör başlangıcında otomatik olarak NS\'de \"Sensör Değişimi\" olayı oluştur + diff --git a/plugins/source/src/main/res/values-zh-rCN/strings.xml b/plugins/source/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..dedac905aa --- /dev/null +++ b/plugins/source/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,24 @@ + + + + 从 Nightscout 下载 血糖数据 + xDrip+ + 从 xDrip+ 接收血糖值。 + BYODA德康补丁版(构建你自己的德康应用Build Your Own Dexcom App) + BYODA + 从德康补丁版接收血糖数据(Build Your Own Dexcom App)。 + Everyang App (补丁) + 从 Eversense 补丁app接收血糖值。 + 从 Glimp 接收血糖值。 + 从美敦力600Series 的AndroidUploader 接收血糖值。 + Poctech + 从 Poctech app 接收血糖值。 + Glunovo + 从Glunovo应用接收血糖数据。 + 番茄(喵喵) + 番茄 + 从番茄app(喵喵设备) 接收血糖值 + Aidex动泰 + 从GlucoRx Aidex动泰持续葡萄糖监测系统接收血糖值。 + 血糖上传设置 + diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/StoreDataForDbImpl.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/StoreDataForDbImpl.kt index 15cfa0b514..49d666c0c6 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/StoreDataForDbImpl.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsShared/StoreDataForDbImpl.kt @@ -7,8 +7,10 @@ import info.nightscout.core.utils.worker.LoggingWorker import info.nightscout.database.entities.Bolus import info.nightscout.database.entities.BolusCalculatorResult import info.nightscout.database.entities.Carbs +import info.nightscout.database.entities.DeviceStatus import info.nightscout.database.entities.EffectiveProfileSwitch import info.nightscout.database.entities.ExtendedBolus +import info.nightscout.database.entities.Food import info.nightscout.database.entities.GlucoseValue import info.nightscout.database.entities.OfflineEvent import info.nightscout.database.entities.ProfileSwitch @@ -29,6 +31,19 @@ import info.nightscout.database.impl.transactions.SyncNsProfileSwitchTransaction import info.nightscout.database.impl.transactions.SyncNsTemporaryBasalTransaction import info.nightscout.database.impl.transactions.SyncNsTemporaryTargetTransaction import info.nightscout.database.impl.transactions.SyncNsTherapyEventTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdBolusCalculatorResultTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdBolusTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdCarbsTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdDeviceStatusTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdEffectiveProfileSwitchTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdExtendedBolusTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdFoodTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdGlucoseValueTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdOfflineEventTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdProfileSwitchTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdTemporaryBasalTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdTemporaryTargetTransaction +import info.nightscout.database.impl.transactions.UpdateNsIdTherapyEventTransaction import info.nightscout.database.transactions.TransactionGlucoseValue import info.nightscout.interfaces.Config import info.nightscout.interfaces.Constants @@ -55,6 +70,8 @@ import info.nightscout.sdk.localmodel.treatment.NSTemporaryTarget import info.nightscout.sdk.localmodel.treatment.NSTherapyEvent import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil +import java.util.concurrent.Executors +import java.util.concurrent.ScheduledFuture import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton @@ -75,17 +92,30 @@ class StoreDataForDbImpl @Inject constructor( ) : StoreDataForDb { override val glucoseValues: MutableList = mutableListOf() + override val boluses: MutableList = mutableListOf() + override val carbs: MutableList = mutableListOf() + override val temporaryTargets: MutableList = mutableListOf() + override val effectiveProfileSwitches: MutableList = mutableListOf() + override val bolusCalculatorResults: MutableList = mutableListOf() + override val therapyEvents: MutableList = mutableListOf() + override val extendedBoluses: MutableList = mutableListOf() + override val temporaryBasals: MutableList = mutableListOf() + override val profileSwitches: MutableList = mutableListOf() + override val offlineEvents: MutableList = mutableListOf() - val boluses: MutableList = mutableListOf() - val carbs: MutableList = mutableListOf() - val temporaryTargets: MutableList = mutableListOf() - val effectiveProfileSwitches: MutableList = mutableListOf() - val bolusCalculatorResults: MutableList = mutableListOf() - val therapyEvents: MutableList = mutableListOf() - val extendedBoluses: MutableList = mutableListOf() - val temporaryBasals: MutableList = mutableListOf() - val profileSwitches: MutableList = mutableListOf() - val offlineEvents: MutableList = mutableListOf() + override val nsIdGlucoseValues: MutableList = mutableListOf() + override val nsIdBoluses: MutableList = mutableListOf() + override val nsIdCarbs: MutableList = mutableListOf() + override val nsIdFoods: MutableList = mutableListOf() + override val nsIdTemporaryTargets: MutableList = mutableListOf() + override val nsIdEffectiveProfileSwitches: MutableList = mutableListOf() + override val nsIdBolusCalculatorResults: MutableList = mutableListOf() + override val nsIdTherapyEvents: MutableList = mutableListOf() + override val nsIdExtendedBoluses: MutableList = mutableListOf() + override val nsIdTemporaryBasals: MutableList = mutableListOf() + override val nsIdProfileSwitches: MutableList = mutableListOf() + override val nsIdOfflineEvents: MutableList = mutableListOf() + override val nsIdDeviceStatuses: MutableList = mutableListOf() private val userEntries: MutableList = mutableListOf() @@ -103,7 +133,7 @@ class StoreDataForDbImpl @Inject constructor( params: WorkerParameters ) : LoggingWorker(context, params) { - @Inject lateinit var storeDataForDb: StoreDataForDbImpl + @Inject lateinit var storeDataForDb: StoreDataForDb override fun doWorkAndLog(): Result { storeDataForDb.storeGlucoseValuesToDb() @@ -115,7 +145,7 @@ class StoreDataForDbImpl @Inject constructor( if (containsKey(key)) merge(key, 1, Long::plus) else put(key, 1) - private fun storeGlucoseValuesToDb() { + override fun storeGlucoseValuesToDb() { rxBus.send(EventNSClientNewLog("PROCESSING BG", "")) if (glucoseValues.isNotEmpty()) @@ -151,7 +181,7 @@ class StoreDataForDbImpl @Inject constructor( rxBus.send(EventNSClientNewLog("DONE BG", "")) } - fun storeTreatmentsToDb() { + override fun storeTreatmentsToDb() { rxBus.send(EventNSClientNewLog("PROCESSING TR", "")) if (boluses.isNotEmpty()) @@ -731,6 +761,168 @@ class StoreDataForDbImpl @Inject constructor( rxBus.send(EventNSClientNewLog("DONE TR", "")) } + private val eventWorker = Executors.newSingleThreadScheduledExecutor() + private var scheduledEventPost: ScheduledFuture<*>? = null + override fun scheduleNsIdUpdate() { + class PostRunnable : Runnable { + + override fun run() { + aapsLogger.debug(LTag.CORE, "Firing updateNsIds") + scheduledEventPost = null + updateNsIds() + } + } + // cancel waiting task to prevent sending multiple posts + scheduledEventPost?.cancel(false) + val task: Runnable = PostRunnable() + scheduledEventPost = eventWorker.schedule(task, 30, TimeUnit.SECONDS) + } + + private fun updateNsIds() { + repository.runTransactionForResult(UpdateNsIdTemporaryTargetTransaction(nsIdTemporaryTargets)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of TemporaryTarget failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of TemporaryTarget $it") + } + } + + repository.runTransactionForResult(UpdateNsIdGlucoseValueTransaction(nsIdGlucoseValues)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of GlucoseValue failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of GlucoseValue $it") + } + } + + repository.runTransactionForResult(UpdateNsIdFoodTransaction(nsIdFoods)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of Food failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of Food $it") + } + } + + repository.runTransactionForResult(UpdateNsIdTherapyEventTransaction(nsIdTherapyEvents)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of TherapyEvent failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of TherapyEvent $it") + } + } + + repository.runTransactionForResult(UpdateNsIdBolusTransaction(nsIdBoluses)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of Bolus failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of Bolus $it") + } + } + + repository.runTransactionForResult(UpdateNsIdCarbsTransaction(nsIdCarbs)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of Carbs failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of Carbs $it") + } + } + + repository.runTransactionForResult(UpdateNsIdBolusCalculatorResultTransaction(nsIdBolusCalculatorResults)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of BolusCalculatorResult failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of BolusCalculatorResult $it") + } + } + + repository.runTransactionForResult(UpdateNsIdTemporaryBasalTransaction(nsIdTemporaryBasals)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of TemporaryBasal failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of TemporaryBasal $it") + } + } + + repository.runTransactionForResult(UpdateNsIdExtendedBolusTransaction(nsIdExtendedBoluses)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of ExtendedBolus failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of ExtendedBolus $it") + } + } + + repository.runTransactionForResult(UpdateNsIdProfileSwitchTransaction(nsIdProfileSwitches)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of ProfileSwitch failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of ProfileSwitch $it") + } + } + + repository.runTransactionForResult(UpdateNsIdEffectiveProfileSwitchTransaction(nsIdEffectiveProfileSwitches)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of EffectiveProfileSwitch failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of EffectiveProfileSwitch $it") + } + } + + repository.runTransactionForResult(UpdateNsIdDeviceStatusTransaction(nsIdDeviceStatuses)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of DeviceStatus failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of DeviceStatus $it") + } + } + + repository.runTransactionForResult(UpdateNsIdOfflineEventTransaction(nsIdOfflineEvents)) + .doOnError { error -> + aapsLogger.error(LTag.DATABASE, "Updated nsId of OfflineEvent failed", error) + } + .blockingGet() + .also { result -> + result.updatedNsId.forEach { + aapsLogger.debug(LTag.DATABASE, "Updated nsId of OfflineEvent $it") + } + } + } + private fun sendLog(item: String, clazz: String) { inserted[clazz]?.let { rxBus.send(EventNSClientNewLog("INSERT", "$item $it")) diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/DataSyncSelectorImplementation.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/DataSyncSelectorImplementation.kt index cce42329b2..d83541dfa8 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/DataSyncSelectorImplementation.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/DataSyncSelectorImplementation.kt @@ -1,26 +1,11 @@ package info.nightscout.plugins.sync.nsclient -import info.nightscout.core.extensions.toJson import info.nightscout.database.ValueWrapper -import info.nightscout.database.entities.Bolus -import info.nightscout.database.entities.BolusCalculatorResult -import info.nightscout.database.entities.Carbs -import info.nightscout.database.entities.DeviceStatus -import info.nightscout.database.entities.EffectiveProfileSwitch -import info.nightscout.database.entities.ExtendedBolus -import info.nightscout.database.entities.Food -import info.nightscout.database.entities.GlucoseValue -import info.nightscout.database.entities.OfflineEvent -import info.nightscout.database.entities.ProfileSwitch -import info.nightscout.database.entities.TemporaryBasal -import info.nightscout.database.entities.TemporaryTarget -import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.sync.DataSyncSelector import info.nightscout.plugins.sync.R -import info.nightscout.plugins.sync.nsclient.extensions.toJson import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag import info.nightscout.shared.sharedPreferences.SP @@ -120,17 +105,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedBoluses(): List { - val startId = sp.getLong(R.string.key_ns_bolus_last_synced_id, 0) - return appRepository.getModifiedBolusesDataFromId(startId) - .blockingGet() - .filter { it.type != Bolus.Type.PRIMING } - .also { - aapsLogger.debug(LTag.NSCLIENT, "Loading Bolus data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedBolusesCompat() { val lastDbIdWrapped = appRepository.getLastBolusIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -141,36 +115,33 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.bolusesRemaining = lastDbId - startId appRepository.getNextSyncElementBolus(startId).blockingGet()?.let { bolus -> - aapsLogger.info(LTag.NSCLIENT, "Loading Bolus data Start: $startId ID: ${bolus.first.id} HistoryID: ${bolus.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Loading Bolus data Start: $startId ${bolus.first} forID: ${bolus.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore bolus.first.id == bolus.second.id && bolus.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring Bolus. Loaded from NS: ${bolus.first.id} HistoryID: ${bolus.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring Bolus. Loaded from NS: ${bolus.second.id} ") confirmLastBolusIdIfGreater(bolus.second.id) processChangedBolusesCompat() return } // only NsId changed, no need to upload bolus.first.onlyNsIdAdded(bolus.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring Bolus. Only NS id changed ID: ${bolus.first.id} HistoryID: ${bolus.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring Bolus. Only NS id changed: ${bolus.second.id} ") confirmLastBolusIdIfGreater(bolus.second.id) processChangedBolusesCompat() return } // without nsId = create new bolus.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd( + activePlugin.activeNsClient?.dbAdd( "treatments", - bolus.first.toJson(true, dateUtil), DataSyncSelector.PairBolus(bolus.first, bolus.second.id), " $startId/$lastDbId" ) // with nsId = update if it's modified record bolus.first.interfaceIDs.nightscoutId != null && bolus.first.id != bolus.second.id -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "treatments", - bolus.first.interfaceIDs.nightscoutId, - bolus.first.toJson(false, dateUtil), DataSyncSelector.PairBolus(bolus.first, bolus.second.id), "$startId/$lastDbId" ) @@ -186,14 +157,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedCarbs(): List { - val startId = sp.getLong(R.string.key_ns_carbs_last_synced_id, 0) - return appRepository.getModifiedCarbsDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading Carbs data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedCarbsCompat() { val lastDbIdWrapped = appRepository.getLastCarbsIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -204,31 +167,29 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.carbsRemaining = lastDbId - startId appRepository.getNextSyncElementCarbs(startId).blockingGet()?.let { carb -> - aapsLogger.info(LTag.NSCLIENT, "Loading Carbs data Start: $startId ID: ${carb.first.id} HistoryID: ${carb.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Loading Carbs data Start: $startId ${carb.first} forID: ${carb.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore carb.first.id == carb.second.id && carb.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring Carbs. Loaded from NS: ${carb.first.id} HistoryID: ${carb.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring Carbs. Loaded from NS: ${carb.second.id} ") confirmLastCarbsIdIfGreater(carb.second.id) processChangedCarbsCompat() return } // only NsId changed, no need to upload carb.first.onlyNsIdAdded(carb.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring Carbs. Only NS id changed ID: ${carb.first.id} HistoryID: ${carb.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring Carbs. Only NS id changed ID: ${carb.second.id} ") confirmLastCarbsIdIfGreater(carb.second.id) processChangedCarbsCompat() return } // without nsId = create new carb.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd("treatments", carb.first.toJson(true, dateUtil), DataSyncSelector.PairCarbs(carb.first, carb.second.id), "$startId/$lastDbId") + activePlugin.activeNsClient?.dbAdd("treatments", DataSyncSelector.PairCarbs(carb.first, carb.second.id), "$startId/$lastDbId") // with nsId = update if it's modified record carb.first.interfaceIDs.nightscoutId != null && carb.first.id != carb.second.id -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "treatments", - carb.first.interfaceIDs.nightscoutId, - carb.first.toJson(false, dateUtil), DataSyncSelector.PairCarbs(carb.first, carb.second.id), "$startId/$lastDbId" ) @@ -244,14 +205,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedBolusCalculatorResults(): List { - val startId = sp.getLong(R.string.key_ns_bolus_calculator_result_last_synced_id, 0) - return appRepository.getModifiedBolusCalculatorResultsDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading BolusCalculatorResult data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedBolusCalculatorResultsCompat() { val lastDbIdWrapped = appRepository.getLastBolusCalculatorResultIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -262,34 +215,33 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.bcrRemaining = lastDbId - startId appRepository.getNextSyncElementBolusCalculatorResult(startId).blockingGet()?.let { bolusCalculatorResult -> - aapsLogger.info(LTag.NSCLIENT, "Loading BolusCalculatorResult data Start: $startId ID: ${bolusCalculatorResult.first.id} HistoryID: ${bolusCalculatorResult.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Loading BolusCalculatorResult data Start: $startId ${bolusCalculatorResult.first} forID: ${bolusCalculatorResult.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore bolusCalculatorResult.first.id == bolusCalculatorResult.second.id && bolusCalculatorResult.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring BolusCalculatorResult. Loaded from NS: ${bolusCalculatorResult.first.id} HistoryID: ${bolusCalculatorResult.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring BolusCalculatorResult. Loaded from NS: ${bolusCalculatorResult.second.id} ") confirmLastBolusCalculatorResultsIdIfGreater(bolusCalculatorResult.second.id) processChangedBolusCalculatorResultsCompat() return } // only NsId changed, no need to upload bolusCalculatorResult.first.onlyNsIdAdded(bolusCalculatorResult.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring BolusCalculatorResult. Only NS id changed ID: ${bolusCalculatorResult.first.id} HistoryID: ${bolusCalculatorResult.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring BolusCalculatorResult. Only NS id changed ID: ${bolusCalculatorResult.second.id} ") confirmLastBolusCalculatorResultsIdIfGreater(bolusCalculatorResult.second.id) processChangedBolusCalculatorResultsCompat() return } // without nsId = create new bolusCalculatorResult.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd( + activePlugin.activeNsClient?.dbAdd( "treatments", - bolusCalculatorResult.first.toJson(true, dateUtil, profileFunction), DataSyncSelector.PairBolusCalculatorResult(bolusCalculatorResult.first, bolusCalculatorResult.second.id), "$startId/$lastDbId" ) // with nsId = update if it's modified record bolusCalculatorResult.first.interfaceIDs.nightscoutId != null && bolusCalculatorResult.first.id != bolusCalculatorResult.second.id -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( - "treatments", bolusCalculatorResult.first.interfaceIDs.nightscoutId, bolusCalculatorResult.first.toJson(false, dateUtil, profileFunction), + activePlugin.activeNsClient?.dbUpdate( + "treatments", DataSyncSelector.PairBolusCalculatorResult(bolusCalculatorResult.first, bolusCalculatorResult.second.id), "$startId/$lastDbId" ) } @@ -304,14 +256,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedTempTargets(): List { - val startId = sp.getLong(R.string.key_ns_temporary_target_last_synced_id, 0) - return appRepository.getModifiedTemporaryTargetsDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading TemporaryTarget data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedTempTargetsCompat() { val lastDbIdWrapped = appRepository.getLastTempTargetIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -322,36 +266,33 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.ttsRemaining = lastDbId - startId appRepository.getNextSyncElementTemporaryTarget(startId).blockingGet()?.let { tt -> - aapsLogger.info(LTag.NSCLIENT, "Loading TemporaryTarget data Start: $startId ID: ${tt.first.id} HistoryID: ${tt.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Loading TemporaryTarget data Start: $startId ${tt.first} forID: ${tt.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore tt.first.id == tt.second.id && tt.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryTarget. Loaded from NS: ${tt.first.id} HistoryID: ${tt.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryTarget. Loaded from NS: ${tt.second.id} ") confirmLastTempTargetsIdIfGreater(tt.second.id) processChangedTempTargetsCompat() return } // only NsId changed, no need to upload tt.first.onlyNsIdAdded(tt.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryTarget. Only NS id changed ID: ${tt.first.id} HistoryID: ${tt.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryTarget. Only NS id changed ID: ${tt.second.id} ") confirmLastTempTargetsIdIfGreater(tt.second.id) processChangedTempTargetsCompat() return } // without nsId = create new tt.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd( + activePlugin.activeNsClient?.dbAdd( "treatments", - tt.first.toJson(true, profileFunction.getUnits(), dateUtil), DataSyncSelector.PairTemporaryTarget(tt.first, tt.second.id), "$startId/$lastDbId" ) // existing with nsId = update tt.first.interfaceIDs.nightscoutId != null -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "treatments", - tt.first.interfaceIDs.nightscoutId, - tt.first.toJson(false, profileFunction.getUnits(), dateUtil), DataSyncSelector.PairTemporaryTarget(tt.first, tt.second.id), "$startId/$lastDbId" ) @@ -367,14 +308,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedFoods(): List { - val startId = sp.getLong(R.string.key_ns_food_last_synced_id, 0) - return appRepository.getModifiedFoodDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading Food data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedFoodsCompat() { val lastDbIdWrapped = appRepository.getLastFoodIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -385,31 +318,29 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.foodsRemaining = lastDbId - startId appRepository.getNextSyncElementFood(startId).blockingGet()?.let { food -> - aapsLogger.info(LTag.NSCLIENT, "Loading Food data Start: $startId ID: ${food.first.id} HistoryID: ${food.second} ") + aapsLogger.info(LTag.NSCLIENT, "Loading Food data Start: $startId ${food.first} forID: ${food.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore food.first.id == food.second.id && food.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring Food. Loaded from NS: ${food.first.id} HistoryID: ${food.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring Food. Loaded from NS: ${food.second.id} ") confirmLastFoodIdIfGreater(food.second.id) processChangedFoodsCompat() return } // only NsId changed, no need to upload food.first.onlyNsIdAdded(food.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring Food. Only NS id changed ID: ${food.first.id} HistoryID: ${food.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring Food. Only NS id changed ID: ${food.second.id} ") confirmLastFoodIdIfGreater(food.second.id) processChangedFoodsCompat() return } // without nsId = create new food.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd("food", food.first.toJson(true), DataSyncSelector.PairFood(food.first, food.second.id), "$startId/$lastDbId") + activePlugin.activeNsClient?.dbAdd("food", DataSyncSelector.PairFood(food.first, food.second.id), "$startId/$lastDbId") // with nsId = update food.first.interfaceIDs.nightscoutId != null -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "food", - food.first.interfaceIDs.nightscoutId, - food.first.toJson(false), DataSyncSelector.PairFood(food.first, food.second.id), "$startId/$lastDbId" ) @@ -425,14 +356,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedGlucoseValues(): List { - val startId = sp.getLong(R.string.key_ns_glucose_value_last_synced_id, 0) - return appRepository.getModifiedBgReadingsDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading GlucoseValue data for sync from $startId . Records ${it.size}") - } - } - override tailrec fun processChangedGlucoseValuesCompat() { val lastDbIdWrapped = appRepository.getLastGlucoseValueIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -443,32 +366,30 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.gvsRemaining = lastDbId - startId appRepository.getNextSyncElementGlucoseValue(startId).blockingGet()?.let { gv -> - aapsLogger.info(LTag.NSCLIENT, "Loading GlucoseValue data ID: ${gv.first.id} HistoryID: ${gv.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Loading GlucoseValue data Start: $startId ${gv.first} forID: ${gv.second.id} ") if (activePlugin.activeBgSource.shouldUploadToNs(gv.first)) { when { // new record with existing NS id => must be coming from NS => ignore gv.first.id == gv.second.id && gv.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring GlucoseValue. Loaded from NS: ${gv.first.id} HistoryID: ${gv.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring GlucoseValue. Loaded from NS: ${gv.second.id} ") confirmLastGlucoseValueIdIfGreater(gv.second.id) processChangedGlucoseValuesCompat() return } // only NsId changed, no need to upload gv.first.onlyNsIdAdded(gv.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring GlucoseValue. Only NS id changed ID: ${gv.first.id} HistoryID: ${gv.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring GlucoseValue. Only NS id changed ID: ${gv.second.id} ") confirmLastGlucoseValueIdIfGreater(gv.second.id) processChangedGlucoseValuesCompat() return } // without nsId = create new gv.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd("entries", gv.first.toJson(true, dateUtil), DataSyncSelector.PairGlucoseValue(gv.first, gv.second.id), "$startId/$lastDbId") + activePlugin.activeNsClient?.dbAdd("entries", DataSyncSelector.PairGlucoseValue(gv.first, gv.second.id), "$startId/$lastDbId") // with nsId = update else -> // gv.first.interfaceIDs.nightscoutId != null - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "entries", - gv.first.interfaceIDs.nightscoutId, - gv.first.toJson(false, dateUtil), DataSyncSelector.PairGlucoseValue(gv.first, gv.second.id), "$startId/$lastDbId" ) @@ -488,14 +409,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedTherapyEvents(): List { - val startId = sp.getLong(R.string.key_ns_therapy_event_last_synced_id, 0) - return appRepository.getModifiedTherapyEventDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading TherapyEvents data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedTherapyEventsCompat() { val lastDbIdWrapped = appRepository.getLastTherapyEventIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -506,31 +419,29 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.tesRemaining = lastDbId - startId appRepository.getNextSyncElementTherapyEvent(startId).blockingGet()?.let { te -> - aapsLogger.info(LTag.NSCLIENT, "Loading TherapyEvents data Start: $startId ID: ${te.first.id} HistoryID: ${te.second} ") + aapsLogger.info(LTag.NSCLIENT, "Loading TherapyEvents data Start: $startId ${te.first} forID: ${te.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore te.first.id == te.second.id && te.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring TherapyEvent. Loaded from NS: ${te.first.id} HistoryID: ${te.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring TherapyEvent. Loaded from NS: ${te.second.id} ") confirmLastTherapyEventIdIfGreater(te.second.id) processChangedTherapyEventsCompat() return } // only NsId changed, no need to upload te.first.onlyNsIdAdded(te.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring TherapyEvent. Only NS id changed ID: ${te.first.id} HistoryID: ${te.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring TherapyEvent. Only NS id changed ID: ${te.second.id} ") confirmLastTherapyEventIdIfGreater(te.second.id) processChangedTherapyEventsCompat() return } // without nsId = create new te.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd("treatments", te.first.toJson(true, dateUtil), DataSyncSelector.PairTherapyEvent(te.first, te.second.id), "$startId/$lastDbId") + activePlugin.activeNsClient?.dbAdd("treatments", DataSyncSelector.PairTherapyEvent(te.first, te.second.id), "$startId/$lastDbId") // nsId = update te.first.interfaceIDs.nightscoutId != null -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "treatments", - te.first.interfaceIDs.nightscoutId, - te.first.toJson(false, dateUtil), DataSyncSelector.PairTherapyEvent(te.first, te.second.id), "$startId/$lastDbId" ) @@ -546,13 +457,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - override fun changedDeviceStatuses(): List { - val startId = sp.getLong(R.string.key_ns_device_status_last_synced_id, 0) - return appRepository.getModifiedDeviceStatusDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading DeviceStatus data for sync from $startId. Records ${it.size}") - } - } - override fun processChangedDeviceStatusesCompat() { val lastDbIdWrapped = appRepository.getLastDeviceStatusIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -563,11 +467,11 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.dssRemaining = lastDbId - startId appRepository.getNextSyncElementDeviceStatus(startId).blockingGet()?.let { deviceStatus -> - aapsLogger.info(LTag.NSCLIENT, "Loading DeviceStatus data Start: $startId ID: ${deviceStatus.id}") + aapsLogger.info(LTag.NSCLIENT, "Loading DeviceStatus data Start: $startId $deviceStatus") when { // without nsId = create new deviceStatus.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd("devicestatus", deviceStatus.toJson(dateUtil), deviceStatus, "$startId/$lastDbId") + activePlugin.activeNsClient?.dbAdd("devicestatus", DataSyncSelector.PairDeviceStatus(deviceStatus, null), "$startId/$lastDbId") // with nsId = ignore deviceStatus.interfaceIDs.nightscoutId != null -> Any() } @@ -582,14 +486,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedTemporaryBasals(): List { - val startId = sp.getLong(R.string.key_ns_temporary_basal_last_synced_id, 0) - return appRepository.getModifiedTemporaryBasalDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading TemporaryBasal data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedTemporaryBasalsCompat() { val lastDbIdWrapped = appRepository.getLastTemporaryBasalIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -600,49 +496,38 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.tbrsRemaining = lastDbId - startId appRepository.getNextSyncElementTemporaryBasal(startId).blockingGet()?.let { tb -> - aapsLogger.info(LTag.NSCLIENT, "Loading TemporaryBasal data Start: $startId ID: ${tb.first.id} HistoryID: ${tb.second} ") - val profile = profileFunction.getProfile(tb.first.timestamp) - if (profile != null) { - when { - // new record with existing NS id => must be coming from NS => ignore - tb.first.id == tb.second.id && tb.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryBasal. Loaded from NS: ${tb.first.id} HistoryID: ${tb.second.id} ") - confirmLastTemporaryBasalIdIfGreater(tb.second.id) - processChangedTemporaryBasalsCompat() - return - } - // only NsId changed, no need to upload - tb.first.onlyNsIdAdded(tb.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryBasal. Only NS id changed ID: ${tb.first.id} HistoryID: ${tb.second.id} ") - confirmLastTemporaryBasalIdIfGreater(tb.second.id) - processChangedTemporaryBasalsCompat() - return - } - // without nsId = create new - tb.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd( - "treatments", - tb.first.toJson(true, profile, dateUtil), - DataSyncSelector.PairTemporaryBasal(tb.first, tb.second.id), - "$startId/$lastDbId" - ) - // with nsId = update - tb.first.interfaceIDs.nightscoutId != null -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( - "treatments", - tb.first.interfaceIDs.nightscoutId, - tb.first.toJson(false, profile, dateUtil), - DataSyncSelector.PairTemporaryBasal(tb.first, tb.second.id), - "$startId/$lastDbId" - ) + aapsLogger.info(LTag.NSCLIENT, "Loading TemporaryBasal data Start: $startId ${tb.first} forID: ${tb.second.id} ") + when { + // new record with existing NS id => must be coming from NS => ignore + tb.first.id == tb.second.id && tb.first.interfaceIDs.nightscoutId != null -> { + aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryBasal. Loaded from NS: ${tb.second.id} ") + confirmLastTemporaryBasalIdIfGreater(tb.second.id) + processChangedTemporaryBasalsCompat() + return } - return - } else { - aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryBasal. No profile: ${tb.first.id} HistoryID: ${tb.second.id} ") - confirmLastTemporaryBasalIdIfGreater(tb.second.id) - processChangedTemporaryBasalsCompat() - return + // only NsId changed, no need to upload + tb.first.onlyNsIdAdded(tb.second) -> { + aapsLogger.info(LTag.NSCLIENT, "Ignoring TemporaryBasal. Only NS id changed ID: ${tb.second.id} ") + confirmLastTemporaryBasalIdIfGreater(tb.second.id) + processChangedTemporaryBasalsCompat() + return + } + // without nsId = create new + tb.first.interfaceIDs.nightscoutId == null -> + activePlugin.activeNsClient?.dbAdd( + "treatments", + DataSyncSelector.PairTemporaryBasal(tb.first, tb.second.id), + "$startId/$lastDbId" + ) + // with nsId = update + tb.first.interfaceIDs.nightscoutId != null -> + activePlugin.activeNsClient?.dbUpdate( + "treatments", + DataSyncSelector.PairTemporaryBasal(tb.first, tb.second.id), + "$startId/$lastDbId" + ) } + return } } @@ -653,14 +538,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedExtendedBoluses(): List { - val startId = sp.getLong(R.string.key_ns_extended_bolus_last_synced_id, 0) - return appRepository.getModifiedExtendedBolusDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading ExtendedBolus data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedExtendedBolusesCompat() { val lastDbIdWrapped = appRepository.getLastExtendedBolusIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -671,45 +548,42 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.ebsRemaining = lastDbId - startId appRepository.getNextSyncElementExtendedBolus(startId).blockingGet()?.let { eb -> - aapsLogger.info(LTag.NSCLIENT, "Loading ExtendedBolus data Start: $startId ID: ${eb.first.id} HistoryID: ${eb.second} ") + aapsLogger.info(LTag.NSCLIENT, "Loading ExtendedBolus data Start: $startId ${eb.first} forID: ${eb.second.id} ") val profile = profileFunction.getProfile(eb.first.timestamp) if (profile != null) { when { // new record with existing NS id => must be coming from NS => ignore eb.first.id == eb.second.id && eb.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring ExtendedBolus. Loaded from NS: ${eb.first.id} HistoryID: ${eb.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring ExtendedBolus. Loaded from NS: ${eb.second.id} ") confirmLastExtendedBolusIdIfGreater(eb.second.id) processChangedExtendedBolusesCompat() return } // only NsId changed, no need to upload eb.first.onlyNsIdAdded(eb.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring ExtendedBolus. Only NS id changed ID: ${eb.first.id} HistoryID: ${eb.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring ExtendedBolus. Only NS id changed ID: ${eb.second.id} ") confirmLastExtendedBolusIdIfGreater(eb.second.id) processChangedExtendedBolusesCompat() return } // without nsId = create new eb.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd( + activePlugin.activeNsClient?.dbAdd( "treatments", - eb.first.toJson(true, profile, dateUtil), DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id), "$startId/$lastDbId" ) // with nsId = update eb.first.interfaceIDs.nightscoutId != null -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "treatments", - eb.first.interfaceIDs.nightscoutId, - eb.first.toJson(false, profile, dateUtil), DataSyncSelector.PairExtendedBolus(eb.first, eb.second.id), "$startId/$lastDbId" ) } return } else { - aapsLogger.info(LTag.NSCLIENT, "Ignoring ExtendedBolus. No profile: ${eb.first.id} HistoryID: ${eb.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring ExtendedBolus. No profile: ${eb.second.id} ") confirmLastExtendedBolusIdIfGreater(eb.second.id) processChangedExtendedBolusesCompat() return @@ -724,13 +598,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - override fun changedProfileSwitch(): List { - val startId = sp.getLong(R.string.key_ns_profile_switch_last_synced_id, 0) - return appRepository.getModifiedProfileSwitchDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading ProfileSwitch data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedProfileSwitchesCompat() { val lastDbIdWrapped = appRepository.getLastProfileSwitchIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -741,31 +608,29 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.pssRemaining = lastDbId - startId appRepository.getNextSyncElementProfileSwitch(startId).blockingGet()?.let { ps -> - aapsLogger.info(LTag.NSCLIENT, "Loading ProfileSwitch data Start: $startId ID: ${ps.first.id} HistoryID: ${ps.second} ") + aapsLogger.info(LTag.NSCLIENT, "Loading ProfileSwitch data Start: $startId ${ps.first} forID: ${ps.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore ps.first.id == ps.second.id && ps.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring ProfileSwitch. Loaded from NS: ${ps.first.id} HistoryID: ${ps.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring ProfileSwitch. Loaded from NS: ${ps.second.id} ") confirmLastProfileSwitchIdIfGreater(ps.second.id) processChangedProfileSwitchesCompat() return } // only NsId changed, no need to upload ps.first.onlyNsIdAdded(ps.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring ProfileSwitch. Only NS id changed ID: ${ps.first.id} HistoryID: ${ps.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring ProfileSwitch. Only NS id changed ID: ${ps.second.id} ") confirmLastProfileSwitchIdIfGreater(ps.second.id) processChangedProfileSwitchesCompat() return } // without nsId = create new ps.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd("treatments", ps.first.toJson(true, dateUtil), DataSyncSelector.PairProfileSwitch(ps.first, ps.second.id), "$startId/$lastDbId") + activePlugin.activeNsClient?.dbAdd("treatments", DataSyncSelector.PairProfileSwitch(ps.first, ps.second.id), "$startId/$lastDbId") // with nsId = update ps.first.interfaceIDs.nightscoutId != null -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "treatments", - ps.first.interfaceIDs.nightscoutId, - ps.first.toJson(false, dateUtil), DataSyncSelector.PairProfileSwitch(ps.first, ps.second.id), "$startId/$lastDbId" ) @@ -781,13 +646,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - override fun changedEffectiveProfileSwitch(): List { - val startId = sp.getLong(R.string.key_ns_effective_profile_switch_last_synced_id, 0) - return appRepository.getModifiedEffectiveProfileSwitchDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading EffectiveProfileSwitch data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedEffectiveProfileSwitchesCompat() { val lastDbIdWrapped = appRepository.getLastEffectiveProfileSwitchIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -798,36 +656,33 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.epssRemaining = lastDbId - startId appRepository.getNextSyncElementEffectiveProfileSwitch(startId).blockingGet()?.let { ps -> - aapsLogger.info(LTag.NSCLIENT, "Loading EffectiveProfileSwitch data Start: $startId ID: ${ps.first.id} HistoryID: ${ps.second} ") + aapsLogger.info(LTag.NSCLIENT, "Loading EffectiveProfileSwitch data Start: $startId ${ps.first} forID: ${ps.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore ps.first.id == ps.second.id && ps.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring EffectiveProfileSwitch. Loaded from NS: ${ps.first.id} HistoryID: ${ps.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring EffectiveProfileSwitch. Loaded from NS: ${ps.second.id} ") confirmLastEffectiveProfileSwitchIdIfGreater(ps.second.id) processChangedEffectiveProfileSwitchesCompat() return } // only NsId changed, no need to upload ps.first.onlyNsIdAdded(ps.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring EffectiveProfileSwitch. Only NS id changed ID: ${ps.first.id} HistoryID: ${ps.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring EffectiveProfileSwitch. Only NS id changed ID: ${ps.second.id} ") confirmLastEffectiveProfileSwitchIdIfGreater(ps.second.id) processChangedEffectiveProfileSwitchesCompat() return } // without nsId = create new ps.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd( + activePlugin.activeNsClient?.dbAdd( "treatments", - ps.first.toJson(true, dateUtil), DataSyncSelector.PairEffectiveProfileSwitch(ps.first, ps.second.id), "$startId/$lastDbId" ) // with nsId = update ps.first.interfaceIDs.nightscoutId != null -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "treatments", - ps.first.interfaceIDs.nightscoutId, - ps.first.toJson(false, dateUtil), DataSyncSelector.PairEffectiveProfileSwitch(ps.first, ps.second.id), "$startId/$lastDbId" ) @@ -843,14 +698,6 @@ class DataSyncSelectorImplementation @Inject constructor( } } - // Prepared for v3 (returns all modified after) - override fun changedOfflineEvents(): List { - val startId = sp.getLong(R.string.key_ns_offline_event_last_synced_id, 0) - return appRepository.getModifiedOfflineEventsDataFromId(startId).blockingGet().also { - aapsLogger.debug(LTag.NSCLIENT, "Loading OfflineEvent data for sync from $startId. Records ${it.size}") - } - } - override tailrec fun processChangedOfflineEventsCompat() { val lastDbIdWrapped = appRepository.getLastOfflineEventIdWrapped().blockingGet() val lastDbId = if (lastDbIdWrapped is ValueWrapper.Existing) lastDbIdWrapped.value else 0L @@ -861,31 +708,29 @@ class DataSyncSelectorImplementation @Inject constructor( } queueCounter.oesRemaining = lastDbId - startId appRepository.getNextSyncElementOfflineEvent(startId).blockingGet()?.let { oe -> - aapsLogger.info(LTag.NSCLIENT, "Loading OfflineEvent data Start: $startId ID: ${oe.first.id} HistoryID: ${oe.second} ") + aapsLogger.info(LTag.NSCLIENT, "Loading OfflineEvent data Start: $startId ${oe.first} forID: ${oe.second.id} ") when { // new record with existing NS id => must be coming from NS => ignore oe.first.id == oe.second.id && oe.first.interfaceIDs.nightscoutId != null -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring OfflineEvent. Loaded from NS: ${oe.first.id} HistoryID: ${oe.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring OfflineEvent. Loaded from NS: ${oe.second.id} ") confirmLastOfflineEventIdIfGreater(oe.second.id) processChangedOfflineEventsCompat() return } // only NsId changed, no need to upload oe.first.onlyNsIdAdded(oe.second) -> { - aapsLogger.info(LTag.NSCLIENT, "Ignoring OfflineEvent. Only NS id changed ID: ${oe.first.id} HistoryID: ${oe.second.id} ") + aapsLogger.info(LTag.NSCLIENT, "Ignoring OfflineEvent. Only NS id changed ID: ${oe.second.id} ") confirmLastOfflineEventIdIfGreater(oe.second.id) processChangedOfflineEventsCompat() return } // without nsId = create new oe.first.interfaceIDs.nightscoutId == null -> - activePlugin.activeNsClient?.nsClientService?.dbAdd("treatments", oe.first.toJson(true, dateUtil), DataSyncSelector.PairOfflineEvent(oe.first, oe.second.id), "$startId/$lastDbId") + activePlugin.activeNsClient?.dbAdd("treatments", DataSyncSelector.PairOfflineEvent(oe.first, oe.second.id), "$startId/$lastDbId") // existing with nsId = update oe.first.interfaceIDs.nightscoutId != null -> - activePlugin.activeNsClient?.nsClientService?.dbUpdate( + activePlugin.activeNsClient?.dbUpdate( "treatments", - oe.first.interfaceIDs.nightscoutId, - oe.first.toJson(false, dateUtil), DataSyncSelector.PairOfflineEvent(oe.first, oe.second.id), "$startId/$lastDbId" ) @@ -905,7 +750,7 @@ class DataSyncSelectorImplementation @Inject constructor( if (lastChange > lastSync) { if (activePlugin.activeProfileSource.profile?.allProfilesValid != true) return val profileJson = activePlugin.activeProfileSource.profile?.data ?: return - activePlugin.activeNsClient?.nsClientService?.dbAdd("profile", profileJson, DataSyncSelector.PairProfileStore(profileJson, dateUtil.now()), "") + activePlugin.activeNsClient?.dbAdd("profile", DataSyncSelector.PairProfileStore(profileJson, dateUtil.now()), "") } } } diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/NSClientPlugin.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/NSClientPlugin.kt index be820c7839..67e6885aba 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/NSClientPlugin.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/NSClientPlugin.kt @@ -12,6 +12,7 @@ import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceScreen import androidx.preference.SwitchPreference import dagger.android.HasAndroidInjector +import info.nightscout.core.extensions.toJson import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.interfaces.Config import info.nightscout.interfaces.Constants @@ -20,6 +21,7 @@ import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType +import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.source.DoingOwnUploadSource import info.nightscout.interfaces.sync.DataSyncSelector import info.nightscout.interfaces.sync.NsClient @@ -32,6 +34,7 @@ import info.nightscout.plugins.sync.nsShared.events.EventNSClientResend import info.nightscout.plugins.sync.nsShared.events.EventNSClientStatus import info.nightscout.plugins.sync.nsShared.events.EventNSClientUpdateGUI import info.nightscout.plugins.sync.nsclient.data.AlarmAck +import info.nightscout.plugins.sync.nsclient.extensions.toJson import info.nightscout.plugins.sync.nsclient.services.NSClientService import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus @@ -45,6 +48,7 @@ import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP +import info.nightscout.shared.utils.DateUtil import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import javax.inject.Inject @@ -64,7 +68,9 @@ class NSClientPlugin @Inject constructor( private val config: Config, private val dataSyncSelector: DataSyncSelector, private val uiInteraction: UiInteraction, - private val activePlugin: ActivePlugin + private val activePlugin: ActivePlugin, + private val dateUtil: DateUtil, + private val profileFunction: ProfileFunction ) : NsClient, Sync, PluginBase( PluginDescription() .mainType(PluginType.SYNC) @@ -81,7 +87,7 @@ class NSClientPlugin @Inject constructor( private val handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) private val listLog: MutableList = ArrayList() override var status = "" - override var nsClientService: NSClientService? = null + var nsClientService: NSClientService? = null val isAllowed: Boolean get() = nsClientReceiverDelegate.allowed val blockingReason: String @@ -235,4 +241,61 @@ class NSClientPlugin @Inject constructor( override fun resetToFullSync() { dataSyncSelector.resetToNextFullSync() } + + override fun dbAdd(collection: String, dataPair: DataSyncSelector.DataPair, progress: String) { + when (dataPair) { + is DataSyncSelector.PairBolus -> dataPair.value.toJson(true, dateUtil) + is DataSyncSelector.PairCarbs -> dataPair.value.toJson(true, dateUtil) + is DataSyncSelector.PairBolusCalculatorResult -> dataPair.value.toJson(true, dateUtil, profileFunction) + is DataSyncSelector.PairTemporaryTarget -> dataPair.value.toJson(true, profileFunction.getUnits(), dateUtil) + is DataSyncSelector.PairFood -> dataPair.value.toJson(true) + is DataSyncSelector.PairGlucoseValue -> dataPair.value.toJson(true, dateUtil) + is DataSyncSelector.PairTherapyEvent -> dataPair.value.toJson(true, dateUtil) + is DataSyncSelector.PairDeviceStatus -> dataPair.value.toJson(dateUtil) + is DataSyncSelector.PairTemporaryBasal -> dataPair.value.toJson(true, profileFunction.getProfile(dataPair.value.timestamp), dateUtil) + is DataSyncSelector.PairExtendedBolus -> dataPair.value.toJson(true, profileFunction.getProfile(dataPair.value.timestamp), dateUtil) + is DataSyncSelector.PairProfileSwitch -> dataPair.value.toJson(true, dateUtil) + is DataSyncSelector.PairEffectiveProfileSwitch -> dataPair.value.toJson(true, dateUtil) + is DataSyncSelector.PairOfflineEvent -> dataPair.value.toJson(true, dateUtil) + is DataSyncSelector.PairProfileStore -> dataPair.value + else -> null + }?.let { data -> + nsClientService?.dbAdd(collection, data, dataPair, progress) + } + } + + override fun dbUpdate(collection: String, dataPair: DataSyncSelector.DataPair, progress: String) { + val id = when (dataPair) { + is DataSyncSelector.PairBolus -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairCarbs -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairBolusCalculatorResult -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairTemporaryTarget -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairFood -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairGlucoseValue -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairTherapyEvent -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairTemporaryBasal -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairExtendedBolus -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairProfileSwitch -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairEffectiveProfileSwitch -> dataPair.value.interfaceIDs.nightscoutId + is DataSyncSelector.PairOfflineEvent -> dataPair.value.interfaceIDs.nightscoutId + else -> throw IllegalStateException() + } + when (dataPair) { + is DataSyncSelector.PairBolus -> dataPair.value.toJson(false, dateUtil) + is DataSyncSelector.PairCarbs -> dataPair.value.toJson(false, dateUtil) + is DataSyncSelector.PairBolusCalculatorResult -> dataPair.value.toJson(false, dateUtil, profileFunction) + is DataSyncSelector.PairTemporaryTarget -> dataPair.value.toJson(false, profileFunction.getUnits(), dateUtil) + is DataSyncSelector.PairFood -> dataPair.value.toJson(false) + is DataSyncSelector.PairGlucoseValue -> dataPair.value.toJson(false, dateUtil) + is DataSyncSelector.PairTherapyEvent -> dataPair.value.toJson(false, dateUtil) + is DataSyncSelector.PairTemporaryBasal -> dataPair.value.toJson(false, profileFunction.getProfile(dataPair.value.timestamp), dateUtil) + is DataSyncSelector.PairExtendedBolus -> dataPair.value.toJson(false, profileFunction.getProfile(dataPair.value.timestamp), dateUtil) + is DataSyncSelector.PairProfileSwitch -> dataPair.value.toJson(false, dateUtil) + is DataSyncSelector.PairEffectiveProfileSwitch -> dataPair.value.toJson(false, dateUtil) + is DataSyncSelector.PairOfflineEvent -> dataPair.value.toJson(false, dateUtil) + else -> null + }?.let { data -> + nsClientService?.dbUpdate(collection, id, data, dataPair, progress) + } + } } \ No newline at end of file diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/acks/NSAddAck.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/acks/NSAddAck.kt index 0b68f3c8e9..7163a77321 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/acks/NSAddAck.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/acks/NSAddAck.kt @@ -1,10 +1,15 @@ package info.nightscout.plugins.sync.nsclient.acks +import androidx.work.OneTimeWorkRequest +import info.nightscout.core.utils.receivers.DataWorkerStorage +import info.nightscout.plugins.sync.nsclient.services.NSClientService +import info.nightscout.plugins.sync.nsclient.workers.NSClientAddAckWorker import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.Event import info.nightscout.rx.events.EventNSClientRestart import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag +import info.nightscout.shared.utils.DateUtil import io.socket.client.Ack import org.json.JSONArray import org.json.JSONObject @@ -12,11 +17,13 @@ import org.json.JSONObject class NSAddAck( private val aapsLogger: AAPSLogger, private val rxBus: RxBus, + private val nsClientService: NSClientService, + private val dateUtil: DateUtil, + private val dataWorkerStorage: DataWorkerStorage, val originalObject: Any? = null ) : Event(), Ack { var id: String? = null - private var nsClientID: String? = null var json: JSONObject? = null override fun call(vararg args: Any) { // Regular response @@ -27,11 +34,8 @@ class NSAddAck( response = responseArray.getJSONObject(0) id = response.getString("_id") json = response - if (response.has("NSCLIENT_ID")) { - nsClientID = response.getString("NSCLIENT_ID") - } } - rxBus.send(this) + processAddAck() return } catch (e: Exception) { aapsLogger.error("Unhandled exception", e) @@ -51,4 +55,13 @@ class NSAddAck( aapsLogger.error("Unhandled exception", e) } } + + private fun processAddAck() { + nsClientService.lastAckTime = dateUtil.now() + dataWorkerStorage.enqueue( + OneTimeWorkRequest.Builder(NSClientAddAckWorker::class.java) + .setInputData(dataWorkerStorage.storeInputData(this)) + .build() + ) + } } \ No newline at end of file diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/acks/NSUpdateAck.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/acks/NSUpdateAck.kt index fd07b22ce5..5abd391fa9 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/acks/NSUpdateAck.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/acks/NSUpdateAck.kt @@ -1,9 +1,14 @@ package info.nightscout.plugins.sync.nsclient.acks +import androidx.work.OneTimeWorkRequest +import info.nightscout.core.utils.receivers.DataWorkerStorage +import info.nightscout.plugins.sync.nsclient.services.NSClientService +import info.nightscout.plugins.sync.nsclient.workers.NSClientUpdateRemoveAckWorker import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.Event import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag +import info.nightscout.shared.utils.DateUtil import io.socket.client.Ack import org.json.JSONException import org.json.JSONObject @@ -16,6 +21,9 @@ class NSUpdateAck( var _id: String, private val aapsLogger: AAPSLogger, private val rxBus: RxBus, + private val nsClientService: NSClientService, + private val dateUtil: DateUtil, + private val dataWorkerStorage: DataWorkerStorage, val originalObject: Any? = null ) : Event(), Ack { @@ -29,9 +37,18 @@ class NSUpdateAck( result = true aapsLogger.debug(LTag.NSCLIENT, "Internal error: Missing _id returned on dbUpdate ack") } - rxBus.send(this) + processUpdateAck() } catch (e: JSONException) { aapsLogger.error("Unhandled exception", e) } } + + private fun processUpdateAck() { + nsClientService.lastAckTime = dateUtil.now() + dataWorkerStorage.enqueue( + OneTimeWorkRequest.Builder(NSClientUpdateRemoveAckWorker::class.java) + .setInputData(dataWorkerStorage.storeInputData(this)) + .build() + ) + } } \ No newline at end of file diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ExtendedBolusExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ExtendedBolusExtension.kt index 22ad91b616..5e2f62df7d 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ExtendedBolusExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ExtendedBolusExtension.kt @@ -9,12 +9,15 @@ import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T import org.json.JSONObject -fun ExtendedBolus.toJson(isAdd: Boolean, profile: Profile, dateUtil: DateUtil): JSONObject = - if (isEmulatingTempBasal) - toTemporaryBasal(profile) - .toJson(isAdd, profile, dateUtil) - .put("extendedEmulated", toRealJson(isAdd, dateUtil)) - else toRealJson(isAdd, dateUtil) +fun ExtendedBolus.toJson(isAdd: Boolean, profile: Profile?, dateUtil: DateUtil): JSONObject? = + profile?.let { + if (isEmulatingTempBasal) + toTemporaryBasal(profile) + .toJson(isAdd, profile, dateUtil) + ?.put("extendedEmulated", toRealJson(isAdd, dateUtil)) + else toRealJson(isAdd, dateUtil) + } + fun ExtendedBolus.toRealJson(isAdd: Boolean, dateUtil: DateUtil): JSONObject = JSONObject() diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ProfileSwitchExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ProfileSwitchExtension.kt index 09bc1e7f48..6975c1febb 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ProfileSwitchExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/ProfileSwitchExtension.kt @@ -5,6 +5,7 @@ import info.nightscout.core.extensions.getCustomizedName import info.nightscout.core.extensions.pureProfileFromJson import info.nightscout.core.profile.ProfileSealed import info.nightscout.database.entities.ProfileSwitch +import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.embedments.InterfaceIDs import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.utils.JsonHelper @@ -23,7 +24,7 @@ fun ProfileSwitch.toJson(isAdd: Boolean, dateUtil: DateUtil): JSONObject = .put("created_at", dateUtil.toISOString(timestamp)) .put("enteredBy", "openaps://" + "AndroidAPS") .put("isValid", isValid) - .put("eventType", info.nightscout.database.entities.TherapyEvent.Type.PROFILE_SWITCH.text) + .put("eventType", TherapyEvent.Type.PROFILE_SWITCH.text) .also { // remove customization to store original profileJson in toPureNsJson call timeshift = 0 percentage = 100 diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryBasalExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryBasalExtension.kt index e79e2ce859..79d8e32b23 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryBasalExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/extensions/TemporaryBasalExtension.kt @@ -10,25 +10,27 @@ import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T import org.json.JSONObject -fun TemporaryBasal.toJson(isAdd: Boolean, profile: Profile, dateUtil: DateUtil): JSONObject = - JSONObject() - .put("created_at", dateUtil.toISOString(timestamp)) - .put("enteredBy", "openaps://" + "AndroidAPS") - .put("eventType", info.nightscout.database.entities.TherapyEvent.Type.TEMPORARY_BASAL.text) - .put("isValid", isValid) - .put("duration", T.msecs(duration).mins()) - .put("durationInMilliseconds", duration) // rounded duration leads to different basal IOB - .put("type", type.name) - .put("rate", convertedToAbsolute(timestamp, profile)) // generated by OpenAPS, for compatibility - .also { - if (isAbsolute) it.put("absolute", rate) - else it.put("percent", rate - 100) - if (interfaceIDs.pumpId != null) it.put("pumpId", interfaceIDs.pumpId) - if (interfaceIDs.endId != null) it.put("endId", interfaceIDs.endId) - if (interfaceIDs.pumpType != null) it.put("pumpType", interfaceIDs.pumpType!!.name) - if (interfaceIDs.pumpSerial != null) it.put("pumpSerial", interfaceIDs.pumpSerial) - if (isAdd && interfaceIDs.nightscoutId != null) it.put("_id", interfaceIDs.nightscoutId) - } +fun TemporaryBasal.toJson(isAdd: Boolean, profile: Profile?, dateUtil: DateUtil): JSONObject? = + profile?.let { + JSONObject() + .put("created_at", dateUtil.toISOString(timestamp)) + .put("enteredBy", "openaps://" + "AndroidAPS") + .put("eventType", info.nightscout.database.entities.TherapyEvent.Type.TEMPORARY_BASAL.text) + .put("isValid", isValid) + .put("duration", T.msecs(duration).mins()) + .put("durationInMilliseconds", duration) // rounded duration leads to different basal IOB + .put("type", type.name) + .put("rate", convertedToAbsolute(timestamp, profile)) // generated by OpenAPS, for compatibility + .also { + if (isAbsolute) it.put("absolute", rate) + else it.put("percent", rate - 100) + if (interfaceIDs.pumpId != null) it.put("pumpId", interfaceIDs.pumpId) + if (interfaceIDs.endId != null) it.put("endId", interfaceIDs.endId) + if (interfaceIDs.pumpType != null) it.put("pumpType", interfaceIDs.pumpType!!.name) + if (interfaceIDs.pumpSerial != null) it.put("pumpSerial", interfaceIDs.pumpSerial) + if (isAdd && interfaceIDs.nightscoutId != null) it.put("_id", interfaceIDs.nightscoutId) + } + } fun temporaryBasalFromJson(jsonObject: JSONObject): TemporaryBasal? { val timestamp = JsonHelper.safeGetLongAllowNull(jsonObject, "mills", null) ?: return null diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/services/NSClientService.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/services/NSClientService.kt index 69f3fdd187..4887884cbb 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/services/NSClientService.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/services/NSClientService.kt @@ -25,7 +25,6 @@ import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.nsclient.NSAlarm import info.nightscout.interfaces.nsclient.NSSettingsStatus import info.nightscout.interfaces.sync.DataSyncSelector -import info.nightscout.interfaces.sync.NsClient import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.interfaces.utils.JsonHelper.safeGetString import info.nightscout.interfaces.utils.JsonHelper.safeGetStringAllowNull @@ -40,10 +39,8 @@ import info.nightscout.plugins.sync.nsclient.acks.NSAuthAck import info.nightscout.plugins.sync.nsclient.acks.NSUpdateAck import info.nightscout.plugins.sync.nsclient.data.AlarmAck import info.nightscout.plugins.sync.nsclient.data.NSDeviceStatusHandler -import info.nightscout.plugins.sync.nsclient.workers.NSClientAddAckWorker import info.nightscout.plugins.sync.nsclient.workers.NSClientAddUpdateWorker import info.nightscout.plugins.sync.nsclient.workers.NSClientMbgWorker -import info.nightscout.plugins.sync.nsclient.workers.NSClientUpdateRemoveAckWorker import info.nightscout.plugins.sync.nsclientV3.NSClientV3Plugin import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus @@ -72,7 +69,7 @@ import java.net.URISyntaxException import java.util.Locale import javax.inject.Inject -class NSClientService : DaggerService(), NsClient.NSClientService { +class NSClientService : DaggerService() { @Inject lateinit var injector: HasAndroidInjector @Inject lateinit var aapsLogger: AAPSLogger @@ -111,7 +108,7 @@ class NSClientService : DaggerService(), NsClient.NSClientService { private var nsAPISecret = "" private var nsDevice = "" private val nsHours = 48 - private var lastAckTime: Long = 0 + internal var lastAckTime: Long = 0 private var nsApiHashCode = "" private val reconnections = ArrayList() @@ -168,14 +165,6 @@ class NSClientService : DaggerService(), NsClient.NSClientService { .toObservable(NSAuthAck::class.java) .observeOn(aapsSchedulers.io) .subscribe({ ack -> processAuthAck(ack) }, fabricPrivacy::logException) - disposable += rxBus - .toObservable(NSUpdateAck::class.java) - .observeOn(aapsSchedulers.io) - .subscribe({ ack -> processUpdateAck(ack) }, fabricPrivacy::logException) - disposable += rxBus - .toObservable(NSAddAck::class.java) - .observeOn(aapsSchedulers.io) - .subscribe({ ack -> processAddAck(ack) }, fabricPrivacy::logException) } override fun onDestroy() { @@ -184,24 +173,6 @@ class NSClientService : DaggerService(), NsClient.NSClientService { if (wakeLock?.isHeld == true) wakeLock?.release() } - private fun processAddAck(ack: NSAddAck) { - lastAckTime = dateUtil.now() - dataWorkerStorage.enqueue( - OneTimeWorkRequest.Builder(NSClientAddAckWorker::class.java) - .setInputData(dataWorkerStorage.storeInputData(ack)) - .build() - ) - } - - private fun processUpdateAck(ack: NSUpdateAck) { - lastAckTime = dateUtil.now() - dataWorkerStorage.enqueue( - OneTimeWorkRequest.Builder(NSClientUpdateRemoveAckWorker::class.java) - .setInputData(dataWorkerStorage.storeInputData(ack)) - .build() - ) - } - private fun processAuthAck(ack: NSAuthAck) { var connectionStatus = "Authenticated (" if (ack.read) connectionStatus += "R" @@ -251,7 +222,7 @@ class NSClientService : DaggerService(), NsClient.NSClientService { } else if (!nsEnabled) { rxBus.send(EventNSClientNewLog("NSCLIENT", "disabled")) rxBus.send(EventNSClientStatus("Disabled")) - } else if (nsURL != "" && (config.isEngineeringMode() || nsURL.lowercase(Locale.getDefault()).startsWith("https://"))) { + } else if (nsURL != "" && (nsURL.lowercase(Locale.getDefault()).startsWith("https://"))) { try { rxBus.send(EventNSClientStatus("Connecting ...")) val opt = IO.Options() @@ -598,7 +569,7 @@ class NSClientService : DaggerService(), NsClient.NSClientService { } } - override fun dbUpdate(collection: String, _id: String?, data: JSONObject?, originalObject: Any, progress: String) { + fun dbUpdate(collection: String, _id: String?, data: JSONObject?, originalObject: Any, progress: String) { try { if (_id == null) return if (!isConnected || !hasWriteAuth) return @@ -606,7 +577,7 @@ class NSClientService : DaggerService(), NsClient.NSClientService { message.put("collection", collection) message.put("_id", _id) message.put("data", data) - socket?.emit("dbUpdate", message, NSUpdateAck("dbUpdate", _id, aapsLogger, rxBus, originalObject)) + socket?.emit("dbUpdate", message, NSUpdateAck("dbUpdate", _id, aapsLogger, rxBus, this, dateUtil, dataWorkerStorage, originalObject)) rxBus.send( EventNSClientNewLog( "DBUPDATE $collection", "Sent " + originalObject.javaClass.simpleName + " " + @@ -618,13 +589,13 @@ class NSClientService : DaggerService(), NsClient.NSClientService { } } - override fun dbAdd(collection: String, data: JSONObject, originalObject: Any, progress: String) { + fun dbAdd(collection: String, data: JSONObject, originalObject: Any, progress: String) { try { if (!isConnected || !hasWriteAuth) return val message = JSONObject() message.put("collection", collection) message.put("data", data) - socket?.emit("dbAdd", message, NSAddAck(aapsLogger, rxBus, originalObject)) + socket?.emit("dbAdd", message, NSAddAck(aapsLogger, rxBus, this, dateUtil, dataWorkerStorage, originalObject)) rxBus.send(EventNSClientNewLog("DBADD $collection", "Sent " + originalObject.javaClass.simpleName + " " + data + " " + progress)) } catch (e: JSONException) { aapsLogger.error("Unhandled exception", e) diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddAckWorker.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddAckWorker.kt index ad0e5946cd..3119fa5e74 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddAckWorker.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddAckWorker.kt @@ -6,21 +6,8 @@ import androidx.work.WorkerParameters import androidx.work.workDataOf import info.nightscout.core.utils.receivers.DataWorkerStorage import info.nightscout.core.utils.worker.LoggingWorker -import info.nightscout.database.entities.DeviceStatus import info.nightscout.database.impl.AppRepository -import info.nightscout.database.impl.transactions.UpdateNsIdBolusCalculatorResultTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdBolusTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdCarbsTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdDeviceStatusTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdEffectiveProfileSwitchTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdExtendedBolusTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdFoodTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdGlucoseValueTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdOfflineEventTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdProfileSwitchTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdTemporaryBasalTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdTemporaryTargetTransaction -import info.nightscout.database.impl.transactions.UpdateNsIdTherapyEventTransaction +import info.nightscout.interfaces.nsclient.StoreDataForDb import info.nightscout.interfaces.sync.DataSyncSelector import info.nightscout.interfaces.sync.DataSyncSelector.PairBolus import info.nightscout.interfaces.sync.DataSyncSelector.PairBolusCalculatorResult @@ -40,7 +27,6 @@ import info.nightscout.plugins.sync.nsclient.acks.NSAddAck import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventNSClientNewLog -import info.nightscout.rx.logging.LTag import info.nightscout.shared.sharedPreferences.SP import javax.inject.Inject @@ -55,30 +41,22 @@ class NSClientAddAckWorker( @Inject lateinit var dataSyncSelector: DataSyncSelector @Inject lateinit var aapsSchedulers: AapsSchedulers @Inject lateinit var sp: SP + @Inject lateinit var storeDataForDb: StoreDataForDb override fun doWorkAndLog(): Result { - var ret = Result.success() - val ack = dataWorkerStorage.pickupObject(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) as NSAddAck? ?: return Result.failure(workDataOf("Error" to "missing input data")) if (sp.getBoolean(R.string.key_ns_sync_slow, false)) SystemClock.sleep(1000) + val ret = Result.success(workDataOf("ProcessedData" to ack.originalObject.toString())) when (ack.originalObject) { is PairTemporaryTarget -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdTemporaryTargetTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of TemporaryTarget failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of TemporaryTarget " + pair.value) - dataSyncSelector.confirmLastTempTargetsIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdTemporaryTargets.add(pair.value) + dataSyncSelector.confirmLastTempTargetsIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked TemporaryTarget " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedTempTargetsCompat() @@ -87,17 +65,9 @@ class NSClientAddAckWorker( is PairGlucoseValue -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdGlucoseValueTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of GlucoseValue failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of GlucoseValue " + pair.value) - dataSyncSelector.confirmLastGlucoseValueIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdGlucoseValues.add(pair.value) + dataSyncSelector.confirmLastGlucoseValueIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked GlucoseValue " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedGlucoseValuesCompat() @@ -106,17 +76,9 @@ class NSClientAddAckWorker( is PairFood -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdFoodTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of Food failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of Food " + pair.value) - dataSyncSelector.confirmLastFoodIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdFoods.add(pair.value) + dataSyncSelector.confirmLastFoodIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked Food " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedFoodsCompat() @@ -125,17 +87,9 @@ class NSClientAddAckWorker( is PairTherapyEvent -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdTherapyEventTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of TherapyEvent failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of TherapyEvent " + pair.value) - dataSyncSelector.confirmLastTherapyEventIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdTherapyEvents.add(pair.value) + dataSyncSelector.confirmLastTherapyEventIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked TherapyEvent " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedTherapyEventsCompat() @@ -144,17 +98,9 @@ class NSClientAddAckWorker( is PairBolus -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdBolusTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of Bolus failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of Bolus " + pair.value) - dataSyncSelector.confirmLastBolusIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdBoluses.add(pair.value) + dataSyncSelector.confirmLastBolusIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked Bolus " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedBolusesCompat() @@ -163,17 +109,9 @@ class NSClientAddAckWorker( is PairCarbs -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdCarbsTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of Carbs failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of Carbs " + pair.value) - dataSyncSelector.confirmLastCarbsIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdCarbs.add(pair.value) + dataSyncSelector.confirmLastCarbsIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked Carbs " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedCarbsCompat() @@ -182,17 +120,9 @@ class NSClientAddAckWorker( is PairBolusCalculatorResult -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdBolusCalculatorResultTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of BolusCalculatorResult failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of BolusCalculatorResult " + pair.value) - dataSyncSelector.confirmLastBolusCalculatorResultsIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdBolusCalculatorResults.add(pair.value) + dataSyncSelector.confirmLastBolusCalculatorResultsIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked BolusCalculatorResult " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedBolusCalculatorResultsCompat() @@ -201,17 +131,9 @@ class NSClientAddAckWorker( is PairTemporaryBasal -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdTemporaryBasalTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of TemporaryBasal failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of TemporaryBasal " + pair.value) - dataSyncSelector.confirmLastTemporaryBasalIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdTemporaryBasals.add(pair.value) + dataSyncSelector.confirmLastTemporaryBasalIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked TemporaryBasal " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedTemporaryBasalsCompat() @@ -220,17 +142,9 @@ class NSClientAddAckWorker( is PairExtendedBolus -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdExtendedBolusTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of ExtendedBolus failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of ExtendedBolus " + pair.value) - dataSyncSelector.confirmLastExtendedBolusIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdExtendedBoluses.add(pair.value) + dataSyncSelector.confirmLastExtendedBolusIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked ExtendedBolus " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedExtendedBolusesCompat() @@ -239,17 +153,9 @@ class NSClientAddAckWorker( is PairProfileSwitch -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdProfileSwitchTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of ProfileSwitch failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of ProfileSwitch " + pair.value) - dataSyncSelector.confirmLastProfileSwitchIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdProfileSwitches.add(pair.value) + dataSyncSelector.confirmLastProfileSwitchIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked ProfileSwitch " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedProfileSwitchesCompat() @@ -258,37 +164,21 @@ class NSClientAddAckWorker( is PairEffectiveProfileSwitch -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdEffectiveProfileSwitchTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of EffectiveProfileSwitch failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of EffectiveProfileSwitch " + pair.value) - dataSyncSelector.confirmLastEffectiveProfileSwitchIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdEffectiveProfileSwitches.add(pair.value) + dataSyncSelector.confirmLastEffectiveProfileSwitchIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked EffectiveProfileSwitch " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedEffectiveProfileSwitchesCompat() } - is DeviceStatus -> { - val deviceStatus = ack.originalObject - deviceStatus.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdDeviceStatusTransaction(deviceStatus)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of DeviceStatus failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to deviceStatus.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of DeviceStatus $deviceStatus") - dataSyncSelector.confirmLastDeviceStatusIdIfGreater(deviceStatus.id) - } - .blockingGet() - rxBus.send(EventNSClientNewLog("DBADD", "Acked DeviceStatus " + deviceStatus.interfaceIDs.nightscoutId)) + is DataSyncSelector.PairDeviceStatus -> { + val pair = ack.originalObject + pair.value.interfaceIDs.nightscoutId = ack.id + storeDataForDb.nsIdDeviceStatuses.add(pair.value) + dataSyncSelector.confirmLastDeviceStatusIdIfGreater(pair.value.id) + storeDataForDb.scheduleNsIdUpdate() + rxBus.send(EventNSClientNewLog("DBADD", "Acked DeviceStatus " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedDeviceStatusesCompat() } @@ -301,17 +191,9 @@ class NSClientAddAckWorker( is PairOfflineEvent -> { val pair = ack.originalObject pair.value.interfaceIDs.nightscoutId = ack.id - repository.runTransactionForResult(UpdateNsIdOfflineEventTransaction(pair.value)) - .doOnError { error -> - aapsLogger.error(LTag.DATABASE, "Updated ns id of OfflineEvent failed", error) - ret = Result.failure((workDataOf("Error" to error.toString()))) - } - .doOnSuccess { - ret = Result.success(workDataOf("ProcessedData" to pair.toString())) - aapsLogger.debug(LTag.DATABASE, "Updated ns id of OfflineEvent " + pair.value) - dataSyncSelector.confirmLastOfflineEventIdIfGreater(pair.updateRecordId) - } - .blockingGet() + storeDataForDb.nsIdOfflineEvents.add(pair.value) + dataSyncSelector.confirmLastOfflineEventIdIfGreater(pair.updateRecordId) + storeDataForDb.scheduleNsIdUpdate() rxBus.send(EventNSClientNewLog("DBADD", "Acked OfflineEvent " + pair.value.interfaceIDs.nightscoutId)) // Send new if waiting dataSyncSelector.processChangedOfflineEventsCompat() diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddUpdateWorker.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddUpdateWorker.kt index 7c79f38715..ee941fab59 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddUpdateWorker.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientAddUpdateWorker.kt @@ -11,11 +11,11 @@ import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.Config import info.nightscout.interfaces.XDripBroadcast import info.nightscout.interfaces.logging.UserEntryLogger +import info.nightscout.interfaces.nsclient.StoreDataForDb import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.pump.VirtualPump import info.nightscout.interfaces.utils.JsonHelper import info.nightscout.plugins.sync.R -import info.nightscout.plugins.sync.nsShared.StoreDataForDbImpl import info.nightscout.plugins.sync.nsclient.extensions.bolusFromJson import info.nightscout.plugins.sync.nsclient.extensions.carbsFromJson import info.nightscout.plugins.sync.nsclient.extensions.effectiveProfileSwitchFromJson @@ -46,7 +46,7 @@ class NSClientAddUpdateWorker( @Inject lateinit var rxBus: RxBus @Inject lateinit var uel: UserEntryLogger @Inject lateinit var xDripBroadcast: XDripBroadcast - @Inject lateinit var storeDataForDb: StoreDataForDbImpl + @Inject lateinit var storeDataForDb: StoreDataForDb override fun doWorkAndLog(): Result { val treatments = dataWorkerStorage.pickupJSONArray(inputData.getLong(DataWorkerStorage.STORE_KEY, -1)) diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientMbgWorker.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientMbgWorker.kt index 26cb5321b0..4ba8f44dc9 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientMbgWorker.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclient/workers/NSClientMbgWorker.kt @@ -6,7 +6,7 @@ import androidx.work.workDataOf import info.nightscout.core.utils.receivers.DataWorkerStorage import info.nightscout.core.utils.worker.LoggingWorker import info.nightscout.interfaces.Config -import info.nightscout.plugins.sync.nsShared.StoreDataForDbImpl +import info.nightscout.interfaces.nsclient.StoreDataForDb import info.nightscout.plugins.sync.nsclient.data.NSMbg import info.nightscout.plugins.sync.nsclient.extensions.therapyEventFromNsMbg import info.nightscout.shared.sharedPreferences.SP @@ -20,7 +20,7 @@ class NSClientMbgWorker( @Inject lateinit var dataWorkerStorage: DataWorkerStorage @Inject lateinit var sp: SP @Inject lateinit var config: Config - @Inject lateinit var storeDataForDb: StoreDataForDbImpl + @Inject lateinit var storeDataForDb: StoreDataForDb override fun doWorkAndLog(): Result { val ret = Result.success() diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt index b7486c1bda..9d2ac4c637 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/NSClientV3Plugin.kt @@ -19,6 +19,7 @@ import info.nightscout.interfaces.nsclient.NSAlarm import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginType +import info.nightscout.interfaces.sync.DataSyncSelector import info.nightscout.interfaces.sync.NsClient import info.nightscout.interfaces.sync.Sync import info.nightscout.interfaces.ui.UiInteraction @@ -26,11 +27,9 @@ import info.nightscout.interfaces.utils.HtmlHelper import info.nightscout.plugins.sync.R import info.nightscout.plugins.sync.nsShared.NSClientFragment import info.nightscout.plugins.sync.nsShared.events.EventNSClientResend -import info.nightscout.plugins.sync.nsShared.events.EventNSClientStatus import info.nightscout.plugins.sync.nsShared.events.EventNSClientUpdateGUI import info.nightscout.plugins.sync.nsclient.NsClientReceiverDelegate -import info.nightscout.plugins.sync.nsclient.data.AlarmAck -import info.nightscout.plugins.sync.nsclient.services.NSClientService +import info.nightscout.plugins.sync.nsclientV3.extensions.toNSBolus import info.nightscout.plugins.sync.nsclientV3.workers.LoadBgWorker import info.nightscout.plugins.sync.nsclientV3.workers.LoadLastModificationWorker import info.nightscout.plugins.sync.nsclientV3.workers.LoadStatusWorker @@ -52,6 +51,7 @@ import info.nightscout.shared.utils.DateUtil import info.nightscout.shared.utils.T import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign +import kotlinx.coroutines.runBlocking import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import javax.inject.Inject @@ -87,21 +87,30 @@ class NSClientV3Plugin @Inject constructor( companion object { val JOB_NAME: String = this::class.java.simpleName + val REFRESH_INTERVAL = T.mins(5).msecs() } private val disposable = CompositeDisposable() + private lateinit var runLoop: Runnable private val handler = Handler(HandlerThread(this::class.simpleName + "Handler").also { it.start() }.looper) private val listLog: MutableList = ArrayList() - override var status = "" - override val nsClientService: NSClientService? = null // service not needed + override val status + get() = + when { + sp.getBoolean(R.string.key_ns_client_paused, false) -> rh.gs(info.nightscout.core.ui.R.string.paused) + isAllowed.not() -> blockingReason + nsAndroidClient.lastStatus == null -> rh.gs(R.string.not_connected) + workIsRunning(arrayOf(JOB_NAME)) -> rh.gs(R.string.working) + nsAndroidClient.lastStatus?.apiPermissions?.isFull() == true -> rh.gs(info.nightscout.shared.R.string.connected) + nsAndroidClient.lastStatus?.apiPermissions?.isRead() == true -> rh.gs(R.string.read_only) + else -> rh.gs(info.nightscout.core.ui.R.string.unknown) + } internal lateinit var nsAndroidClient: NSAndroidClient // private lateinit var nsAndroidRxClient: NSAndroidRxClient - val isAllowed: Boolean - get() = nsClientReceiverDelegate.allowed - val blockingReason: String - get() = nsClientReceiverDelegate.blockingReason + val isAllowed get() = nsClientReceiverDelegate.allowed + val blockingReason get() = nsClientReceiverDelegate.blockingReason private val maxAge = T.days(77).msecs() internal var lastModified: LastModified? = null // timestamp of last modification for every collection @@ -133,31 +142,24 @@ class NSClientV3Plugin @Inject constructor( lastFetched.collections.profile = max(dateUtil.now() - maxAge, lastFetched.collections.profile) lastFetched.collections.devicestatus = max(dateUtil.now() - maxAge, lastFetched.collections.devicestatus) - nsAndroidClient = NSAndroidClientImpl( - baseUrl = sp.getString(info.nightscout.core.utils.R.string.key_nsclientinternal_url, "").lowercase().replace("https://", ""), - accessToken = sp.getString(R.string.key_ns_client_token, ""), - context = context, - logging = true - ) + setClient() nsClientReceiverDelegate.grabReceiversState() - disposable += rxBus - .toObservable(EventNSClientStatus::class.java) - .observeOn(aapsSchedulers.io) - .subscribe({ event -> - status = event.getStatus(context) - rxBus.send(EventNSClientUpdateGUI()) - // Pass to setup wizard - rxBus.send(EventSWSyncStatus(event.getStatus(context))) - }, fabricPrivacy::logException) disposable += rxBus .toObservable(EventNetworkChange::class.java) .observeOn(aapsSchedulers.io) - .subscribe({ ev -> nsClientReceiverDelegate.onStatusEvent(ev) }, fabricPrivacy::logException) + .subscribe({ ev -> + nsClientReceiverDelegate.onStatusEvent(ev) + setClient() + }, fabricPrivacy::logException) disposable += rxBus .toObservable(EventPreferenceChange::class.java) .observeOn(aapsSchedulers.io) - .subscribe({ ev -> nsClientReceiverDelegate.onStatusEvent(ev) }, fabricPrivacy::logException) + .subscribe({ ev -> + nsClientReceiverDelegate.onStatusEvent(ev) + if (ev.isChanged(rh.gs(R.string.key_ns_client_token)) || ev.isChanged(rh.gs(info.nightscout.core.utils.R.string.key_nsclientinternal_url))) + setClient() + }, fabricPrivacy::logException) // disposable += rxBus // .toObservable(EventAppExit::class.java) // .observeOn(aapsSchedulers.io) @@ -177,10 +179,18 @@ class NSClientV3Plugin @Inject constructor( .toObservable(EventNSClientResend::class.java) .observeOn(aapsSchedulers.io) .subscribe({ event -> resend(event.reason) }, fabricPrivacy::logException) + + runLoop = Runnable { + executeLoop() + handler.postDelayed(runLoop, REFRESH_INTERVAL) + } + handler.postDelayed(runLoop, REFRESH_INTERVAL) + executeLoop() } override fun onStop() { // context.applicationContext.unbindService(mConnection) + handler.removeCallbacksAndMessages(null) disposable.clear() super.onStop() } @@ -196,8 +206,8 @@ class NSClientV3Plugin @Inject constructor( preferenceFragment.findPreference(rh.gs(R.string.key_ns_receive_tbr_eb))?.isVisible = config.isEngineeringMode() } - override val hasWritePermission: Boolean get() = nsClientService?.hasWriteAuth ?: false - override val connected: Boolean get() = nsClientService?.isConnected ?: false + override val hasWritePermission: Boolean get() = nsAndroidClient.lastStatus?.apiPermissions?.isFull() ?: false + override val connected: Boolean get() = nsAndroidClient.lastStatus != null override fun clearLog() { handler.post { @@ -206,6 +216,16 @@ class NSClientV3Plugin @Inject constructor( } } + private fun setClient() { + nsAndroidClient = NSAndroidClientImpl( + baseUrl = sp.getString(info.nightscout.core.utils.R.string.key_nsclientinternal_url, "").lowercase().replace("https://", ""), + accessToken = sp.getString(R.string.key_ns_client_token, ""), + context = context, + logging = true + ) + rxBus.send(EventSWSyncStatus(status)) + } + private fun addToLog(ev: EventNSClientNewLog) { synchronized(listLog) { listLog.add(ev) @@ -231,7 +251,7 @@ class NSClientV3Plugin @Inject constructor( } override fun resend(reason: String) { - nsClientService?.resend(reason) +// nsClientService?.resend(reason) } override fun pause(newState: Boolean) { @@ -239,8 +259,7 @@ class NSClientV3Plugin @Inject constructor( rxBus.send(EventPreferenceChange(rh.gs(R.string.key_ns_client_paused))) } - override val version: NsClient.Version - get() = NsClient.Version.V3 + override val version: NsClient.Version get() = NsClient.Version.V3 override val address: String get() = sp.getString(info.nightscout.core.utils.R.string.key_nsclientinternal_url, "") @@ -250,12 +269,12 @@ class NSClientV3Plugin @Inject constructor( aapsLogger.debug(LTag.NSCLIENT, "Upload disabled. Message dropped") return } - nsClientService?.sendAlarmAck( - AlarmAck().also { ack -> - ack.level = originalAlarm.level() - ack.group = originalAlarm.group() - ack.silenceTime = silenceTimeInMilliseconds - }) + // nsClientService?.sendAlarmAck( + // AlarmAck().also { ack -> + // ack.level = originalAlarm.level() + // ack.group = originalAlarm.group() + // ack.silenceTime = silenceTimeInMilliseconds + // }) } override fun updateLatestBgReceivedIfNewer(latestReceived: Long) { @@ -282,11 +301,59 @@ class NSClientV3Plugin @Inject constructor( storeLastFetched() } + override fun dbAdd(collection: String, dataPair: DataSyncSelector.DataPair, progress: String) { + when (dataPair) { + is DataSyncSelector.PairBolus -> dataPair.value.toNSBolus() + // is DataSyncSelector.PairCarbs -> dataPair.value.toJson(false, dateUtil) + // is DataSyncSelector.PairBolusCalculatorResult -> dataPair.value.toJson(false, dateUtil, profileFunction) + // is DataSyncSelector.PairTemporaryTarget -> dataPair.value.toJson(false, profileFunction.getUnits(), dateUtil) + // is DataSyncSelector.PairFood -> dataPair.value.toJson(false) + // is DataSyncSelector.PairGlucoseValue -> dataPair.value.toJson(false, dateUtil) + // is DataSyncSelector.PairTherapyEvent -> dataPair.value.toJson(false, dateUtil) + // is DataSyncSelector.PairTemporaryBasal -> dataPair.value.toJson(false, profileFunction.getProfile(dataPair.value.timestamp), dateUtil) + // is DataSyncSelector.PairExtendedBolus -> dataPair.value.toJson(false, profileFunction.getProfile(dataPair.value.timestamp), dateUtil) + // is DataSyncSelector.PairProfileSwitch -> dataPair.value.toJson(false, dateUtil) + // is DataSyncSelector.PairEffectiveProfileSwitch -> dataPair.value.toJson(false, dateUtil) + // is DataSyncSelector.PairOfflineEvent -> dataPair.value.toJson(false, dateUtil) + else -> null + }?.let { data -> + runBlocking { + if (collection == "treatments") { + val result = nsAndroidClient.createTreatment(data) + } + } + } + } + + override fun dbUpdate(collection: String, dataPair: DataSyncSelector.DataPair, progress: String) { + TODO("Not yet implemented") + } + private fun storeLastFetched() { sp.putString(R.string.key_ns_client_v3_last_modified, Json.encodeToString(LastModified.serializer(), lastFetched)) } fun test() { + executeLoop() + } + + fun scheduleNewExecution() { + val toTime = lastFetched.collections.entries + T.mins(6).plus(T.secs(0)).msecs() + if (toTime > dateUtil.now()) { + handler.postDelayed({ executeLoop() }, toTime - dateUtil.now()) + rxBus.send(EventNSClientNewLog("NEXT", dateUtil.dateAndTimeAndSecondsString(toTime))) + } + } + + private fun executeLoop() { + if (sp.getBoolean(R.string.key_ns_client_paused, false)) { + rxBus.send(EventNSClientNewLog("NSCLIENT", "paused")) + return + } + if (!isAllowed) { + rxBus.send(EventNSClientNewLog("NSCLIENT", blockingReason)) + return + } if (workIsRunning(arrayOf(JOB_NAME))) rxBus.send(EventNSClientNewLog("RUN", "Already running")) else { diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/extensions/BolusExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/extensions/BolusExtension.kt index 23746cd94c..9b901ac7dd 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/extensions/BolusExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/extensions/BolusExtension.kt @@ -1,7 +1,9 @@ package info.nightscout.plugins.sync.nsclientV3.extensions import info.nightscout.database.entities.Bolus +import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.embedments.InterfaceIDs +import info.nightscout.sdk.localmodel.treatment.EventType import info.nightscout.sdk.localmodel.treatment.NSBolus fun NSBolus.toBolus(): Bolus = @@ -21,4 +23,28 @@ fun NSBolus.BolusType?.toBolusType(): Bolus.Type = NSBolus.BolusType.SMB -> Bolus.Type.SMB NSBolus.BolusType.PRIMING -> Bolus.Type.PRIMING null -> Bolus.Type.NORMAL + } + +fun Bolus.toNSBolus(): NSBolus = + NSBolus( + eventType = EventType.fromString(if (type == Bolus.Type.SMB) TherapyEvent.Type.CORRECTION_BOLUS.text else TherapyEvent.Type.MEAL_BOLUS.text), + isValid = isValid, + date = timestamp, + utcOffset = utcOffset, + insulin = amount, + type = type.toBolusType(), + notes = notes, + identifier = interfaceIDs.nightscoutId, + pumpId = interfaceIDs.pumpId, + pumpType = interfaceIDs.pumpType?.name, + pumpSerial = interfaceIDs.pumpSerial, + endId = interfaceIDs.endId + ) + +fun Bolus.Type?.toBolusType(): NSBolus.BolusType = + when (this) { + Bolus.Type.NORMAL -> NSBolus.BolusType.NORMAL + Bolus.Type.SMB -> NSBolus.BolusType.SMB + Bolus.Type.PRIMING -> NSBolus.BolusType.PRIMING + null -> NSBolus.BolusType.NORMAL } \ No newline at end of file diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/extensions/ExtendedBolusExtension.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/extensions/ExtendedBolusExtension.kt index c2dfeaa81b..090b71f7b2 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/extensions/ExtendedBolusExtension.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/extensions/ExtendedBolusExtension.kt @@ -11,6 +11,6 @@ fun NSExtendedBolus.toExtendedBolus(): ExtendedBolus = utcOffset = utcOffset, amount = enteredinsulin, duration = duration, - isEmulatingTempBasal = isEmulatingTempbasal, + isEmulatingTempBasal = isEmulatingTempBasal ?: false, interfaceIDs_backing = InterfaceIDs(nightscoutId = identifier, pumpId = pumpId, pumpType = InterfaceIDs.PumpType.fromString(pumpType), pumpSerial = pumpSerial, endId = endId) ) diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadBgWorker.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadBgWorker.kt index 8bccefe53f..99b9cbed8c 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadBgWorker.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadBgWorker.kt @@ -76,6 +76,7 @@ class LoadBgWorker( } else { rxBus.send(EventNSClientNewLog("END", "No new SGVs from ${dateUtil.dateAndTimeAndSecondsString(nsClientV3Plugin.lastFetched.collections.entries)}")) + nsClientV3Plugin.scheduleNewExecution() // Idea is to run after 5 min after last BG WorkManager.getInstance(context) .beginUniqueWork( NSClientV3Plugin.JOB_NAME, diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadTreatmentsWorker.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadTreatmentsWorker.kt index 21ac3717fb..70ec2be334 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadTreatmentsWorker.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/LoadTreatmentsWorker.kt @@ -8,7 +8,7 @@ import androidx.work.WorkerParameters import androidx.work.workDataOf import info.nightscout.core.utils.receivers.DataWorkerStorage import info.nightscout.core.utils.worker.LoggingWorker -import info.nightscout.plugins.sync.nsShared.StoreDataForDbImpl +import info.nightscout.interfaces.nsclient.StoreDataForDb import info.nightscout.plugins.sync.nsclientV3.NSClientV3Plugin import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventNSClientNewLog @@ -26,7 +26,7 @@ class LoadTreatmentsWorker( @Inject lateinit var context: Context @Inject lateinit var nsClientV3Plugin: NSClientV3Plugin @Inject lateinit var dateUtil: DateUtil - @Inject lateinit var storeDataForDb: StoreDataForDbImpl + @Inject lateinit var storeDataForDb: StoreDataForDb override fun doWorkAndLog(): Result { var ret = Result.success() diff --git a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/ProcessTreatmentsWorker.kt b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/ProcessTreatmentsWorker.kt index 096f746e20..2d433f5845 100644 --- a/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/ProcessTreatmentsWorker.kt +++ b/plugins/sync/src/main/java/info/nightscout/plugins/sync/nsclientV3/workers/ProcessTreatmentsWorker.kt @@ -10,9 +10,9 @@ import info.nightscout.interfaces.Config import info.nightscout.interfaces.Constants import info.nightscout.interfaces.XDripBroadcast import info.nightscout.interfaces.logging.UserEntryLogger +import info.nightscout.interfaces.nsclient.StoreDataForDb import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.plugins.sync.R -import info.nightscout.plugins.sync.nsShared.StoreDataForDbImpl import info.nightscout.plugins.sync.nsclientV3.extensions.toBolus import info.nightscout.plugins.sync.nsclientV3.extensions.toBolusCalculatorResult import info.nightscout.plugins.sync.nsclientV3.extensions.toCarbs @@ -54,7 +54,7 @@ class ProcessTreatmentsWorker( @Inject lateinit var rxBus: RxBus @Inject lateinit var uel: UserEntryLogger @Inject lateinit var xDripBroadcast: XDripBroadcast - @Inject lateinit var storeDataForDb: StoreDataForDbImpl + @Inject lateinit var storeDataForDb: StoreDataForDb override fun doWorkAndLog(): Result { @Suppress("UNCHECKED_CAST") diff --git a/plugins/sync/src/main/res/values-cs-rCZ/strings.xml b/plugins/sync/src/main/res/values-cs-rCZ/strings.xml index b1beabbc57..61cc0c4179 100644 --- a/plugins/sync/src/main/res/values-cs-rCZ/strings.xml +++ b/plugins/sync/src/main/res/values-cs-rCZ/strings.xml @@ -97,4 +97,7 @@ Odstranit vše Resetovat start Nahrát nyní + Nepřipojeno + Jen pro čtení + Pracuji diff --git a/plugins/sync/src/main/res/values-es-rES/strings.xml b/plugins/sync/src/main/res/values-es-rES/strings.xml index f1d46065f4..131b6173fc 100644 --- a/plugins/sync/src/main/res/values-es-rES/strings.xml +++ b/plugins/sync/src/main/res/values-es-rES/strings.xml @@ -97,4 +97,7 @@ Eliminar todos Restablecer inicio Subir ahora + No conectado + Sólo lectura + Funcionando diff --git a/plugins/sync/src/main/res/values-fr-rFR/strings.xml b/plugins/sync/src/main/res/values-fr-rFR/strings.xml index 5069f0dc37..de85e5002c 100644 --- a/plugins/sync/src/main/res/values-fr-rFR/strings.xml +++ b/plugins/sync/src/main/res/values-fr-rFR/strings.xml @@ -97,4 +97,7 @@ Supprimer tout Réinitialiser le démarrage Télécharger maintenant + Non connecté + Lecture seule + Opération en cours diff --git a/plugins/sync/src/main/res/values-ru-rRU/strings.xml b/plugins/sync/src/main/res/values-ru-rRU/strings.xml index b67a2c12aa..9fa4e3545d 100644 --- a/plugins/sync/src/main/res/values-ru-rRU/strings.xml +++ b/plugins/sync/src/main/res/values-ru-rRU/strings.xml @@ -97,4 +97,7 @@ Удалить всё Перезапустить старт Выгрузить (передать данные) сейчас + Нет подключения + Только чтение + Обработка diff --git a/plugins/sync/src/main/res/values/strings.xml b/plugins/sync/src/main/res/values/strings.xml index 666d569463..9d6bdef502 100644 --- a/plugins/sync/src/main/res/values/strings.xml +++ b/plugins/sync/src/main/res/values/strings.xml @@ -143,4 +143,8 @@ Reset start Upload now + Not connected + Read only + Working + \ No newline at end of file diff --git a/pump/combo/src/main/java/info/nightscout/pump/combo/di/ComboActivitiesModule.kt b/pump/combo/src/main/java/info/nightscout/pump/combo/di/ComboActivitiesModule.kt index ea71e7d0b1..832893dd2c 100644 --- a/pump/combo/src/main/java/info/nightscout/pump/combo/di/ComboActivitiesModule.kt +++ b/pump/combo/src/main/java/info/nightscout/pump/combo/di/ComboActivitiesModule.kt @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.danars.di +package info.nightscout.pump.combo.di import dagger.Module import dagger.android.ContributesAndroidInjector diff --git a/pump/combo/src/main/java/info/nightscout/pump/combo/di/ComboModule.kt b/pump/combo/src/main/java/info/nightscout/pump/combo/di/ComboModule.kt index d31494715d..405589340f 100644 --- a/pump/combo/src/main/java/info/nightscout/pump/combo/di/ComboModule.kt +++ b/pump/combo/src/main/java/info/nightscout/pump/combo/di/ComboModule.kt @@ -1,7 +1,6 @@ package info.nightscout.pump.combo.di import dagger.Module -import info.nightscout.androidaps.danars.di.ComboActivitiesModule @Module(includes = [ ComboActivitiesModule::class diff --git a/pump/combov2/README.md b/pump/combov2/README.md new file mode 100644 index 0000000000..17727f3561 --- /dev/null +++ b/pump/combov2/README.md @@ -0,0 +1,153 @@ +# Overview over combov2's and ComboCtl's architecture + +ComboCtl is the core driver. It uses Kotlin Multiplatform and is written in a platform agnostic +way. The code is located in `comboctl/`, and is also available in [its own separate repository] +(https://github.com/dv1/ComboCtl). That separate repository is kept in sync with the ComboCtl +copy in AndroidAPS as much as possible, with some notable changes (see below). "combov2" is the +name of the AndroidAPS driver. In short: combov2 = ComboCtl + extra AndroidAPS integration code. + +## Directory structure + +The directory structure of the local ComboCtl itself is: + +* `comboctl/src/commonMain/` : The platform agnostic portion of ComboCtl. The vast majority of + ComboCtl's logic is contained there. +* `comboctl/src/androidMain/` : The Android specific code. This in particular contains + implementations of the Bluetooth interfaces that are defined in `commonMain/`. +* `comboctl/src/jvmTest/` : Unit tests. This subdirectory is called `jvmTest` because in the + ComboCtl repository, there is also a `jvmMain/` subdirectory, and the unit tests are run + with the JVM. + +The AndroidAPS specific portion of the driver is located in `src/`. This connects ComboCtl with +AndroidAPS. In particular, this is where the `ComboV2Plugin` class is located. That's the main +entrypoint for the combov2 driver plugin. + +## Basic description of how ComboCtl communicates with the pump + +ComboCtl uses Kotlin coroutines. It uses [the Default dispatcher](https://kotlinlang. +org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-dispatchers/-default.html), +with [a limitedParallelism](https://kotlinlang.org/api/kotlinx. +coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-dispatcher/limited-parallelism.html) +constraint to prevent actual parallelism, that is, to not let coroutine jobs run on multiple +threads concurrently. Coroutines are used in ComboCtl to greatly simplify the communication steps, +which normally require a number of state machines to be implemented manually. Stackless coroutines +like Kotlin's essentially are automatically generated state machines under the hood, and this is +what they are used for here. Enabling parallelism is not part of such a state machine. Furthermore, +communication with the Combo does not benefit from parallelism. + +The communication code in ComboCtl is split in higher level operations (in its `Pump` class) and +lower level ones (in its `PumpIO` class). `Pump` instantiates `PumpIO` internally, and focuses on +implementing functionality like reading basal profiles, setting TBRs etc. `PumpIO` implements the +building blocks for these higher level operations. In particular, `PumpIO` has an internal +coroutine scope that is used for sending data to the Combo and for running a "heartbeat" loop. +That "heartbeat" is a message that needs to be regularly sent to the Combo (unless other data is +sent to the Combo in time, like a command to press a button). If nothing is sent to a Combo for +some time, it will eventually disconnect. For this reason, that heartbeat loop is necessary. + +PumpIO also contains the code for performing the pump pairing. + +Going further down a level, `TransportLayer` implements the IO code to generate packets for the +Combo and parse packets coming from the Combo. This includes code for authenticating outgoing +packets and for checking incoming ones. `TransportLayer` also contains the `IO` subclass, which +actually transfers packets to and receives data from the Combo. + +One important detail to keep in mind about the `IO` class is that it enforces a packet send +interval of 200 ms. That is: The time between packet transmission is never shorter than 200 ms +(it is OK to be longer). The interval is important, because the Combo has a ring buffer for the +packet it receives, and transmitting packets to the Combo too quickly causes an overflow and a +subsequent error in the Combo, which then terminates the connection. + +The Combo can run in three modes. The first one is the "service" mode, which is only briefly +used for setting up the connection. Immediately after the connection is established, the pump +continues in the "command" or "remote terminal" (abbr. "RT") mode. The "command" mode is what the +remote control of the Combo uses for its direct commands (that is, delivering bolus and retrieving +the latest changes / activities from the history). The "remote terminal" mode replicates the LCD +on the pump itself along with the 4 Combo buttons. + +Only a few operations are possible in the command mode. In particular, the driver uses the bolus +delivery command from the command mode, the command to retrieve a history delta, and the command +for getting the pump's current date and time. But everything else (getting basal profile, setting +TBR, getting pump status...) is done in the remote terminal mode, by emulating a user pressing +buttons. This unfortunately means that these operations are performed slowly, but there is no +other choice. + +## Details about long-pressing RT buttons + +As part of operations like reading the pump's profile, an emulated long RT button press is sometimes +used. Such long presses cause more rapid changes compared to multiple short button presses. A +button press is "long" when the emulated user "holds down" the button, while a short button press +equals pressing and immediately releasing the emulated button. + +The greater speed of long button presses comes with a drawback though: "Overshoots" can happen. For +example, if long button pressing is used for adjusting a quantity on screen, then the quantity may +still get incremented/decremented after the emulated user "released" the button. It is therefore +necessary to check the quantity on screen, and finetune it with short button presses afterwards +if necessary. + +## Idempotent and non-idempotent high level commands + +A command is _idempotent_ if it can be repeated if the connection to the pump was lost. Most +commands are idempotent. For example, reading the basal profile can be repeated if during the +initial basal profile retrieval the connection was lost (for example because the user walked away +from the pump). After a few attempts to repeat the command, an error is produced (to avoid an +infinite loop). + +Currently, there is only one non-idempotent command: Delivering a bolus. This one _cannot_ be +repeated, otherwise there is a high risk of infusing too much insulin. Instead, in case of a +connection failure, the delivering bolus command fails immediately and is not automatically +attempted again. + +## Automatic datetime adjustments and timezone offset handling + +ComboCtl automatically adjusts the date and time of the Combo. This is done through the RT mode, +since there is no command-mode command to _set_ the current datetime (but there is one for +_getting_ the current datetime). But since the Combo cannot store a timezone offset (it only stores +localtime), the timezone offset that has been used so far is stored in a dedicated field in the +pump state store that ComboCtl uses. DST changes and timezone changes can be tracked properly with +this logic. + +The pump's current datetime is always retrieved (through the command mode) every time a connection +is established to it, and compared to the system's current datetime. If these two differ too much, +the pump's datetime is automatically adjusted. This keeps the pump's datetime in sync. + +## Notes about how TBRs are set + +TBRs are set through the remote terminal mode. The driver assumes that the Combo is configured +to use 15-minute TBR duration steps sizes and a TBR percentage maximum of 500%. There is code +in the driver to detect if the maximum is not set to 500%. If AndroidAPS tries to set a percentage +that is higher than the actually configured maximum, then eventually, an error is reported. + +:warning: The duration step size cannot be detected by the driver. The user _must_ make sure that +the step size is configured to 15 minutes. + +## Pairing with a Combo and the issue with pump queue connection timeouts + +When pairing, the pump queue's internal timeout is likely to be reached. Essentially, the queue +tries to connect to the pump right after the driver was selected in the configuration. But +a connection cannot be established because the pump is not yet paired. + +When the queue attempts to connect to the pump, it "thinks" that if the connect procedure does not +complete after 120 seconds, then the driver must be stuck somehow. The queue then hits a timeout. +The assumption about 120s is correct if the Combo is already paired (a connection should be set up +in far less time than 120s). But if it is currently being paired, the steps involved can take +about 2-3 minutes. + +For this reason, the driver automatically requests a pump update - which connects to the pump - +once pairing is done. + +## Changes to ComboCtl in the local copy + +The code in `comboctl/` is ComboCtl minus the `jvmMain/` code, which contains code for the Linux +platform. This includes C++ glue code to the BlueZ stack. Since none of this is useful to +AndroidAPS, it is better left out, especially since it consists of almost 9000 lines of code. + +Also, the original `comboctl/build.gradle.kts` files is replaced by `comboctl/build.gradle`, which +is much simpler, and builds ComboCtl as a kotlin-android project, not a Kotlin Multiplatform one. +This simplifies integration into AndroidAPS, and avoids multiplatform problems (after all, +Kotlin Multiplatform is still marked as an alpha version feature). + +When updating ComboCtl, it is important to keep these differences in mind. + +Differences between the copy in `comboctl/` and the original ComboCtl code must be kept as little +as possible, and preferably be transferred to the main ComboCtl project. This helps with keeping the +`comboctl/` copy and the main project in sync since transferring changes then is straightforward. diff --git a/pump/combov2/comboctl-changes.txt b/pump/combov2/comboctl-changes.txt deleted file mode 100644 index 728e9ec14c..0000000000 --- a/pump/combov2/comboctl-changes.txt +++ /dev/null @@ -1,14 +0,0 @@ -The code in comboctl/ is ComboCtl minus the jvmMain/ code, which contains code for the Linux platform. -This includes C++ glue code to the BlueZ stack. Since none of this is useful to AndroidAPS, it is better -left out, especially since it consists of almost 9000 lines of code. - -Also, the original comboctl/build.gradle.kts files is replaced by comboctl/build.gradle, which is -much simpler, and builds ComboCtl as a kotlin-android project, not a kotlin-multiplatform one. -This simplifies integration into AndroidAPS, and avoids multiplatform problems (after all, -Kotlin Multiplatform is still marked as an alpha version feature). - -When updating ComboCtl, it is important to keep these differences in mind. - -Differences between the copy in comboctl/ and the original ComboCtl code must be kept as little as -possible, and preferably be transferred to the main ComboCtl project. This helps keep the comboctl/ -copy and the main project in sync. diff --git a/pump/combov2/comboctl/src/androidMain/kotlin/info/nightscout/comboctl/android/AndroidBluetoothDevice.kt b/pump/combov2/comboctl/src/androidMain/kotlin/info/nightscout/comboctl/android/AndroidBluetoothDevice.kt index 8f954ec0cb..ae154d22e0 100644 --- a/pump/combov2/comboctl/src/androidMain/kotlin/info/nightscout/comboctl/android/AndroidBluetoothDevice.kt +++ b/pump/combov2/comboctl/src/androidMain/kotlin/info/nightscout/comboctl/android/AndroidBluetoothDevice.kt @@ -67,8 +67,9 @@ class AndroidBluetoothDevice( // just yet (for example because the UI is still shown on the LCD), while // the retryBlocking loop here is in place because the _Android device_ // may not be ready to connect right away. - // TODO: Test and define what happens when all attempts failed. - // The user needs to be informed and given the choice to try again. + // When all attempts fail, retryBlocking() lets the exception pass through. + // That exception is wrapped in BluetoothException, which then needs to be + // handled by the caller. val totalNumAttempts = 5 retryBlocking(numberOfRetries = totalNumAttempts, delayBetweenRetries = 100) { attemptNumber, previousException -> if (abortConnectAttempt) diff --git a/pump/combov2/comboctl/src/androidMain/kotlin/info/nightscout/comboctl/android/AndroidBluetoothInterface.kt b/pump/combov2/comboctl/src/androidMain/kotlin/info/nightscout/comboctl/android/AndroidBluetoothInterface.kt index 3f2ee01dd0..e1dfee66dc 100644 --- a/pump/combov2/comboctl/src/androidMain/kotlin/info/nightscout/comboctl/android/AndroidBluetoothInterface.kt +++ b/pump/combov2/comboctl/src/androidMain/kotlin/info/nightscout/comboctl/android/AndroidBluetoothInterface.kt @@ -381,13 +381,6 @@ class AndroidBluetoothInterface(private val androidContext: Context) : Bluetooth // instance was already processed. This check here instead // verifies if we have seen the same Bluetooth address on // *different* Android Bluetooth device instances. - // TODO: Test how AndroidBluetoothInterface behaves if the - // device is unpaired while discovery is ongoing (manually by - // the user for example). In theory, this should be handled - // properly by the onBondStateChanged function below. - // TODO: This check may not be necessary on all Android - // devices. On some, it seems to also work if we use the - // first offered BluetoothDevice. if (comboctlBtAddress !in previouslyDiscoveredDevices) { previouslyDiscoveredDevices[comboctlBtAddress] = androidBtDevice logger(LogLevel.DEBUG) { diff --git a/pump/combov2/comboctl/src/commonMain/kotlin/info/nightscout/comboctl/main/Pump.kt b/pump/combov2/comboctl/src/commonMain/kotlin/info/nightscout/comboctl/main/Pump.kt index 745e23276c..68c7de77eb 100644 --- a/pump/combov2/comboctl/src/commonMain/kotlin/info/nightscout/comboctl/main/Pump.kt +++ b/pump/combov2/comboctl/src/commonMain/kotlin/info/nightscout/comboctl/main/Pump.kt @@ -2743,8 +2743,6 @@ class Pump( ) } - numObservedScreens++ - val factorIndexOnScreen = parsedScreen.beginTime.hour // numUnits null means the basal profile factor @@ -2752,6 +2750,11 @@ class Pump( if (parsedScreen.numUnits == null) return@longPressRTButtonUntil LongPressRTButtonsCommand.ContinuePressingButton + // Increase this _after_ checking for a blinking screen + // to not accidentally count the blinking and non-blinking + // screens as two separate ones. + numObservedScreens++ + // If the factor in the profile is >= 0, // it means it was already read earlier. if (basalProfileFactors[factorIndexOnScreen] >= 0) @@ -2759,14 +2762,16 @@ class Pump( val factor = parsedScreen.numUnits basalProfileFactors[factorIndexOnScreen] = factor - logger(LogLevel.DEBUG) { "Got basal profile factor #$factorIndexOnScreen : $factor" } + + numRetrievedFactors++ + logger(LogLevel.DEBUG) { + "Got basal profile factor #$factorIndexOnScreen : $factor; $numRetrievedFactors factor(s) read and $numObservedScreens screen(s) observed thus far" + } getBasalProfileReporter.setCurrentProgressStage( RTCommandProgressStage.GettingBasalProfile(numRetrievedFactors) ) - numRetrievedFactors++ - return@longPressRTButtonUntil if (numObservedScreens >= NUM_COMBO_BASAL_PROFILE_FACTORS) LongPressRTButtonsCommand.ReleaseButton else @@ -2819,21 +2824,19 @@ class Pump( } } + numRetrievedFactors++ getBasalProfileReporter.setCurrentProgressStage( RTCommandProgressStage.GettingBasalProfile(numRetrievedFactors) ) - numRetrievedFactors++ } } - // All factors retrieved. Press CHECK once to get back to the total - // basal rate screen, and then CHECK again to return to the main menu. - - rtNavigationContext.shortPressButton(RTNavigationButton.CHECK) - waitUntilScreenAppears(rtNavigationContext, ParsedScreen.BasalRateTotalScreen::class) - - rtNavigationContext.shortPressButton(RTNavigationButton.CHECK) - waitUntilScreenAppears(rtNavigationContext, ParsedScreen.MainScreen::class) + // All factors retrieved. Press BACK repeatedly until we are back at the main menu. + cycleToRTScreen( + rtNavigationContext, + RTNavigationButton.BACK, + ParsedScreen.MainScreen::class + ) getBasalProfileReporter.setCurrentProgressStage(BasicProgressStage.Finished) diff --git a/pump/combov2/src/main/res/values-cs-rCZ/strings.xml b/pump/combov2/src/main/res/values-cs-rCZ/strings.xml index 7bda3a2d82..aaa7b846ff 100644 --- a/pump/combov2/src/main/res/values-cs-rCZ/strings.xml +++ b/pump/combov2/src/main/res/values-cs-rCZ/strings.xml @@ -94,6 +94,9 @@ Pokud po více než ~5 minutách není navázáno žádné spojení:\n\n V zásobníku je málo inzulínu Nastavení dočasného bazálu bylo úspěšné Nastavení dočasného bazálu selhalo + Nastavit emulovaný 100% dočasný bazál + Nechávám emulovaný 100% dočasný bazál dokončit + Ignorování požadavku 100% dočasného bazálu Při úpravě dočasného bazálu došlo k neočekávanému limitu: vyžadováno %1$d%%, dosažen limit %1$d%% Nelze nastavit absolutní dočasný bazál, pokud je bazální dávka nulová Párovat AndroidAPS a Android s momentálně nespárovanou pumpou Accu-Chek Combo diff --git a/pump/combov2/src/main/res/values-es-rES/strings.xml b/pump/combov2/src/main/res/values-es-rES/strings.xml index a2eab6735f..39da6729ad 100644 --- a/pump/combov2/src/main/res/values-es-rES/strings.xml +++ b/pump/combov2/src/main/res/values-es-rES/strings.xml @@ -94,6 +94,9 @@ Si no puedes establecer ninguna conexión después de unos ~5 minutos:\n\n El nivel del reservorio de bomba es bajo Configuración de TBR exitosa Configuración de TBR fallida + Establecer la emulación del TBR al 100% + Permitir finalizar la emulación del 100% del TBR en curso + Ignorar la solicitud del 100% del TBR redundate Límite inesperado encontrado al ajustar TBR: el porcentaje objetivo fue de %1$d%%, alcanzó un límite de %1$d%% No se puede establecer el TBR absoluto si la tasa basal base es cero Emparejar AndroidAPS y Android con una bomba Accu-Chek Combo actualmente no emparejada diff --git a/pump/combov2/src/main/res/values-fr-rFR/strings.xml b/pump/combov2/src/main/res/values-fr-rFR/strings.xml index d95eac085e..05f6c80633 100644 --- a/pump/combov2/src/main/res/values-fr-rFR/strings.xml +++ b/pump/combov2/src/main/res/values-fr-rFR/strings.xml @@ -85,6 +85,9 @@ Niveau réservoir pompe bas Paramétrage du DBT réussi Échec du réglage du DBT + Définir l\'émulation 100% TBR + Laisser se terminer l\'émulation 100% TBR en cours + Requête 100% DBT redondante ignorée Limite inattendue lors de l’ajustement du DBT: le pourcentage cible de %1$d%%, a dépassé la limite de %1$d%% Impossible de définir le DBT absolu si le débit de basal est zéro Appairer AndroidAPS et Android avec une pompe Accu-Chek Combo non appariée diff --git a/pump/combov2/src/main/res/values-no-rNO/strings.xml b/pump/combov2/src/main/res/values-no-rNO/strings.xml index 589be98136..e21b0400cf 100644 --- a/pump/combov2/src/main/res/values-no-rNO/strings.xml +++ b/pump/combov2/src/main/res/values-no-rNO/strings.xml @@ -95,6 +95,9 @@ knappene samtidig for å avbryte parringen)\n Pumpens reservoarnivå er lavt Innstilling av TBR var vellykket Innstilling av TBR mislyktes + Angi emulert 100% TBR + Lar aktive emulert 100% TBR få avslutte + Ignorerer redundant 100% TBR forespørsel Uventet begrensning oppsto ved justering av TBR: målprosenten var %1$d%%, nådde grense på %1$d%% Kan ikke sette absolutt TBR hvis basalraten er null Sammenkoble AndroidAPS og Android med en ikke-tilkoblet Accu-Chek Combo pumpe diff --git a/pump/combov2/src/main/res/values-ru-rRU/strings.xml b/pump/combov2/src/main/res/values-ru-rRU/strings.xml index 43227b663f..c75a5f9604 100644 --- a/pump/combov2/src/main/res/values-ru-rRU/strings.xml +++ b/pump/combov2/src/main/res/values-ru-rRU/strings.xml @@ -95,6 +95,9 @@ Низкий уровень инсулина в картридже помпы Настройки TBR выполнены Не удалось установить TBR + Установить эмуляцию. временного базала TBR 100% + Позволить завершиться текущей эмуляции временного базала 100% TBR + Игнорирование избыточного запроса на 100% TBR Непредвиденный предел, встретившийся при настройке TBR: целевой процент составил %1$d%%, а достиг предела %1$d%% Невозможно установить абсолютный TBR, если базовая скорость равна нулю Выполнить сопряжение AndroidAPS и Android с помпой Accu-Chek Combo diff --git a/pump/dana/src/main/java/info/nightscout/pump/dana/DanaPump.kt b/pump/dana/src/main/java/info/nightscout/pump/dana/DanaPump.kt index f266dae18e..35764163a6 100644 --- a/pump/dana/src/main/java/info/nightscout/pump/dana/DanaPump.kt +++ b/pump/dana/src/main/java/info/nightscout/pump/dana/DanaPump.kt @@ -55,7 +55,7 @@ class DanaPump @Inject constructor( var lastConnection: Long = 0 var lastSettingsRead: Long = 0 - @JvmField var lastHistoryFetched: Long = 0 + @JvmField var readHistoryFrom: Long = 0 // start next history read from this timestamp @JvmField var historyDoneReceived: Boolean = false // true when last history message is received // Info @@ -410,7 +410,7 @@ class DanaPump @Inject constructor( aapsLogger.debug(LTag.PUMP, "DanaRPump reset") lastConnection = 0 lastSettingsRead = 0 - lastHistoryFetched = 0 + readHistoryFrom = 0 } fun modelFriendlyName(): String = diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java b/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java index 57760a5663..3ab6863eb7 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/DanaRv2Plugin.java @@ -57,8 +57,6 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { private final TemporaryBasalStorage temporaryBasalStorage; private final FabricPrivacy fabricPrivacy; - public long lastEventTimeLoaded = 0; - @Inject public DanaRv2Plugin( HasAndroidInjector injector, @@ -345,7 +343,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin { PumpEnactResult result = new PumpEnactResult(getInjector()); if (danaPump.isTempBasalInProgress()) { sExecutionService.tempBasalStop(); - result.enacted(true).isTempCancel(true); + result.success(true).enacted(true).isTempCancel(true); } else { result.success(true).isTempCancel(true).comment(info.nightscout.core.ui.R.string.ok); aapsLogger.debug(LTag.PUMP, "cancelRealTempBasal: OK"); diff --git a/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java b/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java index 18eabcdf03..f723ac765d 100644 --- a/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java +++ b/pump/danar/src/main/java/info/nightscout/androidaps/danaRv2/services/DanaRv2ExecutionService.java @@ -346,7 +346,7 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService { MsgSetHistoryEntry_v2 msgSetHistoryEntry_v2 = new MsgSetHistoryEntry_v2(injector, DanaPump.HistoryEntry.CARBS.getValue(), carbtime, carbs, 0); mSerialIOThread.sendMessage(msgSetHistoryEntry_v2); - danaPump.lastHistoryFetched = Math.min(danaPump.lastHistoryFetched, carbtime - T.Companion.mins(1).msecs()); + danaPump.readHistoryFrom = Math.min(danaPump.readHistoryFrom, carbtime - T.Companion.mins(1).msecs()); if (!msgSetHistoryEntry_v2.isReceived() || msgSetHistoryEntry_v2.getFailed()) uiInteraction.runAlarm(rh.gs(info.nightscout.pump.dana.R.string.carbs_store_error), rh.gs(info.nightscout.core.ui.R.string.error), info.nightscout.core.ui.R.raw.boluserror); } @@ -418,7 +418,7 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService { MsgSetHistoryEntry_v2 msgSetHistoryEntry_v2 = new MsgSetHistoryEntry_v2(injector, DanaPump.HistoryEntry.CARBS.getValue(), time, amount, 0); mSerialIOThread.sendMessage(msgSetHistoryEntry_v2); - danaPump.lastHistoryFetched = Math.min(danaPump.lastHistoryFetched, time - T.Companion.mins(1).msecs()); + danaPump.readHistoryFrom = Math.min(danaPump.readHistoryFrom, time - T.Companion.mins(1).msecs()); return true; } @@ -433,18 +433,17 @@ public class DanaRv2ExecutionService extends AbstractDanaRExecutionService { if (!isConnected()) return new PumpEnactResult(injector).success(false); SystemClock.sleep(300); - MsgHistoryEventsV2 msg = new MsgHistoryEventsV2(injector, danaPump.lastHistoryFetched); - aapsLogger.debug(LTag.PUMP, "Loading event history from: " + dateUtil.dateAndTimeString(danaPump.lastHistoryFetched)); + MsgHistoryEventsV2 msg = new MsgHistoryEventsV2(injector, danaPump.readHistoryFrom); + aapsLogger.debug(LTag.PUMP, "Loading event history from: " + dateUtil.dateAndTimeString(danaPump.readHistoryFrom)); mSerialIOThread.sendMessage(msg); while (!danaPump.historyDoneReceived && mRfcommSocket.isConnected()) { SystemClock.sleep(100); } SystemClock.sleep(200); - if (danaRv2Plugin.lastEventTimeLoaded != 0) - danaPump.lastHistoryFetched = danaRv2Plugin.lastEventTimeLoaded - T.Companion.mins(1).msecs(); + if (danaPump.getLastEventTimeLoaded() != 0) danaPump.readHistoryFrom = danaPump.getLastEventTimeLoaded() - T.Companion.mins(1).msecs(); else - danaPump.lastHistoryFetched = 0; + danaPump.readHistoryFrom = 0; danaPump.setLastConnection(System.currentTimeMillis()); return new PumpEnactResult(injector).success(true); } diff --git a/pump/danars/src/main/java/info/nightscout/pump/danars/dialogs/PairingProgressDialog.kt b/pump/danars/src/main/java/info/nightscout/pump/danars/dialogs/PairingProgressDialog.kt index 8fd988a3df..51d00909eb 100644 --- a/pump/danars/src/main/java/info/nightscout/pump/danars/dialogs/PairingProgressDialog.kt +++ b/pump/danars/src/main/java/info/nightscout/pump/danars/dialogs/PairingProgressDialog.kt @@ -53,7 +53,6 @@ class PairingProgressDialog : DaggerDialogFragment() { dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) isCancelable = false dialog?.setCanceledOnTouchOutside(false) - setViews() return binding.root } @@ -84,6 +83,7 @@ class PairingProgressDialog : DaggerDialogFragment() { _binding?.ok?.visibility = View.VISIBLE } } + setViews() } override fun dismiss() { diff --git a/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt b/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt index 0b43f17b02..88a5ea63df 100644 --- a/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt +++ b/pump/danars/src/main/java/info/nightscout/pump/danars/services/DanaRSService.kt @@ -262,19 +262,13 @@ class DanaRSService : DaggerService() { return result } SystemClock.sleep(1000) - val msg: DanaRSPacketAPSHistoryEvents - if (danaPump.lastHistoryFetched == 0L) { - msg = DanaRSPacketAPSHistoryEvents(injector, 0) - aapsLogger.debug(LTag.PUMPCOMM, "Loading complete event history") - } else { - msg = DanaRSPacketAPSHistoryEvents(injector, danaPump.lastHistoryFetched) - aapsLogger.debug(LTag.PUMPCOMM, "Loading event history from: " + dateUtil.dateAndTimeString(danaPump.lastHistoryFetched)) - } + val msg = DanaRSPacketAPSHistoryEvents(injector, danaPump.readHistoryFrom) + aapsLogger.debug(LTag.PUMPCOMM, "Loading event history from: " + dateUtil.dateAndTimeString(danaPump.readHistoryFrom)) sendMessage(msg) while (!danaPump.historyDoneReceived && bleComm.isConnected) { SystemClock.sleep(100) } - danaPump.lastHistoryFetched = if (danaPump.lastEventTimeLoaded != 0L) danaPump.lastEventTimeLoaded - T.mins(1).msecs() else 0 + danaPump.readHistoryFrom = if (danaPump.lastEventTimeLoaded != 0L) danaPump.lastEventTimeLoaded - T.mins(1).msecs() else 0 aapsLogger.debug(LTag.PUMPCOMM, "Events loaded") rxBus.send(EventPumpStatusChanged(rh.gs(info.nightscout.pump.dana.R.string.gettingpumpstatus))) sendMessage(DanaRSPacketGeneralInitialScreenInformation(injector)) @@ -305,7 +299,7 @@ class DanaRSService : DaggerService() { // sendMessage(msg); val msgSetHistoryEntryV2 = DanaRSPacketAPSSetEventHistory(injector, DanaPump.HistoryEntry.CARBS.value, carbTime, carbs, 0) sendMessage(msgSetHistoryEntryV2) - danaPump.lastHistoryFetched = min(danaPump.lastHistoryFetched, carbTime - T.mins(1).msecs()) + danaPump.readHistoryFrom = min(danaPump.readHistoryFrom, carbTime - T.mins(1).msecs()) if (!msgSetHistoryEntryV2.isReceived || msgSetHistoryEntryV2.failed) uiInteraction.runAlarm(rh.gs(info.nightscout.pump.dana.R.string.carbs_store_error), rh.gs(info.nightscout.core.ui.R.string.error), info.nightscout.core.ui.R.raw.boluserror) } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BasalLimitInquireResponsePacket.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BasalLimitInquireResponsePacket.kt index 0d2f428178..0089294c28 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BasalLimitInquireResponsePacket.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BasalLimitInquireResponsePacket.kt @@ -3,7 +3,7 @@ package info.nightscout.pump.diaconn.packet import dagger.android.HasAndroidInjector import info.nightscout.pump.diaconn.DiaconnG8Pump import info.nightscout.pump.diaconn.R -import info.nightscout.pump.diaconn.pumplog.PumplogUtil +import info.nightscout.pump.diaconn.pumplog.PumpLogUtil import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP @@ -39,7 +39,7 @@ class BasalLimitInquireResponsePacket(injector: HasAndroidInjector) : DiaconnG8P } diaconnG8Pump.maxBasalPerHours = getShortToInt(bufferData).toDouble() / 100.0 // not include tempbasal limit val pumpFirmwareVersion = sp.getString(rh.gs(R.string.pumpversion), "") - if(pumpFirmwareVersion.isNotEmpty() && PumplogUtil.isPumpVersionGe(pumpFirmwareVersion, 3, 0)) { + if(pumpFirmwareVersion.isNotEmpty() && PumpLogUtil.isPumpVersionGe(pumpFirmwareVersion, 3, 0)) { diaconnG8Pump.maxBasal = diaconnG8Pump.maxBasalPerHours * 2.5 // include tempbasal } else { diaconnG8Pump.maxBasal = diaconnG8Pump.maxBasalPerHours * 2.0 // include tempbasal diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigAPSMainInfoInquireResponsePacket.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigAPSMainInfoInquireResponsePacket.kt index 0408aa03a1..975e8edade 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigAPSMainInfoInquireResponsePacket.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigAPSMainInfoInquireResponsePacket.kt @@ -3,7 +3,7 @@ package info.nightscout.pump.diaconn.packet import dagger.android.HasAndroidInjector import info.nightscout.pump.diaconn.DiaconnG8Pump import info.nightscout.pump.diaconn.R -import info.nightscout.pump.diaconn.pumplog.PumplogUtil +import info.nightscout.pump.diaconn.pumplog.PumpLogUtil import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP @@ -214,7 +214,7 @@ class BigAPSMainInfoInquireResponsePacket( diaconnG8Pump.pumpProfiles!![diaconnG8Pump.activeProfile][23] = diaconnG8Pump.baseAmount24 //incarnation no 처리 - diaconnG8Pump.isPumpVersionGe2_63 = PumplogUtil.isPumpVersionGe(sp.getString(rh.gs(R.string.pumpversion), ""), 2, 63) + diaconnG8Pump.isPumpVersionGe2_63 = PumpLogUtil.isPumpVersionGe(sp.getString(rh.gs(R.string.pumpversion), ""), 2, 63) aapsLogger.debug(LTag.PUMPCOMM, "result > " + diaconnG8Pump.result) aapsLogger.debug(LTag.PUMPCOMM, "systemRemainInsulin > " + diaconnG8Pump.systemRemainInsulin) diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigLogInquireResponsePacket.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigLogInquireResponsePacket.kt index cc99c8b9f8..23c00cf689 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigLogInquireResponsePacket.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigLogInquireResponsePacket.kt @@ -19,32 +19,32 @@ import info.nightscout.pump.diaconn.api.PumpLogDto import info.nightscout.pump.diaconn.common.RecordTypes import info.nightscout.pump.diaconn.database.DiaconnHistoryRecord import info.nightscout.pump.diaconn.database.DiaconnHistoryRecordDao -import info.nightscout.pump.diaconn.pumplog.LOG_ALARM_BATTERY -import info.nightscout.pump.diaconn.pumplog.LOG_ALARM_BLOCK -import info.nightscout.pump.diaconn.pumplog.LOG_ALARM_SHORTAGE -import info.nightscout.pump.diaconn.pumplog.LOG_CHANGE_INJECTOR_SUCCESS -import info.nightscout.pump.diaconn.pumplog.LOG_CHANGE_NEEDLE_SUCCESS -import info.nightscout.pump.diaconn.pumplog.LOG_CHANGE_TUBE_SUCCESS -import info.nightscout.pump.diaconn.pumplog.LOG_INJECTION_1DAY -import info.nightscout.pump.diaconn.pumplog.LOG_INJECTION_1DAY_BASAL -import info.nightscout.pump.diaconn.pumplog.LOG_INJECTION_1HOUR_BASAL -import info.nightscout.pump.diaconn.pumplog.LOG_INJECTION_DUAL_NORMAL -import info.nightscout.pump.diaconn.pumplog.LOG_INJECT_DUAL_FAIL -import info.nightscout.pump.diaconn.pumplog.LOG_INJECT_DUAL_SUCCESS -import info.nightscout.pump.diaconn.pumplog.LOG_INJECT_MEAL_FAIL -import info.nightscout.pump.diaconn.pumplog.LOG_INJECT_MEAL_SUCCESS -import info.nightscout.pump.diaconn.pumplog.LOG_INJECT_NORMAL_FAIL -import info.nightscout.pump.diaconn.pumplog.LOG_INJECT_NORMAL_SUCCESS -import info.nightscout.pump.diaconn.pumplog.LOG_INJECT_SQUARE_FAIL -import info.nightscout.pump.diaconn.pumplog.LOG_INJECT_SQUARE_SUCCESS -import info.nightscout.pump.diaconn.pumplog.LOG_RESET_SYS_V3 -import info.nightscout.pump.diaconn.pumplog.LOG_SET_DUAL_INJECTION -import info.nightscout.pump.diaconn.pumplog.LOG_SET_SQUARE_INJECTION -import info.nightscout.pump.diaconn.pumplog.LOG_SUSPEND_RELEASE_V2 -import info.nightscout.pump.diaconn.pumplog.LOG_SUSPEND_V2 -import info.nightscout.pump.diaconn.pumplog.LOG_TB_START_V3 -import info.nightscout.pump.diaconn.pumplog.LOG_TB_STOP_V3 -import info.nightscout.pump.diaconn.pumplog.PumplogUtil +import info.nightscout.pump.diaconn.pumplog.LogAlarmBattery +import info.nightscout.pump.diaconn.pumplog.LogAlarmBlock +import info.nightscout.pump.diaconn.pumplog.LogAlarmShortAge +import info.nightscout.pump.diaconn.pumplog.LogChangeInjectorSuccess +import info.nightscout.pump.diaconn.pumplog.LogChangeNeedleSuccess +import info.nightscout.pump.diaconn.pumplog.LogChangeTubeSuccess +import info.nightscout.pump.diaconn.pumplog.LogInjectDualFail +import info.nightscout.pump.diaconn.pumplog.LogInjectDualSuccess +import info.nightscout.pump.diaconn.pumplog.LogInjectMealFail +import info.nightscout.pump.diaconn.pumplog.LogInjectMealSuccess +import info.nightscout.pump.diaconn.pumplog.LogInjectNormalFail +import info.nightscout.pump.diaconn.pumplog.LogInjectNormalSuccess +import info.nightscout.pump.diaconn.pumplog.LogInjectSquareFail +import info.nightscout.pump.diaconn.pumplog.LogInjectSquareSuccess +import info.nightscout.pump.diaconn.pumplog.LogInjection1Day +import info.nightscout.pump.diaconn.pumplog.LogInjection1DayBasal +import info.nightscout.pump.diaconn.pumplog.LogInjection1HourBasal +import info.nightscout.pump.diaconn.pumplog.LogInjectionDualNormal +import info.nightscout.pump.diaconn.pumplog.LogResetSysV3 +import info.nightscout.pump.diaconn.pumplog.LogSetDualInjection +import info.nightscout.pump.diaconn.pumplog.LogSetSquareInjection +import info.nightscout.pump.diaconn.pumplog.LogSuspendReleaseV2 +import info.nightscout.pump.diaconn.pumplog.LogSuspendV2 +import info.nightscout.pump.diaconn.pumplog.LogTbStartV3 +import info.nightscout.pump.diaconn.pumplog.LogTbStopV3 +import info.nightscout.pump.diaconn.pumplog.PumpLogUtil import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventPumpStatusChanged import info.nightscout.rx.logging.LTag @@ -113,22 +113,22 @@ class BigLogInquireResponsePacket( val logNum = getShortToInt(bufferData) // 2byte // log Data Parsing val logData = byteArrayOf( - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData), - PumplogUtil.getByte(bufferData) + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData), + PumpLogUtil.getByte(bufferData) ) // process Log to DB val logDataToHexString = toNarrowHex(logData) - val pumpLogKind: Byte = PumplogUtil.getKind(logDataToHexString) + val pumpLogKind: Byte = PumpLogUtil.getKind(logDataToHexString) var status: String val diaconnG8HistoryRecord = DiaconnHistoryRecord(0) @@ -151,8 +151,8 @@ class BigLogInquireResponsePacket( when (pumpLogKind) { - LOG_INJECT_MEAL_SUCCESS.LOG_KIND -> { - val logItem = LOG_INJECT_MEAL_SUCCESS.parse(logDataToHexString) + LogInjectMealSuccess.LOG_KIND -> { + val logItem = LogInjectMealSuccess.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -186,8 +186,8 @@ class BigLogInquireResponsePacket( status = "MEAL_BOLUS_SUCCESS" + dateUtil.timeString(logDateTime) } - LOG_INJECT_MEAL_FAIL.LOG_KIND -> { - val logItem = LOG_INJECT_MEAL_FAIL.parse(logDataToHexString) + LogInjectMealFail.LOG_KIND -> { + val logItem = LogInjectMealFail.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -221,8 +221,8 @@ class BigLogInquireResponsePacket( status = "MEAL_BOLUS_FAIL " + dateUtil.timeString(logDateTime) } - LOG_INJECT_NORMAL_SUCCESS.LOG_KIND -> { - val logItem = LOG_INJECT_NORMAL_SUCCESS.parse(logDataToHexString) + LogInjectNormalSuccess.LOG_KIND -> { + val logItem = LogInjectNormalSuccess.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") @@ -257,8 +257,8 @@ class BigLogInquireResponsePacket( status = "BOLUS_SUCCESS" + dateUtil.timeString(logDateTime) } - LOG_INJECT_NORMAL_FAIL.LOG_KIND -> { - val logItem = LOG_INJECT_NORMAL_FAIL.parse(logDataToHexString) + LogInjectNormalFail.LOG_KIND -> { + val logItem = LogInjectNormalFail.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -295,8 +295,8 @@ class BigLogInquireResponsePacket( status = "BOLUS_FAIL " + dateUtil.timeString(logDateTime) } - LOG_SET_SQUARE_INJECTION.LOG_KIND -> { - val logItem = LOG_SET_SQUARE_INJECTION.parse(logDataToHexString) + LogSetSquareInjection.LOG_KIND -> { + val logItem = LogSetSquareInjection.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -326,8 +326,8 @@ class BigLogInquireResponsePacket( status = "EXTENDED_BOLUS_START " + dateUtil.timeString(logDateTime) } - LOG_INJECT_SQUARE_SUCCESS.LOG_KIND -> { - val logItem = LOG_INJECT_SQUARE_SUCCESS.parse(logDataToHexString) + LogInjectSquareSuccess.LOG_KIND -> { + val logItem = LogInjectSquareSuccess.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -343,8 +343,8 @@ class BigLogInquireResponsePacket( status = "EXTENDED_BOLUS_END " + dateUtil.timeString(logDateTime) } - LOG_INJECT_SQUARE_FAIL.LOG_KIND -> { - val logItem = LOG_INJECT_SQUARE_FAIL.parse(logDataToHexString) + LogInjectSquareFail.LOG_KIND -> { + val logItem = LogInjectSquareFail.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -371,8 +371,8 @@ class BigLogInquireResponsePacket( status = "EXTENDED_BOLUS_FAIL " + dateUtil.timeString(logDateTime) } - LOG_SET_DUAL_INJECTION.LOG_KIND -> { - val logItem = LOG_SET_DUAL_INJECTION.parse(logDataToHexString) + LogSetDualInjection.LOG_KIND -> { + val logItem = LogSetDualInjection.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -405,8 +405,8 @@ class BigLogInquireResponsePacket( status = "DUAL_EXTENDED_START " + dateUtil.timeString(logDateTime) } - LOG_INJECTION_DUAL_NORMAL.LOG_KIND -> { - val logItem = LOG_INJECTION_DUAL_NORMAL.parse(logDataToHexString) + LogInjectionDualNormal.LOG_KIND -> { + val logItem = LogInjectionDualNormal.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -445,8 +445,8 @@ class BigLogInquireResponsePacket( status = "DUAL_BOLUS" + dateUtil.timeString(logDateTime) } - LOG_INJECT_DUAL_SUCCESS.LOG_KIND -> { - val logItem = LOG_INJECT_DUAL_SUCCESS.parse(logDataToHexString) + LogInjectDualSuccess.LOG_KIND -> { + val logItem = LogInjectDualSuccess.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -464,8 +464,8 @@ class BigLogInquireResponsePacket( status = "DUAL_BOLUS_SQUARE_SUCCESS " + dateUtil.timeString(logDateTime) } - LOG_INJECT_DUAL_FAIL.LOG_KIND -> { - val logItem = LOG_INJECT_DUAL_FAIL.parse(logDataToHexString) + LogInjectDualFail.LOG_KIND -> { + val logItem = LogInjectDualFail.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -493,8 +493,8 @@ class BigLogInquireResponsePacket( status = "DUAL_BOLUS FAIL " + dateUtil.timeString(logDateTime) } - LOG_INJECTION_1HOUR_BASAL.LOG_KIND -> { - val logItem = LOG_INJECTION_1HOUR_BASAL.parse(logDataToHexString) + LogInjection1HourBasal.LOG_KIND -> { + val logItem = LogInjection1HourBasal.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -509,8 +509,8 @@ class BigLogInquireResponsePacket( status = "1HOUR BASAL " + dateUtil.dateAndTimeString(logDateTime) } - LOG_SUSPEND_V2.LOG_KIND -> { - val logItem = LOG_SUSPEND_V2.parse(logDataToHexString) + LogSuspendV2.LOG_KIND -> { + val logItem = LogSuspendV2.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -524,8 +524,8 @@ class BigLogInquireResponsePacket( status = "SUSPEND " + dateUtil.timeString(logDateTime) } - LOG_SUSPEND_RELEASE_V2.LOG_KIND -> { - val logItem = LOG_SUSPEND_RELEASE_V2.parse(logDataToHexString) + LogSuspendReleaseV2.LOG_KIND -> { + val logItem = LogSuspendReleaseV2.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -539,8 +539,8 @@ class BigLogInquireResponsePacket( status = "SUSPEND_RELEASE " + dateUtil.timeString(logDateTime) } - LOG_CHANGE_INJECTOR_SUCCESS.LOG_KIND -> { - val logItem = LOG_CHANGE_INJECTOR_SUCCESS.parse(logDataToHexString) + LogChangeInjectorSuccess.LOG_KIND -> { + val logItem = LogChangeInjectorSuccess.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -568,8 +568,8 @@ class BigLogInquireResponsePacket( status = "INSULIN_CHANGE " + dateUtil.timeString(logDateTime) } - LOG_CHANGE_TUBE_SUCCESS.LOG_KIND -> { - val logItem = LOG_CHANGE_TUBE_SUCCESS.parse(logDataToHexString) + LogChangeTubeSuccess.LOG_KIND -> { + val logItem = LogChangeTubeSuccess.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -600,8 +600,8 @@ class BigLogInquireResponsePacket( status = "TUBE_CHANGE " + dateUtil.timeString(logDateTime) } - LOG_INJECTION_1DAY.LOG_KIND -> { // Daily Bolus Log - val logItem = LOG_INJECTION_1DAY.parse(logDataToHexString) + LogInjection1Day.LOG_KIND -> { // Daily Bolus Log + val logItem = LogInjection1Day.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -649,8 +649,8 @@ class BigLogInquireResponsePacket( status = "DAILY_BOLUS " + dateUtil.timeString(logDateTime) } - LOG_INJECTION_1DAY_BASAL.LOG_KIND -> { // Daily Basal Log - val logItem = LOG_INJECTION_1DAY_BASAL.parse(logDataToHexString) + LogInjection1DayBasal.LOG_KIND -> { // Daily Basal Log + val logItem = LogInjection1DayBasal.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -698,8 +698,8 @@ class BigLogInquireResponsePacket( status = "DAILY_BASAL " + dateUtil.timeString(logDateTime) } - LOG_CHANGE_NEEDLE_SUCCESS.LOG_KIND -> { - val logItem = LOG_CHANGE_NEEDLE_SUCCESS.parse(logDataToHexString) + LogChangeNeedleSuccess.LOG_KIND -> { + val logItem = LogChangeNeedleSuccess.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -728,8 +728,8 @@ class BigLogInquireResponsePacket( status = "NEEDLE_CHANGE " + dateUtil.timeString(logDateTime) } - LOG_TB_START_V3.LOG_KIND -> { - val logItem = LOG_TB_START_V3.parse(logDataToHexString) + LogTbStartV3.LOG_KIND -> { + val logItem = LogTbStartV3.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") @@ -772,8 +772,8 @@ class BigLogInquireResponsePacket( status = "TEMP_START " + dateUtil.timeString(logDateTime) } - LOG_TB_STOP_V3.LOG_KIND -> { - val logItem = LOG_TB_STOP_V3.parse(logDataToHexString) + LogTbStopV3.LOG_KIND -> { + val logItem = LogTbStopV3.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -806,8 +806,8 @@ class BigLogInquireResponsePacket( status = "TEMP_STOP " + dateUtil.timeString(logDateTime) } - LOG_ALARM_BATTERY.LOG_KIND -> { // BATTERY SHORTAGE ALARM - val logItem = LOG_ALARM_BATTERY.parse(logDataToHexString) + LogAlarmBattery.LOG_KIND -> { // BATTERY SHORTAGE ALARM + val logItem = LogAlarmBattery.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") val logDateTime = logStartDate.time @@ -822,8 +822,8 @@ class BigLogInquireResponsePacket( status = "BATTERY_ALARM " + dateUtil.timeString(logDateTime) } - LOG_ALARM_BLOCK.LOG_KIND -> { // INJECTION BLOCKED ALARM - val logItem = LOG_ALARM_BLOCK.parse(logDataToHexString) + LogAlarmBlock.LOG_KIND -> { // INJECTION BLOCKED ALARM + val logItem = LogAlarmBlock.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") @@ -840,8 +840,8 @@ class BigLogInquireResponsePacket( status = "BLOCK_ALARM " + dateUtil.timeString(logDateTime) } - LOG_ALARM_SHORTAGE.LOG_KIND -> { // INSULIN SHORTAGE ALARM - val logItem = LOG_ALARM_SHORTAGE.parse(logDataToHexString) + LogAlarmShortAge.LOG_KIND -> { // INSULIN SHORTAGE ALARM + val logItem = LogAlarmShortAge.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") @@ -858,8 +858,8 @@ class BigLogInquireResponsePacket( status = "SHORT_AGE_ALARM " + dateUtil.timeString(logDateTime) } - LOG_RESET_SYS_V3.LOG_KIND -> { - val logItem = LOG_RESET_SYS_V3.parse(logDataToHexString) + LogResetSysV3.LOG_KIND -> { + val logItem = LogResetSysV3.parse(logDataToHexString) aapsLogger.debug(LTag.PUMPCOMM, "$logItem ") val logStartDate = DateUtils.parseDate(logItem.dttm, "yyyy-MM-dd HH:mm:ss") diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigMainInfoInquireResponsePacket.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigMainInfoInquireResponsePacket.kt index 7ee93e9a1f..ce67dc789d 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigMainInfoInquireResponsePacket.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/packet/BigMainInfoInquireResponsePacket.kt @@ -5,7 +5,7 @@ import info.nightscout.interfaces.pump.defs.PumpDescription import info.nightscout.interfaces.pump.defs.PumpType import info.nightscout.pump.diaconn.DiaconnG8Pump import info.nightscout.pump.diaconn.R -import info.nightscout.pump.diaconn.pumplog.PumplogUtil +import info.nightscout.pump.diaconn.pumplog.PumpLogUtil import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP @@ -213,7 +213,7 @@ class BigMainInfoInquireResponsePacket( diaconnG8Pump.pumpProfiles!![diaconnG8Pump.activeProfile][23] = diaconnG8Pump.baseAmount24 //incarnation no 처리 - diaconnG8Pump.isPumpVersionGe2_63 = PumplogUtil.isPumpVersionGe(sp.getString(rh.gs(R.string.pumpversion), ""), 2, 63) + diaconnG8Pump.isPumpVersionGe2_63 = PumpLogUtil.isPumpVersionGe(sp.getString(rh.gs(R.string.pumpversion), ""), 2, 63) aapsLogger.debug(LTag.PUMPCOMM, "result > " + diaconnG8Pump.result) aapsLogger.debug(LTag.PUMPCOMM, "systemRemainInsulin > " + diaconnG8Pump.systemRemainInsulin) diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_BATTERY.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmBattery.kt similarity index 68% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_BATTERY.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmBattery.kt index faf98ff078..75ad61dce4 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_BATTERY.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmBattery.kt @@ -6,7 +6,7 @@ import java.nio.ByteOrder /* * Battery Shortage Alarm Log */ -class LOG_ALARM_BATTERY private constructor( +class LogAlarmBattery private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 1=INFO, 2=WARNING, 3=MAJOR, 4=CRITICAL @@ -15,8 +15,8 @@ class LOG_ALARM_BATTERY private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_ALARM_BATTERY{") @@ -35,17 +35,17 @@ class LOG_ALARM_BATTERY private constructor( companion object { const val LOG_KIND: Byte = 0x28 - fun parse(data: String): LOG_ALARM_BATTERY { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogAlarmBattery { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_ALARM_BATTERY( + return LogAlarmBattery( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_BLOCK.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmBlock.kt similarity index 66% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_BLOCK.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmBlock.kt index 5b794a8843..dcfc0b8397 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_BLOCK.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmBlock.kt @@ -6,19 +6,19 @@ import java.nio.ByteOrder /* * Injection Blocked Alarm Log */ -class LOG_ALARM_BLOCK private constructor( +class LogAlarmBlock private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 1=INFO, 2=WARNING, 3=MAJOR, 4=CRITICAL - val alarmLevel: Byte, // 1=OCCUR - val ack: Byte, + private val alarmLevel: Byte, // 1=OCCUR + private val ack: Byte, val amount: Short, // 1=BASE, 2=Meal, 3=snack , 4=square, 5=dual, 6=tube change, 7=needle change, 8=insulin change val reason: Byte, val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_ALARM_BLOCK{") @@ -39,19 +39,19 @@ class LOG_ALARM_BLOCK private constructor( companion object { const val LOG_KIND: Byte = 0x29 - fun parse(data: String): LOG_ALARM_BLOCK { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogAlarmBlock { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_ALARM_BLOCK( + return LogAlarmBlock( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_SHORTAGE.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmShortAge.kt similarity index 63% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_SHORTAGE.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmShortAge.kt index 827d2a6622..89c6329332 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_ALARM_SHORTAGE.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogAlarmShortAge.kt @@ -6,18 +6,18 @@ import java.nio.ByteOrder /* * Insulin shortage alarm */ -class LOG_ALARM_SHORTAGE private constructor( +class LogAlarmShortAge private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 1=INFO, 2=WARNING, 3=MAJOR, 4=CRITICAL - val alarmLevel: Byte, // 1=OCCUR, 2=STOP - val ack: Byte, // (1~100U) + private val alarmLevel: Byte, // 1=OCCUR, 2=STOP + private val ack: Byte, // (1~100U) val remain: Byte, val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_ALARM_SHORTAGE{") @@ -37,18 +37,18 @@ class LOG_ALARM_SHORTAGE private constructor( companion object { const val LOG_KIND: Byte = 0x2A - fun parse(data: String): LOG_ALARM_SHORTAGE { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogAlarmShortAge { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_ALARM_SHORTAGE( + return LogAlarmShortAge( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_INJECTOR_SUCCESS.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeInjectorSuccess.kt similarity index 67% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_INJECTOR_SUCCESS.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeInjectorSuccess.kt index e0ae6a26c4..26ba1b3150 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_INJECTOR_SUCCESS.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeInjectorSuccess.kt @@ -6,7 +6,7 @@ import java.nio.ByteOrder /* * 주사기 교체 성공 */ -class LOG_CHANGE_INJECTOR_SUCCESS private constructor( +class LogChangeInjectorSuccess private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 @@ -15,8 +15,8 @@ class LOG_CHANGE_INJECTOR_SUCCESS private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_CHANGE_INJECTOR_SUCCESS{") @@ -35,17 +35,17 @@ class LOG_CHANGE_INJECTOR_SUCCESS private constructor( companion object { const val LOG_KIND: Byte = 0x1A - fun parse(data: String): LOG_CHANGE_INJECTOR_SUCCESS { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogChangeInjectorSuccess { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_CHANGE_INJECTOR_SUCCESS( + return LogChangeInjectorSuccess( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_NEEDLE_SUCCESS.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeNeedleSuccess.kt similarity index 66% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_NEEDLE_SUCCESS.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeNeedleSuccess.kt index 045a28e302..f69320fcc9 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_NEEDLE_SUCCESS.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeNeedleSuccess.kt @@ -6,7 +6,8 @@ import java.nio.ByteOrder /* * 바늘 공기빼기 성공 */ -class LOG_CHANGE_NEEDLE_SUCCESS private constructor( +@Suppress("SpellCheckingInspection") +class LogChangeNeedleSuccess private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 @@ -15,8 +16,8 @@ class LOG_CHANGE_NEEDLE_SUCCESS private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_CHANGE_NEEDLE_SUCCESS{") @@ -35,17 +36,17 @@ class LOG_CHANGE_NEEDLE_SUCCESS private constructor( companion object { const val LOG_KIND: Byte = 0x1C - fun parse(data: String): LOG_CHANGE_NEEDLE_SUCCESS { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogChangeNeedleSuccess { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_CHANGE_NEEDLE_SUCCESS( + return LogChangeNeedleSuccess( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_TUBE_SUCCESS.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeTubeSuccess.kt similarity index 66% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_TUBE_SUCCESS.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeTubeSuccess.kt index 84b57d3e87..d3a6025de9 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_CHANGE_TUBE_SUCCESS.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogChangeTubeSuccess.kt @@ -6,7 +6,8 @@ import java.nio.ByteOrder /* * 튜브 공기빼기 성공 */ -class LOG_CHANGE_TUBE_SUCCESS private constructor( +@Suppress("SpellCheckingInspection") +class LogChangeTubeSuccess private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 @@ -15,8 +16,8 @@ class LOG_CHANGE_TUBE_SUCCESS private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_CHANGE_TUBE_SUCCESS{") @@ -35,17 +36,17 @@ class LOG_CHANGE_TUBE_SUCCESS private constructor( companion object { const val LOG_KIND: Byte = 0x18 - fun parse(data: String): LOG_CHANGE_TUBE_SUCCESS { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogChangeTubeSuccess { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_CHANGE_TUBE_SUCCESS( + return LogChangeTubeSuccess( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_DUAL_FAIL.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectDualFail.kt similarity index 71% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_DUAL_FAIL.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectDualFail.kt index 8aa28434d7..c9197f2854 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_DUAL_FAIL.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectDualFail.kt @@ -7,7 +7,8 @@ import java.nio.ByteOrder /* * Dual Injection Fail Log */ -class LOG_INJECT_DUAL_FAIL private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectDualFail private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 @@ -18,8 +19,8 @@ class LOG_INJECT_DUAL_FAIL private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff @@ -44,19 +45,19 @@ class LOG_INJECT_DUAL_FAIL private constructor( companion object { const val LOG_KIND: Byte = 0x11 - fun parse(data: String): LOG_INJECT_DUAL_FAIL { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectDualFail { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECT_DUAL_FAIL( + return LogInjectDualFail( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_DUAL_SUCCESS.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectDualSuccess.kt similarity index 67% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_DUAL_SUCCESS.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectDualSuccess.kt index f5dd9d1638..3e0acd0b80 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_DUAL_SUCCESS.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectDualSuccess.kt @@ -7,18 +7,19 @@ import java.nio.ByteOrder /* * 듀얼주입 성공 */ -class LOG_INJECT_DUAL_SUCCESS private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectDualSuccess private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 - val injectNormAmount: Short, // 47.5=4750 + private val injectNormAmount: Short, // 47.5=4750 val injectSquareAmount: Short, // 1분단위 주입시간(124=124분=2시간4분) private val injectTime: Byte, val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff } @@ -41,18 +42,18 @@ class LOG_INJECT_DUAL_SUCCESS private constructor( companion object { const val LOG_KIND: Byte = 0x10 - fun parse(data: String): LOG_INJECT_DUAL_SUCCESS { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectDualSuccess { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECT_DUAL_SUCCESS( + return LogInjectDualSuccess( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_MEAL_FAIL.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectMealFail.kt similarity index 71% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_MEAL_FAIL.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectMealFail.kt index ab046f0e9f..a01640f6d1 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_MEAL_FAIL.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectMealFail.kt @@ -7,7 +7,8 @@ import java.nio.ByteOrder /* * 식사주입 실패 */ -class LOG_INJECT_MEAL_FAIL private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectMealFail private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 @@ -18,8 +19,8 @@ class LOG_INJECT_MEAL_FAIL private constructor( val reason: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff @@ -44,19 +45,19 @@ class LOG_INJECT_MEAL_FAIL private constructor( companion object { const val LOG_KIND: Byte = 0x09 - fun parse(data: String): LOG_INJECT_MEAL_FAIL { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectMealFail { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECT_MEAL_FAIL( + return LogInjectMealFail( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_MEAL_SUCCESS.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectMealSuccess.kt similarity index 67% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_MEAL_SUCCESS.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectMealSuccess.kt index e1292aae47..23cda27c74 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_MEAL_SUCCESS.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectMealSuccess.kt @@ -7,7 +7,8 @@ import java.nio.ByteOrder /* * 식사주입 성공 */ -class LOG_INJECT_MEAL_SUCCESS private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectMealSuccess private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 @@ -15,12 +16,11 @@ class LOG_INJECT_MEAL_SUCCESS private constructor( val injectAmount: Short, // 1분단위 주입시간(124=124분=2시간4분) private val injectTime: Byte, // 아침=1, 점심=2, 저녁=3 val time: Byte, - batteryRemain: Byte + val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) - val batteryRemain: Byte = batteryRemain + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff } @@ -44,19 +44,19 @@ class LOG_INJECT_MEAL_SUCCESS private constructor( companion object { const val LOG_KIND: Byte = 0x08 - fun parse(data: String): LOG_INJECT_MEAL_SUCCESS { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectMealSuccess { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECT_MEAL_SUCCESS( + return LogInjectMealSuccess( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_NORMAL_FAIL.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectNormalFail.kt similarity index 68% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_NORMAL_FAIL.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectNormalFail.kt index 71b0beb1d4..ca4e156085 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_NORMAL_FAIL.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectNormalFail.kt @@ -7,19 +7,20 @@ import java.nio.ByteOrder /* * 일반주입 실패 */ -class LOG_INJECT_NORMAL_FAIL private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectNormalFail private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 - val setAmount: Short, // 47.5=4750 + private val setAmount: Short, // 47.5=4750 val injectAmount: Short, // 1분단위 주입시간(124=124분=2시간4분) val injectTime: Byte, // 1=주입막힘, 2=배터리잔량부족, 3=약물부족, 4=사용자중지, 5=시스템리셋, 6=기타, 7=긴급정지 val reason: Byte, val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff @@ -44,19 +45,19 @@ class LOG_INJECT_NORMAL_FAIL private constructor( companion object { const val LOG_KIND: Byte = 0x0B - fun parse(data: String): LOG_INJECT_NORMAL_FAIL { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectNormalFail { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECT_NORMAL_FAIL( + return LogInjectNormalFail( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_NORMAL_SUCCESS.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectNormalSuccess.kt similarity index 66% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_NORMAL_SUCCESS.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectNormalSuccess.kt index 4692b7b8a0..6725145414 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_NORMAL_SUCCESS.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectNormalSuccess.kt @@ -7,18 +7,19 @@ import java.nio.ByteOrder /* * 일반주입 성공 */ -class LOG_INJECT_NORMAL_SUCCESS private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectNormalSuccess private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 - val setAmount: Short, // 47.5=4750 + private val setAmount: Short, // 47.5=4750 val injectAmount: Short, // 1분단위 주입시간(124=124분=2시간4분) val injectTime: Byte, val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff } @@ -41,18 +42,18 @@ class LOG_INJECT_NORMAL_SUCCESS private constructor( companion object { const val LOG_KIND: Byte = 0x0A - fun parse(data: String): LOG_INJECT_NORMAL_SUCCESS { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectNormalSuccess { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECT_NORMAL_SUCCESS( + return LogInjectNormalSuccess( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_SQUARE_FAIL.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectSquareFail.kt similarity index 70% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_SQUARE_FAIL.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectSquareFail.kt index c815dfec45..31c910307d 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_SQUARE_FAIL.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectSquareFail.kt @@ -7,7 +7,8 @@ import java.nio.ByteOrder /* * 스퀘어주입 실패 */ -class LOG_INJECT_SQUARE_FAIL private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectSquareFail private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 @@ -17,8 +18,8 @@ class LOG_INJECT_SQUARE_FAIL private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff @@ -42,18 +43,18 @@ class LOG_INJECT_SQUARE_FAIL private constructor( companion object { const val LOG_KIND: Byte = 0x0E - fun parse(data: String): LOG_INJECT_SQUARE_FAIL { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectSquareFail { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECT_SQUARE_FAIL( + return LogInjectSquareFail( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_SQUARE_SUCCESS.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectSquareSuccess.kt similarity index 64% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_SQUARE_SUCCESS.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectSquareSuccess.kt index e76fe57c06..0d1a2181e2 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECT_SQUARE_SUCCESS.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectSquareSuccess.kt @@ -7,17 +7,18 @@ import java.nio.ByteOrder /* * 스퀘어주입 성공 */ -class LOG_INJECT_SQUARE_SUCCESS private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectSquareSuccess private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 - val injectAmount: Short, // 1분단위 주입시간(124=124분=2시간4분) + private val injectAmount: Short, // 1분단위 주입시간(124=124분=2시간4분) private val injectTime: Byte, val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff } @@ -39,17 +40,17 @@ class LOG_INJECT_SQUARE_SUCCESS private constructor( companion object { const val LOG_KIND: Byte = 0x0D - fun parse(data: String): LOG_INJECT_SQUARE_SUCCESS { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectSquareSuccess { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECT_SQUARE_SUCCESS( + return LogInjectSquareSuccess( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1DAY.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1Day.kt similarity index 68% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1DAY.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1Day.kt index 4d536a6194..2dc31d9e47 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1DAY.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1Day.kt @@ -6,7 +6,8 @@ import java.nio.ByteOrder /* * 당일 주입 총량 (식사, 추가) */ -class LOG_INJECTION_1DAY private constructor( +@Suppress("SpellCheckingInspection") +class LogInjection1Day private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 당일 식사주입 총량 47.5=4750 @@ -15,8 +16,8 @@ class LOG_INJECTION_1DAY private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_INJECTION_1DAY{") @@ -35,17 +36,17 @@ class LOG_INJECTION_1DAY private constructor( companion object { const val LOG_KIND: Byte = 0x2F - fun parse(data: String): LOG_INJECTION_1DAY { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjection1Day { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECTION_1DAY( + return LogInjection1Day( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1DAY_BASAL.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1DayBasal.kt similarity index 66% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1DAY_BASAL.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1DayBasal.kt index 9c8a47fc37..2c90363850 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1DAY_BASAL.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1DayBasal.kt @@ -6,7 +6,8 @@ import java.nio.ByteOrder /* * 당일 주입 총량 (기저) */ -class LOG_INJECTION_1DAY_BASAL private constructor( +@Suppress("SpellCheckingInspection") +class LogInjection1DayBasal private constructor( val data: String, val dttm: String, typeAndKind: Byte, @@ -15,8 +16,8 @@ class LOG_INJECTION_1DAY_BASAL private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_INJECTION_1DAY_BASAL{") @@ -33,16 +34,16 @@ class LOG_INJECTION_1DAY_BASAL private constructor( companion object { const val LOG_KIND: Byte = 0x2E - fun parse(data: String): LOG_INJECTION_1DAY_BASAL { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjection1DayBasal { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECTION_1DAY_BASAL( + return LogInjection1DayBasal( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1HOUR_BASAL.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1HourBasal.kt similarity index 74% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1HOUR_BASAL.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1HourBasal.kt index ea0663d07b..c09820b992 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_1HOUR_BASAL.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjection1HourBasal.kt @@ -6,7 +6,8 @@ import java.nio.ByteOrder /* * 1시간 단위 기저 주입량 */ -class LOG_INJECTION_1HOUR_BASAL private constructor( +@Suppress("SpellCheckingInspection") +class LogInjection1HourBasal private constructor( val data: String, val dttm: String, typeAndKind: Byte, @@ -17,8 +18,8 @@ class LOG_INJECTION_1HOUR_BASAL private constructor( private val remainTotalAmount: Short ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) val beforeAmount // 해당시간의 임시기저 계산 전 기저주입량: 기저주입막힘 발생 시 기저주입 막힘량 제외, 기저정지로 인해 주입되지 않은 량 제외, 리셋으로 인해 주입되지 않은 량 제외(47.5=4750) : Short = tbBeforeAmount val afterAmount // 해당시간의 임시기저 계산 후 기저주입량: 기저주입막힘 발생 시 기저주입 막힘량 제외, 기저정지로 인해 주입되지 않은 량 제외, 리셋으로 인해 주입되지 않은 량 제외(47.5=4750) @@ -42,18 +43,18 @@ class LOG_INJECTION_1HOUR_BASAL private constructor( companion object { const val LOG_KIND: Byte = 0x2C - fun parse(data: String): LOG_INJECTION_1HOUR_BASAL { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjection1HourBasal { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECTION_1HOUR_BASAL( + return LogInjection1HourBasal( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_DUAL_NORMAL.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectionDualNormal.kt similarity index 67% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_DUAL_NORMAL.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectionDualNormal.kt index ce46ea8bfd..95f9fb19b5 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_INJECTION_DUAL_NORMAL.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogInjectionDualNormal.kt @@ -7,18 +7,19 @@ import java.nio.ByteOrder /* * 듀얼(일반) 주입량: 듀얼(일반) 주입 완료 시 기록하는 방식 */ -class LOG_INJECTION_DUAL_NORMAL private constructor( +@Suppress("SpellCheckingInspection") +class LogInjectionDualNormal private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 설정량 47.5=4750 - val setAmount: Short, // 주입량 47.5=4750 + private val setAmount: Short, // 주입량 47.5=4750 val injectAmount: Short, // 1분 단위 주입 시간 Ex) 124 = 124분 = 2시간 4분 private val injectTime: Byte, val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff } @@ -41,18 +42,18 @@ class LOG_INJECTION_DUAL_NORMAL private constructor( companion object { const val LOG_KIND: Byte = 0x35 - fun parse(data: String): LOG_INJECTION_DUAL_NORMAL { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogInjectionDualNormal { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_INJECTION_DUAL_NORMAL( + return LogInjectionDualNormal( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_RESET_SYS_V3.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogResetSysV3.kt similarity index 62% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_RESET_SYS_V3.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogResetSysV3.kt index 491fdf04bb..a47ba43e0d 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_RESET_SYS_V3.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogResetSysV3.kt @@ -6,18 +6,19 @@ import java.nio.ByteOrder /* * System Reset Log */ -class LOG_RESET_SYS_V3 private constructor( +@Suppress("SpellCheckingInspection") +class LogResetSysV3 private constructor( val data: String, val dttm: String, typeAndKind: Byte, val batteryRemain: Byte, val reason: Byte, // 사유(1:공장초기화 후 리셋, 2:긴급정지 해제 후 리셋, 3:사용자 배터리 교체 후 리셋, 4:캘리브레이션 후 리셋, 9:예상치 못한 시스템 리셋) - val rcon1: Short, // PIC 데이터 시트 내 정의된 2바이트 값 - val rcon2: Short // PIC 데이터 시트 내 정의된 2바이트 값 + private val rcon1: Short, // PIC 데이터 시트 내 정의된 2바이트 값 + private val rcon2: Short // PIC 데이터 시트 내 정의된 2바이트 값 ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_RESET_SYS_V3{") @@ -37,18 +38,18 @@ class LOG_RESET_SYS_V3 private constructor( companion object { const val LOG_KIND: Byte = 0x01 - fun parse(data: String): LOG_RESET_SYS_V3 { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogResetSysV3 { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_RESET_SYS_V3( + return LogResetSysV3( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SET_DUAL_INJECTION.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSetDualInjection.kt similarity index 66% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SET_DUAL_INJECTION.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSetDualInjection.kt index c90acc008b..daedf5c04c 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SET_DUAL_INJECTION.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSetDualInjection.kt @@ -7,18 +7,19 @@ import java.nio.ByteOrder /* * 듀얼주입 설정(시작) */ -class LOG_SET_DUAL_INJECTION private constructor( +@Suppress("SpellCheckingInspection") +class LogSetDualInjection private constructor( val data: String, val dttm: String, typeAndKind: Byte, - val setNormAmount: Short, // 47.5=4750 + private val setNormAmount: Short, // 47.5=4750 val setSquareAmount: Short, // 47.5=4750 private val injectTime: Byte, // 1~30( 1: 10min ) val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff } @@ -41,18 +42,18 @@ class LOG_SET_DUAL_INJECTION private constructor( companion object { const val LOG_KIND: Byte = 0x0F - fun parse(data: String): LOG_SET_DUAL_INJECTION { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogSetDualInjection { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_SET_DUAL_INJECTION( + return LogSetDualInjection( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SET_SQUARE_INJECTION.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSetSquareInjection.kt similarity index 68% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SET_SQUARE_INJECTION.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSetSquareInjection.kt index 4c315da683..6ad23e0439 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SET_SQUARE_INJECTION.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSetSquareInjection.kt @@ -7,7 +7,8 @@ import java.nio.ByteOrder /* * 스퀘어주입 설정(시작) */ -class LOG_SET_SQUARE_INJECTION private constructor( +@Suppress("SpellCheckingInspection") +class LogSetSquareInjection private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 47.5=4750 @@ -16,8 +17,8 @@ class LOG_SET_SQUARE_INJECTION private constructor( val batteryRemain: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getInjectTime(): Int { return injectTime and 0xff } @@ -39,17 +40,17 @@ class LOG_SET_SQUARE_INJECTION private constructor( companion object { const val LOG_KIND: Byte = 0x0C - fun parse(data: String): LOG_SET_SQUARE_INJECTION { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogSetSquareInjection { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_SET_SQUARE_INJECTION( + return LogSetSquareInjection( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SUSPEND_RELEASE_V2.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSuspendReleaseV2.kt similarity index 73% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SUSPEND_RELEASE_V2.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSuspendReleaseV2.kt index b10961e883..e53445912c 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SUSPEND_RELEASE_V2.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSuspendReleaseV2.kt @@ -6,7 +6,8 @@ import java.nio.ByteOrder /* * 일시정지 중지 (기저정지 해제) */ -class LOG_SUSPEND_RELEASE_V2 private constructor( +@Suppress("SpellCheckingInspection") +class LogSuspendReleaseV2 private constructor( val data: String, val dttm: String, typeAndKind: Byte, @@ -17,7 +18,7 @@ class LOG_SUSPEND_RELEASE_V2 private constructor( val type: Byte val kind: Byte val batteryRemain: Byte - val patternType // 1=기본, 2=생활1, 3=생활2, 4=생활3, 5=닥터1, 6=닥터2 + private val patternType // 1=기본, 2=생활1, 3=생활2, 4=생활3, 5=닥터1, 6=닥터2 : Byte override fun toString(): String { @@ -48,23 +49,23 @@ class LOG_SUSPEND_RELEASE_V2 private constructor( companion object { const val LOG_KIND: Byte = 0x04 - fun parse(data: String): LOG_SUSPEND_RELEASE_V2 { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogSuspendReleaseV2 { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_SUSPEND_RELEASE_V2( + return LogSuspendReleaseV2( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } init { - type = PumplogUtil.getType(typeAndKind) - kind = PumplogUtil.getKind(typeAndKind) + type = PumpLogUtil.getType(typeAndKind) + kind = PumpLogUtil.getKind(typeAndKind) this.batteryRemain = batteryRemain this.patternType = patternType } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SUSPEND_V2.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSuspendV2.kt similarity index 73% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SUSPEND_V2.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSuspendV2.kt index 7a1dc061c8..0daf0acaea 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_SUSPEND_V2.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogSuspendV2.kt @@ -6,16 +6,17 @@ import java.nio.ByteOrder /* * 일시정지 시작 (기저정지) */ -class LOG_SUSPEND_V2 private constructor( +@Suppress("SpellCheckingInspection") +class LogSuspendV2 private constructor( val data: String, val dttm: String, typeAndKind: Byte, val batteryRemain: Byte, // 1=기본, 2=생활1, 3=생활2, 4=생활3, 5=닥터1, 6=닥터2 - val patternType: Byte + private val patternType: Byte ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) override fun toString(): String { val sb = StringBuilder("LOG_SUSPEND_V2{") @@ -46,16 +47,16 @@ class LOG_SUSPEND_V2 private constructor( companion object { const val LOG_KIND: Byte = 0x03 - fun parse(data: String): LOG_SUSPEND_V2 { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogSuspendV2 { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_SUSPEND_V2( + return LogSuspendV2( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_TB_START_V3.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogTbStartV3.kt similarity index 72% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_TB_START_V3.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogTbStartV3.kt index 8f54222df8..09d3e7897f 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_TB_START_V3.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogTbStartV3.kt @@ -8,7 +8,8 @@ import java.nio.ByteOrder /* * 임시기저 설정(시작) */ -class LOG_TB_START_V3 private constructor( +@Suppress("SpellCheckingInspection") +class LogTbStartV3 private constructor( val data: String, val dttm: String, typeAndKind: Byte, // 임시기저 시간(30분 ~ 24시간, 2 ~ 96, 1당 15분 단위 증감) @@ -17,8 +18,8 @@ class LOG_TB_START_V3 private constructor( private val tbDttm: String // 앱에서 생성 전달한 임시기저 시작(요청) 시간 ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getTbInjectRateRatio(): Int { return tbInjectRateRatio and 0xffff @@ -33,7 +34,7 @@ class LOG_TB_START_V3 private constructor( sb.append(", kind=").append(kind.toInt()) sb.append(", tbTime=").append(tbTime.toInt()) sb.append(", tbInjectRateRatio=").append(tbInjectRateRatio and 0xffff) - if (!StringUtils.equals(tbDttm, PumplogUtil.getDttm("ffffffff"))) { + if (!StringUtils.equals(tbDttm, PumpLogUtil.getDttm("ffffffff"))) { sb.append(", tbDttm=").append(tbDttm) } sb.append('}') @@ -43,17 +44,17 @@ class LOG_TB_START_V3 private constructor( companion object { const val LOG_KIND: Byte = 0x12 - fun parse(data: String): LOG_TB_START_V3 { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogTbStartV3 { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_TB_START_V3( + return LogTbStartV3( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getDttm(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getDttm(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_TB_STOP_V3.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogTbStopV3.kt similarity index 72% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_TB_STOP_V3.kt rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogTbStopV3.kt index 51080f95bb..1b4bff1be5 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LOG_TB_STOP_V3.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/LogTbStopV3.kt @@ -8,7 +8,8 @@ import java.nio.ByteOrder /* * 임시기저 중지(완료) */ -class LOG_TB_STOP_V3 private constructor( +@Suppress("SpellCheckingInspection") +class LogTbStopV3 private constructor( val data: String, val dttm: String, typeAndKind: Byte, @@ -20,8 +21,8 @@ class LOG_TB_STOP_V3 private constructor( private val tbDttm: String ) { - val type: Byte = PumplogUtil.getType(typeAndKind) - val kind: Byte = PumplogUtil.getKind(typeAndKind) + val type: Byte = PumpLogUtil.getType(typeAndKind) + val kind: Byte = PumpLogUtil.getKind(typeAndKind) fun getTbInjectRateRatio(): Int { return tbInjectRateRatio and 0xffff @@ -36,7 +37,7 @@ class LOG_TB_STOP_V3 private constructor( sb.append(", kind=").append(kind.toInt()) sb.append(", tbInjectRateRatio=").append(tbInjectRateRatio and 0xffff) sb.append(", reason=").append(reason.toInt()) - if (!StringUtils.equals(tbDttm, PumplogUtil.getDttm("ffffffff"))) { + if (!StringUtils.equals(tbDttm, PumpLogUtil.getDttm("ffffffff"))) { sb.append(", tbDttm=").append(tbDttm) } sb.append('}') @@ -46,17 +47,17 @@ class LOG_TB_STOP_V3 private constructor( companion object { const val LOG_KIND: Byte = 0x13 - fun parse(data: String): LOG_TB_STOP_V3 { - val bytes = PumplogUtil.hexStringToByteArray(data) + fun parse(data: String): LogTbStopV3 { + val bytes = PumpLogUtil.hexStringToByteArray(data) val buffer = ByteBuffer.wrap(bytes) buffer.order(ByteOrder.LITTLE_ENDIAN) - return LOG_TB_STOP_V3( + return LogTbStopV3( data, - PumplogUtil.getDttm(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getShort(buffer), - PumplogUtil.getByte(buffer), - PumplogUtil.getDttm(buffer) + PumpLogUtil.getDttm(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getShort(buffer), + PumpLogUtil.getByte(buffer), + PumpLogUtil.getDttm(buffer) ) } } diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/PumplogUtil.java b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/PumpLogUtil.java similarity index 96% rename from pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/PumplogUtil.java rename to pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/PumpLogUtil.java index c458aba743..27ea305112 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/PumplogUtil.java +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/pumplog/PumpLogUtil.java @@ -13,7 +13,8 @@ import java.util.TimeZone; /* * 디아콘 G8 펌프 로그 유틸리티 클래스 */ -public class PumplogUtil { +@SuppressWarnings({"CommentedOutCode", "SpellCheckingInspection"}) +public class PumpLogUtil { /* * 바이트버퍼에서 4바이트 날짜를 구한다. * @param buffer 바이트버퍼 @@ -39,7 +40,7 @@ public class PumplogUtil { */ @SuppressLint("SimpleDateFormat") public static String getDttm(String data) { - byte[] bytes = PumplogUtil.hexStringToByteArray(data); + byte[] bytes = PumpLogUtil.hexStringToByteArray(data); byte b0 = bytes[0]; byte b1 = bytes[1]; byte b2 = bytes[2]; @@ -74,9 +75,11 @@ public class PumplogUtil { * @param buffer 바이트버퍼 * @return int */ + /* public static int getInt(ByteBuffer buffer) { return buffer.getInt(); } + */ /* * 로그데이터에서 로그 타입 바이트를 구한다. @@ -136,12 +139,14 @@ public class PumplogUtil { * @param data 1970.1.1이후 경과한 초 * @return 날짜(GMT기준) */ + /* public static Date pumpTimeToGMTDate(Integer data) { long epochTime = new Date(0).getTime(); // 1970-01-01 long pumpTime = data.longValue() * 1000; // 초를 밀리초 단위로 변환 int timeZoneOffset = TimeZone.getDefault().getRawOffset(); // GMT와 로컬 타임존 사이의 차이 return new Date(epochTime + pumpTime - timeZoneOffset); } + */ /* * 펌프 버전이 해당 버전보다 크거나 같은지 여부 확인(새로운 기능이 추가된 버전을 체크하기 위함) diff --git a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/service/DiaconnG8Service.kt b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/service/DiaconnG8Service.kt index ca627bb3fd..d412ab138f 100644 --- a/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/service/DiaconnG8Service.kt +++ b/pump/diaconn/src/main/java/info/nightscout/pump/diaconn/service/DiaconnG8Service.kt @@ -57,7 +57,7 @@ import info.nightscout.pump.diaconn.packet.TempBasalInquirePacket import info.nightscout.pump.diaconn.packet.TempBasalSettingPacket import info.nightscout.pump.diaconn.packet.TimeInquirePacket import info.nightscout.pump.diaconn.packet.TimeSettingPacket -import info.nightscout.pump.diaconn.pumplog.PumplogUtil +import info.nightscout.pump.diaconn.pumplog.PumpLogUtil import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.EventAppExit @@ -168,7 +168,7 @@ class DiaconnG8Service : DaggerService() { val pumpFirmwareVersion = sp.getString(rh.gs(R.string.pumpversion), "") - if (pumpFirmwareVersion.isNotEmpty() && PumplogUtil.isPumpVersionGe(pumpFirmwareVersion, 3, 0)) { + if (pumpFirmwareVersion.isNotEmpty() && PumpLogUtil.isPumpVersionGe(pumpFirmwareVersion, 3, 0)) { sendMessage(BigAPSMainInfoInquirePacket(injector)) // APS Pump Main Info } else { sendMessage(BasalLimitInquirePacket(injector)) // basal Limit diff --git a/pump/eopatch/src/main/res/values-ko/strings.xml b/pump/eopatch/src/main/res/values-ko/strings.xml index b6a4b40c9d..a22c51e5b8 100644 --- a/pump/eopatch/src/main/res/values-ko/strings.xml +++ b/pump/eopatch/src/main/res/values-ko/strings.xml @@ -9,7 +9,6 @@ 패치 버저 알림 h:mm a - 볼루스 %1$.2f U의 주입이 완료되었습니다. BLE 상태 일련 번호 로트 번호 diff --git a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt index 5aa76055f7..defdbf9c45 100644 --- a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt +++ b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.kt @@ -216,10 +216,6 @@ class MedtronicPumpPlugin @Inject constructor( } } - override fun hasService(): Boolean { - return true - } - override fun onStartScheduledPumpActions() { // check status every minute (if any status needs refresh we send readStatus command) diff --git a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/history/pump/PumpHistoryResult.kt b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/history/pump/PumpHistoryResult.kt index d19e53b43d..b53cb342e4 100644 --- a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/history/pump/PumpHistoryResult.kt +++ b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/comm/history/pump/PumpHistoryResult.kt @@ -3,7 +3,6 @@ package info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump import info.nightscout.core.utils.DateTimeUtil import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag -import java.util.Collections /** * History page contains data, sorted from newest to oldest (0=newest..n=oldest) @@ -18,19 +17,19 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis private val searchEntry: PumpHistoryEntry? = null private var searchDate: Long? = null private var searchType = SearchType.None - var unprocessedEntries: List = ArrayList() + var unprocessedEntries: MutableList = ArrayList() var validEntries: MutableList = ArrayList() - fun addHistoryEntries(entries: List /*, page: Int*/) { + fun addHistoryEntries(entries: MutableList /*, page: Int*/) { unprocessedEntries = entries //aapsLogger.debug(LTag.PUMPCOMM,"PumpHistoryResult. Unprocessed entries: {}", MedtronicUtil.getGsonInstance().toJson(entries)); processEntries() } // TODO Bug #145 need to check if we had timeChange that went -1, that situation needs to be evaluated separately - fun processEntries() { + private fun processEntries() { var olderEntries = 0 - Collections.reverse(unprocessedEntries) + unprocessedEntries.reverse() when (searchType) { SearchType.None -> //aapsLogger.debug(LTag.PUMPCOMM,"PE. None search"); validEntries.addAll(unprocessedEntries) @@ -42,7 +41,7 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis aapsLogger.debug(LTag.PUMPCOMM, "PE. PumpHistoryResult. Search entry date: " + searchEntry!!.atechDateTime) //val date = searchEntry.atechDateTime for (unprocessedEntry in unprocessedEntries) { - if (unprocessedEntry.equals(searchEntry)) { + if (unprocessedEntry == searchEntry) { //aapsLogger.debug(LTag.PUMPCOMM,"PE. Item found {}.", unprocessedEntry); isSearchFinished = true break @@ -56,7 +55,7 @@ class PumpHistoryResult(private val aapsLogger: AAPSLogger, searchEntry: PumpHis } SearchType.Date -> { - aapsLogger.debug(LTag.PUMPCOMM, "PE. Date search: Search date: " + searchDate) + aapsLogger.debug(LTag.PUMPCOMM, "PE. Date search: Search date: $searchDate") for (unprocessedEntry in unprocessedEntries) { if (unprocessedEntry.atechDateTime == 0L) { aapsLogger.debug(LTag.PUMPCOMM, "PE. PumpHistoryResult. Search entry date: Entry with no date: $unprocessedEntry") diff --git a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/util/MedtronicUtil.kt b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/util/MedtronicUtil.kt index 34fe0eafa5..2e53e74990 100644 --- a/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/util/MedtronicUtil.kt +++ b/pump/medtronic/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/util/MedtronicUtil.kt @@ -1,5 +1,6 @@ package info.nightscout.androidaps.plugins.pump.medtronic.util +import com.google.gson.Gson import com.google.gson.GsonBuilder import info.nightscout.androidaps.plugins.pump.common.events.EventRileyLinkDeviceStatusChange import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil @@ -18,13 +19,13 @@ import info.nightscout.rx.events.EventDismissNotification import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.LTag import info.nightscout.shared.interfaces.ResourceHelper -import org.joda.time.LocalTime import java.nio.ByteBuffer import java.nio.ByteOrder import java.util.Locale import javax.inject.Inject import javax.inject.Singleton import kotlin.experimental.or +import kotlin.math.abs /** * Created by andy on 5/9/18. @@ -38,39 +39,41 @@ class MedtronicUtil @Inject constructor( private val uiInteraction: UiInteraction ) { + @Suppress("PrivatePropertyName") private val ENVELOPE_SIZE = 4 // 0xA7 S1 S2 S3 CMD PARAM_COUNT [PARAMS] //private MedtronicDeviceType medtronicPumpModel; private var currentCommand: MedtronicCommandType? = null var settings: Map? = null + @Suppress("PrivatePropertyName") private val BIG_FRAME_LENGTH = 65 - private val doneBit = 1 shl 7 + //private val doneBit = 1 shl 7 var pumpTime: ClockDTO? = null - var gsonInstance = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() + var gsonInstance: Gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() - fun getTimeFrom30MinInterval(interval: Int): LocalTime { - return if (interval % 2 == 0) { - LocalTime(interval / 2, 0) - } else { - LocalTime((interval - 1) / 2, 30) - } - } + // fun getTimeFrom30MinInterval(interval: Int): LocalTime { + // return if (interval % 2 == 0) { + // LocalTime(interval / 2, 0) + // } else { + // LocalTime((interval - 1) / 2, 30) + // } + // } - fun decodeBasalInsulin(i: Int, j: Int): Double { - return decodeBasalInsulin(makeUnsignedShort(i, j)) - } + // fun decodeBasalInsulin(i: Int, j: Int): Double { + // return decodeBasalInsulin(makeUnsignedShort(i, j)) + // } - fun decodeBasalInsulin(i: Int): Double { - return i.toDouble() / 40.0 - } + // fun decodeBasalInsulin(i: Int): Double { + // return i.toDouble() / 40.0 + // } - fun getBasalStrokes(amount: Double): ByteArray { - return getBasalStrokes(amount, false) - } + // fun getBasalStrokes(amount: Double): ByteArray { + // return getBasalStrokes(amount, false) + // } - fun getBasalStrokesInt(amount: Double): Int { - return getStrokesInt(amount, 40) - } + // fun getBasalStrokesInt(amount: Double): Int { + // return getStrokesInt(amount, 40) + // } fun getBolusStrokes(amount: Double): ByteArray { val strokesPerUnit = medtronicPumpStatus.medtronicDeviceType.bolusStrokes @@ -89,17 +92,17 @@ class MedtronicUtil @Inject constructor( return ByteUtil.fromHexString(String.format("%02x%0" + 2 * length + "x", length, strokes)) } - fun createCommandBody(input: ByteArray): ByteArray { - return ByteUtil.concat(input.size.toByte(), input) - } + // fun createCommandBody(input: ByteArray): ByteArray { + // return ByteUtil.concat(input.size.toByte(), input) + // } - fun sendNotification(notificationType: MedtronicNotificationType, rh: ResourceHelper) { - uiInteraction.addNotification( - notificationType.notificationType, - rh.gs(notificationType.resourceId), - notificationType.notificationUrgency - ) - } + // fun sendNotification(notificationType: MedtronicNotificationType, rh: ResourceHelper) { + // uiInteraction.addNotification( + // notificationType.notificationType, + // rh.gs(notificationType.resourceId), + // notificationType.notificationUrgency + // ) + // } fun sendNotification(notificationType: MedtronicNotificationType, rh: ResourceHelper, vararg parameters: Any?) { uiInteraction.addNotification( @@ -117,7 +120,7 @@ class MedtronicUtil @Inject constructor( return buildCommandPayload(rileyLinkServiceData, commandType.commandCode, parameters) } - fun buildCommandPayload(rileyLinkServiceData: RileyLinkServiceData, commandType: Byte, parameters: ByteArray?): ByteArray { + private fun buildCommandPayload(rileyLinkServiceData: RileyLinkServiceData, commandType: Byte, parameters: ByteArray?): ByteArray { // A7 31 65 51 C0 00 52 val commandLength = (if (parameters == null) 2 else 2 + parameters.size).toByte() val sendPayloadBuffer = ByteBuffer.allocate(ENVELOPE_SIZE + commandLength) // + CRC_SIZE @@ -283,12 +286,13 @@ class MedtronicUtil @Inject constructor( return getStrokes(amount, 40, returnFixedSize) } - fun getStrokes(amount: Double, strokesPerUnit: Int, returnFixedSize: Boolean): ByteArray { + @Suppress("SameParameterValue") + private fun getStrokes(amount: Double, strokesPerUnit: Int, returnFixedSize: Boolean): ByteArray { val strokes = getStrokesInt(amount, strokesPerUnit) return getByteArrayFromUnsignedShort(strokes, returnFixedSize) } - fun getStrokesInt(amount: Double, strokesPerUnit: Int): Int { + private fun getStrokesInt(amount: Double, strokesPerUnit: Int): Int { //var length = 1 var scrollRate = 1 if (strokesPerUnit >= 40) { @@ -304,7 +308,7 @@ class MedtronicUtil @Inject constructor( fun isSame(d1: Double, d2: Double): Boolean { val diff = d1 - d2 - return Math.abs(diff) <= 0.000001 + return abs(diff) <= 0.000001 } } diff --git a/pump/medtronic/src/main/res/values-af-rZA/strings.xml b/pump/medtronic/src/main/res/values-af-rZA/strings.xml index 88bff175b8..01d2cbc61d 100644 --- a/pump/medtronic/src/main/res/values-af-rZA/strings.xml +++ b/pump/medtronic/src/main/res/values-af-rZA/strings.xml @@ -35,7 +35,7 @@ Basale profiel is verkeerd op pomp (moet STD wees). Verkeerde TBR op pomp (Moet Absoluut wees). Verkeerde Maks Bolus gestel op Pomp(moet %1$.2f wees). - Verkeerde Maks Basale op Pomp (moet %1$.2f %1$.2f wees),. + Verkeerde Maks Basale op Pomp (moet %1$.2f wees). Operasie nie moontlik.\n\n Jy moet jou Medtronic pomp opstel voordat jy die operasie kan gebruik. Oor 24h Tyd was versoek. diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Milenage.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Milenage.kt index c06c5a3410..15e6477d15 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Milenage.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/session/Milenage.kt @@ -1,5 +1,6 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.session +import android.annotation.SuppressLint import info.nightscout.core.utils.toHex import info.nightscout.interfaces.Config import info.nightscout.rx.logging.AAPSLogger @@ -10,8 +11,8 @@ import javax.crypto.Cipher import javax.crypto.spec.SecretKeySpec class Milenage( - private val aapsLogger: AAPSLogger, - private val config: Config, + aapsLogger: AAPSLogger, + config: Config, private val k: ByteArray, val sqn: ByteArray, randParam: ByteArray? = null, @@ -30,6 +31,7 @@ class Milenage( } private val secretKeySpec = SecretKeySpec(k, "AES") + @SuppressLint("GetInstance") private val cipher: Cipher = Cipher.getInstance("AES/ECB/NoPadding") init { @@ -123,9 +125,10 @@ class Milenage( } } + @Suppress("SpellCheckingInspection") companion object { - val RESYNC_AMF = Hex.decode("0000") + val RESYNC_AMF: ByteArray = Hex.decode("0000") private val MILENAGE_OP = Hex.decode("cdc202d5123e20f62b6d676ac72cb318") private val MILENAGE_AMF = Hex.decode("b9b9") const val KEY_SIZE = 16 diff --git a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt index b28bbc8036..9eef681ae6 100644 --- a/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt +++ b/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/pod/state/OmnipodDashPodStateManagerImpl.kt @@ -2,7 +2,6 @@ package info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.state import android.os.SystemClock import com.google.gson.Gson -import info.nightscout.interfaces.pump.DetailedBolusInfo import info.nightscout.androidaps.plugins.pump.omnipod.dash.EventOmnipodDashPumpValuesChanged import info.nightscout.androidaps.plugins.pump.omnipod.dash.R import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.Id @@ -20,6 +19,7 @@ import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response. import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response.DefaultStatusResponse import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response.SetUniqueIdResponse import info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.pod.response.VersionResponse +import info.nightscout.interfaces.pump.DetailedBolusInfo import info.nightscout.interfaces.utils.Round import info.nightscout.rx.bus.RxBus import info.nightscout.rx.logging.AAPSLogger @@ -437,7 +437,7 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( } @Synchronized - override fun updateActiveCommand() = Maybe.create { source -> + override fun updateActiveCommand(): Maybe = Maybe.create { source -> val activeCommand = podState.activeCommand if (activeCommand == null) { logger.error(LTag.PUMPCOMM, "No active command to update") @@ -515,6 +515,7 @@ class OmnipodDashPodStateManagerImpl @Inject constructor( "lastResponse=$lastStatusResponseReceived " + "$sequenceNumberOfLastProgrammingCommand $historyId" ) + @Suppress("KotlinConstantConditions") when { createdRealtime <= podState.lastStatusResponseReceived && sequence == podState.sequenceNumberOfLastProgrammingCommand -> diff --git a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/extensions/PumpStateExtension.kt b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/extensions/PumpStateExtension.kt index a12532c9de..001440a4f4 100644 --- a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/extensions/PumpStateExtension.kt +++ b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/extensions/PumpStateExtension.kt @@ -1,4 +1,4 @@ -package info.nightscout.core.pump +package info.nightscout.androidaps.plugins.pump.omnipod.eros.extensions import info.nightscout.interfaces.pump.PumpSync import kotlin.math.ceil diff --git a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java index 8c1584c2c9..8af0a35161 100644 --- a/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java +++ b/pump/omnipod-eros/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/eros/manager/AapsOmnipodErosManager.java @@ -56,12 +56,12 @@ import info.nightscout.androidaps.plugins.pump.omnipod.eros.driver.manager.ErosP import info.nightscout.androidaps.plugins.pump.omnipod.eros.driver.manager.OmnipodManager; import info.nightscout.androidaps.plugins.pump.omnipod.eros.event.EventOmnipodErosPumpValuesChanged; import info.nightscout.androidaps.plugins.pump.omnipod.eros.extensions.DetailedBolusInfoExtensionKt; +import info.nightscout.androidaps.plugins.pump.omnipod.eros.extensions.PumpStateExtensionKt; import info.nightscout.androidaps.plugins.pump.omnipod.eros.history.ErosHistory; import info.nightscout.androidaps.plugins.pump.omnipod.eros.history.database.ErosHistoryRecordEntity; import info.nightscout.androidaps.plugins.pump.omnipod.eros.rileylink.manager.OmnipodRileyLinkCommunicationManager; import info.nightscout.androidaps.plugins.pump.omnipod.eros.util.AapsOmnipodUtil; import info.nightscout.androidaps.plugins.pump.omnipod.eros.util.OmnipodAlertUtil; -import info.nightscout.core.pump.PumpStateExtensionKt; import info.nightscout.interfaces.notifications.Notification; import info.nightscout.interfaces.profile.Profile; import info.nightscout.interfaces.pump.DetailedBolusInfo; diff --git a/pump/pump-common/src/main/java/info/nightscout/pump/common/PumpPluginAbstract.kt b/pump/pump-common/src/main/java/info/nightscout/pump/common/PumpPluginAbstract.kt index 22a21e56df..25b3957678 100644 --- a/pump/pump-common/src/main/java/info/nightscout/pump/common/PumpPluginAbstract.kt +++ b/pump/pump-common/src/main/java/info/nightscout/pump/common/PumpPluginAbstract.kt @@ -4,6 +4,7 @@ import android.content.Context import android.content.Intent import android.content.ServiceConnection import android.text.format.DateFormat +import com.google.gson.Gson import com.google.gson.GsonBuilder import dagger.android.HasAndroidInjector import info.nightscout.core.utils.fabric.FabricPrivacy @@ -26,6 +27,7 @@ import info.nightscout.interfaces.utils.DecimalFormatter.to2Decimal import info.nightscout.pump.common.data.PumpStatus import info.nightscout.pump.common.defs.PumpDriverState import info.nightscout.pump.common.sync.PumpDbEntryCarbs +import info.nightscout.pump.common.sync.PumpSyncEntriesCreator import info.nightscout.pump.common.sync.PumpSyncStorage import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.bus.RxBus @@ -61,7 +63,7 @@ abstract class PumpPluginAbstract protected constructor( var aapsSchedulers: AapsSchedulers, var pumpSync: PumpSync, var pumpSyncStorage: PumpSyncStorage -) : PumpPluginBase(pluginDescription, injector, aapsLogger, rh, commandQueue), Pump, Constraints, info.nightscout.pump.common.sync.PumpSyncEntriesCreator { +) : PumpPluginBase(pluginDescription, injector, aapsLogger, rh, commandQueue), Pump, Constraints, PumpSyncEntriesCreator { protected val disposable = CompositeDisposable() @@ -80,24 +82,21 @@ abstract class PumpPluginAbstract protected constructor( pumpDescription.fillFor(value) } - protected var gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() + protected var gson: Gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() abstract fun initPumpStatusData() - open fun hasService(): Boolean { - return true - } - override fun onStart() { super.onStart() initPumpStatusData() - if (hasService()) { + serviceConnection?.let { serviceConnection -> val intent = Intent(context, serviceClass) - context.bindService(intent, serviceConnection!!, Context.BIND_AUTO_CREATE) - disposable.add(rxBus - .toObservable(EventAppExit::class.java) - .observeOn(aapsSchedulers.io) - .subscribe({ _ -> context.unbindService(serviceConnection!!) }) { throwable: Throwable? -> fabricPrivacy.logException(throwable!!) } + context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE) + disposable.add( + rxBus + .toObservable(EventAppExit::class.java) + .observeOn(aapsSchedulers.io) + .subscribe({ context.unbindService(serviceConnection) }, fabricPrivacy::logException) ) } serviceRunning = true @@ -106,8 +105,8 @@ abstract class PumpPluginAbstract protected constructor( override fun onStop() { aapsLogger.debug(LTag.PUMP, model().model + " onStop()") - if (hasService()) { - context.unbindService(serviceConnection!!) + serviceConnection?.let { serviceConnection -> + context.unbindService(serviceConnection) } serviceRunning = false disposable.clear() @@ -334,7 +333,7 @@ abstract class PumpPluginAbstract protected constructor( rxBus.send(EventCustomActionsChanged()) } - override fun manufacturer(): ManufacturerType = pumpType.manufacturer!! + override fun manufacturer(): ManufacturerType = pumpType.manufacturer ?: ManufacturerType.AAPS override fun model(): PumpType = pumpType override fun canHandleDST(): Boolean = false diff --git a/pump/pump-common/src/main/java/info/nightscout/pump/common/sync/PumpSyncStorage.kt b/pump/pump-common/src/main/java/info/nightscout/pump/common/sync/PumpSyncStorage.kt index 1de834263e..548fad8665 100644 --- a/pump/pump-common/src/main/java/info/nightscout/pump/common/sync/PumpSyncStorage.kt +++ b/pump/pump-common/src/main/java/info/nightscout/pump/common/sync/PumpSyncStorage.kt @@ -66,8 +66,11 @@ class PumpSyncStorage @Inject constructor( if (jsonData.isNotBlank()) { @Suppress("UNCHECKED_CAST") - pumpSyncStorageTBR = xstream.fromXML(jsonData, MutableList::class.java) as - MutableList + pumpSyncStorageTBR = try { + xstream.fromXML(jsonData, MutableList::class.java) as MutableList + } catch (e: Exception) { + mutableListOf() + } aapsLogger.debug(LTag.PUMP, "Loading Pump Sync Storage: tbrs=${pumpSyncStorageTBR.size}.") aapsLogger.debug(LTag.PUMP, "DD: PumpSyncStorageTBR=$pumpSyncStorageTBR") diff --git a/pump/pump-common/src/main/res/values-fr-rFR/strings.xml b/pump/pump-common/src/main/res/values-fr-rFR/strings.xml index fbb5a624e1..2083618893 100644 --- a/pump/pump-common/src/main/res/values-fr-rFR/strings.xml +++ b/pump/pump-common/src/main/res/values-fr-rFR/strings.xml @@ -5,6 +5,7 @@ Opération PAS ENCORE supportée par la pompe. OK Numéro de série de la pompe + %1$.2f U / %2$.2f U délivrés Non initialisé Initialisé diff --git a/pump/pump-core/src/main/res/values-fr-rFR/strings.xml b/pump/pump-core/src/main/res/values-fr-rFR/strings.xml index cef1881d71..452f916a90 100644 --- a/pump/pump-core/src/main/res/values-fr-rFR/strings.xml +++ b/pump/pump-core/src/main/res/values-fr-rFR/strings.xml @@ -1,6 +1,7 @@ + Jamais contacté En veille Réveil en cours Actif diff --git a/pump/virtual/src/main/res/values-af-rZA/strings.xml b/pump/virtual/src/main/res/values-af-rZA/strings.xml new file mode 100644 index 0000000000..accee86fc9 --- /dev/null +++ b/pump/virtual/src/main/res/values-af-rZA/strings.xml @@ -0,0 +1,6 @@ + + + + Pomp integrasie vir pompe wat nog nie enige drywer het nie (oop lus) + Virtuele pomp instellings + diff --git a/pump/virtual/src/main/res/values-bg-rBG/strings.xml b/pump/virtual/src/main/res/values-bg-rBG/strings.xml new file mode 100644 index 0000000000..c8ccd9ec77 --- /dev/null +++ b/pump/virtual/src/main/res/values-bg-rBG/strings.xml @@ -0,0 +1,6 @@ + + + + За помпи, който все още не работят с AndroidAPS(Open Loop) + Настойки Виртуална Помпа + diff --git a/pump/virtual/src/main/res/values-ca-rES/strings.xml b/pump/virtual/src/main/res/values-ca-rES/strings.xml new file mode 100644 index 0000000000..18af45c7b1 --- /dev/null +++ b/pump/virtual/src/main/res/values-ca-rES/strings.xml @@ -0,0 +1,6 @@ + + + + Integració de bombes d\'insulina per les quals encara no existeix driver/controlador (Llaç obert) + Configuració bomba virtual + diff --git a/pump/virtual/src/main/res/values-cs-rCZ/strings.xml b/pump/virtual/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 0000000000..3619831597 --- /dev/null +++ b/pump/virtual/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,11 @@ + + + + Typ virtuální pumpy + Definice pumpy + Bolus: Krok =%1$s\nProdl. bolus: [Krok=%2$s, Délka=%3$smin-%4$sh]\nBazál: Krok=%5$s\nDoč. bazál: %6$s (%7$s), Délka=%8$smin-%9$sh\n%10$s + VPUM + Ovladač pumpy pro uživatele bez podporované pumpy (Otevřená smyčka) + VIRTUÁLNÍ PUMPA + Nastavení virtuální pumpy + diff --git a/pump/virtual/src/main/res/values-da-rDK/strings.xml b/pump/virtual/src/main/res/values-da-rDK/strings.xml new file mode 100644 index 0000000000..6518adaca0 --- /dev/null +++ b/pump/virtual/src/main/res/values-da-rDK/strings.xml @@ -0,0 +1,6 @@ + + + + Pumpeintegration til pumper, som endnu ikke har nogen driver (Åbent Loop) + Indstillinger for virtuel pumpe + diff --git a/pump/virtual/src/main/res/values-de-rDE/strings.xml b/pump/virtual/src/main/res/values-de-rDE/strings.xml new file mode 100644 index 0000000000..b80d97c397 --- /dev/null +++ b/pump/virtual/src/main/res/values-de-rDE/strings.xml @@ -0,0 +1,6 @@ + + + + Pumpenintegration für Pumpen, die noch nicht über einen Treiber verfügen (Open Loop) + Einstellungen der virtuellen Pumpe + diff --git a/pump/virtual/src/main/res/values-el-rGR/strings.xml b/pump/virtual/src/main/res/values-el-rGR/strings.xml new file mode 100644 index 0000000000..5c2408a953 --- /dev/null +++ b/pump/virtual/src/main/res/values-el-rGR/strings.xml @@ -0,0 +1,6 @@ + + + + Ολοκλήρωση αντλίας για αντλίες που δεν έχουν κανέναν οδηγό ακόμα (Ανοιχτό Κύκλωμα) + Ρυθμίσεις Εικονικής αντλίας + diff --git a/pump/virtual/src/main/res/values-es-rES/strings.xml b/pump/virtual/src/main/res/values-es-rES/strings.xml new file mode 100644 index 0000000000..0d7016149a --- /dev/null +++ b/pump/virtual/src/main/res/values-es-rES/strings.xml @@ -0,0 +1,11 @@ + + + + Bomba virtual + Definición de la bomba + Bolo: Paso =%1$s\nBolo Extendido: [paso =%2$s, Duración =%3$smin -%4$sh] \nBasal: Paso =%5$s\nTBR: %6$s ( %7$s), Duración =%8$sMin -%9$sh\n%10$s + BOMBAV + Integración de bombas de insulina que aún no tienen ningún controlador disponible (lazo abierto) + BOMBA VIRTUAL + Ajustes de bomba virtual + diff --git a/pump/virtual/src/main/res/values-fr-rFR/strings.xml b/pump/virtual/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 0000000000..0d1d572148 --- /dev/null +++ b/pump/virtual/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,11 @@ + + + + Type de pompe virtuelle + Définition de pompe + Bolus : Étape =%1$s\nExtended Bolus : [Étape =%2$s, Durée =%3$smin -%4$sh]\nBasal : Étape =%5$s\nTBR : %6$s (par %7$s), Durée =%8$smin -%9$sh\n%10$s + POMPEV + Intégration pour les pompes qui n’ont pas encore de pilote (Boucle Ouverte) + POMPE VIRTUELLE + Paramètres pompe virtuelle + diff --git a/pump/virtual/src/main/res/values-ga-rIE/strings.xml b/pump/virtual/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 0000000000..5f1fadd4ab --- /dev/null +++ b/pump/virtual/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/pump/virtual/src/main/res/values-hr-rHR/strings.xml b/pump/virtual/src/main/res/values-hr-rHR/strings.xml new file mode 100644 index 0000000000..aaefd79c4e --- /dev/null +++ b/pump/virtual/src/main/res/values-hr-rHR/strings.xml @@ -0,0 +1,9 @@ + + + + Definicija pumpe + Bolus: korak=%1$s\nProduženi bolus: [korak=%2$s, trajanje=%3$smin-%4$sh]\nBazal: korak=%5$s\nTBR: %6$s (do %7$s), Trajanje=%8$smin-%9$sh\n%10$s + VPUMP + Integracija pumpe za pumpe koje još nemaju upravljački program (otvorena petlja) + Postavke virtualne pumpe + diff --git a/pump/virtual/src/main/res/values-hu-rHU/strings.xml b/pump/virtual/src/main/res/values-hu-rHU/strings.xml new file mode 100644 index 0000000000..5f1fadd4ab --- /dev/null +++ b/pump/virtual/src/main/res/values-hu-rHU/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/pump/virtual/src/main/res/values-it-rIT/strings.xml b/pump/virtual/src/main/res/values-it-rIT/strings.xml new file mode 100644 index 0000000000..a3d23e34a6 --- /dev/null +++ b/pump/virtual/src/main/res/values-it-rIT/strings.xml @@ -0,0 +1,10 @@ + + + + Definizione micro + Bolo: Step=%1$s\nBolo Esteso: [Step=%2$s, Durata=%3$smin-%4$sh]\nBasale: Step=%5$s\nTBR: %6$s (di %7$s), Durata=%8$smin-%9$sh\n%10$s + MICROV + Per microinfusori che non hanno ancora alcun driver (Loop aperto) + MICRO VIRTUALE + Impostazioni micro virtuale + diff --git a/pump/virtual/src/main/res/values-iw-rIL/strings.xml b/pump/virtual/src/main/res/values-iw-rIL/strings.xml new file mode 100644 index 0000000000..6ca6170d2b --- /dev/null +++ b/pump/virtual/src/main/res/values-iw-rIL/strings.xml @@ -0,0 +1,6 @@ + + + + שימוש במשאבות אשר עדיין אין להם מנהל התקן כלשהו (לולאה פתוחה) + הגדרות משאבה וירטואלית + diff --git a/pump/virtual/src/main/res/values-ja-rJP/strings.xml b/pump/virtual/src/main/res/values-ja-rJP/strings.xml new file mode 100644 index 0000000000..5f1fadd4ab --- /dev/null +++ b/pump/virtual/src/main/res/values-ja-rJP/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/pump/virtual/src/main/res/values-ko-rKR/strings.xml b/pump/virtual/src/main/res/values-ko-rKR/strings.xml new file mode 100644 index 0000000000..b228a9b77c --- /dev/null +++ b/pump/virtual/src/main/res/values-ko-rKR/strings.xml @@ -0,0 +1,6 @@ + + + + 가상용 펌프를 위한 설정(Open Loop) + 가상펌프 설정 + diff --git a/pump/virtual/src/main/res/values-lt-rLT/strings.xml b/pump/virtual/src/main/res/values-lt-rLT/strings.xml new file mode 100644 index 0000000000..c187457587 --- /dev/null +++ b/pump/virtual/src/main/res/values-lt-rLT/strings.xml @@ -0,0 +1,6 @@ + + + + Integracija pompoms, kurios dar neturi reikalingo valdiklio (Atviras Ciklas) + Virtualios pompos nustatymai + diff --git a/pump/virtual/src/main/res/values-nl-rNL/strings.xml b/pump/virtual/src/main/res/values-nl-rNL/strings.xml new file mode 100644 index 0000000000..7cb784f1c0 --- /dev/null +++ b/pump/virtual/src/main/res/values-nl-rNL/strings.xml @@ -0,0 +1,10 @@ + + + + Pomp definitie + Bolus: Stap=%1$s\nExtended Bolus: [Stap=%2$s, Duur=%3$smin-%4$sh]\nBasaal: Stap=%5$s\nTBR: %6$s (by %7$s), Duur=%8$smin-%9$sh\n%10$s + VPUMP + Pomp integratie voor pompen, waar nog geen driver voor is (Open Loop) + VIRTUELE POMP + Virtuele pomp instellingen + diff --git a/pump/virtual/src/main/res/values-no-rNO/strings.xml b/pump/virtual/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 0000000000..79f054be3d --- /dev/null +++ b/pump/virtual/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,10 @@ + + + + Pumpedefinisjon + Bolus: Step=%1$s\nForlenget bolus: [Step=%2$s, Varighet=%3$smin-%4$sh]\nBasal: Step=%5$s\nTBR: %6$s (av %7$s), Varighet=%8$smin-%9$sh\n%10$s + VPUMP + Integrasjon mot pumper som ikke støttes av AndroidAPS (åpen loop) + VIRTUELL PUMPE + Innstillinger for virtuell pumpe + diff --git a/pump/virtual/src/main/res/values-pl-rPL/strings.xml b/pump/virtual/src/main/res/values-pl-rPL/strings.xml new file mode 100644 index 0000000000..3032a51b19 --- /dev/null +++ b/pump/virtual/src/main/res/values-pl-rPL/strings.xml @@ -0,0 +1,6 @@ + + + + Integracja z pompami, które nie posiadają jeszcze żadnego sterownika (Open Loop) + Ustawienia pompy wirtualnej + diff --git a/pump/virtual/src/main/res/values-pt-rBR/strings.xml b/pump/virtual/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..f4d49446e2 --- /dev/null +++ b/pump/virtual/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,6 @@ + + + + Integração para as bombas que não têm qualquer driver ainda (Open Loop) + Definições da bomba virtual + diff --git a/pump/virtual/src/main/res/values-pt-rPT/strings.xml b/pump/virtual/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..f4d49446e2 --- /dev/null +++ b/pump/virtual/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,6 @@ + + + + Integração para as bombas que não têm qualquer driver ainda (Open Loop) + Definições da bomba virtual + diff --git a/pump/virtual/src/main/res/values-ro-rRO/strings.xml b/pump/virtual/src/main/res/values-ro-rRO/strings.xml new file mode 100644 index 0000000000..ce426b54c8 --- /dev/null +++ b/pump/virtual/src/main/res/values-ro-rRO/strings.xml @@ -0,0 +1,6 @@ + + + + Integrare cu pompele ce nu au încă un driver software disponibil (Buclă Deschisă) + Setări pompă virtuală + diff --git a/pump/virtual/src/main/res/values-ru-rRU/strings.xml b/pump/virtual/src/main/res/values-ru-rRU/strings.xml new file mode 100644 index 0000000000..988e7c4de3 --- /dev/null +++ b/pump/virtual/src/main/res/values-ru-rRU/strings.xml @@ -0,0 +1,11 @@ + + + + Тип виртуальной помпы + Определение помпы + Болюс: Шаг =%1$s\n Пролонгированный Болюс: [Шаг =%2$s, Продолжительность =%3$sмин -%4$sh] \nБазал: Шаг =%5$s\n ВБС: %6$s (на %7$s), Продолжительность =%8$sмин -%9$sh\n%10$s + ВиртПомпа + Интеграция с помпами, еще не имеющими драйвера (незамкнутый цикл) + ВИРТУАЛЬНАЯ ПОМПА + настройки вирт помпы + diff --git a/pump/virtual/src/main/res/values-sk-rSK/strings.xml b/pump/virtual/src/main/res/values-sk-rSK/strings.xml new file mode 100644 index 0000000000..70113b0d89 --- /dev/null +++ b/pump/virtual/src/main/res/values-sk-rSK/strings.xml @@ -0,0 +1,10 @@ + + + + Definícia pumpy + Bolus: Krok =%1$s\nPredl. bolus: [Krok=%2$s, Dĺžka=%3$smin-%4$sh]\nBazál: Krok=%5$s\nDoč. bazál: %6$s (%7$s), Dĺžka=%8$smin-%9$sh\n%10$s + VPUM + Ovládač pumpy pre užívateľov bez podporovanej pumpy (Otvorený okruh) + Virtuálna pumpa + Nastavenie virtuálnej pumpy + diff --git a/pump/virtual/src/main/res/values-sr-rCS/strings.xml b/pump/virtual/src/main/res/values-sr-rCS/strings.xml new file mode 100644 index 0000000000..247064374a --- /dev/null +++ b/pump/virtual/src/main/res/values-sr-rCS/strings.xml @@ -0,0 +1,5 @@ + + + + Integracija pumpe za pumpe koje još uvek nemaju upravljački program (Open Loop) + diff --git a/pump/virtual/src/main/res/values-sv-rSE/strings.xml b/pump/virtual/src/main/res/values-sv-rSE/strings.xml new file mode 100644 index 0000000000..ccfd5d374a --- /dev/null +++ b/pump/virtual/src/main/res/values-sv-rSE/strings.xml @@ -0,0 +1,6 @@ + + + + Integration för pumpar som ännu inte stöds av AndroidAPS (Open loop) + Inställningar för Virtuell pump + diff --git a/pump/virtual/src/main/res/values-tr-rTR/strings.xml b/pump/virtual/src/main/res/values-tr-rTR/strings.xml new file mode 100644 index 0000000000..e34fdfe91b --- /dev/null +++ b/pump/virtual/src/main/res/values-tr-rTR/strings.xml @@ -0,0 +1,10 @@ + + + + Pompa tanımı + Bolus: Adım=%1$s\nYayma Bolus: [Adım=%2$s, Süre=%3$sdk-%4$ssa]\nBazal: Adım=%5$s\nGBO: %6$s (ile %7$s), Süre=%8$sdk-%9$ssa\n%10$s + VPOMP + Henüz herhangi bir sürücüye sahip olmayan pompalar için pompa entegrasyonu (Açık Döngü) + SANAL POMPA + Sanal pompa ayarları + diff --git a/pump/virtual/src/main/res/values-zh-rCN/strings.xml b/pump/virtual/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..b3d2f3dbb0 --- /dev/null +++ b/pump/virtual/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,6 @@ + + + + 与我们还没有其驱动的泵集成(开环) + 虚拟泵设置 + diff --git a/workflow/src/main/java/info/nightscout/workflow/iob/CarbsInPastExtension.kt b/workflow/src/main/java/info/nightscout/workflow/iob/CarbsInPastExtension.kt index 23e7a93780..d675ffa3a0 100644 --- a/workflow/src/main/java/info/nightscout/workflow/iob/CarbsInPastExtension.kt +++ b/workflow/src/main/java/info/nightscout/workflow/iob/CarbsInPastExtension.kt @@ -1,4 +1,4 @@ -package info.nightscout.plugins.iob.iobCobCalculator +package info.nightscout.workflow.iob import info.nightscout.database.entities.Carbs import info.nightscout.interfaces.Constants diff --git a/workflow/src/main/java/info/nightscout/workflow/iob/IobCobOref1Worker.kt b/workflow/src/main/java/info/nightscout/workflow/iob/IobCobOref1Worker.kt index 793149ad1d..ba77bddf29 100644 --- a/workflow/src/main/java/info/nightscout/workflow/iob/IobCobOref1Worker.kt +++ b/workflow/src/main/java/info/nightscout/workflow/iob/IobCobOref1Worker.kt @@ -23,7 +23,6 @@ import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profiling.Profiler import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.plugins.iob.iobCobCalculator.fromCarbs import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.Event import info.nightscout.rx.events.EventAutosensCalculationFinished diff --git a/workflow/src/main/java/info/nightscout/workflow/iob/IobCobOrefWorker.kt b/workflow/src/main/java/info/nightscout/workflow/iob/IobCobOrefWorker.kt index 0d8e9c1362..78a48d891c 100644 --- a/workflow/src/main/java/info/nightscout/workflow/iob/IobCobOrefWorker.kt +++ b/workflow/src/main/java/info/nightscout/workflow/iob/IobCobOrefWorker.kt @@ -21,7 +21,6 @@ import info.nightscout.interfaces.profile.Instantiator import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.interfaces.profiling.Profiler import info.nightscout.interfaces.utils.DecimalFormatter -import info.nightscout.plugins.iob.iobCobCalculator.fromCarbs import info.nightscout.rx.bus.RxBus import info.nightscout.rx.events.Event import info.nightscout.rx.events.EventAutosensCalculationFinished