Merge branch 'dev' into xdrip

This commit is contained in:
Milos Kozak 2023-02-01 16:53:39 +01:00
commit c93e228410
281 changed files with 6232 additions and 1321 deletions

View file

@ -13,6 +13,7 @@ enum class LTag(val tag: String, val defaultValue : Boolean = true, val requires
DATATREATMENTS("DATATREATMENTS"),
EVENTS("EVENTS", defaultValue = false, requiresRestart = true),
GLUCOSE("GLUCOSE", defaultValue = false),
HTTP("HTTP"),
LOCATION("LOCATION"),
NOTIFICATION("NOTIFICATION"),
NSCLIENT("NSCLIENT"),

View file

@ -2,6 +2,7 @@
<resources>
<!-- DateUtil-->
<string name="minago">%1$d min temu</string>
<string name="minago_long">%1$d minut temu</string>
<string name="hoursago">%1$.1f godz. temu</string>
<string name="days_ago">%1$.1f dni temu</string>
<string name="days_ago_round">%1$.0f dni temu</string>

View file

@ -51,7 +51,6 @@ import info.nightscout.interfaces.aps.Loop
import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.maintenance.PrefFileListProvider
import info.nightscout.interfaces.nsclient.NSSettingsStatus
import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.profile.ProfileFunction
@ -62,7 +61,6 @@ import info.nightscout.interfaces.versionChecker.VersionCheckerUtils
import info.nightscout.plugins.constraints.signatureVerifier.SignatureVerifierPlugin
import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.events.EventAppExit
import info.nightscout.rx.events.EventInitializationChanged
import info.nightscout.rx.events.EventPreferenceChange
import info.nightscout.rx.events.EventRebuildTabs
import info.nightscout.rx.logging.LTag
@ -88,7 +86,6 @@ class MainActivity : DaggerAppCompatActivityWithResult() {
@Inject lateinit var versionCheckerUtils: VersionCheckerUtils
@Inject lateinit var smsCommunicator: SmsCommunicator
@Inject lateinit var loop: Loop
@Inject lateinit var nsSettingsStatus: NSSettingsStatus
@Inject lateinit var config: Config
@Inject lateinit var activePlugin: ActivePlugin
@Inject lateinit var fabricPrivacy: FabricPrivacy
@ -347,11 +344,11 @@ class MainActivity : DaggerAppCompatActivityWithResult() {
R.id.nav_about -> {
var message = "Build: ${BuildConfig.BUILDVERSION}\n"
message += "Flavor: ${BuildConfig.FLAVOR}${BuildConfig.BUILD_TYPE}\n"
message += "${rh.gs(info.nightscout.configuration.R.string.configbuilder_nightscoutversion_label)} ${nsSettingsStatus.getVersion()}"
message += "${rh.gs(info.nightscout.configuration.R.string.configbuilder_nightscoutversion_label)} ${activePlugin.activeNsClient?.detectedNsVersion() ?: rh.gs(info.nightscout.plugins.R.string.not_available_full)}"
if (config.isEngineeringMode()) message += "\n${rh.gs(info.nightscout.configuration.R.string.engineering_mode_enabled)}"
if (config.isUnfinishedMode()) message += "\nUnfinished mode enabled"
if (!fabricPrivacy.fabricEnabled()) message += "\n${rh.gs(R.string.fabric_upload_disabled)}"
message += rh.gs(info.nightscout.pump.combo.R.string.about_link_urls)
if (!fabricPrivacy.fabricEnabled()) message += "\n${rh.gs(info.nightscout.core.ui.R.string.fabric_upload_disabled)}"
message += rh.gs(info.nightscout.core.ui.R.string.about_link_urls)
val messageSpanned = SpannableString(message)
Linkify.addLinks(messageSpanned, Linkify.WEB_URLS)
MaterialAlertDialogBuilder(this, info.nightscout.core.ui.R.style.DialogTheme)
@ -359,7 +356,7 @@ class MainActivity : DaggerAppCompatActivityWithResult() {
.setIcon(iconsProvider.getIcon())
.setMessage(messageSpanned)
.setPositiveButton(rh.gs(info.nightscout.core.ui.R.string.ok), null)
.setNeutralButton(rh.gs(R.string.cta_dont_kill_my_app_info)) { _, _ ->
.setNeutralButton(rh.gs(info.nightscout.core.ui.R.string.cta_dont_kill_my_app_info)) { _, _ ->
startActivity(
Intent(
Intent.ACTION_VIEW,

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Меню на графиката</string>
<string name="authorizationfailed">Удостоверяването неуспешно</string>
<string name="copytolocalprofile_invalid">Създаването на профила невъзможно. Профилът е невалиден.</string>
<string name="cta_dont_kill_my_app_info">Не убивай приложението?</string>
<string name="fabric_upload_disabled">Качването на данни за проблеми е забранено!(Fabric)</string>
<string name="clear_filter">Премахни филтъра</string>
<string name="cannula">Канюла</string>
<string name="email_address">Електронна поща</string>

View file

@ -43,8 +43,6 @@
<string name="chartmenu">Menú gràfica</string>
<string name="authorizationfailed">L\'autorització ha fallat</string>
<string name="copytolocalprofile_invalid">No s\'ha pogut crear el perfil local. Perfil no vàlid.</string>
<string name="cta_dont_kill_my_app_info">No matar la meva app?</string>
<string name="fabric_upload_disabled">Enviament de logs d\'error desactivat!</string>
<string name="clear_filter">Netejar filtres</string>
<string name="cannula">Cànula</string>
<string name="email_address">Correu electrònic</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Možnosti grafu</string>
<string name="authorizationfailed">Autorizace selhala</string>
<string name="copytolocalprofile_invalid">Nelze vytvořit profil. Profil je neplatný.</string>
<string name="cta_dont_kill_my_app_info">Nezabíjet mou aplikaci?</string>
<string name="fabric_upload_disabled">Nahrávání protokolů o pádech zakázáno!</string>
<string name="clear_filter">Vymazat filtr</string>
<string name="cannula">Kanyla</string>
<string name="email_address">E-mailová adresa</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Diagrammenu</string>
<string name="authorizationfailed">Godkendelse mislykkedes</string>
<string name="copytolocalprofile_invalid">Kunne ikke oprette profil. Profilen er ugyldig.</string>
<string name="cta_dont_kill_my_app_info">Luk ikke min app?</string>
<string name="fabric_upload_disabled">Upload af Crash logs deaktiveret!</string>
<string name="clear_filter">Nulstil filter</string>
<string name="cannula">Kanyle</string>
<string name="email_address">E-mail adresse</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Diagrammmenü</string>
<string name="authorizationfailed">Autorisierung fehlgeschlagen</string>
<string name="copytolocalprofile_invalid">Profil kann nicht erstellt werden. Profil ist ungültig.</string>
<string name="cta_dont_kill_my_app_info">Don\'t kill my app?</string>
<string name="fabric_upload_disabled">Hochladen von Crash-Protokollen deaktiviert!</string>
<string name="clear_filter">Filter löschen</string>
<string name="cannula">Kanüle</string>
<string name="email_address">EMailAdresse</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Menú gráfico</string>
<string name="authorizationfailed">Ha fallado la autorización</string>
<string name="copytolocalprofile_invalid">No se puede crear el perfil. El perfil es inválido.</string>
<string name="cta_dont_kill_my_app_info">¿No matar mi aplicación?</string>
<string name="fabric_upload_disabled">¡Carga de registros de errores desactivada!</string>
<string name="clear_filter">Borrar filtro</string>
<string name="cannula">Cánula</string>
<string name="email_address">Dirección de Correo Electrónico</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Menu Graph</string>
<string name="authorizationfailed">Echec de l\'authentification</string>
<string name="copytolocalprofile_invalid">Impossible de créer le profil. Le profil est invalide.</string>
<string name="cta_dont_kill_my_app_info">Garder l\'appli en arrière plan ?</string>
<string name="fabric_upload_disabled">Téléchargement logs crashs désactivé!</string>
<string name="clear_filter">Effacer le filtre</string>
<string name="cannula">Canule</string>
<string name="email_address">Adresse e-mail</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Menu grafico</string>
<string name="authorizationfailed">Autorizzazione fallita</string>
<string name="copytolocalprofile_invalid">Impossibile creare il profilo. Il profilo non è valido.</string>
<string name="cta_dont_kill_my_app_info">Non terminare l\'app?</string>
<string name="fabric_upload_disabled">Caricamento log dei crash disabilitato!</string>
<string name="clear_filter">Cancella filtro</string>
<string name="cannula">Cannula</string>
<string name="email_address">Indirizzo email</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">תפריט תרשים</string>
<string name="authorizationfailed">ההרשאה נכשלה</string>
<string name="copytolocalprofile_invalid">לא ניתן ליצור פרופיל מקומי. הפרופיל אינו חוקי.</string>
<string name="cta_dont_kill_my_app_info">איך לא להשבית את האפליקציה שלי?</string>
<string name="fabric_upload_disabled">העלאת רשומות קריסה מושבתת!</string>
<string name="clear_filter">נקה סינון</string>
<string name="cannula">צינורית</string>
<string name="email_address">כתובת דוא\"ל</string>

View file

@ -42,8 +42,6 @@
<string name="clearqueueconfirm">대기열을 삭제하시겠습니까? 대기열에 있는 모든 데이터가 삭제됩니다!</string>
<string name="chartmenu">차트 메뉴</string>
<string name="authorizationfailed">인증 실패</string>
<string name="cta_dont_kill_my_app_info">앱이 종료되지 않도록 합니다?</string>
<string name="fabric_upload_disabled">충돌 로그 업로드가 작동하지 않습니다.</string>
<string name="clear_filter">필터 지우기</string>
<string name="cannula">캐뉼라</string>
<string name="email_address">이메일 주소</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Grafiko meniu</string>
<string name="authorizationfailed">Autorizacija nepavyko</string>
<string name="copytolocalprofile_invalid">Nepavyksta sukurti profilio. Profilis neteisingas.</string>
<string name="cta_dont_kill_my_app_info">Don\'t kill my app?</string>
<string name="fabric_upload_disabled">Sutrikimų žurnalo įrašų įkėlimas išjungtas!</string>
<string name="clear_filter">Valyti filtrą</string>
<string name="cannula">Kaniulė</string>
<string name="email_address">El. pašto adresas</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Grafiek menu</string>
<string name="authorizationfailed">Autorisatie mislukt</string>
<string name="copytolocalprofile_invalid">Kan profiel niet aanmaken. Profiel is ongeldig.</string>
<string name="cta_dont_kill_my_app_info">Don\'t kill my app?</string>
<string name="fabric_upload_disabled">Upload van crashrapporten is uitgeschakeld!</string>
<string name="clear_filter">Verwijder filter</string>
<string name="cannula">Canule</string>
<string name="email_address">E-mailadres</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Diagram meny</string>
<string name="authorizationfailed">Autentisering feilet</string>
<string name="copytolocalprofile_invalid">Klarte ikke å opprette profil. Profilen er ikke gyldig.</string>
<string name="cta_dont_kill_my_app_info">Avslutte app?</string>
<string name="fabric_upload_disabled">Opplast av krasj logger er deaktivert!</string>
<string name="clear_filter">Nullstill filtre</string>
<string name="cannula">Kanyle</string>
<string name="email_address">E-postadresse</string>

View file

@ -33,6 +33,8 @@
<string name="enable_carbs_req_alert">Alarm gdy wymagane jest podanie węglowodanów</string>
<string name="open_navigation">Otwórz menu</string>
<string name="close_navigation">Zamknij menu</string>
<string name="remove_items">Usuń elementy</string>
<string name="sort_items">Sortuj elementy</string>
<string name="error_adding_treatment_title">Niekompletne dane leczenie</string>
<string name="error_adding_treatment_message">Leczenie (insulina: %1$.2f, węglowodany: %2$d, czas:%3$s) nie mogą być dodane. Sprawdź i dodaj ręcznie rekord w razie potrzeby.</string>
<string name="generated_ecarbs_note">eWęgle: %1$d g (%2$d h), Opóźnienie: %3$d m</string>
@ -43,14 +45,16 @@
<string name="chartmenu">Menu wykresu</string>
<string name="authorizationfailed">Autoryzacja nie powiodła się</string>
<string name="copytolocalprofile_invalid">Nie można utworzyć profilu. Profil jest nieprawidłowy.</string>
<string name="cta_dont_kill_my_app_info">Nie zabij mojej aplikacji?</string>
<string name="fabric_upload_disabled">Przesyłanie dzienników awarii jest wyłączone!</string>
<string name="clear_filter">Wyczyść filtr</string>
<string name="cannula">Kaniula</string>
<string name="email_address">Adres e-mail</string>
<string name="remove_bg_readings">Usuń odczyty glikemii</string>
<string name="identification_not_set">Identyfikator nie jest ustawiony w trybie dev</string>
<string name="a11y_dialog">dialog</string>
<!-- WEAR OS-->
<string name="wear_unknown_action_string">Nieznana akcja:</string>
<string name="remove_selected_items">Usuń wybrane pozycje</string>
<string name="count_selected">Wybrany %1$d</string>
<string name="sort_label">Sortuj</string>
<string name="search">Szukaj</string>
</resources>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Menu do Gráfico</string>
<string name="authorizationfailed">Falha na autorização</string>
<string name="copytolocalprofile_invalid">Não foi possível criar o perfil. Perfil inválido.</string>
<string name="cta_dont_kill_my_app_info">Não encerre meu aplicativo?</string>
<string name="fabric_upload_disabled">Envio de logs de erro desativado!</string>
<string name="clear_filter">Limpar filtro</string>
<string name="cannula">Cânula</string>
<string name="email_address">Endereço de e-mail</string>

View file

@ -43,8 +43,6 @@
<string name="chartmenu">Menu do Gráfico</string>
<string name="authorizationfailed">Falha na autorização</string>
<string name="copytolocalprofile_invalid">Não é possível criar o perfil. O perfil é inválido.</string>
<string name="cta_dont_kill_my_app_info">Não encerre minha app?</string>
<string name="fabric_upload_disabled">Envio de registos de erro desativado!</string>
<string name="clear_filter">Limpar filtros</string>
<string name="cannula">Cânula</string>
<string name="email_address">Endereço de email</string>

View file

@ -43,8 +43,6 @@
<string name="chartmenu">Meniu diagramă</string>
<string name="authorizationfailed">Autorizarea a eșuat</string>
<string name="copytolocalprofile_invalid">Nu se poate crea profilul. Profilul este invalid.</string>
<string name="cta_dont_kill_my_app_info">Nu-mi opri aplicația?</string>
<string name="fabric_upload_disabled">Încărcarea jurnalelor de erori este dezactivata!</string>
<string name="clear_filter">Șterge filtru</string>
<string name="cannula">Canula</string>
<string name="email_address">Adresă de e-mail</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Меню графика</string>
<string name="authorizationfailed">Ошибка авторизации</string>
<string name="copytolocalprofile_invalid">Не удается создать локальный профиль. Настройки профиля неправильны.</string>
<string name="cta_dont_kill_my_app_info">Не закрывать приложение?</string>
<string name="fabric_upload_disabled">Загрузка журналов сбоя на сервер отключена!</string>
<string name="clear_filter">Очистить фильтр</string>
<string name="cannula">Катетер помпы</string>
<string name="email_address">Адрес электронной почты</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Grafové menu</string>
<string name="authorizationfailed">Autorizácia zlyhala</string>
<string name="copytolocalprofile_invalid">Nie je možné vytvoriť lokálny profil. Profil je neplatný.</string>
<string name="cta_dont_kill_my_app_info">Nepotláčať moju aplikáciu?</string>
<string name="fabric_upload_disabled">Odosielanie protokolov o zlyhaní je zakázané!</string>
<string name="clear_filter">Vyčistiť filter</string>
<string name="cannula">Kanyla</string>
<string name="email_address">Emailová adresa</string>

View file

@ -43,8 +43,6 @@
<string name="chartmenu">Diagrammeny</string>
<string name="authorizationfailed">Behörighetskontroll misslyckades</string>
<string name="copytolocalprofile_invalid">Kan inte att skapa profilen. Profilen är felaktig.</string>
<string name="cta_dont_kill_my_app_info">Döda inte min app?</string>
<string name="fabric_upload_disabled">Uppladdning av kraschloggar inaktiverad!</string>
<string name="clear_filter">Rensa filter</string>
<string name="cannula">Kanyl</string>
<string name="email_address">E-postadress</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">Grafik menüsü</string>
<string name="authorizationfailed">Yetkilendirme başarısız oldu</string>
<string name="copytolocalprofile_invalid">Profil oluşturulamıyor. Profil geçersiz.</string>
<string name="cta_dont_kill_my_app_info">Uygulamamı devre dışı bırakma?</string>
<string name="fabric_upload_disabled">Çökme günlükleri yükleme devre dışı bırakıldı!</string>
<string name="clear_filter">Filtreyi temizle</string>
<string name="cannula">Kanül</string>
<string name="email_address">E-posta adresi</string>

View file

@ -45,8 +45,6 @@
<string name="chartmenu">图表菜单</string>
<string name="authorizationfailed">授权失败</string>
<string name="copytolocalprofile_invalid">无法创建配置文件。配置文件无效。</string>
<string name="cta_dont_kill_my_app_info">不要杀死我的应用程序?</string>
<string name="fabric_upload_disabled">已禁用崩溃日志上传!</string>
<string name="clear_filter">清除筛选</string>
<string name="cannula">输注导管</string>
<string name="email_address">电子邮件地址</string>

View file

@ -78,8 +78,6 @@
<string name="chartmenu">Chart menu</string>
<string name="authorizationfailed">Authorization failed</string>
<string name="copytolocalprofile_invalid">Unable to create profile. Profile is invalid.</string>
<string name="cta_dont_kill_my_app_info">Don\'t kill my app?</string>
<string name="fabric_upload_disabled">Crash logs upload disabled!</string>
<string name="clear_filter">Clear filter</string>
<string name="cannula">Cannula</string>
<string name="email_address">Email address</string>

View file

@ -4,7 +4,7 @@ buildscript {
ext {
kotlin_version = '1.8.0'
core_version = '1.9.0'
rxjava_version = '3.1.5'
rxjava_version = '3.1.6'
rxandroid_version = '3.0.2'
rxkotlin_version = '3.0.1'
room_version = '2.5.0'
@ -16,8 +16,8 @@ buildscript {
ormLite_version = '4.46'
gson_version = '2.10.1'
nav_version = '2.5.3'
appcompat_version = '1.5.1'
material_version = '1.7.0'
appcompat_version = '1.6.0'
material_version = '1.8.0'
gridlayout_version = '1.0.0'
constraintlayout_version = '2.1.4'
preferencektx_version = '1.2.0'
@ -76,8 +76,8 @@ buildscript {
plugins {
// Test Gradle build, keep disabled under normal circumstances
// id "com.osacky.doctor" version "0.8.1"
id "org.jlleitschuh.gradle.ktlint" version "11.0.0"
id 'org.barfuin.gradle.jacocolog' version '2.0.0'
id "org.jlleitschuh.gradle.ktlint" version "11.1.0"
id 'org.barfuin.gradle.jacocolog' version '3.0.0'
id 'org.jetbrains.kotlin.android' version "$kotlin_version" apply false
}

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="format_carbs">%1$dg</string>
<string name="format_carbs">%1$d g</string>
</resources>

View file

@ -48,6 +48,7 @@ interface ProcessedDeviceStatusData {
var clock = 0L
var battery = 0
var isCharging: Boolean? = null
}
val uploaderMap: HashMap<String, Uploader>

View file

@ -35,6 +35,6 @@ interface ProfileSource {
var currentProfileIndex: Int
fun currentProfile(): SingleProfile?
fun storeSettings(activity: FragmentActivity? = null)
fun storeSettings(activity: FragmentActivity? = null, emptyCreated: Boolean = false)
}

View file

@ -3,20 +3,44 @@ package info.nightscout.interfaces.sync
import android.text.Spanned
import info.nightscout.interfaces.nsclient.NSAlarm
/**
* Plugin providing communication with Nightscout server
*/
interface NsClient : Sync {
enum class Version {
NONE, V1, V3
}
val version: Version
/**
* NS URL
*/
val address: String
/**
* Set plugin in paused state
*/
fun pause(newState: Boolean)
/**
* Initiate new round of upload/download
*/
fun resend(reason: String)
/**
* @return List last of messages for fragment in HTML format
*/
fun textLog(): Spanned
/**
* Clear list of stored messages displayed in fragment
*/
fun clearLog()
enum class Collection { ENTRIES, TREATMENTS, FOODS }
/**
* Version of NS server
* @return Returns detected version of NS server
*/
fun detectedNsVersion(): String?
enum class Collection { ENTRIES, TREATMENTS, FOODS, PROFILE }
/**
* NSC v3 does first load of all data
* next loads are using srvModified property for sync
@ -34,6 +58,7 @@ interface NsClient : Sync {
*
*/
fun updateLatestBgReceivedIfNewer(latestReceived: Long)
/**
* Update newest loaded timestamp for treatments collection (first load or NSCv1)
* Update newest srvModified (sync loads)
@ -42,10 +67,37 @@ interface NsClient : Sync {
*
*/
fun updateLatestTreatmentReceivedIfNewer(latestReceived: Long)
/**
* Send alarm confirmation to NS
*
* @param originalAlarm alarm to be cleared
* @param silenceTimeInMilliseconds silence alarm for specified duration
*/
fun handleClearAlarm(originalAlarm: NSAlarm, silenceTimeInMilliseconds: Long)
/**
* Clear synchronization status
*
* Next synchronization will start from scratch
*/
fun resetToFullSync()
/**
* Upload new record to NS
*
* @param collection target ns collection
* @param dataPair data to upload (data.first) and id of changed record (data.second)
* @param progress progress of sync in format "number/number". Only for display in fragment
*/
fun nsAdd(collection: String, dataPair: DataSyncSelector.DataPair, progress: String)
/**
* Upload updated record to NS
*
* @param collection target ns collection
* @param dataPair data to upload (data.first) and id of changed record (data.second)
* @param progress progress of sync in format "number/number". Only for display in fragment
*/
fun nsUpdate(collection: String, dataPair: DataSyncSelector.DataPair, progress: String)
}

View file

@ -377,7 +377,7 @@ sealed class ProfileSealed(
val ret = Array(shifted.size) { ProfileValue(0, 0.0) }
var elapsed = 0
for (index in shifted.indices) {
ret[index] = ProfileValue(elapsed, (shifted[index].lowTarget + shifted[index].highTarget) / 2.0)
ret[index] = ProfileValue(elapsed, Profile.toMgdl((shifted[index].lowTarget + shifted[index].highTarget) / 2.0, units))
elapsed += T.msecs(shifted[index].duration).secs().toInt()
}
return ret

View file

@ -5,6 +5,7 @@ import com.google.gson.JsonParser
import info.nightscout.sdk.exceptions.DateHeaderOutOfToleranceException
import info.nightscout.sdk.exceptions.InvalidAccessTokenException
import info.nightscout.sdk.exceptions.InvalidFormatNightscoutException
import info.nightscout.sdk.exceptions.InvalidParameterNightscoutException
import info.nightscout.sdk.exceptions.UnknownResponseNightscoutException
import info.nightscout.sdk.exceptions.UnsuccessfullNightscoutException
import info.nightscout.sdk.interfaces.NSAndroidClient
@ -34,6 +35,7 @@ import info.nightscout.sdk.utils.toNotNull
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.logging.HttpLoggingInterceptor
import org.json.JSONObject
/**
@ -63,6 +65,7 @@ class NSAndroidClientImpl(
accessToken: String,
context: Context,
logging: Boolean,
logger: HttpLoggingInterceptor.Logger,
private val dispatcher: CoroutineDispatcher = Dispatchers.IO
) : NSAndroidClient {
@ -70,7 +73,8 @@ class NSAndroidClientImpl(
baseUrl = baseUrl,
context = context,
accessToken = accessToken,
logging = logging
logging = logging,
logger = logger
)
override var lastStatus: Status? = null
private set
@ -105,9 +109,10 @@ class NSAndroidClientImpl(
val response = api.lastModified()
if (response.isSuccessful) {
return@callWrapper response.body()?.result ?: throw UnsuccessfullNightscoutException()
} else {
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}
override suspend fun getSgvs(): NSAndroidClient.ReadResponse<List<NSSgvV3>> = callWrapper(dispatcher) {
@ -115,31 +120,34 @@ class NSAndroidClientImpl(
val response = api.getSgvs()
if (response.isSuccessful) {
return@callWrapper NSAndroidClient.ReadResponse(code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = 0, values = response.body()?.result?.map(RemoteEntry::toSgv).toNotNull())
} else {
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}
override suspend fun getSgvsModifiedSince(from: Long, limit: Long): NSAndroidClient.ReadResponse<List<NSSgvV3>> = callWrapper(dispatcher) {
override suspend fun getSgvsModifiedSince(from: Long, limit: Int): NSAndroidClient.ReadResponse<List<NSSgvV3>> = callWrapper(dispatcher) {
val response = api.getSgvsModifiedSince(from, limit)
if (response.isSuccessful) {
val eTagString = response.headers()["ETag"]
val eTag = eTagString?.substring(3, eTagString.length - 1)?.toLong()
return@callWrapper NSAndroidClient.ReadResponse(code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = eTag, values = response.body()?.result?.map(RemoteEntry::toSgv).toNotNull())
} else {
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}
override suspend fun getSgvsNewerThan(from: Long, limit: Long): NSAndroidClient.ReadResponse<List<NSSgvV3>> = callWrapper(dispatcher) {
override suspend fun getSgvsNewerThan(from: Long, limit: Int): NSAndroidClient.ReadResponse<List<NSSgvV3>> = callWrapper(dispatcher) {
val response = api.getSgvsNewerThan(from, limit)
if (response.isSuccessful) {
return@callWrapper NSAndroidClient.ReadResponse(code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = 0, values = response.body()?.result?.map(RemoteEntry::toSgv).toNotNull())
} else {
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}
override suspend fun createSvg(nsSgvV3: NSSgvV3): CreateUpdateResponse = callWrapper(dispatcher) {
@ -168,15 +176,22 @@ class NSAndroidClientImpl(
// because utcOffset is mandatory and cannot be change, try 0
nsSgvV3.utcOffset = 0
return@callWrapper createSvg(nsSgvV3)
} else if (response.code() == 400 && errorResponse?.contains("Field utcOffset cannot be modified by the client") == true) {
// there is different utcOffset than in AAPS and zero
} else if (response.code() == 400 && errorResponse?.contains("cannot be modified by the client") == true) {
// there is different field to field in AAPS
// not possible to upload
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = errorResponse
)
} else throw UnknownResponseNightscoutException()
} else if (response.code() in 400..499) {
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = errorResponse ?: response.message()
)
} else
throw UnsuccessfullNightscoutException(errorResponse ?: response.message())
}
override suspend fun updateSvg(nsSgvV3: NSSgvV3): CreateUpdateResponse = callWrapper(dispatcher) {
@ -205,32 +220,41 @@ class NSAndroidClientImpl(
deduplicatedIdentifier = null,
lastModified = null
)
} else {
throw UnsuccessfullNightscoutException()
}
} else if (response.code() in 400..499) {
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = response.errorBody()?.string() ?: response.message()
)
} else
throw UnsuccessfullNightscoutException(response.errorBody()?.string() ?: response.message())
}
override suspend fun getTreatmentsNewerThan(createdAt: String, limit: Long): NSAndroidClient.ReadResponse<List<NSTreatment>> = callWrapper(dispatcher) {
override suspend fun getTreatmentsNewerThan(createdAt: String, limit: Int): NSAndroidClient.ReadResponse<List<NSTreatment>> = callWrapper(dispatcher) {
val response = api.getTreatmentsNewerThan(createdAt, limit)
if (response.isSuccessful) {
return@callWrapper NSAndroidClient.ReadResponse(code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = 0, values = response.body()?.result?.map(RemoteTreatment::toTreatment).toNotNull())
} else {
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}
override suspend fun getTreatmentsModifiedSince(from: Long, limit: Long): NSAndroidClient.ReadResponse<List<NSTreatment>> = callWrapper(dispatcher) {
override suspend fun getTreatmentsModifiedSince(from: Long, limit: Int): NSAndroidClient.ReadResponse<List<NSTreatment>> = callWrapper(dispatcher) {
val response = api.getTreatmentsModifiedSince(from, limit)
if (response.isSuccessful) {
val eTagString = response.headers()["ETag"]
val eTag = eTagString?.substring(3, eTagString.length - 1)?.toLong()
return@callWrapper NSAndroidClient.ReadResponse(code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = eTag, values = response.body()?.result?.map
(RemoteTreatment::toTreatment).toNotNull())
} else {
return@callWrapper NSAndroidClient.ReadResponse(
code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = eTag, values = response.body()?.result?.map
(RemoteTreatment::toTreatment).toNotNull()
)
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}
override suspend fun getDeviceStatusModifiedSince(from: Long): List<NSDeviceStatus> = callWrapper(dispatcher) {
@ -238,9 +262,10 @@ class NSAndroidClientImpl(
val response = api.getDeviceStatusModifiedSince(from)
if (response.isSuccessful) {
return@callWrapper response.body()?.result?.map(RemoteDeviceStatus::toNSDeviceStatus).toNotNull()
} else {
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}
override suspend fun createDeviceStatus(nsDeviceStatus: NSDeviceStatus): CreateUpdateResponse = callWrapper(dispatcher) {
@ -266,9 +291,14 @@ class NSAndroidClientImpl(
lastModified = response.body()?.result?.lastModified
)
} else throw UnknownResponseNightscoutException()
} else {
throw UnsuccessfullNightscoutException()
}
} else if (response.code() in 400..499) {
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = response.errorBody()?.string() ?: response.message()
)
} else
throw UnsuccessfullNightscoutException(response.errorBody()?.string() ?: response.message())
}
override suspend fun createTreatment(nsTreatment: NSTreatment): CreateUpdateResponse = callWrapper(dispatcher) {
@ -296,15 +326,22 @@ class NSAndroidClientImpl(
// because utcOffset is mandatory and cannot be change, try 0
nsTreatment.utcOffset = 0
return@callWrapper createTreatment(nsTreatment)
} else if (response.code() == 400 && errorResponse?.contains("Field utcOffset cannot be modified by the client") == true) {
// there is different utcOffset than in AAPS and zero
} else if (response.code() == 400 && errorResponse?.contains("cannot be modified by the client") == true) {
// there is different field to field in AAPS
// not possible to upload
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = errorResponse
)
} else throw UnknownResponseNightscoutException()
} else if (response.code() in 400..499) {
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = errorResponse ?: response.message()
)
} else
throw UnsuccessfullNightscoutException(errorResponse ?: response.message())
}
override suspend fun updateTreatment(nsTreatment: NSTreatment): CreateUpdateResponse = callWrapper(dispatcher) {
@ -333,23 +370,29 @@ class NSAndroidClientImpl(
deduplicatedIdentifier = null,
lastModified = null
)
} else {
throw UnsuccessfullNightscoutException()
}
} else if (response.code() in 400..499) {
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = response.errorBody()?.string() ?: response.message()
)
} else
throw UnsuccessfullNightscoutException(response.errorBody()?.string() ?: response.message())
}
override suspend fun getFoods(limit: Long): NSAndroidClient.ReadResponse<List<NSFood>> = callWrapper(dispatcher) {
override suspend fun getFoods(limit: Int): NSAndroidClient.ReadResponse<List<NSFood>> = callWrapper(dispatcher) {
val response = api.getFoods(limit)
if (response.isSuccessful) {
return@callWrapper NSAndroidClient.ReadResponse(code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = 0, values = response.body()?.result?.map(RemoteFood::toNSFood).toNotNull())
} else {
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}
/*
override suspend fun getFoodsModifiedSince(from: Long, limit: Long): NSAndroidClient.ReadResponse<List<NSFood>> = callWrapper(dispatcher) {
override suspend fun getFoodsModifiedSince(from: Long, limit: Int): NSAndroidClient.ReadResponse<List<NSFood>> = callWrapper(dispatcher) {
val response = api.getFoodsModifiedSince(from, limit)
val eTagString = response.headers()["ETag"]
@ -384,9 +427,14 @@ class NSAndroidClientImpl(
lastModified = response.body()?.result?.lastModified
)
} else throw UnsuccessfullNightscoutException()
} else {
throw UnsuccessfullNightscoutException()
}
} else if (response.code() in 400..499) {
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = response.errorBody()?.string() ?: response.message()
)
} else
throw UnsuccessfullNightscoutException(response.errorBody()?.string() ?: response.message())
}
override suspend fun updateFood(nsFood: NSFood): CreateUpdateResponse = callWrapper(dispatcher) {
@ -412,9 +460,14 @@ class NSAndroidClientImpl(
deduplicatedIdentifier = null,
lastModified = null
)
} else {
throw UnsuccessfullNightscoutException()
}
} else if (response.code() in 400..499) {
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = response.errorBody()?.string() ?: response.message()
)
} else
throw UnsuccessfullNightscoutException(response.errorBody()?.string() ?: response.message())
}
override suspend fun createProfileStore(remoteProfileStore: JSONObject): CreateUpdateResponse = callWrapper(dispatcher) {
@ -438,9 +491,14 @@ class NSAndroidClientImpl(
lastModified = response.body()?.result?.lastModified
)
} else throw UnsuccessfullNightscoutException()
} else {
throw UnsuccessfullNightscoutException()
}
} else if (response.code() in 400..499) {
return@callWrapper CreateUpdateResponse(
response = response.code(),
identifier = null,
errorResponse = response.errorBody()?.string() ?: response.message()
)
} else
throw UnsuccessfullNightscoutException(response.errorBody()?.string() ?: response.message())
}
override suspend fun getLastProfileStore(): NSAndroidClient.ReadResponse<List<JSONObject>> = callWrapper(dispatcher) {
@ -450,9 +508,24 @@ class NSAndroidClientImpl(
val eTagString = response.headers()["ETag"]
val eTag = eTagString?.substring(3, eTagString.length - 1)?.toLong()
return@callWrapper NSAndroidClient.ReadResponse(code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = eTag, values = response.body()?.result.toNotNull())
} else {
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
override suspend fun getProfileModifiedSince(from: Long): NSAndroidClient.ReadResponse<List<JSONObject>> = callWrapper(dispatcher) {
val response = api.getProfileModifiedSince(from)
if (response.isSuccessful) {
val eTagString = response.headers()["ETag"]
val eTag = eTagString?.substring(3, eTagString.length - 1)?.toLong()
return@callWrapper NSAndroidClient.ReadResponse(code = response.raw().networkResponse?.code ?: response.code(), lastServerModified = eTag, values = response.body()?.result.toNotNull())
} else if (response.code() in 400..499)
throw InvalidParameterNightscoutException(response.errorBody()?.string() ?: response.message())
else
throw UnsuccessfullNightscoutException()
}
}

View file

@ -1,3 +1,9 @@
package info.nightscout.sdk.exceptions
class InvalidFormatNightscoutException : NightscoutException()
@Suppress("unused")
class InvalidFormatNightscoutException : NightscoutException {
constructor() : super()
constructor(message: String) : super(message)
constructor(message: String, cause: Throwable) : super(message, cause)
constructor(cause: Throwable?) : super(cause)
}

View file

@ -0,0 +1,9 @@
package info.nightscout.sdk.exceptions
@Suppress("unused")
class InvalidParameterNightscoutException : NightscoutException {
constructor() : super()
constructor(message: String) : super(message)
constructor(message: String, cause: Throwable) : super(message, cause)
constructor(cause: Throwable?) : super(cause)
}

View file

@ -1,3 +1,8 @@
package info.nightscout.sdk.exceptions
class UnsuccessfullNightscoutException : NightscoutException()
class UnsuccessfullNightscoutException : NightscoutException {
constructor() : super()
constructor(message: String) : super(message)
constructor(message: String, cause: Throwable) : super(message, cause)
constructor(cause: Throwable?) : super(cause)
}

View file

@ -23,25 +23,26 @@ interface NSAndroidClient {
suspend fun getLastModified(): LastModified
suspend fun getSgvs(): ReadResponse<List<NSSgvV3>>
suspend fun getSgvsModifiedSince(from: Long, limit: Long): ReadResponse<List<NSSgvV3>>
suspend fun getSgvsNewerThan(from: Long, limit: Long): ReadResponse<List<NSSgvV3>>
suspend fun getSgvsModifiedSince(from: Long, limit: Int): ReadResponse<List<NSSgvV3>>
suspend fun getSgvsNewerThan(from: Long, limit: Int): ReadResponse<List<NSSgvV3>>
suspend fun createSvg(nsSgvV3: NSSgvV3): CreateUpdateResponse
suspend fun updateSvg(nsSgvV3: NSSgvV3): CreateUpdateResponse
suspend fun getTreatmentsNewerThan(createdAt: String, limit: Long): ReadResponse<List<NSTreatment>>
suspend fun getTreatmentsModifiedSince(from: Long, limit: Long): ReadResponse<List<NSTreatment>>
suspend fun getTreatmentsNewerThan(createdAt: String, limit: Int): ReadResponse<List<NSTreatment>>
suspend fun getTreatmentsModifiedSince(from: Long, limit: Int): ReadResponse<List<NSTreatment>>
suspend fun createDeviceStatus(nsDeviceStatus: NSDeviceStatus): CreateUpdateResponse
suspend fun getDeviceStatusModifiedSince(from: Long): List<NSDeviceStatus>
suspend fun createProfileStore(remoteProfileStore: JSONObject): CreateUpdateResponse
suspend fun getProfileModifiedSince(from: Long): ReadResponse<List<JSONObject>>
suspend fun getLastProfileStore(): ReadResponse<List<JSONObject>>
suspend fun createTreatment(nsTreatment: NSTreatment): CreateUpdateResponse
suspend fun updateTreatment(nsTreatment: NSTreatment): CreateUpdateResponse
suspend fun getFoods(limit: Long): ReadResponse<List<NSFood>>
suspend fun getFoods(limit: Int): ReadResponse<List<NSFood>>
//suspend fun getFoodsModifiedSince(from: Long, limit: Long): ReadResponse<List<NSFood>>
//suspend fun getFoodsModifiedSince(from: Long, limit: Int): ReadResponse<List<NSFood>>
suspend fun createFood(nsFood: NSFood): CreateUpdateResponse
suspend fun updateFood(nsFood: NSFood): CreateUpdateResponse
}

View file

@ -22,6 +22,7 @@ data class NSDeviceStatus(
val createdAt: String? = null, // string 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("date") val date: Long?, // date as milliseconds
@SerializedName("uploaderBattery") val uploaderBattery: Int?,// integer($int64)
@SerializedName("isCharging") val isCharging: Boolean?,
@SerializedName("device") val device: String?, // "openaps://samsung SM-G970F"
@SerializedName("uploader") val uploader: Uploader?,
@ -57,7 +58,7 @@ data class NSDeviceStatus(
)
@Serializable data class Uploader(
@SerializedName("battery") val battery: Int?,
@SerializedName("battery") val battery: Int?
)
@Serializable data class Configuration(

View file

@ -17,6 +17,7 @@ internal fun RemoteDeviceStatus.toNSDeviceStatus(): NSDeviceStatus =
createdAt = createdAt,
date = date,
uploaderBattery = uploaderBattery,
isCharging = isCharging,
device = device,
uploader = NSDeviceStatus.Uploader(uploader?.battery),
pump = pump?.toNSDeviceStatusPump(),
@ -33,6 +34,7 @@ internal fun NSDeviceStatus.toRemoteDeviceStatus(): RemoteDeviceStatus =
createdAt = createdAt,
date = date,
uploaderBattery = uploaderBattery,
isCharging = isCharging,
device = device,
uploader = RemoteDeviceStatus.Uploader(uploader?.battery),
pump = pump?.toRemoteDeviceStatusPump(),

View file

@ -19,19 +19,22 @@ internal object NetworkStackBuilder {
baseUrl: String,
context: Context,
accessToken: String, // refresh token
logging: Boolean = false
logging: Boolean,
logger: HttpLoggingInterceptor.Logger
): NightscoutRemoteService = getRetrofit(
baseUrl = baseUrl,
context = context,
refreshToken = accessToken,
logging = logging
logging = logging,
logger = logger
).create(NightscoutRemoteService::class.java)
private fun getRetrofit(
baseUrl: String,
context: Context,
refreshToken: String,
logging: Boolean
logging: Boolean,
logger: HttpLoggingInterceptor.Logger
): Retrofit =
Retrofit.Builder()
.baseUrl("https://$baseUrl/api/")
@ -40,7 +43,8 @@ internal object NetworkStackBuilder {
context = context,
logging = logging,
refreshToken = refreshToken,
authRefreshRetrofit = getAuthRefreshRetrofit(baseUrl, context, logging)
authRefreshRetrofit = getAuthRefreshRetrofit(baseUrl, context, logging, logger),
logger = logger
)
)
.addConverterFactory(GsonConverterFactory.create(provideGson()))
@ -49,11 +53,12 @@ internal object NetworkStackBuilder {
private fun getAuthRefreshRetrofit(
baseUrl: String,
context: Context,
logging: Boolean
logging: Boolean,
logger: HttpLoggingInterceptor.Logger
): Retrofit =
Retrofit.Builder()
.baseUrl("https://$baseUrl/api/")
.client(getAuthRefreshOkHttpClient(context = context, logging = logging))
.client(getAuthRefreshOkHttpClient(context = context, logging = logging, logger = logger))
.addConverterFactory(GsonConverterFactory.create(provideGson()))
.build()
@ -61,24 +66,27 @@ internal object NetworkStackBuilder {
context: Context,
logging: Boolean,
refreshToken: String,
authRefreshRetrofit: Retrofit
authRefreshRetrofit: Retrofit,
logger: HttpLoggingInterceptor.Logger
): OkHttpClient = OkHttpClient.Builder().run {
addInterceptor(NSAuthInterceptor(refreshToken, authRefreshRetrofit))
commonOkHttpSetup(logging, context)
commonOkHttpSetup(logging, context, logger)
}
private fun getAuthRefreshOkHttpClient(
context: Context,
logging: Boolean,
): OkHttpClient = OkHttpClient.Builder().run { commonOkHttpSetup(logging, context) }
logger: HttpLoggingInterceptor.Logger
): OkHttpClient = OkHttpClient.Builder().run { commonOkHttpSetup(logging, context, logger) }
private fun OkHttpClient.Builder.commonOkHttpSetup(
logging: Boolean,
context: Context
context: Context,
logger: HttpLoggingInterceptor.Logger
): OkHttpClient {
if (logging) {
addNetworkInterceptor(
HttpLoggingInterceptor().also { it.level = HttpLoggingInterceptor.Level.BODY }
HttpLoggingInterceptor(logger).also { it.level = HttpLoggingInterceptor.Level.BODY }
)
}
cache(Cache(context.cacheDir, OK_HTTP_CACHE_SIZE))

View file

@ -42,10 +42,10 @@ internal interface NightscoutRemoteService {
suspend fun getSgvs(): Response<NSResponse<List<RemoteEntry>>>
@GET("v3/entries")
suspend fun getSgvsNewerThan(@Query(value = "date\$gt", encoded = true) date: Long, @Query("limit") limit: Long): Response<NSResponse<List<RemoteEntry>>>
suspend fun getSgvsNewerThan(@Query(value = "date\$gt", encoded = true) date: Long, @Query("limit") limit: Int): Response<NSResponse<List<RemoteEntry>>>
@GET("v3/entries/history/{from}")
suspend fun getSgvsModifiedSince(@Path("from") from: Long, @Query("limit") limit: Long): Response<NSResponse<List<RemoteEntry>>>
suspend fun getSgvsModifiedSince(@Path("from") from: Long, @Query("limit") limit: Int): Response<NSResponse<List<RemoteEntry>>>
@POST("v3/entries")
suspend fun createEntry(@Body remoteEntry: RemoteEntry): Response<NSResponse<RemoteCreateUpdateResponse>>
@ -57,10 +57,10 @@ internal interface NightscoutRemoteService {
suspend fun deleteEntry(@Path("identifier") identifier: String): Response<NSResponse<RemoteCreateUpdateResponse>>
@GET("v3/treatments")
suspend fun getTreatmentsNewerThan(@Query(value = "created_at\$gt", encoded = true) createdAt: String, @Query("limit") limit: Long): Response<NSResponse<List<RemoteTreatment>>>
suspend fun getTreatmentsNewerThan(@Query(value = "created_at\$gt", encoded = true) createdAt: String, @Query("limit") limit: Int): Response<NSResponse<List<RemoteTreatment>>>
@GET("v3/treatments/history/{from}")
suspend fun getTreatmentsModifiedSince(@Path("from") from: Long, @Query("limit") limit: Long): Response<NSResponse<List<RemoteTreatment>>>
suspend fun getTreatmentsModifiedSince(@Path("from") from: Long, @Query("limit") limit: Int): Response<NSResponse<List<RemoteTreatment>>>
@POST("v3/treatments")
suspend fun createTreatment(@Body remoteTreatment: RemoteTreatment): Response<NSResponse<RemoteCreateUpdateResponse>>
@ -78,11 +78,11 @@ internal interface NightscoutRemoteService {
suspend fun getDeviceStatusModifiedSince(@Path("from") from: Long): Response<NSResponse<List<RemoteDeviceStatus>>>
@GET("v3/food")
suspend fun getFoods(@Query("limit") limit: Long): Response<NSResponse<List<RemoteFood>>>
suspend fun getFoods(@Query("limit") limit: Int): Response<NSResponse<List<RemoteFood>>>
/*
@GET("v3/food/history/{from}")
suspend fun getFoodsModifiedSince(@Path("from") from: Long, @Query("limit") limit: Long): Response<NSResponse<List<RemoteFood>>>
suspend fun getFoodsModifiedSince(@Path("from") from: Long, @Query("limit") limit: Int): Response<NSResponse<List<RemoteFood>>>
*/
@POST("v3/food")
suspend fun createFood(@Body remoteFood: RemoteFood): Response<NSResponse<RemoteCreateUpdateResponse>>
@ -93,9 +93,14 @@ internal interface NightscoutRemoteService {
@DELETE("v3/food")
suspend fun deleteFood(@Path("identifier") identifier: String): Response<NSResponse<RemoteCreateUpdateResponse>>
@GET("v3/profile/history/{from}")
suspend fun getProfileModifiedSince(@Path("from") from: Long, @Query("limit") limit: Int = 10): Response<NSResponse<List<JSONObject>>>
@GET("v3/profile?sort\$desc=date&limit=1")
suspend fun getLastProfile(): Response<NSResponse<List<JSONObject>>>
@POST("v3/profile")
suspend fun createProfile(@Body profile: JsonObject): Response<NSResponse<RemoteCreateUpdateResponse>>

View file

@ -22,6 +22,7 @@ internal data class RemoteDeviceStatus(
val createdAt: String? = null, // string 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("date") val date: Long?, // date as milliseconds
@SerializedName("uploaderBattery") val uploaderBattery: Int?,// integer($int64)
@SerializedName("isCharging") val isCharging: Boolean?,
@SerializedName("device") val device: String?, // "openaps://samsung SM-G970F"
@SerializedName("uploader") val uploader: Uploader?,
@ -57,7 +58,7 @@ internal data class RemoteDeviceStatus(
)
@Serializable data class Uploader(
@SerializedName("battery") val battery: Int?,
@SerializedName("battery") val battery: Int?
)
@Serializable data class Configuration(

View file

@ -258,6 +258,7 @@
<string name="nav_plugin_preferences">Plugin voorkeure</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Vermiste SMS toestemming</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dae</item>
<item quantity="other">%1$d dae</item>

View file

@ -316,6 +316,7 @@
<string name="nav_plugin_preferences">Настройки на модул</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">SMS команда забранена</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d дeн</item>
<item quantity="other">%1$d дни</item>

View file

@ -421,6 +421,7 @@
<string name="nav_plugin_preferences">Configuració plugin</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Falta permís SMS</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dia</item>
<item quantity="other">%1$d dies</item>

View file

@ -555,6 +555,10 @@
<string name="nav_plugin_preferences">Nastavení pluginu</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Chybějící povolení SMS</string>
<!-- About -->
<string name="cta_dont_kill_my_app_info">Nezabíjet mou aplikaci?</string>
<string name="fabric_upload_disabled">Nahrávání protokolů o pádech zakázáno!</string>
<string name="about_link_urls">\n\nDokumentace:\nhttps://wiki.aaps.app\n\nFacebook:\nhttps://www.facebook.com/groups/AndroidAPSUsers</string>
<plurals name="days">
<item quantity="one">%1$d den</item>
<item quantity="few">%1$d dnů</item>

View file

@ -523,6 +523,7 @@
<string name="nav_plugin_preferences">Plugin indstillinger</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Manglende sms tilladelse</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dag</item>
<item quantity="other">%1$d dage</item>

View file

@ -555,6 +555,10 @@
<string name="nav_plugin_preferences">Plugin-Einstellungen</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">SMS-Steuerung nicht erlaubt</string>
<!-- About -->
<string name="cta_dont_kill_my_app_info">Meine App nicht beenden?</string>
<string name="fabric_upload_disabled">Absturzprotokolle hochladen deaktiviert!</string>
<string name="about_link_urls">\n\nDokumentation:\nhttps://wiki.aaps.app\n\nFacebook:\nhttps://www.facebook.com/groups/AndroidAPSUsers</string>
<plurals name="days">
<item quantity="one">%1$d Tag</item>
<item quantity="other">%1$d Tage</item>

View file

@ -266,6 +266,7 @@
<string name="nav_plugin_preferences">Επιλογές προσθήκης</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Απουσία δικαιωμάτων SMS</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d ημέρες</item>
<item quantity="other">%1$d ημέρες</item>

View file

@ -17,7 +17,7 @@
<string name="bolus_delivered_successfully">Bolo %1$.2fU entregado correctamente</string>
<string name="no_valid_basal_rate">Tasa basal no válida leída en la bomba</string>
<string name="limiting_iob">Limitando IOB a %1$.1f U debido a %2$s</string>
<string name="loop_disabled">BUCLE DESACTIVADO POR RESTRICCIONES</string>
<string name="loop_disabled">LAZO DESACTIVADO POR RESTRICCIONES</string>
<string name="event_type">Tipo de evento</string>
<string name="reload">Recargar</string>
<string name="mgdl">mg/dl</string>
@ -86,12 +86,12 @@
<string name="pump_time_updated">Hora actualizada en la bomba</string>
<string name="exit">Salir</string>
<string name="removerecord">Eliminar registro</string>
<string name="loopisdisabled">Bucle desactivado</string>
<string name="loopisdisabled">Lazo desactivado</string>
<string name="alarm">Alarma</string>
<string name="disableloop">Desactivar bucle</string>
<string name="enableloop">Activar bucle</string>
<string name="resumeloop">Reanudar el bucle</string>
<string name="suspendloop">Suspender bucle</string>
<string name="disableloop">Desactivar lazo</string>
<string name="enableloop">Activar lazo</string>
<string name="resumeloop">Reanudar el lazo</string>
<string name="suspendloop">Suspender lazo</string>
<string name="duration_min_label">Duración [min]</string>
<string name="notification">Notificación</string>
<string name="noprofile">Ningún perfil cargado desde Nightscout</string>
@ -118,7 +118,7 @@
<string name="shortgramm">g</string>
<string name="pumpsuspended">Bomba parada</string>
<string name="notconfigured">Sin configurar</string>
<string name="loopsuspended">Bucle suspendido</string>
<string name="loopsuspended">Lazo suspendido</string>
<string name="trend_arrow">Flecha de tendencia</string>
<string name="a11y_autosens_label">Auto sens</string>
<string name="required">req</string>
@ -156,8 +156,8 @@
<string name="prime_fill">Cebar/Llenar</string>
<string name="overview_insulin_label">Insulina</string>
<string name="stoptemptarget">Detener objetivo temporal</string>
<string name="closedloop">Bucle cerrado</string>
<string name="openloop">Bucle abierto</string>
<string name="closedloop">Lazo cerrado</string>
<string name="openloop">Lazo abierto</string>
<string name="lowglucosesuspend">Suspensión por glucosa baja (LGS)</string>
<string name="dia">DIA</string>
<string name="ic_short">IC</string>
@ -165,7 +165,7 @@
<string name="canceling_tbr_failed">Error cancelando la basal temporal</string>
<string name="canceling_eb_failed">Error cancelando el bolo extendido</string>
<string name="virtualpump_uploadstatus_title">Subir estado a Nightscout</string>
<string name="suspendloop_label">Desactiva/suspende el bucle</string>
<string name="suspendloop_label">Desactiva/suspende el lazo</string>
<string name="iob_label">Insulina a bordo (IOB)</string>
<!-- Protection-->
<string name="wrongpassword">Contraseña incorrecta</string>
@ -234,7 +234,7 @@
<string name="wear">Reloj</string>
<string name="automation">Automatización</string>
<string name="custom">Personalizado</string>
<string name="loop">Bucle</string>
<string name="loop">Lazo</string>
<string name="ns">NS</string>
<string name="record">Registro</string>
<!-- Command-->
@ -278,11 +278,11 @@
<string name="uel_store_profile">GUARDAR PERFIL</string>
<string name="uel_profile_switch">CAMBIO DE PERFIL</string>
<string name="uel_profile_switch_cloned">CAMBIO DE PERFIL CLONADO</string>
<string name="uel_closed_loop_mode">MODO BUCLE CERRADO</string>
<string name="uel_lgs_loop_mode">MODO BUCLE LGS</string>
<string name="uel_open_loop_mode">MODO BUCLEABIERTO</string>
<string name="uel_loop_disabled">BUCLE DESACTIVADO</string>
<string name="uel_loop_enabled">BUCLE ACTIVADO</string>
<string name="uel_closed_loop_mode">MODO LAZO CERRADO</string>
<string name="uel_lgs_loop_mode">MODO LAZO LGS</string>
<string name="uel_open_loop_mode">MODO LAZO ABIERTO</string>
<string name="uel_loop_disabled">LAZO DESACTIVADO</string>
<string name="uel_loop_enabled">LAZO ACTIVADO</string>
<string name="uel_reconnect">RECONECTAR</string>
<string name="uel_disconnect">DESCONECTAR</string>
<string name="uel_resume">REANUDAR</string>
@ -353,8 +353,8 @@
<string name="ue_action">Acción</string>
<string name="ue_timestamp">Fecha y hora</string>
<string name="ue_none">Sin Unidad</string>
<string name="uel_loop_change">BUCLE CAMBIADO</string>
<string name="uel_loop_removed">BUCLE ELIMINADO</string>
<string name="uel_loop_change">LAZO CAMBIADO</string>
<string name="uel_loop_removed">LAZO ELIMINADO</string>
<string name="uel_other">OTROS</string>
<!-- HardLimits -->
<string name="profile_low_target">Perfil de objetivo bajo</string>
@ -555,6 +555,10 @@
<string name="nav_plugin_preferences">Preferencias del complemento</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Faltan permisos de SMS</string>
<!-- About -->
<string name="cta_dont_kill_my_app_info">¿No matar mi aplicación?</string>
<string name="fabric_upload_disabled">¡Carga de registros de fallos desactivada!</string>
<string name="about_link_urls">\n\nDocumentación:\nhttps://wiki.aaps.app\n\nFacebook:\nhttps://www.facebook.com/groups/AndroidAPSUsers</string>
<plurals name="days">
<item quantity="one">%1$d día</item>
<item quantity="other">%1$d días</item>

View file

@ -555,6 +555,7 @@
<string name="nav_plugin_preferences">Préférences du plugin</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Autorisation SMS manquante</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d jour</item>
<item quantity="other">%1$d jours</item>

View file

@ -161,6 +161,7 @@
<!-- BlePreCheck-->
<!-- Preferences -->
<!-- SmsCommunicator -->
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d lá</item>
<item quantity="two">%1$d lá</item>

View file

@ -312,6 +312,7 @@
<!-- Preferences -->
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Nedostaje dopuštenje za SMS</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dan</item>
<item quantity="few">%1$d dana</item>

View file

@ -133,6 +133,7 @@
<!-- BlePreCheck-->
<!-- Preferences -->
<!-- SmsCommunicator -->
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d nap</item>
<item quantity="other">%1$d nap</item>

View file

@ -529,6 +529,7 @@
<string name="nav_plugin_preferences">Preferenze plugin</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Autorizzazione SMS mancante</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d giorno</item>
<item quantity="other">%1$d giorni</item>

View file

@ -525,6 +525,7 @@
<string name="nav_plugin_preferences">העדפות תוסף</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">הרשאות SMS חסרות</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d יום</item>
<item quantity="two">%1$d ימים</item>

View file

@ -111,4 +111,5 @@
<!-- BlePreCheck-->
<!-- Preferences -->
<!-- SmsCommunicator -->
<!-- About -->
</resources>

View file

@ -408,6 +408,7 @@
<string name="nav_plugin_preferences">플러그인 설정</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">SMS 권한 누락</string>
<!-- About -->
<plurals name="days">
<item quantity="other">%1$d 일</item>
</plurals>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="biometric_title">Reikalingas tapatybės nustatymas</string>
<string name="biometric_description">Uždėkite pirštą ant pirštų atspaudų skaitytuvo jūsų tapatybės patvirtinimui</string>
<string name="biometric_title">Reikalinga autentifikacija</string>
<string name="biometric_description">Uždėkite pirštą ant pirštų atspaudų skaitytuvo tapatybės patvirtinimui</string>
<string name="settings_protection">Nustatymų apsauga</string>
<string name="application_protection">Programos apsauga</string>
<string name="bolus_protection">Bolusų apsauga</string>
@ -13,7 +13,7 @@
<string name="bolus_pin">Boluso PIN</string>
<string name="protection_timeout_title">Slaptažodžio ir PIN įvedimo laikas [s]</string>
<string name="protection_timeout_summary">Laikas, per kurį turi būti įvestas slaptažodis ar PIN kodas</string>
<string name="biometric">Biometriniai</string>
<string name="biometric">Biometrika</string>
<string name="custom_password">Pasirinktinis slaptažodis</string>
<string name="custom_pin">Pasirinktinis PIN</string>
<string name="noprotection">Apsaugos nėra</string>

View file

@ -14,8 +14,9 @@
<string name="pump_base_basal_rate">%1$.2f vv/val</string>
<string name="pump_not_initialized_profile_not_set">Pompa neprijungta, profilis nepasirinktas!</string>
<string name="failed_update_basal_profile">Nepavyko atnaujinti bazės profilio</string>
<string name="no_valid_basal_rate">Jokio tinkamo bazės kiekio nenuskaityta iš pompos</string>
<string name="limiting_iob">Ribojamas AIO iki %1$.1f V dėl %2$s</string>
<string name="bolus_delivered_successfully">%1$.2f v bolusas sėkmingai suleistas</string>
<string name="no_valid_basal_rate">Bazė iš pompos nenuskaityta</string>
<string name="limiting_iob">Ribojamas AIO iki %1$.1f v dėl %2$s</string>
<string name="loop_disabled">CIKLAS NEAKTYVUS DĖL APRIBOJIMŲ</string>
<string name="event_type">Įvykio tipas</string>
<string name="reload">Atnaujinti</string>
@ -46,11 +47,13 @@
<string name="success">Atlikta</string>
<string name="advancedsettings_title">Papildomi nustatymai</string>
<string name="extendedbolusdeliveryerror">Ištęstinio boluso suleidimo klaida</string>
<string name="aps_mode_title">DKS režimas</string>
<string name="extended_bolus">Ištęstas bolusas</string>
<string name="paused">Pristabdyta</string>
<string name="tdd_total">BPD viso</string>
<string name="goingtodeliver">Bus suleista %1$.2f vv</string>
<string name="waitingforpump">Laukiama ryšio su pompa</string>
<string name="androidaps_start">AAPS paleista</string>
<string name="formatsignedinsulinunits">%1$+.2f vv</string>
<string name="format_carbs">%1$dg</string>
<string name="format_hours">%1$.2f val.</string>
@ -59,6 +62,8 @@
<string name="please_wait">Palaukite…</string>
<string name="stop">Stop</string>
<string name="carbs">Angliavandeniai</string>
<string name="invalid_profile">Netinkamas profilis!</string>
<string name="no_profile_set">Nenustatytas profilis</string>
<string name="active"><![CDATA[<Active>]]></string>
<string name="date">Data</string>
<string name="units_label">Vienetai</string>
@ -68,8 +73,10 @@
<string name="basal_label">VB</string>
<string name="target_label">Tikslas</string>
<string name="dia_long_label">Insulino veikimo trukmė</string>
<string name="ic_long_label">Insulino į angliavandenius santykis</string>
<string name="ic_long_label">Insulino ir angliavandenių santykis</string>
<string name="isf_long_label">Jautrumo insulinui faktorius</string>
<string name="basal_long_label">Valandinė bazė</string>
<string name="target_long_label">Tikslinė glikemija</string>
<string name="shortgram">g</string>
<string name="shortpercent">%</string>
<string name="bluetooth">Bluetooth</string>
@ -95,10 +102,12 @@
<string name="cob">AAO</string>
<string name="name_short">Vardas:</string>
<string name="time">Laikas</string>
<string name="ns_wifi_ssids">WiFi pavadinimas</string>
<string name="ns_wifi_ssids">WiFi SSID</string>
<string name="loading">Kraunama …</string>
<string name="notes_label">Pastabos</string>
<string name="remove_button">Pašalinti</string>
<string name="add_new">Pridėti naują</string>
<string name="addnew_above">Pridėti naują aukščiau</string>
<string name="wrong_pump_data">Duomenys gaunami iš kitos pompos. Pakeiskite pompos valdiklį.</string>
<string name="bg_label">KG</string>
<string name="calibration">Kalibravimas</string>
@ -111,51 +120,69 @@
<string name="notconfigured">Nesukonfigūruota</string>
<string name="loopsuspended">Ciklas sustabdytas</string>
<string name="trend_arrow">Tendencijos kryptis</string>
<string name="a11y_autosens_label">Auto sens</string>
<string name="required">reikal.</string>
<string name="a11y_arrow_double_down">greitai mažėja</string>
<string name="a11y_arrow_single_down">mažėja</string>
<string name="a11y_arrow_forty_five_down">lėtai mažėja</string>
<string name="a11y_arrow_flat">stabili</string>
<string name="a11y_arrow_forty_five_up">lėtai didėja</string>
<string name="a11y_arrow_single_up">didėja</string>
<string name="a11y_arrow_double_up">greitai didėja</string>
<string name="a11y_arrow_none">nėra</string>
<string name="a11y_arrow_unknown">nežinoma</string>
<string name="a11y_high">aukštas</string>
<string name="a11y_inrange">ribose</string>
<string name="a11y_low">žemas</string>
<string name="average">Vidutinis</string>
<string name="tir">TIR (Laikas normos ribose)</string>
<string name="average">Vidurkis</string>
<string name="tir">LNR</string>
<string name="none"><![CDATA[<none>]]></string>
<string name="remove_label">PAŠALINTI</string>
<string name="activate_profile">Aktyvuoti profilį</string>
<string name="reset">atstatyti</string>
<string name="profileswitch_ismissing">Neatliktas profilio keitimas. Prašome atlikti profilio keitimą arba paspausti \"Aktyvuoti profilį\" Vietinio profilio (VP) skiltyje.</string>
<string name="profile">Profilis</string>
<string name="select_for_removal">Pasirinkite pašalinimui</string>
<string name="confirm_remove_multiple_items">Ar tikrai norite pašalinti %1$d elementus</string>
<string name="overview_treatment_label">Terapija</string>
<string name="copytolocalprofile">Kurti naują profilį iš šito profilio?</string>
<string name="wear_wizard_settings">Išmaniojo laikrodžio nustatymai</string>
<string name="wear_wizard_settings">Vedlio nustatymai</string>
<string name="bg_trend_label">15 min tendencija</string>
<string name="treatments_wizard_cob_label">AAO</string>
<string name="bolus_iob_label">Bolusų AIO</string>
<string name="treatments_wizard_basaliob_label">Bazės AIO</string>
<string name="invalid">KLAIDA</string>
<string name="login">Prisijungti</string>
<string name="prime_fill">Užpildymas</string>
<string name="overview_insulin_label">Insulinas</string>
<string name="stoptemptarget">Sustabdykite laikiną tikslą</string>
<string name="stoptemptarget">Sustabdyti laikiną tikslą</string>
<string name="closedloop">Uždaras Ciklas</string>
<string name="openloop">Atviras Ciklas</string>
<string name="lowglucosesuspend">Sustabdymas esant žemai gliukozei</string>
<string name="dia">IVT</string>
<string name="ic_short">IA</string>
<string name="isf_short">JIF</string>
<string name="virtualpump_uploadstatus_title">Perduoti būsenos duomenis į NS</string>
<string name="canceling_tbr_failed">Laikinos bazės atšaukti nepavyko</string>
<string name="canceling_eb_failed">Ištęsto boluso atšaukti nepavyko</string>
<string name="virtualpump_uploadstatus_title">Įkelti duomenis į NS</string>
<string name="suspendloop_label">Ciklas išjungtas/sustabdytas</string>
<string name="iob_label">Aktyvus insulinas organizme (AIO)</string>
<!-- Protection-->
<string name="wrongpassword">Neteisingas slaptažodis</string>
<string name="wrongpin">Klaidingas PIN</string>
<string name="passwords_dont_match">Slaptažodžiai nesutampa</string>
<string name="pin_dont_match">PIN kodai nesutampa</string>
<!-- Profile-->
<string name="basalprofilenotaligned">Bazės reikšmės nesuderintos su valandomis: %1$s</string>
<string name="maximumbasalvaluereplaced">Valandinė bazė pakeista didžiausia palaikoma verte: %1$s</string>
<string name="profile_per_unit">/vv</string>
<string name="profile_ins_units_per_hour">Vv/val</string>
<string name="profile_carbs_per_unit">g/vv</string>
<string name="minimalbasalvaluereplaced">Nustatyta mažiausia galima valandinės bazės vertė: %1$s</string>
<string name="maximumbasalvaluereplaced">Nustatyta didžiausia galima valandinės bazės vertė: %1$s</string>
<string name="profile_per_unit">/v</string>
<string name="profile_ins_units_per_hour">v/val</string>
<string name="profile_carbs_per_unit">g/v</string>
<!-- ProfileFunction-->
<string name="startprofile">Pradėti profilį %1$d%% %2$d min</string>
<!-- APSResult-->
<string name="cancel_temp">Atšaukti laikiną bazę</string>
<string name="let_temp_basal_run">Paleisti laikinąją bazę</string>
<string name="rate">Vertė</string>
<string name="duration">Trukmė</string>
@ -177,9 +204,12 @@
<string name="careportal_note_message">Pastaba: %1$s</string>
<string name="careportal_question_message">Klausimas: %1$s</string>
<string name="careportal_exercise_message">Aktyvumas: %1$s</string>
<string name="careportal_pump_site_change">Kateterio keitimas</string>
<string name="cgm_sensor_insert">NGJ įvedimas</string>
<string name="careportal_cgmsensorstart">NGJ paleidimas</string>
<string name="careportal_cgm_sensor_stop">NGJ stabdymas</string>
<string name="careportal_dad_alert">D.A.D. įspėjimas</string>
<string name="careportal_insulin_cartridge_change">Rezervuaro keitimas</string>
<string name="careportal_profileswitch">Profilio keitimas</string>
<string name="careportal_snackbolus">Bolusas užkandžiui</string>
<string name="careportal_mealbolus">Bolusas valgiui</string>
@ -189,6 +219,8 @@
<string name="careportal_tempbasalend">Užbaigta laikina bazė</string>
<string name="careportal_carbscorrection">AV korekcijai</string>
<string name="careportal_openapsoffline">OpenAPS neprisijungus</string>
<string name="pump_battery_change">Baterijos keitimas</string>
<string name="temporary_target">Laikinas tikslas</string>
<string name="careportal_temporarytargetvalue">Laikino tikslo reikšmė</string>
<string name="careportal_temporarytargetcancel">Laikino tikslo atšaukimas</string>
<string name="boluswizard">Boluso patarėjas</string>
@ -215,7 +247,9 @@
<string name="waitingforpumpresult">Laukiama rezultato</string>
<string name="smb_shortname">SMB</string>
<!-- CarbsReq-->
<string name="carbsreq">Būtina suvartoti %1$d g papildomų AV per %2$d min</string>
<!-- TDDStatsActivity-->
<string name="cumulative_tdd">Kumuliacinė BPD</string>
<string name="expweight">Eksponentiškai svertinė BPD</string>
<string name="basalrate">Valandinė bazė</string>
<string name="bolus">Bolusas</string>
@ -224,6 +258,7 @@
<string name="amount_days"># d.</string>
<string name="weight">Svoris</string>
<string name="warning_Message">Duomenys netikslūs, jei bolusai naudojami kateterių užpildymui!</string>
<string name="olddata_Message">Duomenys seni, spauskite \"ATNAUJINTI\"</string>
<string name="tbb">Pagrindinė bazė (PB)</string>
<string name="tbb2">PB * 2</string>
<!-- Ntp-->
@ -296,9 +331,11 @@
<string name="uel_stat_reset">IŠVALYTI STATISTIKĄ</string>
<string name="uel_delete_logs">IŠTRINTI ĮRAŠUS</string>
<string name="uel_delete_future_treatments">IŠTRINTI ATEITIES TERAPIJĄ</string>
<string name="delete_future_treatments">Ištrinti ateities įrašus</string>
<string name="uel_export_settings">EKSPORTUOTI NUSTATYMUS</string>
<string name="uel_import_settings">IMPORTUOTI NUSTATYMUS</string>
<string name="uel_reset_databases">IŠVALYTI DUOMENŲ BAZES</string>
<string name="uel_cleanup_databases">IŠVALYTI DUOMBAZĘ</string>
<string name="uel_export_databases">EKSPORTUOTI DUOMENŲ BAZES</string>
<string name="uel_import_databases">IMPORTUOTI DUOMENŲ BAZES</string>
<string name="uel_otp_export">EKSPORTUOTI OTP</string>
@ -356,27 +393,97 @@
<string name="formatPercent">%1$.0f%%</string>
<string name="basal">Valandinė bazė</string>
<string name="basalpct">Valandinė bazė %</string>
<string name="a11y_file">failas</string>
<string name="a11y_user">vartotojas</string>
<!-- Autotune -->
<string name="autotune">Autotune</string>
<string name="autotune_description">Padeda patikslinti profilio nustatymus (JIF, IA ir bazę)</string>
<string name="autotune_shortname">AT</string>
<string name="autotune_settings">Autotune nustatymai</string>
<string name="autotune_auto_title">Automatizuotas profilio keitimas</string>
<string name="autotune_auto_summary">Įgalinus, Autotune automatiškai pakeis profilį kaip numatyta automatizacijos taisyklėje.</string>
<string name="autotune_categorize_uam_as_basal_title">NDM kategorizuoti kaip bazę</string>
<string name="autotune_categorize_uam_as_basal_summary">Įgalinkite tik jei visada suvedate angliavandenius. Įgalinus šią opciją staigius glikemijos pokyčius Autotune naudos bazės keitimo rekomendacijoms apskaičiuoti.</string>
<string name="autotune_tune_insulin_curve_title">Tikslinti insulino kreivę</string>
<string name="autotune_tune_insulin_curve_summary">Įgalinkite tik jei naudojate pasirinktinį insulino piką. Ši opcija leis Autotune patikslinti piką ir IVT</string>
<string name="autotune_default_tune_days_title">Dienų, kurių duomenys naudojami, skaičius</string>
<string name="autotune_circadian_ic_isf_title">Įrašyti vidutinį cirkadinių IA/JIF rezultatą</string>
<string name="autotune_circadian_ic_isf_summary">Autotune netikslins cirkadinių pokyčių, ši funkcija tik įrašys vidutinį IA ir JIF derinimo rezultatą į Jūsų cirkadinį profilį</string>
<string name="autotune_additional_log_title">Įtraukti daugiau įrašų kūrėjams</string>
<string name="autotune_additional_log_summary">Aktyvuokite tik jei gavote kūrėjų užklausą įtraukti daugiau informacijos Autotune įskiepio derinimui</string>
<string name="autotune_default_tune_days_summary">Numatytasis dienų, kurias Autotune turi apdoroti, skaičius (iki 30)</string>
<string name="autotune_tunedprofile_name">Suderintas</string>
<string name="autotune_profile">Profilis :</string>
<string name="autotune_tune_days">Dienų sk :</string>
<string name="autotune_last_run">Paskutinį kartą vykdyta :</string>
<string name="autotune_warning">Įspėjimas :</string>
<string name="autotune_select_profile">Pasirinkite profilį tikslinimui</string>
<string name="autotune_ic_warning">Pasirinktas profilis turi %1$d IA reikšmes(ių). Autotune naudos %2$.2f g/v</string>
<string name="autotune_isf_warning">Pasirinktas profilis turi %1$d JIF reikšmes(ių). Autotune naudos %2$.1f %3$s/v</string>
<string name="autotune_error">Klaida įkeliant duomenis. Paleiskite Autotune iš naujo arba sumažinkite dienų skaičių</string>
<string name="autotune_warning_during_run">Autotune skaičiuoja, turėkite kantrybės</string>
<string name="autotune_warning_after_run">Atidžiai patikrinkite rezultatus prieš juos naudodami!</string>
<string name="autotune_partial_result">Patikslinta %1$d / %2$d dienų</string>
<string name="autotune_result">Rezultatas: %1$s</string>
<string name="autotune_param">Param</string>
<string name="autotune_percent">%</string>
<string name="autotune_missing">Trūksta</string>
<string name="autotune_profile_name">Tikslinti profilį %1$s</string>
<string name="autotune_run">Paleisti Autotune</string>
<string name="autotune_check_input_profile_button">Patikrinti įkeliamą profilį</string>
<string name="autotune_compare_profile">Palyginti profilius</string>
<string name="autotune_copy_localprofile_button">Kopijuoti į vietinį profilį</string>
<string name="autotune_update_input_profile_button">Atnaujinti įkeliamą profilį</string>
<string name="autotune_revert_input_profile_button">Atstatyti įkeliamą profilį</string>
<string name="autotune_copy_local_profile_message">Kurti naują vietinį profilį iš Autotune profilio?</string>
<string name="autotune_update_local_profile_message">Atnaujinti %1$s profilį pagal Autotune profilį?</string>
<string name="autotune_revert_local_profile_message">Atstatyti %1$s profilį į įkeltą profilį?</string>
<string name="autotune_profile_invalid">Profilis negalioja</string>
<string name="autotune_run_without_autoswitch">Autotune veikė be profilio keitimo</string>
<string name="autotune_run_with_autoswitch">Autotune veikė ir profilis automatiškai pakeistas</string>
<string name="autotune_run_with_error">Paskutinio Autotune klaida</string>
<string name="autotune_run_cancelled">Nustatytas kitas Autotune veikimas, jis atšauktas</string>
<!-- Alerts -->
<string name="raise_notifications_as_android_notifications">Naudoti sistemos perspėjimus aliarmams ir įspėjimams</string>
<string name="urgent_alarm">Kritiniai perspėjimai</string>
<string name="info">INFO</string>
<!-- BolusWizard -->
<string name="bolus_advisor">Boluso patarėjas</string>
<string name="bolus_advisor_message">Jūsų glikemija yra aukšta. Užuot valgę dabar, turėtumėte palaukti, kol sumažės glikemija. Ar norite dabar susileisti korekcinį bolusą ir nustatyti priminimą, kada ateis laikas valgyti? Tokiu atveju angliavandeniai nebus įrašyti, o po priminimo turėsite vėl naudoti boluso skaičiuoklę.</string>
<string name="cobvsiob">AAO prieš AIO</string>
<string name="slowabsorptiondetected"><![CDATA[<font color=\'%1$s\'>!!!!! Nustatytas lėtas angliavandenių įsisavinimas: %2$d%% laiko. Dar karą patikrinkite savo skaičiavimus. AAO gali būti pervertinti, todėl gali būti suleista per daug insulino!!!!!</font>]]></string>
<string name="partialboluswizard">Suleisti šią boluso skaičiuoklės rezultato dalį [%]</string>
<string name="bolus_constraint_applied_warn">Pritaikytas boluso apribojimas: %1$.2f v iki %2$.2f v</string>
<string name="bolus_recorded_only">Bolusas bus tik įrašytas (nebus suleistas)</string>
<string name="advisoralarm">Pranešti apie laiką valgyti</string>
<string name="no_action_selected">Veiksmas nepasirinktas, nieko neįvyks</string>
<string name="wizard_no_actual_bg">Nėra naujausių cukraus duomenų, kuriais būtų galima pagrįsti skaičiavimus!</string>
<string name="wizard_no_active_profile">Neparinktas aktyvus profilis!</string>
<string name="wizard_no_cob">Nežinomi AAO! Nėra glikemijos duomenų arba programa paleista iš naujo?</string>
<string name="wizard_carbs_constraint">AV apribojimų pažeidimas!</string>
<string name="wizard_explain_calc">Kalk (IA: %1$.1f, JIF: %2$.1f)</string>
<string name="wizard_explain_carbs">AV: %1$.2fv</string>
<string name="wizard_explain_cob">AAO: %1$.0fg %2$.2fv</string>
<string name="wizard_explain_bg">KG: %1$.2fv</string>
<string name="wizard_explain_iob">AIO: %1$.2fv</string>
<string name="wizard_explain_superbolus">Superbolus: %1$.2fv</string>
<string name="wizard_explain_trend">15\' tendencija: %1$.2fv</string>
<string name="wizard_explain_percent">Procentaliai: %1$.2fv x %2$d%% ≈ %3$.2fv</string>
<string name="wizard_constraint_bolus_size">Insulino apribojimų pažeidimas!\nNesuleista %1$.2fv</string>
<string name="wizard_explain_tt">LT: %1$s</string>
<string name="wizard_explain_tt_to">%1$s į %2$s</string>
<string name="wizard_pump_not_available">Pompa nepasiekiama!</string>
<string name="quickwizard">Greitasis patarėjas</string>
<!-- Preferences-->
<string name="child">Vaikas</string>
<string name="teenage">Paauglys</string>
<string name="adult">Suaugęs</string>
<string name="pregnant">Nėštumas</string>
<string name="resistant_adult">Insulinui rezistentiškas suaugęs</string>
<string name="pregnant">Nėščioji</string>
<string name="patient_age_summary">Pasirinkite paciento tipą saugumo apribojimams nustatyti</string>
<string name="max_bolus_title">Maksimalus leistinas bolusas [U]</string>
<string name="max_carbs_title">Maks. leistini angliavandeniai [g]</string>
<string name="patient_type">Paciento tipas</string>
<!-- Protection-->
<string name="unlock_settings">Atrakinti nustatymus</string>
<!-- Pumps -->
@ -425,8 +532,11 @@
<string name="no">Ne</string>
<string name="close">Uždaryti</string>
<!-- TwoMessagesDialog -->
<string name="password_preferences_decrypt_prompt">Jūsų paprašys nustatyti slaptažodį, kuris bus naudojamas atšifruojant importuotus nustatymus.</string>
<string name="password_preferences_decrypt_prompt">Jūsų paprašys nustatyti slaptažodį, kuris bus naudojamas dešifruojant importuotus nustatymus.</string>
<!-- NumberPicker -->
<string name="a11y_min_button_description">sumažinimas %1$s per %2$s</string>
<string name="a11y_plus_button_description">padidinimas %1$s per %2$s</string>
<string name="you_are_on_allowed_limit">Pasiekta leistina riba</string>
<string name="format_hour_minute">%1$dh %2$dm</string>
<!-- datetime layout -->
<string name="event_time_label">Įvykio laikas</string>
@ -445,6 +555,7 @@
<string name="nav_plugin_preferences">Įskiepių nustatymai</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Trūksta leidimo SMS</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d d.</item>
<item quantity="few">%1$d d.</item>

View file

@ -540,6 +540,7 @@
<string name="nav_plugin_preferences">Plugin instellingen</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Geen SMS bevoegdheid</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dag</item>
<item quantity="other">%1$d dagen</item>

View file

@ -555,6 +555,7 @@
<string name="nav_plugin_preferences">Plugin innstillinger</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Mangler SMS-tillatelse</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dag</item>
<item quantity="other">%1$d dager</item>

View file

@ -6,15 +6,26 @@
<string name="application_protection">Ochrona aplikacji</string>
<string name="bolus_protection">Ochrona Bolusa</string>
<string name="settings_password">Hasło ustawień</string>
<string name="settings_pin">PIN ustawień</string>
<string name="application_password">Hasło aplikacji</string>
<string name="application_pin">PIN aplikacji</string>
<string name="bolus_password">Hasło bolusa</string>
<string name="bolus_pin">PIN bolusa</string>
<string name="protection_timeout_title">Podtrzymanie hasła i PINu [s]</string>
<string name="protection_timeout_summary">Po jakim czasie podanie hasła lub PINu jest ponownie wymagane</string>
<string name="biometric">Biometryczne</string>
<string name="custom_password">Hasło użytkownika</string>
<string name="custom_pin">Własny PIN</string>
<string name="noprotection">Bez ochrony</string>
<string name="unsecure_fallback_biometric">Niezabezpieczona funkcja fallback</string>
<string name="unsecure_fallback_descriotion_biometric">Aby być skuteczna, biometryczna ochrona musi posiadać hasło typu master. \n\n Ustaw hasło typu master!</string>
<string name="password_set">Hasło ustawione!</string>
<string name="pin_set">PIN został ustawiony!</string>
<string name="password_not_set">Hasło nie ustawione</string>
<string name="pin_not_set">PIN nie został ustawiony</string>
<string name="password_not_changed">Hasło nie zostało zmienione</string>
<string name="pin_not_changed">PIN nie został zmieniony</string>
<string name="pin_cleared">PIN został wyczyszczony!</string>
<string name="password_hint">Wpisz hasło tutaj</string>
<string name="pin_hint">Podaj PIN tutaj</string>
</resources>

View file

@ -14,6 +14,7 @@
<string name="pump_base_basal_rate">%1$.2f U/h</string>
<string name="pump_not_initialized_profile_not_set">Pompa nie zainicjowana, profil nie ustawiony!</string>
<string name="failed_update_basal_profile">Nieudane uaktualnienie profilu bazy</string>
<string name="bolus_delivered_successfully">Bolus %1$.2f U podany prawidłowo</string>
<string name="no_valid_basal_rate">Brak prawidłowej dawki bazowej odczytanej z pompy</string>
<string name="limiting_iob">Ograniczam IOB do %1$.1f U z uwagi na %2$s</string>
<string name="loop_disabled">PĘTLA WYLĄCZONA Z UWAGI NA OGRANICZENIA</string>
@ -46,11 +47,13 @@
<string name="success">Sukces</string>
<string name="advancedsettings_title">Ustawienia zaawansowane</string>
<string name="extendedbolusdeliveryerror">Błąd dostarczania bolusa przedłużonego</string>
<string name="aps_mode_title">Tryb APS</string>
<string name="extended_bolus">Bolus Przedłużony</string>
<string name="paused">Wstrzymano</string>
<string name="tdd_total">TDD Całkowita</string>
<string name="goingtodeliver">Zamierzam podać %1$.2f U</string>
<string name="waitingforpump">Czekam na pompę</string>
<string name="androidaps_start">AAPS uruchomiony</string>
<string name="formatsignedinsulinunits">%1$+.2f U</string>
<string name="format_carbs">%1$d g</string>
<string name="format_hours">%1$.2f h</string>
@ -59,6 +62,8 @@
<string name="please_wait">Proszę czekać…</string>
<string name="stop">Stop</string>
<string name="carbs">Węglowodany</string>
<string name="invalid_profile">Nieprawidłowy profil!</string>
<string name="no_profile_set">NIE USTAWIONO PROFILU</string>
<string name="active"><![CDATA[<Aktywny>]]></string>
<string name="date">Data</string>
<string name="units_label">Jednostki</string>
@ -67,7 +72,11 @@
<string name="isf_label">ISF</string>
<string name="basal_label">Baza</string>
<string name="target_label">Cel</string>
<string name="dia_long_label">Czas aktywności insuliny (DIA)</string>
<string name="ic_long_label">Współczynnik insulina/węglowodany (I:C)</string>
<string name="isf_long_label">Współczynnik wrażliwosci na insulinę (ISF)</string>
<string name="basal_long_label">Dawka bazowa</string>
<string name="target_long_label">Docelowa Glikemia</string>
<string name="shortgram">g</string>
<string name="shortpercent">%</string>
<string name="bluetooth">Bluetooth</string>
@ -97,6 +106,8 @@
<string name="loading">Ładowanie…</string>
<string name="notes_label">Notatki</string>
<string name="remove_button">Usuń</string>
<string name="add_new">Dodaj nowy</string>
<string name="addnew_above">Dodaj nowy powyżej</string>
<string name="wrong_pump_data">Dane pochodzą z innej pompy. Zmień sterownik pompy, aby zresetować stan pompy.</string>
<string name="bg_label">BG</string>
<string name="calibration">Kalibracja</string>
@ -111,9 +122,17 @@
<string name="trend_arrow">Strzałka trendu</string>
<string name="a11y_autosens_label">Auto sens</string>
<string name="required">wym</string>
<string name="a11y_arrow_double_down">szybko spada</string>
<string name="a11y_arrow_single_down">spada</string>
<string name="a11y_arrow_forty_five_down">powoli spada</string>
<string name="a11y_arrow_flat">stabilna</string>
<string name="a11y_arrow_forty_five_up">powoli rośnie</string>
<string name="a11y_arrow_single_up">rośnie</string>
<string name="a11y_arrow_double_up">szybko rośnie</string>
<string name="a11y_arrow_none">brak</string>
<string name="a11y_arrow_unknown">nieznany</string>
<string name="a11y_high">wysokie</string>
<string name="a11y_inrange">w zakresie</string>
<string name="a11y_low">niskie</string>
<string name="average">Średnio</string>
<string name="tir">TIR</string>
@ -123,6 +142,7 @@
<string name="reset">ponowne uruchomienie</string>
<string name="profileswitch_ismissing">Brakuje ZmianyProfilu. Proszę wykonać ZmianęProfilu lub nacisnąć \"Aktywuj Profil\" w ProfiluLokalnym</string>
<string name="profile">Profil</string>
<string name="select_for_removal">Wybierz do usunięcia</string>
<string name="confirm_remove_multiple_items">Czy na pewno chcesz usunąć %1$d pozycji</string>
<string name="overview_treatment_label">Terapia</string>
<string name="copytolocalprofile">Utworzyć nowy profil na bazie wybranego profilu?</string>
@ -133,6 +153,7 @@
<string name="treatments_wizard_basaliob_label">IOB z bazy</string>
<string name="invalid">NIEPRAWIDŁOWY</string>
<string name="login">Zaloguj się</string>
<string name="prime_fill">Rozpocznij/Wypełnij</string>
<string name="overview_insulin_label">Insulina</string>
<string name="stoptemptarget">Zatrzymaj cel tymczasowy</string>
<string name="closedloop">Zamknięta pętla</string>
@ -141,14 +162,19 @@
<string name="dia">DIA</string>
<string name="ic_short">IC</string>
<string name="isf_short">ISF</string>
<string name="canceling_tbr_failed">Anulowanie bazy tymczasowej nie powiodło się</string>
<string name="canceling_eb_failed">Anulowanie przedłużonego bolusa nie powiodło się</string>
<string name="virtualpump_uploadstatus_title">Przesyłaj status do NS</string>
<string name="suspendloop_label">Wyłączona/zawieszona pętla</string>
<string name="iob_label">Aktywna insulina (IOB)</string>
<!-- Protection-->
<string name="wrongpassword">Złe hasło</string>
<string name="wrongpin">Nieprawidłowy PIN</string>
<string name="passwords_dont_match">Hasła się nie zgadzają</string>
<string name="pin_dont_match">Kody PIN nie pasują do siebie</string>
<!-- Profile-->
<string name="basalprofilenotaligned">Wartości bazy nie są ustawione w pełnych godzinach: %1$s</string>
<string name="minimalbasalvaluereplaced">Wartość bazy zastąpiona minimalną obsługiwaną wartością: %1$s</string>
<string name="maximumbasalvaluereplaced">Wartość bazy zastąpiona maksymalną obsługiwaną wartością: %1$s</string>
<string name="profile_per_unit">/U</string>
<string name="profile_ins_units_per_hour">U/h</string>
@ -156,6 +182,7 @@
<!-- ProfileFunction-->
<string name="startprofile">Uruchom profil %1$d%% na %2$d min</string>
<!-- APSResult-->
<string name="cancel_temp">Anuluj bazę tymczasową</string>
<string name="let_temp_basal_run">Pozwól na działanie bazy tymczasowej</string>
<string name="rate">Wartość</string>
<string name="duration">Czas trwania</string>
@ -177,9 +204,12 @@
<string name="careportal_note_message">Wskazówka: %1$s</string>
<string name="careportal_question_message">Pytanie : %1$s</string>
<string name="careportal_exercise_message">Ćwiczenie: %1$s</string>
<string name="careportal_pump_site_change">Zmiana wkłucia</string>
<string name="cgm_sensor_insert">Założenie sensora CGM</string>
<string name="careportal_cgmsensorstart">Uruchomienie sensora CGM</string>
<string name="careportal_cgm_sensor_stop">Zatrzymanie sensora CGM</string>
<string name="careportal_dad_alert">Alarm D.A.D.</string>
<string name="careportal_insulin_cartridge_change">Zmiana zasobnika insuliny</string>
<string name="careportal_profileswitch">Zmiana profilu</string>
<string name="careportal_snackbolus">Bolus na przekąskę</string>
<string name="careportal_mealbolus">Bolus na posiłek</string>
@ -189,6 +219,8 @@
<string name="careportal_tempbasalend">Dawka Tymczasowa Koniec</string>
<string name="careportal_carbscorrection">Węglow. korekcyjne</string>
<string name="careportal_openapsoffline">OpenAPS Rozłączony (Offline)</string>
<string name="pump_battery_change">Zmiana baterii pompy</string>
<string name="temporary_target">Cel tymczasowy (TT)</string>
<string name="careportal_temporarytargetvalue">Wartość celu tymczasowego</string>
<string name="careportal_temporarytargetcancel">Odrzuć Cel tymczasowy</string>
<string name="boluswizard">Kalkulator bolusa</string>
@ -215,7 +247,9 @@
<string name="waitingforpumpresult">Oczekiwanie na wynik</string>
<string name="smb_shortname">SMB</string>
<!-- CarbsReq-->
<string name="carbsreq">Zalecane podanie %1$d g węglowodanów w przeciągu %2$d minut</string>
<!-- TDDStatsActivity-->
<string name="cumulative_tdd">Kumulatywna TDD (dawka dzienna)</string>
<string name="expweight">Ważona wykładniczo TDD</string>
<string name="basalrate">Baza</string>
<string name="bolus">Bolus</string>
@ -224,6 +258,7 @@
<string name="amount_days"># Dni</string>
<string name="weight">Waga</string>
<string name="warning_Message">Możliwa niedokładność jeśli używasz bolusów do wypełnień!</string>
<string name="olddata_Message">Stare dane, naciśnij \"ZAŁADUJ PONOWNIE\"</string>
<string name="tbb">Suma dzienna bazy (TBB)</string>
<string name="tbb2">TBB * 2</string>
<!-- Ntp-->
@ -296,9 +331,11 @@
<string name="uel_stat_reset">WYCZYSZCZENIE STATYSTYK</string>
<string name="uel_delete_logs">USUŃ LOGI</string>
<string name="uel_delete_future_treatments">USUŃ PRZYSZŁE WPIS TERAPII</string>
<string name="delete_future_treatments">Usuń przyszłe zabiegi</string>
<string name="uel_export_settings">EXPORT USTAWIEŃ</string>
<string name="uel_import_settings">IMPORT USTAWIEŃ</string>
<string name="uel_reset_databases">RESET BAZ DANYCH</string>
<string name="uel_cleanup_databases">WYCZYŚĆ BAZY DANYCH</string>
<string name="uel_export_databases">EKSPORT BAZ DANYCH</string>
<string name="uel_import_databases">IMPORT BAZ DANCH</string>
<string name="uel_otp_export">EXPORT OTP</string>
@ -356,25 +393,97 @@
<string name="formatPercent">%1$.0f%%</string>
<string name="basal">Baza</string>
<string name="basalpct">Baza %</string>
<string name="a11y_file">plik</string>
<string name="a11y_user">użytkownik</string>
<!-- Autotune -->
<string name="autotune">Autotune</string>
<string name="autotune_description">Pomoc w ewentualnym dostosowaniu profilu (ISF, współczynnik węglowodanów i dawki bazowe)</string>
<string name="autotune_shortname">AT</string>
<string name="autotune_settings">Ustawienia Autotune</string>
<string name="autotune_auto_title">Zmiana profilu w Automatyzacji</string>
<string name="autotune_auto_summary">Jeśli włączono, autotune automatycznie zaktualizuje i przełączy się na podany profil po obliczeniu z reguły automatyzacji.</string>
<string name="autotune_categorize_uam_as_basal_title">Kategoryzuj UAM jako bazę</string>
<string name="autotune_categorize_uam_as_basal_summary">Włącz tylko wtedy, gdy sumiennie i dokładnie wprowadzano wszystkie zjedzone węglowodany. Z tą opcją nagłe wzrosty obserwowane przez Autotune będą używane do rekomendowania zmian dawki bazowej.</string>
<string name="autotune_tune_insulin_curve_title">Dostrój krzywą insuliny</string>
<string name="autotune_tune_insulin_curve_summary">Włącz tylko jeśli korzystasz z samodzielnie ustalanego profilu insuliny. Ta opcja dostraja szczyt działania insuliny (peak) i całkowity czas działania insuliny (DIA)</string>
<string name="autotune_default_tune_days_title">Liczba uwzględnianych dni danych</string>
<string name="autotune_circadian_ic_isf_title">Zastosuj średni wynik w dobowym rytmie IC/ISF</string>
<string name="autotune_circadian_ic_isf_summary">Autotune nie dostroi różnic okołodobowych, ta opcja zastosuje tylko średnią poprawkę do IC i ISF na twój wejściowy profil okołodobowy</string>
<string name="autotune_additional_log_title">Dołącz więcej informacji serwisowych do dziennika</string>
<string name="autotune_additional_log_summary">Włącz tylko na żądanie dewelopera aby zebrać i wysłać więcej informacji dziennika, aby pomóc w debugowaniu i naprawie wtyczki Autotune</string>
<string name="autotune_default_tune_days_summary">Domyślna liczba dni do przetworzenia przez Autotune (do 30)</string>
<string name="autotune_tunedprofile_name">Dostrojono</string>
<string name="autotune_profile">Profil :</string>
<string name="autotune_tune_days">Dostrojonych dni :</string>
<string name="autotune_last_run">Ostatnio uruchomiono :</string>
<string name="autotune_warning">Ostrzeżenie :</string>
<string name="autotune_select_profile">Wybierz profil do dostrojenia</string>
<string name="autotune_ic_warning">Wybrany profil ma %1$d wartości IC. Autotune użyje %2$.2f g/U</string>
<string name="autotune_isf_warning">Wybrany profil ma %1$d wartości ISF. Autotune użyje %2$.1f %3$s/U</string>
<string name="autotune_error">Błąd w danych wejściowych, spróbuj uruchomić Autotune ponownie lub zmniejszyć liczbę dni</string>
<string name="autotune_warning_during_run">Rozpoczęto obliczenia Autotune, prosimy o cierpliwość</string>
<string name="autotune_warning_after_run">Uważnie sprawdź wyniki przed ich użyciem!</string>
<string name="autotune_partial_result">Wynik częściowy - dostrojono dzień %1$d / %2$d</string>
<string name="autotune_result">Wynik: %1$s</string>
<string name="autotune_param">Parametr</string>
<string name="autotune_percent">%</string>
<string name="autotune_missing">Brakujące</string>
<string name="autotune_profile_name">Profil Autotune %1$s</string>
<string name="autotune_run">Uruchom Autotune</string>
<string name="autotune_check_input_profile_button">Sprawdź profil wejściowy</string>
<string name="autotune_compare_profile">Porównaj profile</string>
<string name="autotune_copy_localprofile_button">Skopiuj do profilu lokalnego</string>
<string name="autotune_update_input_profile_button">Zaktualizuj profil wejściowy</string>
<string name="autotune_revert_input_profile_button">Przywróć profil wejściowy</string>
<string name="autotune_copy_local_profile_message">Utworzyć nowy profil lokalny z tego profilu Autotune?</string>
<string name="autotune_update_local_profile_message">Zaktualizować profil %1$s za pomocą profilu Autotune?</string>
<string name="autotune_revert_local_profile_message">Przywrócić profil %1$s przy użyciu profilu wejściowego?</string>
<string name="autotune_profile_invalid">Nieprawidłowy profil</string>
<string name="autotune_run_without_autoswitch">Autotune zakończył się bez przełączenia profilu</string>
<string name="autotune_run_with_autoswitch">W wyniku uruchomienia Autotune profil został automatycznie przełączony</string>
<string name="autotune_run_with_error">Błąd podczas ostatniego uruchomienia Autotune</string>
<string name="autotune_run_cancelled">Wykryto Autotune w toku, anulowano próbę kolejnego uruchomienia</string>
<!-- Alerts -->
<string name="raise_notifications_as_android_notifications">Użyj powiadomień systemowych dla alertów i powiadomień</string>
<string name="urgent_alarm">Pilny alarm</string>
<string name="info">INFO</string>
<!-- BolusWizard -->
<string name="bolus_advisor">Doradca bolusa</string>
<string name="bolus_advisor_message">Masz wysoką glikemię. Zamiast jeść teraz, zaleca się poczekać na wyrównanie poziomu cukru. Czy chcesz wykonać teraz bolus korekcyjny i otrzymać przypomnienie, kiedy nadejdzie czas na posiłek? W tym przypadku żadne węglowodany nie zostaną zarejestrowane i należy ponownie użyć kalkulatora, po otrzymaniu przypomnienia o posiłku.</string>
<string name="cobvsiob">COB vs IOB</string>
<string name="slowabsorptiondetected"><![CDATA[<font color=\'%1$s\'>!!!!! Wykryto powolne wchłanianie węglowodanów: %2$d%% czasu. Sprawdź ponownie swoje obliczenia. COB mogły być przeszacowane przez co mogło być podane zbyt dużo insuliny !!!!!</font>]]></string>
<string name="partialboluswizard">Dostarcz tą część dawki insuliny z wyniku kalkulatora bolusa [%]</string>
<string name="bolus_constraint_applied_warn">Zastosowano ograniczenie bolusa: %1$.2f U do %2$.2f U</string>
<string name="bolus_recorded_only">Bolus zostanie jedynie odnotowany (nie będzie podany przez pompę)</string>
<string name="advisoralarm">Uruchom alarm kiedy będzie czas na jedzenie</string>
<string name="no_action_selected">Nie wybrano żadnej akcji, zdarzenie nie będzie wprowadzone</string>
<string name="wizard_no_actual_bg">Brak niezbędnego do obliczeń bieżącego pomiaru glikemi!</string>
<string name="wizard_no_active_profile">Nie ustawiono aktywnego profilu!</string>
<string name="wizard_no_cob">Nieznane COB! Może brakuje odczytu glikemii lub niedawno zrestartowano aplikację?</string>
<string name="wizard_carbs_constraint">Naruszenie ograniczeń węglowodanów!</string>
<string name="wizard_explain_calc">Kalk (IC: %1$.1f, ISF: %2$.1f)</string>
<string name="wizard_explain_carbs">Węgle: %1$.2fU</string>
<string name="wizard_explain_cob">COB: %1$.0fg %2$.2fU</string>
<string name="wizard_explain_bg">Glikemia: %1$.2fU</string>
<string name="wizard_explain_iob">IOB: %1$.2fU</string>
<string name="wizard_explain_superbolus">Superbolus: %1$.2fU</string>
<string name="wizard_explain_trend">Trend 15min.: %1$.2fU</string>
<string name="wizard_explain_percent">Procentowo: %1$.2fU x %2$d%% ≈ %3$.2fU</string>
<string name="wizard_constraint_bolus_size">Naruszenie ograniczeń insuliny!\nNie można podać %1$.2fU</string>
<string name="wizard_explain_tt">CelTymcz.: %1$s</string>
<string name="wizard_explain_tt_to">%1$s do %2$s</string>
<string name="wizard_pump_not_available">Pompa niedostępna!</string>
<string name="quickwizard">Szybki Bolus</string>
<!-- Preferences-->
<string name="child">Dziecko</string>
<string name="teenage">Nastolatek</string>
<string name="adult">Osoba dorosła</string>
<string name="resistant_adult">Osoba dorosła insulinooporna</string>
<string name="pregnant">Ciąża</string>
<string name="patient_age_summary">Wybierz typ pacjenta, aby ustawić limity bezpieczeństwa</string>
<string name="max_bolus_title">Maks. dopuszczalny bolus [U]</string>
<string name="max_carbs_title">Maks. dopuszczalne węglowodany [g]</string>
<string name="patient_type">Typ pacjenta</string>
<!-- Protection-->
<string name="unlock_settings">Odblokuj ustawienia</string>
<!-- Pumps -->
@ -425,6 +534,9 @@
<!-- TwoMessagesDialog -->
<string name="password_preferences_decrypt_prompt">Zostaniesz poproszony o hasło główne, które jest potrzebne do odszyfrowania zaimportowanych preferencji.</string>
<!-- NumberPicker -->
<string name="a11y_min_button_description">zmniejszenie %1$s o %2$s</string>
<string name="a11y_plus_button_description">zwiększenie %1$s o %2$s</string>
<string name="you_are_on_allowed_limit">Osiągnięto dozwolony limit</string>
<string name="format_hour_minute">%1$dh %2$dm</string>
<!-- datetime layout -->
<string name="event_time_label">Czas zdarzenia</string>
@ -443,6 +555,10 @@
<string name="nav_plugin_preferences">Konfiguracja wtyczki</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Brak uprawnień SMS</string>
<!-- About -->
<string name="cta_dont_kill_my_app_info">Nie zabij mojej aplikacji?</string>
<string name="fabric_upload_disabled">Przesyłanie dzienników awarii jest wyłączone!</string>
<string name="about_link_urls">\n\nDokumentacja:\nhttps://wiki.aaps.app\n\nFacebook:\nhttps://www.facebook.com/groups/AndroidAPSUsers</string>
<plurals name="days">
<item quantity="one">%1$d dzień</item>
<item quantity="few">%1$d dni</item>

View file

@ -554,6 +554,7 @@
<string name="nav_plugin_preferences">Preferências plugin</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Falta de permissão SMS</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dia</item>
<item quantity="other">%1$d dias</item>

View file

@ -426,6 +426,7 @@
<string name="nav_plugin_preferences">Preferências plugin</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Falta de permissão SMS</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dia</item>
<item quantity="other">%1$d dias</item>

View file

@ -442,6 +442,7 @@
<string name="nav_plugin_preferences">Preferințe plugin</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Lipsesc permisiunile de SMS</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d zi</item>
<item quantity="few">%1$d zile</item>

View file

@ -473,6 +473,7 @@
<string name="wizard_explain_tt">ВремЦ: %1$s</string>
<string name="wizard_explain_tt_to">%1$s до %2$s</string>
<string name="wizard_pump_not_available">Нет помпы!</string>
<string name="quickwizard">Мастер QuickWizard</string>
<!-- Preferences-->
<string name="child">Ребенок</string>
<string name="teenage">Подросток</string>
@ -554,6 +555,7 @@
<string name="nav_plugin_preferences">Настройки расширений</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Отсутствует смс разрешение</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d день</item>
<item quantity="few">%1$d дня</item>

View file

@ -473,6 +473,7 @@
<string name="wizard_explain_tt">DC: %1$s</string>
<string name="wizard_explain_tt_to">%1$s do %2$s</string>
<string name="wizard_pump_not_available">Pumpa nedostupná!</string>
<string name="quickwizard">Rýchly bolus</string>
<!-- Preferences-->
<string name="child">Dieťa</string>
<string name="teenage">Dospievajúci</string>
@ -554,6 +555,7 @@
<string name="nav_plugin_preferences">Nastavenie modulu</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Chýbajúce povolenie SMS príkazov</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d deň</item>
<item quantity="few">%1$d dní</item>

View file

@ -68,4 +68,5 @@
<!-- BlePreCheck-->
<!-- Preferences -->
<!-- SmsCommunicator -->
<!-- About -->
</resources>

View file

@ -471,6 +471,7 @@
<string name="nav_plugin_preferences">Inställningar för insticksprogram</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Saknar behörighet att skicka SMS</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d dag</item>
<item quantity="other">%1$d dagar</item>

View file

@ -14,6 +14,7 @@
<string name="pump_base_basal_rate">%1$.2f Ü/sa</string>
<string name="pump_not_initialized_profile_not_set">Pompa başlatılamadı, profil oluşturulmamış!</string>
<string name="failed_update_basal_profile">Bazal profiliniz güncellenemedi</string>
<string name="bolus_delivered_successfully">%1$.2f Ü bolus başarıyla gönderildi</string>
<string name="no_valid_basal_rate">Pompadan okunan geçerli bir bazal oranı yok</string>
<string name="limiting_iob">%2$s\'den dolayı AİNS %1$.1f Ü ile sınırlandırılıyor</string>
<string name="loop_disabled">DÖNGÜ KISITLAMALARDAN DEVREDIŞI BIRAKILDI</string>
@ -46,6 +47,7 @@
<string name="success">Başarılı</string>
<string name="advancedsettings_title">Gelişmiş Ayarlar</string>
<string name="extendedbolusdeliveryerror">Yayma bolus iletim hatası</string>
<string name="aps_mode_title">APS modu</string>
<string name="extended_bolus">Yayma Bolus</string>
<string name="paused">Duraklatıldı</string>
<string name="tdd_total">GTD Toplam</string>
@ -160,6 +162,8 @@
<string name="dia">İES</string>
<string name="ic_short">IC Karbonhidrat İnsülin Oranı</string>
<string name="isf_short">IDF İnsülin Duyarlılık Faktörü</string>
<string name="canceling_tbr_failed">Geçici bazal iptali başarısız oldu</string>
<string name="canceling_eb_failed">Yayma bolusun iptal edilmesi başarısız oldu</string>
<string name="virtualpump_uploadstatus_title">Nightscout\'a durum aktar</string>
<string name="suspendloop_label">Döngüyü Devre Dışı bırakma/Askıya alma</string>
<string name="iob_label">Aktif İnsülin (AİNS)</string>
@ -245,6 +249,7 @@
<!-- CarbsReq-->
<string name="carbsreq">%2$d dakika içinde %1$d g ek karbonhidrat gerekiyor</string>
<!-- TDDStatsActivity-->
<string name="cumulative_tdd">Kümülatif GTD (Günlük Toplam Doz)</string>
<string name="expweight">Üstel Ağırlıklı GTD</string>
<string name="basalrate">Bazal</string>
<string name="bolus">Bolus</string>
@ -468,6 +473,7 @@
<string name="wizard_explain_tt">GeçiciH: %1$s</string>
<string name="wizard_explain_tt_to">%1$s - %2$s</string>
<string name="wizard_pump_not_available">Pompa mevcut değil!</string>
<string name="quickwizard">Hızlı Asistan</string>
<!-- Preferences-->
<string name="child">Çocuk</string>
<string name="teenage">Ergen</string>
@ -549,6 +555,7 @@
<string name="nav_plugin_preferences">Eklenti tercihleri</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">SMS izni eksik</string>
<!-- About -->
<plurals name="days">
<item quantity="one">%1$d gün</item>
<item quantity="other">%1$d gün</item>

View file

@ -519,6 +519,7 @@
<string name="nav_plugin_preferences">插件选项</string>
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">缺少 SMS 短信权限</string>
<!-- About -->
<plurals name="days">
<item quantity="other">%1$d </item>
</plurals>

View file

@ -602,6 +602,11 @@
<!-- SmsCommunicator -->
<string name="smscommunicator_missingsmspermission">Missing SMS permission</string>
<!-- About -->
<string name="cta_dont_kill_my_app_info">Don\'t kill my app?</string>
<string name="fabric_upload_disabled">Crash logs upload disabled!</string>
<string name="about_link_urls">\n\nDocumentation:\nhttps://wiki.aaps.app\n\nFacebook:\nhttps://www.facebook.com/groups/AndroidAPSUsers</string>
<plurals name="days">
<item quantity="one">%1$d day</item>
<item quantity="other">%1$d days</item>
@ -615,4 +620,4 @@
<item quantity="other">%1$d minutes</item>
</plurals>
</resources>
</resources>

View file

@ -22,7 +22,7 @@ dependencies {
implementation project(':app-wear-shared:shared')
//Firebase
api platform('com.google.firebase:firebase-bom:31.1.1')
api platform('com.google.firebase:firebase-bom:31.2.0')
api "com.google.firebase:firebase-analytics-ktx"
api "com.google.firebase:firebase-crashlytics-ktx"
// StatsActivity not in use now

View file

@ -3,7 +3,6 @@ package info.nightscout.core.utils.worker
import android.content.Context
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import androidx.work.workDataOf
import dagger.android.HasAndroidInjector
import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.rx.logging.AAPSLogger
@ -23,16 +22,10 @@ abstract class LoggingWorker(context: Context, workerParams: WorkerParameters, p
}
override suspend fun doWork(): Result =
try {
withContext(dispatcher) {
doWorkAndLog().also {
aapsLogger.debug(LTag.WORKER, "Worker result ${it::class.java.simpleName.uppercase()} for ${this::class.java}")
}
withContext(dispatcher) {
doWorkAndLog().also {
aapsLogger.debug(LTag.WORKER, "Worker result ${it::class.java.simpleName.uppercase()} for ${this@LoggingWorker::class.java}")
}
} catch (e: Exception) {
fabricPrivacy.logException(e)
e.printStackTrace()
Result.failure(workDataOf("Error" to e.localizedMessage))
}
abstract suspend fun doWorkAndLog(): Result

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="count_selected">%1$d pasirinkta</string>
<string name="remove_items">Pašalinti elementus</string>
<string name="sort_items">Rūšiuoti elementus</string>
<string name="remove_selected_items">Pašalinti pasirinktus elementus</string>
<string name="sort_label">Rūšiuoti</string>
</resources>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="count_selected">Wybrany %1$d</string>
<string name="remove_items">Usuń pozycje</string>
<string name="sort_items">Sortuj pozycje</string>
<string name="remove_selected_items">Usuń zaznaczone pozycje</string>
<string name="sort_label">Sortuj</string>
</resources>

View file

@ -27,7 +27,8 @@ data class DeviceStatus(
var enacted: String? = null,
var suggested: String? = null,
var iob: String? = null,
var uploaderBattery: Int = 0,
var uploaderBattery: Int,
var isCharging: Boolean?,
var configuration: String? = null
) : DBEntryWithTime {

File diff suppressed because it is too large Load diff

View file

@ -44,7 +44,7 @@ import info.nightscout.database.entities.TotalDailyDose
import info.nightscout.database.entities.UserEntry
import info.nightscout.database.entities.VersionChange
const val DATABASE_VERSION = 22
const val DATABASE_VERSION = 23
@Database(version = DATABASE_VERSION,
entities = [APSResult::class, Bolus::class, BolusCalculatorResult::class, Carbs::class,

View file

@ -28,6 +28,7 @@ open class DatabaseModule {
// .addMigrations(migration11to12)
.addMigrations(migration20to21)
.addMigrations(migration21to22)
.addMigrations(migration22to23)
.addCallback(object : Callback() {
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
@ -80,4 +81,12 @@ open class DatabaseModule {
}
}
private val migration22to23 = object : Migration(22,23) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE `deviceStatus` ADD COLUMN `isCharging` INTEGER")
// Custom indexes must be dropped on migration to pass room schema checking after upgrade
dropCustomIndexes(database)
}
}
}

View file

@ -7,7 +7,7 @@ import kotlin.math.abs
/**
* Sync the TemporaryTarget from NS
*/
class SyncNsTemporaryTargetTransaction(private val temporaryTargets: List<TemporaryTarget>, private val nsClientMode: Boolean) :
class SyncNsTemporaryTargetTransaction(private val temporaryTargets: List<TemporaryTarget>) :
Transaction<SyncNsTemporaryTargetTransaction.TransactionResult>() {
override fun run(): TransactionResult {
@ -28,7 +28,7 @@ class SyncNsTemporaryTargetTransaction(private val temporaryTargets: List<Tempor
database.temporaryTargetDao.updateExistingEntry(current)
result.invalidated.add(current)
}
if (current.duration != temporaryTarget.duration && nsClientMode) {
if (current.duration != temporaryTarget.duration) {
current.duration = temporaryTarget.duration
database.temporaryTargetDao.updateExistingEntry(current)
result.updatedDuration.add(current)

View file

@ -187,7 +187,10 @@ class PluginStore @Inject constructor(
get() = activeAPSStore ?: checkNotNull(activeAPSStore) { "No APS selected" }
override val activePump: Pump
get() = activePumpStore ?: checkNotNull(activePumpStore) { "No pump selected" }
get() = activePumpStore
// Following line can be used only during initialization
?: getTheOneEnabledInArray(getSpecificPluginsList(PluginType.PUMP), PluginType.PUMP) as Pump?
?: checkNotNull(activePumpStore) { "No pump selected" }
override val activeSensitivity: Sensitivity
get() = activeSensitivityStore

View file

@ -45,7 +45,7 @@ class ProfileStoreObject(val injector: HasAndroidInjector, override val data: JS
}
override fun getStartDate(): Long {
val iso = JsonHelper.safeGetString(data, "startDate") ?: return 0
val iso = JsonHelper.safeGetString(data, "created_at") ?: JsonHelper.safeGetString(data, "startDate") ?: return 0
return try {
dateUtil.fromISODateString(iso)
} catch (e: Exception) {

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip + nie geïnstalleerd nie</string>
<string name="calibration_sent">Kalibrasie gestuur na xDrip+</string>
<string name="bg_label">BG</string>
<string name="executing_right_now">Opdrag word nou uitgevoer</string>
<string name="basal_value_below_minimum">Basale waarde onder minimum. Profiel nie gestel nie!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ не е инсталиран</string>
<string name="calibration_sent">Калибрацията е изпратена към xDrip+</string>
<string name="bg_label">КЗ</string>
<string name="executing_right_now">Командата се изпълнява в момента</string>
<string name="basal_value_below_minimum">Базалните стойности са под минимума. Не е зададен профил!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ no instal·lat</string>
<string name="calibration_sent">Calibració enviada a xDrip+</string>
<string name="bg_label">Glucèmia</string>
<string name="executing_right_now">Ordre executant-se ara mateix</string>
<string name="basal_value_below_minimum">Valor de basal per sota del mínim. Perfil no definit!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ není nainstalován</string>
<string name="calibration_sent">Kalibrace odeslána do xDripu+</string>
<string name="bg_label">Gly</string>
<string name="executing_right_now">Příkaz je právě prováděn</string>
<string name="basal_value_below_minimum">Hodnota bazálu pod povoleným minimem. Nenastaveno!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ ikke installeret</string>
<string name="calibration_sent">Kalibrering sendt til xDrip+</string>
<string name="bg_label">BG</string>
<string name="executing_right_now">Kommando udføres lige nu</string>
<string name="basal_value_below_minimum">Basal værdi under minimum. Profil ikke angivet!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ nicht installiert</string>
<string name="calibration_sent">Kalibrierung an xDrip+ gesendet+</string>
<string name="bg_label">BZ</string>
<string name="executing_right_now">Befehl wird zurzeit ausgeführt</string>
<string name="basal_value_below_minimum">Wert der Basalrate unter Minimum. Profil nicht gesetzt!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ μη εγκατεστημένο</string>
<string name="calibration_sent">Το καλιμπράρισμα εστάλει στο xDrip+</string>
<string name="bg_label">BG</string>
<string name="executing_right_now">Η εντολή εκτελείται τώρα</string>
<string name="basal_value_below_minimum">Τιμή βασικού κάτω από το ελάχιστο. Δεν έχει ρυθμιστεί το προφίλ!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ no se encuentra instalado</string>
<string name="calibration_sent">Calibración enviada a xDrip+</string>
<string name="bg_label">BG</string>
<string name="executing_right_now">Orden se esta efectuando en este momento</string>
<string name="basal_value_below_minimum">Valor basal por debajo del mínimo. Perfil no establecido.</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ n\'est pas installé</string>
<string name="calibration_sent">Étalonnage envoyé à xDrip+</string>
<string name="bg_label">Gly</string>
<string name="executing_right_now">Commande exécutée à l\'instant</string>
<string name="basal_value_below_minimum">Le débit Basal est inférieur au minimum autorisé. Profil non accepté !</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ nije instaliran</string>
<string name="calibration_sent">Kalibracija poslana na xDrip+</string>
<string name="bg_label">GUK</string>
<string name="executing_right_now">Naredba se izvršava upravo sada</string>
<string name="basal_value_below_minimum">Bazalna vrijednost ispod minimuma. Profil nije postavljen!</string>

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ nincs telepítve</string>
<string name="bg_label">VC</string>
<!-- Stats -->
<string name="low" comment="3.1-3.9">Alacsony</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ non installato</string>
<string name="calibration_sent">Calibrazione inviata a xDrip+</string>
<string name="bg_label">BG</string>
<string name="executing_right_now">Il comando sarà eseguito ora</string>
<string name="basal_value_below_minimum">Valore basale inferiore al minimo. Profilo non impostato!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ אינו מותקן</string>
<string name="calibration_sent">כיול נשלח ל-xDrip+</string>
<string name="bg_label">BG</string>
<string name="executing_right_now">הפקודה מבוצעת כעת</string>
<string name="basal_value_below_minimum">ערך הבסיס מתחת למינימום. פרופיל אינו מוגדר!</string>

View file

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+가 설치되지 않았습니다</string>
<string name="calibration_sent">보정이 xDrip으로 전송되었습니다+</string>
<string name="bg_label">혈당</string>
<string name="executing_right_now">명령을 지금 실행합니다.</string>
<string name="basal_value_below_minimum">Basal값이 최소값 이하입니다. 프로파일이 설정되지 않습니다!</string>

View file

@ -1,14 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="xdrip_not_installed">xDrip+ neįdiegta</string>
<string name="calibration_sent">Kalibracija nusiųsta į xDrip+</string>
<string name="bg_label">KG</string>
<string name="executing_right_now">Komanda vykdoma</string>
<string name="basal_value_below_minimum">Valandinės bazės vertė mažesnė už minimalią. Profilis nenustatytas!</string>
<string name="permission">Leidimas</string>
<string name="need_whitelisting">%1$s įtraukite į baterijos neoptimizavimo sąrašą tinkamam veikimui užtikrinti</string>
<string name="need_location_permission">Programai reikia vietos nustatymo leidimo, kad būtų galima naudoti Bluetooth ir WiFi</string>
<string name="need_storage_permission">Aplikacijai reikia leidimo prieigai prie saugyklos, kad galėtų išsaugoti žurnalo įrašus ir eksportavimo nustatymus</string>
<!-- Stats -->
<string name="veryLow" comment="below 3.1">Labai žemas</string>
<string name="low" comment="3.1-3.9">Žemas</string>
<string name="high" comment="10.0-13.9">Aukštas</string>
<string name="veryHigh" comment="above 13.9">Labai aukštas</string>
<string name="below" comment="below &quot;in range&quot;">Žemiau</string>
<string name="in_range">Ribose</string>
<string name="above" comment="above &quot;in range&quot;">Virš</string>
<string name="hba1c">HbA1c: </string>
<string name="std_deviation">SD: %1$s</string>
<string name="detailed_14_days">14 d. detaliai</string>
<string name="day_tir">Dienos LNR</string>
<string name="night_tir">Nakties LNR</string>
<string name="carbs_short" comment="max 6 characters">AV</string>
</resources>

Some files were not shown because too many files have changed in this diff Show more