summaryrefslogtreecommitdiff
path: root/modules/computer.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/computer.c')
-rw-r--r--modules/computer.c642
1 files changed, 369 insertions, 273 deletions
diff --git a/modules/computer.c b/modules/computer.c
index eda405e8..513d94f5 100644
--- a/modules/computer.c
+++ b/modules/computer.c
@@ -16,13 +16,14 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <config.h>
+#include <gtk/gtk.h>
+#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
-#include <gtk/gtk.h>
-#include <config.h>
-#include <time.h>
#include <string.h>
#include <sys/stat.h>
+#include <time.h>
#include <hardinfo.h>
#include <iconcache.h>
@@ -31,21 +32,22 @@
#include <vendor.h>
#include "computer.h"
+#include "info.h"
/* Callbacks */
-gchar *callback_summary();
-gchar *callback_os();
-gchar *callback_modules();
-gchar *callback_boots();
-gchar *callback_locales();
-gchar *callback_fs();
-gchar *callback_display();
-gchar *callback_network();
-gchar *callback_users();
-gchar *callback_groups();
-gchar *callback_env_var();
+gchar *callback_summary(void);
+gchar *callback_os(void);
+gchar *callback_modules(void);
+gchar *callback_boots(void);
+gchar *callback_locales(void);
+gchar *callback_fs(void);
+gchar *callback_display(void);
+gchar *callback_network(void);
+gchar *callback_users(void);
+gchar *callback_groups(void);
+gchar *callback_env_var(void);
#if GLIB_CHECK_VERSION(2,14,0)
-gchar *callback_dev();
+gchar *callback_dev(void);
#endif /* GLIB_CHECK_VERSION(2,14,0) */
/* Scan callbacks */
@@ -81,6 +83,7 @@ static ModuleEntry entries[] = {
{NULL},
};
+
gchar *module_list = NULL;
Computer *computer = NULL;
@@ -89,7 +92,7 @@ gchar *hi_more_info(gchar * entry)
gchar *info = moreinfo_lookup_with_prefix("COMP", entry);
if (info)
- return g_strdup(info);
+ return g_strdup(info);
return g_strdup_printf("[%s]", entry);
}
@@ -99,22 +102,22 @@ gchar *hi_get_field(gchar * field)
gchar *tmp;
if (g_str_equal(field, _("Memory"))) {
- MemoryInfo *mi = computer_get_memory();
- tmp = g_strdup_printf(_("%dMB (%dMB used)"), mi->total, mi->used);
- g_free(mi);
+ MemoryInfo *mi = computer_get_memory();
+ tmp = g_strdup_printf(_("%dMB (%dMB used)"), mi->total, mi->used);
+ g_free(mi);
} else if (g_str_equal(field, _("Uptime"))) {
- tmp = computer_get_formatted_uptime();
+ tmp = computer_get_formatted_uptime();
} else if (g_str_equal(field, _("Date/Time"))) {
- time_t t = time(NULL);
+ time_t t = time(NULL);
- tmp = g_new0(gchar, 64);
- strftime(tmp, 64, "%c", localtime(&t));
+ tmp = g_new0(gchar, 64);
+ strftime(tmp, 64, "%c", localtime(&t));
} else if (g_str_equal(field, _("Load Average"))) {
- tmp = computer_get_formatted_loadavg();
+ tmp = computer_get_formatted_loadavg();
} else if (g_str_equal(field, _("Available entropy in /dev/random"))) {
- tmp = computer_get_entropy_avail();
+ tmp = computer_get_entropy_avail();
} else {
- tmp = g_strdup_printf("Unknown field: %s", field);
+ tmp = g_strdup_printf("Unknown field: %s", field);
}
return tmp;
}
@@ -189,7 +192,7 @@ static gchar *dev_list = NULL;
void scan_dev(gboolean reload)
{
SCAN_START();
-
+
int i;
struct {
gchar *compiler_name;
@@ -198,8 +201,13 @@ void scan_dev(gboolean reload)
gboolean stdout;
} detect_lang[] = {
{ N_("Scripting Languages"), NULL, FALSE },
- { N_("CPython"), "python -V", "\\d+\\.\\d+\\.\\d+", TRUE },
+ { N_("Gambas3 (gbr3)"), "gbr3 --version", "\\d+\\.\\d+\\.\\d+", TRUE },
+ { N_("Python"), "python -V", "\\d+\\.\\d+\\.\\d+", FALSE },
+ { N_("Python2"), "python2 -V", "\\d+\\.\\d+\\.\\d+", FALSE },
+ { N_("Python3"), "python3 -V", "\\d+\\.\\d+\\.\\d+", TRUE },
{ N_("Perl"), "perl -v", "\\d+\\.\\d+\\.\\d+", TRUE },
+ { N_("Perl6 (VM)"), "perl6 -v", "(?<=This is ).*", TRUE },
+ { N_("Perl6"), "perl6 -v", "(?<=implementing Perl )\\w*\\.\\w*", TRUE },
{ N_("PHP"), "php --version", "\\d+\\.\\d+\\.\\S+", TRUE},
{ N_("Ruby"), "ruby --version", "\\d+\\.\\d+\\.\\d+", TRUE },
{ N_("Bash"), "bash --version", "\\d+\\.\\d+\\.\\S+", TRUE},
@@ -207,6 +215,7 @@ void scan_dev(gboolean reload)
{ N_("C (GCC)"), "gcc -v", "\\d+\\.\\d+\\.\\d+", FALSE },
{ N_("C (Clang)"), "clang -v", "\\d+\\.\\d+", FALSE },
{ N_("D (dmd)"), "dmd --help", "\\d+\\.\\d+", TRUE },
+ { N_("Gambas3 (gbc3)"), "gbc3 --version", "\\d+\\.\\d+\\.\\d+", FALSE },
{ N_("Java"), "javac -version", "\\d+\\.\\d+\\.\\d+", FALSE },
{ N_("CSharp (Mono, old)"), "mcs --version", "\\d+\\.\\d+\\.\\d+\\.\\d+", TRUE },
{ N_("CSharp (Mono)"), "gmcs --version", "\\d+\\.\\d+\\.\\d+\\.\\d+", TRUE },
@@ -216,36 +225,38 @@ void scan_dev(gboolean reload)
{ N_("Go"), "go version", "\\d+\\.\\d+\\.?\\d* ", TRUE },
{ N_("Tools"), NULL, FALSE },
{ N_("make"), "make --version", "\\d+\\.\\d+", TRUE },
- { N_("GDB"), "gdb --version", "\\d+\\.\\S+", TRUE },
+ { N_("GDB"), "gdb --version", "(?<=^GNU gdb ).*", TRUE },
{ N_("strace"), "strace -V", "\\d+\\.\\d+\\.?\\d*", TRUE },
{ N_("valgrind"), "valgrind --version", "\\d+\\.\\d+\\.\\S+", TRUE },
{ N_("QMake"), "qmake --version", "\\d+\\.\\S+", TRUE},
{ N_("CMake"), "cmake --version", "\\d+\\.\\d+\\.?\\d*", TRUE},
+ { N_("Gambas3 IDE"), "gambas3 --version", "\\d+\\.\\d+\\.\\d+", FALSE },
};
-
+
g_free(dev_list);
-
+
dev_list = g_strdup("");
-
+
for (i = 0; i < G_N_ELEMENTS(detect_lang); i++) {
gchar *version = NULL;
- gchar *output;
+ gchar *output, *ignored;
gchar *temp;
GRegex *regex;
GMatchInfo *match_info;
gboolean found;
-
+
if (!detect_lang[i].regex) {
- dev_list = h_strdup_cprintf("[%s]\n", dev_list, detect_lang[i].compiler_name);
+ dev_list = h_strdup_cprintf("[%s]\n", dev_list, _(detect_lang[i].compiler_name));
continue;
}
-
+
if (detect_lang[i].stdout) {
- found = g_spawn_command_line_sync(detect_lang[i].version_command, &output, NULL, NULL, NULL);
+ found = g_spawn_command_line_sync(detect_lang[i].version_command, &output, &ignored, NULL, NULL);
} else {
- found = g_spawn_command_line_sync(detect_lang[i].version_command, NULL, &output, NULL, NULL);
+ found = g_spawn_command_line_sync(detect_lang[i].version_command, &ignored, &output, NULL, NULL);
}
-
+ g_free(ignored);
+
if (found) {
regex = g_regex_new(detect_lang[i].regex, 0, 0, NULL);
@@ -253,41 +264,131 @@ void scan_dev(gboolean reload)
if (g_match_info_matches(match_info)) {
version = g_match_info_fetch(match_info, 0);
}
-
+
g_match_info_free(match_info);
g_regex_unref(regex);
g_free(output);
}
-
- if (version) {
- dev_list = h_strdup_cprintf("%s=%s\n", dev_list, detect_lang[i].compiler_name, version);
- g_free(version);
- } else {
- dev_list = h_strdup_cprintf(_("%s=Not found\n"), dev_list, detect_lang[i].compiler_name);
- }
-
+
+ if (version == NULL)
+ version = strdup(_("Not found"));
+
+ dev_list = h_strdup_cprintf("%s=%s\n", dev_list, detect_lang[i].compiler_name, version);
+ g_free(version);
+
temp = g_strdup_printf(_("Detecting version: %s"),
detect_lang[i].compiler_name);
shell_status_update(temp);
g_free(temp);
}
-
+
SCAN_END();
}
-gchar *callback_dev()
+gchar *callback_dev(void)
{
- return g_strdup_printf(_("[$ShellParam$]\n"
- "ColumnTitle$TextValue=Program\n"
- "ColumnTitle$Value=Version\n"
- "ShowColumnHeaders=true\n"
- "%s"), dev_list);
+ return g_strdup_printf(
+ "[$ShellParam$]\n"
+ "ColumnTitle$TextValue=%s\n" /* Program */
+ "ColumnTitle$Value=%s\n" /* Version */
+ "ShowColumnHeaders=true\n"
+ "%s",
+ _("Program"), _("Version"),
+ dev_list);
}
#endif /* GLIB_CHECK_VERSION(2,14,0) */
+static gchar *detect_machine_type(void)
+{
+ GDir *dir;
+ gchar *chassis;
+
+ if (g_file_get_contents("/sys/devices/virtual/dmi/id/chassis_type", &chassis, NULL, NULL)) {
+ static const char *types[] = {
+ N_("Invalid chassis type (0)"),
+ N_("Unknown chassis type"), /* 1 is "Other", but not helpful in HardInfo */
+ N_("Unknown chassis type"),
+ N_("Desktop"),
+ N_("Low-profile Desktop"),
+ N_("Pizza Box"),
+ N_("Mini Tower"),
+ N_("Tower"),
+ N_("Portable"),
+ N_("Laptop"),
+ N_("Notebook"),
+ N_("Handheld"),
+ N_("Docking Station"),
+ N_("All-in-one"),
+ N_("Subnotebook"),
+ N_("Space-saving"),
+ N_("Lunch Box"),
+ N_("Main Server Chassis"),
+ N_("Expansion Chassis"),
+ N_("Sub Chassis"),
+ N_("Bus Expansion Chassis"),
+ N_("Peripheral Chassis"),
+ N_("RAID Chassis"),
+ N_("Rack Mount Chassis"),
+ N_("Sealed-case PC"),
+ };
+ int chassis_type = atoi(idle_free(chassis));
+
+ if (chassis_type >= 0 && chassis_type < G_N_ELEMENTS(types))
+ return g_strdup(_(types[chassis_type]));
+ }
+
+ if (g_file_test("/proc/pmu/info", G_FILE_TEST_EXISTS))
+ return g_strdup(_("Laptop"));
+
+ dir = g_dir_open("/proc/acpi/battery", 0, NULL);
+ if (dir) {
+ const gchar *name = g_dir_read_name(dir);
+
+ g_dir_close(dir);
+
+ if (name)
+ return g_strdup(_("Laptop"));
+ }
+
+ dir = g_dir_open("/sys/class/power_supply", 0, NULL);
+ if (dir) {
+ const gchar *name;
+
+ while ((name = g_dir_read_name(dir))) {
+ gchar *contents;
+ gchar type[PATH_MAX];
+ int r;
+
+ r = snprintf(type, sizeof(type), "%s/%s/type",
+ "/sys/class/power_supply", name);
+ if (r < 0 || r > PATH_MAX)
+ continue;
+
+ if (g_file_get_contents(type, &contents, NULL, NULL)) {
+ if (g_str_has_prefix(contents, "Battery")) {
+ g_free(contents);
+ g_dir_close(dir);
+
+ return g_strdup(_("Laptop"));
+ }
+
+ g_free(contents);
+ }
+ }
+
+ g_dir_close(dir);
+ }
+
+ /* FIXME: check if batteries are found using /proc/apm */
+
+ /* FIXME: use dmidecode if available to get chassis type */
+
+ return g_strdup(_("Unknown physical machine type"));
+}
+
/* Table based off imvirt by Thomas Liske <liske@ibh.de>
Copyright (c) 2008 IBH IT-Service GmbH under GPLv2. */
-gchar *computer_get_virtualization()
+gchar *computer_get_virtualization(void)
{
gboolean found = FALSE;
gint i, j;
@@ -324,18 +425,18 @@ gchar *computer_get_virtualization()
{ " hypervisor", "Virtual (hypervisor present)"} ,
{ NULL }
};
-
+
DEBUG("Detecting virtual machine");
if (g_file_test("/proc/xen", G_FILE_TEST_EXISTS)) {
DEBUG("/proc/xen found; assuming Xen");
return g_strdup("Xen");
}
-
+
for (i = 0; files[i+1]; i++) {
gchar buffer[512];
FILE *file;
-
+
if ((file = fopen(files[i], "r"))) {
while (!found && fgets(buffer, 512, file)) {
for (j = 0; vm_types[j+1].str; j++) {
@@ -345,200 +446,191 @@ gchar *computer_get_virtualization()
}
}
}
-
+
fclose(file);
-
+
if (found) {
DEBUG("%s found (by reading file %s)",
vm_types[j].vmtype, files[i]);
return g_strdup(vm_types[j].vmtype);
}
}
-
+
}
-
+
DEBUG("no virtual machine detected; assuming physical machine");
-
- return g_strdup(_("Physical machine"));
-}
-
-gchar *callback_summary()
-{
- gchar *processor_name, *alsa_cards;
- gchar *input_devices, *printers;
- gchar *storage_devices, *summary;
- gchar *virt;
-
- processor_name = module_call_method("devices::getProcessorName");
- alsa_cards = computer_get_alsacards(computer);
- input_devices = module_call_method("devices::getInputDevices");
- printers = module_call_method("devices::getPrinters");
- storage_devices = module_call_method("devices::getStorageDevices");
- virt = computer_get_virtualization();
-
- summary = g_strdup_printf(_("[$ShellParam$]\n"
- "UpdateInterval$Memory=1000\n"
- "UpdateInterval$Date/Time=1000\n"
- "#ReloadInterval=5000\n"
- "[Computer]\n"
- "Processor=%s\n"
- "Memory=...\n"
- "Machine Type=%s\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"
- "\n%s\n"
- "[Input Devices]\n%s\n"
- "\n%s\n"
- "\n%s\n"),
- processor_name,
- virt,
- computer->os->distro,
- computer->os->username,
- computer->display->width,
- computer->display->height,
- computer->display->ogl_renderer,
- computer->display->vendor,
- alsa_cards,
- input_devices, printers, storage_devices);
-
- g_free(processor_name);
- g_free(alsa_cards);
- g_free(input_devices);
- g_free(printers);
- g_free(storage_devices);
- g_free(virt);
-
- return summary;
-}
-
-gchar *callback_os()
-{
- return g_strdup_printf(_("[$ShellParam$]\n"
- "UpdateInterval$Uptime=10000\n"
- "UpdateInterval$Load Average=1000\n"
- "UpdateInterval$Available entropy in /dev/random=1000\n"
- "[Version]\n"
- "Kernel=%s\n"
- "Version=%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=...\n"
- "Available entropy in /dev/random=..."),
- computer->os->kernel,
- computer->os->kernel_version,
- 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\n"
- "ColumnTitle$TextValue=Name\n"
- "ColumnTitle$Value=Description\n"
- "ShowColumnHeaders=true\n"), module_list);
-}
-
-gchar *callback_boots()
-{
- return g_strdup_printf(_("[$ShellParam$]\n"
- "ColumnTitle$TextValue=Date & Time\n"
- "ColumnTitle$Value=Kernel Version\n"
- "ShowColumnHeaders=true\n"
- "\n"
- "%s"), computer->os->boots);
-}
-
-gchar *callback_locales()
-{
- return g_strdup_printf(_("[$ShellParam$]\n"
- "ViewType=1\n"
- "ColumnTitle$TextValue=Language Code\n"
- "ColumnTitle$Value=Name\n"
- "ShowColumnHeaders=true\n"
- "[Available Languages]\n"
- "%s"), computer->os->languages);
-}
-
-gchar *callback_fs()
-{
- return g_strdup_printf(_("[$ShellParam$]\n"
- "ViewType=4\n"
- "ReloadInterval=5000\n"
- "Zebra=1\n"
- "NormalizePercentage=false\n"
- "ColumnTitle$Extra1=Mount Point\n"
- "ColumnTitle$Progress=Usage\n"
- "ColumnTitle$TextValue=Device\n"
- "ShowColumnHeaders=true\n"
- "[Mounted File Systems]\n%s\n"), fs_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 ? _("Y_es") : _("No"));
-}
-
-gchar *callback_users()
-{
- return g_strdup_printf("[$ShellParam$]\n"
- "ReloadInterval=10000\n"
- "ViewType=1\n"
- "[Users]\n"
- "%s\n", users);
-}
-
-gchar *callback_groups()
-{
- return g_strdup_printf(_("[$ShellParam$]\n"
- "ReloadInterval=10000\n"
- "ColumnTitle$TextValue=Name\n"
- "ColumnTitle$Value=Group ID\n"
- "ShowColumnHeaders=true\n"
- "[Groups]\n"
- "%s\n"), groups);
+
+ return detect_machine_type();
+}
+
+gchar *callback_summary(void)
+{
+ struct Info *info = info_new();
+
+ info_add_group(info, _("Computer"),
+ info_field_printf(_("Processor"), "%s",
+ module_call_method("devices::getProcessorName")),
+ info_field_update(_("Memory"), 1000),
+ info_field_printf(_("Machine Type"), "%s",
+ computer_get_virtualization()),
+ info_field(_("Operating System"), computer->os->distro),
+ info_field(_("User Name"), computer->os->username),
+ info_field_update(_("Date/Time"), 1000),
+ info_field_last());
+
+ info_add_group(info, _("Display"),
+ info_field_printf(_("Resolution"), _(/* label for resolution */ "%dx%d pixels"),
+ computer->display->width, computer->display->height),
+ info_field(_("OpenGL Renderer"), computer->display->ogl_renderer),
+ info_field(_("X11 Vendor"), computer->display->vendor),
+ info_field_last());
+
+ info_add_computed_group(info, _("Audio Devices"),
+ idle_free(computer_get_alsacards(computer)));
+ info_add_computed_group(info, _("Input Devices"),
+ idle_free(module_call_method("devices::getInputDevices")));
+ info_add_computed_group(info, _("Printers"),
+ idle_free(module_call_method("devices::getPrinters")));
+ info_add_computed_group(info, _("Storage"),
+ idle_free(module_call_method("devices::getStorageDevices")));
+
+ return info_flatten(info);
+}
+
+gchar *callback_os(void)
+{
+ struct Info *info = info_new();
+
+ info_add_group(info, _("Version"),
+ info_field(_("Kernel"), computer->os->kernel),
+ info_field(_("Version"), computer->os->kernel_version),
+ info_field(_("C Library"), computer->os->libc),
+ info_field(_("Distribution"), computer->os->distro),
+ info_field_last());
+
+ info_add_group(info, _("Current Session"),
+ info_field(_("Computer Name"), computer->os->hostname),
+ info_field(_("User Name"), computer->os->username),
+ info_field(_("Language"), computer->os->language),
+ info_field(_("Home Directory"), computer->os->homedir),
+ info_field_last());
+
+ info_add_group(info, _("Misc"),
+ info_field_update(_("Uptime"), 1000),
+ info_field_update(_("Load Average"), 10000),
+ info_field_update(_("Available entropy in /dev/random"), 1000),
+ info_field_last());
+
+ return info_flatten(info);
+}
+
+gchar *callback_modules(void)
+{
+ struct Info *info = info_new();
+
+ info_add_computed_group(info, _("Loaded Modules"), module_list);
+
+ info_set_column_title(info, "TextValue", _("Name"));
+ info_set_column_title(info, "Value", _("Description"));
+ info_set_column_headers_visible(info, TRUE);
+ info_set_view_type(info, SHELL_VIEW_DUAL);
+
+ return info_flatten(info);
+}
+
+gchar *callback_boots(void)
+{
+ struct Info *info = info_new();
+
+ info_add_computed_group(info, _("Boots"), computer->os->boots);
+
+ info_set_column_title(info, "TextValue", _("Date & Time"));
+ info_set_column_title(info, "Value", _("Kernel Version"));
+ info_set_column_headers_visible(info, TRUE);
+
+ return info_flatten(info);
+}
+
+gchar *callback_locales(void)
+{
+ struct Info *info = info_new();
+
+ info_add_computed_group(info, _("Available Languages"), computer->os->languages);
+
+ info_set_column_title(info, "TextValue", _("Language Code"));
+ info_set_column_title(info, "Value", _("Name"));
+ info_set_view_type(info, SHELL_VIEW_DUAL);
+ info_set_column_headers_visible(info, TRUE);
+
+ return info_flatten(info);
+}
+
+gchar *callback_fs(void)
+{
+ struct Info *info = info_new();
+
+ info_add_computed_group(info, _("Mounted File Systems"), fs_list);
+
+ info_set_column_title(info, "Extra1", _("Mount Point"));
+ info_set_column_title(info, "Progress", _("Usage"));
+ info_set_column_title(info, "TextValue", _("Device"));
+ info_set_column_headers_visible(info, TRUE);
+ info_set_view_type(info, SHELL_VIEW_PROGRESS_DUAL);
+ info_set_zebra_visible(info, TRUE);
+ info_set_normalize_percentage(info, FALSE);
+
+ return info_flatten(info);
+}
+
+gchar *callback_display(void)
+{
+ struct Info *info = info_new();
+
+ info_add_group(info, _("Display"),
+ info_field_printf(_("Resolution"), _(/* resolution WxH unit */ "%dx%d pixels"),
+ computer->display->width, computer->display->height),
+ info_field(_("Vendor"), computer->display->vendor),
+ info_field(_("Version"), computer->display->version),
+ info_field_last());
+
+ info_add_computed_group(info, _("Monitors"), computer->display->monitors);
+
+ info_add_group(info, _("OpenGL"),
+ info_field(_("Vendor"), computer->display->ogl_vendor),
+ info_field(_("Renderer"), computer->display->ogl_renderer),
+ info_field(_("Version"), computer->display->ogl_version),
+ info_field(_("Direct Rendering"),
+ computer->display->dri ? _("Yes") : _("No")),
+ info_field_last());
+
+ info_add_computed_group(info, _("Extensions"), computer->display->extensions);
+
+ return info_flatten(info);
+}
+
+gchar *callback_users(void)
+{
+ struct Info *info = info_new();
+
+ info_add_computed_group(info, _("Users"), users);
+ info_set_view_type(info, SHELL_VIEW_DUAL);
+ info_set_reload_interval(info, 10000);
+
+ return info_flatten(info);
+}
+
+gchar *callback_groups(void)
+{
+ struct Info *info = info_new();
+
+ info_add_computed_group(info, _("Group"), groups);
+
+ info_set_column_title(info, "TextValue", _("Name"));
+ info_set_column_title(info, "Value", _("Group ID"));
+ info_set_column_headers_visible(info, TRUE);
+ info_set_reload_interval(info, 10000);
+
+ return info_flatten(info);
}
gchar *get_os_kernel(void)
@@ -569,16 +661,16 @@ gchar *get_display_summary(void)
gchar *get_kernel_module_description(gchar *module)
{
gchar *description;
-
+
if (!_module_hash_table) {
scan_modules(FALSE);
}
-
+
description = g_hash_table_lookup(_module_hash_table, module);
if (!description) {
return NULL;
}
-
+
return g_strdup(description);
}
@@ -587,19 +679,19 @@ gchar *get_audio_cards(void)
if (!computer->alsa) {
computer->alsa = computer_get_alsainfo();
}
-
+
return computer_get_alsacards(computer);
}
ShellModuleMethod *hi_exported_methods(void)
{
static ShellModuleMethod m[] = {
- {"getOSKernel", get_os_kernel},
- {"getOS", get_os},
- {"getDisplaySummary", get_display_summary},
- {"getAudioCards", get_audio_cards},
- {"getKernelModuleDescription", get_kernel_module_description},
- {NULL}
+ {"getOSKernel", get_os_kernel},
+ {"getOS", get_os},
+ {"getDisplaySummary", get_display_summary},
+ {"getAudioCards", get_audio_cards},
+ {"getKernelModuleDescription", get_kernel_module_description},
+ {NULL}
};
return m;
@@ -629,30 +721,34 @@ gchar **hi_module_get_dependencies(void)
gchar *hi_module_get_summary(void)
{
- return g_strdup("[Operating System]\n"
+ return g_strdup_printf("[%s]\n"
"Icon=os.png\n"
"Method=computer::getOS\n"
- "[CPU]\n"
+ "[%s]\n"
"Icon=processor.png\n"
- "Method=devices::getProcessorName\n"
- "[RAM]\n"
+ "Method=devices::getProcessorNameAndDesc\n"
+ "[%s]\n"
"Icon=memory.png\n"
"Method=devices::getMemoryTotal\n"
- "[Motherboard]\n"
+ "[%s]\n"
"Icon=module.png\n"
"Method=devices::getMotherboard\n"
- "[Graphics]\n"
+ "[%s]\n"
"Icon=monitor.png\n"
"Method=computer::getDisplaySummary\n"
- "[Storage]\n"
+ "[%s]\n"
"Icon=hdd.png\n"
"Method=devices::getStorageDevices\n"
- "[Printers]\n"
+ "[%s]\n"
"Icon=printer.png\n"
"Method=devices::getPrinters\n"
- "[Audio]\n"
+ "[%s]\n"
"Icon=audio.png\n"
- "Method=computer::getAudioCards\n");
+ "Method=computer::getAudioCards\n",
+ _("Operating System"),
+ _("CPU"), _("RAM"), _("Motherboard"), _("Graphics"),
+ _("Storage"), _("Printers"), _("Audio")
+ );
}
void hi_module_deinit(void)
@@ -672,7 +768,7 @@ void hi_module_deinit(void)
g_free(computer->os->boots);
g_free(computer->os);
}
-
+
if (computer->display) {
g_free(computer->display->ogl_vendor);
g_free(computer->display->ogl_renderer);
@@ -684,15 +780,15 @@ void hi_module_deinit(void)
g_free(computer->display->monitors);
g_free(computer->display);
}
-
+
if (computer->alsa) {
g_slist_free(computer->alsa->cards);
g_free(computer->alsa);
}
-
+
g_free(computer->date_time);
g_free(computer);
-
+
moreinfo_del_with_prefix("COMP");
}
@@ -704,11 +800,11 @@ void hi_module_init(void)
ModuleAbout *hi_module_get_about(void)
{
static ModuleAbout ma[] = {
- {
- .author = "Leandro A. F. Pereira",
- .description = N_("Gathers high-level computer information"),
- .version = VERSION,
- .license = "GNU GPL version 2"}
+ {
+ .author = "Leandro A. F. Pereira",
+ .description = N_("Gathers high-level computer information"),
+ .version = VERSION,
+ .license = "GNU GPL version 2"}
};
return ma;