diff options
author | Alex Blasche <alexander.blasche@digia.com> | 2014-04-11 15:38:39 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-15 14:03:05 +0200 |
commit | 5f00449d4b1492142ba23211258e2370bdfa5986 (patch) | |
tree | 7128d3d7f77aef6bc36d3ca1c06eed5361982232 | |
parent | 5c2f4d3472630be3a7b35c136434df5e8b50928f (diff) | |
download | qtconnectivity-5f00449d4b1492142ba23211258e2370bdfa5986.tar.gz |
Don't double up the internal list of discovered services
Convention is that calling QBluetoothServiceDiscoveryAgent
maintains an internal list of discovered services. When start() is called
already discovered services are kept unless clear() was called. The Bluez
code never checked which services were already discovered by previous
discovery runs. This patch fixes this problem.
Change-Id: I3987d6ea65ea41aefc9726acc31f6abaa478c72c
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
-rw-r--r-- | src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp index 0e782d5c..a842d3d9 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp +++ b/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtBluetooth module of the Qt Toolkit. @@ -240,9 +240,24 @@ void QBluetoothServiceDiscoveryAgentPrivate::_q_discoveredServices(QDBusPendingC Q_Q(QBluetoothServiceDiscoveryAgent); - discoveredServices.append(serviceInfo); - qCDebug(QT_BT_BLUEZ) << "Discovered services" << discoveredDevices.at(0).address().toString(); - emit q->serviceDiscovered(serviceInfo); + //don't include the service if we already discovered it before + bool alreadyDiscovered = false; + for (int j = 0; j < discoveredServices.count(); j++) { + const QBluetoothServiceInfo &info = discoveredServices.at(j); + if (info.device() == serviceInfo.device() + && info.serviceClassUuids() == serviceInfo.serviceClassUuids() + && info.serviceUuid() == serviceInfo.serviceUuid()) { + alreadyDiscovered = true; + break; + } + } + + if (!alreadyDiscovered) { + discoveredServices.append(serviceInfo); + qCDebug(QT_BT_BLUEZ) << "Discovered services" << discoveredDevices.at(0).address().toString(); + emit q->serviceDiscovered(serviceInfo); + } + // could stop discovery, check for state if(discoveryState() == Inactive){ qCDebug(QT_BT_BLUEZ) << "Exit discovery after stop"; |