aboutsummaryrefslogtreecommitdiff
path: root/hardinfo2
diff options
context:
space:
mode:
Diffstat (limited to 'hardinfo2')
-rw-r--r--hardinfo2/hardinfo.h2
-rw-r--r--hardinfo2/remote.c132
-rw-r--r--hardinfo2/shell.h2
-rw-r--r--hardinfo2/util.c11
-rw-r--r--hardinfo2/xmlrpc-client.c6
5 files changed, 138 insertions, 15 deletions
diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h
index 2314c043..5bad88e9 100644
--- a/hardinfo2/hardinfo.h
+++ b/hardinfo2/hardinfo.h
@@ -116,7 +116,7 @@ void module_entry_scan(ShellModuleEntry *module_entry);
gchar *module_entry_function(ShellModuleEntry *module_entry);
const gchar *module_entry_get_note(ShellModuleEntry *module_entry);
gchar *module_entry_get_field(ShellModuleEntry * module_entry, gchar * field);
-gchar *module_entry_get_moreinfo(ShellModuleEntry * module_entry);
+gchar *module_entry_get_moreinfo(ShellModuleEntry * module_entry, gchar * field);
/* BinReloc stuff */
diff --git a/hardinfo2/remote.c b/hardinfo2/remote.c
index 5abf3a91..f0922d3f 100644
--- a/hardinfo2/remote.c
+++ b/hardinfo2/remote.c
@@ -86,6 +86,46 @@ static gboolean remote_version_is_supported(void)
return FALSE;
}
+static gchar *remote_module_entry_func()
+{
+ Shell *shell = shell_get_main_shell();
+
+ return xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryFunction",
+ "%s%i", shell->selected_module_name, shell->selected->number);
+}
+
+static gchar *remote_module_entry_scan_func()
+{
+ Shell *shell = shell_get_main_shell();
+
+ return xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryScan",
+ "%s%i", shell->selected_module_name, shell->selected->number);
+}
+
+static gchar *remote_module_entry_field_func(gchar *entry)
+{
+ Shell *shell = shell_get_main_shell();
+
+ return xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryGetField",
+ "%s%i%s", shell->selected_module_name, shell->selected->number, entry);
+}
+
+static gchar *remote_module_entry_more_func(gchar *entry)
+{
+ Shell *shell = shell_get_main_shell();
+
+ return xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryGetMoreInfo",
+ "%s%i%s", shell->selected_module_name, shell->selected->number, entry);
+}
+
+static gchar *remote_module_entry_note_func(gint entry)
+{
+ Shell *shell = shell_get_main_shell();
+
+ return xmlrpc_get_string("http://localhost:4242/xmlrpc", "module.entryGetNote",
+ "%s%i", shell->selected_module_name, shell->selected->number);
+}
+
static gboolean load_module_list()
{
GValueArray *modules;
@@ -209,6 +249,86 @@ static void populate_store(GtkListStore * store)
g_key_file_free(remote);
}
+static GtkWidget *host_editor_dialog_new(GtkWidget *parent, gchar *title)
+{
+ GtkWidget *dialog, *dialog1_action_area, *button7, *button8;
+
+ dialog = gtk_dialog_new();
+ gtk_window_set_title(GTK_WINDOW(dialog), title);
+ gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
+ gtk_window_set_default_size(GTK_WINDOW(dialog), 420, 260);
+ gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(parent));
+ gtk_window_set_position(GTK_WINDOW(dialog),
+ GTK_WIN_POS_CENTER_ON_PARENT);
+ gtk_window_set_type_hint(GTK_WINDOW(dialog),
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ dialog1_action_area = GTK_DIALOG(dialog)->action_area;
+ gtk_widget_show(dialog1_action_area);
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog1_action_area),
+ GTK_BUTTONBOX_END);
+
+ button8 = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ gtk_widget_show(button8);
+ gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button8,
+ GTK_RESPONSE_CANCEL);
+ GTK_WIDGET_SET_FLAGS(button8, GTK_CAN_DEFAULT);
+
+ button7 = gtk_button_new_from_stock(GTK_STOCK_SAVE);
+ gtk_widget_show(button7);
+ gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button7,
+ GTK_RESPONSE_ACCEPT);
+ GTK_WIDGET_SET_FLAGS(button7, GTK_CAN_DEFAULT);
+
+ return dialog;
+}
+
+static void remote_dialog_add(GtkWidget *button, gpointer data)
+{
+ RemoteDialog *rd = (RemoteDialog *)data;
+ GtkWidget *host_editor = host_editor_dialog_new(rd->dialog, "Add a host");
+
+ if (gtk_dialog_run(GTK_DIALOG(host_editor)) == GTK_RESPONSE_ACCEPT) {
+ DEBUG("saving");
+ }
+
+ gtk_widget_destroy(host_editor);
+}
+
+static void remote_dialog_edit(GtkWidget *button, gpointer data)
+{
+ RemoteDialog *rd = (RemoteDialog *)data;
+ GtkWidget *host_editor = host_editor_dialog_new(rd->dialog, "Edit a host");
+
+ if (gtk_dialog_run(GTK_DIALOG(host_editor)) == GTK_RESPONSE_ACCEPT) {
+ DEBUG("saving");
+ }
+
+ gtk_widget_destroy(host_editor);
+}
+
+static void remote_dialog_remove(GtkWidget *button, gpointer data)
+{
+ RemoteDialog *rd = (RemoteDialog *)data;
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new(GTK_WINDOW(rd->dialog),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ "Remove the host <b>%s</b>?", "selected.host.name");
+
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ GTK_STOCK_NO, GTK_RESPONSE_REJECT,
+ GTK_STOCK_DELETE, GTK_RESPONSE_ACCEPT, NULL);
+
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+ DEBUG("removing");
+ }
+
+ gtk_widget_destroy(dialog);
+}
+
static RemoteDialog *remote_dialog_new(GtkWidget *parent)
{
RemoteDialog *rd;
@@ -311,22 +431,22 @@ static RemoteDialog *remote_dialog_new(GtkWidget *parent)
gtk_widget_show(button3);
gtk_container_add(GTK_CONTAINER(vbuttonbox3), button3);
GTK_WIDGET_SET_FLAGS(button3, GTK_CAN_DEFAULT);
-// g_signal_connect(button3, "clicked",
-// G_CALLBACK(remote_dialog_sel_none), rd);
+ g_signal_connect(button3, "clicked",
+ G_CALLBACK(remote_dialog_add), rd);
button6 = gtk_button_new_with_mnemonic("_Edit");
gtk_widget_show(button6);
gtk_container_add(GTK_CONTAINER(vbuttonbox3), button6);
GTK_WIDGET_SET_FLAGS(button6, GTK_CAN_DEFAULT);
-// g_signal_connect(button6, "clicked", G_CALLBACK(remote_dialog_sel_all),
-// rd);
+ g_signal_connect(button6, "clicked", G_CALLBACK(remote_dialog_edit),
+ rd);
button6 = gtk_button_new_with_mnemonic("_Remove");
gtk_widget_show(button6);
gtk_container_add(GTK_CONTAINER(vbuttonbox3), button6);
GTK_WIDGET_SET_FLAGS(button6, GTK_CAN_DEFAULT);
-// g_signal_connect(button6, "clicked", G_CALLBACK(remote_dialog_sel_all),
-// rd);
+ g_signal_connect(button6, "clicked", G_CALLBACK(remote_dialog_remove),
+ rd);
dialog1_action_area = GTK_DIALOG(dialog)->action_area;
gtk_widget_show(dialog1_action_area);
diff --git a/hardinfo2/shell.h b/hardinfo2/shell.h
index c8e1e185..2d7c4043 100644
--- a/hardinfo2/shell.h
+++ b/hardinfo2/shell.h
@@ -92,6 +92,8 @@ struct _Shell {
gint _pulses;
ShellOrderType _order_type;
+
+ gchar *selected_module_name;
};
struct _ShellTree {
diff --git a/hardinfo2/util.c b/hardinfo2/util.c
index 723077cf..27e44943 100644
--- a/hardinfo2/util.c
+++ b/hardinfo2/util.c
@@ -407,12 +407,14 @@ void parameters_init(int *argc, char ***argv, ProgramParameters * param)
.arg = G_OPTION_ARG_NONE,
.arg_data = &autoload_deps,
.description = "automatically load module dependencies"},
+#ifdef HAS_LIBSOUP
{
.long_name = "xmlrpc-server",
.short_name = 'x',
.arg = G_OPTION_ARG_NONE,
.arg_data = &run_xmlrpc_server,
.description = "run in XML-RPC server mode"},
+#endif /* HAS_LIBSOUP */
{
.long_name = "version",
.short_name = 'v',
@@ -1112,7 +1114,6 @@ void module_entry_scan(ShellModuleEntry * module_entry)
gchar *module_entry_get_field(ShellModuleEntry * module_entry, gchar * field)
{
if (module_entry->fieldfunc) {
- DEBUG("field=%s, entry=%s", field, module_entry->name);
return module_entry->fieldfunc(field);
}
@@ -1122,16 +1123,16 @@ gchar *module_entry_get_field(ShellModuleEntry * module_entry, gchar * field)
gchar *module_entry_function(ShellModuleEntry * module_entry)
{
if (module_entry->func) {
- return g_strdup(module_entry->func());
+ return module_entry->func();
}
- return g_strdup("[Error]\n" "Invalid module=");
+ return NULL;
}
-gchar *module_entry_get_moreinfo(ShellModuleEntry * module_entry)
+gchar *module_entry_get_moreinfo(ShellModuleEntry * module_entry, gchar * field)
{
if (module_entry->morefunc) {
- return g_strdup(module_entry->morefunc(module_entry->name));
+ return module_entry->morefunc(field);
}
return NULL;
diff --git a/hardinfo2/xmlrpc-client.c b/hardinfo2/xmlrpc-client.c
index 81177381..ae8b1078 100644
--- a/hardinfo2/xmlrpc-client.c
+++ b/hardinfo2/xmlrpc-client.c
@@ -179,9 +179,9 @@ static void xmlrpc_response_get_array(SoupSession *s,
}
GValueArray *xmlrpc_get_array(gchar *addr,
- gchar *method,
- const gchar *param_types,
- ...)
+ gchar *method,
+ const gchar *param_types,
+ ...)
{
GValueArray *params, *answer = NULL;
SoupMessage *msg;