[couchdb-glib/wip/query-response] port dbwatch to the new api
- From: Krzysztof Klimonda <kklimonda src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [couchdb-glib/wip/query-response] port dbwatch to the new api
- Date: Wed, 19 Jan 2011 12:55:39 +0000 (UTC)
commit e862f7d87d16c9f7e95bd555eb8c02ad63dd922d
Author: Krzysztof Klimonda <kklimonda syntaxhighlighted com>
Date: Wed Jan 19 13:42:01 2011 +0100
port dbwatch to the new api
couchdb-glib/dbwatch.c | 90 ++++++++++++++++++++++++------------------------
1 files changed, 45 insertions(+), 45 deletions(-)
---
diff --git a/couchdb-glib/dbwatch.c b/couchdb-glib/dbwatch.c
index df92e36..d76dbca 100644
--- a/couchdb-glib/dbwatch.c
+++ b/couchdb-glib/dbwatch.c
@@ -20,7 +20,6 @@
*/
#include <libsoup/soup-method.h>
-#include "couchdb-document.h"
#include "dbwatch.h"
#include "utils.h"
@@ -28,28 +27,28 @@
#define REMOTE_TIMEOUT_SECONDS 300
static void
-process_change (DBWatch *watch, JsonNode *node)
+process_change (JsonArray * array, guint index_, gpointer user_data)
{
- JsonObject *this_change;
+ DBWatch *watch;
+ JsonObject *object, *document;
const gchar *id;
- CouchdbDocument *document;
+
+ watch = (DBWatch *) user_data;
GError *error = NULL;
- if (json_node_get_node_type (node) != JSON_NODE_OBJECT)
- return;
+ object = json_array_get_object_element (array, index_);
- this_change = json_node_get_object (node);
- if (!json_object_has_member (this_change, "id"))
+ if (!json_object_has_member (object, "id"))
return;
- id = json_object_get_string_member (this_change, "id");
+ id = json_object_get_string_member (object, "id");
/* We need to try retrieving the document, to check if it's removed or not */
- document = couchdb_database_get_document (watch->database, id, &error);
+ document = couchdb_database_get_document (watch->database, id, NULL, &error);
if (document) {
const gchar *revision;
- revision = couchdb_document_get_revision (document);
+ revision = json_object_get_string_member (document, "_id");
if (revision != NULL) {
if (revision[0] == '1')
g_signal_emit_by_name (watch->database, "document_created", document);
@@ -72,42 +71,43 @@ process_change (DBWatch *watch, JsonNode *node)
static gboolean
watch_timeout_cb (gpointer user_data)
{
- char *url;
- JsonParser *parser;
- GError *error = NULL;
- DBWatch *watch = (DBWatch *) user_data;
-
- url = g_strdup_printf ("%s/%s/_changes?since=%d",
- couchdb_session_get_uri (couchdb_database_get_session (watch->database)),
- couchdb_database_get_name (watch->database),
- watch->last_update_seq);
- parser = json_parser_new ();
- if (couchdb_session_send_message (couchdb_database_get_session (watch->database), SOUP_METHOD_GET, url, NULL, parser, &error)) {
- JsonNode *root_node;
-
- root_node = json_parser_get_root (parser);
- if (json_node_get_node_type (root_node) == JSON_NODE_OBJECT) {
- JsonObject *root_object;
- JsonArray *results;
-
- root_object = json_node_get_object (root_node);
- results = json_object_get_array_member (root_object, "results");
- if (results) {
- GList *json_elements, *sl;
-
- json_elements = json_array_get_elements (results);
- for (sl = json_elements; sl != NULL; sl = sl->next)
- process_change (watch, (JsonNode *) sl->data);
- }
-
- if (json_object_has_member (root_object, "last_seq"))
- watch->last_update_seq = json_object_get_int_member (root_object, "last_seq");
- }
+ CouchdbQuery *query;
+ CouchdbResponse *response;
+ JsonObject *object;
+ JsonArray *results;
+ GError *error;
+ char *last_update_seq;
+ DBWatch *watch;
+
+ watch = (DBWatch *) user_data;
+
+ error = NULL;
+ last_update_seq = g_strdup_printf ("%d", watch->last_update_seq);
+ query = couchdb_query_new_for_path ("/_changes");
+ couchdb_query_set_option (query, "since", last_update_seq);
+ g_free (last_update_seq);
+
+ response = couchdb_database_execute_query (watch->database, query, &error);
+ if (!response) {
+ g_object_unref (query);
+ g_warning ("error: %s", error->message);
+ g_error_free (error);
+
+ return FALSE;
}
- /* Free memory */
- g_object_unref (G_OBJECT (parser));
- g_free (url);
+ object = couchdb_response_get_json_object (response);
+ if (json_object_has_member (object, "last_seq")) {
+ watch->last_update_seq =
+ json_object_get_int_member (object, "last_seq");
+ }
+
+ results = json_object_get_array_member (object, "results");
+ json_array_foreach_element (results,
+ (JsonArrayForeach) process_change, watch);
+
+ g_object_unref (response);
+ g_object_unref (query);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]