Implemented 'Remember my identity choice for this service' checkbox on main selector...
authorDan Breslau <dbreslau@painless-security.com>
Mon, 8 Aug 2016 18:24:34 +0000 (14:24 -0400)
committerDan Breslau <dbreslau@painless-security.com>
Mon, 8 Aug 2016 18:24:34 +0000 (14:24 -0400)
src/moonshot-identity-management-view.vala
src/moonshot-identity-request.vala

index 93129e8..0f4c942 100644 (file)
@@ -60,6 +60,8 @@ public class IdentityManagerView : Window {
 
     public GLib.Queue<IdentityRequest> request_queue;
 
+    internal CheckButton remember_identity_binding = null;
+
     private enum Columns
     {
         IDCARD_COL,
@@ -417,7 +419,6 @@ public class IdentityManagerView : Window {
         TreeIter iter;
         IdCard id_card;
 
-        var children = this.custom_vbox.get_children();
         this.custom_vbox.clear();
 
         if (filter.get_iter_first(out iter))
@@ -483,6 +484,7 @@ public class IdentityManagerView : Window {
             filter.refilter();
             redraw_id_card_widgets();
             set_prompting_service(request.service);
+            remember_identity_binding.show();
             make_visible();
         }
         this.request_queue.push_tail(request);
@@ -505,6 +507,7 @@ public class IdentityManagerView : Window {
 
     public IdCard check_add_password(IdCard identity, IdentityRequest request, IdentityManagerModel model)
     {
+        logger.trace(@"check_add_password");
         IdCard retval = identity;
         bool idcard_has_pw = (identity.password != null) && (identity.password != "");
         bool request_has_pw = (request.password != null) && (request.password != "");
@@ -566,7 +569,10 @@ public class IdentityManagerView : Window {
         if ((identity != null) && (!identity.IsNoIdentity()))
             parent_app.default_id_card = identity;
 
-        request.return_identity(identity);
+        request.return_identity(identity, remember_identity_binding.active);
+
+        remember_identity_binding.active = false;
+        remember_identity_binding.hide();
     }
 
     // private void label_make_bold(Label label)
@@ -800,8 +806,16 @@ SUCH DAMAGE.
         menubar.modify_bg(StateType.NORMAL, white);
 #endif
         main_vbox.pack_start(vbox_left, true, true, 0);
+
+        remember_identity_binding = new CheckButton.with_label(_("Remember my identity choice for this service"));
+        remember_identity_binding.active = false;
+        main_vbox.pack_start(remember_identity_binding, false, false, 6);
+
         add(main_vbox);
         main_vbox.show_all();
+
+        if (this.request_queue.length == 0)
+            remember_identity_binding.hide();
     } 
 
     private void set_atk_name_description(Widget widget, string name, string description)
index b00a5e5..2e1c132 100644 (file)
@@ -32,6 +32,8 @@
 public delegate void ReturnIdentityCallback(IdentityRequest request);
 
 public class IdentityRequest : Object {
+    static MoonshotLogger logger = get_logger("IdentityRequest");
+
     public IdCard? id_card = null;
     public bool complete = false;
     public bool select_default = false;
@@ -79,12 +81,12 @@ public class IdentityRequest : Object {
         return false;
     }
 
-    public void return_identity(IdCard? id_card) {
+    public void return_identity(IdCard? id_card, bool update_card = true) {
         this.id_card = id_card;
         this.complete = true;
 
         /* update id_card service list */
-        if (id_card != null && this.service != null && this.service != "")
+        if (update_card && id_card != null && this.service != null && this.service != "")
         {
             bool duplicate_service = false;
 
@@ -93,21 +95,17 @@ public class IdentityRequest : Object {
                 if (service == this.service)
                     duplicate_service = true;
             }
+            logger.trace("return_identity: duplicate_service=" + duplicate_service.to_string());
             if (duplicate_service == false)
             {
-                string[] services = new string[id_card.services.length + 1];
-
-                for (int i = 0; i < id_card.services.length; i++)
-                    services[i] = id_card.services[i];
-
-                services[id_card.services.length] = this.service;
-                id_card.services = services;
+                id_card.add_service(this.service);
 
                 this.id_card = this.parent_app.model.update_card(id_card);
             }
         }
 
         return_if_fail(callback != null);
+        logger.trace("return_identity: invoking callback");
         callback(this);
     }