mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-19 08:45:27 +02:00
Units repository updates
Units filter fixes Performance drop fixed
This commit is contained in:
parent
0d1d08a951
commit
f6c1d44be2
@ -37,7 +37,7 @@ class AllUnitsRepository @Inject constructor() {
|
|||||||
/**
|
/**
|
||||||
* This is a collection of all available units.
|
* This is a collection of all available units.
|
||||||
*/
|
*/
|
||||||
val allUnits: List<AbstractUnit> by lazy {
|
private val allUnits: List<AbstractUnit> by lazy {
|
||||||
mapOfCollections.values.flatten()
|
mapOfCollections.values.flatten()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,12 +79,14 @@ class AllUnitsRepository @Inject constructor() {
|
|||||||
/**
|
/**
|
||||||
* Looks for a collection of units of the given [UnitGroup].
|
* Looks for a collection of units of the given [UnitGroup].
|
||||||
*
|
*
|
||||||
* @param unitGroup Requested [UnitGroup]. If you give it null, you will likely get null.
|
* @param unitGroup Requested [UnitGroup]
|
||||||
* @return List of [AbstractUnit]s. Will return null if the is no collection for the specified
|
* @return List of [AbstractUnit]s. Will return null if the is no collection for the specified
|
||||||
* [UnitGroup].
|
* [UnitGroup].
|
||||||
|
*
|
||||||
|
* @throws [NoSuchElementException] from [Map.getValue]
|
||||||
*/
|
*/
|
||||||
fun getCollectionByGroup(unitGroup: UnitGroup?): List<AbstractUnit>? {
|
fun getCollectionByGroup(unitGroup: UnitGroup): List<AbstractUnit> {
|
||||||
return mapOfCollections[unitGroup]
|
return mapOfCollections.getValue(unitGroup)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -106,11 +108,12 @@ class AllUnitsRepository @Inject constructor() {
|
|||||||
searchQuery: String,
|
searchQuery: String,
|
||||||
allUnitsGroups: List<UnitGroup>
|
allUnitsGroups: List<UnitGroup>
|
||||||
): Map<UnitGroup, List<AbstractUnit>> {
|
): Map<UnitGroup, List<AbstractUnit>> {
|
||||||
val shownUnits: List<AbstractUnit> =
|
var basicFilteredUnits: Sequence<AbstractUnit> = if (chosenUnitGroup == null) {
|
||||||
allUnitsGroups.flatMap { getCollectionByGroup(it) ?: listOf() }
|
allUnits.filter { it.group in allUnitsGroups }
|
||||||
|
} else {
|
||||||
var basicFilteredUnits: Sequence<AbstractUnit> =
|
val collection = getCollectionByGroup(chosenUnitGroup)
|
||||||
getCollectionByGroup(unitGroup = chosenUnitGroup)?.asSequence() ?: shownUnits.asSequence()
|
collection
|
||||||
|
}.asSequence()
|
||||||
|
|
||||||
if (favoritesOnly) {
|
if (favoritesOnly) {
|
||||||
basicFilteredUnits = basicFilteredUnits.filter { it.isFavorite }
|
basicFilteredUnits = basicFilteredUnits.filter { it.isFavorite }
|
||||||
@ -159,7 +162,7 @@ class AllUnitsRepository @Inject constructor() {
|
|||||||
fun updateBasicUnitsForCurrencies(
|
fun updateBasicUnitsForCurrencies(
|
||||||
conversions: Map<String, BigDecimal>
|
conversions: Map<String, BigDecimal>
|
||||||
) {
|
) {
|
||||||
getCollectionByGroup(UnitGroup.CURRENCY)?.forEach {
|
getCollectionByGroup(UnitGroup.CURRENCY).forEach {
|
||||||
// Getting rates from map. We set ZERO as default so that it can be skipped
|
// Getting rates from map. We set ZERO as default so that it can be skipped
|
||||||
val rate = conversions.getOrElse(it.unitId) { BigDecimal.ZERO }
|
val rate = conversions.getOrElse(it.unitId) { BigDecimal.ZERO }
|
||||||
// We make sure that we don't divide by zero
|
// We make sure that we don't divide by zero
|
||||||
|
@ -147,8 +147,7 @@ class MainViewModel @Inject constructor(
|
|||||||
|
|
||||||
// Now setting up right unit (pair for the left one)
|
// Now setting up right unit (pair for the left one)
|
||||||
unitTo = if (unitFrom.pairedUnit == null) {
|
unitTo = if (unitFrom.pairedUnit == null) {
|
||||||
// Dangerous btw
|
allUnitsRepository.getCollectionByGroup(unitFrom.group).first()
|
||||||
allUnitsRepository.getCollectionByGroup(unitFrom.group)!!.first()
|
|
||||||
} else {
|
} else {
|
||||||
allUnitsRepository.getById(unitFrom.pairedUnit!!)
|
allUnitsRepository.getById(unitFrom.pairedUnit!!)
|
||||||
}
|
}
|
||||||
|
@ -85,9 +85,6 @@ class SecondViewModel @Inject constructor(
|
|||||||
hideBrokenCurrencies: Boolean
|
hideBrokenCurrencies: Boolean
|
||||||
) {
|
) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
// Prevent user from seeing invalid list
|
|
||||||
uiState = uiState.copy(unitsToShow = emptyMap())
|
|
||||||
|
|
||||||
// This is mostly not UI related stuff and viewModelScope.launch uses Dispatchers.Main
|
// This is mostly not UI related stuff and viewModelScope.launch uses Dispatchers.Main
|
||||||
// So we switch to Default
|
// So we switch to Default
|
||||||
withContext(Dispatchers.Default) {
|
withContext(Dispatchers.Default) {
|
||||||
|
@ -25,6 +25,8 @@ class AllUnitsRepositoryTest {
|
|||||||
|
|
||||||
private val allUnitsRepository = AllUnitsRepository()
|
private val allUnitsRepository = AllUnitsRepository()
|
||||||
|
|
||||||
|
private val allUnits: List<AbstractUnit> = ALL_UNIT_GROUPS.flatMap { allUnitsRepository.getCollectionByGroup(it) }
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun filterAllUnitsNoFiltersLeft() {
|
fun filterAllUnitsNoFiltersLeft() {
|
||||||
// No filters applied, empty search query, from Left side list
|
// No filters applied, empty search query, from Left side list
|
||||||
@ -35,7 +37,7 @@ class AllUnitsRepositoryTest {
|
|||||||
searchQuery = "",
|
searchQuery = "",
|
||||||
allUnitsGroups = ALL_UNIT_GROUPS
|
allUnitsGroups = ALL_UNIT_GROUPS
|
||||||
)
|
)
|
||||||
assertEquals(allUnitsRepository.allUnits.groupBy { it.group }, result)
|
assertEquals(allUnits.groupBy { it.group }, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -53,7 +55,8 @@ class AllUnitsRepositoryTest {
|
|||||||
allUnitsGroups = ALL_UNIT_GROUPS
|
allUnitsGroups = ALL_UNIT_GROUPS
|
||||||
)
|
)
|
||||||
assertEquals(
|
assertEquals(
|
||||||
mapOf(UnitGroup.SPEED to listOf(allUnitsRepository.getCollectionByGroup(UnitGroup.SPEED)?.first { it.unitId == MyUnitIDS.kilometer_per_hour })),
|
mapOf(UnitGroup.SPEED to listOf(allUnitsRepository.getCollectionByGroup(UnitGroup.SPEED)
|
||||||
|
.first { it.unitId == MyUnitIDS.kilometer_per_hour })),
|
||||||
result
|
result
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -68,7 +71,7 @@ class AllUnitsRepositoryTest {
|
|||||||
searchQuery = "",
|
searchQuery = "",
|
||||||
allUnitsGroups = ALL_UNIT_GROUPS
|
allUnitsGroups = ALL_UNIT_GROUPS
|
||||||
)
|
)
|
||||||
assertEquals(allUnitsRepository.allUnits.filter { it.group == UnitGroup.TIME }
|
assertEquals(allUnits.filter { it.group == UnitGroup.TIME }
|
||||||
.groupBy { it.group }, result)
|
.groupBy { it.group }, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +86,7 @@ class AllUnitsRepositoryTest {
|
|||||||
searchQuery = "",
|
searchQuery = "",
|
||||||
allUnitsGroups = ALL_UNIT_GROUPS
|
allUnitsGroups = ALL_UNIT_GROUPS
|
||||||
)
|
)
|
||||||
assertEquals(allUnitsRepository.allUnits.filter { it.unitId == MyUnitIDS.kilometer }
|
assertEquals(allUnits.filter { it.unitId == MyUnitIDS.kilometer }
|
||||||
.groupBy { it.group }, result)
|
.groupBy { it.group }, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +105,8 @@ class AllUnitsRepositoryTest {
|
|||||||
allUnitsGroups = ALL_UNIT_GROUPS
|
allUnitsGroups = ALL_UNIT_GROUPS
|
||||||
)
|
)
|
||||||
assertEquals(
|
assertEquals(
|
||||||
mapOf(UnitGroup.SPEED to listOf(allUnitsRepository.getCollectionByGroup(UnitGroup.SPEED)?.first { it.unitId == MyUnitIDS.kilometer_per_hour })),
|
mapOf(UnitGroup.SPEED to listOf(allUnitsRepository.getCollectionByGroup(UnitGroup.SPEED)
|
||||||
|
.first { it.unitId == MyUnitIDS.kilometer_per_hour })),
|
||||||
result
|
result
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -121,7 +125,8 @@ class AllUnitsRepositoryTest {
|
|||||||
allUnitsGroups = ALL_UNIT_GROUPS
|
allUnitsGroups = ALL_UNIT_GROUPS
|
||||||
)
|
)
|
||||||
assertEquals(
|
assertEquals(
|
||||||
mapOf(UnitGroup.CURRENCY to allUnitsRepository.getCollectionByGroup(UnitGroup.CURRENCY)?.filter { it.unitId != MyUnitIDS.currency_btc }),
|
mapOf(UnitGroup.CURRENCY to allUnitsRepository.getCollectionByGroup(UnitGroup.CURRENCY)
|
||||||
|
.filter { it.unitId != MyUnitIDS.currency_btc }),
|
||||||
result
|
result
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -354,6 +354,6 @@ class AllUnitsTest {
|
|||||||
fun after() {
|
fun after() {
|
||||||
val unitGroup = history.keys.first()
|
val unitGroup = history.keys.first()
|
||||||
// GROUP : testedCount / totalCount
|
// GROUP : testedCount / totalCount
|
||||||
println("${unitGroup.name} : ${history[unitGroup]?.size} / ${allUnitsRepository.getCollectionByGroup(unitGroup)?.size}")
|
println("${unitGroup.name} : ${history[unitGroup]?.size} / ${allUnitsRepository.getCollectionByGroup(unitGroup).size}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user