[gnome-software] Add the installed size of the apps in the installed view



commit 844badeeb619152921fb4f04f31a9ee17a16b96a
Author: Joaquim Rocha <jrocha endlessm com>
Date:   Sun Nov 27 15:13:01 2016 +0100

    Add the installed size of the apps in the installed view
    
    This is a need for some distros and should be temporary until the
    Usage app can display the sizes for applications. It is disabled by
    default.

 data/org.gnome.software.gschema.xml |    4 ++
 src/gs-app-row.c                    |   23 ++++++++
 src/gs-app-row.h                    |    2 +
 src/gs-app-row.ui                   |  102 ++++++++++++++++++++++-------------
 src/gs-shell-installed.c            |   37 +++++++++----
 src/gtk-style.css                   |    4 ++
 6 files changed, 124 insertions(+), 48 deletions(-)
---
diff --git a/data/org.gnome.software.gschema.xml b/data/org.gnome.software.gschema.xml
index 321d163..2eeb2fb 100644
--- a/data/org.gnome.software.gschema.xml
+++ b/data/org.gnome.software.gschema.xml
@@ -122,6 +122,10 @@
       <default>false</default>
       <summary>Show non-free software in search results</summary>
     </key>
+    <key name="installed-page-show-size" type="b">
+      <default>false</default>
+      <summary>Show the installed size for apps in the list of installed applications</summary>
+    </key>
     <key name="nonfree-software-uri" type="s">
       <default>'https://en.wikipedia.org/wiki/Proprietary_software'</default>
       <summary>The URI that explains nonfree and proprietary software</summary>
diff --git a/src/gs-app-row.c b/src/gs-app-row.c
index fe10c94..9471c28 100644
--- a/src/gs-app-row.c
+++ b/src/gs-app-row.c
@@ -49,12 +49,14 @@ typedef struct
        GtkWidget       *label_warning;
        GtkWidget       *label_origin;
        GtkWidget       *label_installed;
+       GtkWidget       *label_app_size;
        gboolean         colorful;
        gboolean         show_folders;
        gboolean         show_buttons;
        gboolean         show_source;
        gboolean         show_codec;
        gboolean         show_update;
+       gboolean         show_installed_size;
        gboolean         selectable;
        guint            pending_refresh_id;
        GSettings       *settings;
@@ -288,6 +290,7 @@ gs_app_row_refresh (GsAppRow *app_row)
        GString *str = NULL;
        const gchar *tmp;
        gboolean missing_search_result;
+       guint64 installed_size;
 
        if (priv->app == NULL)
                return;
@@ -464,6 +467,17 @@ gs_app_row_refresh (GsAppRow *app_row)
        } else {
                gtk_widget_set_visible (priv->checkbox, FALSE);
        }
+
+       installed_size = gs_app_get_size_installed (priv->app);
+       if (priv->show_installed_size &&
+           installed_size != GS_APP_SIZE_UNKNOWABLE && installed_size != 0) {
+               g_autofree gchar *size = NULL;
+               size = g_format_size (installed_size);
+               gtk_label_set_label (GTK_LABEL (priv->label_app_size), size);
+               gtk_widget_show (priv->label_app_size);
+       } else {
+               gtk_widget_hide (priv->label_app_size);
+       }
 }
 
 static void
@@ -656,6 +670,7 @@ gs_app_row_class_init (GsAppRowClass *klass)
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_warning);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_origin);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_installed);
+       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_app_size);
 }
 
 static void
@@ -747,6 +762,14 @@ gs_app_row_set_show_codec (GsAppRow *app_row, gboolean show_codec)
        gs_app_row_refresh (app_row);
 }
 
+void
+gs_app_row_set_show_installed_size (GsAppRow *app_row, gboolean show_size)
+{
+       GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+       priv->show_installed_size = show_size;
+       gs_app_row_refresh (app_row);
+}
+
 /**
  * gs_app_row_set_show_update:
  *
diff --git a/src/gs-app-row.h b/src/gs-app-row.h
index a39377d..ed649ff 100644
--- a/src/gs-app-row.h
+++ b/src/gs-app-row.h
@@ -65,6 +65,8 @@ GsApp         *gs_app_row_get_app                     (GsAppRow       *app_row);
 void            gs_app_row_set_size_groups             (GsAppRow       *app_row,
                                                         GtkSizeGroup   *image,
                                                         GtkSizeGroup   *name);
+void            gs_app_row_set_show_installed_size     (GsAppRow       *app_row,
+                                                        gboolean        show_size);
 
 G_END_DECLS
 
diff --git a/src/gs-app-row.ui b/src/gs-app-row.ui
index 622129a..d25ccab 100644
--- a/src/gs-app-row.ui
+++ b/src/gs-app-row.ui
@@ -242,53 +242,79 @@
           </packing>
         </child>
         <child>
-          <object class="GtkBox" id="button_box">
+          <object class="GtkBox" id="vertical_box">
             <property name="visible">True</property>
-            <property name="orientation">horizontal</property>
-            <property name="halign">end</property>
+            <property name="orientation">vertical</property>
+            <property name="halign">center</property>
             <property name="valign">center</property>
+           <property name="margin-right">24</property>
             <child>
-              <object class="GsProgressButton" id="button">
-                <property name="margin_end">24</property>
-                <property name="width_request">100</property>
-                <property name="halign">end</property>
-              </object>
-              <packing>
-                <property name="pack_type">end</property>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkSpinner" id="spinner">
-                <property name="margin_start">12</property>
-                <property name="margin_end">12</property>
-                <property name="halign">end</property>
+              <object class="GtkBox" id="button_box">
+               <property name="visible">True</property>
+               <property name="orientation">horizontal</property>
+               <property name="halign">end</property>
+               <property name="valign">center</property>
+               <child>
+                 <object class="GsProgressButton" id="button">
+                    <property name="width_request">100</property>
+                    <property name="halign">end</property>
+                 </object>
+                 <packing>
+                    <property name="pack_type">end</property>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                 </packing>
+               </child>
+               <child>
+                 <object class="GtkSpinner" id="spinner">
+                    <property name="margin_start">12</property>
+                    <property name="margin_end">12</property>
+                    <property name="halign">end</property>
+                 </object>
+                 <packing>
+                    <property name="pack_type">end</property>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                 </packing>
+               </child>
+               <child>
+                 <object class="GtkLabel" id="label">
+                    <property name="margin_start">12</property>
+                    <property name="margin_end">12</property>
+                    <property name="halign">end</property>
+                 </object>
+                 <packing>
+                    <property name="pack_type">end</property>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                 </packing>
+               </child>
               </object>
               <packing>
-                <property name="pack_type">end</property>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
+               <property name="pack_type">start</property>
+               <property name="expand">False</property>
+               <property name="fill">False</property>
               </packing>
             </child>
-            <child>
-              <object class="GtkLabel" id="label">
-                <property name="margin_start">12</property>
-                <property name="margin_end">12</property>
-                <property name="halign">end</property>
+           <child>
+             <object class="GtkLabel" id="label_app_size">
+                <property name="visible">True</property>
+                <property name="halign">center</property>
+                <property name="valign">center</property>
+               <property name="label">150 MB</property>
+               <property name="margin-top">6</property>
+                <style>
+                 <class name="app-row-app-size"/>
+                  <class name="dim-label"/>
+                </style>
               </object>
-              <packing>
-                <property name="pack_type">end</property>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
+             <packing>
+               <property name="pack_type">end</property>
+               <property name="expand">True</property>
+               <property name="fill">True</property>
               </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="pack_type">end</property>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-          </packing>
+           </child>
+         </object>
         </child>
       </object>
     </child>
diff --git a/src/gs-shell-installed.c b/src/gs-shell-installed.c
index 0de6173..357642b 100644
--- a/src/gs-shell-installed.c
+++ b/src/gs-shell-installed.c
@@ -159,6 +159,13 @@ gs_shell_installed_notify_state_changed_cb (GsApp *app,
 
 static void selection_changed (GsShellInstalled *self);
 
+static gboolean
+should_show_installed_size (GsShellInstalled *self)
+{
+       return g_settings_get_boolean (self->settings,
+                                      "installed-page-show-size");
+}
+
 static void
 gs_shell_installed_add_app (GsShellInstalled *self, GsAppList *list, GsApp *app)
 {
@@ -183,6 +190,9 @@ gs_shell_installed_add_app (GsShellInstalled *self, GsAppList *list, GsApp *app)
                                    self->sizegroup_image,
                                    self->sizegroup_name);
 
+       gs_app_row_set_show_installed_size (GS_APP_ROW (app_row),
+                                           should_show_installed_size (self));
+
        gs_app_row_set_selectable (GS_APP_ROW (app_row),
                                   self->selection_mode);
 
@@ -229,6 +239,8 @@ out:
 static void
 gs_shell_installed_load (GsShellInstalled *self)
 {
+       GsPluginRefineFlags flags;
+
        if (self->waiting)
                return;
        self->waiting = TRUE;
@@ -236,18 +248,23 @@ gs_shell_installed_load (GsShellInstalled *self)
        /* remove old entries */
        gs_container_remove_all (GTK_CONTAINER (self->list_box_install));
 
+       flags = GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+               GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING;
+
+       if (should_show_installed_size (self))
+               flags |= GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE;
+
        /* get popular apps */
        gs_plugin_loader_get_installed_async (self->plugin_loader,
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
-                                             GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
+                                             flags,
                                              GS_PLUGIN_FAILURE_FLAGS_USE_EVENTS,
                                              self->cancellable,
                                              gs_shell_installed_get_installed_cb,
diff --git a/src/gtk-style.css b/src/gtk-style.css
index ae634c4..4dae833 100644
--- a/src/gtk-style.css
+++ b/src/gtk-style.css
@@ -34,6 +34,10 @@
        font-size: smaller;
 }
 
+.app-row-app-size {
+       font-size: x-small;
+}
+
 .needs-attention {
        background-image: none;
        background-color: shade(@theme_selected_bg_color, 1.1);


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