summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/qml/cover/CoverPage.qml1
-rw-r--r--app/qml/pages/ManagerPage.qml2
-rw-r--r--daemon/watchconnector.cpp19
-rw-r--r--daemon/watchconnector.h1
4 files changed, 17 insertions, 6 deletions
diff --git a/app/qml/cover/CoverPage.qml b/app/qml/cover/CoverPage.qml
index 767799e..186de30 100644
--- a/app/qml/cover/CoverPage.qml
+++ b/app/qml/cover/CoverPage.qml
@@ -58,6 +58,7 @@ CoverBackground {
CoverActionList {
id: coverAction
+ enabled: pebbled.active
CoverAction {
iconSource: pebbled.connected ? "image://theme/icon-cover-transfers" : "image://theme/icon-cover-sync"
diff --git a/app/qml/pages/ManagerPage.qml b/app/qml/pages/ManagerPage.qml
index adb1cf4..92d79b1 100644
--- a/app/qml/pages/ManagerPage.qml
+++ b/app/qml/pages/ManagerPage.qml
@@ -107,7 +107,7 @@ Page {
if (pebbled.connected) {
pebbled.disconnect();
} else {
- pebbled.connect();
+ pebbled.reconnect();
}
}
}
diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp
index d999229..d0fcdad 100644
--- a/daemon/watchconnector.cpp
+++ b/daemon/watchconnector.cpp
@@ -4,11 +4,14 @@
using namespace watch;
-static int __reconnect_timeout = 5000; //ms
+static int __reconnect_timeout = 1000; //ms
WatchConnector::WatchConnector(QObject *parent) :
QObject(parent), socket(nullptr), is_connected(false)
-{}
+{
+ reconnectTimer.setSingleShot(true);
+ connect(&reconnectTimer, SIGNAL(timeout()), SLOT(reconnect()));
+}
WatchConnector::~WatchConnector()
{
@@ -43,11 +46,14 @@ void WatchConnector::disconnect()
logger()->debug() << __FUNCTION__;
socket->close();
socket->deleteLater();
+ reconnectTimer.stop();
+ logger()->debug() << "Stopped reconnect timer";
}
void WatchConnector::handleWatch(const QString &name, const QString &address)
{
logger()->debug() << "handleWatch " << name << " " << address;
+ reconnectTimer.stop();
if (socket != nullptr && socket->isOpen()) {
socket->close();
socket->deleteLater();
@@ -67,7 +73,7 @@ void WatchConnector::handleWatch(const QString &name, const QString &address)
connect(socket, SIGNAL(error(QBluetoothSocket::SocketError)), this, SLOT(onError(QBluetoothSocket::SocketError)));
// FIXME: Assuming port 1 (with Pebble)
- socket->connectToService(QBluetoothAddress(address), QBluetoothUuid(QBluetoothUuid::SerialPort));
+ socket->connectToService(QBluetoothAddress(address), 1);
}
QString WatchConnector::decodeEndpoint(unsigned int val)
@@ -158,6 +164,8 @@ void WatchConnector::onConnected()
logger()->debug() << "Connected!";
bool was_connected = is_connected;
is_connected = true;
+ reconnectTimer.stop();
+ reconnectTimer.setInterval(0);
if (not was_connected) emit connectedChanged();
}
@@ -175,8 +183,9 @@ void WatchConnector::onDisconnected()
socket->deleteLater();
- // Try to connect again after a timeout
- QTimer::singleShot(__reconnect_timeout, this, SLOT(reconnect()));
+ reconnectTimer.setInterval(reconnectTimer.interval() + __reconnect_timeout);
+ reconnectTimer.start();
+ logger()->debug() << "Will reconnect in " << reconnectTimer.interval() << " ms";
}
void WatchConnector::onError(QBluetoothSocket::SocketError error) {
diff --git a/daemon/watchconnector.h b/daemon/watchconnector.h
index 4015870..36d0936 100644
--- a/daemon/watchconnector.h
+++ b/daemon/watchconnector.h
@@ -130,6 +130,7 @@ private:
QPointer<QBluetoothSocket> socket;
bool is_connected;
+ QTimer reconnectTimer;
QString _last_name;
QString _last_address;
};