summaryrefslogtreecommitdiffstats
path: root/src/imports/jsondb/jsondatabase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/jsondb/jsondatabase.cpp')
-rw-r--r--src/imports/jsondb/jsondatabase.cpp80
1 files changed, 40 insertions, 40 deletions
diff --git a/src/imports/jsondb/jsondatabase.cpp b/src/imports/jsondb/jsondatabase.cpp
index 491fe85..3d78428 100644
--- a/src/imports/jsondb/jsondatabase.cpp
+++ b/src/imports/jsondb/jsondatabase.cpp
@@ -41,22 +41,15 @@
#include "jsondatabase.h"
#include "jsondbpartition.h"
-#include "jsondb-object.h"
#include <QJSEngine>
#include <QQmlEngine>
+#include <qjsondbobject.h>
+#include <qjsondbconnection.h>
#include <qdebug.h>
QT_BEGIN_NAMESPACE_JSONDB
-struct Uuid
-{
- uint data1;
- ushort data2;
- ushort data3;
- uchar data4[8];
-};
-
-static const Uuid JsonDbNamespace = {0x6ba7b810, 0x9dad, 0x11d1, { 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8} };
+QPointer<QJsonDbConnection> JsonDatabase::connection(0);
/*!
\qmlclass JsonDatabase
@@ -70,13 +63,6 @@ static const Uuid JsonDbNamespace = {0x6ba7b810, 0x9dad, 0x11d1, { 0x80, 0xb4, 0
JsonDatabase::JsonDatabase(QObject *parent)
:QObject(parent)
{
- connect(&jsonDb, SIGNAL(response(int,const QVariant&)),
- this, SLOT(dbResponse(int,const QVariant&)),
- Qt::QueuedConnection);
- connect(&jsonDb, SIGNAL(error(int,int,QString)),
- this, SLOT(dbErrorResponse(int,int,QString)),
- Qt::QueuedConnection);
-
}
JsonDatabase::~JsonDatabase()
@@ -133,9 +119,18 @@ void JsonDatabase::listPartitions(const QJSValue &listCallback)
qWarning() << "Invalid callback specified.";
return;
}
- QString query(QLatin1String("[?_type=\"Partition\"]"));
- int id = jsonDb.query(query, 0, -1);
- listCallbacks.insert(id, listCallback);
+
+ QJsonDbReadRequest *request = new QJsonDbReadRequest;
+ request->setQuery(QLatin1String("[?_type=\"Partition\"]"));
+ request->setPartition(QLatin1String("Ephemeral"));
+ connect(request, SIGNAL(finished()), this, SLOT(onQueryFinished()));
+ connect(request, SIGNAL(finished()), request, SLOT(deleteLater()));
+ connect(request, SIGNAL(error(QtJsonDb::QJsonDbRequest::ErrorCode,QString)),
+ this, SLOT(onQueryError(QtJsonDb::QJsonDbRequest::ErrorCode,QString)));
+ connect(request, SIGNAL(error(QtJsonDb::QJsonDbRequest::ErrorCode,QString)),
+ request, SLOT(deleteLater()));
+ sharedConnection().send(request);
+ listCallbacks.insert(request, listCallback);
}
/*!
@@ -156,29 +151,23 @@ void JsonDatabase::listPartitions(const QJSValue &listCallback)
QString JsonDatabase::uuidFromString(const QString &identifier)
{
- const QUuid ns(JsonDbNamespace.data1, JsonDbNamespace.data2, JsonDbNamespace.data3,
- JsonDbNamespace.data4[0], JsonDbNamespace.data4[1], JsonDbNamespace.data4[2],
- JsonDbNamespace.data4[3], JsonDbNamespace.data4[4], JsonDbNamespace.data4[5],
- JsonDbNamespace.data4[6], JsonDbNamespace.data4[7]);
- return QUuid::createUuidV3(ns, identifier).toString();
+ return QJsonDbObject::createUuidFromString(identifier).toString();
}
-void JsonDatabase::dbResponse(int id, const QVariant &result)
+void JsonDatabase::onQueryFinished()
{
- if (listCallbacks.contains(id)) {
- // Make sure that id exists in the map.
- QJSValue callback = listCallbacks[id];
+ QJsonDbReadRequest *request = qobject_cast<QJsonDbReadRequest *>(sender());
+ if (listCallbacks.contains(request)) {
+ QJSValue callback = listCallbacks[request];
QJSEngine *engine = callback.engine();
QJSValueList args;
args << QJSValue(QJSValue::UndefinedValue);
- QVariantMap objectMap = result.toMap();
- if (objectMap.contains(QLatin1String("data"))) {
- QVariantList items = objectMap.value(QLatin1String("data")).toList();
- int count = items.count();
+ QList<QJsonObject> objects = request->takeResults();
+ int count = objects.count();
+ if (count) {
QJSValue response = engine->newArray(count);
for (int i = 0; i < count; ++i) {
- QVariantMap object = items.at(i).toMap();
- QString partitionName = object.value(QLatin1String("name")).toString();
+ QString partitionName = objects[i].value(QLatin1String("name")).toString();
response.setProperty(i, engine->newQObject(partition(partitionName)));
}
args << response;
@@ -186,14 +175,15 @@ void JsonDatabase::dbResponse(int id, const QVariant &result)
args << engine->newArray();
}
callback.call(args);
- listCallbacks.remove(id);
+ listCallbacks.remove(request);
}
}
-void JsonDatabase::dbErrorResponse(int id, int code, const QString &message)
+void JsonDatabase::onQueryError(QtJsonDb::QJsonDbRequest::ErrorCode code, const QString &message)
{
- if (listCallbacks.contains(id)) {
- QJSValue callback = listCallbacks[id];
+ QJsonDbReadRequest *request = qobject_cast<QJsonDbReadRequest *>(sender());
+ if (listCallbacks.contains(request)) {
+ QJSValue callback = listCallbacks[request];
QJSEngine *engine = callback.engine();
QJSValueList args;
@@ -204,9 +194,19 @@ void JsonDatabase::dbErrorResponse(int id, int code, const QString &message)
args << engine->toScriptValue(QVariant(error))<< engine->newArray();
callback.call(args);
- listCallbacks.remove(id);
+ listCallbacks.remove(request);
}
}
+QJsonDbConnection& JsonDatabase::sharedConnection()
+{
+ if (!connection) {
+ connection = QJsonDbConnection::defaultConnection();
+ connection->connectToServer();
+ }
+ return *connection;
+}
+
+
#include "moc_jsondatabase.cpp"
QT_END_NAMESPACE_JSONDB