]> git.basschouten.com Git - openhab-addons.git/commitdiff
[bluetooth] Fix disappearing bluetooth devices in Inbox (#10187)
authorPete <8108165+PRosenb@users.noreply.github.com>
Thu, 25 Feb 2021 22:51:34 +0000 (23:51 +0100)
committerGitHub <noreply@github.com>
Thu, 25 Feb 2021 22:51:34 +0000 (14:51 -0800)
* [bluetooth] Notify things again when they are removed from listeners like Inbox
* [bluetooth] Add javadoc on retractDiscoveryResult()

Signed-off-by: Peter Rosenberg <prosenb.dev@gmail.com>
bundles/org.openhab.binding.bluetooth/src/main/java/org/openhab/binding/bluetooth/discovery/internal/BluetoothDiscoveryService.java

index efe8ae3702821f076ddf6f485cbd1263ce951b85..1f096e0fb74081c92dac0f0e149e06494981d756 100644 (file)
@@ -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<DiscoveryResult> results = discoveryResults.remove(adapter);
             if (results != null) {