Statistics
| Branch: | Tag: | Revision:

root / glue / glue_json.c @ master

History | View | Annotate | Download (71.2 KB)

1 55e0e9a0 Erik van Pienbroek
/* 
2 7af40dae Erik van Pienbroek
    Copyright (C) 2005-2012  Erik van Pienbroek
3 55e0e9a0 Erik van Pienbroek

                
4 55e0e9a0 Erik van Pienbroek
    This program is free software; you can redistribute it and/or modify
5 55e0e9a0 Erik van Pienbroek
    it under the terms of the GNU General Public License as published by
6 55e0e9a0 Erik van Pienbroek
    the Free Software Foundation; either version 2 of the License, or
7 55e0e9a0 Erik van Pienbroek
    (at your option) any later version.
8 55e0e9a0 Erik van Pienbroek

                
9 55e0e9a0 Erik van Pienbroek
    This program is distributed in the hope that it will be useful,
10 55e0e9a0 Erik van Pienbroek
    but WITHOUT ANY WARRANTY; without even the implied warranty of
11 55e0e9a0 Erik van Pienbroek
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 55e0e9a0 Erik van Pienbroek
    GNU General Public License for more details.
13 55e0e9a0 Erik van Pienbroek

                
14 55e0e9a0 Erik van Pienbroek
    You should have received a copy of the GNU General Public License
15 55e0e9a0 Erik van Pienbroek
    along with this program; if not, write to the Free Software
16 55e0e9a0 Erik van Pienbroek
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 55e0e9a0 Erik van Pienbroek
*/
18 55e0e9a0 Erik van Pienbroek

                
19 b76f93bc Erik van Pienbroek
#ifdef HAVE_CONFIG_H
20 55e0e9a0 Erik van Pienbroek
#include "config.h"
21 55e0e9a0 Erik van Pienbroek
#endif
22 55e0e9a0 Erik van Pienbroek

                
23 d9ff048e Erik van Pienbroek
#include 
24 55e0e9a0 Erik van Pienbroek
#include 
25 55e0e9a0 Erik van Pienbroek
#include 
26 55e0e9a0 Erik van Pienbroek

                
27 55e0e9a0 Erik van Pienbroek
#include 
28 55e0e9a0 Erik van Pienbroek
#include 
29 55e0e9a0 Erik van Pienbroek

                
30 55e0e9a0 Erik van Pienbroek
#include "nntpgrab.h"
31 55e0e9a0 Erik van Pienbroek
#include "nntpgrab_utils.h"
32 55e0e9a0 Erik van Pienbroek
#include "nntpgrab_internal.h"
33 55e0e9a0 Erik van Pienbroek
#include "nntpgrab_glue.h"
34 55e0e9a0 Erik van Pienbroek
#include "nntpgrab_glue_internal.h"
35 55e0e9a0 Erik van Pienbroek

                
36 55e0e9a0 Erik van Pienbroek
#include "json_object.h"
37 55e0e9a0 Erik van Pienbroek
#include "json.h"
38 55e0e9a0 Erik van Pienbroek
#include "jsonrpc.h"
39 55e0e9a0 Erik van Pienbroek

                
40 3e36b172 Erik van Pienbroek
static void process_foreach_collection_event(const char *msg, struct json_object *params);
41 3e36b172 Erik van Pienbroek
static void process_foreach_file_event(const char *msg, struct json_object *params);
42 3e36b172 Erik van Pienbroek
static void process_foreach_group_event(const char *msg, struct json_object *params);
43 3e36b172 Erik van Pienbroek

                
44 55e0e9a0 Erik van Pienbroek
static struct json_object *
45 55e0e9a0 Erik van Pienbroek
get_json_param(const char *msg, struct json_object *params, const char *field, const char *event_name, enum json_type type)
46 55e0e9a0 Erik van Pienbroek
{
47 55e0e9a0 Erik van Pienbroek
    struct json_object *obj;
48 55e0e9a0 Erik van Pienbroek

                
49 55e0e9a0 Erik van Pienbroek
    obj = json_object_object_get(params, (char*) field);
50 55e0e9a0 Erik van Pienbroek
    if (!obj) {
51 d9ff048e Erik van Pienbroek
        g_print(__FILE__ ":%i field '%s' is missing for event or method '%s', msg = %s\n", __LINE__, field, event_name, msg);
52 55e0e9a0 Erik van Pienbroek
        return NULL;
53 55e0e9a0 Erik van Pienbroek
    }
54 55e0e9a0 Erik van Pienbroek

                
55 55e0e9a0 Erik van Pienbroek
    if (json_object_get_type(obj) != type) {
56 d9ff048e Erik van Pienbroek
        g_print(__FILE__ ":%i field '%s' is of invalid type for event or method '%s', msg = %s\n", __LINE__, field, event_name, msg);
57 55e0e9a0 Erik van Pienbroek
        return NULL;
58 55e0e9a0 Erik van Pienbroek
    }
59 55e0e9a0 Erik van Pienbroek

                
60 55e0e9a0 Erik van Pienbroek
    return obj;
61 55e0e9a0 Erik van Pienbroek
}
62 55e0e9a0 Erik van Pienbroek

                
63 55e0e9a0 Erik van Pienbroek
#define get_param(msg, params, field, event_name, type, dest)                                           \
64 55e0e9a0 Erik van Pienbroek
    {                                                                                                   \
65 55e0e9a0 Erik van Pienbroek
        struct json_object *obj = get_json_param(msg, params, field, event_name, json_type_ ## type);   \
66 55e0e9a0 Erik van Pienbroek
        if (!obj) {                                                                                     \
67 55e0e9a0 Erik van Pienbroek
            return;                                                                                     \
68 55e0e9a0 Erik van Pienbroek
        }                                                                                               \
69 55e0e9a0 Erik van Pienbroek
        dest = json_object_get_ ## type (obj);                                                          \
70 55e0e9a0 Erik van Pienbroek
    }
71 55e0e9a0 Erik van Pienbroek

                
72 55e0e9a0 Erik van Pienbroek
static void
73 55e0e9a0 Erik van Pienbroek
emit_part_download_start(const char *msg, struct json_object *params)
74 55e0e9a0 Erik van Pienbroek
{
75 55e0e9a0 Erik van Pienbroek
    char *servername;
76 55e0e9a0 Erik van Pienbroek
    int conn_id;
77 55e0e9a0 Erik van Pienbroek
    char *collection_name;
78 55e0e9a0 Erik van Pienbroek
    char *subject;
79 55e0e9a0 Erik van Pienbroek
    int part_num;
80 55e0e9a0 Erik van Pienbroek

                
81 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "servername", "part_download_start", string, servername);
82 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "conn_id", "part_download_start", int, conn_id);
83 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "part_download_start", string, collection_name);
84 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "part_download_start", string, subject);
85 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "part_num", "part_download_start", int, part_num);
86 55e0e9a0 Erik van Pienbroek

                
87 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_part_download_start(FALSE, servername, conn_id, collection_name, subject, part_num);
88 55e0e9a0 Erik van Pienbroek
}
89 55e0e9a0 Erik van Pienbroek

                
90 55e0e9a0 Erik van Pienbroek
static void
91 55e0e9a0 Erik van Pienbroek
emit_part_done(const char *msg, struct json_object *params)
92 55e0e9a0 Erik van Pienbroek
{
93 55e0e9a0 Erik van Pienbroek
    char *servername;
94 55e0e9a0 Erik van Pienbroek
    int conn_id;
95 55e0e9a0 Erik van Pienbroek
    char *collection_name;
96 55e0e9a0 Erik van Pienbroek
    char *subject;
97 55e0e9a0 Erik van Pienbroek
    int part_num;
98 55e0e9a0 Erik van Pienbroek
    int size;
99 55e0e9a0 Erik van Pienbroek

                
100 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "servername", "part_done", string, servername);
101 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "conn_id", "part_done", int, conn_id);
102 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "part_done", string, collection_name);
103 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "part_done", string, subject);
104 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "part_num", "part_done", int, part_num);
105 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "size", "part_done", int, size);
106 55e0e9a0 Erik van Pienbroek

                
107 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_part_done(FALSE, servername, conn_id, collection_name, subject, part_num, size);
108 55e0e9a0 Erik van Pienbroek
}
109 55e0e9a0 Erik van Pienbroek

                
110 55e0e9a0 Erik van Pienbroek
static void
111 55e0e9a0 Erik van Pienbroek
emit_part_failed(const char *msg, struct json_object *params)
112 55e0e9a0 Erik van Pienbroek
{
113 55e0e9a0 Erik van Pienbroek
    char *servername;
114 55e0e9a0 Erik van Pienbroek
    int conn_id;
115 55e0e9a0 Erik van Pienbroek
    char *collection_name;
116 55e0e9a0 Erik van Pienbroek
    char *subject;
117 55e0e9a0 Erik van Pienbroek
    int part_num;
118 55e0e9a0 Erik van Pienbroek
    int size;
119 55e0e9a0 Erik van Pienbroek
    gboolean all_servers_tried;
120 55e0e9a0 Erik van Pienbroek

                
121 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "servername", "part_done", string, servername);
122 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "conn_id", "part_done", int, conn_id);
123 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "part_done", string, collection_name);
124 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "part_done", string, subject);
125 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "part_num", "part_done", int, part_num);
126 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "size", "part_done", int, size);
127 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "all_servers_tried", "part_done", boolean, all_servers_tried);
128 55e0e9a0 Erik van Pienbroek

                
129 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_part_failed(FALSE, servername, conn_id, collection_name, subject, part_num, size, all_servers_tried);
130 55e0e9a0 Erik van Pienbroek
}
131 55e0e9a0 Erik van Pienbroek

                
132 55e0e9a0 Erik van Pienbroek
static void
133 55e0e9a0 Erik van Pienbroek
emit_traffic_monitor_update(const char *msg, struct json_object *params)
134 55e0e9a0 Erik van Pienbroek
{
135 55e0e9a0 Erik van Pienbroek
    int bytes_received[10];
136 55e0e9a0 Erik van Pienbroek
    int stamp;
137 55e0e9a0 Erik van Pienbroek

                
138 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received1",  "traffic_monitor_update", int, bytes_received[0]);
139 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received2",  "traffic_monitor_update", int, bytes_received[1]);
140 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received3",  "traffic_monitor_update", int, bytes_received[2]);
141 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received4",  "traffic_monitor_update", int, bytes_received[3]);
142 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received5",  "traffic_monitor_update", int, bytes_received[4]);
143 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received6",  "traffic_monitor_update", int, bytes_received[5]);
144 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received7",  "traffic_monitor_update", int, bytes_received[6]);
145 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received8",  "traffic_monitor_update", int, bytes_received[7]);
146 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received9",  "traffic_monitor_update", int, bytes_received[8]);
147 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_received10", "traffic_monitor_update", int, bytes_received[9]);
148 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "stamp", "traffic_monitor_update", int, stamp);
149 55e0e9a0 Erik van Pienbroek

                
150 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_traffic_monitor_update(FALSE, bytes_received, stamp);
151 55e0e9a0 Erik van Pienbroek
}
152 55e0e9a0 Erik van Pienbroek

                
153 55e0e9a0 Erik van Pienbroek
static void
154 55e0e9a0 Erik van Pienbroek
emit_part_progress_update(const char *msg, struct json_object *params)
155 55e0e9a0 Erik van Pienbroek
{
156 55e0e9a0 Erik van Pienbroek
    char *servername;
157 55e0e9a0 Erik van Pienbroek
    int conn_id;
158 94890db0 Erik van Pienbroek
    char *collection_name;
159 55e0e9a0 Erik van Pienbroek
    char *subject;
160 55e0e9a0 Erik van Pienbroek
    int part_num;
161 55e0e9a0 Erik van Pienbroek
    int bytes_downloaded;
162 55e0e9a0 Erik van Pienbroek
    int bytes_total;
163 55e0e9a0 Erik van Pienbroek

                
164 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "servername", "part_progress_update", string, servername);
165 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "conn_id", "part_progress_update", int, conn_id);
166 94890db0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "part_progress_update", string, collection_name);
167 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "part_progress_update", string, subject);
168 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "part_num", "part_progress_update", int, part_num);
169 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_downloaded", "part_progress_update", int, bytes_downloaded);
170 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "bytes_total", "part_progress_update", int, bytes_total);
171 55e0e9a0 Erik van Pienbroek

                
172 94890db0 Erik van Pienbroek
    nntpgrab_core_emit_part_progress_update(FALSE, servername, conn_id, collection_name, subject, part_num, bytes_downloaded, bytes_total);
173 55e0e9a0 Erik van Pienbroek
}
174 55e0e9a0 Erik van Pienbroek

                
175 55e0e9a0 Erik van Pienbroek
static void
176 55e0e9a0 Erik van Pienbroek
emit_collection_added(const char *msg, struct json_object *params)
177 55e0e9a0 Erik van Pienbroek
{
178 55e0e9a0 Erik van Pienbroek
    char *collection_name;
179 55e0e9a0 Erik van Pienbroek
    char *poster;
180 55e0e9a0 Erik van Pienbroek

                
181 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "collection_added", string, collection_name);
182 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "poster", "collection_added", string, poster);
183 55e0e9a0 Erik van Pienbroek

                
184 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_collection_added(FALSE, collection_name, poster);
185 55e0e9a0 Erik van Pienbroek
}
186 55e0e9a0 Erik van Pienbroek

                
187 55e0e9a0 Erik van Pienbroek
static void
188 55e0e9a0 Erik van Pienbroek
emit_collection_removed(const char *msg, struct json_object *params)
189 55e0e9a0 Erik van Pienbroek
{
190 55e0e9a0 Erik van Pienbroek
    char *collection_name;
191 55e0e9a0 Erik van Pienbroek

                
192 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "collection_removed", string, collection_name);
193 55e0e9a0 Erik van Pienbroek

                
194 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_collection_removed(FALSE, collection_name);
195 55e0e9a0 Erik van Pienbroek
}
196 55e0e9a0 Erik van Pienbroek

                
197 55e0e9a0 Erik van Pienbroek
static void
198 55e0e9a0 Erik van Pienbroek
emit_collection_modified(const char *msg, struct json_object *params)
199 55e0e9a0 Erik van Pienbroek
{
200 55e0e9a0 Erik van Pienbroek
    char *collection_name;
201 55e0e9a0 Erik van Pienbroek
    char *poster;
202 55e0e9a0 Erik van Pienbroek

                
203 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "collection_modified", string, collection_name);
204 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "poster", "collection_modified", string, poster);
205 55e0e9a0 Erik van Pienbroek

                
206 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_collection_modified(FALSE, collection_name, poster);
207 55e0e9a0 Erik van Pienbroek
}
208 55e0e9a0 Erik van Pienbroek

                
209 55e0e9a0 Erik van Pienbroek
static void
210 55e0e9a0 Erik van Pienbroek
emit_file_added(const char *msg, struct json_object *params)
211 55e0e9a0 Erik van Pienbroek
{
212 55e0e9a0 Erik van Pienbroek
    struct json_object *obj;
213 55e0e9a0 Erik van Pienbroek
    int len;
214 55e0e9a0 Erik van Pienbroek
    int i;
215 55e0e9a0 Erik van Pienbroek
    char *collection_name;
216 55e0e9a0 Erik van Pienbroek
    char *subject;
217 55e0e9a0 Erik van Pienbroek
    char *poster;
218 55e0e9a0 Erik van Pienbroek
    int stamp;
219 4c8dde64 Erik van Pienbroek
    guint64 file_size;
220 4c8dde64 Erik van Pienbroek
    guint64 total_size;
221 4c8dde64 Erik van Pienbroek
    guint64 total_size_remaining;
222 18074ccc Erik van Pienbroek
    NGTaskState status;
223 55e0e9a0 Erik van Pienbroek
    int num_parts;
224 55e0e9a0 Erik van Pienbroek
    GList *groups;
225 55e0e9a0 Erik van Pienbroek

                
226 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "file_added", string, collection_name);
227 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "file_added", string, subject);
228 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "poster", "file_added", string, poster);
229 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "stamp", "file_added", int, stamp);
230 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "file_size", "file_added", int, file_size);
231 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "total_size", "file_added", int, total_size);
232 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "total_size_remaining", "file_added", int, total_size_remaining);
233 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "status", "file_added", int, status);
234 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "num_parts", "file_added", int, num_parts);
235 55e0e9a0 Erik van Pienbroek

                
236 55e0e9a0 Erik van Pienbroek
    obj = get_json_param(msg, params, "groups", "file_added", json_type_array);
237 55e0e9a0 Erik van Pienbroek
    if (!obj) {
238 55e0e9a0 Erik van Pienbroek
        return;
239 55e0e9a0 Erik van Pienbroek
    }
240 55e0e9a0 Erik van Pienbroek

                
241 55e0e9a0 Erik van Pienbroek
    groups = NULL;
242 55e0e9a0 Erik van Pienbroek
    len = json_object_array_length(obj);
243 55e0e9a0 Erik van Pienbroek
    for (i = 0; i < len; i++) {
244 55e0e9a0 Erik van Pienbroek
        struct json_object *group = json_object_array_get_idx(obj, i);
245 55e0e9a0 Erik van Pienbroek
        char *groupname;
246 55e0e9a0 Erik van Pienbroek

                
247 55e0e9a0 Erik van Pienbroek
        g_return_if_fail(group != NULL);
248 55e0e9a0 Erik van Pienbroek

                
249 55e0e9a0 Erik van Pienbroek
        groupname = json_object_get_string(group);
250 55e0e9a0 Erik van Pienbroek

                
251 55e0e9a0 Erik van Pienbroek
        g_return_if_fail(groupname != NULL);
252 55e0e9a0 Erik van Pienbroek

                
253 55e0e9a0 Erik van Pienbroek
        groups = g_list_append(groups, groupname);
254 55e0e9a0 Erik van Pienbroek
    }
255 55e0e9a0 Erik van Pienbroek

                
256 4c8dde64 Erik van Pienbroek
    nntpgrab_core_emit_file_added(FALSE, collection_name, subject, poster, stamp, file_size * 1024, total_size * 1024, total_size_remaining * 1024, status, num_parts, groups);
257 55e0e9a0 Erik van Pienbroek

                
258 55e0e9a0 Erik van Pienbroek
    g_list_free(groups);
259 55e0e9a0 Erik van Pienbroek
}
260 55e0e9a0 Erik van Pienbroek

                
261 55e0e9a0 Erik van Pienbroek
static void
262 55e0e9a0 Erik van Pienbroek
emit_file_removed(const char *msg, struct json_object *params)
263 55e0e9a0 Erik van Pienbroek
{
264 55e0e9a0 Erik van Pienbroek
    char *collection_name;
265 55e0e9a0 Erik van Pienbroek
    char *subject;
266 4c8dde64 Erik van Pienbroek
    guint64 total_size;
267 4c8dde64 Erik van Pienbroek
    guint64 total_size_remaining;
268 55e0e9a0 Erik van Pienbroek

                
269 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "file_removed", string, collection_name);
270 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "file_removed", string, subject);
271 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "total_size", "file_removed", int, total_size);
272 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "total_size_remaining", "file_removed", int, total_size_remaining);
273 55e0e9a0 Erik van Pienbroek

                
274 4c8dde64 Erik van Pienbroek
    nntpgrab_core_emit_file_removed(FALSE, collection_name, subject, total_size * 1024, total_size_remaining * 1024);
275 55e0e9a0 Erik van Pienbroek
}
276 55e0e9a0 Erik van Pienbroek

                
277 55e0e9a0 Erik van Pienbroek
static void
278 55e0e9a0 Erik van Pienbroek
emit_file_download_state_update(const char *msg, struct json_object *params)
279 55e0e9a0 Erik van Pienbroek
{
280 55e0e9a0 Erik van Pienbroek
    char *collection_name;
281 55e0e9a0 Erik van Pienbroek
    char *subject;
282 55e0e9a0 Erik van Pienbroek
    int num_parts_total;
283 55e0e9a0 Erik van Pienbroek
    int num_parts_done;
284 55e0e9a0 Erik van Pienbroek
    int num_parts_failed;
285 4c8dde64 Erik van Pienbroek
    guint64 file_size;
286 4c8dde64 Erik van Pienbroek
    guint64 file_size_remaining;
287 4c8dde64 Erik van Pienbroek
    guint64 total_size;
288 4c8dde64 Erik van Pienbroek
    guint64 total_size_remaining;
289 55e0e9a0 Erik van Pienbroek

                
290 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "file_download_state_update", string, collection_name);
291 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "file_download_state_update", string, subject);
292 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "num_parts_total", "file_download_state_update", int, num_parts_total);
293 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "num_parts_done", "file_download_state_update", int, num_parts_done);
294 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "num_parts_failed", "file_download_state_update", int, num_parts_failed);
295 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "file_size", "file_download_state_update", int, file_size);
296 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "file_size_remaining", "file_download_state_update", int, file_size_remaining);
297 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "total_size", "file_download_state_update", int, total_size);
298 4c8dde64 Erik van Pienbroek
    get_param(msg, params, "total_size_remaining", "file_download_state_update", int, total_size_remaining);
299 55e0e9a0 Erik van Pienbroek

                
300 4c8dde64 Erik van Pienbroek
    nntpgrab_core_emit_file_download_state_update(FALSE, collection_name, subject, num_parts_total, num_parts_done, num_parts_failed, file_size * 1024, file_size_remaining * 1024, total_size * 1024, total_size_remaining * 1024);
301 55e0e9a0 Erik van Pienbroek
}
302 55e0e9a0 Erik van Pienbroek

                
303 55e0e9a0 Erik van Pienbroek
static void
304 55e0e9a0 Erik van Pienbroek
emit_file_state_changed(const char *msg, struct json_object *params)
305 55e0e9a0 Erik van Pienbroek
{
306 55e0e9a0 Erik van Pienbroek
    char *collection_name;
307 55e0e9a0 Erik van Pienbroek
    char *subject;
308 55e0e9a0 Erik van Pienbroek
    char *real_filename;
309 55e0e9a0 Erik van Pienbroek
    int old_state;
310 55e0e9a0 Erik van Pienbroek
    int new_state;
311 8755b670 Erik van Pienbroek
    guint64 file_size_remaining;
312 8755b670 Erik van Pienbroek
    guint64 total_size;
313 8755b670 Erik van Pienbroek
    guint64 total_size_remaining;
314 55e0e9a0 Erik van Pienbroek

                
315 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "file_state_changed", string, collection_name);
316 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "file_state_changed", string, subject);
317 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "real_filename", "file_state_changed", string, real_filename);
318 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "old_state", "file_state_changed", int, old_state);
319 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "new_state", "file_state_changed", int, new_state);
320 8755b670 Erik van Pienbroek
    get_param(msg, params, "file_size_remaining", "file_state_changed", int, file_size_remaining);
321 8755b670 Erik van Pienbroek
    get_param(msg, params, "total_size", "file_state_changed", int, total_size);
322 8755b670 Erik van Pienbroek
    get_param(msg, params, "total_size_remaining", "file_state_changed", int, total_size_remaining);
323 55e0e9a0 Erik van Pienbroek

                
324 8755b670 Erik van Pienbroek
    nntpgrab_core_emit_file_state_changed(FALSE, collection_name, subject, real_filename, old_state, new_state, file_size_remaining * 1024, total_size * 1024, total_size_remaining * 1024);
325 55e0e9a0 Erik van Pienbroek
}
326 55e0e9a0 Erik van Pienbroek

                
327 55e0e9a0 Erik van Pienbroek
static void
328 55e0e9a0 Erik van Pienbroek
emit_connection_connecting(const char *msg, struct json_object *params)
329 55e0e9a0 Erik van Pienbroek
{
330 55e0e9a0 Erik van Pienbroek
    char *servername;
331 55e0e9a0 Erik van Pienbroek
    int conn_id;
332 55e0e9a0 Erik van Pienbroek

                
333 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "servername", "connection_connecting", string, servername);
334 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "conn_id", "connection_connecting", int, conn_id);
335 55e0e9a0 Erik van Pienbroek

                
336 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_connecting(FALSE, servername, conn_id);
337 55e0e9a0 Erik van Pienbroek
}
338 55e0e9a0 Erik van Pienbroek

                
339 55e0e9a0 Erik van Pienbroek
static void
340 55e0e9a0 Erik van Pienbroek
emit_connection_connected(const char *msg, struct json_object *params)
341 55e0e9a0 Erik van Pienbroek
{
342 55e0e9a0 Erik van Pienbroek
    char *servername;
343 55e0e9a0 Erik van Pienbroek
    int conn_id;
344 55e0e9a0 Erik van Pienbroek
    char *welcome_msg;
345 55e0e9a0 Erik van Pienbroek

                
346 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "servername", "connection_connected", string, servername);
347 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "conn_id", "connection_connected", int, conn_id);
348 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "welcome_msg", "connection_connected", string, welcome_msg);
349 55e0e9a0 Erik van Pienbroek

                
350 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_connected(FALSE, servername, conn_id, welcome_msg);
351 55e0e9a0 Erik van Pienbroek
}
352 55e0e9a0 Erik van Pienbroek

                
353 55e0e9a0 Erik van Pienbroek
static void
354 55e0e9a0 Erik van Pienbroek
emit_connection_disconnect(const char *msg, struct json_object *params)
355 55e0e9a0 Erik van Pienbroek
{
356 55e0e9a0 Erik van Pienbroek
    char *servername;
357 55e0e9a0 Erik van Pienbroek
    int conn_id;
358 55e0e9a0 Erik van Pienbroek
    NNTPDisconnectType disconnect_type;
359 55e0e9a0 Erik van Pienbroek
    char *reason;
360 55e0e9a0 Erik van Pienbroek

                
361 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "servername", "connection_disconnect", string, servername);
362 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "conn_id", "connection_disconnect", int, conn_id);
363 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "disconnect_type", "connection_disconnect", int, disconnect_type);
364 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "reason", "connection_disconnect", string, reason);
365 55e0e9a0 Erik van Pienbroek

                
366 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_disconnect(FALSE, servername, conn_id, disconnect_type, reason);
367 55e0e9a0 Erik van Pienbroek
}
368 55e0e9a0 Erik van Pienbroek

                
369 55e0e9a0 Erik van Pienbroek
static void
370 55e0e9a0 Erik van Pienbroek
emit_schedular_state_changed(const char *msg, struct json_object *params)
371 55e0e9a0 Erik van Pienbroek
{
372 18074ccc Erik van Pienbroek
    NGSchedularState new_state;
373 55e0e9a0 Erik van Pienbroek
    char *reason;
374 55e0e9a0 Erik van Pienbroek

                
375 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "new_state", "schedular_state_changed", int, new_state);
376 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "reason", "schedular_state_changed", string, reason);
377 55e0e9a0 Erik van Pienbroek

                
378 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_schedular_state_changed(FALSE, new_state, (strlen(reason) > 0 ? reason : NULL));
379 55e0e9a0 Erik van Pienbroek
}
380 55e0e9a0 Erik van Pienbroek

                
381 55e0e9a0 Erik van Pienbroek
static void
382 55e0e9a0 Erik van Pienbroek
emit_log_message(const char *msg, struct json_object *params)
383 55e0e9a0 Erik van Pienbroek
{
384 55e0e9a0 Erik van Pienbroek
    char *component;
385 55e0e9a0 Erik van Pienbroek
    NGLogLevel log_level;
386 55e0e9a0 Erik van Pienbroek
    char *message;
387 55e0e9a0 Erik van Pienbroek

                
388 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "component", "log_message", string, component);
389 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "log_level", "log_message", int, log_level);
390 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "msg", "log_message", string, message);
391 55e0e9a0 Erik van Pienbroek

                
392 f380196e Erik van Pienbroek
    nntpgrab_core_emit_log_message(FALSE, component, log_level, message, TRUE, FALSE);
393 55e0e9a0 Erik van Pienbroek
}
394 55e0e9a0 Erik van Pienbroek

                
395 55e0e9a0 Erik van Pienbroek
static void
396 55e0e9a0 Erik van Pienbroek
emit_task_moved(const char *msg, struct json_object *params)
397 55e0e9a0 Erik van Pienbroek
{
398 55e0e9a0 Erik van Pienbroek
    char *orig_collection_name;
399 55e0e9a0 Erik van Pienbroek
    char *subject;
400 55e0e9a0 Erik van Pienbroek
    char *new_collection_name;
401 55e0e9a0 Erik van Pienbroek
    int old_position;
402 55e0e9a0 Erik van Pienbroek
    int new_position;
403 55e0e9a0 Erik van Pienbroek

                
404 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "orig_collection_name", "task_moved", string, orig_collection_name);
405 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "subject", "task_moved", string, subject);
406 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "new_collection_name", "task_moved", string, new_collection_name);
407 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "old_position", "task_moved", int, old_position);
408 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "new_position", "task_moved", int, new_position);
409 55e0e9a0 Erik van Pienbroek

                
410 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_file_moved(FALSE, orig_collection_name, subject, new_collection_name, old_position, new_position);
411 55e0e9a0 Erik van Pienbroek
}
412 55e0e9a0 Erik van Pienbroek

                
413 55e0e9a0 Erik van Pienbroek
static void
414 55e0e9a0 Erik van Pienbroek
emit_collection_moved(const char *msg, struct json_object *params)
415 55e0e9a0 Erik van Pienbroek
{
416 55e0e9a0 Erik van Pienbroek
    char *collection_name;
417 55e0e9a0 Erik van Pienbroek
    int old_position;
418 55e0e9a0 Erik van Pienbroek
    int new_position;
419 55e0e9a0 Erik van Pienbroek

                
420 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "collection_name", "collection_moved", string, collection_name);
421 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "old_position", "collection_moved", int, old_position);
422 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "new_position", "collection_moved", int, new_position);
423 55e0e9a0 Erik van Pienbroek

                
424 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_collection_moved(FALSE, collection_name, old_position, new_position);
425 55e0e9a0 Erik van Pienbroek
}
426 55e0e9a0 Erik van Pienbroek

                
427 55e0e9a0 Erik van Pienbroek
static void
428 55e0e9a0 Erik van Pienbroek
emit_plugin_loaded(const char *msg, struct json_object *params)
429 55e0e9a0 Erik van Pienbroek
{
430 55e0e9a0 Erik van Pienbroek
    char *plugin_name;
431 55e0e9a0 Erik van Pienbroek
    gboolean is_persistent;
432 55e0e9a0 Erik van Pienbroek

                
433 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "plugin_name", "plugin_loaded", string, plugin_name);
434 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "is_persistent", "plugin_loaded", boolean, is_persistent);
435 55e0e9a0 Erik van Pienbroek

                
436 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_plugin_loaded(FALSE, plugin_name, is_persistent);
437 55e0e9a0 Erik van Pienbroek
}
438 55e0e9a0 Erik van Pienbroek

                
439 55e0e9a0 Erik van Pienbroek
static void
440 55e0e9a0 Erik van Pienbroek
emit_plugin_unloaded(const char *msg, struct json_object *params)
441 55e0e9a0 Erik van Pienbroek
{
442 55e0e9a0 Erik van Pienbroek
    char *plugin_name;
443 55e0e9a0 Erik van Pienbroek

                
444 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "plugin_name", "plugin_unloaded", string, plugin_name);
445 55e0e9a0 Erik van Pienbroek

                
446 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_plugin_unloaded(FALSE, plugin_name);
447 55e0e9a0 Erik van Pienbroek
}
448 55e0e9a0 Erik van Pienbroek

                
449 55e0e9a0 Erik van Pienbroek
static void
450 55e0e9a0 Erik van Pienbroek
emit_plugin_event(const char *msg, struct json_object *params)
451 55e0e9a0 Erik van Pienbroek
{
452 55e0e9a0 Erik van Pienbroek
    int i;
453 55e0e9a0 Erik van Pienbroek
    int len;
454 55e0e9a0 Erik van Pienbroek
    struct json_object *obj;
455 55e0e9a0 Erik van Pienbroek
    char *plugin_name;
456 55e0e9a0 Erik van Pienbroek
    char *event_name;
457 55e0e9a0 Erik van Pienbroek
    char **values;
458 55e0e9a0 Erik van Pienbroek

                
459 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "plugin_name", "plugin_event", string, plugin_name);
460 55e0e9a0 Erik van Pienbroek
    get_param(msg, params, "event_name", "plugin_event", string, event_name);
461 55e0e9a0 Erik van Pienbroek

                
462 55e0e9a0 Erik van Pienbroek
    obj = get_json_param(msg, params, "values", "plugin_event", json_type_array);
463 55e0e9a0 Erik van Pienbroek
    if (!obj) {
464 55e0e9a0 Erik van Pienbroek
        return;
465 55e0e9a0 Erik van Pienbroek
    }
466 55e0e9a0 Erik van Pienbroek

                
467 55e0e9a0 Erik van Pienbroek
    len = json_object_array_length(obj);
468 55e0e9a0 Erik van Pienbroek
    values = g_slice_alloc0(sizeof(char*) * (len + 1));
469 55e0e9a0 Erik van Pienbroek

                
470 55e0e9a0 Erik van Pienbroek
    for (i = 0; i < len; i++) {
471 55e0e9a0 Erik van Pienbroek
        struct json_object *val_obj = json_object_array_get_idx(obj, i);
472 55e0e9a0 Erik van Pienbroek
        char *val;
473 55e0e9a0 Erik van Pienbroek

                
474 55e0e9a0 Erik van Pienbroek
        g_return_if_fail(val_obj != NULL);
475 55e0e9a0 Erik van Pienbroek

                
476 55e0e9a0 Erik van Pienbroek
        val = json_object_get_string(val_obj);
477 55e0e9a0 Erik van Pienbroek

                
478 55e0e9a0 Erik van Pienbroek
        g_return_if_fail(val != NULL);
479 55e0e9a0 Erik van Pienbroek

                
480 55e0e9a0 Erik van Pienbroek
        values[i] = val;
481 55e0e9a0 Erik van Pienbroek
    }
482 55e0e9a0 Erik van Pienbroek

                
483 55e0e9a0 Erik van Pienbroek
    nntpgrab_core_emit_plugin_event(FALSE, plugin_name, event_name, (const char **) values);
484 55e0e9a0 Erik van Pienbroek

                
485 55e0e9a0 Erik van Pienbroek
    g_slice_free1(sizeof(char*) * (len + 1), values);
486 55e0e9a0 Erik van Pienbroek
}
487 55e0e9a0 Erik van Pienbroek

                
488 fcfb074e Erik van Pienbroek
/* This function used to be part of GLib, but because it behaviour got 
489 fcfb074e Erik van Pienbroek
 * changed in GLib 2.27.4 we can't rely on it's value anymore for
490 fcfb074e Erik van Pienbroek
 * hardcoded hash comparisons. This is the g_str_hash implementation
491 fcfb074e Erik van Pienbroek
 * of before GLib 2.27.4 */
492 fcfb074e Erik van Pienbroek
static guint
493 fcfb074e Erik van Pienbroek
ng_str_hash (gconstpointer v)
494 fcfb074e Erik van Pienbroek
{
495 fcfb074e Erik van Pienbroek
    const signed char *p;
496 fcfb074e Erik van Pienbroek
    guint32 h = 0;
497 fcfb074e Erik van Pienbroek

                
498 fcfb074e Erik van Pienbroek
    for (p = v; *p != '\0'; p++)
499 fcfb074e Erik van Pienbroek
        h = (h << 5) - h + *p;
500 fcfb074e Erik van Pienbroek

                
501 fcfb074e Erik van Pienbroek
    return h;
502 fcfb074e Erik van Pienbroek
}
503 fcfb074e Erik van Pienbroek

                
504 55e0e9a0 Erik van Pienbroek
static void
505 55e0e9a0 Erik van Pienbroek
glue_process_jsonrpc_notification(const char *msg, struct json_object *obj)
506 55e0e9a0 Erik van Pienbroek
{
507 55e0e9a0 Erik van Pienbroek
    struct json_object *params;
508 55e0e9a0 Erik van Pienbroek
    struct json_object *method;
509 55e0e9a0 Erik van Pienbroek
    char *event_name;
510 55e0e9a0 Erik van Pienbroek
    guint hash;
511 55e0e9a0 Erik van Pienbroek

                
512 55e0e9a0 Erik van Pienbroek
    params = json_object_object_get(obj, "params");
513 55e0e9a0 Erik van Pienbroek
    if (!params) {
514 55e0e9a0 Erik van Pienbroek
        g_print(__FILE__ ":%i JSON message lacks a 'params' field, ignoring: %s\n", __LINE__, msg);
515 55e0e9a0 Erik van Pienbroek
        return;
516 55e0e9a0 Erik van Pienbroek
    }
517 55e0e9a0 Erik van Pienbroek

                
518 55e0e9a0 Erik van Pienbroek
    if (json_object_get_type(params) != json_type_object) {
519 55e0e9a0 Erik van Pienbroek
        g_print(__FILE__ ":%i JSON parameter is of invalid type, ignoring: %s\n", __LINE__, msg);
520 55e0e9a0 Erik van Pienbroek
        return;
521 55e0e9a0 Erik van Pienbroek
    }
522 55e0e9a0 Erik van Pienbroek

                
523 55e0e9a0 Erik van Pienbroek
    method = json_object_object_get(obj, "method");
524 55e0e9a0 Erik van Pienbroek
    if (!method) {
525 55e0e9a0 Erik van Pienbroek
        g_print(__FILE__ ":%i JSON message lacks a 'method' field, ignoring: %s\n", __LINE__, msg);
526 55e0e9a0 Erik van Pienbroek
        return;
527 55e0e9a0 Erik van Pienbroek
    }
528 55e0e9a0 Erik van Pienbroek

                
529 55e0e9a0 Erik van Pienbroek
    event_name = json_object_get_string(method);
530 fcfb074e Erik van Pienbroek
    hash = ng_str_hash(event_name);
531 55e0e9a0 Erik van Pienbroek

                
532 55e0e9a0 Erik van Pienbroek
    switch (hash) {
533 55e0e9a0 Erik van Pienbroek
        case 4148964023U:       /* config_changed */
534 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(CONFIG_CHANGED_SIGNAL)) {
535 55e0e9a0 Erik van Pienbroek
                nntpgrab_core_emit_config_changed(FALSE);
536 55e0e9a0 Erik van Pienbroek
            }
537 55e0e9a0 Erik van Pienbroek
            break;
538 55e0e9a0 Erik van Pienbroek
        case 718712759U:        /* part_download_start */
539 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(PART_DOWNLOAD_START_SIGNAL)) {
540 55e0e9a0 Erik van Pienbroek
                emit_part_download_start(msg, params);
541 55e0e9a0 Erik van Pienbroek
            }
542 55e0e9a0 Erik van Pienbroek
            break;
543 55e0e9a0 Erik van Pienbroek
        case 2485450830U:       /* part_done */
544 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(PART_DONE_SIGNAL)) {
545 55e0e9a0 Erik van Pienbroek
                emit_part_done(msg, params);
546 55e0e9a0 Erik van Pienbroek
            }
547 55e0e9a0 Erik van Pienbroek
            break;
548 55e0e9a0 Erik van Pienbroek
        case 560621065U:        /* part_failed */
549 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(PART_FAILED_SIGNAL)) {
550 55e0e9a0 Erik van Pienbroek
                emit_part_failed(msg, params);
551 55e0e9a0 Erik van Pienbroek
            }
552 55e0e9a0 Erik van Pienbroek
            break;
553 55e0e9a0 Erik van Pienbroek
        case 3851882960U:       /* traffic_monitor_update */
554 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(TRAFFIC_MONITOR_UPDATE_SIGNAL)) {
555 55e0e9a0 Erik van Pienbroek
                emit_traffic_monitor_update(msg, params);
556 55e0e9a0 Erik van Pienbroek
            }
557 55e0e9a0 Erik van Pienbroek
            break;
558 55e0e9a0 Erik van Pienbroek
        case 3667888847U:       /* part_progress_update */
559 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(PART_PROGRESS_UPDATE_SIGNAL)) {
560 55e0e9a0 Erik van Pienbroek
                emit_part_progress_update(msg, params);
561 55e0e9a0 Erik van Pienbroek
            }
562 55e0e9a0 Erik van Pienbroek
            break;
563 55e0e9a0 Erik van Pienbroek
        case 2792752159U:       /* collection_added */
564 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(COLLECTION_ADDED_SIGNAL)) {
565 55e0e9a0 Erik van Pienbroek
                emit_collection_added(msg, params);
566 55e0e9a0 Erik van Pienbroek
            }
567 55e0e9a0 Erik van Pienbroek
            break;
568 55e0e9a0 Erik van Pienbroek
        case 1720184767U:       /* collection_removed */
569 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(COLLECTION_REMOVED_SIGNAL)) {
570 55e0e9a0 Erik van Pienbroek
                emit_collection_removed(msg, params);
571 55e0e9a0 Erik van Pienbroek
            }
572 55e0e9a0 Erik van Pienbroek
            break;
573 55e0e9a0 Erik van Pienbroek
        case 1683429194U:       /* collection_modified */
574 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(COLLECTION_MODIFIED_SIGNAL)) {
575 55e0e9a0 Erik van Pienbroek
                emit_collection_modified(msg, params);
576 55e0e9a0 Erik van Pienbroek
            }
577 55e0e9a0 Erik van Pienbroek
            break;
578 55e0e9a0 Erik van Pienbroek
        case 2127244413U:       /* file_added */
579 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(FILE_ADDED_SIGNAL)) {
580 55e0e9a0 Erik van Pienbroek
                emit_file_added(msg, params);
581 55e0e9a0 Erik van Pienbroek
            }
582 55e0e9a0 Erik van Pienbroek
            break;
583 55e0e9a0 Erik van Pienbroek
        case 2117367965U:       /* file_removed */
584 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(FILE_REMOVED_SIGNAL)) {
585 55e0e9a0 Erik van Pienbroek
                emit_file_removed(msg, params);
586 55e0e9a0 Erik van Pienbroek
            }
587 55e0e9a0 Erik van Pienbroek
            break;
588 55e0e9a0 Erik van Pienbroek
        case 2548616203U:       /* file_download_state_update */
589 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(FILE_DOWNLOAD_STATE_UPDATE_SIGNAL)) {
590 55e0e9a0 Erik van Pienbroek
                emit_file_download_state_update(msg, params);
591 55e0e9a0 Erik van Pienbroek
            }
592 55e0e9a0 Erik van Pienbroek
            break;
593 55e0e9a0 Erik van Pienbroek
        case 3407424387U:       /* file_state_changed */
594 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(FILE_STATE_CHANGED_SIGNAL)) {
595 55e0e9a0 Erik van Pienbroek
                emit_file_state_changed(msg, params);
596 55e0e9a0 Erik van Pienbroek
            }
597 55e0e9a0 Erik van Pienbroek
            break;
598 55e0e9a0 Erik van Pienbroek
        case 1506868921U:       /* connection_connecting */
599 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(CONNECTION_CONNECTING_SIGNAL)) {
600 55e0e9a0 Erik van Pienbroek
                emit_connection_connecting(msg, params);
601 55e0e9a0 Erik van Pienbroek
            }
602 55e0e9a0 Erik van Pienbroek
            break;
603 55e0e9a0 Erik van Pienbroek
        case 2681007848U:       /* connection_connected */
604 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(CONNECTION_CONNECTED_SIGNAL)) {
605 55e0e9a0 Erik van Pienbroek
                emit_connection_connected(msg, params);
606 55e0e9a0 Erik van Pienbroek
            }
607 55e0e9a0 Erik van Pienbroek
            break;
608 55e0e9a0 Erik van Pienbroek
        case 2812926109U:       /* connection_disconnect */
609 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(CONNECTION_DISCONNECT_SIGNAL)) {
610 55e0e9a0 Erik van Pienbroek
                emit_connection_disconnect(msg, params);
611 55e0e9a0 Erik van Pienbroek
            }
612 55e0e9a0 Erik van Pienbroek
            break;
613 55e0e9a0 Erik van Pienbroek
        case 1376609542U:       /* schedular_state_changed */
614 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(SCHEDULAR_STATE_CHANGED_SIGNAL)) {
615 55e0e9a0 Erik van Pienbroek
                emit_schedular_state_changed(msg, params);
616 55e0e9a0 Erik van Pienbroek
            }
617 55e0e9a0 Erik van Pienbroek
            break;
618 3e36b172 Erik van Pienbroek
        case 843068174U:        /* foreach_collection_event */
619 3e36b172 Erik van Pienbroek
            process_foreach_collection_event(msg, params);
620 3e36b172 Erik van Pienbroek
            break;
621 3e36b172 Erik van Pienbroek
        case 3826728748U:       /* foreach_file_event */
622 3e36b172 Erik van Pienbroek
            process_foreach_file_event(msg, params);
623 3e36b172 Erik van Pienbroek
            break;
624 3e36b172 Erik van Pienbroek
        case 2102350437U:       /* foreach_group_event */
625 3e36b172 Erik van Pienbroek
            process_foreach_group_event(msg, params);
626 3e36b172 Erik van Pienbroek
            break;
627 55e0e9a0 Erik van Pienbroek
        case 693552652U:        /* log_message */
628 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(LOG_MESSAGE_SIGNAL)) {
629 55e0e9a0 Erik van Pienbroek
                emit_log_message(msg, params);
630 55e0e9a0 Erik van Pienbroek
            }
631 55e0e9a0 Erik van Pienbroek
            break;
632 55e0e9a0 Erik van Pienbroek
        case 1307041657U:       /* task_moved */
633 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(TASK_MOVED_SIGNAL)) {
634 55e0e9a0 Erik van Pienbroek
                emit_task_moved(msg, params);
635 55e0e9a0 Erik van Pienbroek
            }
636 55e0e9a0 Erik van Pienbroek
            break;
637 55e0e9a0 Erik van Pienbroek
        case 2804179410U:       /* collection_moved */
638 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(COLLECTION_MOVED_SIGNAL)) {
639 55e0e9a0 Erik van Pienbroek
                emit_collection_moved(msg, params);
640 55e0e9a0 Erik van Pienbroek
            }
641 55e0e9a0 Erik van Pienbroek
            break;
642 55e0e9a0 Erik van Pienbroek
        case 2405579865U:       /* all_downloads_completed */
643 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(ALL_DOWNLOADS_COMPLETED_SIGNAL)) {
644 55e0e9a0 Erik van Pienbroek
                nntpgrab_core_emit_all_downloads_completed(FALSE);
645 55e0e9a0 Erik van Pienbroek
            }
646 55e0e9a0 Erik van Pienbroek
            break;
647 55e0e9a0 Erik van Pienbroek
        case 3241070225U:       /* plugin_loaded */
648 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(PLUGIN_LOADED_SIGNAL)) {
649 55e0e9a0 Erik van Pienbroek
                emit_plugin_loaded(msg, params);
650 55e0e9a0 Erik van Pienbroek
            }
651 55e0e9a0 Erik van Pienbroek
            break;
652 55e0e9a0 Erik van Pienbroek
        case 3055047530U:       /* plugin_unloaded */
653 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(PLUGIN_UNLOADED_SIGNAL)) {
654 55e0e9a0 Erik van Pienbroek
                emit_plugin_unloaded(msg, params);
655 55e0e9a0 Erik van Pienbroek
            }
656 55e0e9a0 Erik van Pienbroek
            break;
657 55e0e9a0 Erik van Pienbroek
        case 2037961358U:       /* plugin_event */
658 55e0e9a0 Erik van Pienbroek
            if (has_signal_handler_pending(PLUGIN_EVENT_SIGNAL)) {
659 55e0e9a0 Erik van Pienbroek
                emit_plugin_event(msg, params);
660 55e0e9a0 Erik van Pienbroek
            }
661 55e0e9a0 Erik van Pienbroek
            break;
662 55e0e9a0 Erik van Pienbroek

                
663 55e0e9a0 Erik van Pienbroek
        default:
664 55e0e9a0 Erik van Pienbroek
            g_print(__FILE__ ":%i JSON notification with unknown event name received, event_name = %s, hash = %u, msg = %s\n", __LINE__, event_name, hash, msg);
665 55e0e9a0 Erik van Pienbroek
            break;
666 55e0e9a0 Erik van Pienbroek
    }
667 55e0e9a0 Erik van Pienbroek
}
668 55e0e9a0 Erik van Pienbroek

                
669 d9ff048e Erik van Pienbroek
static GAsyncQueue *command_queue = NULL;
670 d9ff048e Erik van Pienbroek
static GStaticMutex command_mutex = G_STATIC_MUTEX_INIT;
671 4c8dde64 Erik van Pienbroek
static GStaticMutex init_mutex = G_STATIC_MUTEX_INIT;
672 d9ff048e Erik van Pienbroek

                
673 55e0e9a0 Erik van Pienbroek
void
674 55e0e9a0 Erik van Pienbroek
glue_process_jsonrpc_msg(const char *msg)
675 55e0e9a0 Erik van Pienbroek
{
676 55e0e9a0 Erik van Pienbroek
    struct json_object *obj;
677 55e0e9a0 Erik van Pienbroek
    struct json_object *id;
678 55e0e9a0 Erik van Pienbroek

                
679 55e0e9a0 Erik van Pienbroek
    g_return_if_fail(msg != NULL);
680 55e0e9a0 Erik van Pienbroek

                
681 55e0e9a0 Erik van Pienbroek
    obj = json_tokener_parse((char*)msg);
682 55e0e9a0 Erik van Pienbroek
    if (!obj) {
683 55e0e9a0 Erik van Pienbroek
        g_print(__FILE__ ":%i Invalid message received from server, ignoring: %s\n", __LINE__, msg);
684 55e0e9a0 Erik van Pienbroek
        return;
685 55e0e9a0 Erik van Pienbroek
    }
686 55e0e9a0 Erik van Pienbroek

                
687 55e0e9a0 Erik van Pienbroek
    id = json_object_object_get(obj, "id");
688 55e0e9a0 Erik van Pienbroek
    if (!id) {
689 55e0e9a0 Erik van Pienbroek
        /* Notification received! */
690 55e0e9a0 Erik van Pienbroek
        glue_process_jsonrpc_notification(msg, obj);
691 55e0e9a0 Erik van Pienbroek
        json_object_put(obj);
692 55e0e9a0 Erik van Pienbroek
        return;
693 55e0e9a0 Erik van Pienbroek
    }
694 55e0e9a0 Erik van Pienbroek

                
695 d9ff048e Erik van Pienbroek
    g_print(__FILE__ ":%i JSON response received for msg: %s\n", __LINE__, msg);
696 d9ff048e Erik van Pienbroek

                
697 4c8dde64 Erik van Pienbroek
    g_static_mutex_lock(&init_mutex);
698 4c8dde64 Erik van Pienbroek
    if (command_queue == NULL) {
699 4c8dde64 Erik van Pienbroek
        command_queue = g_async_queue_new();
700 d9ff048e Erik van Pienbroek
    }
701 4c8dde64 Erik van Pienbroek
    g_static_mutex_unlock(&init_mutex);
702 d9ff048e Erik van Pienbroek

                
703 d9ff048e Erik van Pienbroek
    g_async_queue_push(command_queue, obj);
704 d9ff048e Erik van Pienbroek

                
705 d9ff048e Erik van Pienbroek
    /* No need to unref here as it should be done by the thread who pop's the queue */
706 d9ff048e Erik van Pienbroek
}
707 d9ff048e Erik van Pienbroek

                
708 d9ff048e Erik van Pienbroek
/*************************************************************************************/
709 d9ff048e Erik van Pienbroek
/* JSON-RPC methods */
710 d9ff048e Erik van Pienbroek
/*************************************************************************************/
711 d9ff048e Erik van Pienbroek
#define get_method_param(params, field, method_name, type, dest)                                        \
712 d9ff048e Erik van Pienbroek
    {                                                                                                   \
713 d9ff048e Erik van Pienbroek
        char *msg = json_object_get_string(params);                                                     \
714 d9ff048e Erik van Pienbroek
        struct json_object *obj = get_json_param(msg, params, field, method_name, json_type_ ## type);  \
715 d9ff048e Erik van Pienbroek
        if (!obj) {                                                                                     \
716 d9ff048e Erik van Pienbroek
            json_object_put(params) ;                                                                   \
717 d9ff048e Erik van Pienbroek
            return FALSE;                                                                               \
718 d9ff048e Erik van Pienbroek
        }                                                                                               \
719 d9ff048e Erik van Pienbroek
        dest = json_object_get_ ## type (obj);                                                          \
720 d9ff048e Erik van Pienbroek
    }
721 d9ff048e Erik van Pienbroek

                
722 d9ff048e Erik van Pienbroek
static struct json_object *
723 d9ff048e Erik van Pienbroek
create_new_json_request(const char *method, struct json_object *request_params)
724 d9ff048e Erik van Pienbroek
{
725 d9ff048e Erik van Pienbroek
    struct json_object *request;
726 d9ff048e Erik van Pienbroek
    static int id = 0;
727 d9ff048e Erik van Pienbroek

                
728 d9ff048e Erik van Pienbroek
    if (!request_params) {
729 d9ff048e Erik van Pienbroek
        request_params = json_object_new_array();
730 d9ff048e Erik van Pienbroek
    }
731 d9ff048e Erik van Pienbroek

                
732 d9ff048e Erik van Pienbroek
    request = json_object_new_object();
733 d9ff048e Erik van Pienbroek
    json_object_object_add(request, "method", json_object_new_string((char*) method));
734 d9ff048e Erik van Pienbroek
    json_object_object_add(request, "id", json_object_new_int(++id));
735 d9ff048e Erik van Pienbroek
    json_object_object_add(request, "params", request_params);
736 d9ff048e Erik van Pienbroek

                
737 d9ff048e Erik van Pienbroek
    return request;
738 d9ff048e Erik van Pienbroek
}
739 d9ff048e Erik van Pienbroek

                
740 d9ff048e Erik van Pienbroek
static struct json_object *
741 422481af Erik van Pienbroek
send_request_and_wait_for_response(NntpgrabGlue *glue, struct json_object *request, char **errmsg)
742 d9ff048e Erik van Pienbroek
{
743 d9ff048e Erik van Pienbroek
    struct json_object *response;
744 d9ff048e Erik van Pienbroek
    struct json_object *result;
745 d9ff048e Erik van Pienbroek
    struct json_object *error;
746 d9ff048e Erik van Pienbroek
    GTimeVal tv;
747 d9ff048e Erik van Pienbroek
    int count;
748 d9ff048e Erik van Pienbroek

                
749 d9ff048e Erik van Pienbroek
    g_return_val_if_fail(glue != NULL, NULL);
750 d9ff048e Erik van Pienbroek
    g_return_val_if_fail(request != NULL, NULL);
751 d9ff048e Erik van Pienbroek
    g_return_val_if_fail(errmsg != NULL, NULL);
752 d9ff048e Erik van Pienbroek

                
753 d9ff048e Erik van Pienbroek
    g_static_mutex_lock(&command_mutex);
754 d9ff048e Erik van Pienbroek

                
755 d9ff048e Erik van Pienbroek
    if (!write_line(&glue->socket, "%s\r\n", json_object_to_json_string(request))) {
756 33edaf11 Erik van Pienbroek
        g_static_mutex_unlock(&command_mutex);
757 d9ff048e Erik van Pienbroek
        return NULL;
758 d9ff048e Erik van Pienbroek
    }
759 d9ff048e Erik van Pienbroek

                
760 4c8dde64 Erik van Pienbroek
    g_static_mutex_lock(&init_mutex);
761 d9ff048e Erik van Pienbroek
    if (command_queue == NULL) {
762 d9ff048e Erik van Pienbroek
        command_queue = g_async_queue_new();
763 d9ff048e Erik van Pienbroek
    }
764 4c8dde64 Erik van Pienbroek
    g_static_mutex_unlock(&init_mutex);
765 d9ff048e Erik van Pienbroek

                
766 d9ff048e Erik van Pienbroek
    count = 0;
767 d9ff048e Erik van Pienbroek
    while (count < READ_TIMEOUT_VALUE) {
768 d9ff048e Erik van Pienbroek
        g_get_current_time(&tv);
769 d9ff048e Erik van Pienbroek
        tv.tv_sec++;
770 d9ff048e Erik van Pienbroek

                
771 d9ff048e Erik van Pienbroek
        response = g_async_queue_timed_pop(command_queue, &tv);
772 d9ff048e Erik van Pienbroek
        if (response) {
773 d9ff048e Erik van Pienbroek
            break;
774 d9ff048e Erik van Pienbroek
        } else if (glue->socket.socket_id <= 0) {
775 d9ff048e Erik van Pienbroek
            *errmsg = g_strdup_printf(__FILE__ ":%i Connection got disconnected\n", __LINE__);
776 d9ff048e Erik van Pienbroek

                
777 f380196e Erik van Pienbroek
            nntpgrab_core_emit_log_message(FALSE, "Glue layer", NG_LOG_LEVEL_WARNING, *errmsg, TRUE, FALSE);
778 d9ff048e Erik van Pienbroek

                
779 33edaf11 Erik van Pienbroek
            g_static_mutex_unlock(&command_mutex);
780 33edaf11 Erik van Pienbroek

                
781 d9ff048e Erik van Pienbroek
            return NULL;
782 d9ff048e Erik van Pienbroek
        }
783 d9ff048e Erik van Pienbroek
        count++;
784 d9ff048e Erik van Pienbroek
    }
785 d9ff048e Erik van Pienbroek

                
786 d9ff048e Erik van Pienbroek
    g_static_mutex_unlock(&command_mutex);
787 d9ff048e Erik van Pienbroek

                
788 d9ff048e Erik van Pienbroek
    if (!response) {
789 d9ff048e Erik van Pienbroek
        *errmsg = g_strdup_printf(__FILE__ ":%i Timed out waiting for response from server, request = %s\n", __LINE__, json_object_to_json_string(request));
790 d9ff048e Erik van Pienbroek

                
791 f380196e Erik van Pienbroek
        nntpgrab_core_emit_log_message(FALSE, "Glue layer", NG_LOG_LEVEL_WARNING, *errmsg, TRUE, FALSE);
792 d9ff048e Erik van Pienbroek

                
793 d9ff048e Erik van Pienbroek
        return NULL;
794 d9ff048e Erik van Pienbroek
    }
795 d9ff048e Erik van Pienbroek

                
796 d9ff048e Erik van Pienbroek
    error = json_object_object_get(response, "error");
797 d9ff048e Erik van Pienbroek
    if (error) {
798 d9ff048e Erik van Pienbroek
        *errmsg = g_strdup(json_object_get_string(error));
799 d9ff048e Erik van Pienbroek

                
800 d9ff048e Erik van Pienbroek
        json_object_put(response);
801 d9ff048e Erik van Pienbroek

                
802 d9ff048e Erik van Pienbroek
        return NULL;
803 d9ff048e Erik van Pienbroek
    }
804 d9ff048e Erik van Pienbroek

                
805 d9ff048e Erik van Pienbroek
    result = json_object_object_get(response, "result");
806 d9ff048e Erik van Pienbroek
    if (!result) {
807 d9ff048e Erik van Pienbroek
        *errmsg = g_strdup_printf(__FILE__ ":%i Response from server lacks a 'result' field, request = %s, response = %s\n", __LINE__, json_object_to_json_string(request), json_object_to_json_string(response));
808 d9ff048e Erik van Pienbroek

                
809 f380196e Erik van Pienbroek
        nntpgrab_core_emit_log_message(FALSE, "Glue layer", NG_LOG_LEVEL_WARNING, *errmsg, TRUE, FALSE);
810 d9ff048e Erik van Pienbroek

                
811 d9ff048e Erik van Pienbroek
        json_object_put(response);
812 d9ff048e Erik van Pienbroek

                
813 d9ff048e Erik van Pienbroek
        return NULL;
814 d9ff048e Erik van Pienbroek
    }
815 d9ff048e Erik van Pienbroek

                
816 d9ff048e Erik van Pienbroek
    /* We're only interested in the result, so we add a reference to that and unref the response */
817 d9ff048e Erik van Pienbroek
    json_object_get(result);
818 d9ff048e Erik van Pienbroek
    json_object_put(response);
819 d9ff048e Erik van Pienbroek

                
820 d9ff048e Erik van Pienbroek
    return result;
821 d9ff048e Erik van Pienbroek
}
822 d9ff048e Erik van Pienbroek

                
823 33edaf11 Erik van Pienbroek
void
824 422481af Erik van Pienbroek
nntpgrab_glue_internal_kill_server(NntpgrabGlue *obj)
825 33edaf11 Erik van Pienbroek
{
826 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
827 33edaf11 Erik van Pienbroek
    struct json_object *request;
828 33edaf11 Erik van Pienbroek
    struct json_object *response_result;
829 33edaf11 Erik van Pienbroek
    char *errmsg = NULL;
830 33edaf11 Erik van Pienbroek

                
831 33edaf11 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_server_request_quit", NULL);
832 33edaf11 Erik van Pienbroek

                
833 33edaf11 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
834 33edaf11 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_server_request_quit FAILED: %s\n", __LINE__, errmsg);
835 33edaf11 Erik van Pienbroek
        g_free(errmsg);
836 33edaf11 Erik van Pienbroek
        json_object_put(request);
837 33edaf11 Erik van Pienbroek
        return;
838 33edaf11 Erik van Pienbroek
    }
839 33edaf11 Erik van Pienbroek

                
840 33edaf11 Erik van Pienbroek
    json_object_put(response_result);
841 33edaf11 Erik van Pienbroek
    json_object_put(request);
842 33edaf11 Erik van Pienbroek
}
843 33edaf11 Erik van Pienbroek

                
844 d9ff048e Erik van Pienbroek
NGList *
845 422481af Erik van Pienbroek
nntpgrab_glue_internal_config_get_avail_servers(NntpgrabGlue *obj)
846 d9ff048e Erik van Pienbroek
{
847 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
848 d9ff048e Erik van Pienbroek
    struct json_object *request;
849 d9ff048e Erik van Pienbroek
    struct json_object *response_result;
850 d9ff048e Erik van Pienbroek
    NGList *ret = NULL;
851 d9ff048e Erik van Pienbroek
    char *errmsg = NULL;
852 d9ff048e Erik van Pienbroek
    int i;
853 d9ff048e Erik van Pienbroek
    int len;
854 d9ff048e Erik van Pienbroek

                
855 d9ff048e Erik van Pienbroek
    request = create_new_json_request("nntpgrab_config_get_avail_servers", NULL);
856 d9ff048e Erik van Pienbroek

                
857 d9ff048e Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
858 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_config_get_avail_servers FAILED: %s\n", __LINE__, errmsg);
859 d9ff048e Erik van Pienbroek
        g_free(errmsg);
860 d9ff048e Erik van Pienbroek
        json_object_put(request);
861 d9ff048e Erik van Pienbroek
        return NULL;
862 d9ff048e Erik van Pienbroek
    }
863 d9ff048e Erik van Pienbroek

                
864 d9ff048e Erik van Pienbroek
    len = json_object_array_length(response_result);
865 d9ff048e Erik van Pienbroek
    for (i = 0; i < len; i++) {
866 d9ff048e Erik van Pienbroek
        struct json_object *obj = json_object_array_get_idx(response_result, i);
867 d9ff048e Erik van Pienbroek
        char *servername;
868 d9ff048e Erik van Pienbroek

                
869 d9ff048e Erik van Pienbroek
        g_return_val_if_fail(obj != NULL, NULL);
870 d9ff048e Erik van Pienbroek

                
871 d9ff048e Erik van Pienbroek
        servername = json_object_get_string(obj);
872 d9ff048e Erik van Pienbroek

                
873 d9ff048e Erik van Pienbroek
        g_return_val_if_fail(servername != NULL, NULL);
874 d9ff048e Erik van Pienbroek

                
875 d9ff048e Erik van Pienbroek
        ret = ng_list_append(ret, g_strdup(servername));
876 d9ff048e Erik van Pienbroek
    }
877 d9ff048e Erik van Pienbroek

                
878 d9ff048e Erik van Pienbroek
    json_object_put(request);
879 d9ff048e Erik van Pienbroek
    json_object_put(response_result);
880 d9ff048e Erik van Pienbroek

                
881 d9ff048e Erik van Pienbroek
    return ret;
882 d9ff048e Erik van Pienbroek
}
883 d9ff048e Erik van Pienbroek

                
884 4c8dde64 Erik van Pienbroek
gboolean
885 422481af Erik van Pienbroek
nntpgrab_glue_internal_config_get_server_info(NntpgrabGlue *obj, const char *servername, NGConfigServer *ret)
886 d9ff048e Erik van Pienbroek
{
887 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
888 d9ff048e Erik van Pienbroek
    struct json_object *request;
889 d9ff048e Erik van Pienbroek
    struct json_object *request_params;
890 d9ff048e Erik van Pienbroek
    struct json_object *response_result;
891 d9ff048e Erik van Pienbroek
    char *errmsg = NULL;
892 d9ff048e Erik van Pienbroek
    char *servername_received;
893 d9ff048e Erik van Pienbroek
    char *hostname;
894 d9ff048e Erik van Pienbroek
    int port;
895 d9ff048e Erik van Pienbroek
    char *username;
896 d9ff048e Erik van Pienbroek
    char *password;
897 d9ff048e Erik van Pienbroek
    int max_threads;
898 409d5134 Erik van Pienbroek
    NGServerPriority priority;
899 475b00f5 Erik van Pienbroek
    ngboolean send_group_command;
900 d9ff048e Erik van Pienbroek
    ngboolean use_ssl;
901 d9ff048e Erik van Pienbroek
    ngboolean enabled;
902 d9ff048e Erik van Pienbroek

                
903 d9ff048e Erik van Pienbroek
    g_return_val_if_fail(servername != NULL, FALSE);
904 d9ff048e Erik van Pienbroek
    g_return_val_if_fail(ret != NULL, FALSE);
905 d9ff048e Erik van Pienbroek

                
906 d9ff048e Erik van Pienbroek
    request_params = json_object_new_array();
907 d9ff048e Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) servername));
908 d9ff048e Erik van Pienbroek
    request = create_new_json_request("nntpgrab_config_get_server_info", request_params);
909 d9ff048e Erik van Pienbroek

                
910 d9ff048e Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
911 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_config_get_server_info FAILED: %s\n", __LINE__, errmsg);
912 d9ff048e Erik van Pienbroek
        g_free(errmsg);
913 d9ff048e Erik van Pienbroek
        json_object_put(request);
914 d9ff048e Erik van Pienbroek
        return FALSE;
915 d9ff048e Erik van Pienbroek
    }
916 d9ff048e Erik van Pienbroek

                
917 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "servername", "config_get_server_info", string, servername_received);
918 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "hostname", "config_get_server_info", string, hostname);
919 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "port", "config_get_server_info", int, port);
920 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "username", "config_get_server_info", string, username);
921 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "password", "config_get_server_info", string, password);
922 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "max_threads", "config_get_server_info", int, max_threads);
923 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "priority", "config_get_server_info", int, priority);
924 475b00f5 Erik van Pienbroek
    get_method_param(response_result, "send_group_command", "config_get_server_info", boolean, send_group_command);
925 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "use_ssl", "config_get_server_info", boolean, use_ssl);
926 d9ff048e Erik van Pienbroek
    get_method_param(response_result, "enabled", "config_get_server_info", boolean, enabled);
927 d9ff048e Erik van Pienbroek

                
928 409d5134 Erik van Pienbroek
    memset(ret, 0, sizeof(NGConfigServer));
929 d9ff048e Erik van Pienbroek

                
930 d9ff048e Erik van Pienbroek
    strncpy(ret->servername, servername_received, sizeof(ret->servername));
931 d9ff048e Erik van Pienbroek
    strncpy(ret->hostname, hostname, sizeof(ret->hostname));
932 d9ff048e Erik van Pienbroek
    ret->port = port;
933 d9ff048e Erik van Pienbroek
    strncpy(ret->username, username, sizeof(ret->username));
934 d9ff048e Erik van Pienbroek
    strncpy(ret->password, password, sizeof(ret->password));
935 d9ff048e Erik van Pienbroek
    ret->max_threads = max_threads;
936 d9ff048e Erik van Pienbroek
    ret->priority = priority;
937 475b00f5 Erik van Pienbroek
    ret->send_group_command = send_group_command;
938 d9ff048e Erik van Pienbroek
    ret->use_ssl = use_ssl;
939 d9ff048e Erik van Pienbroek
    ret->enabled = enabled;
940 d9ff048e Erik van Pienbroek

                
941 d9ff048e Erik van Pienbroek
    json_object_put(request);
942 d9ff048e Erik van Pienbroek
    json_object_put(response_result);
943 d9ff048e Erik van Pienbroek

                
944 d9ff048e Erik van Pienbroek
    return TRUE;
945 d9ff048e Erik van Pienbroek
}
946 d9ff048e Erik van Pienbroek

                
947 03ca6dcd Erik van Pienbroek
gboolean
948 422481af Erik van Pienbroek
nntpgrab_glue_internal_config_add_server(NntpgrabGlue *obj, NGConfigServer new_server, char **errmsg)
949 03ca6dcd Erik van Pienbroek
{
950 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
951 03ca6dcd Erik van Pienbroek
    struct json_object *request;
952 03ca6dcd Erik van Pienbroek
    struct json_object *request_params;
953 03ca6dcd Erik van Pienbroek
    struct json_object *server;
954 03ca6dcd Erik van Pienbroek
    struct json_object *response_result;
955 03ca6dcd Erik van Pienbroek

                
956 03ca6dcd Erik van Pienbroek
    request_params = json_object_new_array();
957 03ca6dcd Erik van Pienbroek
    server = json_object_new_object();
958 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "servername", json_object_new_string((char*) new_server.servername));
959 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "hostname", json_object_new_string((char*) new_server.hostname));
960 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "port", json_object_new_int(new_server.port));
961 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "username", json_object_new_string((char*) new_server.username));
962 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "password", json_object_new_string((char*) new_server.password));
963 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "max_threads", json_object_new_int(new_server.max_threads));
964 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "priority", json_object_new_int(new_server.priority));
965 475b00f5 Erik van Pienbroek
    json_object_object_add(server, "send_group_command", json_object_new_boolean(new_server.send_group_command));
966 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "use_ssl", json_object_new_boolean(new_server.use_ssl));
967 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "enabled", json_object_new_boolean(new_server.enabled));
968 03ca6dcd Erik van Pienbroek
    json_object_array_add(request_params, server);
969 03ca6dcd Erik van Pienbroek
    request = create_new_json_request("nntpgrab_config_add_server", request_params);
970 03ca6dcd Erik van Pienbroek

                
971 03ca6dcd Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
972 03ca6dcd Erik van Pienbroek
        json_object_put(request);
973 03ca6dcd Erik van Pienbroek
        return FALSE;
974 03ca6dcd Erik van Pienbroek
    }
975 03ca6dcd Erik van Pienbroek

                
976 03ca6dcd Erik van Pienbroek
    json_object_put(request);
977 03ca6dcd Erik van Pienbroek
    json_object_put(response_result);
978 03ca6dcd Erik van Pienbroek

                
979 03ca6dcd Erik van Pienbroek
    return TRUE;
980 03ca6dcd Erik van Pienbroek
}
981 03ca6dcd Erik van Pienbroek

                
982 03ca6dcd Erik van Pienbroek
gboolean
983 422481af Erik van Pienbroek
nntpgrab_glue_internal_config_del_server(NntpgrabGlue *obj, const char *servername, char **errmsg)
984 03ca6dcd Erik van Pienbroek
{
985 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
986 03ca6dcd Erik van Pienbroek
    struct json_object *request;
987 03ca6dcd Erik van Pienbroek
    struct json_object *request_params;
988 03ca6dcd Erik van Pienbroek
    struct json_object *response_result;
989 03ca6dcd Erik van Pienbroek

                
990 03ca6dcd Erik van Pienbroek
    request_params = json_object_new_array();
991 03ca6dcd Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) servername));
992 03ca6dcd Erik van Pienbroek
    request = create_new_json_request("nntpgrab_config_del_server", request_params);
993 03ca6dcd Erik van Pienbroek

                
994 03ca6dcd Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
995 03ca6dcd Erik van Pienbroek
        json_object_put(request);
996 03ca6dcd Erik van Pienbroek
        return FALSE;
997 03ca6dcd Erik van Pienbroek
    }
998 03ca6dcd Erik van Pienbroek

                
999 03ca6dcd Erik van Pienbroek
    json_object_put(request);
1000 03ca6dcd Erik van Pienbroek
    json_object_put(response_result);
1001 03ca6dcd Erik van Pienbroek

                
1002 03ca6dcd Erik van Pienbroek
    return TRUE;
1003 03ca6dcd Erik van Pienbroek
}
1004 03ca6dcd Erik van Pienbroek

                
1005 03ca6dcd Erik van Pienbroek
gboolean
1006 422481af Erik van Pienbroek
nntpgrab_glue_internal_config_edit_server(NntpgrabGlue *obj, const char *servername, NGConfigServer new_server, char **errmsg)
1007 03ca6dcd Erik van Pienbroek
{
1008 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1009 03ca6dcd Erik van Pienbroek
    struct json_object *request;
1010 03ca6dcd Erik van Pienbroek
    struct json_object *request_params;
1011 03ca6dcd Erik van Pienbroek
    struct json_object *server;
1012 03ca6dcd Erik van Pienbroek
    struct json_object *response_result;
1013 03ca6dcd Erik van Pienbroek

                
1014 03ca6dcd Erik van Pienbroek
    request_params = json_object_new_array();
1015 03ca6dcd Erik van Pienbroek
    server = json_object_new_object();
1016 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "servername", json_object_new_string((char*) new_server.servername));
1017 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "hostname", json_object_new_string((char*) new_server.hostname));
1018 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "port", json_object_new_int(new_server.port));
1019 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "username", json_object_new_string((char*) new_server.username));
1020 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "password", json_object_new_string((char*) new_server.password));
1021 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "max_threads", json_object_new_int(new_server.max_threads));
1022 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "priority", json_object_new_int(new_server.priority));
1023 475b00f5 Erik van Pienbroek
    json_object_object_add(server, "send_group_command", json_object_new_boolean(new_server.send_group_command));
1024 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "use_ssl", json_object_new_boolean(new_server.use_ssl));
1025 03ca6dcd Erik van Pienbroek
    json_object_object_add(server, "enabled", json_object_new_boolean(new_server.enabled));
1026 03ca6dcd Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) servername));
1027 03ca6dcd Erik van Pienbroek
    json_object_array_add(request_params, server);
1028 03ca6dcd Erik van Pienbroek
    request = create_new_json_request("nntpgrab_config_edit_server", request_params);
1029 03ca6dcd Erik van Pienbroek

                
1030 03ca6dcd Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
1031 03ca6dcd Erik van Pienbroek
        json_object_put(request);
1032 03ca6dcd Erik van Pienbroek
        return FALSE;
1033 03ca6dcd Erik van Pienbroek
    }
1034 03ca6dcd Erik van Pienbroek

                
1035 03ca6dcd Erik van Pienbroek
    json_object_put(request);
1036 03ca6dcd Erik van Pienbroek
    json_object_put(response_result);
1037 03ca6dcd Erik van Pienbroek

                
1038 03ca6dcd Erik van Pienbroek
    return TRUE;
1039 03ca6dcd Erik van Pienbroek
}
1040 03ca6dcd Erik van Pienbroek

                
1041 03ca6dcd Erik van Pienbroek
gboolean
1042 422481af Erik van Pienbroek
nntpgrab_glue_internal_config_get_opts(NntpgrabGlue *obj, NGConfigOpts *opts)
1043 03ca6dcd Erik van Pienbroek
{
1044 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1045 03ca6dcd Erik van Pienbroek
    struct json_object *request;
1046 03ca6dcd Erik van Pienbroek
    struct json_object *response_result;
1047 03ca6dcd Erik van Pienbroek
    char *errmsg = NULL;
1048 03ca6dcd Erik van Pienbroek
    char *download_directory;
1049 03ca6dcd Erik van Pienbroek
    char *temp_directory;
1050 03ca6dcd Erik van Pienbroek
    gboolean enable_intelligent_par2_downloading;
1051 03ca6dcd Erik van Pienbroek
    gboolean enable_par2_repair;
1052 03ca6dcd Erik van Pienbroek
    char *auto_import_directory;
1053 03ca6dcd Erik van Pienbroek
    gboolean enable_auto_import;
1054 03ca6dcd Erik van Pienbroek
    gboolean move_file_after_auto_import;
1055 03ca6dcd Erik van Pienbroek
    gboolean enable_auto_unpack;
1056 03ca6dcd Erik van Pienbroek
    gboolean enable_bandwidth_shaping;
1057 03ca6dcd Erik van Pienbroek
    int max_bandwidth;
1058 03ca6dcd Erik van Pienbroek
    gboolean enable_webserver;
1059 03ca6dcd Erik van Pienbroek
    int webserver_port;
1060 03ca6dcd Erik van Pienbroek
    gboolean enable_logger;
1061 2daf68af Erik van Pienbroek
    gboolean auto_remove_files_after_repair;
1062 2daf68af Erik van Pienbroek
    gboolean auto_remove_files_after_unpack;
1063 27b03fad Erik van Pienbroek
    gboolean auto_remove_collections_after_download;
1064 03ca6dcd Erik van Pienbroek

                
1065 409d5134 Erik van Pienbroek
    memset(opts, 0, sizeof(NGConfigOpts));
1066 03ca6dcd Erik van Pienbroek

                
1067 03ca6dcd Erik van Pienbroek
    request = create_new_json_request("nntpgrab_config_get_opts", NULL);
1068 03ca6dcd Erik van Pienbroek

                
1069 03ca6dcd Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1070 03ca6dcd Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_config_get_opts FAILED: %s\n", __LINE__, errmsg);
1071 03ca6dcd Erik van Pienbroek
        g_free(errmsg);
1072 03ca6dcd Erik van Pienbroek
        json_object_put(request);
1073 03ca6dcd Erik van Pienbroek
        return FALSE;
1074 03ca6dcd Erik van Pienbroek
    }
1075 03ca6dcd Erik van Pienbroek

                
1076 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "download_directory", "config_get_opts", string, download_directory);
1077 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "temp_directory", "config_get_opts", string, temp_directory);
1078 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "enable_intelligent_par2_downloading", "config_get_opts", boolean, enable_intelligent_par2_downloading);
1079 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "enable_par2_repair", "config_get_opts", boolean, enable_par2_repair);
1080 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "auto_import_directory", "config_get_opts", string, auto_import_directory);
1081 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "enable_auto_import", "config_get_opts", boolean, enable_auto_import);
1082 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "move_file_after_auto_import", "config_get_opts", boolean, move_file_after_auto_import);
1083 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "enable_auto_unpack", "config_get_opts", boolean, enable_auto_unpack);
1084 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "enable_bandwidth_shaping", "config_get_opts", boolean, enable_bandwidth_shaping);
1085 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "max_bandwidth", "config_get_opts", int, max_bandwidth);
1086 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "enable_webserver", "config_get_opts", boolean, enable_webserver);
1087 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "webserver_port", "config_get_opts", int, webserver_port);
1088 03ca6dcd Erik van Pienbroek
    get_method_param(response_result, "enable_logger", "config_get_opts", boolean, enable_logger);
1089 2daf68af Erik van Pienbroek
    get_method_param(response_result, "auto_remove_files_after_repair", "config_get_opts", boolean, auto_remove_files_after_repair);
1090 2daf68af Erik van Pienbroek
    get_method_param(response_result, "auto_remove_files_after_unpack", "config_get_opts", boolean, auto_remove_files_after_unpack);
1091 27b03fad Erik van Pienbroek
    get_method_param(response_result, "auto_remove_collections_after_download", "config_get_opts", boolean, auto_remove_collections_after_download);
1092 03ca6dcd Erik van Pienbroek

                
1093 03ca6dcd Erik van Pienbroek
    strncpy(opts->download_directory, download_directory, sizeof(opts->download_directory) - 1);
1094 03ca6dcd Erik van Pienbroek
    strncpy(opts->temp_directory, temp_directory, sizeof(opts->temp_directory) - 1);
1095 03ca6dcd Erik van Pienbroek
    opts->enable_intelligent_par2_downloading = enable_intelligent_par2_downloading;
1096 03ca6dcd Erik van Pienbroek
    opts->enable_par2_repair = enable_par2_repair;
1097 03ca6dcd Erik van Pienbroek
    strncpy(opts->auto_import_directory, auto_import_directory, sizeof(opts->auto_import_directory) - 1);
1098 03ca6dcd Erik van Pienbroek
    opts->enable_auto_import = enable_auto_import;
1099 03ca6dcd Erik van Pienbroek
    opts->move_file_after_auto_import = move_file_after_auto_import;
1100 03ca6dcd Erik van Pienbroek
    opts->enable_auto_unpack = enable_auto_unpack;
1101 03ca6dcd Erik van Pienbroek
    opts->enable_bandwidth_shaping = enable_bandwidth_shaping;
1102 03ca6dcd Erik van Pienbroek
    opts->max_bandwidth = max_bandwidth;
1103 03ca6dcd Erik van Pienbroek
    opts->enable_webserver = enable_webserver;
1104 03ca6dcd Erik van Pienbroek
    opts->webserver_port = webserver_port;
1105 03ca6dcd Erik van Pienbroek
    opts->enable_logger = enable_logger;
1106 2daf68af Erik van Pienbroek
    opts->auto_remove_files_after_repair = auto_remove_files_after_repair;
1107 2daf68af Erik van Pienbroek
    opts->auto_remove_files_after_unpack = auto_remove_files_after_unpack;
1108 27b03fad Erik van Pienbroek
    opts->auto_remove_collections_after_download = auto_remove_collections_after_download;
1109 03ca6dcd Erik van Pienbroek

                
1110 03ca6dcd Erik van Pienbroek
    json_object_put(request);
1111 03ca6dcd Erik van Pienbroek
    json_object_put(response_result);
1112 03ca6dcd Erik van Pienbroek

                
1113 03ca6dcd Erik van Pienbroek
    return TRUE;
1114 03ca6dcd Erik van Pienbroek
}
1115 03ca6dcd Erik van Pienbroek

                
1116 03ca6dcd Erik van Pienbroek
gboolean
1117 422481af Erik van Pienbroek
nntpgrab_glue_internal_config_set_opts(NntpgrabGlue *obj, NGConfigOpts opts)
1118 03ca6dcd Erik van Pienbroek
{
1119 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1120 03ca6dcd Erik van Pienbroek
    struct json_object *request;
1121 03ca6dcd Erik van Pienbroek
    struct json_object *request_params;
1122 03ca6dcd Erik van Pienbroek
    struct json_object *param;
1123 03ca6dcd Erik van Pienbroek
    struct json_object *response_result;
1124 03ca6dcd Erik van Pienbroek
    char *errmsg = NULL;
1125 03ca6dcd Erik van Pienbroek

                
1126 03ca6dcd Erik van Pienbroek
    request_params = json_object_new_array();
1127 03ca6dcd Erik van Pienbroek
    param = json_object_new_object();
1128 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "download_directory", json_object_new_string((char*) opts.download_directory));
1129 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "temp_directory", json_object_new_string((char*) opts.temp_directory));
1130 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "enable_intelligent_par2_downloading", json_object_new_boolean(opts.enable_intelligent_par2_downloading));
1131 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "enable_par2_repair", json_object_new_boolean(opts.enable_par2_repair));
1132 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "auto_import_directory", json_object_new_string((char*) opts.auto_import_directory));
1133 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "enable_auto_import", json_object_new_boolean(opts.enable_auto_import));
1134 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "move_file_after_auto_import", json_object_new_boolean(opts.move_file_after_auto_import));
1135 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "enable_auto_unpack", json_object_new_boolean(opts.enable_auto_unpack));
1136 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "enable_bandwidth_shaping", json_object_new_boolean(opts.enable_bandwidth_shaping));
1137 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "max_bandwidth", json_object_new_int(opts.max_bandwidth));
1138 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "enable_webserver", json_object_new_boolean(opts.enable_webserver));
1139 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "webserver_port", json_object_new_int(opts.webserver_port));
1140 03ca6dcd Erik van Pienbroek
    json_object_object_add(param, "enable_logger", json_object_new_boolean(opts.enable_logger));
1141 2daf68af Erik van Pienbroek
    json_object_object_add(param, "auto_remove_files_after_repair", json_object_new_boolean(opts.auto_remove_files_after_repair));
1142 2daf68af Erik van Pienbroek
    json_object_object_add(param, "auto_remove_files_after_unpack", json_object_new_boolean(opts.auto_remove_files_after_unpack));
1143 27b03fad Erik van Pienbroek
    json_object_object_add(param, "auto_remove_collections_after_download", json_object_new_boolean(opts.auto_remove_collections_after_download));
1144 03ca6dcd Erik van Pienbroek
    json_object_array_add(request_params, param);
1145 03ca6dcd Erik van Pienbroek
    request = create_new_json_request("nntpgrab_config_set_opts", request_params);
1146 03ca6dcd Erik van Pienbroek

                
1147 03ca6dcd Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1148 03ca6dcd Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_config_set_opts FAILED: %s\n", __LINE__, errmsg);
1149 03ca6dcd Erik van Pienbroek
        g_free(errmsg);
1150 03ca6dcd Erik van Pienbroek
        json_object_put(request);
1151 03ca6dcd Erik van Pienbroek
        return FALSE;
1152 03ca6dcd Erik van Pienbroek
    }
1153 03ca6dcd Erik van Pienbroek

                
1154 03ca6dcd Erik van Pienbroek
    json_object_put(request);
1155 03ca6dcd Erik van Pienbroek
    json_object_put(response_result);
1156 03ca6dcd Erik van Pienbroek

                
1157 03ca6dcd Erik van Pienbroek
    return TRUE;
1158 03ca6dcd Erik van Pienbroek
}
1159 03ca6dcd Erik van Pienbroek

                
1160 4c8dde64 Erik van Pienbroek
gboolean
1161 422481af Erik van Pienbroek
nntpgrab_glue_internal_config_get_folder_listing(NntpgrabGlue *obj, const char *parent, NGList **folders)
1162 4c8dde64 Erik van Pienbroek
{
1163 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1164 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1165 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1166 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1167 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1168 4c8dde64 Erik van Pienbroek
    int i;
1169 4c8dde64 Erik van Pienbroek
    int len;
1170 4c8dde64 Erik van Pienbroek

                
1171 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1172 4c8dde64 Erik van Pienbroek
    if (parent) {
1173 4c8dde64 Erik van Pienbroek
        json_object_array_add(request_params, json_object_new_string((char*) parent));
1174 4c8dde64 Erik van Pienbroek
    } else {
1175 4c8dde64 Erik van Pienbroek
        json_object_array_add(request_params, NULL);
1176 4c8dde64 Erik van Pienbroek
    }
1177 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_utils_get_folder_listing", request_params);
1178 4c8dde64 Erik van Pienbroek

                
1179 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1180 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_utils_get_folder_listing FAILED: %s\n", __LINE__, errmsg);
1181 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1182 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1183 4c8dde64 Erik van Pienbroek
        return FALSE;
1184 4c8dde64 Erik van Pienbroek
    }
1185 4c8dde64 Erik van Pienbroek

                
1186 4c8dde64 Erik van Pienbroek
    if (json_object_get_type(response_result) != json_type_array) {
1187 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_utils_get_folder_listing FAILED: response_result is of invalid type, type = %i\n", __LINE__, json_object_get_type(response_result));
1188 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1189 4c8dde64 Erik van Pienbroek
        json_object_put(response_result);
1190 4c8dde64 Erik van Pienbroek

                
1191 4c8dde64 Erik van Pienbroek
        return FALSE;
1192 4c8dde64 Erik van Pienbroek
    }
1193 4c8dde64 Erik van Pienbroek

                
1194 4c8dde64 Erik van Pienbroek
    len = json_object_array_length(response_result);
1195 4c8dde64 Erik van Pienbroek
    *folders = NULL;
1196 4c8dde64 Erik van Pienbroek
    for (i = 0; i < len; i++) {
1197 e80d9e58 Erik van Pienbroek
        struct json_object *param = json_object_array_get_idx(response_result, i);
1198 4c8dde64 Erik van Pienbroek
        NNTPGrabFolder *folder;
1199 4c8dde64 Erik van Pienbroek
        char *folder_str;
1200 4c8dde64 Erik van Pienbroek

                
1201 4c8dde64 Erik van Pienbroek
        g_return_val_if_fail(obj != NULL, FALSE);
1202 4c8dde64 Erik van Pienbroek

                
1203 4c8dde64 Erik van Pienbroek
        folder = g_slice_new0(NNTPGrabFolder);
1204 4c8dde64 Erik van Pienbroek

                
1205 e80d9e58 Erik van Pienbroek
        get_method_param(param, "folder", "nntpgrab_utils_get_folder_listing", string, folder_str);
1206 e80d9e58 Erik van Pienbroek
        get_method_param(param, "has_subfolders", "nntpgrab_utils_get_folder_listing", boolean, folder->has_subfolders);
1207 4c8dde64 Erik van Pienbroek
        strncpy(folder->folder, folder_str, sizeof(folder->folder) - 1);
1208 4c8dde64 Erik van Pienbroek

                
1209 4c8dde64 Erik van Pienbroek
        *folders = ng_list_append(*folders, folder);
1210 4c8dde64 Erik van Pienbroek
    }
1211 4c8dde64 Erik van Pienbroek

                
1212 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1213 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1214 4c8dde64 Erik van Pienbroek

                
1215 4c8dde64 Erik van Pienbroek
    return TRUE;
1216 4c8dde64 Erik van Pienbroek
}
1217 4c8dde64 Erik van Pienbroek

                
1218 4c8dde64 Erik van Pienbroek
gboolean
1219 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_start(NntpgrabGlue *obj)
1220 4c8dde64 Erik van Pienbroek
{
1221 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1222 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1223 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1224 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1225 4c8dde64 Erik van Pienbroek

                
1226 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_start", NULL);
1227 4c8dde64 Erik van Pienbroek

                
1228 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1229 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_schedular_start FAILED: %s\n", __LINE__, errmsg);
1230 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1231 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1232 4c8dde64 Erik van Pienbroek
        return FALSE;
1233 4c8dde64 Erik van Pienbroek
    }
1234 4c8dde64 Erik van Pienbroek

                
1235 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1236 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1237 4c8dde64 Erik van Pienbroek

                
1238 4c8dde64 Erik van Pienbroek
    return TRUE;
1239 4c8dde64 Erik van Pienbroek
}
1240 4c8dde64 Erik van Pienbroek

                
1241 4c8dde64 Erik van Pienbroek
gboolean
1242 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_stop(NntpgrabGlue *obj, gboolean wait)
1243 4c8dde64 Erik van Pienbroek
{
1244 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1245 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1246 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1247 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1248 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1249 4c8dde64 Erik van Pienbroek

                
1250 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1251 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_boolean(wait));
1252 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_stop", request_params);
1253 4c8dde64 Erik van Pienbroek

                
1254 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1255 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_schedular_stop FAILED: %s\n", __LINE__, errmsg);
1256 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1257 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1258 4c8dde64 Erik van Pienbroek
        return FALSE;
1259 4c8dde64 Erik van Pienbroek
    }
1260 4c8dde64 Erik van Pienbroek

                
1261 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1262 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1263 4c8dde64 Erik van Pienbroek

                
1264 4c8dde64 Erik van Pienbroek
    return TRUE;
1265 4c8dde64 Erik van Pienbroek
}
1266 4c8dde64 Erik van Pienbroek

                
1267 18074ccc Erik van Pienbroek
NGSchedularState
1268 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_get_state(NntpgrabGlue *obj)
1269 4c8dde64 Erik van Pienbroek
{
1270 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1271 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1272 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1273 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1274 18074ccc Erik van Pienbroek
    NGSchedularState ret;
1275 4c8dde64 Erik van Pienbroek

                
1276 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_get_state", NULL);
1277 4c8dde64 Erik van Pienbroek

                
1278 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1279 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_schedular_get_state FAILED: %s\n", __LINE__, errmsg);
1280 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1281 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1282 4c8dde64 Erik van Pienbroek
        return SCHEDULAR_STATE_STOPPED;
1283 4c8dde64 Erik van Pienbroek
    }
1284 4c8dde64 Erik van Pienbroek

                
1285 4c8dde64 Erik van Pienbroek
    if (json_object_get_type(response_result) != json_type_int) {
1286 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_schedular_get_state FAILED: response_result is of invalid type, type = %i\n", __LINE__, json_object_get_type(response_result));
1287 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1288 4c8dde64 Erik van Pienbroek
        json_object_put(response_result);
1289 4c8dde64 Erik van Pienbroek

                
1290 4c8dde64 Erik van Pienbroek
        return SCHEDULAR_STATE_STOPPED;
1291 4c8dde64 Erik van Pienbroek
    }
1292 4c8dde64 Erik van Pienbroek

                
1293 4c8dde64 Erik van Pienbroek
    ret = json_object_get_int(response_result);
1294 4c8dde64 Erik van Pienbroek

                
1295 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1296 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1297 4c8dde64 Erik van Pienbroek

                
1298 4c8dde64 Erik van Pienbroek
    return ret;
1299 4c8dde64 Erik van Pienbroek
}
1300 4c8dde64 Erik van Pienbroek

                
1301 4c8dde64 Erik van Pienbroek
gboolean
1302 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_add_task_to_queue(NntpgrabGlue *obj, const char *collection_name, const char *subject, const char *poster, time_t stamp, nguint64 file_size, NGList *groups, NGList *parts, char **errmsg)
1303 4c8dde64 Erik van Pienbroek
{
1304 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1305 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1306 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1307 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1308 4c8dde64 Erik van Pienbroek
    struct json_object *json_obj;
1309 4c8dde64 Erik van Pienbroek
    NGList *list;
1310 4c8dde64 Erik van Pienbroek

                
1311 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1312 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) collection_name));
1313 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) subject));
1314 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) poster));
1315 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_int(stamp));
1316 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_int(file_size / 1024));
1317 4c8dde64 Erik van Pienbroek

                
1318 4c8dde64 Erik van Pienbroek
    json_obj = json_object_new_array();
1319 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_obj);
1320 4c8dde64 Erik van Pienbroek
    list = groups;
1321 4c8dde64 Erik van Pienbroek
    while (list) {
1322 4c8dde64 Erik van Pienbroek
        char *groupname = list->data;
1323 4c8dde64 Erik van Pienbroek

                
1324 4c8dde64 Erik van Pienbroek
        json_object_array_add(json_obj, json_object_new_string(groupname));
1325 4c8dde64 Erik van Pienbroek

                
1326 4c8dde64 Erik van Pienbroek
        list = ng_list_next(list);
1327 4c8dde64 Erik van Pienbroek
    }
1328 4c8dde64 Erik van Pienbroek

                
1329 4c8dde64 Erik van Pienbroek
    json_obj = json_object_new_array();
1330 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_obj);
1331 4c8dde64 Erik van Pienbroek
    list = parts;
1332 4c8dde64 Erik van Pienbroek
    while (list) {
1333 901682eb Erik van Pienbroek
        NNTPGrabPart *part = list->data;
1334 4c8dde64 Erik van Pienbroek
        struct json_object *part_obj = json_object_new_object();
1335 4c8dde64 Erik van Pienbroek

                
1336 4c8dde64 Erik van Pienbroek
        json_object_object_add(part_obj, "message_id", json_object_new_string((char*) part->message_id));
1337 4c8dde64 Erik van Pienbroek
        json_object_object_add(part_obj, "part_num", json_object_new_int(part->part_num));
1338 4c8dde64 Erik van Pienbroek
        json_object_object_add(part_obj, "size", json_object_new_int(part->size));
1339 4c8dde64 Erik van Pienbroek
        json_object_array_add(json_obj, part_obj);
1340 4c8dde64 Erik van Pienbroek

                
1341 4c8dde64 Erik van Pienbroek
        list = ng_list_next(list);
1342 4c8dde64 Erik van Pienbroek
    }
1343 4c8dde64 Erik van Pienbroek

                
1344 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_add_file_to_queue", request_params);
1345 4c8dde64 Erik van Pienbroek

                
1346 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
1347 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1348 4c8dde64 Erik van Pienbroek
        return FALSE;
1349 4c8dde64 Erik van Pienbroek
    }
1350 4c8dde64 Erik van Pienbroek

                
1351 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1352 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1353 4c8dde64 Erik van Pienbroek

                
1354 4c8dde64 Erik van Pienbroek
    return TRUE;
1355 4c8dde64 Erik van Pienbroek
}
1356 4c8dde64 Erik van Pienbroek

                
1357 4c8dde64 Erik van Pienbroek
gboolean
1358 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_del_task_from_queue(NntpgrabGlue *obj, const char *collection_name, const char *subject, char **errmsg)
1359 4c8dde64 Erik van Pienbroek
{
1360 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1361 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1362 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1363 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1364 4c8dde64 Erik van Pienbroek

                
1365 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1366 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) collection_name));
1367 eff95c4f Erik van Pienbroek
    if (subject) {
1368 eff95c4f Erik van Pienbroek
        json_object_array_add(request_params, json_object_new_string((char*) subject));
1369 eff95c4f Erik van Pienbroek
    } else {
1370 eff95c4f Erik van Pienbroek
        json_object_array_add(request_params, NULL);
1371 eff95c4f Erik van Pienbroek
    }
1372 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_del_file_from_queue", request_params);
1373 4c8dde64 Erik van Pienbroek

                
1374 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
1375 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1376 4c8dde64 Erik van Pienbroek
        return FALSE;
1377 4c8dde64 Erik van Pienbroek
    }
1378 4c8dde64 Erik van Pienbroek

                
1379 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1380 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1381 4c8dde64 Erik van Pienbroek

                
1382 4c8dde64 Erik van Pienbroek
    return TRUE;
1383 4c8dde64 Erik van Pienbroek
}
1384 4c8dde64 Erik van Pienbroek

                
1385 4c8dde64 Erik van Pienbroek
gboolean
1386 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_restart_task(NntpgrabGlue *obj, const char *collection_name, const char *subject, char **errmsg)
1387 4c8dde64 Erik van Pienbroek
{
1388 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1389 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1390 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1391 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1392 4c8dde64 Erik van Pienbroek

                
1393 055496d9 Erik van Pienbroek
    g_return_val_if_fail(collection_name != NULL, FALSE);
1394 055496d9 Erik van Pienbroek
    /* NOTE: subject CAN be NULL */
1395 055496d9 Erik van Pienbroek

                
1396 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1397 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) collection_name));
1398 055496d9 Erik van Pienbroek
    if (subject) {
1399 055496d9 Erik van Pienbroek
        json_object_array_add(request_params, json_object_new_string((char*) subject));
1400 055496d9 Erik van Pienbroek
    } else {
1401 055496d9 Erik van Pienbroek
        json_object_array_add(request_params, NULL);
1402 055496d9 Erik van Pienbroek
    }
1403 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_restart_file", request_params);
1404 4c8dde64 Erik van Pienbroek

                
1405 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
1406 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1407 4c8dde64 Erik van Pienbroek
        return FALSE;
1408 4c8dde64 Erik van Pienbroek
    }
1409 4c8dde64 Erik van Pienbroek

                
1410 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1411 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1412 4c8dde64 Erik van Pienbroek

                
1413 4c8dde64 Erik van Pienbroek
    return TRUE;
1414 4c8dde64 Erik van Pienbroek
}
1415 4c8dde64 Erik van Pienbroek

                
1416 4c8dde64 Erik van Pienbroek
gboolean
1417 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_save_queue(NntpgrabGlue *obj, char **errmsg)
1418 4c8dde64 Erik van Pienbroek
{
1419 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1420 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1421 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1422 4c8dde64 Erik van Pienbroek

                
1423 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_save_queue", NULL);
1424 4c8dde64 Erik van Pienbroek

                
1425 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
1426 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1427 4c8dde64 Erik van Pienbroek
        return FALSE;
1428 4c8dde64 Erik van Pienbroek
    }
1429 4c8dde64 Erik van Pienbroek

                
1430 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1431 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1432 4c8dde64 Erik van Pienbroek

                
1433 4c8dde64 Erik van Pienbroek
    return TRUE;
1434 4c8dde64 Erik van Pienbroek
}
1435 4c8dde64 Erik van Pienbroek

                
1436 3e36b172 Erik van Pienbroek
static ForeachCollectionFunc collection_func_global = NULL;
1437 3e36b172 Erik van Pienbroek
static ForeachFileFunc file_func_global = NULL;
1438 3e36b172 Erik van Pienbroek
static ForeachGroupFunc group_func_global = NULL;
1439 3e36b172 Erik van Pienbroek
static void *foreach_task_user_data_global = NULL;
1440 3e36b172 Erik van Pienbroek

                
1441 d9ff048e Erik van Pienbroek
static void
1442 3e36b172 Erik van Pienbroek
process_foreach_collection_event(const char *msg, struct json_object *params)
1443 d9ff048e Erik van Pienbroek
{
1444 3e36b172 Erik van Pienbroek
    char *collection_name = NULL;
1445 3e36b172 Erik van Pienbroek
    char *poster = NULL;
1446 3e36b172 Erik van Pienbroek
    guint64 total_size = 0;
1447 3e36b172 Erik van Pienbroek
    guint64 total_size_remaining = 0;
1448 3e36b172 Erik van Pienbroek
    int position = 0;
1449 d9ff048e Erik van Pienbroek

                
1450 3e36b172 Erik van Pienbroek
    if (!collection_func_global) {
1451 3e36b172 Erik van Pienbroek
        return;
1452 d9ff048e Erik van Pienbroek
    }
1453 d9ff048e Erik van Pienbroek

                
1454 3e36b172 Erik van Pienbroek
    get_param(msg, params, "collection_name", "foreach_collection_event", string, collection_name);
1455 3e36b172 Erik van Pienbroek
    get_param(msg, params, "poster", "foreach_collection_event", string, poster);
1456 3e36b172 Erik van Pienbroek
    get_param(msg, params, "total_size", "foreach_collection_event", int, total_size);
1457 3e36b172 Erik van Pienbroek
    get_param(msg, params, "total_size_remaining", "foreach_collection_event", int, total_size_remaining);
1458 3e36b172 Erik van Pienbroek
    get_param(msg, params, "position", "foreach_collection_event", int, position);
1459 d9ff048e Erik van Pienbroek

                
1460 3e36b172 Erik van Pienbroek
    /* JSON doesn't support 64bit integers so all file sizes are in KB instead of bytes */
1461 3e36b172 Erik van Pienbroek
    total_size *= 1024;
1462 3e36b172 Erik van Pienbroek
    total_size_remaining *= 1024;
1463 d9ff048e Erik van Pienbroek

                
1464 3e36b172 Erik van Pienbroek
    collection_func_global(collection_name, poster, total_size, total_size_remaining, position, foreach_task_user_data_global);
1465 d9ff048e Erik van Pienbroek
}
1466 d9ff048e Erik van Pienbroek

                
1467 d9ff048e Erik van Pienbroek
static void
1468 3e36b172 Erik van Pienbroek
process_foreach_file_event(const char *msg, struct json_object *params)
1469 d9ff048e Erik van Pienbroek
{
1470 3e36b172 Erik van Pienbroek
    char *collection_name = NULL;
1471 3e36b172 Erik van Pienbroek
    char *subject = NULL;
1472 3e36b172 Erik van Pienbroek
    char *poster;
1473 3e36b172 Erik van Pienbroek
    int stamp;
1474 3e36b172 Erik van Pienbroek
    guint64 file_size;
1475 3e36b172 Erik van Pienbroek
    guint64 file_size_remaining;
1476 3e36b172 Erik van Pienbroek
    int num_parts_total;
1477 3e36b172 Erik van Pienbroek
    int num_parts_downloaded;
1478 3e36b172 Erik van Pienbroek
    int num_parts_failed;
1479 3e36b172 Erik van Pienbroek
    NGTaskState status;
1480 3e36b172 Erik van Pienbroek
    char *filename;
1481 3e36b172 Erik van Pienbroek
    int position;
1482 d9ff048e Erik van Pienbroek

                
1483 3e36b172 Erik van Pienbroek
    if (!file_func_global) {
1484 3e36b172 Erik van Pienbroek
        return;
1485 d9ff048e Erik van Pienbroek
    }
1486 d9ff048e Erik van Pienbroek

                
1487 3e36b172 Erik van Pienbroek
    get_param(msg, params, "collection_name", "foreach_file_event", string, collection_name);
1488 3e36b172 Erik van Pienbroek
    get_param(msg, params, "subject", "foreach_file_event", string, subject);
1489 3e36b172 Erik van Pienbroek
    get_param(msg, params, "poster", "foreach_file_event", string, poster);
1490 3e36b172 Erik van Pienbroek
    get_param(msg, params, "stamp", "foreach_file_event", int, stamp);
1491 3e36b172 Erik van Pienbroek
    get_param(msg, params, "file_size", "foreach_file_event", int, file_size);
1492 3e36b172 Erik van Pienbroek
    get_param(msg, params, "file_size_remaining", "foreach_file_event", int, file_size_remaining);
1493 3e36b172 Erik van Pienbroek
    get_param(msg, params, "num_parts_total", "foreach_file_event", int, num_parts_total);
1494 3e36b172 Erik van Pienbroek
    get_param(msg, params, "num_parts_downloaded", "foreach_file_event", int, num_parts_downloaded);
1495 3e36b172 Erik van Pienbroek
    get_param(msg, params, "num_parts_failed", "foreach_file_event", int, num_parts_failed);
1496 3e36b172 Erik van Pienbroek
    get_param(msg, params, "status", "foreach_file_event", int, status);
1497 3e36b172 Erik van Pienbroek
    get_param(msg, params, "filename", "foreach_file_event", string, filename);
1498 3e36b172 Erik van Pienbroek
    get_param(msg, params, "position", "foreach_file_event", int, position);
1499 3e36b172 Erik van Pienbroek

                
1500 3e36b172 Erik van Pienbroek
    /* JSON doesn't support 64bit integers so all file sizes are in KB instead of bytes */
1501 3e36b172 Erik van Pienbroek
    file_size *= 1024;
1502 3e36b172 Erik van Pienbroek
    file_size_remaining *= 1024;
1503 3e36b172 Erik van Pienbroek

                
1504 3e36b172 Erik van Pienbroek
    file_func_global(collection_name, subject, poster, stamp, file_size, file_size_remaining, position, num_parts_total, num_parts_downloaded, num_parts_failed, status, filename, foreach_task_user_data_global);
1505 3e36b172 Erik van Pienbroek
}
1506 d9ff048e Erik van Pienbroek

                
1507 3e36b172 Erik van Pienbroek
static void
1508 3e36b172 Erik van Pienbroek
process_foreach_group_event(const char *msg, struct json_object *params)
1509 3e36b172 Erik van Pienbroek
{
1510 3e36b172 Erik van Pienbroek
    char *collection_name = NULL;
1511 3e36b172 Erik van Pienbroek
    char *subject = NULL;
1512 3e36b172 Erik van Pienbroek
    char *group = NULL;
1513 d9ff048e Erik van Pienbroek

                
1514 3e36b172 Erik van Pienbroek
    if (!group_func_global) {
1515 3e36b172 Erik van Pienbroek
        return;
1516 3e36b172 Erik van Pienbroek
    }
1517 d9ff048e Erik van Pienbroek

                
1518 3e36b172 Erik van Pienbroek
    get_param(msg, params, "collection_name", "foreach_group_event", string, collection_name);
1519 3e36b172 Erik van Pienbroek
    get_param(msg, params, "subject", "foreach_group_event", string, subject);
1520 3e36b172 Erik van Pienbroek
    get_param(msg, params, "group", "foreach_group_event", string, group);
1521 d9ff048e Erik van Pienbroek

                
1522 3e36b172 Erik van Pienbroek
    group_func_global(collection_name, subject, group, foreach_task_user_data_global);
1523 d9ff048e Erik van Pienbroek
}
1524 d9ff048e Erik van Pienbroek

                
1525 d9ff048e Erik van Pienbroek
gboolean
1526 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_foreach_task(NntpgrabGlue *obj, ForeachCollectionFunc collection_func, ForeachFileFunc file_func, ForeachGroupFunc group_func, void *data)
1527 d9ff048e Erik van Pienbroek
{
1528 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1529 d9ff048e Erik van Pienbroek
    struct json_object *request;
1530 d9ff048e Erik van Pienbroek
    struct json_object *response_result;
1531 d9ff048e Erik van Pienbroek
    char *errmsg = NULL;
1532 3e36b172 Erik van Pienbroek
    gboolean ret;
1533 d9ff048e Erik van Pienbroek

                
1534 d9ff048e Erik van Pienbroek
    g_return_val_if_fail(obj != NULL, FALSE);
1535 d9ff048e Erik van Pienbroek
    g_return_val_if_fail(collection_func != NULL || file_func != NULL || group_func != NULL, FALSE);
1536 d9ff048e Erik van Pienbroek

                
1537 3e36b172 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_foreach_task", NULL);
1538 3e36b172 Erik van Pienbroek

                
1539 3e36b172 Erik van Pienbroek
    collection_func_global = collection_func;
1540 3e36b172 Erik van Pienbroek
    file_func_global = file_func;
1541 3e36b172 Erik van Pienbroek
    group_func_global = group_func;
1542 3e36b172 Erik van Pienbroek
    foreach_task_user_data_global = data;
1543 d9ff048e Erik van Pienbroek

                
1544 d9ff048e Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1545 d9ff048e Erik van Pienbroek
        g_free(errmsg);
1546 d9ff048e Erik van Pienbroek
        json_object_put(request);
1547 3e36b172 Erik van Pienbroek
        collection_func_global = NULL;
1548 3e36b172 Erik van Pienbroek
        file_func_global = NULL;
1549 3e36b172 Erik van Pienbroek
        group_func_global = NULL;
1550 3e36b172 Erik van Pienbroek
        foreach_task_user_data_global = NULL;
1551 d9ff048e Erik van Pienbroek
        return FALSE;
1552 d9ff048e Erik van Pienbroek
    }
1553 d9ff048e Erik van Pienbroek

                
1554 3e36b172 Erik van Pienbroek
    collection_func_global = NULL;
1555 3e36b172 Erik van Pienbroek
    file_func_global = NULL;
1556 3e36b172 Erik van Pienbroek
    group_func_global = NULL;
1557 3e36b172 Erik van Pienbroek
    foreach_task_user_data_global = NULL;
1558 3e36b172 Erik van Pienbroek

                
1559 3e36b172 Erik van Pienbroek
    if (json_object_get_type(response_result) != json_type_boolean) {
1560 d9ff048e Erik van Pienbroek
        // invalid type
1561 3e36b172 Erik van Pienbroek
        g_print(__FILE__ ":%i response is of invalid type for method 'schedular_foreach_task', response = %s\n", __LINE__, json_object_get_string(response_result));
1562 d9ff048e Erik van Pienbroek
        json_object_put(request);
1563 d9ff048e Erik van Pienbroek
        json_object_put(response_result);
1564 d9ff048e Erik van Pienbroek
        return FALSE;
1565 d9ff048e Erik van Pienbroek
    }
1566 d9ff048e Erik van Pienbroek

                
1567 3e36b172 Erik van Pienbroek
    ret = json_object_get_boolean(response_result);
1568 d9ff048e Erik van Pienbroek

                
1569 d9ff048e Erik van Pienbroek
    json_object_put(request);
1570 d9ff048e Erik van Pienbroek
    json_object_put(response_result);
1571 55e0e9a0 Erik van Pienbroek

                
1572 3e36b172 Erik van Pienbroek
    return ret;
1573 55e0e9a0 Erik van Pienbroek
}
1574 4c8dde64 Erik van Pienbroek

                
1575 4c8dde64 Erik van Pienbroek
gboolean
1576 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_move_task(NntpgrabGlue *obj, const char *collection_name_src, const char *subject_src, const char *collection_name_dest, int position_dest)
1577 4c8dde64 Erik van Pienbroek
{
1578 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1579 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1580 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1581 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1582 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1583 4c8dde64 Erik van Pienbroek

                
1584 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1585 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) collection_name_src));
1586 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) subject_src));
1587 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) collection_name_dest));
1588 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_int(position_dest));
1589 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_move_file", request_params);
1590 4c8dde64 Erik van Pienbroek

                
1591 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1592 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_schedular_move_file FAILED: %s\n", __LINE__, errmsg);
1593 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1594 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1595 4c8dde64 Erik van Pienbroek
        return FALSE;
1596 4c8dde64 Erik van Pienbroek
    }
1597 4c8dde64 Erik van Pienbroek

                
1598 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1599 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1600 4c8dde64 Erik van Pienbroek

                
1601 4c8dde64 Erik van Pienbroek
    return TRUE;
1602 4c8dde64 Erik van Pienbroek
}
1603 4c8dde64 Erik van Pienbroek

                
1604 4c8dde64 Erik van Pienbroek
gboolean
1605 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_move_collection(NntpgrabGlue *obj, const char *collection_name, int new_position)
1606 4c8dde64 Erik van Pienbroek
{
1607 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1608 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1609 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1610 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1611 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1612 4c8dde64 Erik van Pienbroek

                
1613 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1614 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) collection_name));
1615 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_int(new_position));
1616 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_move_collection", request_params);
1617 4c8dde64 Erik van Pienbroek

                
1618 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1619 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_schedular_move_collection FAILED: %s\n", __LINE__, errmsg);
1620 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1621 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1622 4c8dde64 Erik van Pienbroek
        return FALSE;
1623 4c8dde64 Erik van Pienbroek
    }
1624 4c8dde64 Erik van Pienbroek

                
1625 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1626 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1627 4c8dde64 Erik van Pienbroek

                
1628 4c8dde64 Erik van Pienbroek
    return TRUE;
1629 4c8dde64 Erik van Pienbroek
}
1630 4c8dde64 Erik van Pienbroek

                
1631 d32f1bc1 Erik van Pienbroek
gboolean
1632 422481af Erik van Pienbroek
nntpgrab_glue_internal_schedular_mark_task_optional(NntpgrabGlue *obj, const char *collection_name, const char *subject, ngboolean is_optional)
1633 d32f1bc1 Erik van Pienbroek
{
1634 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1635 d32f1bc1 Erik van Pienbroek
    struct json_object *request;
1636 d32f1bc1 Erik van Pienbroek
    struct json_object *request_params;
1637 d32f1bc1 Erik van Pienbroek
    struct json_object *response_result;
1638 d32f1bc1 Erik van Pienbroek
    char *errmsg = NULL;
1639 d32f1bc1 Erik van Pienbroek

                
1640 d32f1bc1 Erik van Pienbroek
    request_params = json_object_new_array();
1641 d32f1bc1 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) collection_name));
1642 d32f1bc1 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) subject));
1643 d32f1bc1 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_boolean(is_optional));
1644 d32f1bc1 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_schedular_mark_task_optional", request_params);
1645 d32f1bc1 Erik van Pienbroek

                
1646 d32f1bc1 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1647 d32f1bc1 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_schedular_mark_task_optional FAILED: %s\n", __LINE__, errmsg);
1648 d32f1bc1 Erik van Pienbroek
        g_free(errmsg);
1649 d32f1bc1 Erik van Pienbroek
        json_object_put(request);
1650 d32f1bc1 Erik van Pienbroek
        return FALSE;
1651 d32f1bc1 Erik van Pienbroek
    }
1652 d32f1bc1 Erik van Pienbroek

                
1653 d32f1bc1 Erik van Pienbroek
    json_object_put(request);
1654 d32f1bc1 Erik van Pienbroek
    json_object_put(response_result);
1655 d32f1bc1 Erik van Pienbroek

                
1656 d32f1bc1 Erik van Pienbroek
    return TRUE;
1657 d32f1bc1 Erik van Pienbroek
}
1658 d32f1bc1 Erik van Pienbroek

                
1659 4c8dde64 Erik van Pienbroek
NGList *
1660 422481af Erik van Pienbroek
nntpgrab_glue_internal_plugins_get_avail_plugins(NntpgrabGlue *obj)
1661 4c8dde64 Erik van Pienbroek
{
1662 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1663 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1664 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1665 4c8dde64 Erik van Pienbroek
    NGList *ret = NULL;
1666 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1667 4c8dde64 Erik van Pienbroek
    int i;
1668 4c8dde64 Erik van Pienbroek
    int len;
1669 4c8dde64 Erik van Pienbroek

                
1670 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_plugins_get_avail_plugins", NULL);
1671 4c8dde64 Erik van Pienbroek

                
1672 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1673 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_plugins_get_avail_plugins FAILED: %s\n", __LINE__, errmsg);
1674 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1675 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1676 4c8dde64 Erik van Pienbroek
        return NULL;
1677 4c8dde64 Erik van Pienbroek
    }
1678 4c8dde64 Erik van Pienbroek

                
1679 4c8dde64 Erik van Pienbroek
    len = json_object_array_length(response_result);
1680 4c8dde64 Erik van Pienbroek
    for (i = 0; i < len; i++) {
1681 4c8dde64 Erik van Pienbroek
        struct json_object *obj = json_object_array_get_idx(response_result, i);
1682 4c8dde64 Erik van Pienbroek
        char *servername;
1683 4c8dde64 Erik van Pienbroek

                
1684 4c8dde64 Erik van Pienbroek
        g_return_val_if_fail(obj != NULL, NULL);
1685 4c8dde64 Erik van Pienbroek

                
1686 4c8dde64 Erik van Pienbroek
        servername = json_object_get_string(obj);
1687 4c8dde64 Erik van Pienbroek

                
1688 4c8dde64 Erik van Pienbroek
        g_return_val_if_fail(servername != NULL, NULL);
1689 4c8dde64 Erik van Pienbroek

                
1690 4c8dde64 Erik van Pienbroek
        ret = ng_list_append(ret, g_strdup(servername));
1691 4c8dde64 Erik van Pienbroek
    }
1692 4c8dde64 Erik van Pienbroek

                
1693 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1694 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1695 4c8dde64 Erik van Pienbroek

                
1696 4c8dde64 Erik van Pienbroek
    return ret;
1697 4c8dde64 Erik van Pienbroek
}
1698 4c8dde64 Erik van Pienbroek

                
1699 4c8dde64 Erik van Pienbroek
gboolean
1700 422481af Erik van Pienbroek
nntpgrab_glue_internal_plugins_get_plugin_info(NntpgrabGlue *obj, const char *plugin_name, NNTPGrabPluginInfo *plugin_info)
1701 4c8dde64 Erik van Pienbroek
{
1702 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1703 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1704 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1705 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1706 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1707 4c8dde64 Erik van Pienbroek
    char *name;
1708 4c8dde64 Erik van Pienbroek
    char *version;
1709 4c8dde64 Erik van Pienbroek
    char *author;
1710 4c8dde64 Erik van Pienbroek
    char *url;
1711 4c8dde64 Erik van Pienbroek
    char *description;
1712 4c8dde64 Erik van Pienbroek
    gboolean is_loaded;
1713 4c8dde64 Erik van Pienbroek
    gboolean is_persistent;
1714 4c8dde64 Erik van Pienbroek

                
1715 4c8dde64 Erik van Pienbroek
    g_return_val_if_fail(plugin_name != NULL, FALSE);
1716 4c8dde64 Erik van Pienbroek
    g_return_val_if_fail(plugin_info != NULL, FALSE);
1717 4c8dde64 Erik van Pienbroek

                
1718 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1719 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) plugin_name));
1720 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_plugins_get_plugin_info", request_params);
1721 4c8dde64 Erik van Pienbroek

                
1722 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1723 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_plugins_get_plugin_info FAILED: %s\n", __LINE__, errmsg);
1724 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1725 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1726 4c8dde64 Erik van Pienbroek
        return FALSE;
1727 4c8dde64 Erik van Pienbroek
    }
1728 4c8dde64 Erik van Pienbroek

                
1729 4c8dde64 Erik van Pienbroek
    get_method_param(response_result, "name", "plugins_get_plugin_info", string, name);
1730 4c8dde64 Erik van Pienbroek
    get_method_param(response_result, "version", "plugins_get_plugin_info", string, version);
1731 4c8dde64 Erik van Pienbroek
    get_method_param(response_result, "author", "plugins_get_plugin_info", string, author);
1732 4c8dde64 Erik van Pienbroek
    get_method_param(response_result, "url", "plugins_get_plugin_info", string, url);
1733 4c8dde64 Erik van Pienbroek
    get_method_param(response_result, "description", "plugins_get_plugin_info", string, description);
1734 4c8dde64 Erik van Pienbroek
    get_method_param(response_result, "is_loaded", "plugins_get_plugin_info", boolean, is_loaded);
1735 4c8dde64 Erik van Pienbroek
    get_method_param(response_result, "is_persistent", "plugins_get_plugin_info", boolean, is_persistent);
1736 4c8dde64 Erik van Pienbroek

                
1737 4c8dde64 Erik van Pienbroek
    memset(plugin_info, 0, sizeof(NNTPGrabPluginInfo));
1738 4c8dde64 Erik van Pienbroek

                
1739 4c8dde64 Erik van Pienbroek
    strncpy(plugin_info->name, name, sizeof(plugin_info->name));
1740 4c8dde64 Erik van Pienbroek
    strncpy(plugin_info->version, version, sizeof(plugin_info->version));
1741 4c8dde64 Erik van Pienbroek
    strncpy(plugin_info->author, author, sizeof(plugin_info->author));
1742 4c8dde64 Erik van Pienbroek
    strncpy(plugin_info->url, url, sizeof(plugin_info->url));
1743 4c8dde64 Erik van Pienbroek
    strncpy(plugin_info->description, description, sizeof(plugin_info->description));
1744 4c8dde64 Erik van Pienbroek
    plugin_info->is_loaded = is_loaded;
1745 4c8dde64 Erik van Pienbroek
    plugin_info->is_persistent = is_persistent;
1746 4c8dde64 Erik van Pienbroek

                
1747 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1748 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1749 4c8dde64 Erik van Pienbroek

                
1750 4c8dde64 Erik van Pienbroek
    return TRUE;
1751 4c8dde64 Erik van Pienbroek
}
1752 4c8dde64 Erik van Pienbroek

                
1753 4c8dde64 Erik van Pienbroek
gboolean
1754 422481af Erik van Pienbroek
nntpgrab_glue_internal_plugins_load_plugin(NntpgrabGlue *obj, const char *plugin_name, char **errmsg)
1755 4c8dde64 Erik van Pienbroek
{
1756 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1757 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1758 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1759 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1760 4c8dde64 Erik van Pienbroek

                
1761 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1762 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) plugin_name));
1763 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_plugins_load_plugin", request_params);
1764 4c8dde64 Erik van Pienbroek

                
1765 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
1766 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1767 4c8dde64 Erik van Pienbroek
        return FALSE;
1768 4c8dde64 Erik van Pienbroek
    }
1769 4c8dde64 Erik van Pienbroek

                
1770 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1771 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1772 4c8dde64 Erik van Pienbroek

                
1773 4c8dde64 Erik van Pienbroek
    return TRUE;
1774 4c8dde64 Erik van Pienbroek
}
1775 4c8dde64 Erik van Pienbroek

                
1776 4c8dde64 Erik van Pienbroek
gboolean
1777 422481af Erik van Pienbroek
nntpgrab_glue_internal_plugins_unload_plugin(NntpgrabGlue *obj, const char *plugin_name, char **errmsg)
1778 4c8dde64 Erik van Pienbroek
{
1779 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1780 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1781 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1782 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1783 4c8dde64 Erik van Pienbroek

                
1784 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1785 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) plugin_name));
1786 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_plugins_unload_plugin", request_params);
1787 4c8dde64 Erik van Pienbroek

                
1788 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
1789 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1790 4c8dde64 Erik van Pienbroek
        return FALSE;
1791 4c8dde64 Erik van Pienbroek
    }
1792 4c8dde64 Erik van Pienbroek

                
1793 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1794 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1795 4c8dde64 Erik van Pienbroek

                
1796 4c8dde64 Erik van Pienbroek
    return TRUE;
1797 4c8dde64 Erik van Pienbroek
}
1798 4c8dde64 Erik van Pienbroek

                
1799 4c8dde64 Erik van Pienbroek
gboolean
1800 422481af Erik van Pienbroek
nntpgrab_glue_internal_plugins_set_persistent(NntpgrabGlue *obj, const char *plugin_name, ngboolean persistent)
1801 4c8dde64 Erik van Pienbroek
{
1802 422481af Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1803 4c8dde64 Erik van Pienbroek
    struct json_object *request;
1804 4c8dde64 Erik van Pienbroek
    struct json_object *request_params;
1805 4c8dde64 Erik van Pienbroek
    struct json_object *response_result;
1806 4c8dde64 Erik van Pienbroek
    char *errmsg = NULL;
1807 4c8dde64 Erik van Pienbroek

                
1808 4c8dde64 Erik van Pienbroek
    request_params = json_object_new_array();
1809 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) plugin_name));
1810 4c8dde64 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_boolean(persistent));
1811 4c8dde64 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_plugins_set_persistent", request_params);
1812 4c8dde64 Erik van Pienbroek

                
1813 4c8dde64 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1814 4c8dde64 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_plugins_set_persistent FAILED: %s\n", __LINE__, errmsg);
1815 4c8dde64 Erik van Pienbroek
        g_free(errmsg);
1816 4c8dde64 Erik van Pienbroek
        json_object_put(request);
1817 4c8dde64 Erik van Pienbroek
        return FALSE;
1818 4c8dde64 Erik van Pienbroek
    }
1819 4c8dde64 Erik van Pienbroek

                
1820 4c8dde64 Erik van Pienbroek
    json_object_put(request);
1821 4c8dde64 Erik van Pienbroek
    json_object_put(response_result);
1822 4c8dde64 Erik van Pienbroek

                
1823 4c8dde64 Erik van Pienbroek
    return TRUE;
1824 4c8dde64 Erik van Pienbroek
}
1825 119ed779 Erik van Pienbroek

                
1826 3b46768f Erik van Pienbroek
NGVariant *
1827 3b46768f Erik van Pienbroek
nntpgrab_glue_internal_plugins_call_plugin_method(NntpgrabGlue *obj, const char *plugin_name, const char *method, NGVariant *parameters, char **errmsg)
1828 3b46768f Erik van Pienbroek
{
1829 3b46768f Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1830 3b46768f Erik van Pienbroek
    struct json_object *request;
1831 3b46768f Erik van Pienbroek
    struct json_object *request_params;
1832 3b46768f Erik van Pienbroek
    struct json_object *response_result;
1833 3b46768f Erik van Pienbroek
    char *params_str;
1834 3b46768f Erik van Pienbroek
    GVariant *ret;
1835 3b46768f Erik van Pienbroek
    GError *error = NULL;
1836 3b46768f Erik van Pienbroek

                
1837 928a29fe Erik van Pienbroek
    g_return_val_if_fail(glue != NULL, NULL);
1838 928a29fe Erik van Pienbroek
    g_return_val_if_fail(plugin_name != NULL, NULL);
1839 928a29fe Erik van Pienbroek
    g_return_val_if_fail(method != NULL, NULL);
1840 928a29fe Erik van Pienbroek
    g_return_val_if_fail(parameters != NULL, NULL);
1841 928a29fe Erik van Pienbroek

                
1842 3b46768f Erik van Pienbroek
    params_str = g_variant_print((GVariant*) parameters, TRUE);
1843 3b46768f Erik van Pienbroek

                
1844 3b46768f Erik van Pienbroek
    request_params = json_object_new_array();
1845 3b46768f Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) plugin_name));
1846 3b46768f Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) method));
1847 3b46768f Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_string((char*) params_str));
1848 3b46768f Erik van Pienbroek
    request = create_new_json_request("nntpgrab_plugins_call_plugin_method", request_params);
1849 3b46768f Erik van Pienbroek

                
1850 3b46768f Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, errmsg))) {
1851 3b46768f Erik van Pienbroek
        json_object_put(request);
1852 3b46768f Erik van Pienbroek
        g_free(params_str);
1853 3b46768f Erik van Pienbroek
        return NULL;
1854 3b46768f Erik van Pienbroek
    }
1855 3b46768f Erik van Pienbroek

                
1856 3b46768f Erik van Pienbroek
    ret = g_variant_parse(NULL, json_object_get_string(response_result), NULL, NULL, &error);
1857 3b46768f Erik van Pienbroek
    if (!ret) {
1858 3b46768f Erik van Pienbroek
        if (errmsg) {
1859 3b46768f Erik van Pienbroek
            *errmsg = g_strdup(error->message);
1860 3b46768f Erik van Pienbroek
        }
1861 3b46768f Erik van Pienbroek
        g_error_free(error);
1862 3b46768f Erik van Pienbroek
    }
1863 3b46768f Erik van Pienbroek

                
1864 3b46768f Erik van Pienbroek
    json_object_put(request);
1865 3b46768f Erik van Pienbroek
    json_object_put(response_result);
1866 3b46768f Erik van Pienbroek

                
1867 3b46768f Erik van Pienbroek
    g_free(params_str);
1868 3b46768f Erik van Pienbroek

                
1869 3b46768f Erik van Pienbroek
    return (NGVariant*) ret;
1870 3b46768f Erik van Pienbroek
}
1871 3b46768f Erik van Pienbroek

                
1872 119ed779 Erik van Pienbroek
void
1873 119ed779 Erik van Pienbroek
nntpgrab_glue_internal_set_emit_log_messages(NntpgrabGlue *obj, ngboolean val)
1874 119ed779 Erik van Pienbroek
{
1875 119ed779 Erik van Pienbroek
    NntpgrabGlue *glue = NNTPGRAB_GLUE(obj);
1876 119ed779 Erik van Pienbroek
    struct json_object *request;
1877 119ed779 Erik van Pienbroek
    struct json_object *request_params;
1878 119ed779 Erik van Pienbroek
    struct json_object *response_result;
1879 119ed779 Erik van Pienbroek
    char *errmsg = NULL;
1880 119ed779 Erik van Pienbroek

                
1881 119ed779 Erik van Pienbroek
    request_params = json_object_new_array();
1882 119ed779 Erik van Pienbroek
    json_object_array_add(request_params, json_object_new_boolean(val));
1883 119ed779 Erik van Pienbroek
    request = create_new_json_request("nntpgrab_set_emit_log_messages", request_params);
1884 119ed779 Erik van Pienbroek

                
1885 119ed779 Erik van Pienbroek
    if (!(response_result = send_request_and_wait_for_response(glue, request, &errmsg))) {
1886 119ed779 Erik van Pienbroek
        g_print(__FILE__ ":%i nntpgrab_set_emit_log_messages FAILED: %s\n", __LINE__, errmsg);
1887 119ed779 Erik van Pienbroek
        g_free(errmsg);
1888 119ed779 Erik van Pienbroek
        json_object_put(request);
1889 119ed779 Erik van Pienbroek
        return;
1890 119ed779 Erik van Pienbroek
    }
1891 119ed779 Erik van Pienbroek

                
1892 119ed779 Erik van Pienbroek
    json_object_put(response_result);
1893 119ed779 Erik van Pienbroek
    json_object_put(request);
1894 119ed779 Erik van Pienbroek
}