diff options
| author | Javier <dev.git@javispedro.com> | 2016-01-02 05:10:03 +0100 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2016-02-12 01:46:24 +0100 |
| commit | 3a4e80053081ab7f5de142bfbc6589dfc2bc6e2d (patch) | |
| tree | a3f61628f4d424c43c6d9e1065560ddf4f67c56d | |
| parent | 5dc645452192f1e0b2261ec261945e310c77f8da (diff) | |
implement blobdbmanager
Conflicts:
daemon/daemon.pro
daemon/manager.h
daemon/watchconnector.h
| -rw-r--r-- | daemon/blobdbmanager.cc | 99 | ||||
| -rw-r--r-- | daemon/blobdbmanager.h | 48 | ||||
| -rw-r--r-- | daemon/daemon.pro | 2 | ||||
| -rw-r--r-- | daemon/manager.h | 2 | ||||
| -rw-r--r-- | daemon/watchconnector.h | 18 |
5 files changed, 169 insertions, 0 deletions
diff --git a/daemon/blobdbmanager.cc b/daemon/blobdbmanager.cc new file mode 100644 index 0000000..f7a33dd --- /dev/null +++ b/daemon/blobdbmanager.cc @@ -0,0 +1,99 @@ +#include "blobdbmanager.h" +#include "unpacker.h" +#include "packer.h" + +BlobDbManager::BlobDbManager(WatchConnector *watch, QObject *parent) : + QObject(parent), l(metaObject()->className()), watch(watch), + lastCookie(0) +{ + watch->setEndpointHandler(WatchConnector::watchBLOB_DB, + [this](const QByteArray &msg) { + handleMessage(msg); + return true; + }); +} + +void BlobDbManager::insert(BlobDatabase db, const QUuid &key, const QByteArray &data, const SuccessCallback &successCallback, const ErrorCallback &errorCallback) +{ + QByteArray msg; + Packer p(&msg); + PendingTransfer transfer; + transfer.cookie = ++lastCookie; + transfer.successCallback = successCallback; + transfer.errorCallback = errorCallback; + + p.writeLE<quint8>(WatchConnector::blobdbINSERT); + p.writeLE<quint16>(transfer.cookie); + p.writeLE<quint8>(db); + + p.writeLE<quint8>(16); + p.writeUuid(key); + + p.writeLE<quint16>(data.size()); + msg.append(data); + + pending.insert(transfer.cookie, transfer); + watch->sendMessage(WatchConnector::watchBLOB_DB, msg); +} + +void BlobDbManager::remove(BlobDatabase db, const QUuid &key, const SuccessCallback &successCallback, const ErrorCallback &errorCallback) +{ + QByteArray msg; + Packer p(&msg); + PendingTransfer transfer; + transfer.cookie = ++lastCookie; + transfer.successCallback = successCallback; + transfer.errorCallback = errorCallback; + + p.writeLE<quint8>(WatchConnector::blobdbINSERT); + p.writeLE<quint16>(transfer.cookie); + p.writeLE<quint8>(db); + + p.writeLE<quint8>(16); + p.writeUuid(key); + + pending.insert(transfer.cookie, transfer); + watch->sendMessage(WatchConnector::watchBLOB_DB, msg); +} + +void BlobDbManager::clear(BlobDatabase db, const SuccessCallback &successCallback, const ErrorCallback &errorCallback) +{ + QByteArray msg; + Packer p(&msg); + PendingTransfer transfer; + transfer.cookie = ++lastCookie; + transfer.successCallback = successCallback; + transfer.errorCallback = errorCallback; + + p.writeLE<quint8>(WatchConnector::blobdbINSERT); + p.writeLE<quint16>(transfer.cookie); + p.writeLE<quint8>(db); + + pending.insert(transfer.cookie, transfer); + watch->sendMessage(WatchConnector::watchBLOB_DB, msg); +} + +void BlobDbManager::handleMessage(const QByteArray &msg) +{ + Unpacker u(msg); + Cookie cookie = u.readLE<quint16>(); + quint8 status = u.readLE<quint8>(); + + PendingTransfer transfer = pending.take(cookie); + if (transfer.cookie != cookie) { + qCWarning(l) << "received a message for a cookie we don't know" << cookie; + return; + } + + if (status == 0 || status == WatchConnector::blobdbSUCCESS) { + qCDebug(l) << "success on cookie" << cookie; + if (transfer.successCallback) { + transfer.successCallback(); + } + } else { + qCWarning(l) << "failure on cookie" << cookie << "with status" << status; + if (transfer.errorCallback) { + transfer.errorCallback(WatchConnector::BlobDbStatus(status)); + } + } +} diff --git a/daemon/blobdbmanager.h b/daemon/blobdbmanager.h new file mode 100644 index 0000000..26f2ca6 --- /dev/null +++ b/daemon/blobdbmanager.h @@ -0,0 +1,48 @@ +#ifndef BLOBDBMANAGER_H +#define BLOBDBMANAGER_H + +#include <functional> +#include "watchconnector.h" + +class BlobDbManager : public QObject +{ + Q_OBJECT +public: + explicit BlobDbManager(WatchConnector *watch, QObject *parent = 0); + + enum BlobDatabase { + BlobDbTest = 0, + BlobDbPin = 1, + BlobDbApp = 2, + BlobDbReminder = 3, + BlobDbNotification = 4 + }; + + typedef std::function<void()> SuccessCallback; + typedef std::function<void(WatchConnector::BlobDbStatus)> ErrorCallback; + + void insert(BlobDatabase db, const QUuid &key, const QByteArray &data, const SuccessCallback &successCallback = SuccessCallback(), const ErrorCallback &errorCallback = ErrorCallback()); + void remove(BlobDatabase db, const QUuid &key, const SuccessCallback &successCallback = SuccessCallback(), const ErrorCallback &errorCallback = ErrorCallback()); + void clear(BlobDatabase db, const SuccessCallback &successCallback = SuccessCallback(), const ErrorCallback &errorCallback = ErrorCallback()); + +private: + typedef quint16 Cookie; + + struct PendingTransfer { + Cookie cookie; + SuccessCallback successCallback; + ErrorCallback errorCallback; + }; + +private: + void handleMessage(const QByteArray &msg); + +private: + QLoggingCategory l; + WatchConnector *watch; + + QHash<Cookie, PendingTransfer> pending; + Cookie lastCookie; +}; + +#endif // BLOBDBMANAGER_H diff --git a/daemon/daemon.pro b/daemon/daemon.pro index 0414e00..9bfb6d0 100644 --- a/daemon/daemon.pro +++ b/daemon/daemon.pro @@ -30,6 +30,7 @@ SOURCES += \ uploadmanager.cpp \ bundle.cpp \ appfetchmanager.cc \ + blobdbmanager.cc \ timelineitem.cpp HEADERS += \ @@ -52,6 +53,7 @@ HEADERS += \ uploadmanager.h \ bundle.h \ appfetchmanager.h \ + blobdbmanager.h \ timelineitem.h DBUS_ADAPTORS += ../org.pebbled.Watch.xml diff --git a/daemon/manager.h b/daemon/manager.h index e3bdb4e..5d3b494 100644 --- a/daemon/manager.h +++ b/daemon/manager.h @@ -10,6 +10,7 @@ #include "appmsgmanager.h"
#include "jskitmanager.h"
#include "appmanager.h"
+#include "blobdbmanager.h" #include "bankmanager.h"
#include "appfetchmanager.h" #include "settings.h"
@@ -41,6 +42,7 @@ class Manager : public QObject, protected QDBusContext WatchConnector *watch;
UploadManager *upload;
AppManager *apps;
+ BlobDbManager *blobdb; BankManager *bank;
AppFetchManager *fetch; VoiceCallManager *voice;
diff --git a/daemon/watchconnector.h b/daemon/watchconnector.h index 3ce2e74..011d2ab 100644 --- a/daemon/watchconnector.h +++ b/daemon/watchconnector.h @@ -171,6 +171,24 @@ public: uploadFILE = 6,
uploadWORKER = 7, uploadAPP_ID_FLAG = (1 << 7) +
+ uploadWORKER = 7, + uploadAPP_ID_FLAG = (1 << 7) + }; + enum BlobDbCommand { + blobdbINSERT = 1, + blobdbDELETE = 4, + blobdbCLEAR = 5 + }; + enum BlobDbStatus { + blobdbSUCCESS = 1, + blobdbFAILURE = 2, + blobdbINVALID_OPERATION = 3, + blobdbINVALID_DATABASE_ID = 4, + blobdbINVALID_DATA = 5, + blobdbKEY_DOES_NOT_EXIST = 6, + blobdbDATABASE_FULL = 7, + blobdbDATA_STALE = 8 };
enum PutBytesCommand {
putbytesINIT = 1,
|
