From ca708ec4be7cc12ff753b91cb0a55a2f3b04d25c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sami=20M=C3=A4ki?= Date: Mon, 14 Sep 2009 12:00:07 +0300 Subject: [PATCH] Irreco for N900 (Maemo 5) update. Push for 0.8.* changes. --- irreco/configure.ac | 13 +- irreco/debian/changelog | 75 + irreco/debian/control | 6 +- irreco/src/core/Makefile.am | 4 + irreco/src/core/irreco.c | 1 + irreco/src/core/irreco.h | 2 +- irreco/src/core/irreco_backend_dlg.c | 7 +- irreco/src/core/irreco_backend_err_dlg.c | 6 +- irreco/src/core/irreco_backend_select_dlg.c | 3 +- irreco/src/core/irreco_background_dlg.c | 1 - irreco/src/core/irreco_button.c | 10 +- irreco/src/core/irreco_button_browser_dlg.c | 8 +- irreco/src/core/irreco_button_dlg.c | 5 +- irreco/src/core/irreco_button_layout.c | 5 +- irreco/src/core/irreco_cmd_chain_setup_dlg.c | 1 - irreco/src/core/irreco_cmd_dlg.c | 52 +- irreco/src/core/irreco_device_dlg.c | 35 +- irreco/src/core/irreco_device_dlg.h | 2 +- irreco/src/core/irreco_hardkey_dlg.c | 9 +- irreco/src/core/irreco_input_dlg.c | 2 +- irreco/src/core/irreco_listbox.c | 5 +- irreco/src/core/irreco_listbox_text.c | 25 +- irreco/src/core/irreco_login_dlg.c | 17 +- irreco/src/core/irreco_login_dlg.h | 1 + irreco/src/core/irreco_remote_download_dlg.c | 43 +- irreco/src/core/irreco_remote_upload_dlg.c | 9 +- irreco/src/core/irreco_select_instance_dlg.c | 3 +- irreco/src/core/irreco_style_browser_dlg.c | 3 - irreco/src/core/irreco_theme_creator_backgrounds.c | 5 +- irreco/src/core/irreco_theme_creator_buttons.c | 5 +- irreco/src/core/irreco_theme_creator_dlg.c | 15 +- irreco/src/core/irreco_theme_creator_dlg.h | 1 - irreco/src/core/irreco_theme_download_dlg.c | 30 +- irreco/src/core/irreco_theme_manager.c | 8 +- irreco/src/core/irreco_theme_manager_dlg.c | 113 +- irreco/src/core/irreco_theme_save_dlg.c | 5 +- irreco/src/core/irreco_theme_upload_dlg.c | 9 +- irreco/src/core/irreco_webdb_dlg.c | 57 +- irreco/src/core/irreco_webdb_dlg.h | 2 +- irreco/src/core/irreco_webdb_register_dlg.c | 6 +- irreco/src/core/irreco_webdb_upload_dlg.c | 6 +- irreco/src/core/irreco_window.c | 85 +- irreco/src/core/irreco_window.h | 2 +- irreco/src/core/irreco_window_edit.c | 380 +- irreco/src/core/irreco_window_edit.h | 10 +- irreco/src/core/irreco_window_user.c | 185 +- irreco/src/util/Makefile.am | 7 +- irreco/src/util/irreco_backend_file_container.c | 2 +- irreco/src/util/irreco_backend_file_container.h | 1 - irreco/src/util/irreco_misc.c | 4 +- irreco/src/webdb/Makefile.am | 4 +- irreco/src/webdb/irreco_webdb_cache.c | 101 +- irreco/src/webdb/irreco_webdb_cache.h | 12 + irreco/src/webdb/irreco_webdb_client.c | 5248 ++++++++------------ irreco/src/webdb/irreco_webdb_client.h | 16 +- 55 files changed, 2626 insertions(+), 4046 deletions(-) rewrite irreco/src/webdb/irreco_webdb_client.c (82%) diff --git a/irreco/configure.ac b/irreco/configure.ac index 3f5ae2c2..ebe9ee45 100644 --- a/irreco/configure.ac +++ b/irreco/configure.ac @@ -1,6 +1,6 @@ -AC_INIT([irreco], [0.6.9.5-2]) +AC_INIT([irreco], [0.8.6]) AM_INIT_AUTOMAKE AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST @@ -22,10 +22,13 @@ AC_ARG_ENABLE([debug], [enable_debug=no]) AS_IF( [test "$enable_debug" != "yes"], [enable_debug=no]) AS_IF( [test "$enable_debug" = "yes"], - [CFLAGS="$CFLAGS -O0 -Wall -Werror -ansi -pedantic -ggdb -DDEBUG"], - [CFLAGS="$CFLAGS -O0 -Wall -Werror -ansi -pedantic"]) + [CFLAGS="$CFLAGS -O0 -Wall -Werror -ggdb -DDEBUG"], + [CFLAGS="$CFLAGS -O0 -Wall -Werror"]) AC_SUBST(enable_debug) +# ^ Changed -ansi to -std=c99 to survive with libsoup2.4 +# ^^ And removed -std=c99 -pedantic for x86 target compiling with libsoup2.4 + # # Pkg-config install option @@ -43,7 +46,7 @@ AM_CONDITIONAL([IRRECO_DEV], [test x$enable_dev = xyes]) # # Irreco Core dependencies # -PKG_CHECK_MODULES(IRRECO_CORE, hildon-fm-2 hildon-1 gnome-vfs-2.0 libosso libsoup-2.2) +PKG_CHECK_MODULES(IRRECO_CORE, hildon-fm-2 hildon-1 gnome-vfs-2.0 libosso libsoup-2.4) AC_SUBST(IRRECO_CORE_LIBS) AC_SUBST(IRRECO_CORE_CFLAGS) @@ -59,7 +62,7 @@ AC_SUBST(IRRECO_UTIL_CFLAGS) # # Irreco Webdb dependencies # -PKG_CHECK_MODULES(IRRECO_WEBDB, gtk+-2.0 libsoup-2.2) +PKG_CHECK_MODULES(IRRECO_WEBDB, gtk+-2.0 libsoup-2.4) AC_SUBST(IRRECO_WEBDB_LIBS) AC_SUBST(IRRECO_WEBDB_CFLAGS) diff --git a/irreco/debian/changelog b/irreco/debian/changelog index 482773ce..70a1cacd 100644 --- a/irreco/debian/changelog +++ b/irreco/debian/changelog @@ -1,3 +1,78 @@ +irreco-core (0.8.6) unstable; urgency=low + + * Removed confusing devices from menu + + -- Harri Vattulainen Wed, 9 Sep 2009 13:48:19 +0300 + +irreco-core (0.8.5) unstable; urgency=low + + * Removed HW key menuitem, 'cause those seem to be hardcoded for volume + * Removed irrecoDB menuitem, 'cause irtrans backend isn't ported + + -- Harri Vattulainen Tue, 8 Sep 2009 14:20:47 +0300 + +irreco-core (0.8.4) unstable; urgency=low + + * Fixed theme BG locations issue, again + + -- Harri Vattulainen Mon, 7 Sep 2009 16:37:27 +0300 + +irreco-core (0.8.3) unstable; urgency=low + + * Fixed lircDB issues + + -- Harri Vattulainen Fri, 4 Sep 2009 11:23:00 +0300 + +irreco-core (0.8.2) unstable; urgency=low + + * Fixed theme BG location mistake + + -- Harri Vattulainen Fri, 4 Sep 2009 10:18:36 +0300 + +irreco-core (0.8.1) unstable; urgency=low + + * Fixed assign command dlg space issue + * Changed lircDB dlg not to expand treeview rows on touch + + -- Harri Vattulainen Thu, 3 Sep 2009 12:36:55 +0300 + +irreco-core (0.8.0) unstable; urgency=low + + * No changes, version up to date + + -- Harri Vattulainen Fri, 28 Aug 2009 11:25:31 +0300 + +irreco-core (0.7.9.12) unstable; urgency=low + + * Changed theme dir under MyDocs + * Changed button press behaviour back + + -- Harri Vattulainen Wed, 10 Jun 2009 12:57:19 +0300 + +irreco-core (0.7.9.11) unstable; urgency=low + + * Fixed trash + + -- Harri Vattulainen Wed, 10 Jun 2009 11:25:37 +0300 + +irreco-core (0.7.9.10) unstable; urgency=low + + * Changed button press behaviour + + -- Harri Vattulainen Tue, 9 Jun 2009 12:03:06 +0300 + +irreco-core (0.7.9.9) unstable; urgency=low + + * Ported to Fremantle + * Theme editing dropped + * Fullscreen mode dropped + * + many more minor drops + * Nearly all menus, dialogs and lists hildonized + * Libsoup updated to 2.4 compatible + * Added support to lircDB + + -- Harri Vattulainen Mon, 1 Jun 2009 10:08:11 +0300 + irreco-core (0.6.9.5-2) unstable; urgency=low * Layout uploading and downloading diff --git a/irreco/debian/control b/irreco/debian/control index 5c0a77f8..f42df995 100644 --- a/irreco/debian/control +++ b/irreco/debian/control @@ -1,9 +1,9 @@ Source: irreco-core Priority: extra -Maintainer: Joni Kokko +Maintainer: Harri Vattulainen Build-Depends: debhelper (>= 5), libhildon1-dev, libgtk2.0-dev, libosso-gnomevfs2-dev, libhildonfm2-dev,libhildon1, - libglib2.0-dev, libdbus-glib-1-dev, libosso-dev, intltool, libsoup2.2-dev, libxml2 + libglib2.0-dev, libdbus-glib-1-dev, libosso-dev, intltool, libsoup2.4-dev, libxml2 Standards-Version: 3.7.2 Section: user/multimedia @@ -21,7 +21,7 @@ Description: Irreco - Ir Remote Control Package: irreco-core Section: user/multimedia Architecture: any -Depends: libsoup2.2-8, ${shlibs:Depends}, ${misc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends} Description: Irreco - Ir Remote Control Irreco is a remote control application for Nokia Internet Tablets. With Irreco and the help of external IR transceiver you can control diff --git a/irreco/src/core/Makefile.am b/irreco/src/core/Makefile.am index ee5d7ca2..0666bf87 100644 --- a/irreco/src/core/Makefile.am +++ b/irreco/src/core/Makefile.am @@ -68,6 +68,8 @@ irreco_SOURCES = \ irreco_internal_dlg.h \ irreco_internal_widget.c \ irreco_internal_widget.h \ + irreco_lircdb_dlg.c \ + irreco_lircdb_dlg.h \ irreco_listbox.c \ irreco_listbox.h \ irreco_listbox_image.c \ @@ -84,6 +86,8 @@ irreco_SOURCES = \ irreco_scrolled_window.h \ irreco_select_instance_dlg.c \ irreco_select_instance_dlg.h \ + irreco_select_remote_dlg.c \ + irreco_select_remote_dlg.h \ irreco_style_browser_dlg.c \ irreco_style_browser_dlg.h \ irreco_theme.c \ diff --git a/irreco/src/core/irreco.c b/irreco/src/core/irreco.c index 6892fbbb..ceb4c2e7 100644 --- a/irreco/src/core/irreco.c +++ b/irreco/src/core/irreco.c @@ -79,6 +79,7 @@ void irreco_link_bg_image_dir(); gboolean irreco_startup_help_check(IrrecoData *irreco_data) { IRRECO_ENTER + if (irreco_string_table_is_empty(irreco_data->irreco_layout_array)) { irreco_info_dlg(irreco_window_manager_get_gtk_window( diff --git a/irreco/src/core/irreco.h b/irreco/src/core/irreco.h index b137c8bf..46c1d68e 100644 --- a/irreco/src/core/irreco.h +++ b/irreco/src/core/irreco.h @@ -99,7 +99,7 @@ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ #define IRRECO_SCREEN_WIDTH 800 -#define IRRECO_SCREEN_HEIGHT 480 +#define IRRECO_SCREEN_HEIGHT 424 #define IRRECO_LAYOUT_WIDTH IRRECO_SCREEN_WIDTH #define IRRECO_LAYOUT_HEIGHT IRRECO_SCREEN_HEIGHT diff --git a/irreco/src/core/irreco_backend_dlg.c b/irreco/src/core/irreco_backend_dlg.c index d2ac3991..7bc3cdc8 100644 --- a/irreco/src/core/irreco_backend_dlg.c +++ b/irreco/src/core/irreco_backend_dlg.c @@ -91,11 +91,11 @@ static void irreco_backend_dlg_init(IrrecoBackendDlg * self) GTK_STOCK_NEW, IRRECO_BACKEND_NEW, GTK_STOCK_DELETE, IRRECO_BACKEND_DELETE, _("Configure"), IRRECO_BACKEND_CONFIGURE, - GTK_STOCK_OK, GTK_RESPONSE_OK, +/* GTK_STOCK_OK, GTK_RESPONSE_OK,*/ NULL); /* Create new listbox and add it to the dialog. */ - self->listbox = irreco_listbox_text_new_with_autosize(0, 600, 100, 250); + self->listbox = irreco_listbox_text_new_with_autosize(0, 600, 250, 350); align = irreco_gtk_align(self->listbox, 0, 0, 1, 1, 8, 8, 8, 8); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(self)->vbox), align, 0, 0, 0); @@ -213,7 +213,8 @@ void irreco_show_backend_dlg(IrrecoData *irreco_data, irreco_backend_dlg_response_configure(self); break; - case GTK_RESPONSE_OK: + /*case GTK_RESPONSE_OK:*/ + case GTK_RESPONSE_DELETE_EVENT: loop = FALSE; break; } diff --git a/irreco/src/core/irreco_backend_err_dlg.c b/irreco/src/core/irreco_backend_err_dlg.c index c978db7f..68f37c68 100644 --- a/irreco/src/core/irreco_backend_err_dlg.c +++ b/irreco/src/core/irreco_backend_err_dlg.c @@ -213,10 +213,10 @@ static gboolean irreco_backend_err_dlg_configure_event(GtkWidget *self, GdkEventConfigure *event, gpointer user_data) { - gint x, y; +/* gint x, y; */ IRRECO_ENTER - IRRECO_PRINTF("Dialog size w%i h%i\n", event->width, event->height); +/* IRRECO_PRINTF("Dialog size w%i h%i\n", event->width, event->height); x = (800 - event->width) / 2; y = (480 - event->height) / 2; @@ -227,7 +227,7 @@ static gboolean irreco_backend_err_dlg_configure_event(GtkWidget *self, gtk_window_move(GTK_WINDOW(self), x, y); } else { IRRECO_PRINTF("Dialog position x%i y%i\n", x, y); - } + } */ IRRECO_RETURN_BOOL(FALSE); } diff --git a/irreco/src/core/irreco_backend_select_dlg.c b/irreco/src/core/irreco_backend_select_dlg.c index 850e4479..b48849cc 100644 --- a/irreco/src/core/irreco_backend_select_dlg.c +++ b/irreco/src/core/irreco_backend_select_dlg.c @@ -71,7 +71,6 @@ static void irreco_backend_select_dlg_init(IrrecoBackendSelectDlg *self) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); @@ -171,7 +170,7 @@ gboolean irreco_show_backend_select_dlg(IrrecoData *irreco_data, do { switch (gtk_dialog_run(GTK_DIALOG(self))) { - case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: rvalue = FALSE; break; diff --git a/irreco/src/core/irreco_background_dlg.c b/irreco/src/core/irreco_background_dlg.c index 6559284c..87d721fc 100644 --- a/irreco/src/core/irreco_background_dlg.c +++ b/irreco/src/core/irreco_background_dlg.c @@ -114,7 +114,6 @@ static void irreco_background_dlg_constructed(GObject *object) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); diff --git a/irreco/src/core/irreco_button.c b/irreco/src/core/irreco_button.c index 53987af3..d3bdd6e7 100644 --- a/irreco/src/core/irreco_button.c +++ b/irreco/src/core/irreco_button.c @@ -623,7 +623,10 @@ gboolean irreco_button_generic_motion_notify_event(GtkWidget * widget, IRRECO_RETURN_BOOL(FALSE); } - +/** + * Combined press and release functionality to improve usability + * Now action is performed on klick rather than on button release + */ gboolean irreco_button_generic_press_event(GtkWidget * widget, GdkEventButton * event, IrrecoButton * irreco_button) @@ -633,6 +636,11 @@ gboolean irreco_button_generic_press_event(GtkWidget * widget, irreco_button->irreco_layout->button_press_callback(irreco_button, irreco_button->irreco_layout->callback_user_data); } + + /*if (irreco_button->irreco_layout->button_release_callback != NULL) { + irreco_button->irreco_layout->button_release_callback(irreco_button, + irreco_button->irreco_layout->callback_user_data); + }*/ IRRECO_RETURN_BOOL(FALSE); } diff --git a/irreco/src/core/irreco_button_browser_dlg.c b/irreco/src/core/irreco_button_browser_dlg.c index 2fd4e1ed..ea302a7a 100644 --- a/irreco/src/core/irreco_button_browser_dlg.c +++ b/irreco/src/core/irreco_button_browser_dlg.c @@ -93,9 +93,6 @@ static void irreco_button_browser_dlg_constructed(GObject *object) gtk_window_set_modal(GTK_WINDOW(self), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); - gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - NULL); /* Create list for images */ self->images = IRRECO_LISTBOX_IMAGE( @@ -307,9 +304,8 @@ IrrecoThemeButton *irreco_button_browser_dlg_run(GtkWindow *parent_window, response = gtk_dialog_run(GTK_DIALOG(self)); switch (response) { - - case GTK_RESPONSE_CANCEL: - IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n"); + case GTK_RESPONSE_DELETE_EVENT: + IRRECO_DEBUG("GTK_RESPONSE_DELETE_EVENT\n"); rvalue = NULL; loop = FALSE; break; diff --git a/irreco/src/core/irreco_button_dlg.c b/irreco/src/core/irreco_button_dlg.c index 67f2229d..15ca5a2f 100644 --- a/irreco/src/core/irreco_button_dlg.c +++ b/irreco/src/core/irreco_button_dlg.c @@ -292,7 +292,7 @@ gboolean irreco_button_dlg_run(IrrecoButtonDlg * button_dlg, while (rvalue == -1) { switch (gtk_dialog_run(GTK_DIALOG(button_dlg->dialog))) { - case GTK_RESPONSE_REJECT: + case GTK_RESPONSE_DELETE_EVENT: rvalue = FALSE; break; @@ -410,7 +410,6 @@ void irreco_button_dlg_create_window(IrrecoButtonDlg * button_dlg, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_CLEAR, IRRECO_RESPONSE_CLEAR, - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); hbox = gtk_hbox_new(FALSE, 10); @@ -532,7 +531,7 @@ void irreco_button_dlg_size_request(GtkWidget *widget, gpointer user_data) { IRRECO_ENTER - requisition->height = 999; + requisition->height = 300; IRRECO_RETURN } diff --git a/irreco/src/core/irreco_button_layout.c b/irreco/src/core/irreco_button_layout.c index 6068fc13..f9a6dccf 100644 --- a/irreco/src/core/irreco_button_layout.c +++ b/irreco/src/core/irreco_button_layout.c @@ -86,7 +86,10 @@ void irreco_button_layout_destroy(IrrecoButtonLayout * irreco_layout) g_string_free(irreco_layout->name, TRUE); g_string_free(irreco_layout->background_image, TRUE); g_slice_free(IrrecoButtonLayout, irreco_layout); - g_string_free(irreco_layout->filename, TRUE); + if(irreco_layout->filename != NULL) + { + g_string_free(irreco_layout->filename, TRUE); + } IRRECO_RETURN } diff --git a/irreco/src/core/irreco_cmd_chain_setup_dlg.c b/irreco/src/core/irreco_cmd_chain_setup_dlg.c index 80957aa2..ce1b3836 100644 --- a/irreco/src/core/irreco_cmd_chain_setup_dlg.c +++ b/irreco/src/core/irreco_cmd_chain_setup_dlg.c @@ -100,7 +100,6 @@ static void irreco_cmd_chain_setup_dlg_init(IrrecoCmdChainSetupDlg *self) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); diff --git a/irreco/src/core/irreco_cmd_dlg.c b/irreco/src/core/irreco_cmd_dlg.c index 92876579..e2b7682d 100644 --- a/irreco/src/core/irreco_cmd_dlg.c +++ b/irreco/src/core/irreco_cmd_dlg.c @@ -20,6 +20,7 @@ #include "irreco_cmd_dlg.h" #include "irreco_backend_dlg.h" #include "irreco_backend_instance.h" +#include /** * @addtogroup IrrecoCmdDlg @@ -42,7 +43,7 @@ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -#define IRRECO_SELECT_CMD_DLG_BUTTON_ROW_WIDTH 600 +#define IRRECO_SELECT_CMD_DLG_BUTTON_ROW_WIDTH 520 #define IRRECO_SELECT_CMD_DLG_BUTTON_PAD 5 #define IRRECO_SELECT_CMD_DLG_EXPAND_BUTTONS FALSE @@ -78,7 +79,6 @@ struct _IrrecoSelectCmdDlg { void irreco_cmd_dlg_create_command_list(IrrecoSelectCmdDlg * cmd_dlg); -void irreco_cmd_dlg_setup_scrollbars(GtkWidget * widget); void irreco_cmd_dlg_append_device(IrrecoSelectCmdDlg * cmd_dlg, IrrecoBackendDevice * device); void irreco_cmd_dlg_append_special(IrrecoSelectCmdDlg * cmd_dlg); @@ -131,31 +131,21 @@ gboolean irreco_cmd_dlg_run(IrrecoData *irreco_data, IrrecoCmd * command, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT /* | GTK_DIALOG_NO_SEPARATOR*/, _("Refresh"), IRRECO_RESPONCE_REFRESH, - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, /*_("Device controllers"), IRRECO_RESPONCE_EDIT,*/ NULL); - cmd_dlg.scrolled = gtk_scrolled_window_new(0, 0); + cmd_dlg.scrolled = hildon_pannable_area_new(); - /* Construct dialog. */ - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cmd_dlg.scrolled), - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(cmd_dlg.dialog)->vbox), cmd_dlg.scrolled); irreco_cmd_dlg_create_command_list(&cmd_dlg); - /* Scrollbar setup signal. */ - g_signal_connect(G_OBJECT(cmd_dlg.scrolled), "size-allocate", - G_CALLBACK(irreco_cmd_dlg_setup_scrollbars), - NULL); - /* Min width, max height. */ - gtk_window_resize(GTK_WINDOW(cmd_dlg.dialog), 1, 999); + gtk_window_resize(GTK_WINDOW(cmd_dlg.dialog), 1, 300); gtk_widget_show_all(cmd_dlg.dialog); while (rvalue == -1) { switch (gtk_dialog_run(GTK_DIALOG(cmd_dlg.dialog))) { - case GTK_RESPONSE_REJECT: + case GTK_RESPONSE_DELETE_EVENT: rvalue = FALSE; break; @@ -190,8 +180,9 @@ void irreco_cmd_dlg_create_command_list(IrrecoSelectCmdDlg * cmd_dlg) gtk_widget_destroy(cmd_dlg->vbox); } cmd_dlg->vbox = gtk_vbox_new(FALSE, 0); - gtk_scrolled_window_add_with_viewport( - GTK_SCROLLED_WINDOW(cmd_dlg->scrolled), cmd_dlg->vbox); + hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(cmd_dlg->scrolled), + GTK_WIDGET(cmd_dlg->vbox)); + /* Iterate trough instance, device and command arrays. */ IRRECO_DEBUG("Generating command list\n"); @@ -291,29 +282,6 @@ void irreco_cmd_dlg_set_wait(GtkButton * button, IrrecoSelectCmdDlg * cmd_dlg) IRRECO_RETURN } -/* - * Set up scrollbars so that a tap on the scrollbar will scroll almost one - * screen worth of space. - */ -void irreco_cmd_dlg_setup_scrollbars(GtkWidget * widget) -{ - GtkAdjustment *adjustment; - IRRECO_ENTER - - adjustment = gtk_scrolled_window_get_vadjustment( - GTK_SCROLLED_WINDOW(widget)); - adjustment->step_increment = adjustment->page_size * 0.65; - adjustment->page_increment = adjustment->page_size * 0.65; - - IRRECO_DEBUG("value %f\n", adjustment->value); - IRRECO_DEBUG("lower %f\n", adjustment->lower); - IRRECO_DEBUG("upper %f\n", adjustment->upper); - IRRECO_DEBUG("step_increment %f\n", adjustment->step_increment); - IRRECO_DEBUG("page_increment %f\n", adjustment->page_increment); - IRRECO_DEBUG("page_size %f\n", adjustment->page_size); - - IRRECO_RETURN -} /** @} */ @@ -437,13 +405,13 @@ void irreco_cmd_dlg_append_special(IrrecoSelectCmdDlg * cmd_dlg) cmd_dlg); /* Fullscreen toggle button. */ - button = irreco_cmd_dlg_append_button( +/* button = irreco_cmd_dlg_append_button( &button_append, _(IRRECO_COMMAND_FULLSCREEN_TOGGLE_TITLE)); g_object_set_data(G_OBJECT(button), "IrrecoCmdType", (gpointer) IRRECO_COMMAND_FULLSCREEN_TOGGLE); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(irreco_cmd_dlg_set_built_in), - cmd_dlg); + cmd_dlg);*/ /* Create show remote buttons. */ string = g_string_new(""); diff --git a/irreco/src/core/irreco_device_dlg.c b/irreco/src/core/irreco_device_dlg.c index 0649b66d..e4d4f597 100644 --- a/irreco/src/core/irreco_device_dlg.c +++ b/irreco/src/core/irreco_device_dlg.c @@ -50,8 +50,7 @@ enum { IRRECO_DEVICE_EDIT, IRRECO_DEVICE_DELETE, IRRECO_DEVICE_UPLOAD, - IRRECO_DEVICE_REFERESH, - IRRECO_DEVICE_OK + IRRECO_DEVICE_REFERESH }; @@ -98,6 +97,7 @@ static void irreco_device_dlg_init (IrrecoDeviceDlg *self) { GtkWidget *padding; GtkTreeSelection *select; + GtkWidget *pannablearea; IRRECO_ENTER /* Construct dialog. */ @@ -107,19 +107,23 @@ static void irreco_device_dlg_init (IrrecoDeviceDlg *self) gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), GTK_STOCK_NEW, IRRECO_DEVICE_NEW, - GTK_STOCK_EDIT, IRRECO_DEVICE_EDIT, - GTK_STOCK_DELETE, IRRECO_DEVICE_DELETE, + /*GTK_STOCK_EDIT, IRRECO_DEVICE_EDIT, + GTK_STOCK_DELETE, IRRECO_DEVICE_DELETE,*/ _("Upload"), IRRECO_DEVICE_UPLOAD, - GTK_STOCK_REFRESH, IRRECO_DEVICE_REFERESH, - GTK_STOCK_OK, IRRECO_DEVICE_OK, NULL); /* Add widgets. */ self->vbox = gtk_vbox_new(FALSE, 0); self->listbox = IRRECO_LISTBOX( - irreco_listbox_text_new_with_autosize(0, 700, 100, 250)); + irreco_listbox_text_new());/*_with_autosize(0, 700, 100, 250));*/ + pannablearea = hildon_pannable_area_new(); + + /*gtk_container_add(GTK_CONTAINER(self->vbox), GTK_WIDGET(self->listbox));*/ + gtk_container_add(GTK_CONTAINER(self->vbox), GTK_WIDGET(pannablearea)); +/* gtk_container_add(GTK_CONTAINER(pannablearea), GTK_WIDGET(self->listbox));*/ + hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pannablearea), + GTK_WIDGET(self->listbox)); - gtk_container_add(GTK_CONTAINER(self->vbox), GTK_WIDGET(self->listbox)); padding = irreco_gtk_pad(self->vbox, 8, 8, 8, 8); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(self)->vbox), padding); @@ -309,6 +313,7 @@ void irreco_show_device_dlg(IrrecoData *irreco_data, self = IRRECO_DEVICE_DLG( irreco_device_dlg_new( parent )); self->irreco_data = irreco_data; irreco_device_dlg_populate( self ); + irreco_device_dlg_responce_referesh( self ); gtk_widget_show_all( GTK_WIDGET( self )); while (loop == TRUE) @@ -330,11 +335,11 @@ void irreco_show_device_dlg(IrrecoData *irreco_data, irreco_device_dlg_responce_upload( self ); break; - case IRRECO_DEVICE_REFERESH: +/* case IRRECO_DEVICE_REFERESH: irreco_device_dlg_responce_referesh( self ); - break; + break;*/ - case IRRECO_DEVICE_OK: + case GTK_RESPONSE_DELETE_EVENT: loop = FALSE; break; } @@ -364,13 +369,13 @@ void irreco_show_device_dlg(IrrecoData *irreco_data, static void irreco_device_dlg_selection_changed(GtkTreeSelection *selection, IrrecoDeviceDlg *self) { - IrrecoBackendDevice *device = NULL; +/* IrrecoBackendDevice *device = NULL; GtkWidget *edit_button = NULL; GtkWidget *delete_button = NULL; - GtkWidget *upload_button = NULL; + GtkWidget *upload_button = NULL;*/ IRRECO_ENTER - device = (IrrecoBackendDevice *) irreco_listbox_get_selection_data( +/* device = (IrrecoBackendDevice *) irreco_listbox_get_selection_data( IRRECO_LISTBOX(self->listbox)); if (device == NULL) IRRECO_RETURN; @@ -390,7 +395,7 @@ static void irreco_device_dlg_selection_changed(GtkTreeSelection *selection, gtk_widget_set_sensitive(upload_button, TRUE); } else { gtk_widget_set_sensitive(upload_button, FALSE); - } + }*/ IRRECO_RETURN } diff --git a/irreco/src/core/irreco_device_dlg.h b/irreco/src/core/irreco_device_dlg.h index d5d6f3aa..bce408df 100644 --- a/irreco/src/core/irreco_device_dlg.h +++ b/irreco/src/core/irreco_device_dlg.h @@ -111,7 +111,7 @@ void irreco_show_device_dlg(IrrecoData *irreco_data, GtkWindow *parent); GType irreco_device_dlg_get_type (void); -GtkWidget * irreco_device_dlg_new (GtkWindow *parent); +/*GtkWidget * irreco_device_dlg_new (GtkWindow *parent);*/ #endif /* __IRRECO_DEVICE_DLG_H__ */ diff --git a/irreco/src/core/irreco_hardkey_dlg.c b/irreco/src/core/irreco_hardkey_dlg.c index 87f10737..9cec6568 100644 --- a/irreco/src/core/irreco_hardkey_dlg.c +++ b/irreco/src/core/irreco_hardkey_dlg.c @@ -92,7 +92,7 @@ static void irreco_hardkey_dlg_constructed(GObject *object) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, +/* _("Cancel"), GTK_RESPONSE_NO,*/ GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); @@ -133,7 +133,7 @@ static void irreco_hardkey_dlg_constructed(GObject *object) irreco_gtk_pad(hbox, 8, 8, 8, 8)); /* Fill listbox. */ - irreco_listbox_image_append(IRRECO_LISTBOX_IMAGE(self->keylist), + /*irreco_listbox_image_append(IRRECO_LISTBOX_IMAGE(self->keylist), "Up", (void *) IRRECO_HARDKEY_UP, IRRECO_ICON_HARDKEY_DIR "/up.png"); irreco_listbox_image_append(IRRECO_LISTBOX_IMAGE(self->keylist), @@ -151,17 +151,16 @@ static void irreco_hardkey_dlg_constructed(GObject *object) irreco_listbox_image_append(IRRECO_LISTBOX_IMAGE(self->keylist), "Back", (void *) IRRECO_HARDKEY_BACK, IRRECO_ICON_HARDKEY_DIR "/back.png"); - /* irreco_listbox_image_append(IRRECO_LISTBOX_IMAGE(self->keylist), "Menu", (void *) IRRECO_HARDKEY_MENU, IRRECO_ICON_HARDKEY_DIR "/menu.png"); irreco_listbox_image_append(IRRECO_LISTBOX_IMAGE(self->keylist), "Home", (void *) IRRECO_HARDKEY_HOME, IRRECO_ICON_HARDKEY_DIR "/home.png"); - */ + irreco_listbox_image_append(IRRECO_LISTBOX_IMAGE(self->keylist), "Fullscreen", (void *) IRRECO_HARDKEY_FULLSCREEN, - IRRECO_ICON_HARDKEY_DIR "/fullscreen.png"); + IRRECO_ICON_HARDKEY_DIR "/fullscreen.png");*/ irreco_listbox_image_append(IRRECO_LISTBOX_IMAGE(self->keylist), "Plus", (void *) IRRECO_HARDKEY_PLUS, IRRECO_ICON_HARDKEY_DIR "/plus.png"); diff --git a/irreco/src/core/irreco_input_dlg.c b/irreco/src/core/irreco_input_dlg.c index c150ed3d..1b7afd66 100644 --- a/irreco/src/core/irreco_input_dlg.c +++ b/irreco/src/core/irreco_input_dlg.c @@ -68,7 +68,7 @@ static void irreco_input_dlg_init(IrrecoInputDlg *self) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, +/* _("Cancel"), GTK_RESPONSE_NO,*/ GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); diff --git a/irreco/src/core/irreco_listbox.c b/irreco/src/core/irreco_listbox.c index a16cf913..7b199d1f 100644 --- a/irreco/src/core/irreco_listbox.c +++ b/irreco/src/core/irreco_listbox.c @@ -347,8 +347,9 @@ gboolean irreco_listbox_remove_selected(IrrecoListbox *self) This helps to prevent double selection changed events being sent, when the old row is destroyed (and thus unselected) and selecting another row afterwards. */ - irreco_listbox_set_selection(self, index - 1) - || irreco_listbox_set_selection(self, index + 1); + if(!irreco_listbox_set_selection(self, index - 1)) { + irreco_listbox_set_selection(self, index + 1); + } gtk_list_store_remove(self->list_store, &iter); IRRECO_RETURN_BOOL(TRUE); diff --git a/irreco/src/core/irreco_listbox_text.c b/irreco/src/core/irreco_listbox_text.c index 8db5af0a..825a7e73 100644 --- a/irreco/src/core/irreco_listbox_text.c +++ b/irreco/src/core/irreco_listbox_text.c @@ -18,6 +18,7 @@ */ #include "irreco_listbox_text.h" +#include /** * @addtogroup IrrecoListboxText @@ -37,9 +38,9 @@ /* Prototypes. */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -static void irreco_listbox_text_tree_size_request(GtkWidget *widget, +/*static void irreco_listbox_text_tree_size_request(GtkWidget *widget, GtkRequisition *requisition, - IrrecoListboxText *self); + IrrecoListboxText *self);*/ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Datatypes */ @@ -84,8 +85,12 @@ static void irreco_listbox_text_init(IrrecoListboxText *self) /* Create GtkTreeStore and GtkTreeView */ parent->list_store = gtk_list_store_new( N_COLUMNS, G_TYPE_POINTER, G_TYPE_STRING); - parent->tree_view = gtk_tree_view_new_with_model( - GTK_TREE_MODEL(parent->list_store)); +/* parent->tree_view = gtk_tree_view_new_with_model( + GTK_TREE_MODEL(parent->list_store));*/ + parent->tree_view = GTK_WIDGET(hildon_gtk_tree_view_new_with_model( + 1, + GTK_TREE_MODEL(parent->list_store))); + g_object_unref(G_OBJECT(parent->list_store)); /* Setup column. */ @@ -106,7 +111,7 @@ static void irreco_listbox_text_init(IrrecoListboxText *self) gtk_table_attach_defaults(table, parent->tree_view, 0 ,1, 0, 1); - parent->vscrollbar = gtk_vscrollbar_new(gtk_tree_view_get_vadjustment( +/* parent->vscrollbar = gtk_vscrollbar_new(gtk_tree_view_get_vadjustment( GTK_TREE_VIEW(parent->tree_view))); gtk_table_attach(table, parent->vscrollbar, 1 ,2, 0, 1, GTK_SHRINK, GTK_FILL, 0, 0); @@ -114,15 +119,15 @@ static void irreco_listbox_text_init(IrrecoListboxText *self) parent->hscrollbar = gtk_hscrollbar_new(gtk_tree_view_get_hadjustment( GTK_TREE_VIEW(parent->tree_view))); gtk_table_attach(table, parent->hscrollbar, 0 ,1, 1, 2, - GTK_FILL, GTK_SHRINK, 0, 0); + GTK_FILL, GTK_SHRINK, 0, 0);*/ gtk_box_pack_start(GTK_BOX(self), GTK_WIDGET(table), TRUE, TRUE, 0); /* Connect signals. */ - g_signal_connect(G_OBJECT(IRRECO_LISTBOX(self)->tree_view), + /*g_signal_connect(G_OBJECT(IRRECO_LISTBOX(self)->tree_view), "size-request", G_CALLBACK(irreco_listbox_text_tree_size_request), - self); + self);*/ IRRECO_RETURN } @@ -213,7 +218,7 @@ void irreco_listbox_text_append(IrrecoListboxText *self, * @{ */ -static void irreco_listbox_text_tree_size_request(GtkWidget *widget, +/*static void irreco_listbox_text_tree_size_request(GtkWidget *widget, GtkRequisition *requisition, IrrecoListboxText *self) { @@ -249,7 +254,7 @@ static void irreco_listbox_text_tree_size_request(GtkWidget *widget, } IRRECO_RETURN -} +}*/ /** @} */ diff --git a/irreco/src/core/irreco_login_dlg.c b/irreco/src/core/irreco_login_dlg.c index 1bcd0f0e..f5b4dfb8 100644 --- a/irreco/src/core/irreco_login_dlg.c +++ b/irreco/src/core/irreco_login_dlg.c @@ -103,13 +103,12 @@ static void irreco_login_dlg_init (IrrecoLoginDlg *self) IRRECO_ENTER /* Build the dialog */ - gtk_window_set_title(GTK_WINDOW(self), _("Login to Irreco Database")); + gtk_window_set_title(GTK_WINDOW(self), _("Login to IrrecoDB")); gtk_window_set_modal(GTK_WINDOW(self), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), "Register", IRRECO_LOGIN_REGISTER, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); @@ -381,8 +380,7 @@ gboolean irreco_login_dlg_login(IrrecoLoginDlg *self) IRRECO_ENTER /* TODO Make this horrible bit of code better FIXME */ - star_hash = sha_compute_checksum_for_string( - G_CHECKSUM_SHA1, "******", -1); + star_hash = g_compute_checksum_for_string(G_CHECKSUM_SHA1, "******", -1); is_toggled = irreco_login_dlg_get_stored_toggle_boolean(); @@ -395,8 +393,9 @@ gboolean irreco_login_dlg_login(IrrecoLoginDlg *self) !self->is_pw_entry_messed_with && (strlen(self->password) > 1)) { - tmp_pwhash = sha_compute_checksum_for_string( - G_CHECKSUM_SHA1, self->password, -1); + tmp_pwhash = g_compute_checksum_for_string(G_CHECKSUM_SHA1, + self->password, + -1); if(g_str_equal(tmp_pwhash, stored_pw)) { pwhash = irreco_login_dlg_get_stored_password(); @@ -421,7 +420,7 @@ checkout: "Invalid password."); IRRECO_RETURN_BOOL(FALSE); } else { - pwhash = sha_compute_checksum_for_string( + pwhash = g_compute_checksum_for_string( G_CHECKSUM_SHA1, self->password, -1); } } @@ -551,7 +550,7 @@ gboolean irreco_show_login_dlg(IrrecoData *irreco_data, GtkWindow *parent, self->irreco_data, GTK_WINDOW( self)); break; - case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: is_toggled = irreco_login_dlg_get_stored_toggle_boolean(); if(g_str_equal(is_toggled, "FALSE")) { @@ -591,7 +590,7 @@ gboolean irreco_show_login_dlg(IrrecoData *irreco_data, GtkWindow *parent, break; } } while(loop); - + gtk_widget_destroy(GTK_WIDGET(self)); IRRECO_RETURN_BOOL(rvalue); } diff --git a/irreco/src/core/irreco_login_dlg.h b/irreco/src/core/irreco_login_dlg.h index 30786ae9..597accd8 100644 --- a/irreco/src/core/irreco_login_dlg.h +++ b/irreco/src/core/irreco_login_dlg.h @@ -70,6 +70,7 @@ typedef struct _IrrecoLoginDlgClass IrrecoLoginDlgClass; #include "irreco_dlg.h" #include "irreco_data.h" + /* Include the prototypes for GConf client functions. */ #include diff --git a/irreco/src/core/irreco_remote_download_dlg.c b/irreco/src/core/irreco_remote_download_dlg.c index 6fe501a0..1db11b4e 100644 --- a/irreco/src/core/irreco_remote_download_dlg.c +++ b/irreco/src/core/irreco_remote_download_dlg.c @@ -177,7 +177,6 @@ static void irreco_remote_download_dlg_init(IrrecoRemoteDownloadDlg *self) gtk_dialog_add_buttons(GTK_DIALOG(self), GTK_STOCK_REFRESH, IRRECO_REMOTE_REFRESH, _("Download"), IRRECO_REMOTE_DOWNLOAD, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); /* Create hbox */ @@ -304,7 +303,7 @@ static void irreco_remote_download_dlg_init(IrrecoRemoteDownloadDlg *self) GTK_WRAP_WORD_CHAR); gtk_table_attach(GTK_TABLE(details_table), self->details_comment, 0, 4, 6, 7, GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_size_request(GTK_WIDGET(self->details_comment), 311, -1); + gtk_widget_set_size_request(GTK_WIDGET(self->details_comment), 241, -1); /* Details */ self->details = gtk_scrolled_window_new(NULL, NULL); @@ -312,7 +311,7 @@ static void irreco_remote_download_dlg_init(IrrecoRemoteDownloadDlg *self) GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_widget_set_size_request(GTK_WIDGET(self->details), 355, -1); + gtk_widget_set_size_request(GTK_WIDGET(self->details), 285, -1); /* Create frame for Details */ details_frame = gtk_frame_new(""); @@ -372,7 +371,7 @@ static void irreco_remote_download_dlg_init(IrrecoRemoteDownloadDlg *self) g_object_set (G_OBJECT (self->tree_view), "level-indentation", 0, NULL); gtk_tree_view_set_rubber_banding(self->tree_view, FALSE); - gtk_widget_set_size_request(GTK_WIDGET(self), 696, 396); + gtk_widget_set_size_request(GTK_WIDGET(self), -1, 300); gtk_widget_show_all(GTK_WIDGET(self)); gtk_widget_hide(GTK_WIDGET(self->details)); @@ -1176,7 +1175,7 @@ static gboolean irreco_remote_download_dlg_load_configs( goto end; } - sha1 = sha_compute_checksum_for_string(G_CHECKSUM_SHA1, + sha1 = g_compute_checksum_for_string(G_CHECKSUM_SHA1, file_data->str, -1); if (g_utf8_collate(config->file_hash->str, sha1) != 0) { @@ -1374,6 +1373,8 @@ gboolean irreco_show_remote_download_dlg(IrrecoData *irreco_data, GString *bg_image = g_string_new(""); GString *notification = g_string_new(""); IrrecoDirForeachData dir_data; + GString *tmp; + GString *tmp2; IRRECO_DEBUG("IRRECO_REMOTE_DOWNLOAD\n"); webdb_cache = irreco_data_get_webdb_cache( @@ -1558,16 +1559,27 @@ gboolean irreco_show_remote_download_dlg(IrrecoData *irreco_data, if (bg_image->len < 10) { goto no_bg; } - /* Find bg_image from mmc1 */ - bg_image = g_string_erase(bg_image, 10, 1); - bg_image = g_string_insert_c(bg_image, 10, '1'); - - /* Use mmc2 if bg_image does not exists */ - if (!irreco_file_exists(bg_image->str)) { - bg_image = g_string_erase(bg_image, 10, 1); - bg_image = g_string_insert_c(bg_image, 10, '2'); + + tmp = g_string_new(bg_image->str); + tmp = g_string_erase(tmp, 6, -1); + tmp2 = g_string_new("/media"); + + + IRRECO_PRINTF("VERTAILU"); + IRRECO_PRINTF(tmp->str); + + if(g_string_equal(tmp, tmp2)) + { + bg_image = g_string_erase(bg_image, 0, 11); + bg_image = g_string_prepend(bg_image, "/home/user/MyDocs"); + + IRRECO_PRINTF(bg_image->str); } + IRRECO_PAUSE + g_string_free(tmp, TRUE); + g_string_free(tmp2, TRUE); + /* Set bg-image to layout */ irreco_button_layout_set_bg_image(layout, bg_image->str); @@ -1596,8 +1608,9 @@ gboolean irreco_show_remote_download_dlg(IrrecoData *irreco_data, g_string_free(notification, FALSE); break; } - case GTK_RESPONSE_CANCEL: - IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n"); + + case GTK_RESPONSE_DELETE_EVENT: + IRRECO_DEBUG("GTK_RESPONSE_DELETE_EVENT\n"); loop = FALSE; break; diff --git a/irreco/src/core/irreco_remote_upload_dlg.c b/irreco/src/core/irreco_remote_upload_dlg.c index c675910c..e0eb9eeb 100644 --- a/irreco/src/core/irreco_remote_upload_dlg.c +++ b/irreco/src/core/irreco_remote_upload_dlg.c @@ -106,7 +106,6 @@ static void irreco_remote_upload_dlg_init(IrrecoRemoteUploadDlg *self) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); @@ -544,7 +543,7 @@ gboolean irreco_remote_upload_dlg_send(IrrecoRemoteUploadDlg *self) if (self->remote_uploaded == TRUE) { gtk_dialog_response(GTK_DIALOG(self), - GTK_RESPONSE_CANCEL); + GTK_RESPONSE_DELETE_EVENT); } } @@ -633,18 +632,18 @@ void irreco_show_remote_upload_dlg(IrrecoData *irreco_data, GtkWindow *parent) do { gint response = gtk_dialog_run(GTK_DIALOG(self)); switch (response) { - case GTK_RESPONSE_CANCEL: - IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n"); + case GTK_RESPONSE_DELETE_EVENT: + IRRECO_DEBUG("GTK_RESPONSE_DELETE_EVENT\n"); loop = FALSE; break; case GTK_RESPONSE_OK: IRRECO_DEBUG("GTK_RESPONSE_OK\n"); self->loader_state = LOADER_STATE_INIT; + self->loader_func_id = g_idle_add((GSourceFunc) irreco_remote_upload_dlg_send, self); break; - } } while (loop); diff --git a/irreco/src/core/irreco_select_instance_dlg.c b/irreco/src/core/irreco_select_instance_dlg.c index bb67698c..afde529c 100644 --- a/irreco/src/core/irreco_select_instance_dlg.c +++ b/irreco/src/core/irreco_select_instance_dlg.c @@ -90,7 +90,6 @@ irreco_select_instance_dlg_init (IrrecoSelectInstanceDlg *self) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); @@ -175,7 +174,7 @@ gboolean irreco_show_select_instance_dlg(IrrecoData *irreco_data, while (rvalue == -1) { switch (gtk_dialog_run(GTK_DIALOG(select_instance_dlg))) { - case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: rvalue = FALSE; break; diff --git a/irreco/src/core/irreco_style_browser_dlg.c b/irreco/src/core/irreco_style_browser_dlg.c index 20cf7fed..54a51771 100644 --- a/irreco/src/core/irreco_style_browser_dlg.c +++ b/irreco/src/core/irreco_style_browser_dlg.c @@ -82,9 +82,6 @@ static void irreco_style_browser_dlg_init(IrrecoStyleBrowserDlg *self) gtk_window_set_modal(GTK_WINDOW(self), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); - gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, - NULL); /* Show dialog, hopefully on the left-top corner of the screen. */ gtk_widget_show_all(GTK_WIDGET(self)); diff --git a/irreco/src/core/irreco_theme_creator_backgrounds.c b/irreco/src/core/irreco_theme_creator_backgrounds.c index b6b9b597..0c366d92 100644 --- a/irreco/src/core/irreco_theme_creator_backgrounds.c +++ b/irreco/src/core/irreco_theme_creator_backgrounds.c @@ -386,8 +386,9 @@ irreco_theme_creator_backgrounds_remove_selected(IrrecoThemeCreatorBackgrounds * || irreco_theme_creator_backgrounds_get_iter(self, index, &iter) == FALSE) { IRRECO_RETURN_BOOL(FALSE); } - irreco_theme_creator_backgrounds_set_selection(self, index - 1) - || irreco_theme_creator_backgrounds_set_selection(self, index + 1); + if(!irreco_theme_creator_backgrounds_set_selection(self, index - 1)) { + irreco_theme_creator_backgrounds_set_selection(self, index + 1); + } gtk_list_store_remove(self->store_backgrounds, &iter); IRRECO_RETURN_BOOL(TRUE); diff --git a/irreco/src/core/irreco_theme_creator_buttons.c b/irreco/src/core/irreco_theme_creator_buttons.c index 0f96c1da..b5f31030 100644 --- a/irreco/src/core/irreco_theme_creator_buttons.c +++ b/irreco/src/core/irreco_theme_creator_buttons.c @@ -361,8 +361,9 @@ irreco_theme_creator_buttons_remove_selected(IrrecoThemeCreatorButtons *self) || irreco_theme_creator_buttons_get_iter(self, index, &iter) == FALSE) { IRRECO_RETURN_BOOL(FALSE); } - irreco_theme_creator_buttons_set_selection(self, index - 1) - || irreco_theme_creator_buttons_set_selection(self, index + 1); + if(!irreco_theme_creator_buttons_set_selection(self, index - 1)) { + irreco_theme_creator_buttons_set_selection(self, index + 1); + } gtk_list_store_remove(self->store_buttons, &iter); IRRECO_RETURN_BOOL(TRUE); diff --git a/irreco/src/core/irreco_theme_creator_dlg.c b/irreco/src/core/irreco_theme_creator_dlg.c index 9ab2279e..42f00079 100644 --- a/irreco/src/core/irreco_theme_creator_dlg.c +++ b/irreco/src/core/irreco_theme_creator_dlg.c @@ -143,9 +143,6 @@ static void irreco_theme_creator_dlg_constructed(GObject *object) gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); /*Buttons*/ - self->cancel_button = gtk_dialog_add_button (GTK_DIALOG(self), - _("Cancel"), - GTK_RESPONSE_CANCEL); self->save_button = gtk_dialog_add_button (GTK_DIALOG(self), _("Save"), GTK_RESPONSE_OK); @@ -295,7 +292,7 @@ static void irreco_theme_creator_dlg_constructed(GObject *object) g_signal_connect(G_OBJECT(self->delete_button), "clicked", G_CALLBACK(irreco_theme_creator_dlg_delete_bg_button), self); - gtk_window_set_default_size(GTK_WINDOW(self), 680, 396); + gtk_window_set_default_size(GTK_WINDOW(self), 680, 355); /*gtk_widget_set_size_request(GTK_WIDGET(self), 696, 396);*/ gtk_widget_show_all(GTK_WIDGET(self)); IRRECO_RETURN @@ -620,8 +617,8 @@ irreco_theme_creator_dlg_run(GtkWindow *parent_window, IrrecoData *irreco_data, } break; - case GTK_RESPONSE_CANCEL: - IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n"); + case GTK_RESPONSE_DELETE_EVENT: + IRRECO_DEBUG("GTK_RESPONSE_DELETE_EVENT\n"); _loader_stop(self); loop = FALSE; @@ -651,7 +648,7 @@ irreco_theme_creator_dlg_notebook_changed(GtkNotebook *notebook, switch (page_num){ case ABOUT: - gtk_widget_show(self->cancel_button); +/* gtk_widget_show(self->cancel_button);*/ gtk_widget_show(self->save_button); gtk_widget_hide(self->add_button); gtk_widget_hide(self->edit_button); @@ -661,7 +658,7 @@ irreco_theme_creator_dlg_notebook_changed(GtkNotebook *notebook, break; case BUTTONS: - gtk_widget_hide(self->cancel_button); +/* gtk_widget_hide(self->cancel_button);*/ gtk_widget_hide(self->save_button); gtk_widget_show(self->add_button); gtk_widget_show(self->edit_button); @@ -672,7 +669,7 @@ irreco_theme_creator_dlg_notebook_changed(GtkNotebook *notebook, break; case BACKGROUNDS: - gtk_widget_hide(self->cancel_button); +/* gtk_widget_hide(self->cancel_button);*/ gtk_widget_hide(self->save_button); gtk_widget_show(self->add_button); gtk_widget_show(self->edit_button); diff --git a/irreco/src/core/irreco_theme_creator_dlg.h b/irreco/src/core/irreco_theme_creator_dlg.h index 46b37bd5..a73f407b 100644 --- a/irreco/src/core/irreco_theme_creator_dlg.h +++ b/irreco/src/core/irreco_theme_creator_dlg.h @@ -88,7 +88,6 @@ struct _IrrecoThemeCreatorDlg GtkWidget *notebook; /*Buttons*/ - GtkWidget *cancel_button; GtkWidget *save_button; GtkWidget *add_button; GtkWidget *edit_button; diff --git a/irreco/src/core/irreco_theme_download_dlg.c b/irreco/src/core/irreco_theme_download_dlg.c index 581a97a3..a38bd47a 100644 --- a/irreco/src/core/irreco_theme_download_dlg.c +++ b/irreco/src/core/irreco_theme_download_dlg.c @@ -117,25 +117,24 @@ static void irreco_theme_download_dlg_init(IrrecoThemeDownloadDlg *self) TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); - self->radio1 = gtk_radio_button_new_with_label (NULL, "MMC1"); +/* self->radio1 = gtk_radio_button_new_with_label (NULL, "MMC1"); self->radio2 = gtk_radio_button_new_with_label_from_widget( - GTK_RADIO_BUTTON(self->radio1), "MMC2"); + GTK_RADIO_BUTTON(self->radio1), "MMC2");*/ gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(self)->vbox), self->label); - gtk_box_pack_start_defaults(GTK_BOX( +/* gtk_box_pack_start_defaults(GTK_BOX( GTK_DIALOG(self)->vbox), - self->radio1); + self->radio1);*/ - g_mkdir("/media/mmc1/irreco", 0777); + g_mkdir("/home/user/MyDocs/irreco", 0777); - if(!irreco_is_dir("/media/mmc1/irreco")) { +/* if(!irreco_is_dir("/home/user/MyDocs/irreco")) { gtk_widget_set_sensitive(self->radio1, FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->radio2), @@ -146,7 +145,7 @@ static void irreco_theme_download_dlg_init(IrrecoThemeDownloadDlg *self) gtk_box_pack_start_defaults(GTK_BOX( GTK_DIALOG(self)->vbox), self->radio2); - } + }*/ gtk_widget_show_all(GTK_WIDGET(self)); @@ -313,7 +312,7 @@ static gboolean irreco_theme_download_dlg_bg_loader(IrrecoThemeDownloadDlg *self irreco_theme_download_dlg_loader_stop(self); self->theme_downloaded_successfully = TRUE; gtk_dialog_response(GTK_DIALOG(self), - GTK_RESPONSE_CANCEL); + GTK_RESPONSE_DELETE_EVENT); } IRRECO_RETURN_BOOL(FALSE); } @@ -415,7 +414,7 @@ gboolean irreco_theme_download_dlg_run(IrrecoData *irreco_data, } /*self->webdb_theme = webdb_theme;*/ - g_string_printf(text, "Select saving location\nfor theme: %s", + g_string_printf(text, "Selected theme: %s\nwill be saved under MyDocs/irreco", self->webdb_theme->name->str); gtk_label_set_text(GTK_LABEL(self->label), text->str); g_string_free(text, FALSE); @@ -424,18 +423,15 @@ gboolean irreco_theme_download_dlg_run(IrrecoData *irreco_data, delete_mode = 0; if (gtk_dialog_run( - GTK_DIALOG(self)) == GTK_RESPONSE_CANCEL){ + GTK_DIALOG(self)) == GTK_RESPONSE_DELETE_EVENT){ break; } if (self->loader_func_id != 0) { continue; } - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( - self->radio1))) { - self->theme_folder = "/media/mmc1/irreco/"; - } else { - self->theme_folder = "/media/mmc2/irreco/"; - } + + self->theme_folder = "/home/user/MyDocs/irreco/"; + if(!irreco_is_dir(self->theme_folder)) { g_mkdir(self->theme_folder, 0777); } diff --git a/irreco/src/core/irreco_theme_manager.c b/irreco/src/core/irreco_theme_manager.c index b48db3f4..33560044 100644 --- a/irreco/src/core/irreco_theme_manager.c +++ b/irreco/src/core/irreco_theme_manager.c @@ -58,8 +58,8 @@ IrrecoThemeManager *irreco_theme_manager_new(IrrecoData * irreco_data) (GDestroyNotify)irreco_theme_free, NULL); irreco_theme_manager_read_themes_from_dir(self, IRRECO_THEME_DIR); - irreco_theme_manager_read_themes_from_dir(self, "/media/mmc1/irreco"); - irreco_theme_manager_read_themes_from_dir(self, "/media/mmc2/irreco"); + irreco_theme_manager_read_themes_from_dir(self, "/home/user/MyDocs/irreco"); +/* irreco_theme_manager_read_themes_from_dir(self, "/media/mmc2/irreco");*/ IRRECO_RETURN_PTR(self); } @@ -321,8 +321,8 @@ void irreco_theme_manager_update_theme_manager(IrrecoThemeManager *self) IRRECO_ENTER irreco_theme_manager_read_themes_from_dir(self, IRRECO_THEME_DIR); - irreco_theme_manager_read_themes_from_dir(self, "/media/mmc1/irreco"); - irreco_theme_manager_read_themes_from_dir(self, "/media/mmc2/irreco"); + irreco_theme_manager_read_themes_from_dir(self, "/home/user/MyDocs/irreco"); +/* irreco_theme_manager_read_themes_from_dir(self, "/media/mmc2/irreco");*/ /* Check if some theme is deleted */ IRRECO_STRING_TABLE_FOREACH(self->themes, key, IrrecoTheme *, diff --git a/irreco/src/core/irreco_theme_manager_dlg.c b/irreco/src/core/irreco_theme_manager_dlg.c index f01e31ea..41ea17de 100644 --- a/irreco/src/core/irreco_theme_manager_dlg.c +++ b/irreco/src/core/irreco_theme_manager_dlg.c @@ -24,6 +24,8 @@ #include "irreco_select_instance_dlg.h" #include "irreco_config.h" #include "irreco_theme_download_dlg.h" +#include +#include /** * @addtogroup IrrecoThemeManagerDlg * @ingroup Irreco @@ -197,7 +199,6 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) GtkTreeSelection *select; GtkWidget *label_name; GtkWidget *label_description; - /*GtkWidget *label_rate;*/ GtkWidget *theme_info_frame; GtkWidget *tree_view_frame; GtkWidget *tree_view_hbox; @@ -206,14 +207,12 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) GtkWidget *select_vbox; GtkWidget *versions_hbox; GtkWidget *comment_alignment; - GtkWidget *info_scrollbar; - GtkWidget *scrollbar; GtkWidget *theme_info; GtkWidget *table; GtkWidget *info_vbox; - GtkWidget *done_button; GtkWidget *theme_table; GtkWidget *preview_event_box; + GtkWidget *tree_view_pannable; IRRECO_ENTER @@ -222,38 +221,27 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) /* Construct dialog. */ gtk_window_set_title(GTK_WINDOW(self), _("Theme Manager ")); - /*gtk_window_set_decorated (GTK_WINDOW(self), FALSE);*/ gtk_window_set_modal(GTK_WINDOW(self), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); /*Buttons*/ - self->refresh_button= gtk_dialog_add_button (GTK_DIALOG(self), _("Refresh"), IRRECO_DEVICE_REFRESH); - - self->new_button= gtk_dialog_add_button (GTK_DIALOG(self), - _("New"), GTK_RESPONSE_NONE); + /*self->new_button= gtk_dialog_add_button (GTK_DIALOG(self), + _("New"), GTK_RESPONSE_NONE);*/ self->edit_button= gtk_dialog_add_button (GTK_DIALOG(self), _("Edit"), GTK_RESPONSE_NONE); - self->upload_button= gtk_dialog_add_button (GTK_DIALOG(self), _("Upload"), IRRECO_UPLOAD_THEME); - - self->download_button= gtk_dialog_add_button (GTK_DIALOG(self), _("Download"), IRRECO_DOWNLOAD_THEME); - self->clear_button= gtk_dialog_add_button (GTK_DIALOG(self), _("Delete"), GTK_RESPONSE_NONE); - done_button= gtk_dialog_add_button (GTK_DIALOG(self), - _("Done"), - GTK_RESPONSE_CANCEL); /* Create theme table */ - table = gtk_table_new(7,7,TRUE); gtk_table_set_col_spacings(GTK_TABLE (table), 8); gtk_table_set_row_spacings(GTK_TABLE (table), 8); @@ -266,7 +254,7 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) /* Create Treeview */ self->tree_store = gtk_tree_store_new( N_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_POINTER); - self->tree_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model( + self->tree_view = GTK_TREE_VIEW(hildon_gtk_tree_view_new_with_model(1, GTK_TREE_MODEL(self->tree_store))); renderer = gtk_cell_renderer_text_new(); @@ -277,37 +265,17 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) gtk_box_pack_start(GTK_BOX(tree_view_hbox), GTK_WIDGET(self->tree_view), TRUE, TRUE, 0); - /* Create scrollbar for Treeview */ - - scrollbar = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW( - scrollbar), tree_view_hbox); - /* Create Frame for Treeview */ tree_view_frame = gtk_frame_new(""); gtk_frame_set_label_widget(GTK_FRAME(tree_view_frame), irreco_gtk_label_bold("Themes", 0, 0, 0, 0, 0, 0)); - gtk_container_add(GTK_CONTAINER(tree_view_frame), - GTK_WIDGET(scrollbar)); - /* Create theme_info */ theme_info = gtk_table_new(7, 4, TRUE); gtk_table_set_col_spacings(GTK_TABLE(theme_info), 8); gtk_table_set_row_spacings(GTK_TABLE(theme_info), 8); - /* Scrolled window for info */ - info_scrollbar = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW( - info_scrollbar), - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); - /* Create combobox*/ self->version_store = gtk_tree_store_new( 2, G_TYPE_STRING, G_TYPE_STRING); @@ -316,6 +284,7 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(self->combobox), 1); gtk_combo_box_set_model(GTK_COMBO_BOX(self->combobox), GTK_TREE_MODEL(self->version_store)); + gtk_widget_set_size_request(GTK_WIDGET(self->combobox), -1, 32); theme_table = gtk_table_new(5, 7, TRUE); gtk_table_set_col_spacings(GTK_TABLE(theme_table), 1); @@ -323,6 +292,11 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) info_vbox = gtk_vbox_new(FALSE, 1); + /* Create pannable areas */ + tree_view_pannable = hildon_pannable_area_new(); + hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(tree_view_pannable), tree_view_hbox); + gtk_container_add(GTK_CONTAINER(tree_view_frame), tree_view_pannable); + /*create eventbox*/ preview_event_box = gtk_event_box_new(); self->select_label = gtk_label_new(" Select \ncategory"); @@ -337,7 +311,6 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) gtk_alignment_set_padding(GTK_ALIGNMENT(self->theme_info_alignment), 0, 4, 8, 8); - preview_frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(preview_frame), GTK_SHADOW_OUT); @@ -345,13 +318,12 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) gtk_image_set_from_file(GTK_IMAGE(self->theme_image), NULL); /*Dialog label*/ - - /*label_rate = gtk_label_new(" Rating");*/ label_name = gtk_label_new("Name: "); self->label_creator = gtk_label_new("Author: "); self->label_download= gtk_label_new("Downloads: "); label_description = gtk_label_new("Comment: "); self->label_combobox = gtk_label_new("Version:"); + gtk_widget_set_size_request(GTK_WIDGET(self->label_download), 50, -1); self->theme_name = gtk_label_new(""); self->theme_creator = gtk_label_new(""); @@ -361,14 +333,13 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) comment_alignment = gtk_alignment_new(0, 0, 0, 0); gtk_widget_set_size_request(self->theme_comment, - 330, -1); + 310, -1); gtk_alignment_set_padding(GTK_ALIGNMENT(comment_alignment), 0, 0, 20, 0); gtk_label_set_line_wrap(GTK_LABEL(self->theme_comment), TRUE); gtk_label_set_line_wrap_mode(GTK_LABEL(self->theme_comment), PANGO_WRAP_WORD); - /*gtk_misc_set_alignment(GTK_MISC(label_rate), 0, 0.5);*/ gtk_misc_set_alignment(GTK_MISC(label_name), 0, 0.5); gtk_misc_set_alignment(GTK_MISC(self->label_creator), 0, 0.5); gtk_misc_set_alignment(GTK_MISC(self->label_download), 0, 0.5); @@ -382,18 +353,14 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) /*Attach WidGets to tables*/ - - gtk_table_attach(GTK_TABLE(theme_info), info_scrollbar, - 0, 4, 4, 7, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach_defaults(GTK_TABLE(table), tree_view_frame, 0, 3, 0, 7); gtk_table_attach_defaults(GTK_TABLE(theme_info), - preview_event_box, 3, 4, 0, 3); -/* gtk_table_attach_defaults(GTK_TABLE(self->theme_info), - label_rate, 3, 4, 3, 4);*/ + preview_event_box, 0, 2, 4, 7); + gtk_table_attach_defaults(GTK_TABLE(theme_info), + info_vbox, 0, 4, 3, 4); gtk_table_attach_defaults(GTK_TABLE(theme_info), - theme_table, 0, 3, 0, 4); + theme_table, 0, 4, 0, 3); gtk_table_attach_defaults(GTK_TABLE(theme_table), label_name, 0, 3, 0, 1); gtk_table_attach_defaults(GTK_TABLE(theme_table), @@ -401,11 +368,11 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) gtk_table_attach_defaults(GTK_TABLE(theme_table), self->label_download, 0, 3, 2, 3); gtk_table_attach_defaults(GTK_TABLE(theme_table), - label_description, 0, 3, 4, 5); - gtk_table_attach_defaults(GTK_TABLE(theme_table), + label_description, 0, 3, 3, 4); +/* gtk_table_attach_defaults(GTK_TABLE(theme_table), self->label_combobox, 0, 3, 3, 4); gtk_table_attach_defaults(GTK_TABLE(theme_table), - versions_hbox, 3, 7, 3, 4); + versions_hbox, 3, 7, 3, 4);*/ gtk_table_attach_defaults(GTK_TABLE(table), theme_info_frame, 3, 7, 0, 7); gtk_table_attach(GTK_TABLE(theme_table), self->theme_name, @@ -416,9 +383,6 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) 3, 7, 2, 3, GTK_FILL, GTK_FILL, 0, 0); /*Add WidGets*/ - - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW( - info_scrollbar), info_vbox); gtk_container_add(GTK_CONTAINER(preview_frame), self->theme_image); gtk_container_add(GTK_CONTAINER(preview_event_box), @@ -445,7 +409,6 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) gtk_widget_modify_font (self->select_label, initial_font); initial_font = pango_font_description_from_string ("Sans Bold 12"); - /*gtk_widget_modify_font (label_rate, initial_font);*/ gtk_widget_modify_font (label_name, initial_font); gtk_widget_modify_font (self->label_creator, initial_font); gtk_widget_modify_font (self->label_download, initial_font); @@ -496,17 +459,17 @@ static void irreco_theme_manager_dlg_init(IrrecoThemeManagerDlg *self) "clicked", G_CALLBACK(irreco_theme_manager_dlg_new_theme), self); - g_signal_connect(G_OBJECT(self->new_button), + /*g_signal_connect(G_OBJECT(self->new_button), "clicked", G_CALLBACK(irreco_theme_manager_dlg_new_theme), - self); + self);*/ gtk_tree_view_set_enable_tree_lines(self->tree_view, TRUE); g_object_set (G_OBJECT (self->tree_view), "show-expanders", TRUE, NULL); g_object_set (G_OBJECT (self->tree_view), "level-indentation", 0, NULL); gtk_tree_view_set_rubber_banding(self->tree_view, FALSE); - gtk_widget_set_size_request(GTK_WIDGET(self), 696, 396); + gtk_widget_set_size_request(GTK_WIDGET(self), 696, 306); gtk_widget_show_all(GTK_WIDGET(self)); IRRECO_RETURN @@ -658,12 +621,12 @@ void irreco_theme_manager_dlg_set_layout_button(IrrecoThemeManagerDlg *self) IrrecoThemeButton *, temp_button) button_dir = g_strrstr(temp_button->image_up->str, "/irreco"); - un_mmc1 = g_strconcat("/media/mmc1", button_dir, NULL); - un_mmc2 = g_strconcat("/media/mmc2", button_dir, NULL); + un_mmc1 = g_strconcat("/home/user/MyDocs/irreco", button_dir, NULL); + un_mmc2 = g_strconcat("/home/user/MyDocs/irreco", button_dir, NULL); button_dir = g_strrstr(temp_button->image_down->str, "/irreco"); - pressed_mmc1 = g_strconcat("/media/mmc1", button_dir, NULL); - pressed_mmc2 = g_strconcat("/media/mmc2", button_dir, NULL); + pressed_mmc1 = g_strconcat("/home/user/MyDocs/irreco", button_dir, NULL); + pressed_mmc2 = g_strconcat("/home/user/MyDocs/irreco", button_dir, NULL); if (!irreco_is_file(temp_button->image_up->str)) { @@ -781,17 +744,17 @@ static void irreco_theme_manager_dlg_new_theme(GtkButton *button, IrrecoWindowManager * manager; /* Create temp theme folder */ temp_dir = g_strconcat("cp -r ", self->theme->path->str, " ", - "/media/mmc2/irreco/irreco_temp", NULL); + "/home/user/MyDocs/irreco/irreco_temp", NULL); rm_dir = g_strconcat("rm -r ", - "/media/mmc2/irreco/irreco_temp", NULL); + "/home/user/MyDocs/irreco/irreco_temp", NULL); /* Delete temp dir */ - if (irreco_is_dir("/media/mmc2/irreco/irreco_temp")) { + if (irreco_is_dir("/home/user/MyDocs/irreco/irreco_temp")) { system(rm_dir); } system(temp_dir); new_theme = irreco_theme_new_from_dir( - "/media/mmc2/irreco/irreco_temp"); + "/home/user/MyDocs/irreco/irreco_temp"); irreco_theme_set(new_theme, self->theme->name->str, self->theme->path->str, @@ -1626,8 +1589,8 @@ void irreco_show_theme_manager_dlg(IrrecoData *irreco_data, GtkWindow *parent) " Select \ncategory"); break; - case GTK_RESPONSE_CANCEL: - IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n"); + case GTK_RESPONSE_DELETE_EVENT: + IRRECO_DEBUG("GTK_RESPONSE_DELETE_EVENT\n"); loop = FALSE; break; } @@ -1775,7 +1738,7 @@ irreco_theme_manager_dlg_row_selected_event(GtkTreeSelection *sel, gtk_widget_hide(self->upload_button); gtk_widget_hide(self->download_button); gtk_widget_hide(self->clear_button); - gtk_widget_show(self->new_button); + /*gtk_widget_show(self->new_button);*/ gtk_widget_hide(self->edit_button); @@ -1801,7 +1764,7 @@ irreco_theme_manager_dlg_row_selected_event(GtkTreeSelection *sel, gtk_widget_show(self->clear_button); gtk_widget_hide(self->download_button); gtk_widget_show(self->edit_button); - gtk_widget_hide(self->new_button); + /*gtk_widget_hide(self->new_button);*/ irreco_theme_manager_dlg_display_theme_detail(self, &iter); @@ -1813,7 +1776,7 @@ irreco_theme_manager_dlg_row_selected_event(GtkTreeSelection *sel, gtk_widget_show(self->clear_button); gtk_widget_hide(self->upload_button); gtk_widget_hide(self->download_button); - gtk_widget_show(self->new_button); + /*gtk_widget_show(self->new_button);*/ gtk_widget_hide(self->edit_button); @@ -1846,7 +1809,7 @@ irreco_theme_manager_dlg_row_selected_event(GtkTreeSelection *sel, gtk_widget_hide(self->clear_button); gtk_widget_hide(self->upload_button); gtk_widget_show(self->download_button); - gtk_widget_show(self->new_button); + /*gtk_widget_show(self->new_button);*/ gtk_widget_hide(self->edit_button); diff --git a/irreco/src/core/irreco_theme_save_dlg.c b/irreco/src/core/irreco_theme_save_dlg.c index a984190b..ef8b29b0 100644 --- a/irreco/src/core/irreco_theme_save_dlg.c +++ b/irreco/src/core/irreco_theme_save_dlg.c @@ -63,7 +63,6 @@ static void irreco_theme_save_dlg_constructed(GObject *object) /*Buttons*/ gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); @@ -356,8 +355,8 @@ irreco_theme_save_dlg_run(IrrecoData *irreco_data, IrrecoTheme *irreco_theme, } break; - case GTK_RESPONSE_CANCEL: - IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n"); + case GTK_RESPONSE_DELETE_EVENT: + IRRECO_DEBUG("GTK_RESPONSE_DELETE_EVENT\n"); rvalue = FALSE; loop = FALSE; break; diff --git a/irreco/src/core/irreco_theme_upload_dlg.c b/irreco/src/core/irreco_theme_upload_dlg.c index 0e0c32b6..c02faac7 100644 --- a/irreco/src/core/irreco_theme_upload_dlg.c +++ b/irreco/src/core/irreco_theme_upload_dlg.c @@ -119,8 +119,7 @@ static void irreco_theme_upload_dlg_constructed(GObject *object) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_OK, + _("Upload"), GTK_RESPONSE_OK, NULL); /* Create widgets. */ @@ -839,7 +838,7 @@ static gboolean _get_image_data_and_hash(gchar *img_path, *img_data, buffer_size, img_data_len)) { - *img_sha = sha_compute_checksum_for_data( + *img_sha = g_compute_checksum_for_data( G_CHECKSUM_SHA1, *img_data, *img_data_len); @@ -992,8 +991,8 @@ gboolean irreco_theme_upload_dlg_run(GtkWindow *parent_window, break; - case GTK_RESPONSE_CANCEL: - IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n"); + case GTK_RESPONSE_DELETE_EVENT: + IRRECO_DEBUG("GTK_RESPONSE_DELETE_EVENT\n"); _loader_stop(self); if(self->uploading_started) { irreco_info_dlg(GTK_WINDOW(self), diff --git a/irreco/src/core/irreco_webdb_dlg.c b/irreco/src/core/irreco_webdb_dlg.c index 0f0d05f8..fbf33cd5 100644 --- a/irreco/src/core/irreco_webdb_dlg.c +++ b/irreco/src/core/irreco_webdb_dlg.c @@ -24,6 +24,8 @@ #include "irreco_webdb_register_dlg.h" #include "irreco_select_instance_dlg.h" #include "irreco_config.h" +#include +#include /** @@ -155,18 +157,19 @@ static void irreco_webdb_dlg_init(IrrecoWebdbDlg *self) GtkWidget *config_info_frame; GtkWidget *tree_view_frame; GtkWidget *tree_view_hbox; + PangoFontDescription *initial_font; +/* GtkWidget *pannablearea;*/ IRRECO_ENTER /* Construct dialog. */ gtk_window_set_title(GTK_WINDOW(self), - _("Download device from Irreco Database")); + _("Download device from IrrecoDB")); gtk_window_set_modal(GTK_WINDOW(self), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), GTK_STOCK_REFRESH, IRRECO_DEVICE_REFRESH, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); /* Create hbox */ @@ -181,28 +184,36 @@ static void irreco_webdb_dlg_init(IrrecoWebdbDlg *self) /* Create Treeview */ self->tree_store = gtk_tree_store_new( N_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_POINTER); - self->tree_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model( - GTK_TREE_MODEL(self->tree_store))); +/* self->tree_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model( + GTK_TREE_MODEL(self->tree_store)));*/ + self->tree_view = hildon_gtk_tree_view_new_with_model( + HILDON_UI_MODE_NORMAL, + GTK_TREE_MODEL(self->tree_store)); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( NULL, renderer, "text", TEXT_COL, NULL); - gtk_tree_view_append_column(self->tree_view, column); + gtk_tree_view_append_column(GTK_TREE_VIEW(self->tree_view), column); + /* Treeview to pannablearea */ + /*TODO*/ gtk_box_pack_start(GTK_BOX(tree_view_hbox), GTK_WIDGET(self->tree_view), TRUE, TRUE, 0); /* Create scrollbar for Treeview */ - self->scrollbar = gtk_vscrollbar_new(gtk_tree_view_get_vadjustment( + /*self->scrollbar = gtk_vscrollbar_new(gtk_tree_view_get_vadjustment( GTK_TREE_VIEW(self->tree_view))); gtk_box_pack_start(GTK_BOX(tree_view_hbox), GTK_WIDGET(self->scrollbar), - FALSE, TRUE, 0); + FALSE, TRUE, 0);TODO rm*/ /* Create Frame for Treeview */ tree_view_frame = gtk_frame_new(""); gtk_frame_set_label_widget(GTK_FRAME(tree_view_frame), irreco_gtk_label_bold("Devices", 0, 0, 0, 0, 0, 0)); +/* pannablearea = hildon_pannable_area_new(); + hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pannablearea), tree_view_hbox);*/ + gtk_container_add(GTK_CONTAINER(tree_view_frame), GTK_WIDGET(tree_view_hbox)); @@ -285,6 +296,24 @@ static void irreco_webdb_dlg_init(IrrecoWebdbDlg *self) self->config_download_count, 1, 2, 6, 7, GTK_FILL, GTK_FILL, 0, 0); + /* Resize text */ + initial_font = pango_font_description_from_string ("Sans 9"); + gtk_widget_modify_font (label_user, initial_font); + gtk_widget_modify_font (label_backend, initial_font); + gtk_widget_modify_font (label_category, initial_font); + gtk_widget_modify_font (label_manuf, initial_font); + gtk_widget_modify_font (label_model, initial_font); + gtk_widget_modify_font (label_file_uploaded, initial_font); + gtk_widget_modify_font (label_file_download_count, initial_font); + gtk_widget_modify_font (self->config_user, initial_font); + gtk_widget_modify_font (self->config_backend, initial_font); + gtk_widget_modify_font (self->config_category, initial_font); + gtk_widget_modify_font (self->config_manuf, initial_font); + gtk_widget_modify_font (self->config_model, initial_font); + gtk_widget_modify_font (self->config_uploaded, initial_font); + gtk_widget_modify_font (self->config_download_count, initial_font); + + /* Create frame for config_info */ config_info_frame = gtk_frame_new(""); gtk_frame_set_label_widget(GTK_FRAME(config_info_frame), @@ -304,7 +333,7 @@ static void irreco_webdb_dlg_init(IrrecoWebdbDlg *self) GTK_WIDGET(self->config_info)); /* Setup the selection handler for TREE */ - select = gtk_tree_view_get_selection(self->tree_view); + select = gtk_tree_view_get_selection(GTK_TREE_VIEW(self->tree_view)); gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); /* Signal handlers. */ @@ -326,12 +355,12 @@ static void irreco_webdb_dlg_init(IrrecoWebdbDlg *self) self); - gtk_tree_view_set_enable_tree_lines(self->tree_view, TRUE); + gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(self->tree_view), TRUE); g_object_set (G_OBJECT (self->tree_view), "show-expanders", TRUE, NULL); g_object_set (G_OBJECT (self->tree_view), "level-indentation", 0, NULL); - gtk_tree_view_set_rubber_banding(self->tree_view, FALSE); + gtk_tree_view_set_rubber_banding(GTK_TREE_VIEW(self->tree_view), FALSE); - gtk_widget_set_size_request(GTK_WIDGET(self), 696, 396); + gtk_widget_set_size_request(GTK_WIDGET(self), -1, 335); gtk_widget_show_all(GTK_WIDGET(self)); IRRECO_RETURN } @@ -989,7 +1018,7 @@ static gboolean irreco_webdb_dlg_load_file(IrrecoWebdbDlg *self) goto end; } - sha1 = sha_compute_checksum_for_string(G_CHECKSUM_SHA1, + sha1 = g_compute_checksum_for_string(G_CHECKSUM_SHA1, file_data->str, -1); if (g_utf8_collate(self->config->file_hash->str, sha1) != 0) { @@ -1155,8 +1184,8 @@ void irreco_show_webdb_dlg(IrrecoData *irreco_data, GtkWindow *parent) NULL); break; - case GTK_RESPONSE_CANCEL: - IRRECO_DEBUG("GTK_RESPONSE_CANCEL\n"); + case GTK_RESPONSE_DELETE_EVENT: + IRRECO_DEBUG("GTK_RESPONSE_DELETE_EVENT\n"); loop = FALSE; break; diff --git a/irreco/src/core/irreco_webdb_dlg.h b/irreco/src/core/irreco_webdb_dlg.h index af9b1803..17b04636 100644 --- a/irreco/src/core/irreco_webdb_dlg.h +++ b/irreco/src/core/irreco_webdb_dlg.h @@ -78,7 +78,7 @@ struct _IrrecoWebdbDlg { IrrecoDlg parent; IrrecoData *irreco_data; GtkTreeStore *tree_store; - GtkTreeView *tree_view; + GtkWidget *tree_view; GtkWidget *banner; GtkWidget *hbox; IrrecoWebdbConf *config; diff --git a/irreco/src/core/irreco_webdb_register_dlg.c b/irreco/src/core/irreco_webdb_register_dlg.c index d689937c..a36a91d1 100644 --- a/irreco/src/core/irreco_webdb_register_dlg.c +++ b/irreco/src/core/irreco_webdb_register_dlg.c @@ -19,7 +19,6 @@ */ #include "irreco_webdb_register_dlg.h" -#include "irreco_sha1.h" /** * @addtogroup IrrecoWebdbRegisterDlg @@ -102,7 +101,6 @@ static void irreco_webdb_register_dlg_init (IrrecoWebdbRegisterDlg *self) gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); @@ -283,7 +281,7 @@ gboolean irreco_webdb_register_dlg_add_user(IrrecoWebdbRegisterDlg *self) passwd_unhashed = self->passwd; /* Convert passwd to SHA-1 */ - self->passwd = sha_compute_checksum_for_string(G_CHECKSUM_SHA1, + self->passwd = g_compute_checksum_for_string(G_CHECKSUM_SHA1, self->passwd, strlen(self->passwd)); @@ -349,7 +347,7 @@ void irreco_show_webdb_register_dlg(IrrecoData *irreco_data, GtkWindow *parent) switch(response) { - case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: loop = FALSE; break; case GTK_RESPONSE_OK: diff --git a/irreco/src/core/irreco_webdb_upload_dlg.c b/irreco/src/core/irreco_webdb_upload_dlg.c index 41436659..b23a9d56 100644 --- a/irreco/src/core/irreco_webdb_upload_dlg.c +++ b/irreco/src/core/irreco_webdb_upload_dlg.c @@ -52,7 +52,6 @@ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ enum { -IRRECO_UPLOAD_CANCEL, IRRECO_UPLOAD_OK }; @@ -101,12 +100,11 @@ static void irreco_webdb_upload_dlg_init (IrrecoWebdbUploadDlg *self) IRRECO_ENTER /* Build the dialog */ - gtk_window_set_title(GTK_WINDOW(self), _("Upload device to Irreco Database")); + gtk_window_set_title(GTK_WINDOW(self), _("Upload device to IrrecoDB")); gtk_window_set_modal(GTK_WINDOW(self), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(self), TRUE); gtk_dialog_set_has_separator(GTK_DIALOG(self), FALSE); gtk_dialog_add_buttons(GTK_DIALOG(self), - GTK_STOCK_CANCEL, IRRECO_UPLOAD_CANCEL, GTK_STOCK_OK, IRRECO_UPLOAD_OK, NULL); @@ -363,7 +361,7 @@ gboolean irreco_show_webdb_upload_dlg(IrrecoData *irreco_data, GtkWindow *parent response = gtk_dialog_run(GTK_DIALOG(self)); switch(response) { - case IRRECO_UPLOAD_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: loop = FALSE; break; case IRRECO_UPLOAD_OK: diff --git a/irreco/src/core/irreco_window.c b/irreco/src/core/irreco_window.c index 9956ce5d..3c51ad7f 100644 --- a/irreco/src/core/irreco_window.c +++ b/irreco/src/core/irreco_window.c @@ -37,7 +37,6 @@ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Prototypes */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -static void irreco_window_fix_scrollbar_increment(GtkAdjustment* adjustment); static gboolean irreco_window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer *data); @@ -89,28 +88,14 @@ static void irreco_window_init(IrrecoWindow *self) TRUE); gtk_container_add(GTK_CONTAINER(self), GTK_WIDGET(self->event_box)); - /* Create scrollable GtkLayout. */ - self->scrolled_window = gtk_scrolled_window_new(NULL, NULL); - gtk_container_add(GTK_CONTAINER(self->event_box), - self->scrolled_window); self->layout = gtk_layout_new(NULL, NULL); - gtk_container_add(GTK_CONTAINER(self->scrolled_window), + gtk_container_add(GTK_CONTAINER(self->event_box), self->layout); /* Setup size & scrollbars. */ gtk_layout_set_size(GTK_LAYOUT(self->layout), IRRECO_LAYOUT_WIDTH, IRRECO_LAYOUT_HEIGHT); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW( - self->scrolled_window), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - irreco_window_fix_scrollbar_increment( - gtk_scrolled_window_get_hadjustment( - GTK_SCROLLED_WINDOW(self->scrolled_window))); - irreco_window_fix_scrollbar_increment( - gtk_scrolled_window_get_vadjustment( - GTK_SCROLLED_WINDOW(self->scrolled_window))); /* Signals. */ g_signal_connect(G_OBJECT(self), "delete-event", @@ -145,25 +130,9 @@ GtkWidget* irreco_window_new() * @{ */ -/** - * Set scrollbar so that a click will move - */ -static void irreco_window_fix_scrollbar_increment(GtkAdjustment* adjustment) -{ - gint hidden_area; - IRRECO_ENTER - - hidden_area = adjustment->upper - adjustment->page_size; - adjustment->page_increment = hidden_area; - adjustment->step_increment = hidden_area; - - IRRECO_RETURN -} - /** @} */ - /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Functions */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ @@ -281,10 +250,10 @@ void irreco_window_get_scroll_offset(IrrecoWindow *self, gdouble *x, gdouble *y) { IRRECO_ENTER - *x = gtk_scrolled_window_get_hadjustment( - GTK_SCROLLED_WINDOW(self->scrolled_window))->value; - *y = gtk_scrolled_window_get_vadjustment( - GTK_SCROLLED_WINDOW(self->scrolled_window))->value; + + *x = 0; + *y = 0; + IRRECO_RETURN } @@ -293,30 +262,8 @@ void irreco_window_get_scroll_offset(IrrecoWindow *self, */ void irreco_window_scroll_visible(IrrecoWindow *self, gdouble x, gdouble y) { - GtkAdjustment *x_adjustment, *y_adjustment; IRRECO_ENTER - x_adjustment = gtk_scrolled_window_get_hadjustment( - GTK_SCROLLED_WINDOW(self->scrolled_window)); - y_adjustment = gtk_scrolled_window_get_vadjustment( - GTK_SCROLLED_WINDOW(self->scrolled_window)); - - - if (x_adjustment->value + x_adjustment->page_size < x) { - gtk_adjustment_set_value(x_adjustment, - x - x_adjustment->page_size); - } - if (y_adjustment->value + y_adjustment->page_size < y) { - gtk_adjustment_set_value(y_adjustment, - y - y_adjustment->page_size); - } - if (x_adjustment->value > x) { - gtk_adjustment_set_value(x_adjustment, x); - } - if (y_adjustment->value > y) { - gtk_adjustment_set_value(y_adjustment, y); - } - IRRECO_RETURN } @@ -334,32 +281,20 @@ void irreco_window_toggle_fullscreen(IrrecoWindow *self) { IRRECO_ENTER - if (irreco_window_is_fullscreen(self)) { - gtk_window_unfullscreen(GTK_WINDOW(self)); - } else { - gtk_window_fullscreen(GTK_WINDOW(self)); - } - IRRECO_RETURN } void irreco_window_scrollbar_hide(IrrecoWindow *self) { IRRECO_ENTER - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW( - self->scrolled_window), - GTK_POLICY_NEVER, - GTK_POLICY_NEVER); + IRRECO_RETURN } void irreco_window_scrollbar_show(IrrecoWindow *self) { IRRECO_ENTER - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW( - self->scrolled_window), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); + IRRECO_RETURN } @@ -387,10 +322,8 @@ static gboolean irreco_window_delete_event(GtkWidget *widget, msg = g_string_new(NULL); g_string_printf(msg, _("Exit %s?"), IRRECO_APP_NAME_CONBINED); - if (irreco_yes_no_dlg(GTK_WINDOW(widget), msg->str)) { - gtk_main_quit(); - rvalue = FALSE; - } + gtk_main_quit(); + rvalue = FALSE; g_string_free(msg, TRUE); IRRECO_RETURN_BOOL(rvalue); diff --git a/irreco/src/core/irreco_window.h b/irreco/src/core/irreco_window.h index 5a980946..1fd56d85 100644 --- a/irreco/src/core/irreco_window.h +++ b/irreco/src/core/irreco_window.h @@ -74,7 +74,7 @@ typedef struct _IrrecoWindowClass IrrecoWindowClass; #ifndef __IRRECO_WINDOW_H__ #define __IRRECO_WINDOW_H__ #include "irreco.h" - +#include /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ diff --git a/irreco/src/core/irreco_window_edit.c b/irreco/src/core/irreco_window_edit.c index be17c6d5..f1e1069b 100644 --- a/irreco/src/core/irreco_window_edit.c +++ b/irreco/src/core/irreco_window_edit.c @@ -28,6 +28,8 @@ #include "irreco_hardkey_dlg.h" #include "irreco_webdb_dlg.h" #include "irreco_theme_manager_dlg.h" +#include "irreco_lircdb_dlg.h" +#include /** * @addtogroup IrrecoWindowEdit @@ -58,7 +60,6 @@ struct _ButtonMenuForeachData { void irreco_window_edit_controller_help(IrrecoWindowEdit * edit_window); gboolean irreco_window_edit_expose(GtkWidget * widget, GdkEventExpose * event, IrrecoWindowEdit * edit_window); -static void irreco_window_edit_sync_grid(IrrecoWindowEdit * edit_window); static void irreco_window_edit_draw_background(IrrecoWindowEdit * edit_window); static void irreco_window_load_background(IrrecoWindowEdit * edit_window, const gchar * grid_image_filename, @@ -84,7 +85,9 @@ void irreco_window_edit_main_menu_controllers(GtkMenuItem * menuitem, IrrecoWindowEdit * edit_window); void irreco_window_edit_main_menu_devices(GtkMenuItem * menuitem, IrrecoWindowEdit * edit_window); -void irreco_window_edit_main_menu_download_device(GtkMenuItem * menuitem, +void irreco_window_edit_main_menu_download_irtrans(GtkMenuItem * menuitem, + IrrecoWindowEdit * edit_window); +void irreco_window_edit_main_menu_download_lirc(GtkMenuItem * menuitem, IrrecoWindowEdit * edit_window); void irreco_window_edit_main_menu_newbutton(GtkMenuItem * menuitem, IrrecoWindowEdit * edit_window); @@ -93,20 +96,6 @@ void irreco_window_edit_main_menu_select_button(GtkMenuItem * menuitem, void irreco_window_edit_main_menu_theme_manager(GtkMenuItem * menuitem, IrrecoWindowEdit *edit_window); - -void irreco_window_edit_menu_grid(GtkMenuItem * menuitem, - IrrecoWindowEdit * edit_window); -void irreco_window_edit_main_menu_grid_1(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window); -void irreco_window_edit_main_menu_grid_2(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window); -void irreco_window_edit_main_menu_grid_4(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window); -void irreco_window_edit_main_menu_grid_8(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window); -void irreco_window_edit_main_menu_grid_16(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window); - void irreco_window_edit_button_menu_create(IrrecoWindowEdit * edit_window); void irreco_window_edit_buttons_menu_update(IrrecoWindowEdit * edit_window); void irreco_window_edit_buttons_menu_update_foreach(IrrecoButton * button, @@ -127,7 +116,6 @@ void irreco_window_edit_button_menu_done(GtkMenuItem * menuitem, IrrecoWindowEdit * edit_window); - /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Public functions. */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ @@ -163,7 +151,6 @@ IrrecoWindowEdit *irreco_window_edit_create(IrrecoWindowManager * manager) irreco_window_edit_main_menu_create(edit_window); irreco_window_edit_button_menu_create(edit_window); - irreco_window_edit_sync_grid(edit_window); gtk_window_set_title(irreco_window_get_gtk_window(edit_window->window), _("Edit remote")); IRRECO_RETURN_PTR(edit_window); @@ -305,29 +292,6 @@ gboolean irreco_window_edit_expose(GtkWidget * widget, GdkEventExpose * event, * @{ */ -/** - * Make sure the selected menu item matches the value of edit_window->drag_grid. - */ -static void irreco_window_edit_sync_grid(IrrecoWindowEdit * edit_window) -{ - IRRECO_ENTER - switch (edit_window->drag_grid) { - case 1: gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( - edit_window->menu_grid_1), TRUE); IRRECO_RETURN - case 2: gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( - edit_window->menu_grid_2), TRUE); IRRECO_RETURN - case 4: gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( - edit_window->menu_grid_4), TRUE); IRRECO_RETURN - case 8: gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( - edit_window->menu_grid_8), TRUE); IRRECO_RETURN - case 16: gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( - edit_window->menu_grid_16), TRUE); IRRECO_RETURN - default: IRRECO_ERROR("Unknown grid value \"%i\"\n", - edit_window->drag_grid); IRRECO_RETURN - } - IRRECO_RETURN -} - static void irreco_window_edit_draw_background(IrrecoWindowEdit * edit_window) { gchar *image = NULL; @@ -338,10 +302,6 @@ static void irreco_window_edit_draw_background(IrrecoWindowEdit * edit_window) case 1: image = NULL; grid_pixbuf = NULL; - /* - image = "grid-1x1.png"; - grid_pixbuf = &edit_window->image_grid_1; - */ break; case 2: @@ -589,144 +549,79 @@ void irreco_window_edit_button_release_callback(IrrecoButton * irreco_button, void irreco_window_edit_main_menu_create(IrrecoWindowEdit * edit_window) { - GtkWidget *button_menu; - GtkWidget *grid_menu; - GSList *group; - GtkWidget *menu_grid_1; - GtkWidget *menu_grid_2; - GtkWidget *menu_grid_4; - GtkWidget *menu_grid_8; - GtkWidget *menu_grid_16; IRRECO_ENTER /* Build menu. */ - edit_window->menu = gtk_menu_new(); - edit_window->menu_save = - gtk_menu_item_new_with_label(_("Save remote")); - edit_window->menu_background = - gtk_menu_item_new_with_label(_("Background")); - edit_window->menu_hardkeys = - gtk_menu_item_new_with_label(_("Hardware keys")); - edit_window->menu_controllers = - gtk_menu_item_new_with_label(_("Device Controllers")); - edit_window->menu_devices = - gtk_menu_item_new_with_label(_("Devices")); - edit_window->menu_download_device = - gtk_menu_item_new_with_label(_("Download device")); - edit_window->menu_buttons = - gtk_menu_item_new_with_label(_("Select button")); - edit_window->menu_newbutton = - gtk_menu_item_new_with_label(_("New button")); - edit_window->menu_grid = - gtk_menu_item_new_with_label(_("Snap to grid")); - edit_window->menu_theme_manager = - gtk_menu_item_new_with_label(_("Theme Manager")); - - gtk_menu_append(edit_window->menu, edit_window->menu_save); - gtk_menu_append(edit_window->menu, gtk_separator_menu_item_new()); - gtk_menu_append(edit_window->menu, edit_window->menu_controllers); - gtk_menu_append(edit_window->menu, edit_window->menu_devices); - gtk_menu_append(edit_window->menu, edit_window->menu_download_device); - gtk_menu_append(edit_window->menu, gtk_separator_menu_item_new()); - gtk_menu_append(edit_window->menu, edit_window->menu_hardkeys); - gtk_menu_append(edit_window->menu, edit_window->menu_background); - gtk_menu_append(edit_window->menu, edit_window->menu_theme_manager); - gtk_menu_append(edit_window->menu, gtk_separator_menu_item_new()); - gtk_menu_append(edit_window->menu, edit_window->menu_newbutton); - gtk_menu_append(edit_window->menu, edit_window->menu_buttons); - gtk_menu_append(edit_window->menu, edit_window->menu_grid); - - grid_menu = gtk_menu_new(); - group = NULL; - menu_grid_1 = - gtk_radio_menu_item_new_with_label(group, _("Off")); - group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_grid_1)); - menu_grid_2 = - gtk_radio_menu_item_new_with_label(group, _("2 pixels")); - group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_grid_2)); - menu_grid_4 = - gtk_radio_menu_item_new_with_label(group, _("4 pixels")); - group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_grid_4)); - menu_grid_8 = - gtk_radio_menu_item_new_with_label(group, _("8 pixels")); - group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_grid_8)); - menu_grid_16 = - gtk_radio_menu_item_new_with_label(group, _("16 pixels")); - - gtk_menu_append(grid_menu, menu_grid_1); - gtk_menu_append(grid_menu, menu_grid_2); - gtk_menu_append(grid_menu, menu_grid_4); - gtk_menu_append(grid_menu, menu_grid_8); - gtk_menu_append(grid_menu, menu_grid_16); - - /* Create empty menu. This is just a place holder. The real menu will be - created just in time when the menu is to be shown. */ - button_menu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(edit_window->menu_buttons), - button_menu); + edit_window->menu = GTK_WIDGET( hildon_app_menu_new() ); + edit_window->menu_save = hildon_button_new_with_text(2 | 4, 0, NULL, "Save remote"); + edit_window->menu_background = hildon_button_new_with_text(2 | 4, 0, NULL, "Background"); + edit_window->menu_hardkeys = hildon_button_new_with_text(2 | 4, 0, NULL, "Hardware keys"); + edit_window->menu_controllers = hildon_button_new_with_text(2 | 4, 0, NULL, "Device Controllers"); + edit_window->menu_devices = hildon_button_new_with_text(2 | 4, 0, NULL, "Devices"); + edit_window->menu_download_irtrans = hildon_button_new_with_text( + 2 | 4, 0, NULL, "Download from IrrecoDB"); + edit_window->menu_download_lirc = hildon_button_new_with_text( + 2 | 4, 0, NULL, "Download from LircDB"); + edit_window->menu_newbutton = hildon_button_new_with_text(2 | 4, 0, NULL, "New button"); + edit_window->menu_theme_manager = hildon_button_new_with_text(2 | 4, 0, NULL, "Theme Manager"); + + hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_save)); + hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_controllers)); + /* Enable back when hardkeys are fixed */ + /*hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_hardkeys));*/ + hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_background)); + /* Uncomment when.. never? */ + /*hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_devices));*/ + hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_download_lirc)); + hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_newbutton)); + hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_theme_manager)); + /* Enable when irtrans backend is ported */ + /*hildon_app_menu_append(HILDON_APP_MENU(edit_window->menu), + GTK_BUTTON(edit_window->menu_download_irtrans));*/ /* Show menu. */ - hildon_window_set_menu(HILDON_WINDOW(edit_window->window), - GTK_MENU(edit_window->menu)); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(edit_window->menu_grid), - grid_menu); - gtk_widget_show_all(edit_window->menu); + hildon_window_set_app_menu(HILDON_WINDOW(edit_window->window), + HILDON_APP_MENU(edit_window->menu)); - /** @todo: remove grid 2 completly. */ - gtk_widget_hide(menu_grid_2); + gtk_widget_show_all(edit_window->menu); /* Connect signals. */ - g_signal_connect(G_OBJECT(edit_window->menu_save), "activate", + g_signal_connect(G_OBJECT(edit_window->menu_save), "clicked", G_CALLBACK(irreco_window_edit_main_menu_save), edit_window); - g_signal_connect(G_OBJECT(edit_window->menu_background), "activate", + g_signal_connect(G_OBJECT(edit_window->menu_background), "clicked", G_CALLBACK(irreco_window_edit_main_menu_background), edit_window); - g_signal_connect(G_OBJECT(edit_window->menu_hardkeys), "activate", + g_signal_connect(G_OBJECT(edit_window->menu_hardkeys), "clicked", G_CALLBACK(irreco_window_edit_main_menu_hardkeys), edit_window); - g_signal_connect(G_OBJECT(edit_window->menu_controllers), "activate", + g_signal_connect(G_OBJECT(edit_window->menu_controllers), "clicked", G_CALLBACK(irreco_window_edit_main_menu_controllers), edit_window); - g_signal_connect(G_OBJECT(edit_window->menu_devices), "activate", + g_signal_connect(G_OBJECT(edit_window->menu_devices), "clicked", G_CALLBACK(irreco_window_edit_main_menu_devices), edit_window); - g_signal_connect(G_OBJECT(edit_window->menu_download_device), - "activate", - G_CALLBACK(irreco_window_edit_main_menu_download_device), - edit_window); - g_signal_connect(G_OBJECT(edit_window->menu_newbutton), "activate", - G_CALLBACK(irreco_window_edit_main_menu_newbutton), - edit_window); - g_signal_connect(G_OBJECT(edit_window->menu_grid), "activate", - G_CALLBACK(irreco_window_edit_menu_grid), - edit_window); - - g_signal_connect(G_OBJECT(menu_grid_1), "toggled", - G_CALLBACK(irreco_window_edit_main_menu_grid_1), - edit_window); - g_signal_connect(G_OBJECT(menu_grid_2), "toggled", - G_CALLBACK(irreco_window_edit_main_menu_grid_2), + g_signal_connect(G_OBJECT(edit_window->menu_download_irtrans), "clicked", + G_CALLBACK(irreco_window_edit_main_menu_download_irtrans), edit_window); - g_signal_connect(G_OBJECT(menu_grid_4), "toggled", - G_CALLBACK(irreco_window_edit_main_menu_grid_4), + g_signal_connect(G_OBJECT(edit_window->menu_download_lirc), "clicked", + G_CALLBACK(irreco_window_edit_main_menu_download_lirc), edit_window); - g_signal_connect(G_OBJECT(menu_grid_8), "toggled", - G_CALLBACK(irreco_window_edit_main_menu_grid_8), - edit_window); - g_signal_connect(G_OBJECT(menu_grid_16), "toggled", - G_CALLBACK(irreco_window_edit_main_menu_grid_16), + g_signal_connect(G_OBJECT(edit_window->menu_newbutton), "clicked", + G_CALLBACK(irreco_window_edit_main_menu_newbutton), edit_window); - g_signal_connect(G_OBJECT(edit_window->menu_theme_manager), "activate", + g_signal_connect(G_OBJECT(edit_window->menu_theme_manager), "clicked", G_CALLBACK(irreco_window_edit_main_menu_theme_manager), edit_window); - /* Store pointers. */ - edit_window->menu_grid_1 = menu_grid_1; - edit_window->menu_grid_2 = menu_grid_2; - edit_window->menu_grid_4 = menu_grid_4; - edit_window->menu_grid_8 = menu_grid_8; - edit_window->menu_grid_16 = menu_grid_16; IRRECO_RETURN } @@ -815,7 +710,7 @@ void irreco_window_edit_main_menu_devices(GtkMenuItem * menuitem, IRRECO_RETURN } -void irreco_window_edit_main_menu_download_device(GtkMenuItem * menuitem, +void irreco_window_edit_main_menu_download_irtrans(GtkMenuItem * menuitem, IrrecoWindowEdit * edit_window) { IRRECO_ENTER @@ -824,6 +719,17 @@ void irreco_window_edit_main_menu_download_device(GtkMenuItem * menuitem, edit_window->window)); IRRECO_RETURN } + +void irreco_window_edit_main_menu_download_lirc(GtkMenuItem * menuitem, + IrrecoWindowEdit * edit_window) +{ + IRRECO_ENTER + irreco_show_lircdb_dlg(edit_window->irreco_data, + irreco_window_get_gtk_window( + edit_window->window)); + IRRECO_RETURN +} + void irreco_window_edit_main_menu_newbutton(GtkMenuItem * menuitem, IrrecoWindowEdit * edit_window) { @@ -838,20 +744,6 @@ void irreco_window_edit_main_menu_newbutton(GtkMenuItem * menuitem, edit_window->irreco_data->new_button_dlg, button); irreco_button_create_widget(button); } - irreco_window_edit_buttons_menu_update(edit_window); - IRRECO_RETURN -} - -void irreco_window_edit_main_menu_select_button(GtkMenuItem * menuitem, - IrrecoButton * irreco_button) -{ - IRRECO_ENTER - irreco_button_to_front(irreco_button); - irreco_window_edit_button_menu_show(irreco_button, (IrrecoWindowEdit *) - irreco_button_layout_get_callback_data( - irreco_button->irreco_layout)); - irreco_button_flash(irreco_button); - IRRECO_RETURN } @@ -872,80 +764,6 @@ void irreco_window_edit_main_menu_theme_manager(GtkMenuItem * menuitem, -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -/* Grid menu callback functions. */ -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ - -/** - * @name Grid menu callback functions - * @{ - */ - -void irreco_window_edit_menu_grid(GtkMenuItem * menuitem, - IrrecoWindowEdit * edit_window) -{ - IRRECO_ENTER - IRRECO_RETURN -} - -void irreco_window_edit_main_menu_grid_1(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window) -{ - IRRECO_ENTER - if (gtk_check_menu_item_get_active(menuitem)) { - edit_window->drag_grid = 1; - irreco_window_edit_draw_background(edit_window); - } - IRRECO_RETURN -} - -void irreco_window_edit_main_menu_grid_2(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window) -{ - IRRECO_ENTER - if (gtk_check_menu_item_get_active(menuitem)) { - edit_window->drag_grid = 2; - irreco_window_edit_draw_background(edit_window); - } - IRRECO_RETURN -} - -void irreco_window_edit_main_menu_grid_4(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window) -{ - IRRECO_ENTER - if (gtk_check_menu_item_get_active(menuitem)) { - edit_window->drag_grid = 4; - irreco_window_edit_draw_background(edit_window); - } - IRRECO_RETURN -} - -void irreco_window_edit_main_menu_grid_8(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window) -{ - IRRECO_ENTER - if (gtk_check_menu_item_get_active(menuitem)) { - edit_window->drag_grid = 8; - irreco_window_edit_draw_background(edit_window); - } - IRRECO_RETURN -} - -void irreco_window_edit_main_menu_grid_16(GtkCheckMenuItem * menuitem, - IrrecoWindowEdit * edit_window) -{ - IRRECO_ENTER - if (gtk_check_menu_item_get_active(menuitem)) { - edit_window->drag_grid = 16; - irreco_window_edit_draw_background(edit_window); - } - IRRECO_RETURN -} - -/** @} */ - - /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Button menu construction. */ @@ -965,8 +783,7 @@ void irreco_window_edit_button_menu_create(IrrecoWindowEdit * edit_window) GtkWidget *button_menu_front; GtkWidget *button_menu_edit; GtkWidget *button_menu_delete; - GtkWidget *button_menu_separator; - GtkWidget *button_menu_done; + IRRECO_ENTER /* Create menu. */ @@ -974,14 +791,10 @@ void irreco_window_edit_button_menu_create(IrrecoWindowEdit * edit_window) button_menu_front = gtk_menu_item_new_with_label(_("Bring to front")); button_menu_edit = gtk_menu_item_new_with_label(_("Edit button")); button_menu_delete = gtk_menu_item_new_with_label(_("Delete button")); - button_menu_separator = gtk_separator_menu_item_new(); - button_menu_done = gtk_menu_item_new_with_label(_("Done")); gtk_menu_append(button_menu, button_menu_front); gtk_menu_append(button_menu, button_menu_edit); gtk_menu_append(button_menu, button_menu_delete); - gtk_menu_append(button_menu, button_menu_separator); - gtk_menu_append(button_menu, button_menu_done); /* Connect signals. */ g_signal_connect(G_OBJECT(button_menu_front), "activate", @@ -990,9 +803,6 @@ void irreco_window_edit_button_menu_create(IrrecoWindowEdit * edit_window) g_signal_connect(G_OBJECT(button_menu_edit), "activate", G_CALLBACK(irreco_window_edit_button_menu_edit), edit_window); - g_signal_connect(G_OBJECT(button_menu_edit), "activate", - G_CALLBACK(irreco_window_edit_button_menu_done), - edit_window); g_signal_connect(G_OBJECT(button_menu_delete), "activate", G_CALLBACK(irreco_window_edit_button_menu_delete), edit_window); @@ -1000,60 +810,6 @@ void irreco_window_edit_button_menu_create(IrrecoWindowEdit * edit_window) edit_window->button_menu = button_menu; gtk_widget_show_all(GTK_WIDGET(button_menu)); - irreco_window_edit_buttons_menu_update(edit_window); - IRRECO_RETURN -} - -/** - * Generates buttons submenu just in time. - */ -void irreco_window_edit_buttons_menu_update(IrrecoWindowEdit * edit_window) -{ - ButtonMenuForeachData foreach_data; - IRRECO_ENTER - - /* Are there any buttons? */ - if (edit_window->irreco_layout->button_array->len == 0) { - gtk_widget_set_sensitive(GTK_WIDGET(edit_window->menu_buttons), - FALSE); - IRRECO_RETURN - } else { - gtk_widget_set_sensitive(GTK_WIDGET(edit_window->menu_buttons), - TRUE); - } - - /* Foreach loop */ - foreach_data.button_menu = gtk_menu_new(); - foreach_data.i = edit_window->irreco_layout->button_array->len; - g_ptr_array_foreach( - edit_window->irreco_layout->button_array, - G_FUNC(irreco_window_edit_buttons_menu_update_foreach), - &foreach_data); - - /* Connect the new submenu to the main menu. */ - gtk_menu_item_set_submenu( - GTK_MENU_ITEM(edit_window->menu_buttons), - foreach_data.button_menu); - gtk_widget_show_all(GTK_WIDGET(foreach_data.button_menu)); - - IRRECO_RETURN -} - -void irreco_window_edit_buttons_menu_update_foreach(IrrecoButton * button, - ButtonMenuForeachData * data) -{ - GtkWidget *item; - gchar label[100]; - GCallback callback; - IRRECO_ENTER - - g_snprintf(label, 100, "%i: %s", data->i--, - button->title); - item = gtk_menu_item_new_with_label(label); - gtk_menu_shell_prepend(GTK_MENU_SHELL(data->button_menu), item); - callback = G_CALLBACK(irreco_window_edit_main_menu_select_button); - g_signal_connect(G_OBJECT(item), "activate", callback, button); - IRRECO_RETURN } @@ -1127,7 +883,6 @@ void irreco_window_edit_button_menu_show_position(GtkMenu * menu, /** @} */ - /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Button menu callbacks. */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ @@ -1173,7 +928,6 @@ void irreco_window_edit_button_menu_delete(GtkMenuItem * menuitem, if (irreco_yes_no_dlg(irreco_window_get_gtk_window(edit_window->window), _("Delete button?"))) { irreco_button_destroy(edit_window->button_menu_target); - irreco_window_edit_buttons_menu_update(edit_window); } IRRECO_RETURN } diff --git a/irreco/src/core/irreco_window_edit.h b/irreco/src/core/irreco_window_edit.h index 0aff3165..a1eaf85e 100644 --- a/irreco/src/core/irreco_window_edit.h +++ b/irreco/src/core/irreco_window_edit.h @@ -76,17 +76,11 @@ struct _IrrecoWindowEdit { GtkWidget *menu_save; GtkWidget *menu_controllers; GtkWidget *menu_devices; - GtkWidget *menu_download_device; + GtkWidget *menu_download_irtrans; + GtkWidget *menu_download_lirc; GtkWidget *menu_background; GtkWidget *menu_hardkeys; - GtkWidget *menu_buttons; GtkWidget *menu_newbutton; - GtkWidget *menu_grid; - GtkWidget *menu_grid_1; - GtkWidget *menu_grid_2; - GtkWidget *menu_grid_4; - GtkWidget *menu_grid_8; - GtkWidget *menu_grid_16; GtkWidget *button_menu; IrrecoButton *button_menu_target; diff --git a/irreco/src/core/irreco_window_user.c b/irreco/src/core/irreco_window_user.c index 30b52035..13b44c46 100644 --- a/irreco/src/core/irreco_window_user.c +++ b/irreco/src/core/irreco_window_user.c @@ -23,6 +23,8 @@ #include "irreco_input_dlg.h" #include "irreco_config.h" #include "irreco_webdb_upload_dlg.h" +#include +#include "irreco_select_remote_dlg.h" /** * @addtogroup IrrecoWindowUser @@ -43,9 +45,6 @@ void irreco_window_user_draw_background(IrrecoWindowUser * user_window); void irreco_window_user_main_menu_create(IrrecoWindowUser * user_window); void irreco_window_user_main_menu_download(GtkMenuItem * menuitem, IrrecoWindowUser * user_window); -void irreco_window_user_create_show_remote_menu(IrrecoWindowUser * user_window); -void irreco_window_user_create_show_remote_menu_foreach(IrrecoButtonLayout * layout, - GtkWidget * menu); void irreco_window_user_new_remote(GtkMenuItem * menuitem, IrrecoWindowUser * user_window); void irreco_window_user_edit_remote(GtkMenuItem * menuitem, IrrecoWindowUser * user_window); void irreco_window_user_main_menu_rename(GtkMenuItem * menuitem, @@ -54,9 +53,8 @@ void irreco_window_user_main_menu_upload(GtkMenuItem * menuitem, IrrecoWindowUser * user_window); void irreco_window_user_delete_remote(GtkMenuItem * menuitem, IrrecoWindowUser * user_window); -void irreco_window_user_show_remote(GtkMenuItem * menuitem, IrrecoWindowUser * user_window); +void irreco_window_user_show_remote(GtkButton *button, IrrecoWindowUser * user_window); void irreco_window_user_menu_about(GtkMenuItem * menuitem, IrrecoWindowUser * user_window); -void irreco_window_user_show_remote_menu(GtkMenuItem * menuitem, IrrecoButtonLayout * layout); void irreco_window_user_button_release(IrrecoButton * irreco_button, IrrecoWindowUser * user_window); void irreco_window_user_execute_start(IrrecoWindowUser * user_window, @@ -64,8 +62,6 @@ void irreco_window_user_execute_start(IrrecoWindowUser * user_window, IrrecoButton * irreco_button); void irreco_window_user_execute_finish(IrrecoCmdChain * cmd_chain, IrrecoWindowUser * user_window); -void irreco_window_user_fullscreen_toggled(GtkCheckMenuItem * checkmenuitem, - IrrecoWindowUser * user_window); gboolean irreco_window_user_key_press(GtkWidget * widget, GdkEventKey * event, IrrecoWindowUser * user_window); gboolean irreco_window_user_window_state_event(GtkWidget *widget, @@ -73,7 +69,6 @@ gboolean irreco_window_user_window_state_event(GtkWidget *widget, IrrecoWindowUser *user_window); - /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Public api. */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ @@ -102,7 +97,7 @@ IrrecoWindowUser *irreco_window_user_create(IrrecoWindowManager * manager) user_window->window = irreco_window_create(); irreco_window_user_main_menu_create(user_window); - irreco_window_user_create_show_remote_menu(user_window); +/* irreco_window_user_create_show_remote_menu(user_window);*/ g_signal_connect(G_OBJECT(user_window->window), "key-press-event", @@ -193,7 +188,6 @@ void irreco_window_user_set_layout(IrrecoWindowUser * user_window, layout, irreco_window_user_button_release); irreco_button_layout_set_callback_data(layout, user_window); irreco_window_user_draw_background(user_window); - irreco_window_user_create_show_remote_menu(user_window); IRRECO_RETURN } @@ -292,135 +286,76 @@ void irreco_window_user_main_menu_create(IrrecoWindowUser * user_window) IRRECO_ENTER /* Build menu. */ - user_window->menu = gtk_menu_new(); - user_window->menu_new_remote = - gtk_menu_item_new_with_label(_("New remote")); - user_window->menu_download_remote = - gtk_menu_item_new_with_label(_("Download remote")); - user_window->menu_edit_remote = - gtk_menu_item_new_with_label(_("Edit remote")); - user_window->menu_rename_remote = - gtk_menu_item_new_with_label(_("Rename remote")); - user_window->menu_upload_remote = - gtk_menu_item_new_with_label(_("Upload remote")); - user_window->menu_delete_remote = - gtk_menu_item_new_with_label(_("Delete remote")); - user_window->menu_show_remote = - gtk_menu_item_new_with_label(_("Show remote")); - user_window->menu_fullscreen = - gtk_check_menu_item_new_with_mnemonic(_("Fullscreen")); - user_window->menu_about = - gtk_menu_item_new_with_label(_("About")); - - gtk_menu_append(user_window->menu, user_window->menu_new_remote); - gtk_menu_append(user_window->menu, user_window->menu_edit_remote); - gtk_menu_append(user_window->menu, user_window->menu_rename_remote); - gtk_menu_append(user_window->menu, user_window->menu_download_remote); - gtk_menu_append(user_window->menu, user_window->menu_upload_remote); - gtk_menu_append(user_window->menu, user_window->menu_delete_remote); - gtk_menu_append(user_window->menu, gtk_separator_menu_item_new()); - gtk_menu_append(user_window->menu, user_window->menu_show_remote); - gtk_menu_append(user_window->menu, user_window->menu_fullscreen); - gtk_menu_append(user_window->menu, gtk_separator_menu_item_new()); - gtk_menu_append(user_window->menu, user_window->menu_about); + user_window->menu = GTK_WIDGET( hildon_app_menu_new() ); + user_window->menu_new_remote = hildon_button_new_with_text(2 | 4, 0, NULL, "New remote"); + user_window->menu_download_remote = hildon_button_new_with_text(2 | 4, 0, NULL, "Download remote"); + user_window->menu_edit_remote = hildon_button_new_with_text(2 | 4, 0, NULL, "Edit remote"); + user_window->menu_rename_remote = hildon_button_new_with_text(2 | 4, 0, NULL, "Rename remote"); + user_window->menu_upload_remote = hildon_button_new_with_text(2 | 4, 0, NULL, "Upload remote"); + user_window->menu_delete_remote = hildon_button_new_with_text(2 | 4, 0, NULL, "Delete remote"); + user_window->menu_show_remote = hildon_button_new_with_text(2 | 4, 0, NULL, "Select remote"); + user_window->menu_about = hildon_button_new_with_text(2 | 4, 0, NULL, "About Irreco"); + + hildon_app_menu_append(HILDON_APP_MENU(user_window->menu), + GTK_BUTTON(user_window->menu_new_remote)); + hildon_app_menu_append(HILDON_APP_MENU(user_window->menu), + GTK_BUTTON(user_window->menu_download_remote)); + hildon_app_menu_append(HILDON_APP_MENU(user_window->menu), + GTK_BUTTON(user_window->menu_edit_remote)); + hildon_app_menu_append(HILDON_APP_MENU(user_window->menu), + GTK_BUTTON(user_window->menu_upload_remote)); + hildon_app_menu_append(HILDON_APP_MENU(user_window->menu), + GTK_BUTTON(user_window->menu_rename_remote)); + hildon_app_menu_append(HILDON_APP_MENU(user_window->menu), + GTK_BUTTON(user_window->menu_show_remote)); + hildon_app_menu_append(HILDON_APP_MENU(user_window->menu), + GTK_BUTTON(user_window->menu_delete_remote)); + hildon_app_menu_append(HILDON_APP_MENU(user_window->menu), + GTK_BUTTON(user_window->menu_about)); /* Show menu. */ - hildon_window_set_menu(HILDON_WINDOW(user_window->window), - GTK_MENU(user_window->menu)); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(user_window->menu_show_remote), - gtk_menu_new()); + hildon_window_set_app_menu(HILDON_WINDOW(user_window->window), + HILDON_APP_MENU(user_window->menu)); gtk_widget_show_all(user_window->menu); /* Connect signals. */ g_signal_connect(G_OBJECT(user_window->menu_new_remote), - "activate", + "clicked", G_CALLBACK(irreco_window_user_new_remote), user_window); g_signal_connect(G_OBJECT(user_window->menu_download_remote), - "activate", + "clicked", G_CALLBACK(irreco_window_user_main_menu_download), user_window); g_signal_connect(G_OBJECT(user_window->menu_edit_remote), - "activate", + "clicked", G_CALLBACK(irreco_window_user_edit_remote), user_window); g_signal_connect(G_OBJECT(user_window->menu_rename_remote), - "activate", + "clicked", G_CALLBACK(irreco_window_user_main_menu_rename), user_window); g_signal_connect(G_OBJECT(user_window->menu_upload_remote), - "activate", + "clicked", G_CALLBACK(irreco_window_user_main_menu_upload), user_window); g_signal_connect(G_OBJECT(user_window->menu_delete_remote), - "activate", + "clicked", G_CALLBACK(irreco_window_user_delete_remote), user_window); g_signal_connect(G_OBJECT(user_window->menu_show_remote), - "activate", + "clicked", G_CALLBACK(irreco_window_user_show_remote), user_window); - user_window->menu_fullscreen_handler = g_signal_connect( - G_OBJECT(user_window->menu_fullscreen), - "toggled", - G_CALLBACK(irreco_window_user_fullscreen_toggled), - user_window); g_signal_connect(G_OBJECT(user_window->menu_about), - "activate", + "clicked", G_CALLBACK(irreco_window_user_menu_about), user_window); IRRECO_RETURN } -/** - * Generates buttons submenu just in time. - */ -void irreco_window_user_create_show_remote_menu(IrrecoWindowUser * user_window) -{ - GtkWidget *menu = NULL; - IrrecoStringTable *table = NULL; - GCallback callback = G_CALLBACK(irreco_window_user_show_remote_menu); - GSList *group = NULL; - GtkWidget* item = NULL; - IRRECO_ENTER - - g_assert(user_window != NULL); - - /* Generate ratio button menu. */ - menu = gtk_menu_new(); - table = user_window->irreco_data->irreco_layout_array; - IRRECO_STRING_TABLE_FOREACH(table, key, IrrecoButtonLayout *, layout) - - /* Create menuitem. */ - item = gtk_radio_menu_item_new_with_label( - group, irreco_button_layout_get_name(layout)); - group = gtk_radio_menu_item_get_group( - GTK_RADIO_MENU_ITEM(item)); - gtk_menu_append(menu, item); - - /* Attach user window pointer to object. */ - g_object_set_data(G_OBJECT(item), "IrrecoWindowUser", - user_window); - - /* Check currently active layout. */ - if (layout == user_window->irreco_layout) { - gtk_check_menu_item_set_active( - GTK_CHECK_MENU_ITEM(item), TRUE); - } - g_signal_connect(G_OBJECT(item), "activate", callback, layout); - IRRECO_STRING_TABLE_FOREACH_END - - gtk_menu_item_set_submenu(GTK_MENU_ITEM(user_window->menu_show_remote), - menu); - gtk_widget_show_all(menu); - - IRRECO_RETURN -} - /** @} */ - - /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Main menu callback functions. */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ @@ -491,7 +426,6 @@ void irreco_window_user_main_menu_rename(GtkMenuItem * menuitem, irreco_window_get_gtk_window( user_window->window), _("Rename remote"))); irreco_input_dlg_set_label(input, _("Name")); - irreco_input_dlg_set_ok_button_text(input, _("Rename")); irreco_input_dlg_set_entry(input, irreco_button_layout_get_name( user_window->irreco_layout)); @@ -508,7 +442,7 @@ void irreco_window_user_main_menu_rename(GtkMenuItem * menuitem, } while (TRUE); irreco_config_save_layouts(user_window->irreco_data); - irreco_window_user_create_show_remote_menu(user_window); +/* irreco_window_user_create_show_remote_menu(user_window);*/ gtk_widget_destroy(GTK_WIDGET(input)); IRRECO_RETURN } @@ -522,8 +456,6 @@ void irreco_window_user_main_menu_upload(GtkMenuItem * menuitem, irreco_window_get_gtk_window( user_window->window)); - irreco_window_user_create_show_remote_menu(user_window); - IRRECO_RETURN } @@ -563,7 +495,6 @@ void irreco_window_user_delete_remote(GtkMenuItem * menuitem, irreco_string_table_index(irreco_data->irreco_layout_array, index, NULL, (gpointer *) &irreco_layout); - /*irreco_window_user_set_layout(user_window, irreco_layout);*/ irreco_window_manager_set_layout(user_window->manager, irreco_layout); } @@ -574,49 +505,24 @@ void irreco_window_user_delete_remote(GtkMenuItem * menuitem, /** * Pop up a info message if the user has not created any remotes. */ -void irreco_window_user_show_remote(GtkMenuItem * menuitem, - IrrecoWindowUser * user_window) + +void irreco_window_user_show_remote(GtkButton *button, + IrrecoWindowUser *user_window) { IRRECO_ENTER - /* if (irreco_string_table_is_empty( user_window->irreco_data->irreco_layout_array)) { irreco_info_dlg(irreco_window_get_gtk_window( user_window->window), _(IRRECO_NO_REMOTE_HELP)); } else { - irreco_window_user_create_show_remote_menu(user_window); - } - */ - - IRRECO_RETURN -} - -void irreco_window_user_show_remote_menu(GtkMenuItem * menuitem, - IrrecoButtonLayout * layout) -{ - IrrecoWindowUser *user_window; - IRRECO_ENTER - - if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) { - user_window = (IrrecoWindowUser *) g_object_get_data( - G_OBJECT(menuitem), "IrrecoWindowUser"); - g_assert(user_window != NULL); - irreco_window_manager_set_layout(user_window->manager, layout); + irreco_show_select_remote_dlg(user_window); } IRRECO_RETURN } -void irreco_window_user_fullscreen_toggled(GtkCheckMenuItem * checkmenuitem, - IrrecoWindowUser * user_window) -{ - IRRECO_ENTER - irreco_window_toggle_fullscreen(user_window->window); - IRRECO_RETURN -} - void irreco_window_user_menu_about(GtkMenuItem * menuitem, IrrecoWindowUser * user_window) { @@ -750,7 +656,6 @@ gboolean irreco_window_user_create_new_remote(IrrecoData *irreco_data, input_dlg = IRRECO_INPUT_DLG(irreco_input_dlg_new(parent, _("New remote"))); irreco_input_dlg_set_label(input_dlg, _("Name")); - irreco_input_dlg_set_ok_button_text(input_dlg, _("Create")); /* Loop until we get a name, or user cancels. */ while (loop == TRUE && irreco_show_input_dlg(input_dlg)) { diff --git a/irreco/src/util/Makefile.am b/irreco/src/util/Makefile.am index a370ccb8..763f1da4 100644 --- a/irreco/src/util/Makefile.am +++ b/irreco/src/util/Makefile.am @@ -2,7 +2,7 @@ irreco_util_LTLIBRARIES = lib_irreco_util.la irreco_utildir = $(libdir) -lib_irreco_util_la_LIBADD = $(IRRECO_UTIL_LIBS) +lib_irreco_util_la_LIBADD = $(IRRECO_UTIL_LIBS) lib_irreco_util_la_CFLAGS = $(IRRECO_UTIL_CFLAGS) -DIRRECO_UTIL_BUILD lib_irreco_util_la_SOURCES = \ irreco_backend_file_container.c \ @@ -17,8 +17,6 @@ lib_irreco_util_la_SOURCES = \ irreco_retry_loop.h \ irreco_string_table.c \ irreco_string_table.h \ - irreco_sha1.c \ - irreco_sha1.h \ irreco_util.h @@ -34,8 +32,7 @@ irreco_util_header_DATA = \ irreco_misc.h \ irreco_retry_loop.h \ irreco_string_table.h \ - irreco_util.h \ - irreco_sha1.h + irreco_util.h endif diff --git a/irreco/src/util/irreco_backend_file_container.c b/irreco/src/util/irreco_backend_file_container.c index 4616d0f1..24b972c3 100644 --- a/irreco/src/util/irreco_backend_file_container.c +++ b/irreco/src/util/irreco_backend_file_container.c @@ -126,7 +126,7 @@ void irreco_backend_file_container_set(IrrecoBackendFileContainer *self, IRRECO_ENTER if (file_data != NULL) { - file_hash = sha_compute_checksum_for_string(G_CHECKSUM_SHA1, + file_hash = g_compute_checksum_for_string(G_CHECKSUM_SHA1, file_data, strlen(file_data)); g_string_printf(self->hash,"%s", file_hash); diff --git a/irreco/src/util/irreco_backend_file_container.h b/irreco/src/util/irreco_backend_file_container.h index 95fef3db..97ff2a74 100644 --- a/irreco/src/util/irreco_backend_file_container.h +++ b/irreco/src/util/irreco_backend_file_container.h @@ -48,7 +48,6 @@ typedef struct _IrrecoBackendFileContainer IrrecoBackendFileContainer; /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ #ifndef __BACKEND_FILE_CONTAINER_H__ #define __BACKEND_FILE_CONTAINER_H__ -#include "irreco_sha1.h" #include "irreco_util.h" diff --git a/irreco/src/util/irreco_misc.c b/irreco/src/util/irreco_misc.c index 857248da..418a06cc 100644 --- a/irreco/src/util/irreco_misc.c +++ b/irreco/src/util/irreco_misc.c @@ -241,7 +241,9 @@ gboolean irreco_dir_foreach(IrrecoDirForeachData *dir_data, if (irreco_gerror_check_print(&error)) { IRRECO_ERROR("Could not read directory: \"%s\"\n", dir_data->directory); - g_dir_close(dir); + if(dir != NULL){ + g_dir_close(dir); + } IRRECO_RETURN_BOOL(FALSE); } diff --git a/irreco/src/webdb/Makefile.am b/irreco/src/webdb/Makefile.am index 3cebe064..b3e339b9 100644 --- a/irreco/src/webdb/Makefile.am +++ b/irreco/src/webdb/Makefile.am @@ -11,8 +11,8 @@ lib_irreco_webdb_la_SOURCES = \ irreco_webdb.h \ irreco_webdb_cache.c \ irreco_webdb_cache.h \ - irreco_webdb_client.c \ - irreco_webdb_client.h \ + irreco_webdb_client.c \ + irreco_webdb_client.h \ irreco_webdb_conf.c \ irreco_webdb_conf.h \ irreco_webdb_remote.c \ diff --git a/irreco/src/webdb/irreco_webdb_cache.c b/irreco/src/webdb/irreco_webdb_cache.c index d4c5ebcf..dedab58a 100644 --- a/irreco/src/webdb/irreco_webdb_cache.c +++ b/irreco/src/webdb/irreco_webdb_cache.c @@ -587,7 +587,7 @@ gboolean irreco_webdb_cache_get_configs(IrrecoWebdbCache *self, IRRECO_RETRY_LOOP_START(self->loop) if (irreco_webdb_cache_test(self) == FALSE) break; success = irreco_webdb_client_get_configs(client, - category, manufacturer, model, &config_list); + manufacturer, model, &config_list); if (success) break; irreco_webdb_client_get_error_msg( @@ -615,6 +615,8 @@ gboolean irreco_webdb_cache_get_configuration(IrrecoWebdbCache *self, IrrecoWebdbConf * configuration; IRRECO_ENTER + configuration = irreco_webdb_conf_new(); + if (g_hash_table_lookup(self->conf_hash, (gconstpointer) &id) == NULL) { gboolean success = FALSE; IrrecoWebdbClient *client = (IrrecoWebdbClient *) self->private; @@ -1576,6 +1578,103 @@ gboolean irreco_webdb_cache_get_remote_data(IrrecoWebdbCache *self, IRRECO_RETURN_BOOL(success); } +gboolean irreco_webdb_cache_get_lirc_dirs(IrrecoWebdbCache *self, + IrrecoStringTable **dir_list) +{ + gboolean success = FALSE; + IrrecoWebdbClient *client = (IrrecoWebdbClient *) self->private; + + IRRECO_ENTER + + IRRECO_RETRY_LOOP_START(self->loop) + if (irreco_webdb_cache_test(self) == FALSE) break; + success = irreco_webdb_client_get_lirc_dirs(client, + dir_list); + if (success) break; + irreco_webdb_client_get_error_msg(client, + self->error_msg); + IRRECO_RETRY_LOOP_END(self->loop) + + if(success == FALSE) IRRECO_RETURN_BOOL(FALSE); + + IRRECO_RETURN_BOOL(success); +} + +gboolean irreco_webdb_cache_get_lirc_manufacturers(IrrecoWebdbCache *self, + const gchar *range, + IrrecoStringTable **manufacturer_list) +{ + gboolean success = FALSE; + IrrecoWebdbClient *client = (IrrecoWebdbClient *) self->private; + + IRRECO_ENTER + + IRRECO_RETRY_LOOP_START(self->loop) + if (irreco_webdb_cache_test(self) == FALSE) break; + success = irreco_webdb_client_get_lirc_manufacturers( + client, + range, + manufacturer_list); + if (success) break; + irreco_webdb_client_get_error_msg(client, + self->error_msg); + IRRECO_RETRY_LOOP_END(self->loop) + + if(success == FALSE) IRRECO_RETURN_BOOL(FALSE); + + IRRECO_RETURN_BOOL(success); +} + +gboolean irreco_webdb_cache_get_lirc_models(IrrecoWebdbCache *self, + const gchar *manufacturer, + IrrecoStringTable **model_list) +{ + gboolean success = FALSE; + IrrecoWebdbClient *client = (IrrecoWebdbClient *) self->private; + + IRRECO_ENTER + + IRRECO_RETRY_LOOP_START(self->loop) + if (irreco_webdb_cache_test(self) == FALSE) break; + success = irreco_webdb_client_get_lirc_models( + client, + manufacturer, + model_list); + if (success) break; + irreco_webdb_client_get_error_msg(client, + self->error_msg); + IRRECO_RETRY_LOOP_END(self->loop) + + if(success == FALSE) IRRECO_RETURN_BOOL(FALSE); + + IRRECO_RETURN_BOOL(success); +} + +gboolean irreco_webdb_cache_get_lirc_file(IrrecoWebdbCache *self, + const gchar *model, + IrrecoStringTable **file) +{ + gboolean success = FALSE; + IrrecoWebdbClient *client = (IrrecoWebdbClient *) self->private; + + IRRECO_ENTER + + IRRECO_RETRY_LOOP_START(self->loop) + if (irreco_webdb_cache_test(self) == FALSE) break; + success = irreco_webdb_client_get_lirc_file( + client, + model, + file); + if (success) break; + irreco_webdb_client_get_error_msg(client, + self->error_msg); + IRRECO_RETRY_LOOP_END(self->loop) + + if(success == FALSE) IRRECO_RETURN_BOOL(FALSE); + + IRRECO_RETURN_BOOL(success); +} + /** @} */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ diff --git a/irreco/src/webdb/irreco_webdb_cache.h b/irreco/src/webdb/irreco_webdb_cache.h index fff030e7..95590b6c 100644 --- a/irreco/src/webdb/irreco_webdb_cache.h +++ b/irreco/src/webdb/irreco_webdb_cache.h @@ -55,6 +55,7 @@ typedef struct _IrrecoWebdbCache IrrecoWebdbCache; #include "irreco_webdb_conf.h" #include "irreco_webdb_theme.h" #include "irreco_webdb_remote.h" +#include "irreco_webdb_client.h" /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Datatypes */ @@ -268,6 +269,17 @@ gboolean irreco_webdb_cache_get_themes_of_remote(IrrecoWebdbCache *self, gboolean irreco_webdb_cache_get_remote_data(IrrecoWebdbCache *self, gint remote_id, gchar **file_data); +gboolean irreco_webdb_cache_get_lirc_dirs(IrrecoWebdbCache *self, + IrrecoStringTable **dir_list); +gboolean irreco_webdb_cache_get_lirc_manufacturers(IrrecoWebdbCache *self, + const gchar *range, + IrrecoStringTable **manufacturer_list); +gboolean irreco_webdb_cache_get_lirc_models(IrrecoWebdbCache *self, + const gchar *manufacturer, + IrrecoStringTable **model_list); +gboolean irreco_webdb_cache_get_lirc_file(IrrecoWebdbCache *self, + const gchar *model, + IrrecoStringTable **file); #endif /* __IRRECO_WEBDB_CACHE_H__ */ diff --git a/irreco/src/webdb/irreco_webdb_client.c b/irreco/src/webdb/irreco_webdb_client.c dissimilarity index 82% index fa19b42a..bbebadf8 100644 --- a/irreco/src/webdb/irreco_webdb_client.c +++ b/irreco/src/webdb/irreco_webdb_client.c @@ -1,3213 +1,2035 @@ -/* - * irreco - Ir Remote Control - * Copyright (C) 2007,2008 Arto Karppinen (arto.karppinen@iki.fi), - * Joni Kokko (t5kojo01@students.oamk.fi), - * Sami Mäki (kasmra@xob.kapsi.fi), - * Harri Vattulainen (t5vaha01@students.oamk.fi) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "irreco_webdb_client.h" -#include "config.h" - -/** - * @addtogroup IrrecoWebdbClient - * @ingroup IrrecoWebdb - * - * Irreco Web Database API implementation. These functions connect to the - * IrrecoWebdbClient trough XML-RPC connection, pass arguments, and decode - * return values. - * - * @{ - */ - -/** - * @file - * Source file of @ref IrrecoWebdbClient. - */ - -static const char *const value_type[] = { - "BAD", - "int", - "boolean", - "string", - "double", - "datetime", - "base64", - "struct", - "array" -}; - -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -/* Prototypes */ -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ - -static void irreco_webdb_client_reset_env(); -static SoupXmlrpcResponse *do_xmlrpc(SoupXmlrpcMessage *xmsg, - SoupXmlrpcValueType type, - IrrecoWebdbClient *self); - - -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -/* Construction & Destruction */ -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ - -/** - * @name Construction & Destruction - * @{ - */ - -/** - * Create new IrrecoWebdbClient Object - */ -IrrecoWebdbClient *irreco_webdb_client_new() -{ - IrrecoWebdbClient *self; - IRRECO_ENTER - - self = g_slice_new0(IrrecoWebdbClient); - - /* Allocate 1000 characters to soup error message */ - /*self->error_msg = g_malloc0(1000*sizeof(*self->error_msg));*/ - /** @todo do same to do_xmlrpc errormsg gchar */ - /* use GString->str if that can grow on it own*/ - self->error_msg = g_string_new(NULL); - - IRRECO_RETURN_PTR(self); -} - -void irreco_webdb_client_free(IrrecoWebdbClient *self) -{ - IRRECO_ENTER - - g_assert(self != NULL); - - /* Free self->error_msg resource */ - g_string_free(self->error_msg, TRUE); - self->error_msg = NULL; - - g_slice_free(IrrecoWebdbClient, self); - self = NULL; - - IRRECO_RETURN -} - -/** @} */ - -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -/* Private Functions */ -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ - -/** - * @name Private Functions - * @{ - */ - -/** - * Release of RPC results and errors. - */ -static void irreco_webdb_client_reset_env(IrrecoWebdbClient *self) -{ - IRRECO_ENTER - - self->error_msg = g_string_erase(self->error_msg, 0, -1); - - IRRECO_RETURN -} - -/** @todo Funcs return bool wether they succeeded, so this could be removed. */ -/** - * Check if the previous call to XMLRPC-C succeeded. - * - * @return TRUE if error occured, FALSE otherwise. - */ -/*static gboolean irreco_webdb_client_check_error(IrrecoWebdbClient *self) -{ - IRRECO_ENTER - if(self->error_env->fault_occurred) { - IRRECO_ERROR("%d: %s\n", self->error_env->fault_code, - self->error_env->fault_string); - IRRECO_RETURN_BOOL(TRUE); - } - IRRECO_RETURN_BOOL(FALSE); -}*/ - - -/**@} */ - - -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -/* Functions */ -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ - -/** - * @name Public Functions - * @{ - */ - -/** - * Get error message. - * - * @param msg GString object to recieve the error message. - */ -void irreco_webdb_client_get_error_msg(IrrecoWebdbClient *self, GString *msg) -{ - IRRECO_ENTER - - /* Clear and set msg */ - msg = g_string_erase(msg, 0, -1); - msg = g_string_insert(msg, 0, self->error_msg->str); - - IRRECO_RETURN -} - -/** - * Ask WebDB to sum two numbers. - * - * @param num_a First number. - * @param num_b Second number. - * @param sum Variable to receive the result. - * @return TRUE on successfull XML-RPC call, FALSE otherwise. - */ -gboolean irreco_webdb_client_sum(IrrecoWebdbClient *self, - gint num_a, - gint num_b, - glong *sum) -{ - gboolean rvalue = TRUE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "sum"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, num_a); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, num_b); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_INT, self); - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Get gint (as glong) out of value */ - if(!soup_xmlrpc_value_get_int(value, sum)){ - IRRECO_DEBUG("ERROR: Not proper return value\n"); - g_string_printf(self->error_msg, "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - - g_object_unref (response); - - /* Everything went fine, return TRUE */ - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_upload_configuration(IrrecoWebdbClient *self, - const gchar *backend, - const gchar *category, - const gchar *file_hash, - const gchar *file_name, - const gchar *manufacturer, - const gchar *model, - const gchar *password, - const gchar *user, - const gchar *data) -{ - gboolean rvalue = TRUE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - /* Init msg with URI and other data */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "uploadConfiguration"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, backend); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, category); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, manufacturer); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, model); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, file_hash); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, file_name); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, data); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRING, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - g_object_unref (response); - - /* Everything went fine, return TRUE */ - IRRECO_RETURN_BOOL(rvalue); -} - - -gboolean irreco_webdb_client_get_categories(IrrecoWebdbClient *self, - IrrecoStringTable **category_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *category_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getCategories"); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*category_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_all_categories(IrrecoWebdbClient *self, - IrrecoStringTable **category_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *category_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getAllCategories"); - soup_xmlrpc_message_end_call (msg); - - /** @todo - * Upload device dialog also shows category named category - * That comes from where and why? - * Don't think there should be such - * Same thing with manufacturer field - */ - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*category_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} -gboolean irreco_webdb_client_get_manufacturers(IrrecoWebdbClient *self, - const gchar *category, - IrrecoStringTable **manufacturer_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *manufacturer_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getManufacturers"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, category); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*manufacturer_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_all_manufacturers(IrrecoWebdbClient *self, - IrrecoStringTable **manufacturer_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *manufacturer_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getAllManufacturers"); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("No value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*manufacturer_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_models(IrrecoWebdbClient *self, - const gchar *category, - const gchar *manufacturer, - IrrecoStringTable **model_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *model_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getModels"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, category); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, manufacturer); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("No value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*model_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} - - -gboolean irreco_webdb_client_get_configs(IrrecoWebdbClient *self, - const gchar *category, - const gchar *manufacturer, - const gchar *model, - IrrecoStringTable **config_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *config_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getConfigurations"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, manufacturer); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, model); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("No value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("Config: %s\n", ret); - - irreco_string_table_add(*config_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - /* No error occured. */ - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} - - -gboolean irreco_webdb_client_get_configuration(IrrecoWebdbClient *self, - gint id, - IrrecoWebdbConf **configuration) -{ - gboolean rvalue = FALSE; - const gchar *user = NULL; - const gchar *backend; - const gchar *category; - const gchar *manufacturer; - const gchar *model; - const gchar *file_hash; - const gchar *file_name; - const gchar *uploaded; - const gchar *download_count; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - GHashTable *tmp = NULL; - gchar *ret = NULL; - SoupXmlrpcValue *hash = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *configuration = irreco_webdb_conf_new(); - - /* Build query */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getConfigurationById"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, (long) id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRUCT, self); - - /* Check response */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - /* Get array out from response */ - value = soup_xmlrpc_response_get_value (response); - - if(!soup_xmlrpc_value_get_struct(value, &tmp)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - - /* Seek data */ - hash = g_hash_table_lookup (tmp, "user"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - user = ret; - - hash = g_hash_table_lookup (tmp, "backend"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - backend = ret; - - hash = g_hash_table_lookup (tmp, "category"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - category = ret; - - hash = g_hash_table_lookup (tmp, "manufacturer"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - manufacturer = ret; - - hash = g_hash_table_lookup (tmp, "model"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - model = ret; - - hash = g_hash_table_lookup (tmp, "file_hash"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - file_hash = ret; - - hash = g_hash_table_lookup (tmp, "file_name"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - file_name = ret; - - hash = g_hash_table_lookup (tmp, "uploaded"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - uploaded = ret; - - hash = g_hash_table_lookup (tmp, "download_count"); - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - download_count = ret; - - IRRECO_DEBUG("Configuration: %d %s %s %s %s %s %s %s %s %s\n", - id, user, backend, category, manufacturer, - model, file_hash, file_name, uploaded, download_count); - - irreco_webdb_conf_set(*configuration, id, user, backend, category, - manufacturer, model, file_hash, file_name, - uploaded, download_count); - - /* No error occured. */ - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} - -gint irreco_webdb_client_get_config_id_by_file_hash_and_file_name( - IrrecoWebdbClient *self, - const gchar *file_hash, - const gchar *file_name) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - glong id = 0; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new(IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call(msg, "getConfigIdByFilehashAndFilename"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, file_hash); - soup_xmlrpc_message_write_string(msg, file_name); - soup_xmlrpc_message_end_param(msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*)do_xmlrpc(msg, - SOUP_XMLRPC_VALUE_TYPE_INT, - self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - goto end; - } - - value = soup_xmlrpc_response_get_value(response); - - /* Try to get integer out of value */ - if(!soup_xmlrpc_value_get_int(value, &id)) { - id = 0; - } - - end: - g_object_unref (response); - IRRECO_RETURN_INT(id); - -} - -gboolean irreco_webdb_client_get_file(IrrecoWebdbClient *self, - const gchar *file_hash, - const gchar *file_name, - GString **file_data) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - GHashTable *tmp = NULL; - gchar *ret = NULL; - SoupXmlrpcValue *hash = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - /* Build query */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getFile"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, file_hash); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, file_name); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRUCT, self); - - /* Check response */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - /* Get array out from response */ - value = soup_xmlrpc_response_get_value (response); - - /* Get string out from array */ - if(!soup_xmlrpc_value_get_struct(value, &tmp)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - - /* Seek data */ - hash = g_hash_table_lookup (tmp, "data"); - - if (!soup_xmlrpc_value_get_string(hash, &ret)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - - IRRECO_DEBUG("File data:\n%s\n",ret); - - *file_data = g_string_new(ret); - - g_hash_table_destroy (tmp); - g_object_unref (response); - - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} - - -gboolean irreco_webdb_client_get_user_exists(IrrecoWebdbClient *self, - const gchar *name, - gboolean *user_exists) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getUserExists"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, name); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_BOOLEAN, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get gboolean out of value */ - if(!soup_xmlrpc_value_get_boolean(value, user_exists)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - - g_object_unref (response); - IRRECO_RETURN_BOOL(TRUE); -} - -gint irreco_webdb_client_get_max_image_size(IrrecoWebdbClient *self) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - glong max_image_size = 0; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getMaxImageSize"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc(msg, - SOUP_XMLRPC_VALUE_TYPE_INT, - self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - goto end; - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get integer out of value */ - if(!soup_xmlrpc_value_get_int(value, &max_image_size)) { - max_image_size = 0; - } - - end: - g_object_unref (response); - IRRECO_RETURN_INT(max_image_size); -} - -gint irreco_webdb_client_create_theme(IrrecoWebdbClient *self, - const gchar *name, - const gchar *comment, - const gchar *preview_button, - const gchar *folder, - const gchar *user, - const gchar *password) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - glong theme_id; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "createNewTheme"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, name); - soup_xmlrpc_message_write_string(msg, comment); - soup_xmlrpc_message_write_string(msg, preview_button); - soup_xmlrpc_message_write_string(msg, folder); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_INT, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get integer out of value */ - if(soup_xmlrpc_value_get_int(value, &theme_id)){ - g_object_unref (response); - IRRECO_RETURN_INT(theme_id); - } - - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_INT(0); -} - -gboolean irreco_webdb_client_set_theme_downloadable(IrrecoWebdbClient *self, - gint id, - gboolean downloadable, - const gchar *user, - const gchar *password) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - gboolean rvalue = FALSE; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "setThemeDownloadable"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, id); - soup_xmlrpc_message_write_boolean(msg, downloadable); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_BOOLEAN, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get boolean out of value */ - soup_xmlrpc_value_get_boolean(value, &rvalue); - - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_themes(IrrecoWebdbClient *self, - IrrecoStringTable **theme_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *theme_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getThemes"); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*theme_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_theme_by_id(IrrecoWebdbClient *self, - gint theme_id, - IrrecoWebdbTheme **theme) -{ - gboolean rvalue = FALSE; - gchar *name = NULL; - gchar *user = NULL; - gchar *comment = NULL; - gchar *preview_button = NULL; - gchar *folder = NULL; - gchar *uploaded = NULL; - gchar *modified = NULL; - gchar *downloaded = NULL; - glong download_count; - GHashTable *tmp = NULL; - SoupXmlrpcValue *hash = NULL; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response = NULL; - SoupXmlrpcValue *value; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - /* Build query */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getThemeById"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, (glong) theme_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRUCT, self); - - /* Check response */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - goto end; - } - - /* Get array out from response */ - value = soup_xmlrpc_response_get_value (response); - - if(!soup_xmlrpc_value_get_struct(value, &tmp)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - goto end; - } - - /* Seek data */ - hash = g_hash_table_lookup(tmp, "name"); - if (!soup_xmlrpc_value_get_string(hash, &name)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "user"); - if (!soup_xmlrpc_value_get_string(hash, &user)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "comment"); - if (!soup_xmlrpc_value_get_string(hash, &comment)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "preview_button"); - if (!soup_xmlrpc_value_get_string(hash, &preview_button)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "folder"); - if (!soup_xmlrpc_value_get_string(hash, &folder)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "uploaded"); - if (!soup_xmlrpc_value_get_string(hash, &uploaded)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "modified"); - if (!soup_xmlrpc_value_get_string(hash, &modified)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "downloaded"); - if (!soup_xmlrpc_value_get_string(hash, &downloaded)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "download_count"); - if (!soup_xmlrpc_value_get_int(hash, &download_count)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - *theme = irreco_webdb_theme_new(); - - irreco_webdb_theme_set(*theme, theme_id, name, user, comment, - preview_button, NULL, folder, uploaded, modified, - downloaded, download_count); - - irreco_webdb_client_get_theme_versions_by_name(self, name, - &(*theme)->versions); - - /* Get dates for versions */ - if ((*theme)->versions != NULL) - { - IRRECO_STRING_TABLE_FOREACH_KEY((*theme)->versions, key) - gchar *date = irreco_webdb_client_get_theme_date_by_id( - self, atoi(key)); - - irreco_string_table_change_data ((*theme)->versions, - key, (gpointer) date); - IRRECO_STRING_TABLE_FOREACH_END - } - - /* No error occured. */ - rvalue = TRUE; - - end: - if (response != NULL) g_object_unref(response); - if (tmp != NULL) g_hash_table_destroy(tmp); - if (name != NULL) g_free(name); - if (user != NULL) g_free(user); - if (comment != NULL) g_free(comment); - if (preview_button != NULL) g_free(preview_button); - if (folder != NULL) g_free(folder); - if (uploaded != NULL) g_free(uploaded); - if (modified != NULL) g_free(modified); - if (downloaded != NULL) g_free(downloaded); - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_theme_versions_by_name(IrrecoWebdbClient *self, - const char *name, - IrrecoStringTable **theme_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *theme_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getThemeVersionsByName"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, name); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - goto end; - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - goto end; - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*theme_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - - end: - if (rvalue == FALSE) irreco_string_table_free(*theme_list); - g_object_unref (response); - - IRRECO_RETURN_BOOL(rvalue); -} - -gchar *irreco_webdb_client_get_theme_date_by_id(IrrecoWebdbClient *self, - gint theme_id) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - gchar *date = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getThemeDateById"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, theme_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*)do_xmlrpc(msg, - SOUP_XMLRPC_VALUE_TYPE_STRING, - self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - goto end; - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get integer out of value */ - if(!soup_xmlrpc_value_get_string(value, &date)) { - date = NULL; - } - - end: - g_object_unref (response); - IRRECO_RETURN_PTR(date); -} - -gint irreco_webdb_client_get_theme_id_by_name_and_date(IrrecoWebdbClient *self, - const gchar *name, - const gchar *date) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - glong id = 0; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getThemeIdByNameAndDate"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, name); - soup_xmlrpc_message_write_string(msg, date); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*)do_xmlrpc(msg, - SOUP_XMLRPC_VALUE_TYPE_INT, - self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - goto end; - } - - value = soup_xmlrpc_response_get_value(response); - - /* Try to get integer out of value */ - if(!soup_xmlrpc_value_get_int(value, &id)) { - id = 0; - } - - end: - g_object_unref (response); - IRRECO_RETURN_INT(id); -} - -gint irreco_webdb_client_add_bg_to_theme(IrrecoWebdbClient *self, - const gchar *name, - const gchar *image_hash, - const gchar *image_name, - const guchar *image, - gint image_len, - const gchar *folder, - gint theme_id, - const gchar *user, - const gchar *password) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - glong bg_id; - gchar *base64_image; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - base64_image = g_base64_encode(image, image_len); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "addBgToTheme"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, name); - soup_xmlrpc_message_write_string(msg, image_hash); - soup_xmlrpc_message_write_string(msg, image_name); - soup_xmlrpc_message_write_string(msg, base64_image); - soup_xmlrpc_message_write_string(msg, folder); - soup_xmlrpc_message_write_int(msg, theme_id); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - g_free(base64_image); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_INT, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get integer out of value */ - if(soup_xmlrpc_value_get_int(value, &bg_id)){ - g_object_unref (response); - IRRECO_RETURN_INT(bg_id); - } - - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_INT(0); -} - -gboolean irreco_webdb_client_get_backgrounds(IrrecoWebdbClient *self, - gint theme_id, - IrrecoStringTable **bg_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - glong ret; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *bg_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getBackgrounds"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, theme_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - gchar *id; - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_int(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - goto end; - } - - IRRECO_DEBUG("%ld\n", ret); - - id = g_strdup_printf ("%ld", ret); - - irreco_string_table_add(*bg_list, id, NULL); - g_free(id); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - end: - if(rvalue == FALSE) { - irreco_string_table_free (*bg_list); - *bg_list = NULL; - } - g_object_unref (response); - - IRRECO_RETURN_BOOL(rvalue); -} - - -gboolean irreco_webdb_client_get_bg_by_id(IrrecoWebdbClient *self, - gint bg_id, - const char *theme_bg_dir) -{ - gboolean rvalue = FALSE; - gchar *name = NULL; - gchar *image_hash = NULL; - gchar *image_name = NULL; - gchar *image_data = NULL; - gchar *base64_image = NULL; - gchar *folder = NULL; - GHashTable *tmp = NULL; - SoupXmlrpcValue *hash = NULL; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - GString *keyfile_path = g_string_new(theme_bg_dir); - GString *image_path = g_string_new(theme_bg_dir); - GKeyFile *keyfile = g_key_file_new(); - gsize base64_len; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - /* Build query */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getBgById"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, (glong) bg_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRUCT, self); - - /* Check response */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - goto end; - } - - /* Get array out from response */ - value = soup_xmlrpc_response_get_value (response); - - if(!soup_xmlrpc_value_get_struct(value, &tmp)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - goto end; - } - - /* Seek data */ - hash = g_hash_table_lookup(tmp, "name"); - if (!soup_xmlrpc_value_get_string(hash, &name)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_hash"); - if (!soup_xmlrpc_value_get_string(hash, &image_hash)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_name"); - if (!soup_xmlrpc_value_get_string(hash, &image_name)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_data"); - if (!soup_xmlrpc_value_get_string(hash, &base64_image)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "folder"); - if (!soup_xmlrpc_value_get_string(hash, &folder)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - /* Create Folder */ - g_string_append_printf(image_path, "/%s", folder); - IRRECO_DEBUG("mkdir %s\n",image_path->str); - g_mkdir(image_path->str, 0777); - - /* Save image to folder */ - image_data = (gchar*) g_base64_decode(base64_image, &base64_len); - g_string_append_printf(image_path, "/%s", image_name); - irreco_write_file(image_path->str, image_data, base64_len); - - /* Create keyfile and save it to folder*/ - irreco_gkeyfile_set_string(keyfile, "theme-bg" , "name", name); - irreco_gkeyfile_set_string(keyfile, "theme-bg", "image", image_name); - g_string_append_printf(keyfile_path, "/%s/bg.conf", folder); - irreco_write_keyfile(keyfile, keyfile_path->str); - - /* No error occured. */ - rvalue = TRUE; - - end: - g_object_unref (response); - if (tmp != NULL) g_hash_table_destroy (tmp); - if (name != NULL) g_free(name); - if (image_hash != NULL) g_free(image_hash); - if (image_name != NULL) g_free(image_name); - if (image_data != NULL) g_free(image_data); - if (base64_image != NULL) g_free(base64_image); - if (folder != NULL) g_free(folder); - - g_key_file_free(keyfile); - g_string_free(keyfile_path, TRUE); - g_string_free(image_path, TRUE); - - IRRECO_RETURN_BOOL(rvalue); -} - -gint irreco_webdb_client_add_button_to_theme(IrrecoWebdbClient *self, - const gchar *name, - gboolean allow_text, - const gchar *text_format_up, - const gchar *text_format_down, - gint text_padding, - gfloat text_h_align, - gfloat text_v_align, - const gchar *image_up_hash, - const gchar *image_up_name, - const guchar *image_up, - gint image_up_len, - const gchar *image_down_hash, - const gchar *image_down_name, - const guchar *image_down, - gint image_down_len, - const gchar *folder, - gint theme_id, - const gchar *user, - const gchar *password) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - glong button_id; - gchar *base64_image_up; - gchar *base64_image_down; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - base64_image_up = g_base64_encode(image_up, image_up_len); - base64_image_down = g_base64_encode(image_down, image_down_len); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "addButtonToTheme"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, name); - soup_xmlrpc_message_write_boolean(msg, allow_text); - soup_xmlrpc_message_write_string(msg, text_format_up); - soup_xmlrpc_message_write_string(msg, text_format_down); - soup_xmlrpc_message_write_int(msg, text_padding); - soup_xmlrpc_message_write_double(msg, (gdouble)text_h_align); - soup_xmlrpc_message_write_double(msg, (gdouble)text_v_align); - soup_xmlrpc_message_write_string(msg, image_up_hash); - soup_xmlrpc_message_write_string(msg, image_up_name); - soup_xmlrpc_message_write_string(msg, base64_image_up); - soup_xmlrpc_message_write_string(msg, image_down_hash); - soup_xmlrpc_message_write_string(msg, image_down_name); - soup_xmlrpc_message_write_string(msg, base64_image_down); - soup_xmlrpc_message_write_string(msg, folder); - soup_xmlrpc_message_write_int(msg, theme_id); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - g_free(base64_image_up); - g_free(base64_image_down); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_INT, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get integer out of value */ - if(soup_xmlrpc_value_get_int(value, &button_id)){ - g_object_unref (response); - IRRECO_RETURN_INT(button_id); - } - - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_INT(0); -} - -gboolean irreco_webdb_client_get_buttons(IrrecoWebdbClient *self, - gint theme_id, - IrrecoStringTable **button_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - glong ret; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - *button_list = irreco_string_table_new(NULL, NULL); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getButtons"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, theme_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - while (iter) { - gchar *id; - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_int(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - goto end; - } - - IRRECO_DEBUG("%ld\n", ret); - - id = g_strdup_printf("%ld", ret); - - irreco_string_table_add(*button_list, id, NULL); - g_free(id); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - end: - if(rvalue == FALSE) { - irreco_string_table_free (*button_list); - *button_list = NULL; - } - g_object_unref (response); - - IRRECO_RETURN_BOOL(rvalue); -} - - -gboolean irreco_webdb_client_get_button_by_id(IrrecoWebdbClient *self, - gint button_id, - const char *theme_button_dir) -{ - gboolean rvalue = FALSE; - gchar *name = NULL; - gboolean allow_text = FALSE; - gchar *text_format_up = NULL; - gchar *text_format_down = NULL; - glong text_padding; - gdouble text_h_align; - gdouble text_v_align; - gchar *image_up_hash = NULL; - gchar *image_up_name = NULL; - gchar *image_up = NULL; - gchar *base64_image_up = NULL; - gchar *image_down_hash = NULL; - gchar *image_down_name = NULL; - gchar *image_down = NULL; - gchar *base64_image_down = NULL; - gchar *folder = NULL; - gchar *image_down_hash_tmp = NULL; - GHashTable *tmp = NULL; - SoupXmlrpcValue *hash = NULL; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - GString *file_path = g_string_new(""); - GKeyFile *keyfile = g_key_file_new(); - gsize image_down_len; - gsize image_up_len; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - /* Build query */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getButtonById"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, (glong) button_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRUCT, self); - - /* Check response */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - goto end; - } - - /* Get array out from response */ - value = soup_xmlrpc_response_get_value (response); - - if(!soup_xmlrpc_value_get_struct(value, &tmp)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - goto end; - } - - /* Seek data */ - hash = g_hash_table_lookup(tmp, "name"); - if (!soup_xmlrpc_value_get_string(hash, &name)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "allow_text"); - if (!soup_xmlrpc_value_get_boolean(hash, &allow_text)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "text_format_up"); - soup_xmlrpc_value_get_string(hash, &text_format_up); - - hash = g_hash_table_lookup(tmp, "text_format_down"); - soup_xmlrpc_value_get_string(hash, &text_format_down); - - hash = g_hash_table_lookup(tmp, "text_padding"); - if (!soup_xmlrpc_value_get_int(hash, &text_padding)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "text_h_align"); - if (!soup_xmlrpc_value_get_double(hash, &text_h_align)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - hash = g_hash_table_lookup(tmp, "text_v_align"); - if (!soup_xmlrpc_value_get_double(hash, &text_v_align)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_up_hash"); - if (!soup_xmlrpc_value_get_string(hash, &image_up_hash)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_up_name"); - if (!soup_xmlrpc_value_get_string(hash, &image_up_name)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_up"); - if (!soup_xmlrpc_value_get_string(hash, &base64_image_up)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_down_hash"); - if (!soup_xmlrpc_value_get_string(hash, &image_down_hash)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_down_name"); - if (!soup_xmlrpc_value_get_string(hash, &image_down_name)) { - IRRECO_DEBUG("No value in response\n"); - IRRECO_LINE - goto end; - } - - hash = g_hash_table_lookup(tmp, "image_down"); - if (!soup_xmlrpc_value_get_string(hash, &base64_image_down)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup(tmp, "folder"); - if (!soup_xmlrpc_value_get_string(hash, &folder)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - /* Create Folder */ - g_string_printf(file_path, "%s/%s", theme_button_dir, folder); - IRRECO_DEBUG("mkdir %s\n",file_path->str); - g_mkdir(file_path->str, 0777); - - /* Save image_up to folder */ - g_string_printf(file_path, "%s/%s/%s", theme_button_dir, folder, - image_up_name); - image_up = (gchar*) g_base64_decode(base64_image_up, &image_up_len); - irreco_write_file(file_path->str, image_up, image_up_len); - - /* Save image_down to folder */ - g_string_printf(file_path, "%s/%s/%s", theme_button_dir, folder, - image_down_name); - - /*Check image hash data*/ - image_down = (gchar*) g_base64_decode(base64_image_down, - &image_down_len); - irreco_write_file(file_path->str, image_down, image_down_len); - image_down_hash_tmp = sha_compute_checksum_for_string(G_CHECKSUM_SHA1, - image_down, - image_down_len); - - if (!g_str_equal(image_down_hash, image_down_hash_tmp)) { - - g_string_printf(self->error_msg, - "ERROR: Button data is corrupted\n"); - goto end; - } - - /* Create keyfile and save it to folder*/ - irreco_gkeyfile_set_string(keyfile, "theme-button" , "name", name); - - if (allow_text) { - irreco_gkeyfile_set_string(keyfile, "theme-button", - "allow-text", "true"); - } else { - irreco_gkeyfile_set_string(keyfile, "theme-button", - "allow-text", "false"); - } - - irreco_gkeyfile_set_string(keyfile, "theme-button", - "up", image_up_name); - - irreco_gkeyfile_set_string(keyfile, "theme-button", - "down", image_down_name); - - if (text_format_up != NULL && strlen(text_format_up) > 0) { - irreco_gkeyfile_set_string(keyfile, "theme-button", - "text-format-up", text_format_up); - } - - if (text_format_down != NULL && strlen(text_format_down) > 0) { - irreco_gkeyfile_set_string(keyfile, "theme-button", - "text-format-down", text_format_down); - } - - irreco_gkeyfile_set_glong(keyfile, "theme-button", - "text-padding", (glong)text_padding); - - irreco_gkeyfile_set_gfloat(keyfile, - "theme-button", - "text-h-align", - (gfloat) text_h_align); - - irreco_gkeyfile_set_gfloat(keyfile, - "theme-button", - "text-v-align", - (gfloat) text_v_align); - - g_string_printf(file_path, "%s/%s/button.conf", - theme_button_dir, folder); - irreco_write_keyfile(keyfile, file_path->str); - - /* No error occured. */ - rvalue = TRUE; - - end: - - g_object_unref (response); - if (tmp != NULL) g_hash_table_destroy (tmp); - if (name != NULL) g_free(name); - if (text_format_up != NULL) g_free(text_format_up); - if (text_format_down != NULL) g_free(text_format_down); - if (image_up_hash != NULL) g_free(image_up_hash); - if (image_up_name != NULL) g_free(image_up_name); - if (image_up != NULL) g_free(image_up); - if (base64_image_up != NULL) g_free(base64_image_up); - if (image_down_hash != NULL) g_free(image_down_hash); - if (image_down_name != NULL) g_free(image_down_name); - if (image_down != NULL) g_free(image_down); - if (image_down_hash_tmp != NULL) g_free(image_down_hash_tmp); - if (base64_image_down != NULL) g_free(base64_image_down); - if (folder != NULL) g_free(folder); - - g_key_file_free(keyfile); - g_string_free(file_path, TRUE); - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_preview_button(IrrecoWebdbClient *self, - gint theme_id, - GdkPixbuf **preview_button) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - char *base64_data = NULL; - guchar *data; - gsize len; - GdkPixbufLoader *pl; - GError *error = NULL; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getPreviewButton"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, theme_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRING, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - goto end; - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get string out of value */ - if(!soup_xmlrpc_value_get_string(value, &base64_data)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - goto end; - } - - data = g_base64_decode(base64_data, &len); - - pl = gdk_pixbuf_loader_new(); - - gdk_pixbuf_loader_write(pl, data, len, &error); - - if(error != NULL) - { - g_string_printf(self->error_msg, "ERROR: %s", error->message); - IRRECO_DEBUG("%s\n", error->message); - goto end; - } - - gdk_pixbuf_loader_close(pl, NULL); - *preview_button = gdk_pixbuf_loader_get_pixbuf(pl); - - rvalue = TRUE; - - end: - g_object_unref (response); - if (base64_data != NULL) g_free(base64_data); - - IRRECO_RETURN_BOOL(rvalue); -} - -static SoupXmlrpcResponse *do_xmlrpc(SoupXmlrpcMessage *xmsg, - SoupXmlrpcValueType type, - IrrecoWebdbClient *self) -{ - SoupSession *session; - int status; /* Status of sent message */ - SoupMessage *spmsg = NULL; /* Soupmessage */ - SoupXmlrpcResponse *response = NULL; /* Response */ - SoupXmlrpcValue *value = NULL; /* Value from response */ - gchar *resbodykeeper; /* Tmp response holder */ - gboolean error = FALSE; - - IRRECO_ENTER - - session = soup_session_sync_new(); /* Init new synchronous session */ - - soup_xmlrpc_message_persist (xmsg); /* Lock message */ - - spmsg = SOUP_MESSAGE(xmsg); /* soup XMLRPC msg to soup msg */ - - /* Add irreco version to message header */ - soup_message_add_header(spmsg->request_headers, - "User-Agent", PACKAGE_NAME "/" VERSION); - - IRRECO_DEBUG("Send soup message\n"); - status = soup_session_send_message (session, spmsg); /* Send msg */ - - soup_session_abort (session); /* Session cleanup */ - - g_object_unref (session); - - /* Print request length and response */ - /*IRRECO_DEBUG("\n%.*s\n%d %s\n%.*s\n", - spmsg->request.length, spmsg->request.body, - spmsg->status_code, spmsg->reason_phrase, - spmsg->response.length, spmsg->response.body);*/ - IRRECO_DEBUG("\nRequest length: %d\nStatus code: %d %s\n", - spmsg->request.length, - spmsg->status_code, spmsg->reason_phrase); - - /* Check status of sent message */ - if (g_strrstr(spmsg->response.body, "faultCode") != NULL) { - - gchar *errmsg; /* error message */ - IRRECO_DEBUG("Found faultCode, parse response\n"); - IRRECO_DEBUG("%s\n",spmsg->response.body); - - errmsg = g_malloc0(strlen(spmsg->response.body)*sizeof(gchar)); - - - /** @todo - * Error code and message could be combined to be Error: - * if thats possible to do easily - */ - strcpy(errmsg, "Error code: "); - - /* Parse spmsgrspbd to start "" */ - spmsg->response.body = g_strrstr(spmsg->response.body, ""); - - resbodykeeper = g_strdup( spmsg->response.body ); - - /* Copy part of response to errmsg */ - strcpy(&errmsg[12], &resbodykeeper[5]); - - /* Calc errorcode length and insert ", Error Message: " */ - /* in place of "" */ - strcpy(&errmsg[strlen(errmsg)-strlen(g_strrstr(errmsg, - ""))], ", Error Message: "); - - /* Cut 'til "" */ - resbodykeeper = g_strrstr(resbodykeeper, ""); - - /* Copy error message from after "" into errmsg */ - strcpy(&errmsg[strlen(errmsg)], &resbodykeeper[8]); - - /* Cut "" and everything after it */ - strcpy(&errmsg[strlen(errmsg)-strlen(g_strrstr(errmsg, ""))], ""); - - /* Parsed error message to right variable */ - g_string_printf(self->error_msg, "%s\n", errmsg); - - /* Free errmsg resource */ - g_free(errmsg); - errmsg = NULL; - - error = TRUE; - goto cleanup; - } - IRRECO_LINE - /* Handle http failures, eg. 404 */ - if (!SOUP_STATUS_IS_SUCCESSFUL (status)) { - IRRECO_DEBUG("HTTP failure\n"); - g_string_printf(self->error_msg, "%d %s\n", - status, spmsg->reason_phrase); - - error = TRUE; - goto cleanup; - } - - /* Parse response */ - response = soup_xmlrpc_response_new(); - response = soup_xmlrpc_message_parse_response (xmsg); - - /* Handle fault responses */ - if (!response) { - IRRECO_DEBUG("ERROR: no response\n"); - g_string_printf(self->error_msg, "ERROR: no response\n"); - error = TRUE; - goto cleanup; - } - - if (soup_xmlrpc_response_is_fault (response)) { - IRRECO_DEBUG("ERROR: response is fault\n"); - g_string_printf(self->error_msg, "ERROR: response is fault\n"); - error = TRUE; - goto cleanup; - } - - /* Get value(s) from response */ - value = soup_xmlrpc_response_get_value(response); - - /* Handle wrong type and no value situations */ - if (!value) { - IRRECO_DEBUG("ERROR: no value\n"); - g_string_printf(self->error_msg, "ERROR: no value\n"); - error = TRUE; - goto cleanup; - } - - if (soup_xmlrpc_value_get_type (value) != type) { - IRRECO_DEBUG("ERROR: wrong value type\nexpected %s, got %s\n", - value_type[type], - value_type[soup_xmlrpc_value_get_type (value)]); - - g_string_printf(self->error_msg, - "ERROR: wrong value type\nexpected %s, got %s\n", - value_type[type], - value_type[soup_xmlrpc_value_get_type (value)]); - - error = TRUE; - goto cleanup; - } - - cleanup: - /* Unref soupmessage */ - if (spmsg != NULL && !error) { - g_object_unref(spmsg); - spmsg = NULL; - } - - if(error) { - if (response != NULL) g_object_unref(response); - response = NULL; - } - - IRRECO_RETURN_PTR(response); -} - -gboolean irreco_webdb_client_add_user(IrrecoWebdbClient *self, - const gchar *name, - const gchar *email, - const gchar *passwd) -{ - gboolean rvalue = TRUE; - - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - /*gboolean result;*/ - - IRRECO_ENTER - - /* Reset error params */ - irreco_webdb_client_reset_env(self); - - /* Init msg with URI and other data */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "addUser"); - - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, name); - soup_xmlrpc_message_end_param (msg); - - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, email); - soup_xmlrpc_message_end_param (msg); - - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, passwd); - soup_xmlrpc_message_end_param (msg); - - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_BOOLEAN, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - g_object_unref (response); - - /* Everything went fine, return TRUE */ - IRRECO_RETURN_BOOL(rvalue); -} - -/** - * Login user to WebDB. - * - */ -gboolean irreco_webdb_client_login(IrrecoWebdbClient *self, - const gchar *user, - const gchar *password) -{ - gboolean rvalue = TRUE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - /* Init msg with URI and other data */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "loginToDB"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_BOOLEAN, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - g_object_unref (response); - - /* Everything went fine, return TRUE */ - IRRECO_RETURN_BOOL(rvalue); -} - -gint irreco_webdb_client_create_new_remote(IrrecoWebdbClient *self, - const gchar *comment, - const gchar *category, - const gchar *manufacturer, - const gchar *model, - const gchar *file_name, - const gchar *file_data, - const gchar *user, - const gchar *password) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - glong remote_id; - gchar *file_hash; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - file_hash = sha_compute_checksum_for_string(G_CHECKSUM_SHA1, - file_data, -1); - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "createNewRemote"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, comment); - soup_xmlrpc_message_write_string(msg, category); - soup_xmlrpc_message_write_string(msg, manufacturer); - soup_xmlrpc_message_write_string(msg, model); - soup_xmlrpc_message_write_string(msg, file_hash); - soup_xmlrpc_message_write_string(msg, file_name); - soup_xmlrpc_message_write_string(msg, file_data); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_INT, self); - - g_free(file_hash); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_INT(0); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get integer out of value */ - if(soup_xmlrpc_value_get_int(value, &remote_id)){ - g_object_unref (response); - IRRECO_RETURN_INT(remote_id); - } - - g_string_printf(self->error_msg, "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_INT(0); -} - -gboolean irreco_webdb_client_set_remote_downloadable(IrrecoWebdbClient *self, - gint id, - gboolean downloadable, - const gchar *user, - const gchar *password) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - gboolean rvalue = FALSE; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "setRemoteDownloadable"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, id); - soup_xmlrpc_message_write_boolean(msg, downloadable); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_BOOLEAN, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get boolean out of value */ - soup_xmlrpc_value_get_boolean(value, &rvalue); - - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_add_configuration_to_remote( - IrrecoWebdbClient *self, - gint remote_id, - gint configuration_id, - const gchar *user, - const gchar *password) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - gboolean rvalue = FALSE; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "addConfigurationToRemote"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, remote_id); - soup_xmlrpc_message_write_int(msg, configuration_id); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_BOOLEAN, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get boolean out of value */ - soup_xmlrpc_value_get_boolean(value, &rvalue); - - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_add_theme_to_remote(IrrecoWebdbClient *self, - gint remote_id, - gint theme_id, - const gchar *user, - const gchar *password) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - gboolean rvalue = FALSE; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "addThemeToRemote"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, remote_id); - soup_xmlrpc_message_write_int(msg, theme_id); - soup_xmlrpc_message_write_string(msg, user); - soup_xmlrpc_message_write_string(msg, password); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_BOOLEAN, self); - - /* Check response exists */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - value = soup_xmlrpc_response_get_value (response); - - /* Try to get boolean out of value */ - soup_xmlrpc_value_get_boolean(value, &rvalue); - - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_remote_categories(IrrecoWebdbClient *self, - IrrecoStringTable **category_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getRemoteCategories"); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - *category_list = irreco_string_table_new((GDestroyNotify) - irreco_string_table_free, - NULL); - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - g_object_unref (response); - irreco_string_table_free(*category_list); - *category_list = NULL; - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*category_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - g_object_unref(response); - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_remote_manufacturers(IrrecoWebdbClient *self, - const gchar *category, - IrrecoStringTable **manufacturer_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getRemoteManufacturers"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, category); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - *manufacturer_list = irreco_string_table_new((GDestroyNotify) - irreco_string_table_free, - NULL); - - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - g_object_unref (response); - irreco_string_table_free(*manufacturer_list); - *manufacturer_list = NULL; - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*manufacturer_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - g_object_unref(response); - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_remote_models(IrrecoWebdbClient *self, - const gchar *category, - const gchar *manufacturer, - IrrecoStringTable **model_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getRemoteModels"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, category); - soup_xmlrpc_message_write_string(msg, manufacturer); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - *model_list = irreco_string_table_new((GDestroyNotify) - irreco_string_table_free, NULL); - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("No value\n"); - g_object_unref (response); - irreco_string_table_free(*model_list); - *model_list = NULL; - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*model_list, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - g_object_unref(response); - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_remote_creators(IrrecoWebdbClient *self, - const gchar *category, - const gchar *manufacturer, - const gchar *model, - IrrecoStringTable **creators) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - gchar *ret = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getRemoteCreators"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, category); - soup_xmlrpc_message_write_string(msg, manufacturer); - soup_xmlrpc_message_write_string(msg, model); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value(response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - *creators = irreco_string_table_new((GDestroyNotify) g_list_free, NULL); - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_string(array_val, &ret)) { - IRRECO_DEBUG ("No value\n"); - g_object_unref(response); - irreco_string_table_free(*creators); - *creators = NULL; - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%s\n", ret); - - irreco_string_table_add(*creators, ret, NULL); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - rvalue = TRUE; - g_object_unref(response); - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_remotes(IrrecoWebdbClient *self, - const gchar *category, - const gchar *manufacturer, - const gchar *model, - const gchar *creator, - GList **remote_list) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - glong ret; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getRemotes"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_string(msg, category); - soup_xmlrpc_message_write_string(msg, manufacturer); - soup_xmlrpc_message_write_string(msg, model); - soup_xmlrpc_message_write_string(msg, creator); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value(response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - *remote_list = NULL; - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_int(array_val, &ret)) { - IRRECO_DEBUG ("No value\n"); - g_object_unref(response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%d\n", (gint) ret); - - *remote_list = g_list_append(*remote_list, - GINT_TO_POINTER(ret)); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - *remote_list = g_list_first(*remote_list); - - rvalue = TRUE; - g_object_unref(response); - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_remote_by_id(IrrecoWebdbClient *self, - gint id, - IrrecoWebdbRemote **remote) -{ - gboolean rvalue = FALSE; - gchar *user = NULL; - gchar *comment = NULL; - gchar *category = NULL; - gchar *manufacturer = NULL; - gchar *model = NULL; - gchar *file_hash = NULL; - gchar *file_name = NULL; - gchar *uploaded = NULL; - gchar *modified = NULL; - gchar *downloaded = NULL; - glong download_count; - SoupXmlrpcMessage *msg = NULL; - SoupXmlrpcResponse *response = NULL; - SoupXmlrpcValue *value = NULL; - GHashTable *tmp = NULL; - SoupXmlrpcValue *hash = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - /* Build query */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getRemoteById"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, (glong) id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRUCT, self); - - /* Check response */ - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - goto end; - } - - /* Get array out from response */ - value = soup_xmlrpc_response_get_value (response); - - if(!soup_xmlrpc_value_get_struct(value, &tmp)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - goto end; - } - - /* Seek data */ - hash = g_hash_table_lookup (tmp, "user"); - if (!soup_xmlrpc_value_get_string(hash, &user)) { - IRRECO_DEBUG("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "comment"); - if (!soup_xmlrpc_value_get_string(hash, &comment)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "category"); - if (!soup_xmlrpc_value_get_string(hash, &category)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "manufacturer"); - if (!soup_xmlrpc_value_get_string(hash, &manufacturer)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "model"); - if (!soup_xmlrpc_value_get_string(hash, &model)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "file_hash"); - if (!soup_xmlrpc_value_get_string(hash, &file_hash)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "file_name"); - if (!soup_xmlrpc_value_get_string(hash, &file_name)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "uploaded"); - if (!soup_xmlrpc_value_get_string(hash, &uploaded)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "modified"); - if (!soup_xmlrpc_value_get_string(hash, &modified)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "downloaded"); - if (!soup_xmlrpc_value_get_string(hash, &downloaded)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - hash = g_hash_table_lookup (tmp, "download_count"); - if (!soup_xmlrpc_value_get_int(hash, &download_count)) { - IRRECO_DEBUG ("No value in response\n"); - goto end; - } - - *remote = irreco_webdb_remote_new(); - irreco_webdb_remote_set(*remote, id, user, comment, category, - manufacturer, model, file_hash, file_name, - uploaded, modified, downloaded, download_count); - - /* No error occured. */ - rvalue = TRUE; - - end: - if (response != NULL) g_object_unref(response); - if (tmp != NULL) g_hash_table_destroy(tmp); - if (user != NULL) g_free(user); - if (comment != NULL) g_free(comment); - if (category != NULL) g_free(category); - if (manufacturer != NULL) g_free(manufacturer); - if (model != NULL) g_free(model); - if (file_hash != NULL) g_free(file_hash); - if (file_name != NULL) g_free(file_name); - if (uploaded != NULL) g_free(uploaded); - if (modified != NULL) g_free(modified); - if (downloaded != NULL) g_free(downloaded); - - IRRECO_RETURN_BOOL(rvalue); -} - - -gboolean irreco_webdb_client_get_themes_of_remote(IrrecoWebdbClient *self, - gint remote_id, - GList **themes) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - glong ret; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getThemesOfRemote"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, (glong) remote_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - *themes = NULL; - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_int(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%d\n", (gint) ret); - - *themes = g_list_append(*themes, GINT_TO_POINTER(ret)); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - *themes = g_list_first(*themes); - - rvalue = TRUE; - g_object_unref (response); - - IRRECO_RETURN_BOOL(rvalue); -} - - -gboolean irreco_webdb_client_get_configurations_of_remote( - IrrecoWebdbClient *self, - gint remote_id, - GList **configs) -{ - gboolean rvalue = FALSE; - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValueArrayIterator *iter; - SoupXmlrpcValue *value; - SoupXmlrpcValue *array_val; - glong ret; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getConfigurationsOfRemote"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, (glong) remote_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_ARRAY, self); - if(!response) { - IRRECO_DEBUG(" No response, failed something\n"); - IRRECO_RETURN_BOOL(rvalue); - } - - value = soup_xmlrpc_response_get_value (response); - - soup_xmlrpc_value_array_get_iterator(value, &iter); - - *configs = NULL; - while (iter) { - soup_xmlrpc_value_array_iterator_get_value(iter, &array_val); - - if (!soup_xmlrpc_value_get_int(array_val, &ret)) { - IRRECO_DEBUG ("NO value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(rvalue); - } - IRRECO_DEBUG("%d\n", (gint) ret); - - *configs = g_list_append(*configs, GINT_TO_POINTER(ret)); - - iter = soup_xmlrpc_value_array_iterator_next(iter); - } - - *configs = g_list_first(*configs); - - rvalue = TRUE; - g_object_unref (response); - - IRRECO_RETURN_BOOL(rvalue); -} - -gboolean irreco_webdb_client_get_remote_data(IrrecoWebdbClient *self, - gint remote_id, - gchar **file_data) -{ - SoupXmlrpcMessage *msg; - SoupXmlrpcResponse *response; - SoupXmlrpcValue *value; - GHashTable *tmp = NULL; - SoupXmlrpcValue *hash = NULL; - - IRRECO_ENTER - - irreco_webdb_client_reset_env(self); - - /* Build query */ - msg = soup_xmlrpc_message_new (IRRECO_WEBDB_URL); - soup_xmlrpc_message_start_call (msg, "getRemoteData"); - soup_xmlrpc_message_start_param (msg); - soup_xmlrpc_message_write_int(msg, (glong) remote_id); - soup_xmlrpc_message_end_param (msg); - soup_xmlrpc_message_end_call (msg); - - /* Execute XML-RPC call. */ - response = (SoupXmlrpcResponse*) do_xmlrpc (msg, - SOUP_XMLRPC_VALUE_TYPE_STRUCT, self); - - /* Check response */ - if(!response) { - IRRECO_DEBUG(" No response, failed at do_xmlrpc\n"); - IRRECO_RETURN_BOOL(FALSE); - } - - /* Get array out from response */ - value = soup_xmlrpc_response_get_value (response); - - /* Get string out from array */ - if(!soup_xmlrpc_value_get_struct(value, &tmp)){ - g_string_printf(self->error_msg, - "ERROR: Not proper return value\n"); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - - /* Seek data */ - hash = g_hash_table_lookup (tmp, "data"); - - if (!soup_xmlrpc_value_get_string(hash, file_data)) { - IRRECO_DEBUG ("No value in response\n"); - g_hash_table_destroy (tmp); - g_object_unref (response); - IRRECO_RETURN_BOOL(FALSE); - } - - IRRECO_DEBUG("File data:\n%s\n", *file_data); - - g_hash_table_destroy (tmp); - g_object_unref(response); - - IRRECO_RETURN_BOOL(TRUE); -} - -/** @} */ - - -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ -/* Events and Callbacks */ -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ - -/** @} */ +/* + * irreco - Ir Remote Control + * Copyright (C) 2007,2008 Arto Karppinen (arto.karppinen@iki.fi), + * Joni Kokko (t5kojo01@students.oamk.fi), + * Sami Mäki (kasmra@xob.kapsi.fi), + * Harri Vattulainen (t5vaha01@students.oamk.fi) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "irreco_webdb_client.h" +#include "config.h" + +/** + * @addtogroup IrrecoWebdbClient + * @ingroup IrrecoWebdb + * + * Irreco Web Database API implementation. These functions connect to the + * IrrecoWebdbClient trough XML-RPC connection, pass arguments, and decode + * return values. + * + * @{ + */ + +/** + * @file + * Source file of @ref IrrecoWebdbClient. + */ + +static const char *const value_type[] = { + "BAD", + "int", + "boolean", + "string", + "double", + "datetime", + "base64", + "struct", + "array" +}; + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ +/* Prototypes */ +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +static void irreco_webdb_client_reset_env(); +static gboolean do_xmlrpc (IrrecoWebdbClient *self, const char *method, GValue *retval, ...); + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ +/* Construction & Destruction */ +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +/** + * @name Construction & Destruction + * @{ + */ + +/** + * Create new IrrecoWebdbClient Object + */ +IrrecoWebdbClient *irreco_webdb_client_new() +{ + IrrecoWebdbClient *self; + IRRECO_ENTER + + self = g_slice_new0(IrrecoWebdbClient); + + self->error_msg = g_string_new(NULL); + + IRRECO_RETURN_PTR(self); +} + +void irreco_webdb_client_free(IrrecoWebdbClient *self) +{ + IRRECO_ENTER + + g_assert(self != NULL); + + /* Free self->error_msg resource */ + g_string_free(self->error_msg, TRUE); + self->error_msg = NULL; + + g_slice_free(IrrecoWebdbClient, self); + self = NULL; + + IRRECO_RETURN +} + +/** @} */ + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ +/* Private Functions */ +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +/** + * @name Private Functions + * @{ + */ + +/** + * Release of RPC results and errors. + */ +static void irreco_webdb_client_reset_env(IrrecoWebdbClient *self) +{ + IRRECO_ENTER + + self->error_msg = g_string_erase(self->error_msg, 0, -1); + + IRRECO_RETURN +} + +static gboolean check_xmlrpc (GValue *value, GType type, ...) +{ + va_list args; + + IRRECO_ENTER + + if (!G_VALUE_HOLDS (value, type)) { + g_printf ( "ERROR: could not parse response\n"); + g_value_unset (value); + IRRECO_RETURN_BOOL(FALSE); + } + + va_start (args, type); + SOUP_VALUE_GETV (value, type, args); + va_end (args); + + IRRECO_RETURN_BOOL(TRUE); +} + + +SoupSession *soup_session_new (GType type, ...) +{ + va_list args; + const char *propname; + SoupSession *session; + + IRRECO_ENTER + + va_start (args, type); + propname = va_arg (args, const char *); + session = (SoupSession *)g_object_new_valist (type, propname, args); + va_end (args); + + IRRECO_RETURN_PTR(session); +} + +void soup_session_abort_unref (SoupSession *session) +{ + IRRECO_ENTER + + g_object_add_weak_pointer (G_OBJECT (session), (gpointer *)&session); + + soup_session_abort (session); + g_object_unref (session); + + if (session) { + g_printf ("leaked SoupSession!\n"); + g_object_remove_weak_pointer (G_OBJECT (session), (gpointer *)&session); + } + + IRRECO_RETURN +} + +/** + * Do the xmlrpc call + * + * @param method Methodname + * @param retval Returned value + * @param ... Parameters to send + */ +static gboolean do_xmlrpc (IrrecoWebdbClient *self, const char *method, GValue *retval, ...) +{ + SoupMessage *msg; + va_list args; + GValueArray *params; + GError *err = NULL; + char *body; + static SoupSession *session; + SoupLogger *souplogger; + + IRRECO_ENTER + + session = soup_session_new (SOUP_TYPE_SESSION_SYNC, NULL); + + souplogger = soup_logger_new(SOUP_LOGGER_LOG_BODY, -1); + soup_logger_attach(souplogger, session); + + va_start (args, retval); + params = soup_value_array_from_args (args); + va_end (args); + + /*IRRECO_DEBUG("metodi: %s, param num: %d\n", method, params->n_values);*/ + body = soup_xmlrpc_build_method_call (method, params->values, + params->n_values); + /*IRRECO_DEBUG("body: %s\n", body);*/ + g_value_array_free (params); + + if (!body) + IRRECO_RETURN_BOOL(FALSE); + + msg = soup_message_new ("POST", IRRECO_WEBDB_URL); + + soup_message_set_request (msg, "text/xml", SOUP_MEMORY_TAKE, + body, strlen (body)); + + soup_message_headers_append(msg->request_headers, "User-Agent", PACKAGE_NAME "/" VERSION); + + soup_session_send_message (session, msg); + + soup_session_abort_unref (session); + + if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) { + g_printf ( "ERROR: %d %s\n", msg->status_code, + msg->reason_phrase); + g_string_printf(self->error_msg, "%s", msg->reason_phrase); + g_object_unref (msg); + IRRECO_RETURN_BOOL(FALSE); + } + + if (!soup_xmlrpc_parse_method_response (msg->response_body->data, + msg->response_body->length, retval, &err)) { + if (err) { + g_print("FAULT:\ncode: %d\nmessage: %s\n", err->code, err->message); + g_string_printf(self->error_msg, "%s", err->message); + g_error_free (err); + g_object_unref (msg); + IRRECO_RETURN_BOOL(FALSE); + } else { + g_printf ("ERROR: could not parse response\n"); + g_string_printf(self->error_msg, "ERROR: could not parse response"); + g_object_unref (msg); + IRRECO_RETURN_BOOL(FALSE); + } + } + g_object_unref (msg); + + IRRECO_RETURN_BOOL(TRUE); +} + +/** + * Get error message. + * + * @param msg GString object to recieve the error message. + */ +void irreco_webdb_client_get_error_msg(IrrecoWebdbClient *self, GString *msg) +{ + IRRECO_ENTER + + /* Clear and set msg */ + msg = g_string_erase(msg, 0, -1); + msg = g_string_insert(msg, 0, self->error_msg->str); + + IRRECO_RETURN +} + +/**@} */ + + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ +/* Functions */ +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +/** + * @name Public Functions + * @{ + */ + +/** + * Ask WebDB to sum two numbers. + * + * @param num_a First number. + * @param num_b Second number. + * @param sum Variable to receive the result. + * @return TRUE on successfull XML-RPC call, FALSE otherwise. + */ +gboolean irreco_webdb_client_sum(IrrecoWebdbClient *self, + gint num_a, + gint num_b, + glong *sum) +{ + GValue retval; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "sum", &retval, G_TYPE_INT, num_a, G_TYPE_INT, num_b, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_INT, sum)) { + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_upload_configuration(IrrecoWebdbClient *self, + const gchar *backend, + const gchar *category, + const gchar *file_hash, + const gchar *file_name, + const gchar *manufacturer, + const gchar *model, + const gchar *password, + const gchar *user, + const gchar *data) +{ + GValue retval; + gchar *msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "uploadConfiguration", &retval, G_TYPE_STRING, backend, G_TYPE_STRING, category, + G_TYPE_STRING, manufacturer, G_TYPE_STRING, model, G_TYPE_STRING, user, G_TYPE_STRING, password, + G_TYPE_STRING, file_hash, G_TYPE_STRING, file_name, G_TYPE_STRING, data, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_STRING, &msg)) { + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + + +gboolean irreco_webdb_client_get_categories(IrrecoWebdbClient *self, + IrrecoStringTable **category_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *category_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getCategories", &retval, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*category_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_all_categories(IrrecoWebdbClient *self, + IrrecoStringTable **category_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *category_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getAllCategories", &retval, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*category_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} +gboolean irreco_webdb_client_get_manufacturers(IrrecoWebdbClient *self, + const gchar *category, + IrrecoStringTable **manufacturer_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *manufacturer_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getManufacturers", &retval, G_TYPE_STRING, category, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*manufacturer_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_all_manufacturers(IrrecoWebdbClient *self, + IrrecoStringTable **manufacturer_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *manufacturer_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getAllManufacturers", &retval, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*manufacturer_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_models(IrrecoWebdbClient *self, + const gchar *category, + const gchar *manufacturer, + IrrecoStringTable **model_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *model_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getModels", &retval, G_TYPE_STRING, category, G_TYPE_STRING, manufacturer, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*model_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_configs(IrrecoWebdbClient *self, + const gchar *manufacturer, + const gchar *model, + IrrecoStringTable **config_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *config_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getConfigurations", &retval, G_TYPE_STRING, manufacturer, + G_TYPE_STRING, model, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*config_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + + +gboolean irreco_webdb_client_get_configuration(IrrecoWebdbClient *self, + gint id, + IrrecoWebdbConf **configuration) +{ + GValue retval; + const gchar *user = NULL; + const gchar *backend; + const gchar *category; + const gchar *manufacturer; + const gchar *model; + const gchar *file_hash; + const gchar *file_name; + const gchar *uploaded; + const gchar *download_count; + GHashTable *htable; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getConfigurationById", &retval, G_TYPE_INT, id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) { + GValue *tmp; + tmp = g_hash_table_lookup (htable, "user"); + user = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "backend"); + backend = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "category"); + category = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "manufacturer"); + manufacturer = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "model"); + model = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "file_hash"); + file_hash = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "file_name"); + file_name = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "uploaded"); + uploaded = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "download_count"); + download_count = g_value_get_string(tmp); + + IRRECO_DEBUG("Configuration: %d %s %s %s %s %s %s %s %s %s\n", + id, user, backend, category, manufacturer, + model, file_hash, file_name, uploaded, download_count); + irreco_webdb_conf_set(*configuration, id, user, backend, + category, manufacturer, model, + file_hash, file_name, uploaded, + download_count); + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gint irreco_webdb_client_get_config_id_by_file_hash_and_file_name( + IrrecoWebdbClient *self, + const gchar *file_hash, + const gchar *file_name) +{ + GValue retval; + gint msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getConfigIdByFilehashAndFilename", &retval, G_TYPE_STRING, file_hash, + G_TYPE_STRING, file_name, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) { + IRRECO_RETURN_INT(msg); + } else { + IRRECO_RETURN_INT(0); + } + } else { + IRRECO_RETURN_INT(0); + } +} + +gboolean irreco_webdb_client_get_file(IrrecoWebdbClient *self, + const gchar *file_hash, + const gchar *file_name, + GString **file_data) +{ + GValue retval; + GHashTable *htable; + const gchar *ret; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getFile", &retval, G_TYPE_STRING, file_hash, G_TYPE_STRING, file_name, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) { + GValue *tmp; + tmp = g_hash_table_lookup (htable, "data"); + ret = g_value_get_string(tmp); + *file_data = g_string_new(ret); + g_hash_table_destroy (htable); + IRRECO_RETURN_BOOL(TRUE) + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + + +gboolean irreco_webdb_client_get_user_exists(IrrecoWebdbClient *self, + const gchar *name, + gboolean *user_exists) +{ + GValue retval; + gboolean tmp; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getUserExists", &retval, G_TYPE_STRING, name, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &tmp)) { + *user_exists = tmp; + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gint irreco_webdb_client_get_max_image_size(IrrecoWebdbClient *self) +{ + GValue retval; + gint max_image_size; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getMaxImageSize", &retval, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_INT, &max_image_size)) { + IRRECO_RETURN_INT(max_image_size); + } else { + IRRECO_RETURN_INT(0); + } + } else { + IRRECO_RETURN_INT(0); + } +} + +gint irreco_webdb_client_create_theme(IrrecoWebdbClient *self, + const gchar *name, + const gchar *comment, + const gchar *preview_button, + const gchar *folder, + const gchar *user, + const gchar *password) +{ + GValue retval; + gint msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "createNewTheme", &retval, G_TYPE_STRING, name, G_TYPE_STRING, comment, + G_TYPE_STRING, preview_button, G_TYPE_STRING, folder, + G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) { + IRRECO_RETURN_INT(msg); + } else { + IRRECO_RETURN_INT(0); + } + } else { + IRRECO_RETURN_INT(0); + } +} + +gboolean irreco_webdb_client_set_theme_downloadable(IrrecoWebdbClient *self, + gint id, + gboolean downloadable, + const gchar *user, + const gchar *password) +{ + GValue retval; + gboolean msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "setThemeDownloadable", &retval, G_TYPE_INT, id, + G_TYPE_BOOLEAN, downloadable, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) { + IRRECO_RETURN_BOOL(msg); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_themes(IrrecoWebdbClient *self, + IrrecoStringTable **theme_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *theme_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getThemes", &retval, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + /*g_print("value: %s\n", g_value_get_string( + g_value_array_get_nth(array, i)));*/ + irreco_string_table_add(*theme_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */ + } + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */ + } +} + +gboolean irreco_webdb_client_get_theme_by_id(IrrecoWebdbClient *self, + gint theme_id, + IrrecoWebdbTheme **theme) +{ + GValue retval; + GHashTable *htable; + const gchar *name = NULL; + const gchar *user = NULL; + const gchar *comment = NULL; + const gchar *preview_button = NULL; + const gchar *folder = NULL; + const gchar *uploaded = NULL; + const gchar *modified = NULL; + const gchar *downloaded = NULL; + gint download_count; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getThemeById", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) { + GValue *tmp; + tmp = g_hash_table_lookup (htable, "name"); + name = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "user"); + user = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "comment"); + comment = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "preview_button"); + preview_button = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "folder"); + folder = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "uploaded"); + uploaded = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "modified"); + modified = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "downloaded"); + downloaded = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "download_count"); + download_count = g_value_get_int(tmp); + tmp = g_hash_table_lookup (htable, "modified"); + modified = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "downloaded"); + downloaded = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "download_count"); + download_count = g_value_get_int(tmp); + + *theme = irreco_webdb_theme_new(); + + irreco_webdb_theme_set(*theme, theme_id, name, user, comment, + preview_button, NULL, folder, uploaded, modified, + downloaded, download_count); + + irreco_webdb_client_get_theme_versions_by_name(self, name, &(*theme)->versions); + + /* Get dates for versions */ + if ((*theme)->versions != NULL) + { + IRRECO_STRING_TABLE_FOREACH_KEY((*theme)->versions, key) + gchar *date = irreco_webdb_client_get_theme_date_by_id( + self, atoi(key)); + irreco_string_table_change_data ((*theme)->versions, + key, (gpointer) date); + IRRECO_STRING_TABLE_FOREACH_END + } + + if (name != NULL) g_free((gchar*)name); + if (user != NULL) g_free((gchar*)user); + if (comment != NULL) g_free((gchar*)comment); + if (preview_button != NULL) g_free((gchar*)preview_button); + if (folder != NULL) g_free((gchar*)folder); + if (uploaded != NULL) g_free((gchar*)uploaded); + if (modified != NULL) g_free((gchar*)modified); + if (downloaded != NULL) g_free((gchar*)downloaded); + + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_theme_versions_by_name(IrrecoWebdbClient *self, + const char *name, + IrrecoStringTable **theme_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *theme_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getThemeVersionsByName", &retval, G_TYPE_STRING, name, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + /*g_print("value: %s\n", g_value_get_string( + g_value_array_get_nth(array, i)));*/ + irreco_string_table_add(*theme_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gchar *irreco_webdb_client_get_theme_date_by_id(IrrecoWebdbClient *self, + gint theme_id) +{ + GValue retval; + gchar *date = NULL; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getThemeDateById", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) { + g_print("tyyppinen: %s\n", G_VALUE_TYPE_NAME(&retval)); + if(check_xmlrpc (&retval, G_TYPE_STRING, &date)) { + IRRECO_RETURN_PTR(date); + } else { + IRRECO_RETURN_PTR(date); + } + } else { + IRRECO_RETURN_PTR(date); + } +} + +gint irreco_webdb_client_get_theme_id_by_name_and_date(IrrecoWebdbClient *self, + const gchar *name, + const gchar *date) +{ + GValue retval; + gint msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getThemeIdByNameAndDate", &retval, G_TYPE_STRING, name, + G_TYPE_STRING, date, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) { + IRRECO_RETURN_INT(msg); + } else { + IRRECO_RETURN_INT(0); + } + } else { + IRRECO_RETURN_INT(0); + } +} + +gint irreco_webdb_client_add_bg_to_theme(IrrecoWebdbClient *self, + const gchar *name, + const gchar *image_hash, + const gchar *image_name, + const guchar *image, + gint image_len, + const gchar *folder, + gint theme_id, + const gchar *user, + const gchar *password) +{ + GValue retval; + gint msg; + gchar *base64_image; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + base64_image = g_base64_encode(image, image_len); + + if(do_xmlrpc (self, "addBgToTheme", &retval, G_TYPE_STRING, name, G_TYPE_STRING, image_hash, + G_TYPE_STRING, image_name, G_TYPE_STRING, base64_image, G_TYPE_STRING, folder, + G_TYPE_INT, theme_id, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) { + IRRECO_RETURN_INT(msg); + } else { + IRRECO_RETURN_INT(0); + } + } else { + IRRECO_RETURN_INT(0); + } +} + +gboolean irreco_webdb_client_get_backgrounds(IrrecoWebdbClient *self, + gint theme_id, + IrrecoStringTable **bg_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *bg_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getBackgrounds", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + /*g_print("value: %s\n", g_value_get_string( + g_value_array_get_nth(array, i)));*/ + irreco_string_table_add(*bg_list, + g_strdup_printf("%d", g_value_get_int( + g_value_array_get_nth(array, i))), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + + +gboolean irreco_webdb_client_get_bg_by_id(IrrecoWebdbClient *self, + gint bg_id, + const char *theme_bg_dir) +{ + GValue retval; + GHashTable *htable; + gchar *name = NULL; + gchar *image_hash = NULL; + gchar *image_name = NULL; + gchar *image_data = NULL; + gchar *folder = NULL; + gchar *base64_image = NULL; + GString *image_path = g_string_new(theme_bg_dir); + GString *keyfile_path = g_string_new(theme_bg_dir); + GKeyFile *keyfile = g_key_file_new(); + gsize base64_len; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getBgById", &retval, G_TYPE_INT, bg_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) { + GValue *tmp; + tmp = g_hash_table_lookup (htable, "name"); + name = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "image_hash"); + image_hash = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "image_name"); + image_name = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "image_data"); + base64_image = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "folder"); + folder = (gchar*) g_value_get_string(tmp); + + /* Create Folder */ + g_string_append_printf(image_path, "/%s", folder); + IRRECO_DEBUG("mkdir %s\n",image_path->str); + g_mkdir(image_path->str, 0777); + + /* Save image to folder */ + image_data = (gchar*) g_base64_decode(base64_image, &base64_len); + g_string_append_printf(image_path, "/%s", image_name); + irreco_write_file(image_path->str, image_data, base64_len); + + /* Create keyfile and save it to folder*/ + irreco_gkeyfile_set_string(keyfile, "theme-bg" , "name", name); + irreco_gkeyfile_set_string(keyfile, "theme-bg", "image", image_name); + g_string_append_printf(keyfile_path, "/%s/bg.conf", folder); + irreco_write_keyfile(keyfile, keyfile_path->str); + + if (name != NULL) g_free(name); + if (image_hash != NULL) g_free(image_hash); + if (image_name != NULL) g_free(image_name); + if (image_data != NULL) g_free(image_data); + if (base64_image != NULL) g_free(base64_image); + if (folder != NULL) g_free(folder); + + g_key_file_free(keyfile); + g_string_free(keyfile_path, TRUE); + g_string_free(image_path, TRUE); + IRRECO_RETURN_BOOL(TRUE); + } else { + g_key_file_free(keyfile); + g_string_free(keyfile_path, TRUE); + g_string_free(image_path, TRUE); + IRRECO_RETURN_BOOL(FALSE); + } + } else { + g_key_file_free(keyfile); + g_string_free(keyfile_path, TRUE); + g_string_free(image_path, TRUE); + IRRECO_RETURN_BOOL(FALSE); + } +} + +gint irreco_webdb_client_add_button_to_theme(IrrecoWebdbClient *self, + const gchar *name, + gboolean allow_text, + const gchar *text_format_up, + const gchar *text_format_down, + gint text_padding, + gfloat text_h_align, + gfloat text_v_align, + const gchar *image_up_hash, + const gchar *image_up_name, + const guchar *image_up, + gint image_up_len, + const gchar *image_down_hash, + const gchar *image_down_name, + const guchar *image_down, + gint image_down_len, + const gchar *folder, + gint theme_id, + const gchar *user, + const gchar *password) +{ + GValue retval; + gint msg; + gchar *base64_image_up; + gchar *base64_image_down; + + IRRECO_ENTER + + base64_image_up = g_base64_encode(image_up, image_up_len); + base64_image_down = g_base64_encode(image_down, image_down_len); + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "addButtonToTheme", &retval, G_TYPE_STRING, name, G_TYPE_BOOLEAN, allow_text, + G_TYPE_STRING, text_format_up, G_TYPE_STRING, text_format_down, G_TYPE_INT, text_padding, + G_TYPE_DOUBLE, text_h_align, G_TYPE_DOUBLE, text_v_align, G_TYPE_STRING, image_up_hash, + G_TYPE_STRING, image_up_name, G_TYPE_STRING, base64_image_up, G_TYPE_STRING, image_down_hash, + G_TYPE_STRING, image_down_name, G_TYPE_STRING, base64_image_down, G_TYPE_STRING, folder, + G_TYPE_INT, theme_id, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) { + g_free(base64_image_up); + g_free(base64_image_down); + IRRECO_RETURN_INT(msg); + } else { + g_free(base64_image_up); + g_free(base64_image_down); + IRRECO_RETURN_INT(0); + } + } else { + g_free(base64_image_up); + g_free(base64_image_down); + IRRECO_RETURN_INT(0); + } +} + +gboolean irreco_webdb_client_get_buttons(IrrecoWebdbClient *self, + gint theme_id, + IrrecoStringTable **button_list) +{ + gint i = 0; + GValue retval; + gint msg; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *button_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getButtons", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + /*g_print("value: %s\n", g_value_get_string( + g_value_array_get_nth(array, i)));*/ + irreco_string_table_add(*button_list, + g_strdup_printf("%d", g_value_get_int( + g_value_array_get_nth(array, i))), + NULL); + } + IRRECO_RETURN_INT(msg); + } else { + IRRECO_RETURN_INT(0); + } + } else { + IRRECO_RETURN_INT(0); + } +} + + +gboolean irreco_webdb_client_get_button_by_id(IrrecoWebdbClient *self, + gint button_id, + const char *theme_button_dir) +{ + GValue retval; + GHashTable *htable; + gchar *name = NULL; + gboolean allow_text = FALSE; + gchar *text_format_up = NULL; + gchar *text_format_down = NULL; + glong text_padding; + gdouble text_h_align; + gdouble text_v_align; + gchar *image_up_hash = NULL; + gchar *image_up_name = NULL; + gchar *image_up = NULL; + gchar *base64_image_up = NULL; + gchar *image_down_hash = NULL; + gchar *image_down_name = NULL; + gchar *image_down = NULL; + gchar *base64_image_down = NULL; + gchar *folder = NULL; + gchar *image_down_hash_tmp = NULL; + GString *file_path = g_string_new(""); + GKeyFile *keyfile = g_key_file_new(); + gsize image_down_len; + gsize image_up_len; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getButtonById", &retval, G_TYPE_INT, button_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) { + GValue *tmp; + tmp = g_hash_table_lookup (htable, "name"); + name = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "allow_text"); + allow_text = g_value_get_boolean(tmp); + tmp = g_hash_table_lookup (htable, "text_format_up"); + text_format_up = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "text_format_down"); + text_format_down = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "text_padding"); + text_padding = g_value_get_int(tmp); + tmp = g_hash_table_lookup (htable, "text_h_align"); + text_h_align = g_value_get_double(tmp); + tmp = g_hash_table_lookup (htable, "text_v_align"); + text_v_align = g_value_get_double(tmp); + tmp = g_hash_table_lookup (htable, "image_up_hash"); + image_up_hash = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "image_up_name"); + image_up_name = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "image_up"); + base64_image_up = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "image_down_hash"); + image_down_hash = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "image_down_name"); + image_down_name = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "image_down"); + base64_image_down = (gchar*) g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "folder"); + folder = (gchar*) g_value_get_string(tmp); + + /* Create Folder */ + g_string_printf(file_path, "%s/%s", theme_button_dir, folder); + IRRECO_DEBUG("mkdir %s\n",file_path->str); + g_mkdir(file_path->str, 0777); + + /* Save image_up to folder */ + g_string_printf(file_path, "%s/%s/%s", theme_button_dir, folder, + image_up_name); + image_up = (gchar*) g_base64_decode(base64_image_up, &image_up_len); + irreco_write_file(file_path->str, image_up, image_up_len); + + /* Save image_down to folder */ + g_string_printf(file_path, "%s/%s/%s", theme_button_dir, folder, + image_down_name); + + /*Check image hash data*/ + image_down = (gchar*) g_base64_decode(base64_image_down, + &image_down_len); + irreco_write_file(file_path->str, image_down, image_down_len); + image_down_hash_tmp = g_compute_checksum_for_string(G_CHECKSUM_SHA1, + image_down, image_down_len); + + /* Create keyfile and save it to folder*/ + irreco_gkeyfile_set_string(keyfile, "theme-button" , "name", name); + + if (allow_text) { + irreco_gkeyfile_set_string(keyfile, "theme-button", + "allow-text", "true"); + } else { + irreco_gkeyfile_set_string(keyfile, "theme-button", + "allow-text", "false"); + } + + irreco_gkeyfile_set_string(keyfile, "theme-button", + "up", image_up_name); + + irreco_gkeyfile_set_string(keyfile, "theme-button", + "down", image_down_name); + + if (text_format_up != NULL && strlen(text_format_up) > 0) { + irreco_gkeyfile_set_string(keyfile, "theme-button", + "text-format-up", text_format_up); + } + + if (text_format_down != NULL && strlen(text_format_down) > 0) { + irreco_gkeyfile_set_string(keyfile, "theme-button", + "text-format-down", text_format_down); + } + + irreco_gkeyfile_set_glong(keyfile, "theme-button", + "text-padding", (glong)text_padding); + + irreco_gkeyfile_set_gfloat(keyfile, "theme-button", + "text-h-align", (gfloat) text_h_align); + + irreco_gkeyfile_set_gfloat(keyfile, "theme-button", + "text-v-align", (gfloat) text_v_align); + + g_string_printf(file_path, "%s/%s/button.conf", + theme_button_dir, folder); + irreco_write_keyfile(keyfile, file_path->str); + + if (name != NULL) g_free(name); + if (text_format_up != NULL) g_free(text_format_up); + if (text_format_down != NULL) g_free(text_format_down); + if (image_up_hash != NULL) g_free(image_up_hash); + if (image_up_name != NULL) g_free(image_up_name); + if (image_up != NULL) g_free(image_up); + if (base64_image_up != NULL) g_free(base64_image_up); + if (image_down_hash != NULL) g_free(image_down_hash); + if (image_down_name != NULL) g_free(image_down_name); + if (image_down != NULL) g_free(image_down); + if (image_down_hash_tmp != NULL) g_free(image_down_hash_tmp); + if (base64_image_down != NULL) g_free(base64_image_down); + if (folder != NULL) g_free(folder); + + g_key_file_free(keyfile); + g_string_free(file_path, TRUE); + + IRRECO_RETURN_BOOL(TRUE); + } else { + if (name != NULL) g_free(name); + if (text_format_up != NULL) g_free(text_format_up); + if (text_format_down != NULL) g_free(text_format_down); + if (image_up_hash != NULL) g_free(image_up_hash); + if (image_up_name != NULL) g_free(image_up_name); + if (image_up != NULL) g_free(image_up); + if (base64_image_up != NULL) g_free(base64_image_up); + if (image_down_hash != NULL) g_free(image_down_hash); + if (image_down_name != NULL) g_free(image_down_name); + if (image_down != NULL) g_free(image_down); + if (image_down_hash_tmp != NULL) g_free(image_down_hash_tmp); + if (base64_image_down != NULL) g_free(base64_image_down); + if (folder != NULL) g_free(folder); + + g_key_file_free(keyfile); + g_string_free(file_path, TRUE); + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_preview_button(IrrecoWebdbClient *self, + gint theme_id, + GdkPixbuf **preview_button) +{ + GValue retval; + gchar *base64_data = NULL; + guchar *data; + gsize len; + GdkPixbufLoader *pl; + GError *error = NULL; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getPreviewButton", &retval, G_TYPE_INT, theme_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_STRING, &base64_data)) { + data = g_base64_decode(base64_data, &len); + pl = gdk_pixbuf_loader_new(); + gdk_pixbuf_loader_write(pl, data, len, &error); + + if(error != NULL) + { + /*g_string_printf(self->error_msg, "ERROR: %s", error->message);*/ + IRRECO_DEBUG("%s\n", error->message); + if (base64_data != NULL) g_free(base64_data); + IRRECO_RETURN_BOOL(FALSE); + } + + gdk_pixbuf_loader_close(pl, NULL); + *preview_button = gdk_pixbuf_loader_get_pixbuf(pl); + + if (base64_data != NULL) g_free(base64_data); + + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_add_user(IrrecoWebdbClient *self, + const gchar *name, + const gchar *email, + const gchar *passwd) +{ + GValue retval; + gboolean msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "addUser", &retval, G_TYPE_STRING, name, G_TYPE_STRING, email, + G_TYPE_STRING, passwd, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) { + IRRECO_RETURN_BOOL(msg); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +/** + * Login user to WebDB. + * + */ +gboolean irreco_webdb_client_login(IrrecoWebdbClient *self, + const gchar *user, + const gchar *password) +{ + GValue retval; + gboolean msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "loginToDB", &retval, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) { + IRRECO_RETURN_BOOL(msg); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gint irreco_webdb_client_create_new_remote(IrrecoWebdbClient *self, + const gchar *comment, + const gchar *category, + const gchar *manufacturer, + const gchar *model, + const gchar *file_name, + const gchar *file_data, + const gchar *user, + const gchar *password) +{ + GValue retval; + gint msg; + gchar *file_hash; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + file_hash = g_compute_checksum_for_string(G_CHECKSUM_SHA1, file_data, -1); + + if(do_xmlrpc (self, "createNewRemote", &retval, G_TYPE_STRING, comment, G_TYPE_STRING, category, + G_TYPE_STRING, manufacturer, G_TYPE_STRING, model, G_TYPE_STRING, file_hash, + G_TYPE_STRING, file_name, G_TYPE_STRING, file_data, G_TYPE_STRING, user, + G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_INT, &msg)) { + IRRECO_RETURN_INT(msg); + } else { + IRRECO_RETURN_INT(0); + } + } else { + IRRECO_RETURN_INT(0); + } +} + +gboolean irreco_webdb_client_set_remote_downloadable(IrrecoWebdbClient *self, + gint id, + gboolean downloadable, + const gchar *user, + const gchar *password) +{ + GValue retval; + gboolean msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "setRemoteDownloadable", &retval, G_TYPE_INT, id, + G_TYPE_BOOLEAN, downloadable, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) { + IRRECO_RETURN_BOOL(msg); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_add_configuration_to_remote( + IrrecoWebdbClient *self, + gint remote_id, + gint configuration_id, + const gchar *user, + const gchar *password) +{ + GValue retval; + gboolean msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "addConfigurationToRemote", &retval, G_TYPE_INT, remote_id, + G_TYPE_INT, configuration_id, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) { + IRRECO_RETURN_BOOL(msg); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_add_theme_to_remote(IrrecoWebdbClient *self, + gint remote_id, + gint theme_id, + const gchar *user, + const gchar *password) +{ + GValue retval; + gboolean msg; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "addThemeToRemote", &retval, G_TYPE_INT, remote_id, + G_TYPE_INT, theme_id, G_TYPE_STRING, user, G_TYPE_STRING, password, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_BOOLEAN, &msg)) { + IRRECO_RETURN_BOOL(msg); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_remote_categories(IrrecoWebdbClient *self, + IrrecoStringTable **category_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *category_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getRemoteCategories", &retval, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + /*g_print("value: %s\n", g_value_get_string( + g_value_array_get_nth(array, i)));*/ + irreco_string_table_add(*category_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */ + } + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */ + } +} + +gboolean irreco_webdb_client_get_remote_manufacturers(IrrecoWebdbClient *self, + const gchar *category, + IrrecoStringTable **manufacturer_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *manufacturer_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getRemoteManufacturers", &retval, G_TYPE_STRING, category, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + /*g_print("value: %s\n", g_value_get_string( + g_value_array_get_nth(array, i)));*/ + irreco_string_table_add(*manufacturer_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */ + } + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */ + } +} + +gboolean irreco_webdb_client_get_remote_models(IrrecoWebdbClient *self, + const gchar *category, + const gchar *manufacturer, + IrrecoStringTable **model_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *model_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getRemoteModels", &retval, G_TYPE_STRING, category, + G_TYPE_STRING, manufacturer, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + /*g_print("value: %s\n", g_value_get_string( + g_value_array_get_nth(array, i)));*/ + irreco_string_table_add(*model_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */ + } + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */ + } +} + +gboolean irreco_webdb_client_get_remote_creators(IrrecoWebdbClient *self, + const gchar *category, + const gchar *manufacturer, + const gchar *model, + IrrecoStringTable **creators) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *creators = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getRemoteCreators", &retval, G_TYPE_STRING, category, + G_TYPE_STRING, manufacturer, G_TYPE_STRING, model, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + /*g_print("value: %s\n", g_value_get_string( + g_value_array_get_nth(array, i)));*/ + irreco_string_table_add(*creators, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */ + } + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */ + } +} + +gboolean irreco_webdb_client_get_remotes(IrrecoWebdbClient *self, + const gchar *category, + const gchar *manufacturer, + const gchar *model, + const gchar *creator, + GList **remote_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *remote_list = NULL; + + if(do_xmlrpc (self, "getRemotes", &retval, G_TYPE_STRING, category, G_TYPE_STRING, + manufacturer, G_TYPE_STRING, model, G_TYPE_STRING, creator, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + g_print("value: %d\n", g_value_get_int( + g_value_array_get_nth(array, i))); + *remote_list = g_list_append(*remote_list, + GINT_TO_POINTER(g_value_get_int( + g_value_array_get_nth(array, i)))); + } + + *remote_list = g_list_first(*remote_list); + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */ + } + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */ + } +} + +gboolean irreco_webdb_client_get_remote_by_id(IrrecoWebdbClient *self, + gint id, + IrrecoWebdbRemote **remote) +{ + GValue retval; + const gchar *user = NULL; + const gchar *comment = NULL; + const gchar *category = NULL; + const gchar *manufacturer = NULL; + const gchar *model = NULL; + const gchar *file_hash = NULL; + const gchar *file_name = NULL; + const gchar *uploaded = NULL; + const gchar *modified = NULL; + const gchar *downloaded = NULL; + gint download_count; + GHashTable *htable; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getRemoteById", &retval, G_TYPE_INT, id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) { + GValue *tmp; + tmp = g_hash_table_lookup (htable, "user"); + user = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "comment"); + comment = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "category"); + category = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "manufacturer"); + manufacturer = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "model"); + model = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "file_hash"); + file_hash = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "file_name"); + file_name = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "uploaded"); + uploaded = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "modified"); + modified = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "downloaded"); + downloaded = g_value_get_string(tmp); + tmp = g_hash_table_lookup (htable, "download_count"); + download_count = g_value_get_int(tmp); + +/* g_print("blbbi: %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d", user, comment, category, + manufacturer, model, file_hash, file_name, uploaded, modified, downloaded, download_count);*/ + + *remote = irreco_webdb_remote_new(); + irreco_webdb_remote_set(*remote, id, user, comment, category, + manufacturer, model, file_hash, file_name, + uploaded, modified, downloaded, download_count); + + if (user != NULL) g_free((gchar*)user); + if (comment != NULL) g_free((gchar*)comment); + if (category != NULL) g_free((gchar*)category); + if (manufacturer != NULL) g_free((gchar*)manufacturer); + if (model != NULL) g_free((gchar*)model); + if (file_hash != NULL) g_free((gchar*)file_hash); + if (file_name != NULL) g_free((gchar*)file_name); + if (uploaded != NULL) g_free((gchar*)uploaded); + if (modified != NULL) g_free((gchar*)modified); + if (downloaded != NULL) g_free((gchar*)downloaded); + + IRRECO_RETURN_BOOL(TRUE); + } else { + + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + + +gboolean irreco_webdb_client_get_themes_of_remote(IrrecoWebdbClient *self, + gint remote_id, + GList **themes) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *themes = NULL; + + if(do_xmlrpc (self, "getThemesOfRemote", &retval, G_TYPE_INT, remote_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + g_print("value: %d\n", g_value_get_int( + g_value_array_get_nth(array, i))); + *themes = g_list_append(*themes, + GINT_TO_POINTER(g_value_get_int( + g_value_array_get_nth(array, i)))); + } + + *themes = g_list_first(*themes); + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */ + } + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */ + } +} + + +gboolean irreco_webdb_client_get_configurations_of_remote( + IrrecoWebdbClient *self, + gint remote_id, + GList **configs) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *configs = NULL; + + if(do_xmlrpc (self, "getConfigurationsOfRemote", &retval, G_TYPE_INT, remote_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + g_print("value: %d\n", g_value_get_int( + g_value_array_get_nth(array, i))); + *configs = g_list_append(*configs, + GINT_TO_POINTER(g_value_get_int( + g_value_array_get_nth(array, i)))); + } + + *configs = g_list_first(*configs); + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed check_xmlrpc */ + } + } else { + IRRECO_RETURN_BOOL(FALSE); /* Failed do_xmlrpc */ + } +} + +gboolean irreco_webdb_client_get_remote_data(IrrecoWebdbClient *self, + gint remote_id, + gchar **file_data) +{/* #define IRRECO_WEBDB_URL "http://localhost/irreco/webdb/" */ + + GValue retval; + GHashTable *htable; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + + if(do_xmlrpc (self, "getRemoteData", &retval, G_TYPE_INT, remote_id, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_HASH_TABLE, &htable)) { + GValue *tmp; + tmp = g_hash_table_lookup (htable, "data"); + *file_data = (gchar*) g_value_get_string(tmp); + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_lirc_dirs(IrrecoWebdbClient *self, + IrrecoStringTable **dir_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *dir_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getLircDirs", &retval, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value type is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*dir_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_lirc_manufacturers(IrrecoWebdbClient *self, + const gchar *range, + IrrecoStringTable **manufacturer_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *manufacturer_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getLircManufacturers", &retval, G_TYPE_STRING, range, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*manufacturer_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_lirc_models(IrrecoWebdbClient *self, + const gchar *manufacturer, + IrrecoStringTable **model_list) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *model_list = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getLircModels", &retval, G_TYPE_STRING, manufacturer, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*model_list, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +gboolean irreco_webdb_client_get_lirc_file(IrrecoWebdbClient *self, + const gchar *model, + IrrecoStringTable **file) +{ + gint i = 0; + GValue retval; + GValueArray *array; + + IRRECO_ENTER + + irreco_webdb_client_reset_env(self); + *file = irreco_string_table_new(NULL, NULL); + + if(do_xmlrpc (self, "getLircFile", &retval, G_TYPE_STRING, model, G_TYPE_INVALID)) { + if(check_xmlrpc (&retval, G_TYPE_VALUE_ARRAY, &array)) { + for(i = 0; i < array->n_values; i++) { + g_print("%d value is: %s\n", i, G_VALUE_TYPE_NAME( + g_value_array_get_nth(array, i))); + irreco_string_table_add(*file, + g_value_get_string( + g_value_array_get_nth(array, i)), + NULL); + } + IRRECO_RETURN_BOOL(TRUE); + } else { + IRRECO_RETURN_BOOL(FALSE); + } + } else { + IRRECO_RETURN_BOOL(FALSE); + } +} + +/** @} */ + + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ +/* Events and Callbacks */ +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ + +/** @} */ diff --git a/irreco/src/webdb/irreco_webdb_client.h b/irreco/src/webdb/irreco_webdb_client.h index f2c4ad36..69714a54 100644 --- a/irreco/src/webdb/irreco_webdb_client.h +++ b/irreco/src/webdb/irreco_webdb_client.h @@ -57,8 +57,7 @@ typedef struct _IrrecoWebdbClient IrrecoWebdbClient; #include "irreco_webdb_theme.h" #include "irreco_webdb_remote.h" #include -#include -#include "irreco_sha1.h" +/*#include */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Datatypes */ @@ -125,7 +124,6 @@ gboolean irreco_webdb_client_get_models(IrrecoWebdbClient *self, IrrecoStringTable **model_list); gboolean irreco_webdb_client_get_configs(IrrecoWebdbClient *self, - const gchar *category, const gchar *manufacturer, const gchar *model, IrrecoStringTable **config_list); @@ -307,6 +305,18 @@ gboolean irreco_webdb_client_get_configurations_of_remote( gboolean irreco_webdb_client_get_remote_data(IrrecoWebdbClient *self, gint remote_id, gchar **file_data); +gboolean irreco_webdb_client_get_lirc_dirs(IrrecoWebdbClient *self, + IrrecoStringTable **dir_list); +gboolean irreco_webdb_client_get_lirc_manufacturers(IrrecoWebdbClient *self, + const gchar *range, + IrrecoStringTable **manufacturer_list); +gboolean irreco_webdb_client_get_lirc_models(IrrecoWebdbClient *self, + const gchar *manufacturer, + IrrecoStringTable **model_list); +gboolean irreco_webdb_client_get_lirc_file(IrrecoWebdbClient *self, + const gchar *model, + IrrecoStringTable **file); + #endif /* __IRRECO_WEBDB_CLIENT__ */ -- 2.11.4.GIT