libpurple/protocols/facebook/json.c

Wed, 29 Mar 2023 23:21:45 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Wed, 29 Mar 2023 23:21:45 -0500
changeset 42186
637ba5491231
parent 41879
6009bf441ef5
permissions
-rw-r--r--

Remove the original irc protocol plugin

I was waiting to do this until IRCv3 was at feature parity, but now one is
using this right now anyways which means having to keep updating it for changes
is just a waste of effort.

Testing Done:
ran `ninja turtles` and opened the new account dialog without issue.

Reviewed at https://reviews.imfreedom.org/r/2392/

37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1 /* purple
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
2 *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
5 * source distribution.
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
6 *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
10 * (at your option) any later version.
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
11 *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
15 * GNU General Public License for more details.
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
16 *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
20 */
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
21
40439
e9838d634d5e Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents: 39556
diff changeset
22 #include <glib/gi18n-lib.h>
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
23
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
24 #include <stdarg.h>
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
25 #include <string.h>
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
26
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
27 #include "json.h"
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
28 #include "util.h"
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
29
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
30 typedef struct _FbJsonValue FbJsonValue;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
31
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
32 struct _FbJsonValue
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
33 {
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
34 const gchar *expr;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
35 FbJsonType type;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
36 gboolean required;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
37 GValue value;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
38 };
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
39
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
40 /**
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
41 * FbJsonValues:
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
42 *
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
43 * Represents a JSON value handler.
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
44 */
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
45 struct _FbJsonValues
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
46 {
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
47 GObject parent;
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
48
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
49 JsonNode *root;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
50 GQueue *queue;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
51 GList *next;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
52
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
53 gboolean isarray;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
54 JsonArray *array;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
55 guint index;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
56
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
57 GError *error;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
58 };
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
59
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
60 G_DEFINE_TYPE(FbJsonValues, fb_json_values, G_TYPE_OBJECT);
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
61
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
62 static void
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
63 fb_json_values_dispose(GObject *obj)
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
64 {
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
65 FbJsonValues *values = FB_JSON_VALUES(obj);
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
66
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
67 if(values->queue != NULL) {
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
68 while(!g_queue_is_empty(values->queue)) {
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
69 FbJsonValue *value = g_queue_pop_head(values->queue);
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
70
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
71 if(G_IS_VALUE(&value->value)) {
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
72 g_value_unset(&value->value);
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
73 }
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
74
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
75 g_free(value);
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
76 }
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
77 }
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
78
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
79 g_clear_pointer(&values->array, json_array_unref);
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
80 g_clear_error(&values->error);
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
81 g_clear_pointer(&values->queue, g_queue_free);
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
82 }
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
83
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
84 static void
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
85 fb_json_values_class_init(FbJsonValuesClass *klass)
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
86 {
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
87 GObjectClass *gklass = G_OBJECT_CLASS(klass);
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
88
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
89 gklass->dispose = fb_json_values_dispose;
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
90 }
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
91
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
92 static void
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
93 fb_json_values_init(FbJsonValues *values)
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
94 {
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
95 values->queue = g_queue_new();
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
96 }
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
97
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
98 GQuark
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
99 fb_json_error_quark(void)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
100 {
37252
be11d9f148a6 facebook: initialize static GQuarks
James Geboski <jgeboski@gmail.com>
parents: 37251
diff changeset
101 static GQuark q = 0;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
102
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
103 if (G_UNLIKELY(q == 0)) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
104 q = g_quark_from_static_string("fb-json-error-quark");
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
105 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
106
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
107 return q;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
108 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
109
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
110 JsonBuilder *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
111 fb_json_bldr_new(JsonNodeType type)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
112 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
113 JsonBuilder *bldr;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
114
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
115 bldr = json_builder_new();
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
116
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
117 switch (type) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
118 case JSON_NODE_ARRAY:
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
119 fb_json_bldr_arr_begin(bldr, NULL);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
120 break;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
121
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
122 case JSON_NODE_OBJECT:
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
123 fb_json_bldr_obj_begin(bldr, NULL);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
124 break;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
125
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
126 default:
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
127 break;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
128 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
129
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
130 return bldr;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
131 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
132
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
133 gchar *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
134 fb_json_bldr_close(JsonBuilder *bldr, JsonNodeType type, gsize *size)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
135 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
136 gchar *ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
137 JsonGenerator *genr;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
138 JsonNode *root;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
139
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
140 switch (type) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
141 case JSON_NODE_ARRAY:
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
142 fb_json_bldr_arr_end(bldr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
143 break;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
144
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
145 case JSON_NODE_OBJECT:
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
146 fb_json_bldr_obj_end(bldr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
147 break;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
148
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
149 default:
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
150 break;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
151 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
152
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
153 genr = json_generator_new();
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
154 root = json_builder_get_root(bldr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
155
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
156 json_generator_set_root(genr, root);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
157 ret = json_generator_to_data(genr, size);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
158
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
159 json_node_free(root);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
160 g_object_unref(genr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
161 g_object_unref(bldr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
162
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
163 return ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
164 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
165
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
166 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
167 fb_json_bldr_arr_begin(JsonBuilder *bldr, const gchar *name)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
168 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
169 if (name != NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
170 json_builder_set_member_name(bldr, name);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
171 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
172
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
173 json_builder_begin_array(bldr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
174 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
175
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
176 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
177 fb_json_bldr_arr_end(JsonBuilder *bldr)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
178 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
179 json_builder_end_array(bldr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
180 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
181
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
182 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
183 fb_json_bldr_obj_begin(JsonBuilder *bldr, const gchar *name)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
184 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
185 if (name != NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
186 json_builder_set_member_name(bldr, name);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
187 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
188
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
189 json_builder_begin_object(bldr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
190 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
191
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
192 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
193 fb_json_bldr_obj_end(JsonBuilder *bldr)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
194 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
195 json_builder_end_object(bldr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
196 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
197
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
198 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
199 fb_json_bldr_add_bool(JsonBuilder *bldr, const gchar *name, gboolean value)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
200 {
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
201 if (name != NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
202 json_builder_set_member_name(bldr, name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
203 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
204
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
205 json_builder_add_boolean_value(bldr, value);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
206 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
207
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
208 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
209 fb_json_bldr_add_dbl(JsonBuilder *bldr, const gchar *name, gdouble value)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
210 {
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
211 if (name != NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
212 json_builder_set_member_name(bldr, name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
213 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
214
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
215 json_builder_add_double_value(bldr, value);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
216 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
217
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
218 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
219 fb_json_bldr_add_int(JsonBuilder *bldr, const gchar *name, gint64 value)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
220 {
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
221 if (name != NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
222 json_builder_set_member_name(bldr, name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
223 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
224
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
225 json_builder_add_int_value(bldr, value);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
226 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
227
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
228 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
229 fb_json_bldr_add_str(JsonBuilder *bldr, const gchar *name, const gchar *value)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
230 {
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
231 if (name != NULL) {
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
232 json_builder_set_member_name(bldr, name);
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
233 }
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
234
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
235 json_builder_add_string_value(bldr, value);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
236 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
237
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
238 void
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
239 fb_json_bldr_add_strf(JsonBuilder *bldr, const gchar *name,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
240 const gchar *format, ...)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
241 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
242 gchar *value;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
243 va_list ap;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
244
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
245 va_start(ap, format);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
246 value = g_strdup_vprintf(format, ap);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
247 va_end(ap);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
248
37284
53cb588d8760 facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents: 37269
diff changeset
249 fb_json_bldr_add_str(bldr, name, value);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
250 g_free(value);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
251 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
252
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
253 JsonNode *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
254 fb_json_node_new(const gchar *data, gssize size, GError **error)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
255 {
37429
7f8a2f301a82 facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents: 37363
diff changeset
256 gchar *slice;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
257 JsonNode *root;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
258 JsonParser *prsr;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
259
37431
df4d0ab7eaae facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents: 37430
diff changeset
260 g_return_val_if_fail(data != NULL, NULL);
df4d0ab7eaae facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents: 37430
diff changeset
261
df4d0ab7eaae facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents: 37430
diff changeset
262 if (size < 0) {
df4d0ab7eaae facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents: 37430
diff changeset
263 size = strlen(data);
df4d0ab7eaae facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents: 37430
diff changeset
264 }
df4d0ab7eaae facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents: 37430
diff changeset
265
37429
7f8a2f301a82 facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents: 37363
diff changeset
266 /* Ensure data is null terminated for json-glib < 1.0.2 */
7f8a2f301a82 facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents: 37363
diff changeset
267 slice = g_strndup(data, size);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
268 prsr = json_parser_new();
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
269
37429
7f8a2f301a82 facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents: 37363
diff changeset
270 if (!json_parser_load_from_data(prsr, slice, size, error)) {
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
271 g_object_unref(prsr);
37429
7f8a2f301a82 facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents: 37363
diff changeset
272 g_free(slice);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
273 return NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
274 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
275
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
276 root = json_parser_get_root(prsr);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
277 root = json_node_copy(root);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
278
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
279 g_object_unref(prsr);
37429
7f8a2f301a82 facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents: 37363
diff changeset
280 g_free(slice);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
281 return root;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
282 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
283
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
284 JsonNode *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
285 fb_json_node_get(JsonNode *root, const gchar *expr, GError **error)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
286 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
287 GError *err = NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
288 guint size;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
289 JsonArray *rslt;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
290 JsonNode *node;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
291 JsonNode *ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
292
37430
56c7dbe97266 facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents: 37429
diff changeset
293 /* Special case for json-glib < 0.99.2 */
56c7dbe97266 facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents: 37429
diff changeset
294 if (purple_strequal(expr, "$")) {
56c7dbe97266 facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents: 37429
diff changeset
295 return json_node_copy(root);
56c7dbe97266 facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents: 37429
diff changeset
296 }
56c7dbe97266 facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents: 37429
diff changeset
297
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
298 node = json_path_query(expr, root, &err);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
299
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
300 if (err != NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
301 g_propagate_error(error, err);
37251
8d6136db4399 facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
302 json_node_free(node);
8d6136db4399 facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
303 return NULL;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
304 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
305
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
306 rslt = json_node_get_array(node);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
307 size = json_array_get_length(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
308
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
309 if (size < 1) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
310 g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_NOMATCH,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
311 _("No matches for %s"), expr);
37251
8d6136db4399 facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
312 json_node_free(node);
8d6136db4399 facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
313 return NULL;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
314 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
315
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
316 if (size > 1) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
317 g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_AMBIGUOUS,
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
318 _("Ambiguous matches for %s"), expr);
37251
8d6136db4399 facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
319 json_node_free(node);
8d6136db4399 facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents: 37250
diff changeset
320 return NULL;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
321 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
322
37299
b14336308988 facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
323 if (json_array_get_null_element(rslt, 0)) {
b14336308988 facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
324 g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_NULL,
b14336308988 facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
325 _("Null value for %s"), expr);
b14336308988 facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
326 json_node_free(node);
b14336308988 facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
327 return NULL;
b14336308988 facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
328 }
b14336308988 facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents: 37284
diff changeset
329
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
330 ret = json_array_dup_element(rslt, 0);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
331 json_node_free(node);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
332 return ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
333 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
334
37315
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
335 JsonNode *
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
336 fb_json_node_get_nth(JsonNode *root, guint n)
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
337 {
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
338 GList *vals;
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
339 JsonNode *ret;
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
340 JsonObject *obj;
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
341
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
342 obj = json_node_get_object(root);
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
343 vals = json_object_get_values(obj);
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
344 ret = g_list_nth_data(vals, n);
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
345
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
346 g_list_free(vals);
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
347 return ret;
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
348 }
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
349
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
350 JsonArray *
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
351 fb_json_node_get_arr(JsonNode *root, const gchar *expr, GError **error)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
352 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
353 JsonArray *ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
354 JsonNode *rslt;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
355
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
356 rslt = fb_json_node_get(root, expr, error);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
357
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
358 if (rslt == NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
359 return NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
360 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
361
37269
129e87951cd6 facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
362 ret = json_node_dup_array(rslt);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
363 json_node_free(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
364 return ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
365 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
366
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
367 gboolean
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
368 fb_json_node_get_bool(JsonNode *root, const gchar *expr, GError **error)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
369 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
370 gboolean ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
371 JsonNode *rslt;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
372
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
373 rslt = fb_json_node_get(root, expr, error);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
374
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
375 if (rslt == NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
376 return FALSE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
377 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
378
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
379 ret = json_node_get_boolean(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
380 json_node_free(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
381 return ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
382 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
383
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
384 gdouble
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
385 fb_json_node_get_dbl(JsonNode *root, const gchar *expr, GError **error)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
386 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
387 gdouble ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
388 JsonNode *rslt;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
389
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
390 rslt = fb_json_node_get(root, expr, error);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
391
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
392 if (rslt == NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
393 return 0.0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
394 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
395
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
396 ret = json_node_get_double(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
397 json_node_free(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
398 return ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
399 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
400
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
401 gint64
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
402 fb_json_node_get_int(JsonNode *root, const gchar *expr, GError **error)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
403 {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
404 gint64 ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
405 JsonNode *rslt;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
406
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
407 rslt = fb_json_node_get(root, expr, error);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
408
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
409 if (rslt == NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
410 return 0;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
411 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
412
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
413 ret = json_node_get_int(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
414 json_node_free(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
415 return ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
416 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
417
37269
129e87951cd6 facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
418 gchar *
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
419 fb_json_node_get_str(JsonNode *root, const gchar *expr, GError **error)
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
420 {
37269
129e87951cd6 facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
421 gchar *ret;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
422 JsonNode *rslt;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
423
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
424 rslt = fb_json_node_get(root, expr, error);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
425
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
426 if (rslt == NULL) {
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
427 return NULL;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
428 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
429
37269
129e87951cd6 facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents: 37252
diff changeset
430 ret = json_node_dup_string(rslt);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
431 json_node_free(rslt);
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
432 return ret;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
433 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
434
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
435 FbJsonValues *
37334
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
436 fb_json_values_new(JsonNode *root)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
437 {
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
438 FbJsonValues *values;
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
439
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
440 g_return_val_if_fail(root != NULL, NULL);
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
441
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
442 values = g_object_new(FB_TYPE_JSON_VALUES, NULL);
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
443 values->root = root;
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
444
37363
7201f07fe8f7 facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents: 37334
diff changeset
445 return values;
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
446 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
447
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
448 void
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
449 fb_json_values_add(FbJsonValues *values, FbJsonType type, gboolean required,
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
450 const gchar *expr)
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
451 {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
452 FbJsonValue *value;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
453
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
454 g_return_if_fail(values != NULL);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
455 g_return_if_fail(expr != NULL);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
456
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
457 value = g_new0(FbJsonValue, 1);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
458 value->expr = expr;
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
459 value->type = type;
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
460 value->required = required;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
461
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
462 g_queue_push_tail(values->queue, value);
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
463 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
464
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
465 JsonNode *
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
466 fb_json_values_get_root(FbJsonValues *values)
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
467 {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
468 guint index;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
469
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
470 g_return_val_if_fail(values != NULL, NULL);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
471
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
472 if(values->array == NULL) {
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
473 return values->root;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
474 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
475
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
476 g_return_val_if_fail(values->index > 0, NULL);
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
477 index = values->index - 1;
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
478
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
479 if(json_array_get_length(values->array) <= index) {
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
480 return NULL;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
481 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
482
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
483 return json_array_get_element(values->array, index);
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
484 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
485
37334
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
486 void
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
487 fb_json_values_set_array(FbJsonValues *values, gboolean required,
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
488 const gchar *expr)
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
489 {
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
490 g_return_if_fail(values != NULL);
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
491
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
492 values->array = fb_json_node_get_arr(values->root, expr, &values->error);
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
493 values->isarray = TRUE;
37334
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
494
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
495 if(!required) {
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
496 g_clear_error(&values->error);
37334
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
497 }
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
498 }
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
499
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
500 gboolean
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
501 fb_json_values_update(FbJsonValues *values, GError **error)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
502 {
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
503 FbJsonValue *value;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
504 GError *err = NULL;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
505 GList *l;
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
506 GType type;
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
507 JsonNode *root;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
508 JsonNode *node;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
509
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
510 g_return_val_if_fail(values != NULL, FALSE);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
511
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
512 if(G_UNLIKELY(values->error != NULL)) {
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
513 g_propagate_error(error, values->error);
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
514 values->error = NULL;
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
515 return FALSE;
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
516 }
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
517
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
518 if(values->isarray) {
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
519 if(values->array == NULL ||
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
520 json_array_get_length(values->array) <= values->index)
37334
860ee76f5f58 facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents: 37321
diff changeset
521 {
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
522 return FALSE;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
523 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
524
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
525 root = json_array_get_element(values->array, values->index++);
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
526 } else {
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
527 root = values->root;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
528 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
529
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
530 g_return_val_if_fail(root != NULL, FALSE);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
531
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
532 for(l = values->queue->head; l != NULL; l = l->next) {
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
533 value = l->data;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
534 node = fb_json_node_get(root, value->expr, &err);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
535
37315
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
536 if (G_IS_VALUE(&value->value)) {
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
537 g_value_unset(&value->value);
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
538 }
7a7771557143 facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents: 37314
diff changeset
539
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
540 if (err != NULL) {
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
541 json_node_free(node);
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
542
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
543 if (value->required) {
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
544 g_propagate_error(error, err);
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
545 return FALSE;
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
546 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
547
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
548 g_clear_error(&err);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
549 continue;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
550 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
551
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
552 type = json_node_get_value_type(node);
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
553
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
554 if (G_UNLIKELY(type != value->type)) {
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
555 g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_TYPE,
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
556 _("Expected a %s but got a %s for %s"),
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
557 g_type_name(value->type),
37320
a21c8ba4d0e9 facebook: fixed the printing of invalid JSON type names
James Geboski <jgeboski@gmail.com>
parents: 37316
diff changeset
558 g_type_name(type),
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
559 value->expr);
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
560 json_node_free(node);
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
561 return FALSE;
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
562 }
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
563
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
564 json_node_get_value(node, &value->value);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
565 json_node_free(node);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
566 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
567
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
568 values->next = values->queue->head;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
569 return TRUE;
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
570 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
571
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
572 const GValue *
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
573 fb_json_values_next(FbJsonValues *values)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
574 {
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
575 FbJsonValue *value;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
576
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
577 g_return_val_if_fail(values != NULL, NULL);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
578
41879
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
579 g_return_val_if_fail(values->next != NULL, NULL);
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
580 value = values->next->data;
6009bf441ef5 De-privatize more Facebook internals
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40439
diff changeset
581 values->next = values->next->next;
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
582
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
583 if (!G_IS_VALUE(&value->value)) {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
584 return NULL;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
585 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
586
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
587 return &value->value;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
588 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
589
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
590 gboolean
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
591 fb_json_values_next_bool(FbJsonValues *values, gboolean defval)
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
592 {
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
593 const GValue *value;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
594
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
595 value = fb_json_values_next(values);
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
596
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
597 if (G_UNLIKELY(value == NULL)) {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
598 return defval;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
599 }
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
600
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
601 return g_value_get_boolean(value);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
602 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
603
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
604 gdouble
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
605 fb_json_values_next_dbl(FbJsonValues *values, gdouble defval)
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
606 {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
607 const GValue *value;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
608
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
609 value = fb_json_values_next(values);
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
610
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
611 if (G_UNLIKELY(value == NULL)) {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
612 return defval;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
613 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
614
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
615 return g_value_get_double(value);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
616 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
617
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
618 gint64
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
619 fb_json_values_next_int(FbJsonValues *values, gint64 defval)
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
620 {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
621 const GValue *value;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
622
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
623 value = fb_json_values_next(values);
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
624
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
625 if (G_UNLIKELY(value == NULL)) {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
626 return defval;
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
627 }
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
628
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
629 return g_value_get_int64(value);
37250
3f5570a17b15 facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
630 }
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
631
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
632 const gchar *
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
633 fb_json_values_next_str(FbJsonValues *values, const gchar *defval)
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
634 {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
635 const GValue *value;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
636
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
637 value = fb_json_values_next(values);
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
638
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
639 if (G_UNLIKELY(value == NULL)) {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
640 return defval;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
641 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
642
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
643 return g_value_get_string(value);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
644 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
645
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
646 gchar *
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
647 fb_json_values_next_str_dup(FbJsonValues *values, const gchar *defval)
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
648 {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
649 const GValue *value;
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
650
37316
9e3520d6ec49 facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents: 37315
diff changeset
651 value = fb_json_values_next(values);
37314
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
652
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
653 if (G_UNLIKELY(value == NULL)) {
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
654 return g_strdup(defval);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
655 }
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
656
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
657 return g_value_dup_string(value);
1fedb5e19577 facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents: 37299
diff changeset
658 }

mercurial