From cdf044c070bfe48d81b77cfed1894c4520e3cf31 Mon Sep 17 00:00:00 2001 From: Pete <8108165+PRosenb@users.noreply.github.com> Date: Thu, 25 Feb 2021 23:51:34 +0100 Subject: [PATCH] [bluetooth] Fix disappearing bluetooth devices in Inbox (#10187) * [bluetooth] Notify things again when they are removed from listeners like Inbox * [bluetooth] Add javadoc on retractDiscoveryResult() Signed-off-by: Peter Rosenberg --- .../internal/BluetoothDiscoveryService.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bundles/org.openhab.binding.bluetooth/src/main/java/org/openhab/binding/bluetooth/discovery/internal/BluetoothDiscoveryService.java b/bundles/org.openhab.binding.bluetooth/src/main/java/org/openhab/binding/bluetooth/discovery/internal/BluetoothDiscoveryService.java index efe8ae3702..1f096e0fb7 100644 --- a/bundles/org.openhab.binding.bluetooth/src/main/java/org/openhab/binding/bluetooth/discovery/internal/BluetoothDiscoveryService.java +++ b/bundles/org.openhab.binding.bluetooth/src/main/java/org/openhab/binding/bluetooth/discovery/internal/BluetoothDiscoveryService.java @@ -133,6 +133,13 @@ public class BluetoothDiscoveryService extends AbstractDiscoveryService implemen for (BluetoothAdapter adapter : adapters) { adapter.scanStop(); } + + // The method `removeOlderResults()` removes the Things from listeners like `Inbox`. + // We therefore need to reset `latestSnapshot` so that the Things are notified again next time. + // Results newer than `getTimestampOfLastScan()` will also be notified again but do not lead to duplicates. + discoveryCaches.values().forEach(discoveryCache -> { + discoveryCache.latestSnapshot.putValue(null); + }); removeOlderResults(getTimestampOfLastScan()); } @@ -290,6 +297,12 @@ public class BluetoothDiscoveryService extends AbstractDiscoveryService implemen discoveryResults.put(adapter, results); } + /** + * Called when a new discovery is published and thus requires the old discovery to be removed first. + * + * @param adapter to get the results to be removed + * @param result unused + */ private void retractDiscoveryResult(BluetoothAdapter adapter, DiscoveryResult result) { Set results = discoveryResults.remove(adapter); if (results != null) { -- 2.47.3