diff options
author | Leandro A. F. Pereira <leandro@hardinfo.org> | 2007-01-02 23:15:08 +0000 |
---|---|---|
committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2007-01-02 23:15:08 +0000 |
commit | acc6e48b81d48b084393809110c8949c6782021f (patch) | |
tree | 24425ebe5bfbab63eb90e4dbedce6742cfbcc78f /hardinfo2/computer.c | |
parent | 43d4be36dd06b69f8ac126c7dcc8c259b0544f7b (diff) |
Implemented new module API. Needs cleanups.
Diffstat (limited to 'hardinfo2/computer.c')
-rw-r--r-- | hardinfo2/computer.c | 462 |
1 files changed, 244 insertions, 218 deletions
diff --git a/hardinfo2/computer.c b/hardinfo2/computer.c index aebff09b..6f98aa09 100644 --- a/hardinfo2/computer.c +++ b/hardinfo2/computer.c @@ -43,22 +43,46 @@ enum { COMPUTER_USERS, } Entries; -static ModuleEntry hi_entries[] = { - {"Summary", "summary.png"}, - {"Operating System", "os.png"}, - {"Kernel Modules", "module.png"}, - {"Languages", "language.png"}, - {"Filesystems", "dev_removable.png"}, - {"Shared Directories", "shares.png"}, - {"Display", "monitor.png"}, - {"Network Interfaces", "network.png"}, - {"Users", "users.png"}, +/* Callbacks */ +gchar *callback_summary(); +gchar *callback_os(); +gchar *callback_modules(); +gchar *callback_locales(); +gchar *callback_fs(); +gchar *callback_shares(); +gchar *callback_display(); +gchar *callback_network(); +gchar *callback_users(); + +/* Scan callbacks */ +void scan_summary(gboolean reload); +void scan_os(gboolean reload); +void scan_modules(gboolean reload); +void scan_locales(gboolean reload); +void scan_fs(gboolean reload); +void scan_shares(gboolean reload); +void scan_display(gboolean reload); +void scan_network(gboolean reload); +void scan_users(gboolean reload); + +static ModuleEntry entries[] = { + { "Summary", "summary.png", callback_summary, scan_summary }, + { "Operating System", "os.png", callback_os, scan_os }, + { "Kernel Modules", "module.png", callback_modules, scan_modules }, + { "Languages", "language.png", callback_locales, scan_locales }, + { "Filesystems", "dev_removable.png", callback_fs, scan_fs }, + { "Shared Directories", "shares.png", callback_shares, scan_shares }, + { "Display", "monitor.png", callback_display, scan_display }, + { "Network Interfaces", "network.png", callback_network, scan_network }, + { "Users", "users.png", callback_users, scan_users }, + { NULL }, }; #include "computer.h" static GHashTable *moreinfo = NULL; static gchar *module_list = NULL; +static Computer *computer = NULL; #include <arch/this/modules.h> #include <arch/common/languages.h> @@ -74,71 +98,6 @@ static gchar *module_list = NULL; #include <arch/this/net.h> #include <arch/common/users.h> -static Computer * -computer_get_info(void) -{ - Computer *computer; - - computer = g_new0(Computer, 1); - - if (moreinfo) { -#ifdef g_hash_table_unref - g_hash_table_unref(moreinfo); -#else - g_free(moreinfo); -#endif - } - - moreinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - - shell_status_update("Getting memory information..."); - computer->memory = computer_get_memory(); - - shell_status_update("Getting operating system information..."); - computer->os = computer_get_os(); - - shell_status_update("Getting display information..."); - computer->display = computer_get_display(); - - shell_status_update("Getting sound card information..."); - computer->alsa = computer_get_alsainfo(); - - shell_status_update("Getting mounted file system information..."); - scan_filesystems(); - - shell_status_update("Getting shared directories..."); - scan_samba_shared_directories(); - scan_nfs_shared_directories(); - - shell_status_update("Obtaining network information..."); - scan_net_interfaces(); - - shell_status_update("Obtaining users information..."); - scan_users(); - - computer->date_time = "..."; - return computer; -} - -void -hi_reload(gint entry) -{ - switch (entry) { - case COMPUTER_KERNEL_MODULES: - scan_modules(); - break; - case COMPUTER_FILESYSTEMS: - scan_filesystems(); - break; - case COMPUTER_NETWORK: - scan_net_interfaces(); - break; - case COMPUTER_USERS: - scan_users(); - break; - } -} - gchar * hi_more_info(gchar * entry) { @@ -178,176 +137,243 @@ hi_get_field(gchar * field) return tmp; } -gchar * -hi_info(gint entry) +void scan_summary(gboolean reload) { - static Computer *computer = NULL; - static gchar *tmp1, *tmp2; + SCAN_START(); + module_entry_scan_all_except(entries, COMPUTER_SUMMARY); + computer->alsa = computer_get_alsainfo(); + SCAN_END(); +} - if (!computer) { - computer = computer_get_info(); - } +void scan_os(gboolean reload) +{ + SCAN_START(); + computer->os = computer_get_os(); + SCAN_END(); +} - switch (entry) { - case COMPUTER_KERNEL_MODULES: - if (!module_list) { - shell_status_update("Getting loaded module information..."); - scan_modules(); - } - return g_strdup_printf("[Loaded Modules]\n" - "%s" - "[$ShellParam$]\n" - "ViewType=1", - module_list); - case COMPUTER_NETWORK: - return g_strdup_printf("[$ShellParam$]\n" - "ReloadInterval=3000\n" - "ViewType=1\n" - "%s", network_interfaces); - case COMPUTER_USERS: - return g_strdup_printf("[$ShellParam$]\n" - "ReloadInterval=10000\n" - "ViewType=1\n" - "[Human Users]\n" - "%s\n" - "[System Users]\n" - "%s\n", human_users, sys_users); - case COMPUTER_SHARES: - return g_strdup_printf("[SAMBA]\n" - "%s\n" - "[NFS]\n" - "%s", smb_shares_list, nfs_shares_list); - case COMPUTER_FILESYSTEMS: - return g_strdup_printf("[$ShellParam$]\n" - "ViewType=1\n" - "ReloadInterval=5000\n" - "[Mounted File Systems]\n%s\n", fs_list); - case COMPUTER_SUMMARY: - tmp1 = computer_get_alsacards(computer); - tmp2 = module_call_method("devices::getProcessorName"); - - schedule_free(tmp1); - schedule_free(tmp2); - - return g_strdup_printf("[$ShellParam$]\n" - "UpdateInterval$Memory=1000\n" - "UpdateInterval$Date/Time=1000\n" - "[Computer]\n" - "Processor=%s\n" - "Memory=...\n" - "Operating System=%s\n" - "User Name=%s\n" - "Date/Time=%s\n" - "[Display]\n" - "Resolution=%dx%d pixels\n" - "OpenGL Renderer=%s\n" - "X11 Vendor=%s\n" - "[Multimedia]\n" - "%s\n", - tmp2, - computer->os->distro, - computer->os->username, - computer->date_time, - computer->display->width, - computer->display->height, - computer->display->ogl_renderer, - computer->display->vendor, - tmp1); - case COMPUTER_DISPLAY: - return g_strdup_printf("[Display]\n" - "Resolution=%dx%d pixels\n" - "Vendor=%s\n" - "Version=%s\n" - "[Monitors]\n" - "%s" - "[Extensions]\n" - "%s" - "[OpenGL]\n" - "Vendor=%s\n" - "Renderer=%s\n" - "Version=%s\n" - "Direct Rendering=%s\n", - computer->display->width, - computer->display->height, - computer->display->vendor, - computer->display->version, - computer->display->monitors, - computer->display->extensions, - computer->display->ogl_vendor, - computer->display->ogl_renderer, - computer->display->ogl_version, - computer->display->dri ? "Yes" : "No"); - case COMPUTER_OPERATING_SYSTEM: - return g_strdup_printf("[$ShellParam$]\n" - "UpdateInterval$Uptime=10000\n" - "UpdateInterval$Load Average=1000\n" - "[Version]\n" - "Kernel=%s\n" - "Compiled=%s\n" - "C Library=%s\n" - "Distribution=%s\n" - "[Current Session]\n" - "Computer Name=%s\n" - "User Name=%s\n" - "#Language=%s\n" - "Home Directory=%s\n" - "Desktop Environment=%s\n" - "[Misc]\n" - "Uptime=...\n" - "Load Average=...", - computer->os->kernel, - computer->os->compiled_date, - computer->os->libc, - computer->os->distro, - computer->os->hostname, - computer->os->username, - computer->os->language, - computer->os->homedir, - computer->os->desktop); - case COMPUTER_LANGUAGE: - return g_strdup_printf("[$ShellParam$]\n" - "ViewType=1\n" - "[Available Languages]\n" - "%s", computer->os->languages); - default: - return g_strdup("[Empty]\nNo info available="); - } +void scan_modules(gboolean reload) +{ + SCAN_START(); + scan_modules_do(); + SCAN_END(); } -gint -hi_n_entries(void) +void scan_locales(gboolean reload) { - return G_N_ELEMENTS(hi_entries) - 1; + SCAN_START(); + scan_languages(computer->os); + SCAN_END(); } -GdkPixbuf * -hi_icon(gint entry) +void scan_fs(gboolean reload) { - return icon_cache_get_pixbuf(hi_entries[entry].icon); + SCAN_START(); + scan_filesystems(); + SCAN_END(); } -gchar * -hi_name(gint entry) +void scan_shares(gboolean reload) +{ + SCAN_START(); + scan_samba_shared_directories(); + scan_nfs_shared_directories(); + SCAN_END(); +} + +void scan_display(gboolean reload) +{ + SCAN_START(); + computer->display = computer_get_display(); + SCAN_END(); +} + +void scan_network(gboolean reload) +{ + SCAN_START(); + scan_net_interfaces(); + SCAN_END(); +} + +void scan_users(gboolean reload) +{ + SCAN_START(); + scan_users_do(); + SCAN_END(); +} + +gchar *callback_summary() { - return hi_entries[entry].name; + return g_strdup_printf("[$ShellParam$]\n" + "UpdateInterval$Memory=1000\n" + "UpdateInterval$Date/Time=1000\n" + "#ReloadInterval=5000\n" + "[Computer]\n" + "Processor=%s\n" + "Memory=...\n" + "Operating System=%s\n" + "User Name=%s\n" + "Date/Time=...\n" + "[Display]\n" + "Resolution=%dx%d pixels\n" + "OpenGL Renderer=%s\n" + "X11 Vendor=%s\n" + "[Multimedia]\n" + "%s\n" + "[Input Devices]\n%s\n" + "%s\n" + "%s\n", + (gchar*)idle_free(module_call_method("devices::getProcessorName")), + computer->os->distro, + computer->os->username, + computer->display->width, + computer->display->height, + computer->display->ogl_renderer, + computer->display->vendor, + (gchar*)idle_free(computer_get_alsacards(computer)), + (gchar*)idle_free(module_call_method("devices::getInputDevices")), + (gchar*)idle_free(module_call_method("devices::getPrinters")), + (gchar*)idle_free(module_call_method("devices::getStorageDevices"))); +} + +gchar *callback_os() +{ + return g_strdup_printf("[$ShellParam$]\n" + "UpdateInterval$Uptime=10000\n" + "UpdateInterval$Load Average=1000\n" + "[Version]\n" + "Kernel=%s\n" + "Compiled=%s\n" + "C Library=%s\n" + "Distribution=%s\n" + "[Current Session]\n" + "Computer Name=%s\n" + "User Name=%s\n" + "#Language=%s\n" + "Home Directory=%s\n" + "Desktop Environment=%s\n" + "[Misc]\n" + "Uptime=...\n" + "Load Average=...", + computer->os->kernel, + computer->os->compiled_date, + computer->os->libc, + computer->os->distro, + computer->os->hostname, + computer->os->username, + computer->os->language, + computer->os->homedir, + computer->os->desktop); +} + +gchar *callback_modules() +{ + return g_strdup_printf("[Loaded Modules]\n" + "%s" + "[$ShellParam$]\n" + "ViewType=1", + module_list); +} + +gchar *callback_locales() +{ + return g_strdup_printf("[$ShellParam$]\n" + "ViewType=1\n" + "[Available Languages]\n" + "%s", computer->os->languages); +} + +gchar *callback_fs() +{ + return g_strdup_printf("[$ShellParam$]\n" + "ViewType=1\n" + "ReloadInterval=5000\n" + "[Mounted File Systems]\n%s\n", fs_list); +} + +gchar *callback_shares() +{ + return g_strdup_printf("[SAMBA]\n" + "%s\n" + "[NFS]\n" + "%s", smb_shares_list, nfs_shares_list); +} + +gchar *callback_display() +{ + return g_strdup_printf("[Display]\n" + "Resolution=%dx%d pixels\n" + "Vendor=%s\n" + "Version=%s\n" + "[Monitors]\n" + "%s" + "[Extensions]\n" + "%s" + "[OpenGL]\n" + "Vendor=%s\n" + "Renderer=%s\n" + "Version=%s\n" + "Direct Rendering=%s\n", + computer->display->width, + computer->display->height, + computer->display->vendor, + computer->display->version, + computer->display->monitors, + computer->display->extensions, + computer->display->ogl_vendor, + computer->display->ogl_renderer, + computer->display->ogl_version, + computer->display->dri ? "Yes" : "No"); +} + +gchar *callback_network() +{ + return g_strdup_printf("[$ShellParam$]\n" + "ReloadInterval=3000\n" + "ViewType=1\n" + "%s", network_interfaces); +} + +gchar *callback_users() +{ + return g_strdup_printf("[$ShellParam$]\n" + "ReloadInterval=10000\n" + "ViewType=1\n" + "[Human Users]\n" + "%s\n" + "[System Users]\n" + "%s\n", human_users, sys_users); +} + +ModuleEntry * +hi_module_get_entries(void) +{ + return entries; } gchar * -hi_module_name(void) +hi_module_get_name(void) { return g_strdup("Computer"); } guchar -hi_module_weight(void) +hi_module_get_weight(void) { return 80; } gchar ** -hi_module_depends_on(void) +hi_module_get_dependencies(void) { static gchar *deps[] = { "devices.so", NULL }; return deps; } + +void +hi_module_init(void) +{ + computer = g_new0(Computer, 1); + moreinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); +} |