diff options
Diffstat (limited to 'hardinfo2')
-rw-r--r-- | hardinfo2/Makefile.in | 1 | ||||
-rw-r--r-- | hardinfo2/benchmark.c | 12 | ||||
-rw-r--r-- | hardinfo2/computer.c | 12 | ||||
-rw-r--r-- | hardinfo2/devices.c | 12 | ||||
-rw-r--r-- | hardinfo2/hardinfo.c | 6 | ||||
-rw-r--r-- | hardinfo2/modules.conf | 7 | ||||
-rw-r--r-- | hardinfo2/shell.h | 2 | ||||
-rw-r--r-- | hardinfo2/util.c | 79 |
8 files changed, 84 insertions, 47 deletions
diff --git a/hardinfo2/Makefile.in b/hardinfo2/Makefile.in index f8fef304..c940f939 100644 --- a/hardinfo2/Makefile.in +++ b/hardinfo2/Makefile.in @@ -75,7 +75,6 @@ install: all @echo '[01;34m*** Installing misc data...[00m' cp uidefs.xml ${DESTDIR}/usr/share/hardinfo - cp modules.conf ${DESTDIR}/usr/share/hardinfo cp benchmark.conf ${DESTDIR}/usr/share/hardinfo cp benchmark.data ${DESTDIR}/usr/share/hardinfo diff --git a/hardinfo2/benchmark.c b/hardinfo2/benchmark.c index 367ea592..f5492bf7 100644 --- a/hardinfo2/benchmark.c +++ b/hardinfo2/benchmark.c @@ -163,3 +163,15 @@ hi_name(gint entry) { return hi_entries[entry].name; } + +gchar * +hi_module_name(void) +{ + return g_strdup("Benchmarks"); +} + +guchar +hi_module_weight(void) +{ + return 240; +} diff --git a/hardinfo2/computer.c b/hardinfo2/computer.c index 7a33b673..14284bca 100644 --- a/hardinfo2/computer.c +++ b/hardinfo2/computer.c @@ -336,3 +336,15 @@ hi_name(gint entry) { return hi_entries[entry].name; } + +gchar * +hi_module_name(void) +{ + return g_strdup("Computer"); +} + +guchar +hi_module_weight(void) +{ + return 80; +} diff --git a/hardinfo2/devices.c b/hardinfo2/devices.c index 6dc989b2..4eced276 100644 --- a/hardinfo2/devices.c +++ b/hardinfo2/devices.c @@ -210,3 +210,15 @@ hi_name(gint entry) { return hi_entries[entry].name; } + +gchar * +hi_module_name(void) +{ + return g_strdup("Devices"); +} + +guchar +hi_module_weight(void) +{ + return 160; +} diff --git a/hardinfo2/hardinfo.c b/hardinfo2/hardinfo.c index e2a4a91c..32118cbc 100644 --- a/hardinfo2/hardinfo.c +++ b/hardinfo2/hardinfo.c @@ -55,11 +55,13 @@ main(int argc, char **argv) if (params.list_modules) { GSList *modules = modules_load_all(); - g_print("Module Name\t\tDynamic Loadable Module\n"); for (; modules; modules = modules->next) { ShellModule *module = (ShellModule *) modules->data; + gchar *name = g_path_get_basename(g_module_name(module->dll)); - g_print("%s\t\t%s\n", module->name, g_module_name(module->dll)); + g_print("%s (%s)\n", name, module->name); + + g_free(name); } return 0; diff --git a/hardinfo2/modules.conf b/hardinfo2/modules.conf deleted file mode 100644 index 1dbaf07f..00000000 --- a/hardinfo2/modules.conf +++ /dev/null @@ -1,7 +0,0 @@ -[general] -version=2 - -[categories] -Computer=computer -Devices=devices -Benchmarks=benchmark diff --git a/hardinfo2/shell.h b/hardinfo2/shell.h index 3a0fd3b0..726ec3e9 100644 --- a/hardinfo2/shell.h +++ b/hardinfo2/shell.h @@ -94,6 +94,8 @@ struct _ShellModule { gchar *name; GdkPixbuf *icon; GModule *dll; + + guchar weight; GSList *entries; }; diff --git a/hardinfo2/util.c b/hardinfo2/util.c index 67fd39e8..bf5926f0 100644 --- a/hardinfo2/util.c +++ b/hardinfo2/util.c @@ -366,32 +366,42 @@ gchar *strreplace(gchar * string, gchar * replace, gchar new_char) return string; } -static ShellModule *module_load(gchar *name, gchar *filename) { +static ShellModule *module_load(gchar *filename) { ShellModule *module; gchar *tmp; module = g_new0(ShellModule, 1); - module->name = g_strdup(name); if (params.gui_running) { + gchar *dot = g_strrstr(filename, G_MODULE_SUFFIX) - 1; + + *dot = '\0'; + tmp = g_strdup_printf("%s.png", filename); module->icon = icon_cache_get_pixbuf(tmp); g_free(tmp); + + *dot = '.'; } - tmp = g_strdup_printf("%s.so", filename); - filename = tmp; - tmp = g_build_filename(params.path_lib, "modules", filename, NULL); module->dll = g_module_open(tmp, G_MODULE_BIND_LAZY); g_free(tmp); - + if (module->dll) { - gint(*n_entries) (void); + gint (*n_entries) (void); + gint (*weight_func) (void); + gchar *(*name_func) (void); gint i; - if (!g_module_symbol(module->dll, "hi_n_entries", (gpointer) & n_entries)) + if (!g_module_symbol(module->dll, "hi_n_entries", (gpointer) & n_entries) || + !g_module_symbol(module->dll, "hi_module_name", (gpointer) & name_func)) goto failed; + + g_module_symbol(module->dll, "hi_module_weight", (gpointer) & weight_func); + + module->weight = weight_func ? weight_func() : 0; + module->name = name_func(); gint j = n_entries(); for (i = 0; i <= j; i++) { @@ -446,42 +456,37 @@ static gboolean module_in_module_list(gchar *module, gchar **module_list) return FALSE; } +static gint module_cmp(gconstpointer m1, gconstpointer m2) +{ + ShellModule *a = (ShellModule *)m1; + ShellModule *b = (ShellModule *)m2; + + return a->weight - b->weight; +} + static GSList *modules_load(gchar **module_list) { - gchar *modules_conf; - GKeyFile *keyfile = g_key_file_new(); - guint categories, i; + GDir *dir; GSList *modules = NULL; - - keyfile = g_key_file_new(); - - modules_conf = g_build_filename(params.path_data, "modules.conf", NULL); - g_key_file_load_from_file(keyfile, modules_conf, 0, NULL); - g_free(modules_conf); - - if (g_key_file_get_integer(keyfile, "general", "version", NULL) != 2) { - g_error("Wrong version of modules.conf"); + ShellModule *module; + gchar *filename; + + filename = g_build_filename(params.path_lib, "modules", NULL); + dir = g_dir_open(filename, 0, NULL); + g_free(filename); + + if (!dir) { + return NULL; } - gchar **cat = g_key_file_get_keys(keyfile, "categories", &categories, NULL); - for (i = 0; i < categories; i++) { - if (module_in_module_list(cat[i], module_list)) { - ShellModule *module; - gchar *name; - - name = g_key_file_get_value(keyfile, "categories", cat[i], NULL); - module = module_load(cat[i], name); - - if (module) + while ((filename = (gchar*)g_dir_read_name(dir))) { + if (module_in_module_list(filename, module_list)) { + if ((module = module_load(filename))) { modules = g_slist_append(modules, module); - - g_free(name); + } } } - g_strfreev(cat); - g_key_file_free(keyfile); - if (g_slist_length(modules) == 0) { if (params.use_modules == NULL) { g_error("No module could be loaded. Check permissions on \"%s\" and try again.", @@ -492,8 +497,8 @@ static GSList *modules_load(gchar **module_list) } } - - return modules; + + return g_slist_sort(modules, module_cmp); } GSList *modules_load_selected(void) |