Catch exception when converting units

closes #167
This commit is contained in:
Sad Ellie 2024-01-20 22:40:42 +03:00
parent 4319d18e17
commit 9f683785cf

View File

@ -139,31 +139,26 @@ internal class ConverterViewModel @Inject constructor(
is CurrencyRateUpdateState.Ready, is CurrencyRateUpdateState.Nothing -> {} is CurrencyRateUpdateState.Ready, is CurrencyRateUpdateState.Nothing -> {}
} }
try { when (ui) {
when (ui) { is UnitConverterUIState.Default -> {
is UnitConverterUIState.Default -> { convertDefault(
convertDefault( unitFrom = ui.unitFrom,
unitFrom = ui.unitFrom, unitTo = ui.unitTo,
unitTo = ui.unitTo, input1 = ui.input1,
input1 = ui.input1, input2 = ui.input2,
input2 = ui.input2, formatTime = ui.formatTime
formatTime = ui.formatTime )
)
}
is UnitConverterUIState.NumberBase -> {
convertNumberBase(
unitFrom = ui.unitFrom,
unitTo = ui.unitTo,
input = ui.input
)
}
is UnitConverterUIState.Loading -> {}
} }
} catch (e: Exception) { is UnitConverterUIState.NumberBase -> {
_result.update { ConverterResult.Default(BigDecimal.ZERO) } convertNumberBase(
unitFrom = ui.unitFrom,
unitTo = ui.unitTo,
input = ui.input
)
}
is UnitConverterUIState.Loading -> {}
} }
ui ui
} }
.stateIn(viewModelScope, UnitConverterUIState.Loading) .stateIn(viewModelScope, UnitConverterUIState.Loading)
@ -471,21 +466,24 @@ internal class ConverterViewModel @Inject constructor(
_calculation.update { if (input1.text.isExpression()) calculated1 else null } _calculation.update { if (input1.text.isExpression()) calculated1 else null }
// Convert // Convert
var conversion = unitFrom.convert(unitTo, calculated1) val result: ConverterResult = try {
if (footInchInput) { var conversion = unitFrom.convert(unitTo, calculated1)
// Converted from second text field too if (footInchInput) {
val inches = unitsRepo.getById(MyUnitIDS.inch) as DefaultUnit // Converted from second text field too
conversion += inches.convert(unitTo, calculated2) val inches = unitsRepo.getById(MyUnitIDS.inch) as DefaultUnit
} conversion += inches.convert(unitTo, calculated2)
}
// Update result
_result.update {
when { when {
(unitFrom.group == UnitGroup.TIME) and (formatTime) -> formatTime(calculated1.multiply(unitFrom.basicUnit)) (unitFrom.group == UnitGroup.TIME) and (formatTime) -> formatTime(calculated1.multiply(unitFrom.basicUnit))
unitTo.id == MyUnitIDS.foot -> formatFootInch(conversion, unitTo, unitsRepo.getById(MyUnitIDS.inch) as DefaultUnit) unitTo.id == MyUnitIDS.foot -> formatFootInch(conversion, unitTo, unitsRepo.getById(MyUnitIDS.inch) as DefaultUnit)
else -> ConverterResult.Default(conversion) else -> ConverterResult.Default(conversion)
} }
} catch (e: Exception) {
ConverterResult.Default(BigDecimal.ZERO)
} }
// Update result
_result.update { result }
} }
private fun convertNumberBase( private fun convertNumberBase(