summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMorten Sorvig <msorvig@trolltech.com>2009-06-26 18:59:35 +0200
committerMorten Sorvig <msorvig@trolltech.com>2009-06-26 18:59:35 +0200
commitf246e8ab44f26babdc2b756132d29797cee5c735 (patch)
treeb5a824387ec10bd17c21b368786bec0b3470d8f3 /src
parent8e7cb36cf6122722ff5e37cedb1e4f746f5df9a1 (diff)
Split the json event handling up into functions and add error handling
Diffstat (limited to 'src')
-rw-r--r--src/eventqueue.cpp68
-rw-r--r--src/eventqueue.h3
2 files changed, 43 insertions, 28 deletions
diff --git a/src/eventqueue.cpp b/src/eventqueue.cpp
index 9914277..22c098b 100644
--- a/src/eventqueue.cpp
+++ b/src/eventqueue.cpp
@@ -82,35 +82,49 @@ void EventQueue::handleRequest(HttpRequest *request, HttpResponse *response)
// string object.
} else if (path.startsWith("/json")) {
QByteArray jsonText = path.mid(5); // remove "/json"
+ handleJsonRequest(jsonText, response);
+ }
+}
- // replace symbols that can't be a part of the url text.
- jsonText.replace("%7B", "{");
- jsonText.replace("%7D", "}");
- jsonText.replace("%22", "\"");
-
- DEBUG << "json request" << jsonText;
- json_object* request = json_tokener_parse(jsonText.data());
- json_object* type = json_object_object_get(request, "type");
-
- QByteArray typeText = json_object_get_string(type);
- DEBUG << typeText;
-
- if (typeText == "img") {
- json_object* idObject = json_object_object_get(request, "id");
- const int id = json_object_get_int(idObject);
- DEBUG << "id" << this << id << images.value(id).size();
-
- QByteArray block;
- QBuffer buffer(&block);
- buffer.open(QIODevice::WriteOnly);
- QImageWriter writer(&buffer, "png");
- writer.write(images.value(id));
-
- response->setBody(block);
- response->setContentType("image/png");
- }
- json_object_put(request); //free
+void EventQueue::handleJsonRequest(QByteArray jsonText, HttpResponse *response)
+{
+ // replace symbols that can't be a part of the url text.
+ jsonText.replace("%7B", "{");
+ jsonText.replace("%7D", "}");
+ jsonText.replace("%22", "\"");
+
+ DEBUG << "json request" << jsonText;
+ json_object* jsonRequest = json_tokener_parse(jsonText.data());
+ if (!jsonRequest)
+ return;
+ json_object* type = json_object_object_get(jsonRequest, "type");
+
+ QByteArray typeText = json_object_get_string(type);
+ DEBUG << typeText;
+
+ if (typeText == "img") {
+ handleImageRequest(jsonRequest, response);
}
+ json_object_put(jsonRequest); //free
+}
+
+void EventQueue::handleImageRequest(json_object* jsonRequest, HttpResponse *response)
+{
+ json_object* idObject = json_object_object_get(jsonRequest, "id");
+ if (!idObject)
+ return;
+
+ const int id = json_object_get_int(idObject);
+ DEBUG << "id" << this << id << images.value(id).size();
+
+ QByteArray block;
+ QBuffer buffer(&block);
+ buffer.open(QIODevice::WriteOnly);
+ QImageWriter writer(&buffer, "png");
+ writer.write(images.value(id));
+
+ response->setBody(block);
+ response->setContentType("image/png");
}
void EventQueue::addUpdateEvent(int id, const QImage &image, QRect updateRect)
diff --git a/src/eventqueue.h b/src/eventqueue.h
index d54dadf..6cc1caf 100644
--- a/src/eventqueue.h
+++ b/src/eventqueue.h
@@ -31,7 +31,8 @@ public:
void reset();
void handleRequest(HttpRequest *request, HttpResponse *response);
-
+ void handleJsonRequest(QByteArray jsonText, HttpResponse *response);
+ void handleImageRequest(json_object* jsonRequest, HttpResponse *response);
void addUpdateEvent(int id, const QImage &image, QRect updateRect);
void addGeometryEvent(int id, QRect globalGeometry);
void addParentChangeEvent(int id);