From 7f05af18d642f89fc772bf278fe91fb5e82f7eb4 Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Tue, 27 Oct 2020 01:33:20 +0000 Subject: [PATCH] evisum: let there be choice soo...let's create a little ipc server and server the minions whatever they want. So add CPU and memory and Generic thing to the application menu (desktop). Means you don't have to load up the main EXE each time you want only one minor feature. Also use the same process for all of this so we don't eat up resources and because we can. --- data/desktop/evisum_cpu.desktop | 8 ++ data/desktop/evisum_mem.desktop | 8 ++ data/desktop/meson.build | 4 + data/icons/evisum_cpu.png | Bin 0 -> 1284 bytes data/icons/evisum_mem.png | Bin 0 -> 8416 bytes data/icons/meson.build | 4 + src/bin/evisum_actions.h | 14 +++ src/bin/evisum_server.c | 150 ++++++++++++++++++++++++++++++++ src/bin/evisum_server.h | 16 ++++ src/bin/main.c | 135 +++++----------------------- src/bin/meson.build | 2 + src/bin/ui/ui.c | 89 ++++++++++++++----- src/bin/ui/ui.h | 6 +- 13 files changed, 300 insertions(+), 136 deletions(-) create mode 100644 data/desktop/evisum_cpu.desktop create mode 100644 data/desktop/evisum_mem.desktop create mode 100644 data/icons/evisum_cpu.png create mode 100644 data/icons/evisum_mem.png create mode 100644 src/bin/evisum_actions.h create mode 100644 src/bin/evisum_server.c create mode 100644 src/bin/evisum_server.h diff --git a/data/desktop/evisum_cpu.desktop b/data/desktop/evisum_cpu.desktop new file mode 100644 index 0000000..7e9a0cd --- /dev/null +++ b/data/desktop/evisum_cpu.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=CPU +GenericName=Monitor +Exec=evisum -c +Icon=evisum_cpu +Categories=System;Monitor; +StartupWMClass=evisum diff --git a/data/desktop/evisum_mem.desktop b/data/desktop/evisum_mem.desktop new file mode 100644 index 0000000..aecbc9a --- /dev/null +++ b/data/desktop/evisum_mem.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=Memory +GenericName=Monitor +Exec=evisum -m +Icon=evisum_mem +Categories=System;Monitor; +StartupWMClass=evisum diff --git a/data/desktop/meson.build b/data/desktop/meson.build index a52291c..1264cf0 100644 --- a/data/desktop/meson.build +++ b/data/desktop/meson.build @@ -1,2 +1,6 @@ install_data('evisum.desktop', install_dir: join_paths(dir_data, 'applications')) +install_data('evisum_cpu.desktop', + install_dir: join_paths(dir_data, 'applications')) +install_data('evisum_mem.desktop', + install_dir: join_paths(dir_data, 'applications')) diff --git a/data/icons/evisum_cpu.png b/data/icons/evisum_cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..61fd1f9360a95b04db16be677c9036819bb1aa7e GIT binary patch literal 1284 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$5xX)7d$|)7e>}peR2rGbfdS zL1SX=L|c!;4l+mMqmL?uvRj9|oUqU;Qb4ruik8Sirxl`6r3O2{aL+PP(bVf}%076o z|LCgb?#=7?)-@^oV0`rC#gZ3Fs{iygw{(1butWa+JKJ~n82`Dou1vdbu^?;OL_f8b zoV?H%m97HLFWf~0J7@lyqp|FP<-T_hAHR;BlU_Ohckvg^%E^p&jTO^gwz=+cwAq{a za?bb8!)sJDk32t;%oaQ0$Hdp0PUp|*=KEclcH_j7=beX-IBjfx%9p0$ftVshJd)pS@8zAwhb_j=bzoas@k?UFMaXoFJp=a5-Ls;eGlSU(19KVlQHgtFzxe z{=#@7Abh3tg9icC+;a)kht;ZYhbjnC3(BMF#HF>1$&oI z28wVNctjQhWAHi%GdgL^t^f+Mmw5WRvOnRFEaktaqI2fi@q#| zJg$LF8b{vkU-|Zk$j6qBN5xzTTU>T}*&X}*l@+KR8Qgic=O1%=+M@akmd8Ka{tvw` z#Zk@4z`>xv(7?dJgq2aSyT1PV&Q-^ZHe7xF`R8@p7c30xaI3~)Q2jggzs$zMXTQGB zTYVtv9wt96*Vbg+Tx-qapj~XNF7PC$7%YVUAw<`#2|7bx3+2M1Hhs z`11SN-CWTK?Ys6bZ5Y)V3RrQP54L(om<_)|tvuL^p}XqmV0RFbBj<^pXZF~ifA4Ns z|LDloG@)pJy%h@mOd^>Od@1K4IlM`|h2C>ioV2zWB U+YlN&xf;avboFyt=akR{0AV|essI20 literal 0 HcmV?d00001 diff --git a/data/icons/evisum_mem.png b/data/icons/evisum_mem.png new file mode 100644 index 0000000000000000000000000000000000000000..f8220c4132d89158fbf61bdb5702ae39cd1984d5 GIT binary patch literal 8416 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 L9$Y2<#s9wmKs14Y literal 0 HcmV?d00001 diff --git a/data/icons/meson.build b/data/icons/meson.build index 57def3b..b7f06a1 100644 --- a/data/icons/meson.build +++ b/data/icons/meson.build @@ -1,2 +1,6 @@ install_data('evisum.png', install_dir: join_paths(dir_data, 'icons/hicolor/256x256/apps')) +install_data('evisum_cpu.png', + install_dir: join_paths(dir_data, 'icons/hicolor/256x256/apps')) +install_data('evisum_mem.png', + install_dir: join_paths(dir_data, 'icons/hicolor/256x256/apps')) diff --git a/src/bin/evisum_actions.h b/src/bin/evisum_actions.h new file mode 100644 index 0000000..e5071d1 --- /dev/null +++ b/src/bin/evisum_actions.h @@ -0,0 +1,14 @@ +#ifndef _EVISUM_H_ +#define _EVISUM_H_ + +typedef enum +{ + EVISUM_ACTION_DEFAULT = 0, + EVISUM_ACTION_PROCESS = 1, + EVISUM_ACTION_CPU = 2, + EVISUM_ACTION_MEM = 3, + EVISUM_ACTION_STORAGE = 4, + EVISUM_ACTION_SENSORS = 5, +} Evisum_Action; + +#endif diff --git a/src/bin/evisum_server.c b/src/bin/evisum_server.c new file mode 100644 index 0000000..a8ceb4a --- /dev/null +++ b/src/bin/evisum_server.c @@ -0,0 +1,150 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include "evisum_server.h" +#include "src/bin/ui/ui.h" +#include "src/bin/ui/ui_cpu.h" +#include "src/bin/ui/ui_memory.h" +#include "src/bin/ui/ui_disk.h" +#include "src/bin/ui/ui_sensors.h" + +#define LISTEN_SOCKET_NAME "evisum_server" + +typedef struct _Evisum_Server { + Ecore_Event_Handler *handler; + Ecore_Con_Server *srv; +} Evisum_Server; + +static void *_evisum_server = NULL; + +static Eina_Bool +_evisum_server_server_client_connect_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) +{ + Ecore_Con_Event_Client_Data *ev; + Evisum_Action *action; + Ui *ui; + + ev = event; + action = ev->data; + ui = data; + + evisum_ui_activate(ui, *action); + + ecore_con_client_del(ev->client); + + return ECORE_CALLBACK_RENEW; +} + +void +evisum_server_shutdown(void) +{ + Evisum_Server *server = _evisum_server; + if (!server) return; + + ecore_event_handler_del(server->handler); + ecore_con_server_del(server->srv); + free(server); +} + +Eina_Bool +evisum_server_init(void *data) +{ + Ui *ui = data; + Evisum_Server *server = calloc(1, sizeof(Evisum_Server)); + if (!server) return EINA_FALSE; + + server->srv = ecore_con_server_add(ECORE_CON_LOCAL_USER, LISTEN_SOCKET_NAME, 0, NULL); + if (!server->srv) return EINA_FALSE; + + server->handler = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, _evisum_server_server_client_connect_cb, ui); + _evisum_server = server; + + return EINA_TRUE; +} + +typedef struct _Evisum_Server_Client { + Ecore_Con_Server *srv; + Evisum_Action action; + Eina_Bool success; +} Evisum_Server_Client; + +static Eina_Bool +_evisum_server_client_closed_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + Ecore_Con_Event_Server_Del *ev; + Evisum_Server_Client *client = data; + + ev = event; + + if (client->srv != ev->server) return ECORE_CALLBACK_RENEW; + + client->success = EINA_TRUE; + + return ECORE_CALLBACK_DONE; +} + +static Eina_Bool +_evisum_server_client_check_timer_cb(void *data EINA_UNUSED) +{ + Evisum_Server_Client *client; + static double total = 0.0; + + client = data; + total += 0.1; + + if (total < 1.0) + return ECORE_CALLBACK_RENEW; + + free(client); + + ecore_main_loop_quit(); + + return ECORE_CALLBACK_DONE; +} + +static Eina_Bool +_evisum_server_client_connect_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + Ecore_Con_Event_Server_Add *ev; + Ecore_Con_Server *srv; + Evisum_Server_Client *client; + + ev = event; + srv = ev->server; + client = data; + + if (client->srv != srv) return ECORE_CALLBACK_RENEW; + + ecore_con_server_send(srv, &client->action, sizeof(Evisum_Action)); + ecore_con_server_flush(srv); + + return ECORE_CALLBACK_DONE; +} + +Eina_Bool +evisum_server_client_add(Evisum_Action action) +{ + Evisum_Server_Client *client; + Ecore_Con_Server *srv = ecore_con_server_connect(ECORE_CON_LOCAL_USER, LISTEN_SOCKET_NAME, 0, NULL); + if (!srv) + { + return EINA_FALSE; + } + + client = calloc(1, sizeof(Evisum_Server_Client)); + if (!client) return EINA_FALSE; + + client->action = action; + client->srv = srv; + + ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, _evisum_server_client_connect_cb, client); + ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, _evisum_server_client_closed_cb, client); + ecore_timer_add(0.1, _evisum_server_client_check_timer_cb, client); + + return EINA_TRUE; +} + diff --git a/src/bin/evisum_server.h b/src/bin/evisum_server.h new file mode 100644 index 0000000..72031a0 --- /dev/null +++ b/src/bin/evisum_server.h @@ -0,0 +1,16 @@ +#ifndef EVISUM_SERVER_H +#define EVISUM_SERVER_H + +#include +#include "evisum_actions.h" + +Eina_Bool +evisum_server_init(void *data); + +void +evisum_server_shutdown(void); + +Eina_Bool +evisum_server_client_add(Evisum_Action action); + +#endif diff --git a/src/bin/main.c b/src/bin/main.c index 9f47af3..ac7b203 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -8,108 +8,15 @@ #include "config.h" #include "evisum_config.h" +#include "evisum_server.h" #include "ui/ui.h" -#if defined(DEVELOPMENT) -# include "system/machine.h" -# include "system/process.h" -# include "system/disks.h" -# include "system/filesystems.h" -#endif - -static void -_win_del_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ui *ui = data; - - evisum_ui_shutdown(ui); -} - -static Ui * -_win_add(void) -{ - Ui *ui; - Evas_Object *win, *icon; - - elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); - win = elm_win_util_standard_add("evisum", "evisum"); - icon = elm_icon_add(win); - elm_icon_standard_set(icon, "evisum"); - elm_win_icon_object_set(win, icon); - evas_object_resize(win, EVISUM_WIN_WIDTH * elm_config_scale_get(), - EVISUM_WIN_HEIGHT * elm_config_scale_get()); - elm_win_title_set(win, _("EFL System Monitor")); - elm_win_center(win, EINA_TRUE, EINA_TRUE); - - ui = evisum_ui_add(win); - if (!ui) - return NULL; - - ui->state.shutdown_now = EINA_TRUE; - - evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); - evas_object_show(win); - - return ui; -} - -#if defined(DEVELOPMENT) -static void -_test(int all) -{ - Sys_Info *inf; - Eina_List *procs, *disks; - Proc_Info *proc; - File_System *fs; - char *path, *mount; - - printf("Starting testing\n"); - inf = system_info_all_get(); - int cpu_count = system_cpu_count_get(); - for (int i = 0; i < cpu_count; i++) - { - int temp = system_cpu_n_temperature_get(i); - if (temp != -1) printf(" cpu %d temp %d C\n", i, temp); - } - - system_info_all_free(inf); - - if (!all) goto out; - - eina_init(); - ecore_init(); - - procs = proc_info_all_get(); - EINA_LIST_FREE(procs, proc) - proc_info_free(proc); - - disks = disks_get(); - EINA_LIST_FREE(disks, path) - { - mount = disk_mount_point_get(path); - if (mount) - { - fs = file_system_info_get(mount); - if (fs) - file_system_info_free(fs); - free(mount); - } - free(path); - } - - ecore_shutdown(); - eina_shutdown(); -out: - printf("Ending testing\n"); -} -#endif - int main(int argc, char **argv) { Ui *ui; int i; + Evisum_Action action = EVISUM_ACTION_DEFAULT; for (i = 0; i < argc; i++) { @@ -120,18 +27,14 @@ main(int argc, char **argv) printf("Evisum version: %s\n", PACKAGE_VERSION); exit(0); } -#if defined(DEVELOPMENT) - else if (!strcmp(argv[i], "-t")) - { - _test(1); - exit(0); - } - else if (!strcmp(argv[i], "-T")) - { - _test(0); - exit(0); - } -#endif + else if (!strcmp(argv[i], "-c")) + action = EVISUM_ACTION_CPU; + else if (!strcmp(argv[i], "-m")) + action = EVISUM_ACTION_MEM; + else if (!strcmp(argv[i], "-d")) + action = EVISUM_ACTION_STORAGE; + else if (!strcmp(argv[i], "-s")) + action = EVISUM_ACTION_SENSORS; } eina_init(); @@ -146,13 +49,23 @@ main(int argc, char **argv) textdomain(PACKAGE); #endif - ui = _win_add(); - if (ui) + if (evisum_server_client_add(action)) { - ecore_main_loop_begin(); - evisum_ui_del(ui); + ecore_main_loop_begin(); + return 0; } + ui = evisum_ui_init(); + if (!ui) return 1; + + evisum_server_init(ui); + evisum_ui_activate(ui, action); + + ecore_main_loop_begin(); + + evisum_ui_del(ui); + evisum_server_shutdown(); + elm_shutdown(); config_shutdown(); ecore_shutdown(); diff --git a/src/bin/meson.build b/src/bin/meson.build index c86ddd7..78aa290 100644 --- a/src/bin/meson.build +++ b/src/bin/meson.build @@ -9,6 +9,8 @@ src += files([ 'main.c', 'evisum_config.c', 'evisum_config.h', + 'evisum_server.c', + 'evisum_server.h', ]) executable('evisum', src, diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c index 7051909..4cb1a62 100644 --- a/src/bin/ui/ui.c +++ b/src/bin/ui/ui.c @@ -1,4 +1,5 @@ #include "config.h" +#include "evisum_actions.h" #include "ui.h" #include "ui/ui_cpu.h" #include "ui/ui_memory.h" @@ -1634,11 +1635,6 @@ _evisum_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) void evisum_ui_shutdown(Ui *ui) { - if (ui->state.shutdown_now) - exit(0); - - evas_object_del(ui->win); - if (ui->thread_system) ecore_thread_cancel(ui->thread_system); @@ -1646,10 +1642,10 @@ evisum_ui_shutdown(Ui *ui) ecore_thread_cancel(ui->thread_process); if (ui->thread_system) - ecore_thread_wait(ui->thread_system, 1.0); + ecore_thread_wait(ui->thread_system, 0.1); if (ui->thread_process) - ecore_thread_wait(ui->thread_process, 1.0); + ecore_thread_wait(ui->thread_process, 0.1); if (ui->cpu.win) evas_object_smart_callback_call(ui->cpu.win, "delete,request", NULL); @@ -1767,13 +1763,47 @@ _elm_config_change_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) } static void -_ui_launch(Ui *ui) +_win_del_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { + Ui *ui = data; + + evisum_ui_shutdown(ui); +} + +void +ui_main_win_add(Ui *ui) +{ + Evas_Object *win, *icon; + + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + win = elm_win_util_standard_add("evisum", "evisum"); + icon = elm_icon_add(win); + elm_icon_standard_set(icon, "evisum"); + elm_win_icon_object_set(win, icon); + evas_object_resize(win, EVISUM_WIN_WIDTH * elm_config_scale_get(), + EVISUM_WIN_HEIGHT * elm_config_scale_get()); + elm_win_title_set(win, _("EFL System Monitor")); + elm_win_center(win, EINA_TRUE, EINA_TRUE); + evas_object_smart_callback_add(win, "delete,request", _win_del_cb, ui); + evas_object_show(win); + + ui->win = win; _process_list_update(ui); ecore_timer_add(2.0, _bring_in, ui); elm_object_focus_set(ui->entry_search, EINA_TRUE); + if (evisum_ui_effects_enabled_get() || evisum_ui_backgrounds_enabled_get()) + evisum_ui_background_random_add(ui->win, 1); + + _ui_content_add(win, ui); + + if (evisum_ui_effects_enabled_get()) + evisum_ui_animate(ui); + + ui->cache = evisum_ui_item_cache_new(ui->genlist_procs, _item_create, 50); + ui->thread_system = ecore_thread_feedback_run(_system_info_all_poll, _system_info_all_poll_feedback_cb, @@ -1799,13 +1829,36 @@ _ui_init_system_probe(Ui *ui) ui->mem.zfs_mounted = file_system_in_use("ZFS"); } +void +evisum_ui_activate(Ui *ui, Evisum_Action action) +{ + switch (action) + { + case EVISUM_ACTION_DEFAULT: + case EVISUM_ACTION_PROCESS: + ui_main_win_add(ui); + break; + case EVISUM_ACTION_CPU: + ui_win_cpu_add(ui); + break; + case EVISUM_ACTION_MEM: + ui_win_memory_add(ui); + break; + case EVISUM_ACTION_STORAGE: + ui_win_disk_add(ui); + break; + case EVISUM_ACTION_SENSORS: + ui_win_sensors_add(ui); + break; + } +} + static Ui * -_ui_init(Evas_Object *parent) +_ui_init(void) { Ui *ui = calloc(1, sizeof(Ui)); if (!ui) return NULL; - ui->win = parent; ui->settings.poll_delay = 3; ui->settings.sort_reverse = EINA_FALSE; ui->settings.sort_type = SORT_BY_PID; @@ -1821,29 +1874,17 @@ _ui_init(Evas_Object *parent) _config_load(ui); - if (evisum_ui_effects_enabled_get() || evisum_ui_backgrounds_enabled_get()) - evisum_ui_background_random_add(ui->win, 1); - - _ui_content_add(parent, ui); - - if (evisum_ui_effects_enabled_get()) - evisum_ui_animate(ui); - - ui->cache = evisum_ui_item_cache_new(ui->genlist_procs, _item_create, 50); - return ui; } Ui * -evisum_ui_add(Evas_Object *parent) +evisum_ui_init(void) { eina_lock_new(&_lock); - Ui *ui = _ui = _ui_init(parent); + Ui *ui = _ui = _ui_init(); if (!ui) return NULL; - _ui_launch(ui); - return ui; } diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h index f42d5f2..a5a6197 100644 --- a/src/bin/ui/ui.h +++ b/src/bin/ui/ui.h @@ -6,6 +6,7 @@ #include "system/machine.h" #include "system/process.h" #include "../evisum_config.h" +#include "../evisum_server.h" #include "ui/ui_util.h" #include "ui/ui_cache.h" @@ -116,7 +117,7 @@ typedef struct Ui } Ui; Ui * -evisum_ui_add(Evas_Object *win); +evisum_ui_init(void); void evisum_ui_del(Ui *ui); @@ -124,4 +125,7 @@ evisum_ui_del(Ui *ui); void evisum_ui_shutdown(Ui *ui); +void +evisum_ui_activate(Ui *ui, Evisum_Action action); + #endif