[gnome-disk-utility/wip/mdraid] Show array size and unify some formatting routines



commit fdad7246a5f7abe4d8c101b9475d3dd7564d6a92
Author: David Zeuthen <zeuthen gmail com>
Date:   Fri Sep 7 14:01:11 2012 -0400

    Show array size and unify some formatting routines
    
    Signed-off-by: David Zeuthen <zeuthen gmail com>

 src/disks/gdudevicetreemodel.c |   33 +---------------
 src/disks/gduwindow.c          |   84 +++++++++++++++++++++++++++++++++++++++-
 src/libgdu/gduutils.c          |   64 ++++++++++++++++++++++++++++++
 src/libgdu/gduutils.h          |    5 ++
 4 files changed, 153 insertions(+), 33 deletions(-)
---
diff --git a/src/disks/gdudevicetreemodel.c b/src/disks/gdudevicetreemodel.c
index 76c9aa2..67ca522 100644
--- a/src/disks/gdudevicetreemodel.c
+++ b/src/disks/gdudevicetreemodel.c
@@ -1027,7 +1027,6 @@ update_mdraid (GduDeviceTreeModel *model,
                gboolean            from_timer)
 {
   UDisksMDRaid *mdraid = NULL;
-  const gchar *level;
   const gchar *name;
   GIcon *icon = NULL;
   gchar *desc = NULL;
@@ -1052,37 +1051,9 @@ update_mdraid (GduDeviceTreeModel *model,
 
   sort_key = g_strdup_printf ("01_mdraid_1_%s", udisks_mdraid_get_uuid (mdraid)); /* TODO: sort_key? */
 
-  level = udisks_mdraid_get_level (mdraid);
   name = udisks_mdraid_get_name (mdraid);
 
-  if (g_strcmp0 (level, "raid0") == 0)
-    {
-      desc = g_strdup ("RAID-0 Array");
-    }
-  else if (g_strcmp0 (level, "raid1") == 0)
-    {
-      desc = g_strdup ("RAID-1 Array");
-    }
-  else if (g_strcmp0 (level, "raid4") == 0)
-    {
-      desc = g_strdup ("RAID-4 Array");
-    }
-  else if (g_strcmp0 (level, "raid5") == 0)
-    {
-      desc = g_strdup ("RAID-5 Array");
-    }
-  else if (g_strcmp0 (level, "raid6") == 0)
-    {
-      desc = g_strdup ("RAID-6 Array");
-    }
-  else if (g_strcmp0 (level, "raid10") == 0)
-    {
-      desc = g_strdup ("RAID-10 Array");
-    }
-  else
-    {
-      desc = g_strdup_printf ("RAID (%s)", level);
-    }
+  desc = gdu_utils_get_mdraid_desc (model->client, mdraid);
 
   if (name != NULL && strlen (name) > 0)
     {
@@ -1094,7 +1065,7 @@ update_mdraid (GduDeviceTreeModel *model,
     }
 
 
-  icon = g_themed_icon_new ("drive-removable-media"); // TODO
+  icon = g_themed_icon_new ("drive-removable-media"); // MD-TODO
 
   /* TODO: once https://bugzilla.gnome.org/show_bug.cgi?id=657194 is resolved, use that instead
    * of hard-coding the color
diff --git a/src/disks/gduwindow.c b/src/disks/gduwindow.c
index 9d2e569..6a890ec 100644
--- a/src/disks/gduwindow.c
+++ b/src/disks/gduwindow.c
@@ -521,7 +521,8 @@ set_selected_object (GduWindow    *window,
   if (object != NULL)
     {
       if (udisks_object_peek_drive (object) != NULL ||
-          udisks_object_peek_block (object) != NULL)
+          udisks_object_peek_block (object) != NULL ||
+          udisks_object_peek_mdraid (object) != NULL)
         {
           select_details_page (window, object, DETAILS_PAGE_DEVICE, &show_flags);
         }
@@ -1657,9 +1658,11 @@ setup_device_page (GduWindow     *window,
                    UDisksObject  *object)
 {
   UDisksDrive *drive;
+  UDisksMDRaid *mdraid;
   UDisksBlock *block;
 
   drive = udisks_object_peek_drive (object);
+  mdraid = udisks_object_peek_mdraid (object);
   block = udisks_object_peek_block (object);
 
   gdu_volume_grid_set_container_visible (GDU_VOLUME_GRID (window->volume_grid), FALSE);
@@ -1679,6 +1682,11 @@ setup_device_page (GduWindow     *window,
       g_list_foreach (blocks, (GFunc) g_object_unref, NULL);
       g_list_free (blocks);
     }
+  else if (mdraid != NULL)
+    {
+      /* MD-TODO */
+      gdu_volume_grid_set_block_object (GDU_VOLUME_GRID (window->volume_grid), NULL);
+    }
   else if (block != NULL)
     {
       gdu_volume_grid_set_block_object (GDU_VOLUME_GRID (window->volume_grid), object);
@@ -1749,6 +1757,72 @@ get_job_progress_text (GduWindow *window,
   return s;
 }
 
+/* ---------------------------------------------------------------------------------------------------- */
+
+static void
+update_device_page_for_mdraid (GduWindow      *window,
+                               UDisksObject   *object,
+                               UDisksMDRaid   *mdraid,
+                               ShowFlags      *show_flags)
+{
+  GIcon *icon = NULL;
+  gchar *s = NULL;
+  gchar *desc = NULL;
+  gchar *device_desc = NULL;
+  UDisksBlock *block = NULL;
+  guint64 size;
+
+  size = udisks_mdraid_get_size (mdraid);
+
+  block = udisks_client_get_block_for_mdraid (window->client, mdraid);
+
+  icon = g_themed_icon_new ("drive-removable-media"); // MD-TODO
+
+  desc = gdu_utils_get_mdraid_desc (window->client, mdraid);
+
+  if (block != NULL)
+    {
+      device_desc = get_device_file_for_display (block);
+    }
+  else
+    {
+      /* Translators: shown as the device for a RAID array that is not currently running */
+      device_desc = g_strdup (C_("mdraid", "Not Running"));
+    }
+
+  gtk_image_set_from_gicon (GTK_IMAGE (window->devtab_drive_image), icon, GTK_ICON_SIZE_DIALOG);
+  gtk_widget_show (window->devtab_drive_image);
+
+  s = g_strdup_printf ("<big><b>%s</b></big>", desc);
+  gtk_label_set_markup (GTK_LABEL (window->devtab_drive_name_label), s);
+  gtk_widget_show (window->devtab_drive_name_label);
+  g_free (s);
+  s = g_strdup_printf ("<small>%s</small>", device_desc);
+  gtk_label_set_markup (GTK_LABEL (window->devtab_drive_devices_label), s);
+  gtk_widget_show (window->devtab_drive_devices_label);
+  g_free (s);
+
+  gtk_widget_show (window->devtab_drive_box);
+  gtk_widget_show (window->devtab_drive_vbox);
+  gtk_widget_show (window->devtab_drive_buttonbox);
+  gtk_widget_show (window->devtab_drive_generic_button);
+
+
+  set_size (window,
+            "devtab-drive-size-label",
+            "devtab-drive-size-value-label",
+            size, SET_MARKUP_FLAGS_HYPHEN_IF_EMPTY);
+
+  /* -------------------------------------------------- */
+
+  g_free (device_desc);
+  g_free (desc);
+  g_clear_object (&icon);
+
+  g_clear_object (&block);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
 
 static void
 update_device_page_for_drive (GduWindow      *window,
@@ -2504,6 +2578,7 @@ update_device_page (GduWindow      *window,
   GduVolumeGridElementType type;
   UDisksBlock *block;
   UDisksDrive *drive;
+  UDisksMDRaid *mdraid;
   guint64 size;
   GList *children;
   GList *l;
@@ -2522,8 +2597,10 @@ update_device_page (GduWindow      *window,
 
 
   object = window->current_object;
-  drive = udisks_object_peek_drive (window->current_object);
   block = udisks_object_peek_block (window->current_object);
+  drive = udisks_object_peek_drive (window->current_object);
+  mdraid = udisks_object_peek_mdraid (window->current_object);
+
   type = gdu_volume_grid_get_selected_type (GDU_VOLUME_GRID (window->volume_grid));
   size = gdu_volume_grid_get_selected_size (GDU_VOLUME_GRID (window->volume_grid));
 
@@ -2533,6 +2610,9 @@ update_device_page (GduWindow      *window,
   if (drive != NULL)
     update_device_page_for_drive (window, object, drive, show_flags);
 
+  if (mdraid != NULL)
+    update_device_page_for_mdraid (window, object, mdraid, show_flags);
+
   if (type == GDU_VOLUME_GRID_ELEMENT_TYPE_CONTAINER)
     {
       if (block != NULL)
diff --git a/src/libgdu/gduutils.c b/src/libgdu/gduutils.c
index b072e16..ea51a6d 100644
--- a/src/libgdu/gduutils.c
+++ b/src/libgdu/gduutils.c
@@ -663,4 +663,68 @@ gdu_utils_is_ntfs_available (void)
   return available;
 }
 
+/* ---------------------------------------------------------------------------------------------------- */
+
+gchar *
+gdu_utils_format_mdraid_level (const gchar *level)
+{
+  gchar *ret = NULL;
+
+  if (g_strcmp0 (level, "raid0") == 0)
+    {
+      ret = g_strdup (_("RAID-0 Array"));
+    }
+  else if (g_strcmp0 (level, "raid1") == 0)
+    {
+      ret = g_strdup (_("RAID-1 Array"));
+    }
+  else if (g_strcmp0 (level, "raid4") == 0)
+    {
+      ret = g_strdup (_("RAID-4 Array"));
+    }
+  else if (g_strcmp0 (level, "raid5") == 0)
+    {
+      ret = g_strdup (_("RAID-5 Array"));
+    }
+  else if (g_strcmp0 (level, "raid6") == 0)
+    {
+      ret = g_strdup (_("RAID-6 Array"));
+    }
+  else if (g_strcmp0 (level, "raid10") == 0)
+    {
+      ret = g_strdup (_("RAID-10 Array"));
+    }
+
+  if (ret == NULL)
+    {
+      ret = g_strdup_printf (_("RAID (%s)"), level);
+    }
+  return ret;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+gchar *
+gdu_utils_get_mdraid_desc (UDisksClient *client,
+                           UDisksMDRaid *raid)
+{
+  gchar *s;
+  gchar *s2;
+  gchar *ret;
+  guint64 size;
 
+  size = udisks_mdraid_get_size (raid);
+  if (size > 0)
+    {
+      s = udisks_client_get_size_for_display (client, size, FALSE, FALSE);
+      s2 = gdu_utils_format_mdraid_level (udisks_mdraid_get_level (raid));
+      ret = g_strdup_printf ("%s %s", s, s2);
+      g_free (s);
+      g_free (s2);
+    }
+  else
+    {
+      ret = gdu_utils_format_mdraid_level (udisks_mdraid_get_level (raid));
+    }
+  return ret;
+}
diff --git a/src/libgdu/gduutils.h b/src/libgdu/gduutils.h
index f30f9bb..285e580 100644
--- a/src/libgdu/gduutils.h
+++ b/src/libgdu/gduutils.h
@@ -57,6 +57,11 @@ gboolean        gdu_utils_show_confirmation (GtkWindow   *parent_window,
 
 gboolean gdu_utils_is_ntfs_available (void);
 
+gchar *gdu_utils_format_mdraid_level (const gchar *level);
+
+gchar *gdu_utils_get_mdraid_desc (UDisksClient *client,
+                                  UDisksMDRaid *raid);
+
 G_END_DECLS
 
 #endif /* __GDU_UTILS_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]