mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Bluetooth: add helper to separate BT name and address
And restructure the existing "isBtAddress()" function in the process. Also add more tests. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
7512a6e915
commit
c8fec97695
4 changed files with 49 additions and 1 deletions
|
@ -305,6 +305,10 @@ bool BTDiscovery::checkException(const char* method, const QAndroidJniObject *ob
|
|||
|
||||
void BTDiscovery::discoverAddress(QString address)
|
||||
{
|
||||
// let's make sure there is no device name mixed in with the address
|
||||
QString btAddress;
|
||||
btAddress = extractBluetoothAddress(address);
|
||||
|
||||
#if defined(Q_OS_MACOS)
|
||||
// macOS appears to need a fresh scan if we want to switch devices
|
||||
static QString lastAddress;
|
||||
|
@ -321,11 +325,34 @@ void BTDiscovery::discoverAddress(QString address)
|
|||
}
|
||||
|
||||
bool isBluetoothAddress(const QString &address)
|
||||
{
|
||||
return extractBluetoothAddress(address) != QString();
|
||||
}
|
||||
QString extractBluetoothAddress(const QString &address)
|
||||
{
|
||||
QRegularExpression re("(LE:)*([0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}|{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}})",
|
||||
QRegularExpression::CaseInsensitiveOption);
|
||||
QRegularExpressionMatch m = re.match(address);
|
||||
return m.hasMatch();
|
||||
return m.captured(0);
|
||||
}
|
||||
|
||||
QString extractBluetoothNameAddress(const QString &address, QString &name)
|
||||
{
|
||||
// sometimes our device text is of the form "name (address)", sometimes it's just "address"
|
||||
// let's simply return the address
|
||||
name = QString();
|
||||
QString extractedAddress = extractBluetoothAddress(address);
|
||||
if (extractedAddress == address.trimmed())
|
||||
return address;
|
||||
|
||||
QRegularExpression re("^([^()]+)\\(([^)]*\\))$");
|
||||
QRegularExpressionMatch m = re.match(address);
|
||||
if (m.hasMatch()) {
|
||||
name = m.captured(1).trimmed();
|
||||
return extractedAddress;
|
||||
}
|
||||
qDebug() << "can't parse address" << address;
|
||||
return QString();
|
||||
}
|
||||
|
||||
void saveBtDeviceInfo(const QString &devaddr, QBluetoothDeviceInfo deviceInfo)
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
void saveBtDeviceInfo(const QString &devaddr, QBluetoothDeviceInfo deviceInfo);
|
||||
bool isBluetoothAddress(const QString &address);
|
||||
QString extractBluetoothAddress(const QString &address);
|
||||
QString extractBluetoothNameAddress(const QString &address, QString &name);
|
||||
QBluetoothDeviceInfo getBtDeviceInfo(const QString &devaddr);
|
||||
|
||||
class BTDiscovery : public QObject {
|
||||
|
|
|
@ -23,4 +23,22 @@ void TestHelper::recognizeBtAddress()
|
|||
QCOMPARE(isBluetoothAddress("LE:{6e50ff5d-cdd3-4c43-ag0a-1ed4c7d2d2a5}"), false);
|
||||
}
|
||||
|
||||
void TestHelper::parseNameAddress()
|
||||
{
|
||||
QString name, address;
|
||||
address = extractBluetoothNameAddress("01:a2:b3:c4:d5:06", name);
|
||||
QCOMPARE(address, "01:a2:b3:c4:d5:06");
|
||||
QCOMPARE(name, QString());
|
||||
address = extractBluetoothNameAddress("somename (01:a2:b3:c4:d5:06)", name);
|
||||
QCOMPARE(address, "01:a2:b3:c4:d5:06");
|
||||
QCOMPARE(name, QString("somename"));
|
||||
address = extractBluetoothNameAddress("garbage", name);
|
||||
QCOMPARE(address, QString());
|
||||
QCOMPARE(name, QString());
|
||||
address = extractBluetoothNameAddress("somename (LE:{6e50ff5d-cdd3-4c43-a80a-1ed4c7d2d2a5})", name);
|
||||
QCOMPARE(address, "LE:{6e50ff5d-cdd3-4c43-a80a-1ed4c7d2d2a5}");
|
||||
QCOMPARE(name, QString("somename"));
|
||||
|
||||
}
|
||||
|
||||
QTEST_GUILESS_MAIN(TestHelper)
|
||||
|
|
|
@ -10,6 +10,7 @@ class TestHelper : public QObject {
|
|||
private slots:
|
||||
void initTestCase();
|
||||
void recognizeBtAddress();
|
||||
void parseNameAddress();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue