From 9f97d4d51936b184cc90964248a05708bc2610c3 Mon Sep 17 00:00:00 2001 From: darken Date: Tue, 18 Jan 2022 15:39:54 +0100 Subject: [PATCH] Improve sorting --- .../darken/capod/monitor/core/PodMonitor.kt | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt b/app/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt index dc8ed14d..4bb8ab4c 100644 --- a/app/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt +++ b/app/src/main/java/eu/darken/capod/monitor/core/PodMonitor.kt @@ -3,8 +3,8 @@ package eu.darken.capod.monitor.core import eu.darken.capod.common.bluetooth.BleScanner import eu.darken.capod.common.bluetooth.BluetoothManager2 import eu.darken.capod.common.coroutine.AppScope -import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE -import eu.darken.capod.common.debug.logging.Logging.Priority.WARN +import eu.darken.capod.common.debug.logging.Logging.Priority.* +import eu.darken.capod.common.debug.logging.asLog import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.common.flow.replayingShare @@ -75,11 +75,34 @@ class PodMonitor @Inject constructor( pods[it.identifier] = it } } + + + val aboveThreshold = mutableListOf() + val belowThreshold = mutableListOf() + val minimumSignalQuality = generalSettings.minimumSignalQuality.value + pods.values.forEach { device -> + if (device.signalQuality > minimumSignalQuality) aboveThreshold.add(device) + else belowThreshold.add(device) + } val now = Instant.now() -// pods.values.sortedWith(compareBy { Duration.between(it.lastSeenAt,now) }.thenByDescending { it.rssi }) - pods.values.sortedByDescending { it.rssi } + aboveThreshold.sortedWith(compareBy { + Duration.between( + it.lastSeenAt, + now + ) + }.thenByDescending { it.rssi }) + .plus(belowThreshold.sortedWith(compareBy { + Duration.between( + it.lastSeenAt, + now + ) + }.thenByDescending { it.rssi })) +// pods.values.sortedByDescending { it.rssi } } .onStart { emit(emptyList()) } + .catch { + log(TAG, ERROR) { "PodMonitor failed:\n${it.asLog()}" } + } .replayingShare(appScope) val mainDevice: Flow