This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository evisum.
View the commit online.
commit 11068bec8cfff54c4f97f82dd5c30ce91fa5ee6d
Author: Alastair Poole <[email protected]>
AuthorDate: Sun Mar 29 19:27:05 2026 +0100
graphs: handle a newly added disk or network interface.
Add and reset, ensure we restart our graph.
---
src/bin/ui/evisum_ui_disk.c | 35 ++++++++++++++++++++++++++++++++---
src/bin/ui/evisum_ui_graph.c | 12 ++++++++++++
src/bin/ui/evisum_ui_graph.h | 2 ++
src/bin/ui/evisum_ui_network.c | 30 +++++++++++++++++++++++++++---
4 files changed, 73 insertions(+), 6 deletions(-)
diff --git a/src/bin/ui/evisum_ui_disk.c b/src/bin/ui/evisum_ui_disk.c
index f14dc60..79b9ff6 100644
--- a/src/bin/ui/evisum_ui_disk.c
+++ b/src/bin/ui/evisum_ui_disk.c
@@ -184,14 +184,17 @@ _evisum_ui_disk_history_legend_update(Disk_History *entry, double used_percent,
}
static Disk_History *
-_evisum_ui_disk_history_find_or_create(Evisum_Ui_Disk_View *view, const File_System *fs) {
+_evisum_ui_disk_history_find_or_create(Evisum_Ui_Disk_View *view, const File_System *fs, Eina_Bool *created) {
Eina_List *l;
Disk_History *entry;
char keybuf[4096];
snprintf(keybuf, sizeof(keybuf), "%s|%s", fs->path, fs->mount);
EINA_LIST_FOREACH(view->history, l, entry) {
- if (!strcmp(entry->key, keybuf)) return entry;
+ if (!strcmp(entry->key, keybuf)) {
+ if (created) *created = EINA_FALSE;
+ return entry;
+ }
}
entry = calloc(1, sizeof(Disk_History));
@@ -210,6 +213,7 @@ _evisum_ui_disk_history_find_or_create(Evisum_Ui_Disk_View *view, const File_Sys
evisum_graph_color_get(entry->key, &entry->color_r, &entry->color_g, &entry->color_b);
view->history = eina_list_append(view->history, entry);
+ if (created) *created = EINA_TRUE;
return entry;
}
@@ -230,6 +234,17 @@ _evisum_ui_disk_history_compact(Evisum_Ui_Disk_View *view) {
_evisum_ui_disk_history_legend_repack(view);
}
+static void
+_evisum_ui_disk_history_reset(Evisum_Ui_Disk_View *view) {
+ Eina_List *l;
+ Disk_History *entry;
+
+ EINA_LIST_FOREACH(view->history, l, entry) {
+ entry->history_count = 0;
+ memset(entry->history, 0, sizeof(entry->history));
+ }
+}
+
static void
_evisum_ui_disk_graph_redraw(Evisum_Ui_Disk_View *view) {
Eina_List *l;
@@ -292,6 +307,7 @@ _evisum_ui_disk_disks_poll_feedback_cb(void *data, Ecore_Thread *thread EINA_UNU
Eina_List *l;
Eina_List *mounted;
Disk_History *entry;
+ Eina_Bool graph_reset_needed = EINA_FALSE;
view = data;
mounted = msgdata;
@@ -299,10 +315,23 @@ _evisum_ui_disk_disks_poll_feedback_cb(void *data, Ecore_Thread *thread EINA_UNU
EINA_LIST_FOREACH(view->history, l, entry)
entry->seen = EINA_FALSE;
+ EINA_LIST_FOREACH(mounted, l, fs) {
+ Eina_Bool created = EINA_FALSE;
+
+ entry = _evisum_ui_disk_history_find_or_create(view, fs, &created);
+ if (!entry) continue;
+ if (created) graph_reset_needed = EINA_TRUE;
+ }
+
+ if (graph_reset_needed) {
+ _evisum_ui_disk_history_reset(view);
+ evisum_ui_graph_reset(view->graph_img);
+ }
+
EINA_LIST_FOREACH(mounted, l, fs) {
double used_percent = 0.0;
- entry = _evisum_ui_disk_history_find_or_create(view, fs);
+ entry = _evisum_ui_disk_history_find_or_create(view, fs, NULL);
if (!entry) continue;
if (fs->usage.total) used_percent = ((double) fs->usage.used / (double) fs->usage.total) * 100.0;
diff --git a/src/bin/ui/evisum_ui_graph.c b/src/bin/ui/evisum_ui_graph.c
index 0cfaf32..c012d2c 100644
--- a/src/bin/ui/evisum_ui_graph.c
+++ b/src/bin/ui/evisum_ui_graph.c
@@ -243,6 +243,18 @@ evisum_ui_graph_draw(Evas_Object *graph_bg, Evas_Object *graph_vg, int sample_co
evas_object_color_set(graph_vg, 255, 255, 255, 255);
}
+void
+evisum_ui_graph_reset(Evas_Object *graph_vg) {
+ Evas_Vg_Container *root;
+
+ if (!graph_vg || !evas_object_evas_get(graph_vg)) return;
+
+ root = _graph_root_reset(graph_vg);
+ if (!root) return;
+
+ evas_object_color_set(graph_vg, 255, 255, 255, 255);
+}
+
void
evisum_ui_graph_bg_set(Evas_Object *graph_bg) {
uint8_t r, g, b;
diff --git a/src/bin/ui/evisum_ui_graph.h b/src/bin/ui/evisum_ui_graph.h
index 6abc4db..0d033b3 100644
--- a/src/bin/ui/evisum_ui_graph.h
+++ b/src/bin/ui/evisum_ui_graph.h
@@ -20,6 +20,8 @@ void evisum_ui_graph_draw(Evas_Object *graph_bg, Evas_Object *graph_vg, int samp
int y_grid_step_percent, double y_max, const Evisum_Ui_Graph_Series *series, int series_count,
const Evisum_Ui_Graph_Layer *layers, int layer_count);
+void evisum_ui_graph_reset(Evas_Object *graph_vg);
+
void evisum_ui_graph_bg_set(Evas_Object *graph_bg);
#endif
diff --git a/src/bin/ui/evisum_ui_network.c b/src/bin/ui/evisum_ui_network.c
index 876b27b..a3e4537 100644
--- a/src/bin/ui/evisum_ui_network.c
+++ b/src/bin/ui/evisum_ui_network.c
@@ -230,6 +230,17 @@ _evisum_ui_network_iface_history_add(Network_Interface *iface, double value) {
}
}
+static void
+_evisum_ui_network_histories_reset(Eina_List *interfaces) {
+ Eina_List *l;
+ Network_Interface *iface;
+
+ EINA_LIST_FOREACH(interfaces, l, iface) {
+ iface->history_count = 0;
+ memset(iface->history, 0, sizeof(iface->history));
+ }
+}
+
static void
_evisum_ui_network_interface_gone(net_iface_t **ifaces, int n, Eina_List *list) {
Eina_List *l;
@@ -355,15 +366,26 @@ _evisum_ui_network_update_feedback_cb(void *data, Ecore_Thread *thread EINA_UNUS
Eina_List *interfaces = msgdata;
Eina_List *l, *l2;
Network_Interface *iface;
+ Eina_Bool graph_reset_needed = EINA_FALSE;
view->interfaces = interfaces;
+ EINA_LIST_FOREACH(interfaces, l, iface) {
+ if (iface->is_new && !iface->delete_me) {
+ graph_reset_needed = EINA_TRUE;
+ break;
+ }
+ }
+
+ if (graph_reset_needed) {
+ _evisum_ui_network_histories_reset(interfaces);
+ evisum_ui_graph_reset(view->graph_img);
+ view->graph_peak = 0.0;
+ }
+
EINA_LIST_FOREACH_SAFE(interfaces, l, l2, iface) {
double rate = (double) iface->in + (double) iface->out;
- _evisum_ui_network_iface_history_add(iface, rate);
- if (rate > view->graph_peak) view->graph_peak = rate;
-
if (iface->delete_me) {
_evisum_ui_network_iface_legend_del(iface);
free(iface);
@@ -377,6 +399,8 @@ _evisum_ui_network_update_feedback_cb(void *data, Ecore_Thread *thread EINA_UNUS
_evisum_ui_network_iface_legend_add(view, iface);
}
+ _evisum_ui_network_iface_history_add(iface, rate);
+ if (rate > view->graph_peak) view->graph_peak = rate;
_evisum_ui_network_iface_legend_update(iface);
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.