Irreco for N900 (Maemo 5) update. Push for 0.8.* changes.
[irreco.git] / irreco / src / webdb / irreco_webdb_client.c
blobbbebadf81cb6cdf63b798b225126bf279cad45e7
1 /*
2 * irreco - Ir Remote Control
3 * Copyright (C) 2007,2008 Arto Karppinen (arto.karppinen@iki.fi),
4 * Joni Kokko (t5kojo01@students.oamk.fi),
5 * Sami Mäki (kasmra@xob.kapsi.fi),
6 * Harri Vattulainen (t5vaha01@students.oamk.fi)
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 #include "irreco_webdb_client.h"
24 #include "config.h"
26 /**
27 * @addtogroup IrrecoWebdbClient
28 * @ingroup IrrecoWebdb
30 * Irreco Web Database API implementation. These functions connect to the
31 * IrrecoWebdbClient trough XML-RPC connection, pass arguments, and decode
32 * return values.
34 * @{
37 /**
38 * @file
39 * Source file of @ref IrrecoWebdbClient.
42 static const char *const value_type[] = {
43 "BAD",
44 "int",
45 "boolean",
46 "string",
47 "double",
48 "datetime",
49 "base64",
50 "struct",
51 "array"
54 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
55 /* Prototypes */
56 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
58 static void irreco_webdb_client_reset_env();
59 static gboolean do_xmlrpc (IrrecoWebdbClient *self, const char *method, GValue *retval, ...);
61 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
62 /* Construction & Destruction */
63 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
65 /**
66 * @name Construction & Destruction
67 * @{
70 /**
71 * Create new IrrecoWebdbClient Object
73 IrrecoWebdbClient *irreco_webdb_client_new()
75 IrrecoWebdbClient *self;
76 IRRECO_ENTER
78 self = g_slice_new0(IrrecoWebdbClient);
80 self->error_msg = g_string_new(NULL);
82 IRRECO_RETURN_PTR(self);
85 void irreco_webdb_client_free(IrrecoWebdbClient *self)
87 IRRECO_ENTER
89 g_assert(self != NULL);
91 /* Free self->error_msg resource */
92 g_string_free(self->error_msg, TRUE);
93 self->error_msg = NULL;
95 g_slice_free(IrrecoWebdbClient, self);
96 self = NULL;
98 IRRECO_RETURN
101 /** @} */
103 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
104 /* Private Functions */
105 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
108 * @name Private Functions
109 * @{
113 * Release of RPC results and errors.
115 static void irreco_webdb_client_reset_env(IrrecoWebdbClient *self)
117 IRRECO_ENTER
119 self->error_msg = g_string_erase(self->error_msg, 0, -1);
121 IRRECO_RETURN
124 static gboolean check_xmlrpc (GValue *value, GType type, ...)
126 va_list args;
128 IRRECO_ENTER
130 if (!G_VALUE_HOLDS (value, type)) {
131 g_printf ( "ERROR: could not parse response\n");
132 g_value_unset (value);
133 IRRECO_RETURN_BOOL(FALSE);
136 va_start (args, type);
137 SOUP_VALUE_GETV (value, type, args);
138 va_end (args);
140 IRRECO_RETURN_BOOL(TRUE);
144 SoupSession *soup_session_new (GType type, ...)
146 va_list args;
147 const char *propname;
148 SoupSession *session;
150 IRRECO_ENTER
152 va_start (args, type);
153 propname = va_arg (args, const char *);
154 session = (SoupSession *)g_object_new_valist (type, propname, args);
155 va_end (args);
157 IRRECO_RETURN_PTR(session);
160 void soup_session_abort_unref (SoupSession *session)
162 IRRECO_ENTER
164 g_object_add_weak_pointer (G_OBJECT (session), (gpointer *)&session);
166 soup_session_abort (session);
167 g_object_unref (session);
169 if (session) {
170 g_printf ("leaked SoupSession!\n");
171 g_object_remove_weak_pointer (G_OBJECT (session), (gpointer *)&session);
174 IRRECO_RETURN
178 * Do the xmlrpc call
180 * @param method Methodname
181 * @param retval Returned value
182 * @param ... Parameters to send
184 static gboolean do_xmlrpc (IrrecoWebdbClient *self, const char *method, GValue *retval, ...)
186 SoupMessage *msg;
187 va_list args;
188 GValueArray *params;
189 GError *err = NULL;
190 char *body;
191 static SoupSession *session;
192 SoupLogger *souplogger;
194 IRRECO_ENTER
196 session = soup_session_new (SOUP_TYPE_SESSION_SYNC, NULL);
198 souplogger = soup_logger_new(SOUP_LOGGER_LOG_BODY, -1);
199 soup_logger_attach(souplogger, session);
201 va_start (args, retval);
202 params = soup_value_array_from_args (args);
203 va_end (args);
205 /*IRRECO_DEBUG("metodi: %s, param num: %d\n", method, params->n_values);*/
206 body = soup_xmlrpc_build_method_call (method, params->values,
207 params->n_values);
208 /*IRRECO_DEBUG("body: %s\n", body);*/
209 g_value_array_free (params);
211 if (!body)
212 IRRECO_RETURN_BOOL(FALSE);
214 msg = soup_message_new ("POST", IRRECO_WEBDB_URL);
216 soup_message_set_request (msg, "text/xml", SOUP_MEMORY_TAKE,
217 body, strlen (body));
219 soup_message_headers_append(msg->request_headers, "User-Agent", PACKAGE_NAME "/" VERSION);
221 soup_session_send_message (session, msg);
223 soup_session_abort_unref (session);
225 if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
226 g_printf ( "ERROR: %d %s\n", msg->status_code,
227 msg->reason_phrase);
228 g_string_printf(self->error_msg, "%s", msg->reason_phrase);
229 g_object_unref (msg);
230 IRRECO_RETURN_BOOL(FALSE);
233 if (!soup_xmlrpc_parse_method_response (msg->response_body->data,
234 msg->response_body->length, retval, &err)) {
235 if (err) {
236 g_print("FAULT:\ncode: %d\nmessage: %s\n", err->code, err->message);
237 g_string_printf(self->error_msg, "%s", err->message);
238 g_error_free (err);
239 g_object_unref (msg);
240 IRRECO_RETURN_BOOL(FALSE);
241 } else {
242 g_printf ("ERROR: could not parse response\n");
243 g_string_printf(self->error_msg, "ERROR: could not parse response");
244 g_object_unref (msg);
245 IRRECO_RETURN_BOOL(FALSE);
248 g_object_unref (msg);
250 IRRECO_RETURN_BOOL(TRUE);
254 * Get error message.
256 * @param msg GString object to recieve the error message.
258 void irreco_webdb_client_get_error_msg(IrrecoWebdbClient *self, GString *msg)
260 IRRECO_ENTER
262 /* Clear and set msg */
263 msg = g_string_erase(msg, 0, -1);
264 msg = g_string_insert(msg, 0, self->error_msg->str);
266 IRRECO_RETURN
269 /**@} */
272 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
273 /* Functions */
274 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
277 * @name Public Functions
278 * @{
282 * Ask WebDB to sum two numbers.
284 * @param num_a First number.
285 * @param num_b Second number.
286 * @param sum Variable to receive the result.
287 * @return TRUE on successfull XML-RPC call, FALSE otherwise.
289 gboolean irreco_webdb_client_sum(IrrecoWebdbClient *self,
290 gint num_a,
291 gint num_b,
292 glong *sum)
294 GValue retval;
296 IRRECO_ENTER
298 irreco_webdb_client_reset_env(self);
300 if(do_xmlrpc (self, "sum", &retval, G_TYPE_INT, num_a, G_TYPE_INT, num_b, G_TYPE_INVALID)) {
301 if(check_xmlrpc (&retval, G_TYPE_INT, sum)) {
302 IRRECO_RETURN_BOOL(TRUE);
303 } else {
304 IRRECO_RETURN_BOOL(FALSE);
306 } else {
307 IRRECO_RETURN_BOOL(FALSE);
311 gboolean irreco_webdb_client_upload_configuration(IrrecoWebdbClient *self,
312 const gchar *backend,
313 const gchar *category,
314 const gchar *file_hash,
315 const gchar *file_name,
316 const gchar *manufacturer,
317 const gchar *model,
318 const gchar *password,
319 const gchar *user,
320 const gchar *data)
322 GValue retval;
323 gchar *msg;
325 IRRECO_ENTER
327 irreco_webdb_client_reset_env(self);
329 if(do_xmlrpc (self, "uploadConfiguration", &retval, G_TYPE_STRING, backend, G_TYPE_STRING, category,
330 G_TYPE_STRING, manufacturer, G_TYPE_STRING, model, G_TYPE_STRING, user, G_TYPE_STRING, password,
331 G_TYPE_STRING, file_hash, G_TYPE_STRING, file_name, G_TYPE_STRING, data, G_TYPE_INVALID)) {
332 if(check_xmlrpc (&retval, G_TYPE_STRING, &msg)) {
333 IRRECO_RETURN_BOOL(TRUE);
334 } else {
335 IRRECO_RETURN_BOOL(FALSE);
337 } else {
338 IRRECO_RETURN_BOOL(FALSE);
343 gboolean irreco_webdb_client_get_categories(IrrecoWebdbClient *self,
344 IrrecoStringTable **category_list)
346 gint i = 0;
347 GValue retval;
348 GValueArray *array;
350 IRRECO_ENTER
352 irreco_webdb_client_reset_env(self);
353 *category_list = irreco_string_table_new(NULL, NULL);
355 if(do_xmlrpc (self, "getCategories", &retval, G_TYPE_INVALID)) {
356 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
357 for(i = 0; i < array->n_values; i++) {
358 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
359 g_value_array_get_nth(array, i)));
360 irreco_string_table_add(*category_list,
361 g_value_get_string(
362 g_value_array_get_nth(array, i)),
363 NULL);
365 IRRECO_RETURN_BOOL(TRUE);
366 } else {
367 IRRECO_RETURN_BOOL(FALSE);
369 } else {
370 IRRECO_RETURN_BOOL(FALSE);
374 gboolean irreco_webdb_client_get_all_categories(IrrecoWebdbClient *self,
375 IrrecoStringTable **category_list)
377 gint i = 0;
378 GValue retval;
379 GValueArray *array;
381 IRRECO_ENTER
383 irreco_webdb_client_reset_env(self);
384 *category_list = irreco_string_table_new(NULL, NULL);
386 if(do_xmlrpc (self, "getAllCategories", &retval, G_TYPE_INVALID)) {
387 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
388 for(i = 0; i < array->n_values; i++) {
389 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
390 g_value_array_get_nth(array, i)));
391 irreco_string_table_add(*category_list,
392 g_value_get_string(
393 g_value_array_get_nth(array, i)),
394 NULL);
396 IRRECO_RETURN_BOOL(TRUE);
397 } else {
398 IRRECO_RETURN_BOOL(FALSE);
400 } else {
401 IRRECO_RETURN_BOOL(FALSE);
404 gboolean irreco_webdb_client_get_manufacturers(IrrecoWebdbClient *self,
405 const gchar *category,
406 IrrecoStringTable **manufacturer_list)
408 gint i = 0;
409 GValue retval;
410 GValueArray *array;
412 IRRECO_ENTER
414 irreco_webdb_client_reset_env(self);
415 *manufacturer_list = irreco_string_table_new(NULL, NULL);
417 if(do_xmlrpc (self, "getManufacturers", &retval, G_TYPE_STRING, category, G_TYPE_INVALID)) {
418 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
419 for(i = 0; i < array->n_values; i++) {
420 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
421 g_value_array_get_nth(array, i)));
422 irreco_string_table_add(*manufacturer_list,
423 g_value_get_string(
424 g_value_array_get_nth(array, i)),
425 NULL);
427 IRRECO_RETURN_BOOL(TRUE);
428 } else {
429 IRRECO_RETURN_BOOL(FALSE);
431 } else {
432 IRRECO_RETURN_BOOL(FALSE);
436 gboolean irreco_webdb_client_get_all_manufacturers(IrrecoWebdbClient *self,
437 IrrecoStringTable **manufacturer_list)
439 gint i = 0;
440 GValue retval;
441 GValueArray *array;
443 IRRECO_ENTER
445 irreco_webdb_client_reset_env(self);
446 *manufacturer_list = irreco_string_table_new(NULL, NULL);
448 if(do_xmlrpc (self, "getAllManufacturers", &retval, G_TYPE_INVALID)) {
449 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
450 for(i = 0; i < array->n_values; i++) {
451 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
452 g_value_array_get_nth(array, i)));
453 irreco_string_table_add(*manufacturer_list,
454 g_value_get_string(
455 g_value_array_get_nth(array, i)),
456 NULL);
458 IRRECO_RETURN_BOOL(TRUE);
459 } else {
460 IRRECO_RETURN_BOOL(FALSE);
462 } else {
463 IRRECO_RETURN_BOOL(FALSE);
467 gboolean irreco_webdb_client_get_models(IrrecoWebdbClient *self,
468 const gchar *category,
469 const gchar *manufacturer,
470 IrrecoStringTable **model_list)
472 gint i = 0;
473 GValue retval;
474 GValueArray *array;
476 IRRECO_ENTER
478 irreco_webdb_client_reset_env(self);
479 *model_list = irreco_string_table_new(NULL, NULL);
481 if(do_xmlrpc (self, "getModels", &retval, G_TYPE_STRING, category, G_TYPE_STRING, manufacturer, G_TYPE_INVALID)) {
482 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
483 for(i = 0; i < array->n_values; i++) {
484 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
485 g_value_array_get_nth(array, i)));
486 irreco_string_table_add(*model_list,
487 g_value_get_string(
488 g_value_array_get_nth(array, i)),
489 NULL);
491 IRRECO_RETURN_BOOL(TRUE);
492 } else {
493 IRRECO_RETURN_BOOL(FALSE);
495 } else {
496 IRRECO_RETURN_BOOL(FALSE);
500 gboolean irreco_webdb_client_get_configs(IrrecoWebdbClient *self,
501 const gchar *manufacturer,
502 const gchar *model,
503 IrrecoStringTable **config_list)
505 gint i = 0;
506 GValue retval;
507 GValueArray *array;
509 IRRECO_ENTER
511 irreco_webdb_client_reset_env(self);
512 *config_list = irreco_string_table_new(NULL, NULL);
514 if(do_xmlrpc (self, "getConfigurations", &retval, G_TYPE_STRING, manufacturer,
515 G_TYPE_STRING, model, G_TYPE_INVALID)) {
516 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
517 for(i = 0; i < array->n_values; i++) {
518 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
519 g_value_array_get_nth(array, i)));
520 irreco_string_table_add(*config_list,
521 g_value_get_string(
522 g_value_array_get_nth(array, i)),
523 NULL);
525 IRRECO_RETURN_BOOL(TRUE);
526 } else {
527 IRRECO_RETURN_BOOL(FALSE);
529 } else {
530 IRRECO_RETURN_BOOL(FALSE);
535 gboolean irreco_webdb_client_get_configuration(IrrecoWebdbClient *self,
536 gint id,
537 IrrecoWebdbConf **configuration)
539 GValue retval;
540 const gchar *user = NULL;
541 const gchar *backend;
542 const gchar *category;
543 const gchar *manufacturer;
544 const gchar *model;
545 const gchar *file_hash;
546 const gchar *file_name;
547 const gchar *uploaded;
548 const gchar *download_count;
549 GHashTable *htable;
551 IRRECO_ENTER
553 irreco_webdb_client_reset_env(self);
555 if(do_xmlrpc (self, "getConfigurationById", &retval, G_TYPE_INT, id, G_TYPE_INVALID)) {
556 if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) {
557 GValue *tmp;
558 tmp = g_hash_table_lookup (htable, "user");
559 user = g_value_get_string(tmp);
560 tmp = g_hash_table_lookup (htable, "backend");
561 backend = g_value_get_string(tmp);
562 tmp = g_hash_table_lookup (htable, "category");
563 category = g_value_get_string(tmp);
564 tmp = g_hash_table_lookup (htable, "manufacturer");
565 manufacturer = g_value_get_string(tmp);
566 tmp = g_hash_table_lookup (htable, "model");
567 model = g_value_get_string(tmp);
568 tmp = g_hash_table_lookup (htable, "file_hash");
569 file_hash = g_value_get_string(tmp);
570 tmp = g_hash_table_lookup (htable, "file_name");
571 file_name = g_value_get_string(tmp);
572 tmp = g_hash_table_lookup (htable, "uploaded");
573 uploaded = g_value_get_string(tmp);
574 tmp = g_hash_table_lookup (htable, "download_count");
575 download_count = g_value_get_string(tmp);
577 IRRECO_DEBUG("Configuration: %d %s %s %s %s %s %s %s %s %s\n",
578 id, user, backend, category, manufacturer,
579 model, file_hash, file_name, uploaded, download_count);
580 irreco_webdb_conf_set(*configuration, id, user, backend,
581 category, manufacturer, model,
582 file_hash, file_name, uploaded,
583 download_count);
584 IRRECO_RETURN_BOOL(TRUE);
585 } else {
586 IRRECO_RETURN_BOOL(FALSE);
588 } else {
589 IRRECO_RETURN_BOOL(FALSE);
593 gint irreco_webdb_client_get_config_id_by_file_hash_and_file_name(
594 IrrecoWebdbClient *self,
595 const gchar *file_hash,
596 const gchar *file_name)
598 GValue retval;
599 gint msg;
601 IRRECO_ENTER
603 irreco_webdb_client_reset_env(self);
605 if(do_xmlrpc (self, "getConfigIdByFilehashAndFilename", &retval, G_TYPE_STRING, file_hash,
606 G_TYPE_STRING, file_name, G_TYPE_INVALID)) {
607 if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) {
608 IRRECO_RETURN_INT(msg);
609 } else {
610 IRRECO_RETURN_INT(0);
612 } else {
613 IRRECO_RETURN_INT(0);
617 gboolean irreco_webdb_client_get_file(IrrecoWebdbClient *self,
618 const gchar *file_hash,
619 const gchar *file_name,
620 GString **file_data)
622 GValue retval;
623 GHashTable *htable;
624 const gchar *ret;
626 IRRECO_ENTER
628 irreco_webdb_client_reset_env(self);
630 if(do_xmlrpc (self, "getFile", &retval, G_TYPE_STRING, file_hash, G_TYPE_STRING, file_name, G_TYPE_INVALID)) {
631 if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) {
632 GValue *tmp;
633 tmp = g_hash_table_lookup (htable, "data");
634 ret = g_value_get_string(tmp);
635 *file_data = g_string_new(ret);
636 g_hash_table_destroy (htable);
637 IRRECO_RETURN_BOOL(TRUE)
638 } else {
639 IRRECO_RETURN_BOOL(FALSE);
641 } else {
642 IRRECO_RETURN_BOOL(FALSE);
647 gboolean irreco_webdb_client_get_user_exists(IrrecoWebdbClient *self,
648 const gchar *name,
649 gboolean *user_exists)
651 GValue retval;
652 gboolean tmp;
654 IRRECO_ENTER
656 irreco_webdb_client_reset_env(self);
658 if(do_xmlrpc (self, "getUserExists", &retval, G_TYPE_STRING, name, G_TYPE_INVALID)) {
659 if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &tmp)) {
660 *user_exists = tmp;
661 IRRECO_RETURN_BOOL(TRUE);
662 } else {
663 IRRECO_RETURN_BOOL(FALSE);
665 } else {
666 IRRECO_RETURN_BOOL(FALSE);
670 gint irreco_webdb_client_get_max_image_size(IrrecoWebdbClient *self)
672 GValue retval;
673 gint max_image_size;
675 IRRECO_ENTER
677 irreco_webdb_client_reset_env(self);
679 if(do_xmlrpc (self, "getMaxImageSize", &retval, G_TYPE_INVALID)) {
680 if(check_xmlrpc (&retval, G_TYPE_INT, &max_image_size)) {
681 IRRECO_RETURN_INT(max_image_size);
682 } else {
683 IRRECO_RETURN_INT(0);
685 } else {
686 IRRECO_RETURN_INT(0);
690 gint irreco_webdb_client_create_theme(IrrecoWebdbClient *self,
691 const gchar *name,
692 const gchar *comment,
693 const gchar *preview_button,
694 const gchar *folder,
695 const gchar *user,
696 const gchar *password)
698 GValue retval;
699 gint msg;
701 IRRECO_ENTER
703 irreco_webdb_client_reset_env(self);
705 if(do_xmlrpc (self, "createNewTheme", &retval, G_TYPE_STRING, name, G_TYPE_STRING, comment,
706 G_TYPE_STRING, preview_button, G_TYPE_STRING, folder,
707 G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) {
708 if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) {
709 IRRECO_RETURN_INT(msg);
710 } else {
711 IRRECO_RETURN_INT(0);
713 } else {
714 IRRECO_RETURN_INT(0);
718 gboolean irreco_webdb_client_set_theme_downloadable(IrrecoWebdbClient *self,
719 gint id,
720 gboolean downloadable,
721 const gchar *user,
722 const gchar *password)
724 GValue retval;
725 gboolean msg;
727 IRRECO_ENTER
729 irreco_webdb_client_reset_env(self);
731 if(do_xmlrpc (self, "setThemeDownloadable", &retval, G_TYPE_INT, id,
732 G_TYPE_BOOLEAN, downloadable, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) {
733 if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) {
734 IRRECO_RETURN_BOOL(msg);
735 } else {
736 IRRECO_RETURN_BOOL(FALSE);
738 } else {
739 IRRECO_RETURN_BOOL(FALSE);
743 gboolean irreco_webdb_client_get_themes(IrrecoWebdbClient *self,
744 IrrecoStringTable **theme_list)
746 gint i = 0;
747 GValue retval;
748 GValueArray *array;
750 IRRECO_ENTER
752 irreco_webdb_client_reset_env(self);
753 *theme_list = irreco_string_table_new(NULL, NULL);
755 if(do_xmlrpc (self, "getThemes", &retval, G_TYPE_INVALID)) {
756 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
757 for(i = 0; i < array->n_values; i++) {
758 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
759 g_value_array_get_nth(array, i)));
760 /*g_print("value: %s\n", g_value_get_string(
761 g_value_array_get_nth(array, i)));*/
762 irreco_string_table_add(*theme_list,
763 g_value_get_string(
764 g_value_array_get_nth(array, i)),
765 NULL);
767 IRRECO_RETURN_BOOL(TRUE);
768 } else {
769 IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */
771 } else {
772 IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */
776 gboolean irreco_webdb_client_get_theme_by_id(IrrecoWebdbClient *self,
777 gint theme_id,
778 IrrecoWebdbTheme **theme)
780 GValue retval;
781 GHashTable *htable;
782 const gchar *name = NULL;
783 const gchar *user = NULL;
784 const gchar *comment = NULL;
785 const gchar *preview_button = NULL;
786 const gchar *folder = NULL;
787 const gchar *uploaded = NULL;
788 const gchar *modified = NULL;
789 const gchar *downloaded = NULL;
790 gint download_count;
792 IRRECO_ENTER
794 irreco_webdb_client_reset_env(self);
796 if(do_xmlrpc (self, "getThemeById", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) {
797 if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) {
798 GValue *tmp;
799 tmp = g_hash_table_lookup (htable, "name");
800 name = g_value_get_string(tmp);
801 tmp = g_hash_table_lookup (htable, "user");
802 user = g_value_get_string(tmp);
803 tmp = g_hash_table_lookup (htable, "comment");
804 comment = g_value_get_string(tmp);
805 tmp = g_hash_table_lookup (htable, "preview_button");
806 preview_button = g_value_get_string(tmp);
807 tmp = g_hash_table_lookup (htable, "folder");
808 folder = g_value_get_string(tmp);
809 tmp = g_hash_table_lookup (htable, "uploaded");
810 uploaded = g_value_get_string(tmp);
811 tmp = g_hash_table_lookup (htable, "modified");
812 modified = g_value_get_string(tmp);
813 tmp = g_hash_table_lookup (htable, "downloaded");
814 downloaded = g_value_get_string(tmp);
815 tmp = g_hash_table_lookup (htable, "download_count");
816 download_count = g_value_get_int(tmp);
817 tmp = g_hash_table_lookup (htable, "modified");
818 modified = g_value_get_string(tmp);
819 tmp = g_hash_table_lookup (htable, "downloaded");
820 downloaded = g_value_get_string(tmp);
821 tmp = g_hash_table_lookup (htable, "download_count");
822 download_count = g_value_get_int(tmp);
824 *theme = irreco_webdb_theme_new();
826 irreco_webdb_theme_set(*theme, theme_id, name, user, comment,
827 preview_button, NULL, folder, uploaded, modified,
828 downloaded, download_count);
830 irreco_webdb_client_get_theme_versions_by_name(self, name, &(*theme)->versions);
832 /* Get dates for versions */
833 if ((*theme)->versions != NULL)
835 IRRECO_STRING_TABLE_FOREACH_KEY((*theme)->versions, key)
836 gchar *date = irreco_webdb_client_get_theme_date_by_id(
837 self, atoi(key));
838 irreco_string_table_change_data ((*theme)->versions,
839 key, (gpointer) date);
840 IRRECO_STRING_TABLE_FOREACH_END
843 if (name != NULL) g_free((gchar*)name);
844 if (user != NULL) g_free((gchar*)user);
845 if (comment != NULL) g_free((gchar*)comment);
846 if (preview_button != NULL) g_free((gchar*)preview_button);
847 if (folder != NULL) g_free((gchar*)folder);
848 if (uploaded != NULL) g_free((gchar*)uploaded);
849 if (modified != NULL) g_free((gchar*)modified);
850 if (downloaded != NULL) g_free((gchar*)downloaded);
852 IRRECO_RETURN_BOOL(TRUE);
853 } else {
854 IRRECO_RETURN_BOOL(FALSE);
856 } else {
857 IRRECO_RETURN_BOOL(FALSE);
861 gboolean irreco_webdb_client_get_theme_versions_by_name(IrrecoWebdbClient *self,
862 const char *name,
863 IrrecoStringTable **theme_list)
865 gint i = 0;
866 GValue retval;
867 GValueArray *array;
869 IRRECO_ENTER
871 irreco_webdb_client_reset_env(self);
872 *theme_list = irreco_string_table_new(NULL, NULL);
874 if(do_xmlrpc (self, "getThemeVersionsByName", &retval, G_TYPE_STRING, name, G_TYPE_INVALID)) {
875 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
876 for(i = 0; i < array->n_values; i++) {
877 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
878 g_value_array_get_nth(array, i)));
879 /*g_print("value: %s\n", g_value_get_string(
880 g_value_array_get_nth(array, i)));*/
881 irreco_string_table_add(*theme_list,
882 g_value_get_string(
883 g_value_array_get_nth(array, i)),
884 NULL);
886 IRRECO_RETURN_BOOL(TRUE);
887 } else {
888 IRRECO_RETURN_BOOL(FALSE);
890 } else {
891 IRRECO_RETURN_BOOL(FALSE);
895 gchar *irreco_webdb_client_get_theme_date_by_id(IrrecoWebdbClient *self,
896 gint theme_id)
898 GValue retval;
899 gchar *date = NULL;
901 IRRECO_ENTER
903 irreco_webdb_client_reset_env(self);
905 if(do_xmlrpc (self, "getThemeDateById", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) {
906 g_print("tyyppinen: %s\n", G_VALUE_TYPE_NAME(&retval));
907 if(check_xmlrpc (&retval, G_TYPE_STRING, &date)) {
908 IRRECO_RETURN_PTR(date);
909 } else {
910 IRRECO_RETURN_PTR(date);
912 } else {
913 IRRECO_RETURN_PTR(date);
917 gint irreco_webdb_client_get_theme_id_by_name_and_date(IrrecoWebdbClient *self,
918 const gchar *name,
919 const gchar *date)
921 GValue retval;
922 gint msg;
924 IRRECO_ENTER
926 irreco_webdb_client_reset_env(self);
928 if(do_xmlrpc (self, "getThemeIdByNameAndDate", &retval, G_TYPE_STRING, name,
929 G_TYPE_STRING, date, G_TYPE_INVALID)) {
930 if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) {
931 IRRECO_RETURN_INT(msg);
932 } else {
933 IRRECO_RETURN_INT(0);
935 } else {
936 IRRECO_RETURN_INT(0);
940 gint irreco_webdb_client_add_bg_to_theme(IrrecoWebdbClient *self,
941 const gchar *name,
942 const gchar *image_hash,
943 const gchar *image_name,
944 const guchar *image,
945 gint image_len,
946 const gchar *folder,
947 gint theme_id,
948 const gchar *user,
949 const gchar *password)
951 GValue retval;
952 gint msg;
953 gchar *base64_image;
955 IRRECO_ENTER
957 irreco_webdb_client_reset_env(self);
959 base64_image = g_base64_encode(image, image_len);
961 if(do_xmlrpc (self, "addBgToTheme", &retval, G_TYPE_STRING, name, G_TYPE_STRING, image_hash,
962 G_TYPE_STRING, image_name, G_TYPE_STRING, base64_image, G_TYPE_STRING, folder,
963 G_TYPE_INT, theme_id, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) {
964 if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) {
965 IRRECO_RETURN_INT(msg);
966 } else {
967 IRRECO_RETURN_INT(0);
969 } else {
970 IRRECO_RETURN_INT(0);
974 gboolean irreco_webdb_client_get_backgrounds(IrrecoWebdbClient *self,
975 gint theme_id,
976 IrrecoStringTable **bg_list)
978 gint i = 0;
979 GValue retval;
980 GValueArray *array;
982 IRRECO_ENTER
984 irreco_webdb_client_reset_env(self);
985 *bg_list = irreco_string_table_new(NULL, NULL);
987 if(do_xmlrpc (self, "getBackgrounds", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) {
988 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
989 for(i = 0; i < array->n_values; i++) {
990 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
991 g_value_array_get_nth(array, i)));
992 /*g_print("value: %s\n", g_value_get_string(
993 g_value_array_get_nth(array, i)));*/
994 irreco_string_table_add(*bg_list,
995 g_strdup_printf("%d", g_value_get_int(
996 g_value_array_get_nth(array, i))),
997 NULL);
999 IRRECO_RETURN_BOOL(TRUE);
1000 } else {
1001 IRRECO_RETURN_BOOL(FALSE);
1003 } else {
1004 IRRECO_RETURN_BOOL(FALSE);
1009 gboolean irreco_webdb_client_get_bg_by_id(IrrecoWebdbClient *self,
1010 gint bg_id,
1011 const char *theme_bg_dir)
1013 GValue retval;
1014 GHashTable *htable;
1015 gchar *name = NULL;
1016 gchar *image_hash = NULL;
1017 gchar *image_name = NULL;
1018 gchar *image_data = NULL;
1019 gchar *folder = NULL;
1020 gchar *base64_image = NULL;
1021 GString *image_path = g_string_new(theme_bg_dir);
1022 GString *keyfile_path = g_string_new(theme_bg_dir);
1023 GKeyFile *keyfile = g_key_file_new();
1024 gsize base64_len;
1026 IRRECO_ENTER
1028 irreco_webdb_client_reset_env(self);
1030 if(do_xmlrpc (self, "getBgById", &retval, G_TYPE_INT, bg_id, G_TYPE_INVALID)) {
1031 if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) {
1032 GValue *tmp;
1033 tmp = g_hash_table_lookup (htable, "name");
1034 name = (gchar*) g_value_get_string(tmp);
1035 tmp = g_hash_table_lookup (htable, "image_hash");
1036 image_hash = (gchar*) g_value_get_string(tmp);
1037 tmp = g_hash_table_lookup (htable, "image_name");
1038 image_name = (gchar*) g_value_get_string(tmp);
1039 tmp = g_hash_table_lookup (htable, "image_data");
1040 base64_image = (gchar*) g_value_get_string(tmp);
1041 tmp = g_hash_table_lookup (htable, "folder");
1042 folder = (gchar*) g_value_get_string(tmp);
1044 /* Create Folder */
1045 g_string_append_printf(image_path, "/%s", folder);
1046 IRRECO_DEBUG("mkdir %s\n",image_path->str);
1047 g_mkdir(image_path->str, 0777);
1049 /* Save image to folder */
1050 image_data = (gchar*) g_base64_decode(base64_image, &base64_len);
1051 g_string_append_printf(image_path, "/%s", image_name);
1052 irreco_write_file(image_path->str, image_data, base64_len);
1054 /* Create keyfile and save it to folder*/
1055 irreco_gkeyfile_set_string(keyfile, "theme-bg" , "name", name);
1056 irreco_gkeyfile_set_string(keyfile, "theme-bg", "image", image_name);
1057 g_string_append_printf(keyfile_path, "/%s/bg.conf", folder);
1058 irreco_write_keyfile(keyfile, keyfile_path->str);
1060 if (name != NULL) g_free(name);
1061 if (image_hash != NULL) g_free(image_hash);
1062 if (image_name != NULL) g_free(image_name);
1063 if (image_data != NULL) g_free(image_data);
1064 if (base64_image != NULL) g_free(base64_image);
1065 if (folder != NULL) g_free(folder);
1067 g_key_file_free(keyfile);
1068 g_string_free(keyfile_path, TRUE);
1069 g_string_free(image_path, TRUE);
1070 IRRECO_RETURN_BOOL(TRUE);
1071 } else {
1072 g_key_file_free(keyfile);
1073 g_string_free(keyfile_path, TRUE);
1074 g_string_free(image_path, TRUE);
1075 IRRECO_RETURN_BOOL(FALSE);
1077 } else {
1078 g_key_file_free(keyfile);
1079 g_string_free(keyfile_path, TRUE);
1080 g_string_free(image_path, TRUE);
1081 IRRECO_RETURN_BOOL(FALSE);
1085 gint irreco_webdb_client_add_button_to_theme(IrrecoWebdbClient *self,
1086 const gchar *name,
1087 gboolean allow_text,
1088 const gchar *text_format_up,
1089 const gchar *text_format_down,
1090 gint text_padding,
1091 gfloat text_h_align,
1092 gfloat text_v_align,
1093 const gchar *image_up_hash,
1094 const gchar *image_up_name,
1095 const guchar *image_up,
1096 gint image_up_len,
1097 const gchar *image_down_hash,
1098 const gchar *image_down_name,
1099 const guchar *image_down,
1100 gint image_down_len,
1101 const gchar *folder,
1102 gint theme_id,
1103 const gchar *user,
1104 const gchar *password)
1106 GValue retval;
1107 gint msg;
1108 gchar *base64_image_up;
1109 gchar *base64_image_down;
1111 IRRECO_ENTER
1113 base64_image_up = g_base64_encode(image_up, image_up_len);
1114 base64_image_down = g_base64_encode(image_down, image_down_len);
1116 irreco_webdb_client_reset_env(self);
1118 if(do_xmlrpc (self, "addButtonToTheme", &retval, G_TYPE_STRING, name, G_TYPE_BOOLEAN, allow_text,
1119 G_TYPE_STRING, text_format_up, G_TYPE_STRING, text_format_down, G_TYPE_INT, text_padding,
1120 G_TYPE_DOUBLE, text_h_align, G_TYPE_DOUBLE, text_v_align, G_TYPE_STRING, image_up_hash,
1121 G_TYPE_STRING, image_up_name, G_TYPE_STRING, base64_image_up, G_TYPE_STRING, image_down_hash,
1122 G_TYPE_STRING, image_down_name, G_TYPE_STRING, base64_image_down, G_TYPE_STRING, folder,
1123 G_TYPE_INT, theme_id, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) {
1124 if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) {
1125 g_free(base64_image_up);
1126 g_free(base64_image_down);
1127 IRRECO_RETURN_INT(msg);
1128 } else {
1129 g_free(base64_image_up);
1130 g_free(base64_image_down);
1131 IRRECO_RETURN_INT(0);
1133 } else {
1134 g_free(base64_image_up);
1135 g_free(base64_image_down);
1136 IRRECO_RETURN_INT(0);
1140 gboolean irreco_webdb_client_get_buttons(IrrecoWebdbClient *self,
1141 gint theme_id,
1142 IrrecoStringTable **button_list)
1144 gint i = 0;
1145 GValue retval;
1146 gint msg;
1147 GValueArray *array;
1149 IRRECO_ENTER
1151 irreco_webdb_client_reset_env(self);
1152 *button_list = irreco_string_table_new(NULL, NULL);
1154 if(do_xmlrpc (self, "getButtons", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) {
1155 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1156 for(i = 0; i < array->n_values; i++) {
1157 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1158 g_value_array_get_nth(array, i)));
1159 /*g_print("value: %s\n", g_value_get_string(
1160 g_value_array_get_nth(array, i)));*/
1161 irreco_string_table_add(*button_list,
1162 g_strdup_printf("%d", g_value_get_int(
1163 g_value_array_get_nth(array, i))),
1164 NULL);
1166 IRRECO_RETURN_INT(msg);
1167 } else {
1168 IRRECO_RETURN_INT(0);
1170 } else {
1171 IRRECO_RETURN_INT(0);
1176 gboolean irreco_webdb_client_get_button_by_id(IrrecoWebdbClient *self,
1177 gint button_id,
1178 const char *theme_button_dir)
1180 GValue retval;
1181 GHashTable *htable;
1182 gchar *name = NULL;
1183 gboolean allow_text = FALSE;
1184 gchar *text_format_up = NULL;
1185 gchar *text_format_down = NULL;
1186 glong text_padding;
1187 gdouble text_h_align;
1188 gdouble text_v_align;
1189 gchar *image_up_hash = NULL;
1190 gchar *image_up_name = NULL;
1191 gchar *image_up = NULL;
1192 gchar *base64_image_up = NULL;
1193 gchar *image_down_hash = NULL;
1194 gchar *image_down_name = NULL;
1195 gchar *image_down = NULL;
1196 gchar *base64_image_down = NULL;
1197 gchar *folder = NULL;
1198 gchar *image_down_hash_tmp = NULL;
1199 GString *file_path = g_string_new("");
1200 GKeyFile *keyfile = g_key_file_new();
1201 gsize image_down_len;
1202 gsize image_up_len;
1204 IRRECO_ENTER
1206 irreco_webdb_client_reset_env(self);
1208 if(do_xmlrpc (self, "getButtonById", &retval, G_TYPE_INT, button_id, G_TYPE_INVALID)) {
1209 if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) {
1210 GValue *tmp;
1211 tmp = g_hash_table_lookup (htable, "name");
1212 name = (gchar*) g_value_get_string(tmp);
1213 tmp = g_hash_table_lookup (htable, "allow_text");
1214 allow_text = g_value_get_boolean(tmp);
1215 tmp = g_hash_table_lookup (htable, "text_format_up");
1216 text_format_up = (gchar*) g_value_get_string(tmp);
1217 tmp = g_hash_table_lookup (htable, "text_format_down");
1218 text_format_down = (gchar*) g_value_get_string(tmp);
1219 tmp = g_hash_table_lookup (htable, "text_padding");
1220 text_padding = g_value_get_int(tmp);
1221 tmp = g_hash_table_lookup (htable, "text_h_align");
1222 text_h_align = g_value_get_double(tmp);
1223 tmp = g_hash_table_lookup (htable, "text_v_align");
1224 text_v_align = g_value_get_double(tmp);
1225 tmp = g_hash_table_lookup (htable, "image_up_hash");
1226 image_up_hash = (gchar*) g_value_get_string(tmp);
1227 tmp = g_hash_table_lookup (htable, "image_up_name");
1228 image_up_name = (gchar*) g_value_get_string(tmp);
1229 tmp = g_hash_table_lookup (htable, "image_up");
1230 base64_image_up = (gchar*) g_value_get_string(tmp);
1231 tmp = g_hash_table_lookup (htable, "image_down_hash");
1232 image_down_hash = (gchar*) g_value_get_string(tmp);
1233 tmp = g_hash_table_lookup (htable, "image_down_name");
1234 image_down_name = (gchar*) g_value_get_string(tmp);
1235 tmp = g_hash_table_lookup (htable, "image_down");
1236 base64_image_down = (gchar*) g_value_get_string(tmp);
1237 tmp = g_hash_table_lookup (htable, "folder");
1238 folder = (gchar*) g_value_get_string(tmp);
1240 /* Create Folder */
1241 g_string_printf(file_path, "%s/%s", theme_button_dir, folder);
1242 IRRECO_DEBUG("mkdir %s\n",file_path->str);
1243 g_mkdir(file_path->str, 0777);
1245 /* Save image_up to folder */
1246 g_string_printf(file_path, "%s/%s/%s", theme_button_dir, folder,
1247 image_up_name);
1248 image_up = (gchar*) g_base64_decode(base64_image_up, &image_up_len);
1249 irreco_write_file(file_path->str, image_up, image_up_len);
1251 /* Save image_down to folder */
1252 g_string_printf(file_path, "%s/%s/%s", theme_button_dir, folder,
1253 image_down_name);
1255 /*Check image hash data*/
1256 image_down = (gchar*) g_base64_decode(base64_image_down,
1257 &image_down_len);
1258 irreco_write_file(file_path->str, image_down, image_down_len);
1259 image_down_hash_tmp = g_compute_checksum_for_string(G_CHECKSUM_SHA1,
1260 image_down, image_down_len);
1262 /* Create keyfile and save it to folder*/
1263 irreco_gkeyfile_set_string(keyfile, "theme-button" , "name", name);
1265 if (allow_text) {
1266 irreco_gkeyfile_set_string(keyfile, "theme-button",
1267 "allow-text", "true");
1268 } else {
1269 irreco_gkeyfile_set_string(keyfile, "theme-button",
1270 "allow-text", "false");
1273 irreco_gkeyfile_set_string(keyfile, "theme-button",
1274 "up", image_up_name);
1276 irreco_gkeyfile_set_string(keyfile, "theme-button",
1277 "down", image_down_name);
1279 if (text_format_up != NULL && strlen(text_format_up) > 0) {
1280 irreco_gkeyfile_set_string(keyfile, "theme-button",
1281 "text-format-up", text_format_up);
1284 if (text_format_down != NULL && strlen(text_format_down) > 0) {
1285 irreco_gkeyfile_set_string(keyfile, "theme-button",
1286 "text-format-down", text_format_down);
1289 irreco_gkeyfile_set_glong(keyfile, "theme-button",
1290 "text-padding", (glong)text_padding);
1292 irreco_gkeyfile_set_gfloat(keyfile, "theme-button",
1293 "text-h-align", (gfloat) text_h_align);
1295 irreco_gkeyfile_set_gfloat(keyfile, "theme-button",
1296 "text-v-align", (gfloat) text_v_align);
1298 g_string_printf(file_path, "%s/%s/button.conf",
1299 theme_button_dir, folder);
1300 irreco_write_keyfile(keyfile, file_path->str);
1302 if (name != NULL) g_free(name);
1303 if (text_format_up != NULL) g_free(text_format_up);
1304 if (text_format_down != NULL) g_free(text_format_down);
1305 if (image_up_hash != NULL) g_free(image_up_hash);
1306 if (image_up_name != NULL) g_free(image_up_name);
1307 if (image_up != NULL) g_free(image_up);
1308 if (base64_image_up != NULL) g_free(base64_image_up);
1309 if (image_down_hash != NULL) g_free(image_down_hash);
1310 if (image_down_name != NULL) g_free(image_down_name);
1311 if (image_down != NULL) g_free(image_down);
1312 if (image_down_hash_tmp != NULL) g_free(image_down_hash_tmp);
1313 if (base64_image_down != NULL) g_free(base64_image_down);
1314 if (folder != NULL) g_free(folder);
1316 g_key_file_free(keyfile);
1317 g_string_free(file_path, TRUE);
1319 IRRECO_RETURN_BOOL(TRUE);
1320 } else {
1321 if (name != NULL) g_free(name);
1322 if (text_format_up != NULL) g_free(text_format_up);
1323 if (text_format_down != NULL) g_free(text_format_down);
1324 if (image_up_hash != NULL) g_free(image_up_hash);
1325 if (image_up_name != NULL) g_free(image_up_name);
1326 if (image_up != NULL) g_free(image_up);
1327 if (base64_image_up != NULL) g_free(base64_image_up);
1328 if (image_down_hash != NULL) g_free(image_down_hash);
1329 if (image_down_name != NULL) g_free(image_down_name);
1330 if (image_down != NULL) g_free(image_down);
1331 if (image_down_hash_tmp != NULL) g_free(image_down_hash_tmp);
1332 if (base64_image_down != NULL) g_free(base64_image_down);
1333 if (folder != NULL) g_free(folder);
1335 g_key_file_free(keyfile);
1336 g_string_free(file_path, TRUE);
1337 IRRECO_RETURN_BOOL(FALSE);
1339 } else {
1340 IRRECO_RETURN_BOOL(FALSE);
1344 gboolean irreco_webdb_client_get_preview_button(IrrecoWebdbClient *self,
1345 gint theme_id,
1346 GdkPixbuf **preview_button)
1348 GValue retval;
1349 gchar *base64_data = NULL;
1350 guchar *data;
1351 gsize len;
1352 GdkPixbufLoader *pl;
1353 GError *error = NULL;
1355 IRRECO_ENTER
1357 irreco_webdb_client_reset_env(self);
1359 if(do_xmlrpc (self, "getPreviewButton", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) {
1360 if(check_xmlrpc (&retval, G_TYPE_STRING, &base64_data)) {
1361 data = g_base64_decode(base64_data, &len);
1362 pl = gdk_pixbuf_loader_new();
1363 gdk_pixbuf_loader_write(pl, data, len, &error);
1365 if(error != NULL)
1367 /*g_string_printf(self->error_msg, "ERROR: %s", error->message);*/
1368 IRRECO_DEBUG("%s\n", error->message);
1369 if (base64_data != NULL) g_free(base64_data);
1370 IRRECO_RETURN_BOOL(FALSE);
1373 gdk_pixbuf_loader_close(pl, NULL);
1374 *preview_button = gdk_pixbuf_loader_get_pixbuf(pl);
1376 if (base64_data != NULL) g_free(base64_data);
1378 IRRECO_RETURN_BOOL(TRUE);
1379 } else {
1380 IRRECO_RETURN_BOOL(FALSE);
1382 } else {
1383 IRRECO_RETURN_BOOL(FALSE);
1387 gboolean irreco_webdb_client_add_user(IrrecoWebdbClient *self,
1388 const gchar *name,
1389 const gchar *email,
1390 const gchar *passwd)
1392 GValue retval;
1393 gboolean msg;
1395 IRRECO_ENTER
1397 irreco_webdb_client_reset_env(self);
1399 if(do_xmlrpc (self, "addUser", &retval, G_TYPE_STRING, name, G_TYPE_STRING, email,
1400 G_TYPE_STRING, passwd, G_TYPE_INVALID)) {
1401 if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) {
1402 IRRECO_RETURN_BOOL(msg);
1403 } else {
1404 IRRECO_RETURN_BOOL(FALSE);
1406 } else {
1407 IRRECO_RETURN_BOOL(FALSE);
1412 * Login user to WebDB.
1415 gboolean irreco_webdb_client_login(IrrecoWebdbClient *self,
1416 const gchar *user,
1417 const gchar *password)
1419 GValue retval;
1420 gboolean msg;
1422 IRRECO_ENTER
1424 irreco_webdb_client_reset_env(self);
1426 if(do_xmlrpc (self, "loginToDB", &retval, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) {
1427 if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) {
1428 IRRECO_RETURN_BOOL(msg);
1429 } else {
1430 IRRECO_RETURN_BOOL(FALSE);
1432 } else {
1433 IRRECO_RETURN_BOOL(FALSE);
1437 gint irreco_webdb_client_create_new_remote(IrrecoWebdbClient *self,
1438 const gchar *comment,
1439 const gchar *category,
1440 const gchar *manufacturer,
1441 const gchar *model,
1442 const gchar *file_name,
1443 const gchar *file_data,
1444 const gchar *user,
1445 const gchar *password)
1447 GValue retval;
1448 gint msg;
1449 gchar *file_hash;
1451 IRRECO_ENTER
1453 irreco_webdb_client_reset_env(self);
1454 file_hash = g_compute_checksum_for_string(G_CHECKSUM_SHA1, file_data, -1);
1456 if(do_xmlrpc (self, "createNewRemote", &retval, G_TYPE_STRING, comment, G_TYPE_STRING, category,
1457 G_TYPE_STRING, manufacturer, G_TYPE_STRING, model, G_TYPE_STRING, file_hash,
1458 G_TYPE_STRING, file_name, G_TYPE_STRING, file_data, G_TYPE_STRING, user,
1459 G_TYPE_STRING, password, G_TYPE_INVALID)) {
1460 if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) {
1461 IRRECO_RETURN_INT(msg);
1462 } else {
1463 IRRECO_RETURN_INT(0);
1465 } else {
1466 IRRECO_RETURN_INT(0);
1470 gboolean irreco_webdb_client_set_remote_downloadable(IrrecoWebdbClient *self,
1471 gint id,
1472 gboolean downloadable,
1473 const gchar *user,
1474 const gchar *password)
1476 GValue retval;
1477 gboolean msg;
1479 IRRECO_ENTER
1481 irreco_webdb_client_reset_env(self);
1483 if(do_xmlrpc (self, "setRemoteDownloadable", &retval, G_TYPE_INT, id,
1484 G_TYPE_BOOLEAN, downloadable, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) {
1485 if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) {
1486 IRRECO_RETURN_BOOL(msg);
1487 } else {
1488 IRRECO_RETURN_BOOL(FALSE);
1490 } else {
1491 IRRECO_RETURN_BOOL(FALSE);
1495 gboolean irreco_webdb_client_add_configuration_to_remote(
1496 IrrecoWebdbClient *self,
1497 gint remote_id,
1498 gint configuration_id,
1499 const gchar *user,
1500 const gchar *password)
1502 GValue retval;
1503 gboolean msg;
1505 IRRECO_ENTER
1507 irreco_webdb_client_reset_env(self);
1509 if(do_xmlrpc (self, "addConfigurationToRemote", &retval, G_TYPE_INT, remote_id,
1510 G_TYPE_INT, configuration_id, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) {
1511 if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) {
1512 IRRECO_RETURN_BOOL(msg);
1513 } else {
1514 IRRECO_RETURN_BOOL(FALSE);
1516 } else {
1517 IRRECO_RETURN_BOOL(FALSE);
1521 gboolean irreco_webdb_client_add_theme_to_remote(IrrecoWebdbClient *self,
1522 gint remote_id,
1523 gint theme_id,
1524 const gchar *user,
1525 const gchar *password)
1527 GValue retval;
1528 gboolean msg;
1530 IRRECO_ENTER
1532 irreco_webdb_client_reset_env(self);
1534 if(do_xmlrpc (self, "addThemeToRemote", &retval, G_TYPE_INT, remote_id,
1535 G_TYPE_INT, theme_id, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) {
1536 if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) {
1537 IRRECO_RETURN_BOOL(msg);
1538 } else {
1539 IRRECO_RETURN_BOOL(FALSE);
1541 } else {
1542 IRRECO_RETURN_BOOL(FALSE);
1546 gboolean irreco_webdb_client_get_remote_categories(IrrecoWebdbClient *self,
1547 IrrecoStringTable **category_list)
1549 gint i = 0;
1550 GValue retval;
1551 GValueArray *array;
1553 IRRECO_ENTER
1555 irreco_webdb_client_reset_env(self);
1556 *category_list = irreco_string_table_new(NULL, NULL);
1558 if(do_xmlrpc (self, "getRemoteCategories", &retval, G_TYPE_INVALID)) {
1559 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1560 for(i = 0; i < array->n_values; i++) {
1561 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1562 g_value_array_get_nth(array, i)));
1563 /*g_print("value: %s\n", g_value_get_string(
1564 g_value_array_get_nth(array, i)));*/
1565 irreco_string_table_add(*category_list,
1566 g_value_get_string(
1567 g_value_array_get_nth(array, i)),
1568 NULL);
1570 IRRECO_RETURN_BOOL(TRUE);
1571 } else {
1572 IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */
1574 } else {
1575 IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */
1579 gboolean irreco_webdb_client_get_remote_manufacturers(IrrecoWebdbClient *self,
1580 const gchar *category,
1581 IrrecoStringTable **manufacturer_list)
1583 gint i = 0;
1584 GValue retval;
1585 GValueArray *array;
1587 IRRECO_ENTER
1589 irreco_webdb_client_reset_env(self);
1590 *manufacturer_list = irreco_string_table_new(NULL, NULL);
1592 if(do_xmlrpc (self, "getRemoteManufacturers", &retval, G_TYPE_STRING, category, G_TYPE_INVALID)) {
1593 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1594 for(i = 0; i < array->n_values; i++) {
1595 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1596 g_value_array_get_nth(array, i)));
1597 /*g_print("value: %s\n", g_value_get_string(
1598 g_value_array_get_nth(array, i)));*/
1599 irreco_string_table_add(*manufacturer_list,
1600 g_value_get_string(
1601 g_value_array_get_nth(array, i)),
1602 NULL);
1604 IRRECO_RETURN_BOOL(TRUE);
1605 } else {
1606 IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */
1608 } else {
1609 IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */
1613 gboolean irreco_webdb_client_get_remote_models(IrrecoWebdbClient *self,
1614 const gchar *category,
1615 const gchar *manufacturer,
1616 IrrecoStringTable **model_list)
1618 gint i = 0;
1619 GValue retval;
1620 GValueArray *array;
1622 IRRECO_ENTER
1624 irreco_webdb_client_reset_env(self);
1625 *model_list = irreco_string_table_new(NULL, NULL);
1627 if(do_xmlrpc (self, "getRemoteModels", &retval, G_TYPE_STRING, category,
1628 G_TYPE_STRING, manufacturer, G_TYPE_INVALID)) {
1629 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1630 for(i = 0; i < array->n_values; i++) {
1631 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1632 g_value_array_get_nth(array, i)));
1633 /*g_print("value: %s\n", g_value_get_string(
1634 g_value_array_get_nth(array, i)));*/
1635 irreco_string_table_add(*model_list,
1636 g_value_get_string(
1637 g_value_array_get_nth(array, i)),
1638 NULL);
1640 IRRECO_RETURN_BOOL(TRUE);
1641 } else {
1642 IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */
1644 } else {
1645 IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */
1649 gboolean irreco_webdb_client_get_remote_creators(IrrecoWebdbClient *self,
1650 const gchar *category,
1651 const gchar *manufacturer,
1652 const gchar *model,
1653 IrrecoStringTable **creators)
1655 gint i = 0;
1656 GValue retval;
1657 GValueArray *array;
1659 IRRECO_ENTER
1661 irreco_webdb_client_reset_env(self);
1662 *creators = irreco_string_table_new(NULL, NULL);
1664 if(do_xmlrpc (self, "getRemoteCreators", &retval, G_TYPE_STRING, category,
1665 G_TYPE_STRING, manufacturer, G_TYPE_STRING, model, G_TYPE_INVALID)) {
1666 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1667 for(i = 0; i < array->n_values; i++) {
1668 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1669 g_value_array_get_nth(array, i)));
1670 /*g_print("value: %s\n", g_value_get_string(
1671 g_value_array_get_nth(array, i)));*/
1672 irreco_string_table_add(*creators,
1673 g_value_get_string(
1674 g_value_array_get_nth(array, i)),
1675 NULL);
1677 IRRECO_RETURN_BOOL(TRUE);
1678 } else {
1679 IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */
1681 } else {
1682 IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */
1686 gboolean irreco_webdb_client_get_remotes(IrrecoWebdbClient *self,
1687 const gchar *category,
1688 const gchar *manufacturer,
1689 const gchar *model,
1690 const gchar *creator,
1691 GList **remote_list)
1693 gint i = 0;
1694 GValue retval;
1695 GValueArray *array;
1697 IRRECO_ENTER
1699 irreco_webdb_client_reset_env(self);
1700 *remote_list = NULL;
1702 if(do_xmlrpc (self, "getRemotes", &retval, G_TYPE_STRING, category, G_TYPE_STRING,
1703 manufacturer, G_TYPE_STRING, model, G_TYPE_STRING, creator, G_TYPE_INVALID)) {
1704 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1705 for(i = 0; i < array->n_values; i++) {
1706 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1707 g_value_array_get_nth(array, i)));
1708 g_print("value: %d\n", g_value_get_int(
1709 g_value_array_get_nth(array, i)));
1710 *remote_list = g_list_append(*remote_list,
1711 GINT_TO_POINTER(g_value_get_int(
1712 g_value_array_get_nth(array, i))));
1715 *remote_list = g_list_first(*remote_list);
1716 IRRECO_RETURN_BOOL(TRUE);
1717 } else {
1718 IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */
1720 } else {
1721 IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */
1725 gboolean irreco_webdb_client_get_remote_by_id(IrrecoWebdbClient *self,
1726 gint id,
1727 IrrecoWebdbRemote **remote)
1729 GValue retval;
1730 const gchar *user = NULL;
1731 const gchar *comment = NULL;
1732 const gchar *category = NULL;
1733 const gchar *manufacturer = NULL;
1734 const gchar *model = NULL;
1735 const gchar *file_hash = NULL;
1736 const gchar *file_name = NULL;
1737 const gchar *uploaded = NULL;
1738 const gchar *modified = NULL;
1739 const gchar *downloaded = NULL;
1740 gint download_count;
1741 GHashTable *htable;
1743 IRRECO_ENTER
1745 irreco_webdb_client_reset_env(self);
1747 if(do_xmlrpc (self, "getRemoteById", &retval, G_TYPE_INT, id, G_TYPE_INVALID)) {
1748 if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) {
1749 GValue *tmp;
1750 tmp = g_hash_table_lookup (htable, "user");
1751 user = g_value_get_string(tmp);
1752 tmp = g_hash_table_lookup (htable, "comment");
1753 comment = g_value_get_string(tmp);
1754 tmp = g_hash_table_lookup (htable, "category");
1755 category = g_value_get_string(tmp);
1756 tmp = g_hash_table_lookup (htable, "manufacturer");
1757 manufacturer = g_value_get_string(tmp);
1758 tmp = g_hash_table_lookup (htable, "model");
1759 model = g_value_get_string(tmp);
1760 tmp = g_hash_table_lookup (htable, "file_hash");
1761 file_hash = g_value_get_string(tmp);
1762 tmp = g_hash_table_lookup (htable, "file_name");
1763 file_name = g_value_get_string(tmp);
1764 tmp = g_hash_table_lookup (htable, "uploaded");
1765 uploaded = g_value_get_string(tmp);
1766 tmp = g_hash_table_lookup (htable, "modified");
1767 modified = g_value_get_string(tmp);
1768 tmp = g_hash_table_lookup (htable, "downloaded");
1769 downloaded = g_value_get_string(tmp);
1770 tmp = g_hash_table_lookup (htable, "download_count");
1771 download_count = g_value_get_int(tmp);
1773 /* g_print("blbbi: %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d", user, comment, category,
1774 manufacturer, model, file_hash, file_name, uploaded, modified, downloaded, download_count);*/
1776 *remote = irreco_webdb_remote_new();
1777 irreco_webdb_remote_set(*remote, id, user, comment, category,
1778 manufacturer, model, file_hash, file_name,
1779 uploaded, modified, downloaded, download_count);
1781 if (user != NULL) g_free((gchar*)user);
1782 if (comment != NULL) g_free((gchar*)comment);
1783 if (category != NULL) g_free((gchar*)category);
1784 if (manufacturer != NULL) g_free((gchar*)manufacturer);
1785 if (model != NULL) g_free((gchar*)model);
1786 if (file_hash != NULL) g_free((gchar*)file_hash);
1787 if (file_name != NULL) g_free((gchar*)file_name);
1788 if (uploaded != NULL) g_free((gchar*)uploaded);
1789 if (modified != NULL) g_free((gchar*)modified);
1790 if (downloaded != NULL) g_free((gchar*)downloaded);
1792 IRRECO_RETURN_BOOL(TRUE);
1793 } else {
1795 IRRECO_RETURN_BOOL(FALSE);
1797 } else {
1798 IRRECO_RETURN_BOOL(FALSE);
1803 gboolean irreco_webdb_client_get_themes_of_remote(IrrecoWebdbClient *self,
1804 gint remote_id,
1805 GList **themes)
1807 gint i = 0;
1808 GValue retval;
1809 GValueArray *array;
1811 IRRECO_ENTER
1813 irreco_webdb_client_reset_env(self);
1814 *themes = NULL;
1816 if(do_xmlrpc (self, "getThemesOfRemote", &retval, G_TYPE_INT, remote_id, G_TYPE_INVALID)) {
1817 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1818 for(i = 0; i < array->n_values; i++) {
1819 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1820 g_value_array_get_nth(array, i)));
1821 g_print("value: %d\n", g_value_get_int(
1822 g_value_array_get_nth(array, i)));
1823 *themes = g_list_append(*themes,
1824 GINT_TO_POINTER(g_value_get_int(
1825 g_value_array_get_nth(array, i))));
1828 *themes = g_list_first(*themes);
1829 IRRECO_RETURN_BOOL(TRUE);
1830 } else {
1831 IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */
1833 } else {
1834 IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */
1839 gboolean irreco_webdb_client_get_configurations_of_remote(
1840 IrrecoWebdbClient *self,
1841 gint remote_id,
1842 GList **configs)
1844 gint i = 0;
1845 GValue retval;
1846 GValueArray *array;
1848 IRRECO_ENTER
1850 irreco_webdb_client_reset_env(self);
1851 *configs = NULL;
1853 if(do_xmlrpc (self, "getConfigurationsOfRemote", &retval, G_TYPE_INT, remote_id, G_TYPE_INVALID)) {
1854 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1855 for(i = 0; i < array->n_values; i++) {
1856 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1857 g_value_array_get_nth(array, i)));
1858 g_print("value: %d\n", g_value_get_int(
1859 g_value_array_get_nth(array, i)));
1860 *configs = g_list_append(*configs,
1861 GINT_TO_POINTER(g_value_get_int(
1862 g_value_array_get_nth(array, i))));
1865 *configs = g_list_first(*configs);
1866 IRRECO_RETURN_BOOL(TRUE);
1867 } else {
1868 IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */
1870 } else {
1871 IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */
1875 gboolean irreco_webdb_client_get_remote_data(IrrecoWebdbClient *self,
1876 gint remote_id,
1877 gchar **file_data)
1878 {/* #define IRRECO_WEBDB_URL "http://localhost/irreco/webdb/" */
1880 GValue retval;
1881 GHashTable *htable;
1883 IRRECO_ENTER
1885 irreco_webdb_client_reset_env(self);
1887 if(do_xmlrpc (self, "getRemoteData", &retval, G_TYPE_INT, remote_id, G_TYPE_INVALID)) {
1888 if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) {
1889 GValue *tmp;
1890 tmp = g_hash_table_lookup (htable, "data");
1891 *file_data = (gchar*) g_value_get_string(tmp);
1892 IRRECO_RETURN_BOOL(TRUE);
1893 } else {
1894 IRRECO_RETURN_BOOL(FALSE);
1896 } else {
1897 IRRECO_RETURN_BOOL(FALSE);
1901 gboolean irreco_webdb_client_get_lirc_dirs(IrrecoWebdbClient *self,
1902 IrrecoStringTable **dir_list)
1904 gint i = 0;
1905 GValue retval;
1906 GValueArray *array;
1908 IRRECO_ENTER
1910 irreco_webdb_client_reset_env(self);
1911 *dir_list = irreco_string_table_new(NULL, NULL);
1913 if(do_xmlrpc (self, "getLircDirs", &retval, G_TYPE_INVALID)) {
1914 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1915 for(i = 0; i < array->n_values; i++) {
1916 g_print("%d value type is: %s\n", i, G_VALUE_TYPE_NAME(
1917 g_value_array_get_nth(array, i)));
1918 irreco_string_table_add(*dir_list,
1919 g_value_get_string(
1920 g_value_array_get_nth(array, i)),
1921 NULL);
1923 IRRECO_RETURN_BOOL(TRUE);
1924 } else {
1925 IRRECO_RETURN_BOOL(FALSE);
1927 } else {
1928 IRRECO_RETURN_BOOL(FALSE);
1932 gboolean irreco_webdb_client_get_lirc_manufacturers(IrrecoWebdbClient *self,
1933 const gchar *range,
1934 IrrecoStringTable **manufacturer_list)
1936 gint i = 0;
1937 GValue retval;
1938 GValueArray *array;
1940 IRRECO_ENTER
1942 irreco_webdb_client_reset_env(self);
1943 *manufacturer_list = irreco_string_table_new(NULL, NULL);
1945 if(do_xmlrpc (self, "getLircManufacturers", &retval, G_TYPE_STRING, range, G_TYPE_INVALID)) {
1946 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1947 for(i = 0; i < array->n_values; i++) {
1948 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1949 g_value_array_get_nth(array, i)));
1950 irreco_string_table_add(*manufacturer_list,
1951 g_value_get_string(
1952 g_value_array_get_nth(array, i)),
1953 NULL);
1955 IRRECO_RETURN_BOOL(TRUE);
1956 } else {
1957 IRRECO_RETURN_BOOL(FALSE);
1959 } else {
1960 IRRECO_RETURN_BOOL(FALSE);
1964 gboolean irreco_webdb_client_get_lirc_models(IrrecoWebdbClient *self,
1965 const gchar *manufacturer,
1966 IrrecoStringTable **model_list)
1968 gint i = 0;
1969 GValue retval;
1970 GValueArray *array;
1972 IRRECO_ENTER
1974 irreco_webdb_client_reset_env(self);
1975 *model_list = irreco_string_table_new(NULL, NULL);
1977 if(do_xmlrpc (self, "getLircModels", &retval, G_TYPE_STRING, manufacturer, G_TYPE_INVALID)) {
1978 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
1979 for(i = 0; i < array->n_values; i++) {
1980 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
1981 g_value_array_get_nth(array, i)));
1982 irreco_string_table_add(*model_list,
1983 g_value_get_string(
1984 g_value_array_get_nth(array, i)),
1985 NULL);
1987 IRRECO_RETURN_BOOL(TRUE);
1988 } else {
1989 IRRECO_RETURN_BOOL(FALSE);
1991 } else {
1992 IRRECO_RETURN_BOOL(FALSE);
1996 gboolean irreco_webdb_client_get_lirc_file(IrrecoWebdbClient *self,
1997 const gchar *model,
1998 IrrecoStringTable **file)
2000 gint i = 0;
2001 GValue retval;
2002 GValueArray *array;
2004 IRRECO_ENTER
2006 irreco_webdb_client_reset_env(self);
2007 *file = irreco_string_table_new(NULL, NULL);
2009 if(do_xmlrpc (self, "getLircFile", &retval, G_TYPE_STRING, model, G_TYPE_INVALID)) {
2010 if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) {
2011 for(i = 0; i < array->n_values; i++) {
2012 g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME(
2013 g_value_array_get_nth(array, i)));
2014 irreco_string_table_add(*file,
2015 g_value_get_string(
2016 g_value_array_get_nth(array, i)),
2017 NULL);
2019 IRRECO_RETURN_BOOL(TRUE);
2020 } else {
2021 IRRECO_RETURN_BOOL(FALSE);
2023 } else {
2024 IRRECO_RETURN_BOOL(FALSE);
2028 /** @} */
2031 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
2032 /* Events and Callbacks */
2033 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
2035 /** @} */