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.

Reply via email to