diff options
| author | Leandro A. F. Pereira <leandro@hardinfo.org> | 2009-05-01 21:48:01 -0300 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2009-05-01 21:48:01 -0300 | 
| commit | d42d81949a49fa71cc84f2e4120b65fd91cb61b2 (patch) | |
| tree | 6b0bf5d4b4c22f69a21f1e4f9d18d528469c3d5c /hardinfo2 | |
| parent | ddf9b782e39355db410ae4225d7a41a8dea902c4 (diff) | |
Makes the XMLRPC client synchronous (fixes some stability problems)
Diffstat (limited to 'hardinfo2')
| -rw-r--r-- | hardinfo2/remote.c | 41 | ||||
| -rw-r--r-- | hardinfo2/shell.c | 15 | ||||
| -rw-r--r-- | hardinfo2/xmlrpc-client.c | 4 | ||||
| -rw-r--r-- | hardinfo2/xmlrpc-server.c | 1 | 
4 files changed, 45 insertions, 16 deletions
| diff --git a/hardinfo2/remote.c b/hardinfo2/remote.c index e9d03ef1..dff44d03 100644 --- a/hardinfo2/remote.c +++ b/hardinfo2/remote.c @@ -26,6 +26,8 @@  #include "xmlrpc-client.h" +#define XMLRPC_SERVER_VERSION		1 +  /*   * TODO   * @@ -71,16 +73,20 @@ static RemoteDialog *remote_dialog_new(GtkWidget *parent);  static gboolean remote_version_is_supported(void)  { +    gint remote_ver; +      shell_status_update("Obtaining remote server API version..."); +    remote_ver = xmlrpc_get_integer("http://localhost:4242/xmlrpc", "server.getAPIVersion", NULL); -    switch (xmlrpc_get_integer("http://localhost:4242/xmlrpc", "server.getAPIVersion", NULL)) { +    switch (remote_ver) {      case -1:          g_warning("Remote Host didn't respond.");          break; -    case 1: +    case XMLRPC_SERVER_VERSION:          return TRUE;      default: -        g_warning("Remote Host has an unsupported API version."); +        g_warning("Remote Host has an unsupported API version (%d). Expected version is %d.", +                  remote_ver, XMLRPC_SERVER_VERSION);      }      return FALSE; @@ -89,17 +95,18 @@ static gboolean remote_version_is_supported(void)  static gchar *remote_module_entry_func()  {      Shell *shell = shell_get_main_shell(); +    gchar *ret; -    shell_status_pulse(); -    return xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryFunction", -                             "%s%i", shell->selected_module_name, shell->selected->number); +    ret = xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryFunction", +                            "%s%i", shell->selected_module_name, shell->selected->number); +     +    return ret;  }  static void remote_module_entry_scan_func()  {      Shell *shell = shell_get_main_shell(); -    shell_status_pulse();      xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryScan",                        "%s%i", shell->selected_module_name, shell->selected->number);  } @@ -107,19 +114,23 @@ static void remote_module_entry_scan_func()  static gchar *remote_module_entry_field_func(gchar *entry)  {      Shell *shell = shell_get_main_shell(); +    gchar *ret; -    shell_status_pulse(); -    return xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryGetField", -                             "%s%i%s", shell->selected_module_name, shell->selected->number, entry); +    ret = xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryGetField", +                            "%s%i%s", shell->selected_module_name, shell->selected->number, entry); +     +    return ret;   }  static gchar *remote_module_entry_more_func(gchar *entry)  {      Shell *shell = shell_get_main_shell(); +    gchar *ret; -    shell_status_pulse(); -    return xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryGetMoreInfo", +    ret = xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryGetMoreInfo",                               "%s%i%s", shell->selected_module_name, shell->selected->number, entry); +     +    return ret;  }  static gchar *remote_module_entry_note_func(gint entry) @@ -127,10 +138,9 @@ static gchar *remote_module_entry_note_func(gint entry)      Shell *shell = shell_get_main_shell();      gchar *note; -    shell_status_pulse();      note = xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryGetNote",                               "%s%i", shell->selected_module_name, shell->selected->number); -    if (!*note) { +    if (note && *note == '\0') {          g_free(note);          return NULL;      } @@ -185,6 +195,8 @@ static gboolean load_module_list()                  e->notefunc = remote_module_entry_note_func;                  m->entries = g_slist_append(m->entries, e); + +                shell_status_pulse();              }              g_value_array_free(entries); @@ -228,6 +240,7 @@ void remote_dialog_show(GtkWidget *parent)  	remote_connect(rd);  	shell_status_set_enabled(FALSE); +	shell_view_set_enabled(TRUE);      }      gtk_widget_destroy(rd->dialog); diff --git a/hardinfo2/shell.c b/hardinfo2/shell.c index 7ffd1b52..3451a8f4 100644 --- a/hardinfo2/shell.c +++ b/hardinfo2/shell.c @@ -437,6 +437,7 @@ static void view_menu_select_entry(gpointer data, gpointer data2)  static void add_module_to_menu(gchar * name, GdkPixbuf * pixbuf)  { +    GtkAction *action;      gchar *about_module = g_strdup_printf("AboutModule%s", name);      gint merge_id; @@ -461,6 +462,14 @@ static void add_module_to_menu(gchar * name, GdkPixbuf * pixbuf)      stock_icon_register_pixbuf(pixbuf, name); +    if ((action = gtk_action_group_get_action(shell->action_group, name))) { +        gtk_action_group_remove_action(shell->action_group, action); +    } + +    if ((action = gtk_action_group_get_action(shell->action_group, about_module))) { +        gtk_action_group_remove_action(shell->action_group, action); +    } +      gtk_action_group_add_actions(shell->action_group, entries, 2, NULL);      merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager); @@ -483,6 +492,7 @@ static void  add_module_entry_to_view_menu(gchar * module, gchar * name,  			      GdkPixbuf * pixbuf, GtkTreeIter * iter)  { +    GtkAction *action;      gint merge_id;      GtkActionEntry entries[] = {  	{ @@ -496,6 +506,11 @@ add_module_entry_to_view_menu(gchar * module, gchar * name,      };      stock_icon_register_pixbuf(pixbuf, name); + +    if ((action = gtk_action_group_get_action(shell->action_group, name))) { +        gtk_action_group_remove_action(shell->action_group, action); +    } +      gtk_action_group_add_actions(shell->action_group, entries, 1, iter);      merge_id = gtk_ui_manager_new_merge_id(shell->ui_manager); diff --git a/hardinfo2/xmlrpc-client.c b/hardinfo2/xmlrpc-client.c index ae8b1078..2d3b21e8 100644 --- a/hardinfo2/xmlrpc-client.c +++ b/hardinfo2/xmlrpc-client.c @@ -27,11 +27,11 @@ static SoupSession	*session = NULL;  void xmlrpc_init(void)  {      if (!loop) { -      loop = g_main_loop_new(FALSE, TRUE); +      loop = g_main_loop_new(FALSE, FALSE);      }      if (!session) { -      session = soup_session_async_new_with_options(SOUP_SESSION_TIMEOUT, 10, NULL); +      session = soup_session_sync_new_with_options(SOUP_SESSION_TIMEOUT, 10, NULL);      }  }     diff --git a/hardinfo2/xmlrpc-server.c b/hardinfo2/xmlrpc-server.c index e05478f7..5278765c 100644 --- a/hardinfo2/xmlrpc-server.c +++ b/hardinfo2/xmlrpc-server.c @@ -233,6 +233,7 @@ static void method_entry_get_field(SoupMessage * msg, GValueArray * params)            GSList *entry_node = g_slist_nth(module->entries, entry_number);            ShellModuleEntry *entry = (ShellModuleEntry *)entry_node->data; +          DEBUG("[%s][%s]", module_name, field_name);            answer = module_entry_get_field(entry, field_name);          }      } | 
