From 3ce36b764fc55bdfc8fe98395cab072d50855e28 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 1 Mar 2016 09:13:06 +0100 Subject: New managers from javispedro AppFetchManager, BlobDBManager --- daemon/blobdbmanager.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 daemon/blobdbmanager.cpp (limited to 'daemon/blobdbmanager.cpp') diff --git a/daemon/blobdbmanager.cpp b/daemon/blobdbmanager.cpp new file mode 100644 index 0000000..f7a33dd --- /dev/null +++ b/daemon/blobdbmanager.cpp @@ -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(WatchConnector::blobdbINSERT); + p.writeLE(transfer.cookie); + p.writeLE(db); + + p.writeLE(16); + p.writeUuid(key); + + p.writeLE(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(WatchConnector::blobdbINSERT); + p.writeLE(transfer.cookie); + p.writeLE(db); + + p.writeLE(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(WatchConnector::blobdbINSERT); + p.writeLE(transfer.cookie); + p.writeLE(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(); + quint8 status = u.readLE(); + + 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)); + } + } +} -- cgit v1.2.3