[gitg] Make use of gravatar optional and a preference setting



commit bb22c056722473c2b17138b842bac2641da843f4
Author: Jesse van den Kieboom <jessevdk gnome org>
Date:   Fri Jul 31 08:47:59 2015 +0200

    Make use of gravatar optional and a preference setting
    
    https://bugzilla.gnome.org/show_bug.cgi?id=744159

 data/org.gnome.gitg.gschema.xml.in.in            |    7 ++
 gitg/commit/gitg-commit-dialog.vala              |   62 +++++++++++----
 gitg/commit/gitg-commit.vala                     |   27 +++++--
 gitg/preferences/gitg-preferences-interface.vala |    8 ++
 gitg/resources/ui/gitg-preferences-interface.ui  |   89 ++++++++++++----------
 libgitg/gitg-diff-view.vala                      |   17 ++++
 libgitg/resources/ui/diff-view/diff-view.js      |   69 +++++++++--------
 plugins/diff/gitg-diff.vala                      |    8 ++
 8 files changed, 189 insertions(+), 98 deletions(-)
---
diff --git a/data/org.gnome.gitg.gschema.xml.in.in b/data/org.gnome.gitg.gschema.xml.in.in
index 624fda8..95a9c55 100644
--- a/data/org.gnome.gitg.gschema.xml.in.in
+++ b/data/org.gnome.gitg.gschema.xml.in.in
@@ -35,6 +35,13 @@
         The activity which gitg activates by default when first launched.
       </_description>
     </key>
+    <key name="use-gravatar" type="b">
+      <default>true</default>
+      <_summary>Use Gravatar</_summary>
+      <_description>
+        Enable the use of gravatar to display user avatars.
+      </_description>
+    </key>
   </schema>
   <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.gitg.preferences.history" 
path="/org/gnome/gitg/preferences/history/">
     <key name="collapse-inactive-lanes" type="i">
diff --git a/gitg/commit/gitg-commit-dialog.vala b/gitg/commit/gitg-commit-dialog.vala
index ea19602..80d8730 100644
--- a/gitg/commit/gitg-commit-dialog.vala
+++ b/gitg/commit/gitg-commit-dialog.vala
@@ -275,6 +275,21 @@ class Dialog : Gtk.Dialog
                }
        }
 
+       private bool d_use_gravatar;
+
+       public bool use_gravatar
+       {
+               get { return d_use_gravatar; }
+               set
+               {
+                       if (d_use_gravatar != value)
+                       {
+                               d_use_gravatar = value;
+                               load_author_info();
+                       }
+               }
+       }
+
        private void load_author_info()
        {
                if (d_cancel_avatar != null)
@@ -324,26 +339,33 @@ class Dialog : Gtk.Dialog
                        d_label_date.halign = Gtk.Align.START;
                }
 
-               var ac = Gitg.AvatarCache.default();
-               d_cancel_avatar = new Cancellable();
+               if (use_gravatar)
+               {
+                       var ac = Gitg.AvatarCache.default();
+                       d_cancel_avatar = new Cancellable();
 
-               ac.load.begin(d_author.get_email(), d_cancel_avatar, (obj, res) => {
-                       var pixbuf = ac.load.end(res);
+                       ac.load.begin(d_author.get_email(), d_cancel_avatar, (obj, res) => {
+                               var pixbuf = ac.load.end(res);
 
-                       if (d_cancel_avatar.is_cancelled())
-                       {
-                               return;
-                       }
+                               if (d_cancel_avatar.is_cancelled())
+                               {
+                                       return;
+                               }
 
-                       if (pixbuf != null)
-                       {
-                               d_image_avatar.set_from_pixbuf(pixbuf);
-                       }
-                       else
-                       {
-                               d_image_avatar.set_from_icon_name("avatar-default-symbolic", 
Gtk.IconSize.DIALOG);
-                       }
-               });
+                               if (pixbuf != null)
+                               {
+                                       d_image_avatar.set_from_pixbuf(pixbuf);
+                               }
+                               else
+                               {
+                                       d_image_avatar.set_from_icon_name("avatar-default-symbolic", 
Gtk.IconSize.DIALOG);
+                               }
+                       });
+               }
+               else
+               {
+                       d_image_avatar.set_from_icon_name("avatar-default-symbolic", Gtk.IconSize.DIALOG);
+               }
        }
 
        protected override void destroy()
@@ -431,6 +453,12 @@ class Dialog : Gtk.Dialog
                                        "spell-checking-language",
                                        SettingsBindFlags.GET | SettingsBindFlags.SET);
 
+               var interface_settings = new Settings("org.gnome.gitg.preferences.interface");
+               interface_settings.bind("use-gravatar",
+                                       this,
+                                       "use-gravatar",
+                                       SettingsBindFlags.GET);
+
                d_constructed = true;
 
                init_message_area();
diff --git a/gitg/commit/gitg-commit.vala b/gitg/commit/gitg-commit.vala
index a315c80..d0e0830 100644
--- a/gitg/commit/gitg-commit.vala
+++ b/gitg/commit/gitg-commit.vala
@@ -721,16 +721,19 @@ namespace GitgCommit
                                selected_paths.add(item.path);
                        }
 
-                       // Preload author avatar
-                       try
+                       if (d_main.diff_view.use_gravatar)
                        {
-                               var author = get_signature("AUTHOR");
-                               var ac = Gitg.AvatarCache.default();
+                               // Preload author avatar
+                               try
+                               {
+                                       var author = get_signature("AUTHOR");
+                                       var ac = Gitg.AvatarCache.default();
 
-                               ac.load.begin(author.get_email(), null, (obj, res) => {
-                                       ac.load.end(res);
-                               });
-                       } catch {}
+                                       ac.load.begin(author.get_email(), null, (obj, res) => {
+                                               ac.load.end(res);
+                                       });
+                               } catch {}
+                       }
 
                        var stage = repository.stage;
 
@@ -1738,6 +1741,14 @@ namespace GitgCommit
                                      SettingsBindFlags.GET |
                                      SettingsBindFlags.SET);
 
+                       settings = new Settings("org.gnome.gitg.preferences.interface");
+
+                       settings.bind("use-gravatar",
+                                     d_main.diff_view,
+                                     "use-gravatar",
+                                     SettingsBindFlags.GET |
+                                     SettingsBindFlags.SET);
+
                        d_main.diff_view.bind_property("has-selection",
                                                       d_main.button_stage,
                                                       "sensitive",
diff --git a/gitg/preferences/gitg-preferences-interface.vala 
b/gitg/preferences/gitg-preferences-interface.vala
index 1588b8a..98b3239 100644
--- a/gitg/preferences/gitg-preferences-interface.vala
+++ b/gitg/preferences/gitg-preferences-interface.vala
@@ -34,6 +34,9 @@ public class PreferencesInterface : Gtk.Grid, GitgExt.Preferences
        [GtkChild (name = "default_activity")]
        private Gtk.ComboBox d_default_activity;
 
+       [GtkChild (name = "gravatar_enabled")]
+       private Gtk.CheckButton d_gravatar_enabled;
+
        construct
        {
                d_settings = new Settings("org.gnome.gitg.preferences.interface");
@@ -58,6 +61,11 @@ public class PreferencesInterface : Gtk.Grid, GitgExt.Preferences
                                d_default_activity,
                                "active-id",
                                SettingsBindFlags.GET | SettingsBindFlags.SET);
+
+               d_settings.bind("use-gravatar",
+                               d_gravatar_enabled,
+                               "active",
+                               SettingsBindFlags.GET | SettingsBindFlags.SET);
        }
 
        public override void dispose()
diff --git a/gitg/resources/ui/gitg-preferences-interface.ui b/gitg/resources/ui/gitg-preferences-interface.ui
index d07b4d4..c0e1f95 100644
--- a/gitg/resources/ui/gitg-preferences-interface.ui
+++ b/gitg/resources/ui/gitg-preferences-interface.ui
@@ -1,11 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
 <interface>
-  <!-- interface-requires gtk+ 3.12 -->
+  <requires lib="gtk+" version="3.12"/>
   <template class="GitgPreferencesInterface" parent="GtkGrid">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="has_focus">False</property>
-    <property name="is_focus">False</property>
     <property name="hexpand">True</property>
     <property name="vexpand">True</property>
     <property name="border_width">12</property>
@@ -15,16 +14,12 @@
       <object class="GtkGrid" id="grid1">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="has_focus">False</property>
-        <property name="is_focus">False</property>
         <property name="hexpand">True</property>
         <property name="row_spacing">6</property>
         <child>
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="has_focus">False</property>
-            <property name="is_focus">False</property>
             <property name="halign">start</property>
             <property name="label" translatable="yes">Startup</property>
             <attributes>
@@ -34,70 +29,53 @@
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">0</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkGrid" id="grid2">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="has_focus">False</property>
-            <property name="is_focus">False</property>
+            <property name="margin_start">12</property>
             <property name="hexpand">True</property>
             <property name="row_spacing">6</property>
             <property name="column_spacing">6</property>
-            <property name="margin_start">12</property>
             <child>
               <object class="GtkLabel" id="label4">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="has_focus">False</property>
-                <property name="is_focus">False</property>
                 <property name="halign">start</property>
                 <property name="label" translatable="yes">Start with activity:</property>
               </object>
               <packing>
                 <property name="left_attach">0</property>
                 <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
               </packing>
             </child>
             <child>
               <object class="GtkComboBoxText" id="default_activity">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="has_focus">False</property>
-                <property name="is_focus">False</property>
-                <property name="receives_default">False</property>
                 <property name="halign">start</property>
                 <items>
-                  <item translatable="yes" id="history">History</item>
-                  <item translatable="yes" id="commit">Commit</item>
+                  <item id="history" translatable="yes">History</item>
+                  <item id="commit" translatable="yes">Commit</item>
                 </items>
               </object>
               <packing>
                 <property name="left_attach">1</property>
                 <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">1</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkLabel" id="label2">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="has_focus">False</property>
-            <property name="is_focus">False</property>
             <property name="halign">start</property>
             <property name="label" translatable="yes">Layout</property>
             <attributes>
@@ -107,27 +85,21 @@
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">2</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkGrid" id="grid3">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="has_focus">False</property>
-            <property name="is_focus">False</property>
+            <property name="margin_start">12</property>
             <property name="hexpand">True</property>
             <property name="row_spacing">6</property>
-            <property name="margin_start">12</property>
             <child>
               <object class="GtkCheckButton" id="horizontal_layout_enabled">
                 <property name="label" translatable="yes">Use horizontal layout</property>
                 <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="has_focus">False</property>
-                <property name="is_focus">False</property>
                 <property name="receives_default">False</property>
                 <property name="halign">start</property>
                 <property name="draw_indicator">True</property>
@@ -135,24 +107,61 @@
               <packing>
                 <property name="left_attach">0</property>
                 <property name="top_attach">0</property>
-                <property name="width">1</property>
-                <property name="height">1</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="left_attach">0</property>
             <property name="top_attach">3</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label3">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="label" translatable="yes">Avatars</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="grid4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_start">12</property>
+            <property name="hexpand">True</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkCheckButton" id="gravatar_enabled">
+                <property name="label" translatable="yes">Use gravatar service to provide user 
avatars</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="halign">start</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">5</property>
           </packing>
         </child>
       </object>
       <packing>
         <property name="left_attach">0</property>
         <property name="top_attach">0</property>
-        <property name="width">1</property>
-        <property name="height">1</property>
       </packing>
     </child>
   </template>
diff --git a/libgitg/gitg-diff-view.vala b/libgitg/gitg-diff-view.vala
index da05bb3..3372f61 100644
--- a/libgitg/gitg-diff-view.vala
+++ b/libgitg/gitg-diff-view.vala
@@ -136,6 +136,22 @@ namespace Gitg
                public bool unstaged { get; set; default = false; }
                public bool show_parents { get; set; default = false; }
 
+               private bool d_use_gravatar;
+
+               public bool use_gravatar
+               {
+                       get { return d_use_gravatar; }
+                       construct set
+                       {
+                               if (d_use_gravatar != value)
+                               {
+                                       d_use_gravatar = value;
+                                       options_changed();
+                               }
+                       }
+                       default = true;
+               }
+
                int d_tab_width;
 
                public int tab_width
@@ -242,6 +258,7 @@ namespace Gitg
                        o.set_boolean_member("changes_inline", changes_inline);
                        o.set_boolean_member("show_parents", show_parents);
                        o.set_string_member("parent", d_parent);
+                       o.set_boolean_member("use_gravatar", use_gravatar);
 
                        var strings = new Json.Object();
 
diff --git a/libgitg/resources/ui/diff-view/diff-view.js b/libgitg/resources/ui/diff-view/diff-view.js
index b5c5b72..a1ca965 100644
--- a/libgitg/resources/ui/diff-view/diff-view.js
+++ b/libgitg/resources/ui/diff-view/diff-view.js
@@ -22,6 +22,7 @@ var default_settings = {
        staged: false,
        unstaged: false,
        show_parents: false,
+       use_gravatar: true,
        strings: {
                stage: 'stage',
                unstage: 'unstage',
@@ -91,7 +92,7 @@ function write_avatar(avatar, commit)
                avatarLoader.cancelled = true;
        }
 
-       if (h in avatar_cache)
+       if (h in avatar_cache && settings.use_gravatar)
        {
                avc = avatar_cache[h];
 
@@ -103,40 +104,42 @@ function write_avatar(avatar, commit)
                return;
        }
 
-       avatarLoader = {
-               image: $('<img/>'),
-               cancelled: false
-       };
-
-       var gravatar = 'http://www.gravatar.com/avatar/' + h + '?d=404&s=60';
-
-       avc = 'gitg-diff:/icon/avatar-default-symbolic?size=60';
-
+       var avc = 'gitg-diff:/icon/avatar-default-symbolic?size=60';
        avatar.attr('src', avc);
 
-       avatarLoader.image.on('load', function () {
-               if (this.cancelled)
-               {
-                       return;
-               }
+       if (settings.use_gravatar)
+       {
+               avatarLoader = {
+                       image: $('<img/>'),
+                       cancelled: false
+               };
+
+               var gravatar = 'http://www.gravatar.com/avatar/' + h + '?d=404&s=60';
 
-               avatar_cache[h] = gravatar;
-               avatar.attr('src', gravatar);
+               avatarLoader.image.on('load', function () {
+                       if (this.cancelled)
+                       {
+                               return;
+                       }
 
-               avatarLoader = null;
-       }.bind(avatarLoader));
+                       avatar_cache[h] = gravatar;
+                       avatar.attr('src', gravatar);
 
-       avatarLoader.image.on('error', function () {
-               if (this.cancelled)
-               {
-                       return;
-               }
+                       avatarLoader = null;
+               }.bind(avatarLoader));
 
-               avatar_cache[h] = avc;
-               avatarLoader = null;
-       }.bind(avatarLoader));
+               avatarLoader.image.on('error', function () {
+                       if (this.cancelled)
+                       {
+                               return;
+                       }
 
-       avatarLoader.image.attr('src', gravatar);
+                       avatar_cache[h] = avc;
+                       avatarLoader = null;
+               }.bind(avatarLoader));
+       
+               avatarLoader.image.attr('src', gravatar);
+       }
 }
 
 function open_url(target)
diff --git a/plugins/diff/gitg-diff.vala b/plugins/diff/gitg-diff.vala
index 3088d86..43907bb 100644
--- a/plugins/diff/gitg-diff.vala
+++ b/plugins/diff/gitg-diff.vala
@@ -65,6 +65,14 @@ namespace GitgDiff
                                      SettingsBindFlags.GET |
                                      SettingsBindFlags.SET);
 
+                       settings = new Settings("org.gnome.gitg.preferences.interface");
+
+                       settings.bind("use-gravatar",
+                                     d_diff,
+                                     "use-gravatar",
+                                     SettingsBindFlags.GET |
+                                     SettingsBindFlags.SET);
+
                        d_diff.show();
 
                        d_sw.add(d_diff);


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