summaryrefslogtreecommitdiff
path: root/hardinfo2
diff options
context:
space:
mode:
Diffstat (limited to 'hardinfo2')
-rw-r--r--hardinfo2/benchmark.c23
-rwxr-xr-xhardinfo2/configure3
-rw-r--r--hardinfo2/hardinfo.c7
-rw-r--r--hardinfo2/syncmanager.c205
-rw-r--r--hardinfo2/syncmanager.h6
5 files changed, 136 insertions, 108 deletions
diff --git a/hardinfo2/benchmark.c b/hardinfo2/benchmark.c
index afb31743..c396bb61 100644
--- a/hardinfo2/benchmark.c
+++ b/hardinfo2/benchmark.c
@@ -20,6 +20,7 @@
#include <iconcache.h>
#include <shell.h>
#include <config.h>
+#include <syncmanager.h>
enum {
BENCHMARK_ZLIB,
@@ -44,7 +45,6 @@ gchar *callback_md5();
gchar *callback_fib();
gchar *callback_sha1();
-
static ModuleEntry entries[] = {
{"CPU ZLib", "compress.png", callback_zlib, scan_zlib},
{"CPU Fibonacci", "module.png", callback_fib, scan_fib},
@@ -254,3 +254,24 @@ hi_module_get_about(void)
return ma;
}
+
+static gchar *bla()
+{
+ return g_strdup("ola mundo!");
+}
+
+void
+hi_module_init(void)
+{
+ static SyncEntry se[] = {
+ {
+ .fancy_name = "Benchmark results",
+ .name = "BenchmarkResults",
+ .save_to = "/tmp/bla.txt",
+ .get_data = bla
+ }
+ };
+
+ sync_manager_add_entry(se);
+}
+
diff --git a/hardinfo2/configure b/hardinfo2/configure
index 56847e02..26ab11b3 100755
--- a/hardinfo2/configure
+++ b/hardinfo2/configure
@@ -141,7 +141,7 @@ if [ $GTK2 -eq -1 ]; then
echo "If you're using Debian, running the command as root:"
echo -e "\n\taptitude install libgtk2.0-dev\n"
echo "Will do the trick."
- exit
+ exit 1
fi
# ---------------------------------------------------------------------------
@@ -171,6 +171,7 @@ if [ $SOUP -eq -1 ]; then
echo "If you're using Debian, running the command as root:"
echo -e "\n\taptitude install libsoup2.2-dev\n"
echo "Will do the trick."
+ exit 1
fi
# --------------------------------------------------------------------------
diff --git a/hardinfo2/hardinfo.c b/hardinfo2/hardinfo.c
index 77557cdc..8d17ffc1 100644
--- a/hardinfo2/hardinfo.c
+++ b/hardinfo2/hardinfo.c
@@ -34,6 +34,10 @@ main(int argc, char **argv)
GSList *modules;
DEBUG("HardInfo version " VERSION ". Debug version.");
+
+ DEBUG("g_thread_init()");
+ if (!g_thread_supported())
+ g_thread_init (NULL);
/* parse all command line parameters */
parameters_init(&argc, &argv, &params);
@@ -117,9 +121,6 @@ main(int argc, char **argv)
shell_init(modules);
- DEBUG("initializing GLib thread");
- if (!g_thread_supported())
- g_thread_init (NULL);
DEBUG("entering gtk+ main loop");
gtk_main();
diff --git a/hardinfo2/syncmanager.c b/hardinfo2/syncmanager.c
index 241afeb7..1993003e 100644
--- a/hardinfo2/syncmanager.c
+++ b/hardinfo2/syncmanager.c
@@ -39,6 +39,7 @@ struct _SyncNetAction {
gchar *name;
gboolean (*do_action)(SyncDialog *sd, gpointer sna);
+ SyncEntry *entry;
GError *error;
};
@@ -91,6 +92,9 @@ static void sync_dialog_netarea_start_actions(SyncDialog *sd, SyncNetAction *s
void sync_manager_add_entry(SyncEntry *entry)
{
+ DEBUG("registering syncmanager entry ''%s''", entry->fancy_name);
+
+ entry->selected = TRUE;
entries = g_slist_prepend(entries, entry);
}
@@ -234,96 +238,36 @@ static gboolean _action_check_api_version(SyncDialog *sd, gpointer user_data)
return sna->error ? FALSE : TRUE;
}
-static void _action_get_benchmarks_got_response(SoupMessage *msg, gpointer user_data)
+static void _action_send_data_got_response(SoupMessage *msg, gpointer user_data)
{
SyncNetAction *sna = (SyncNetAction *) user_data;
+ /* FIXME: save things if needed */
_soup_get_xmlrpc_value_int(msg, sna);
gtk_main_quit();
}
-static gboolean _action_get_benchmarks(SyncDialog *sd, gpointer user_data)
+static gboolean _action_send_data(SyncDialog *sd, gpointer user_data)
{
SyncNetAction *sna = (SyncNetAction *) user_data;
-
- if (!_soup_xmlrpc_call("benchmark.getResults", sna,
- _action_get_benchmarks_got_response))
- return FALSE;
-
- return sna->error ? FALSE : TRUE;
-}
-
-static long sync_manager_get_user_id()
-{
- GKeyFile *kf;
- gchar *syncconf = g_build_filename(g_get_home_dir(),
- ".hardinfo", "sync.conf", NULL);
- gint user_id = -1;
-
- kf = g_key_file_new();
- if (kf && g_key_file_load_from_file(kf, syncconf, 0, NULL)) {
- user_id = g_key_file_get_integer(kf, "syncmanager", "userid", NULL);
- g_key_file_free(kf);
- }
-
- g_free(syncconf);
-
- return user_id;
-}
-
-static void sync_manager_set_user_id(long user_id)
-{
- GKeyFile *kf;
- gchar *syncconf = g_build_filename(g_get_home_dir(),
- ".hardinfo", "sync.conf", NULL);
- kf = g_key_file_new();
- if (kf) {
- gchar *data;
-
- g_key_file_set_integer(kf, "syncmanager", "userid", user_id);
-
- data = g_key_file_to_data(kf, NULL, NULL);
- g_file_set_contents(syncconf, data, -1, NULL);
+ if (sna->entry) {
+ gchar *str_data = sna->entry->get_data();
+
+ if (!_soup_xmlrpc_call_with_parameters("sync.sendData", sna,
+ _action_send_data_got_response,
+ VERSION, ARCH,
+ sna->entry->name,
+ str_data, NULL)) {
+ g_free(str_data);
+
+ return FALSE;
+ }
- g_free(data);
- g_key_file_free(kf);
- }
-
- g_free(syncconf);
-}
-
-static void _action_send_benchmarks_got_response(SoupMessage *msg, gpointer user_data)
-{
- SyncNetAction *sna = (SyncNetAction *) user_data;
-
- sync_manager_set_user_id(_soup_get_xmlrpc_value_int(msg, sna));
-
- gtk_main_quit();
-}
-
-static gboolean _action_send_benchmarks(SyncDialog *sd, gpointer user_data)
-{
- SyncNetAction *sna = (SyncNetAction *) user_data;
- long user_id = sync_manager_get_user_id();
-
- gchar *temp = user_id == -1 ? NULL : g_strdup_printf("%ld", user_id);
-
- if (!_soup_xmlrpc_call_with_parameters("benchmark.addResult", sna,
- _action_send_benchmarks_got_response,
- "CPU SHA1",
- "Athlon XP 3200+",
- "0",
- VERSION,
- ARCH,
- temp,
- NULL)) {
- g_free(temp);
- return FALSE;
+ g_free(str_data);
}
- g_free(temp);
return sna->error ? FALSE : TRUE;
}
@@ -341,14 +285,38 @@ static gboolean _cancel_sync(GtkWidget *widget, gpointer data)
return FALSE;
}
+static SyncNetAction *sync_manager_get_selected_actions(gint *n)
+{
+ gint i;
+ GSList *entry;
+ SyncNetAction *actions;
+ SyncNetAction action_check_api = { "Contacting HardInfo Central Database",
+ _action_check_api_version },
+ action_clean_up = { "Cleaning up", NULL };
+
+ actions = g_new0(SyncNetAction, 2 + g_slist_length(entries));
+
+ for (entry = entries, i = 1; entry; entry = entry->next) {
+ SyncEntry *e = (SyncEntry *) entry->data;
+
+ if (e->selected) {
+ SyncNetAction sna = { e->fancy_name, _action_send_data, e };
+
+ actions[i++] = sna;
+ }
+ }
+
+ actions[0] = action_check_api;
+ actions[i++] = action_clean_up;
+
+ *n = i;
+ return actions;
+}
+
static void sync_dialog_start_sync(SyncDialog *sd)
{
- SyncNetAction actions[] = {
- { "Contacting HardInfo Central Database", _action_check_api_version },
- { "Receiving benchmark results", _action_get_benchmarks },
- { "Sending benchmark results", _action_send_benchmarks },
- { "Cleaning up", NULL },
- };
+ gint nactions;
+ SyncNetAction *actions;
if (!session) {
session = soup_session_async_new_with_options(SOUP_SESSION_TIMEOUT, 10, NULL);
@@ -359,7 +327,9 @@ static void sync_dialog_start_sync(SyncDialog *sd)
g_signal_connect(G_OBJECT(sd->button_cancel), "clicked",
(GCallback)_cancel_sync, sd);
- sync_dialog_netarea_start_actions(sd, actions, G_N_ELEMENTS(actions));
+ actions = sync_manager_get_selected_actions(&nactions);
+ sync_dialog_netarea_start_actions(sd, actions, nactions);
+ g_free(actions);
gtk_widget_hide(sd->button_cancel);
gtk_widget_show(sd->button_close);
@@ -497,13 +467,49 @@ static void sync_dialog_netarea_hide(SyncDialog *sd)
gtk_window_reshow_with_initial_size(GTK_WINDOW(sd->dialog));
}
+static void populate_store(GtkListStore *store)
+{
+ GSList *entry;
+ SyncEntry *e;
+
+ gtk_list_store_clear(store);
+
+ for (entry = entries; entry; entry = entry->next) {
+ GtkTreeIter iter;
+
+ e = (SyncEntry *) entry->data;
+
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, TRUE, 1, e->fancy_name, 2, e, -1);
+ }
+}
+
+static void
+sel_toggle(GtkCellRendererToggle *cellrenderertoggle,
+ gchar *path_str,
+ GtkTreeModel *model)
+{
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
+ SyncEntry *se;
+ gboolean active;
+
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_model_get(model, &iter, 0, &active, 2, &se, -1);
+
+ se->selected = !active;
+
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, se->selected, -1);
+ gtk_tree_path_free(path);
+}
+
static SyncDialog *sync_dialog_new(void)
{
SyncDialog *sd;
GtkWidget *dialog;
GtkWidget *dialog1_vbox;
GtkWidget *scrolledwindow2;
-// GtkWidget *treeview2;
+ GtkWidget *treeview2;
GtkWidget *dialog1_action_area;
GtkWidget *button8;
GtkWidget *button7;
@@ -511,8 +517,10 @@ static SyncDialog *sync_dialog_new(void)
GtkWidget *label;
GtkWidget *hbox;
-// GtkTreeViewColumn *column;
-// GtkCellRenderer *cr_text, *cr_pbuf, *cr_toggle;
+ GtkTreeViewColumn *column;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ GtkCellRenderer *cr_text, *cr_toggle;
sd = g_new0(SyncDialog, 1);
sd->sna = sync_dialog_netarea_new();
@@ -521,7 +529,6 @@ static SyncDialog *sync_dialog_new(void)
gtk_window_set_title(GTK_WINDOW(dialog), "SyncManager");
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);
@@ -557,7 +564,10 @@ static SyncDialog *sync_dialog_new(void)
GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW
(scrolledwindow2), GTK_SHADOW_IN);
-/*
+
+ store = gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER);
+ model = GTK_TREE_MODEL(store);
+
treeview2 = gtk_tree_view_new_with_model(model);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview2), FALSE);
gtk_widget_show(treeview2);
@@ -568,21 +578,14 @@ static SyncDialog *sync_dialog_new(void)
cr_toggle = gtk_cell_renderer_toggle_new();
gtk_tree_view_column_pack_start(column, cr_toggle, FALSE);
- g_signal_connect(cr_toggle, "toggled", G_CALLBACK(report_dialog_sel_toggle), sd);
- gtk_tree_view_column_add_attribute(column, cr_toggle, "active",
- TREE_COL_SEL);
-
- cr_pbuf = gtk_cell_renderer_pixbuf_new();
- gtk_tree_view_column_pack_start(column, cr_pbuf, FALSE);
- gtk_tree_view_column_add_attribute(column, cr_pbuf, "pixbuf",
- TREE_COL_PBUF);
+ g_signal_connect(cr_toggle, "toggled", G_CALLBACK(sel_toggle), model);
+ gtk_tree_view_column_add_attribute(column, cr_toggle, "active", 0);
cr_text = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(column, cr_text, TRUE);
- gtk_tree_view_column_add_attribute(column, cr_text, "markup",
- TREE_COL_NAME);
- */
-
+ gtk_tree_view_column_add_attribute(column, cr_text, "markup", 1);
+
+ populate_store(store);
dialog1_action_area = GTK_DIALOG(dialog)->action_area;
gtk_widget_show(dialog1_action_area);
@@ -613,8 +616,6 @@ static SyncDialog *sync_dialog_new(void)
sd->button_close = button6;
sd->scroll_box = scrolledwindow2;
sd->label = label;
- //gtk_tree_view_collapse_all(GTK_TREE_VIEW(treeview2));
- //set_all_active(sd, TRUE);
return sd;
}
diff --git a/hardinfo2/syncmanager.h b/hardinfo2/syncmanager.h
index 24f0a17d..9cd812d0 100644
--- a/hardinfo2/syncmanager.h
+++ b/hardinfo2/syncmanager.h
@@ -24,9 +24,13 @@
typedef struct _SyncEntry SyncEntry;
struct _SyncEntry {
- gchar *name;
+ gchar *name;
+ gchar *fancy_name;
gchar *save_to;
+
gchar *(*get_data)(void);
+
+ gboolean selected;
};
void sync_manager_add_entry(SyncEntry *entry);