summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
Diffstat (limited to 'daemon')
-rw-r--r--daemon/bankmanager.cpp14
-rw-r--r--daemon/bankmanager.h4
-rw-r--r--daemon/manager.cpp25
-rw-r--r--daemon/manager.h8
-rw-r--r--daemon/uploadmanager.cpp5
-rw-r--r--daemon/watchconnector.cpp16
-rw-r--r--daemon/watchconnector.h1
7 files changed, 58 insertions, 15 deletions
diff --git a/daemon/bankmanager.cpp b/daemon/bankmanager.cpp
index fe5dc21..8636e95 100644
--- a/daemon/bankmanager.cpp
+++ b/daemon/bankmanager.cpp
@@ -21,6 +21,16 @@ int BankManager::numSlots() const
return _slots.size();
}
+bool BankManager::isUsed(int slot) const
+{
+ return _slots.at(slot).used;
+}
+
+QUuid BankManager::appAt(int slot) const
+{
+ return _slots.at(slot).uuid;
+}
+
bool BankManager::uploadApp(const QUuid &uuid, int slot)
{
AppInfo info = apps->info(uuid);
@@ -39,6 +49,10 @@ bool BankManager::uploadApp(const QUuid &uuid, int slot)
logger()->warn() << "invalid slot index";
return false;
}
+ if (_slots[slot].used) {
+ logger()->warn() << "slot in use";
+ return false;
+ }
QDir appDir(info.path());
diff --git a/daemon/bankmanager.h b/daemon/bankmanager.h
index 6abedc8..871db6b 100644
--- a/daemon/bankmanager.h
+++ b/daemon/bankmanager.h
@@ -15,6 +15,9 @@ public:
int numSlots() const;
+ bool isUsed(int slot) const;
+ QUuid appAt(int slot) const;
+
signals:
void slotsChanged();
@@ -28,7 +31,6 @@ private:
int findUnusedSlot() const;
void refreshWatchApp(int slot, std::function<void()> successCallback, std::function<void(int)> errorCallback);
-
private slots:
void handleWatchConnected();
diff --git a/daemon/manager.cpp b/daemon/manager.cpp
index 136d7f3..469e92b 100644
--- a/daemon/manager.cpp
+++ b/daemon/manager.cpp
@@ -70,6 +70,7 @@ Manager::Manager(Settings *settings, QObject *parent) :
connect(dbus, &DBusConnector::pebbleChanged, proxy, &PebbledProxy::NameChanged);
connect(dbus, &DBusConnector::pebbleChanged, proxy, &PebbledProxy::AddressChanged);
connect(watch, &WatchConnector::connectedChanged, proxy, &PebbledProxy::ConnectedChanged);
+ connect(bank, &BankManager::slotsChanged, proxy, &PebbledProxy::AppSlotsChanged);
QString currentProfile = getCurrentProfile();
defaultProfile = currentProfile.isEmpty() ? "ambience" : currentProfile;
@@ -414,6 +415,26 @@ void Manager::onAppClosed(const QUuid &uuid)
emit proxy->AppUuidChanged();
}
+QStringList PebbledProxy::AppSlots() const
+{
+ const int num_slots = manager()->bank->numSlots();
+ QStringList l;
+ l.reserve(num_slots);
+
+ for (int i = 0; i < num_slots; ++i) {
+ if (manager()->bank->isUsed(i)) {
+ QUuid uuid = manager()->bank->appAt(i);
+ l.append(uuid.toString());
+ } else {
+ l.append(QString());
+ }
+ }
+
+ Q_ASSERT(l.size() == num_slots);
+
+ return l;
+}
+
bool PebbledProxy::SendAppMessage(const QString &uuid, const QVariantMap &data)
{
Q_ASSERT(calledFromDBus());
@@ -501,7 +522,7 @@ void PebbledProxy::SendAppConfigurationData(const QString &uuid, const QString &
manager()->js->handleWebviewClosed(data);
}
-void PebbledProxy::UnloadApp(uint slot)
+void PebbledProxy::UnloadApp(int slot)
{
Q_ASSERT(calledFromDBus());
const QDBusMessage msg = message();
@@ -512,7 +533,7 @@ void PebbledProxy::UnloadApp(uint slot)
}
}
-void PebbledProxy::UploadApp(const QString &uuid, uint slot)
+void PebbledProxy::UploadApp(const QString &uuid, int slot)
{
Q_ASSERT(calledFromDBus());
const QDBusMessage msg = message();
diff --git a/daemon/manager.h b/daemon/manager.h
index f27da98..0588705 100644
--- a/daemon/manager.h
+++ b/daemon/manager.h
@@ -122,6 +122,7 @@ class PebbledProxy : public QObject, protected QDBusContext
Q_PROPERTY(QString Address READ Address NOTIFY AddressChanged)
Q_PROPERTY(bool Connected READ Connected NOTIFY ConnectedChanged)
Q_PROPERTY(QString AppUuid READ AppUuid NOTIFY AppUuidChanged)
+ Q_PROPERTY(QStringList AppSlots READ AppSlots NOTIFY AppSlotsChanged)
inline Manager* manager() const { return static_cast<Manager*>(parent()); }
inline QVariantMap pebble() const { return manager()->dbus->pebble(); }
@@ -134,6 +135,8 @@ public:
inline bool Connected() const { return manager()->watch->isConnected(); }
inline QString AppUuid() const { return manager()->currentAppUuid.toString(); }
+ QStringList AppSlots() const;
+
public slots:
inline void Disconnect() { manager()->watch->disconnect(); }
inline void Reconnect() { manager()->watch->reconnect(); }
@@ -147,14 +150,15 @@ public slots:
QString StartAppConfiguration(const QString &uuid);
void SendAppConfigurationData(const QString &uuid, const QString &data);
- void UnloadApp(uint slot);
- void UploadApp(const QString &uuid, uint slot);
+ void UnloadApp(int slot);
+ void UploadApp(const QString &uuid, int slot);
signals:
void NameChanged();
void AddressChanged();
void ConnectedChanged();
void AppUuidChanged();
+ void AppSlotsChanged();
void AppOpened(const QString &uuid);
void AppClosed(const QString &uuid);
};
diff --git a/daemon/uploadmanager.cpp b/daemon/uploadmanager.cpp
index 89d70f7..ccbf12a 100644
--- a/daemon/uploadmanager.cpp
+++ b/daemon/uploadmanager.cpp
@@ -122,8 +122,6 @@ void UploadManager::handleMessage(const QByteArray &msg)
Q_ASSERT(!_pending.empty());
PendingUpload &upload = _pending.head();
- logger()->debug() << "get message" << msg.toHex();
-
Unpacker u(msg);
int status = u.read<quint8>();
@@ -195,6 +193,9 @@ void UploadManager::handleMessage(const QByteArray &msg)
startNextUpload();
}
break;
+ default:
+ logger()->warn() << "received message in wrong state";
+ break;
}
}
diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp
index 21f5ad5..e66ec0f 100644
--- a/daemon/watchconnector.cpp
+++ b/daemon/watchconnector.cpp
@@ -5,6 +5,7 @@
#include "unpacker.h"
static const int RECONNECT_TIMEOUT = 500; //ms
+static const bool PROTOCOL_DEBUG = false;
using std::function;
@@ -135,7 +136,7 @@ bool WatchConnector::dispatchMessage(uint endpoint, const QByteArray &data)
}
logger()->info() << "message to endpoint" << decodeEndpoint(endpoint) << "was not dispatched";
- emit messageReceived(endpoint, data);
+ logger()->debug() << data.toHex();
return false;
}
@@ -182,6 +183,7 @@ void WatchConnector::onReadSocket()
QByteArray data = socket->read(message_length);
logger()->debug() << "received message of length" << message_length << "to endpoint" << decodeEndpoint(endpoint);
+ if (PROTOCOL_DEBUG) logger()->debug() << data.toHex();
dispatchMessage(endpoint, data);
}
@@ -225,7 +227,7 @@ void WatchConnector::onDisconnected()
reconnectTimer.setInterval(reconnectTimer.interval() + RECONNECT_TIMEOUT);
}
reconnectTimer.start();
- logger()->debug() << "Will reconnect in" << reconnectTimer.interval() << "ms";
+ logger()->debug() << "will reconnect in" << reconnectTimer.interval() << "ms";
}
void WatchConnector::onError(QBluetoothSocket::SocketError error)
@@ -233,7 +235,7 @@ void WatchConnector::onError(QBluetoothSocket::SocketError error)
if (error == QBluetoothSocket::UnknownSocketError) {
logger()->info() << error << socket->errorString();
} else {
- logger()->error() << "Error connecting Pebble:" << error << socket->errorString();
+ logger()->error() << "error connecting Pebble:" << error << socket->errorString();
}
}
@@ -241,11 +243,11 @@ void WatchConnector::sendData(const QByteArray &data)
{
writeData.append(data);
if (socket == nullptr) {
- logger()->debug() << "No socket - reconnecting";
+ logger()->debug() << "no socket - reconnecting";
reconnect();
} else if (is_connected) {
- logger()->debug() << "Writing" << data.length() << "bytes to socket";
- logger()->debug() << data.toHex();
+ logger()->debug() << "writing" << data.length() << "bytes to socket";
+ if (PROTOCOL_DEBUG) logger()->debug() << data.toHex();
socket->write(data);
}
}
@@ -253,7 +255,7 @@ void WatchConnector::sendData(const QByteArray &data)
void WatchConnector::onBytesWritten(qint64 bytes)
{
writeData.remove(0, bytes);
- logger()->debug() << "Socket written" << bytes << "bytes," << writeData.length() << "left";
+ logger()->debug() << "socket written" << bytes << "bytes," << writeData.length() << "left";
}
void WatchConnector::sendMessage(uint endpoint, const QByteArray &data, const EndpointHandlerFunc &callback)
diff --git a/daemon/watchconnector.h b/daemon/watchconnector.h
index 1aaf39d..2e89b8c 100644
--- a/daemon/watchconnector.h
+++ b/daemon/watchconnector.h
@@ -193,7 +193,6 @@ public:
static QString decodeEndpoint(uint val);
signals:
- void messageReceived(uint endpoint, const QByteArray &data);
void nameChanged();
void connectedChanged();