Require minimal set of fields when adding a new card. LP 1240008
[moonshot-ui.git] / src / moonshot-identity-management-view.vala
index 7571af0..bcb0b8e 100644 (file)
@@ -329,14 +329,38 @@ public class IdentityManagerView : Window {
          */
         var ret = Gtk.ResponseType.YES;
 #else
-
-        var dialog = new Gtk.MessageDialog (this,
+        Gtk.MessageDialog dialog;
+        IdCard? prev_id = identities_manager.find_id_card(id_card.nai, force_flat_file_store);
+        if (prev_id!=null) {
+            int flags = prev_id.Compare(id_card);
+            if (flags == 0) {
+                return false; // no changes, no need to update
+            } else if ((flags & (1<<IdCard.DiffFlags.DISPLAY_NAME)) != 0) {
+                dialog = new Gtk.MessageDialog (this,
+                                            Gtk.DialogFlags.DESTROY_WITH_PARENT,
+                                            Gtk.MessageType.QUESTION,
+                                            Gtk.ButtonsType.YES_NO,
+                                            _("Would you like to replace ID Card '%s' using nai '%s' with the new ID Card '%s'?"),
+                                            prev_id.display_name,
+                                            prev_id.nai,
+                                            id_card.display_name);
+            } else {
+                dialog = new Gtk.MessageDialog (this,
+                                            Gtk.DialogFlags.DESTROY_WITH_PARENT,
+                                            Gtk.MessageType.QUESTION,
+                                            Gtk.ButtonsType.YES_NO,
+                                            _("Would you like to update ID Card '%s' using nai '%s'?"),
+                                            id_card.display_name,
+                                            id_card.nai);
+            }
+        } else {
+            dialog = new Gtk.MessageDialog (this,
                                             Gtk.DialogFlags.DESTROY_WITH_PARENT,
                                             Gtk.MessageType.QUESTION,
                                             Gtk.ButtonsType.YES_NO,
                                             _("Would you like to add '%s' ID Card to the ID Card Organizer?"),
                                             id_card.display_name);
-
+        }
         var ret = dialog.run ();
         dialog.destroy ();
 #endif
@@ -352,7 +376,9 @@ public class IdentityManagerView : Window {
     private void add_identity_manual_cb ()
     {
         var dialog = new AddIdentityDialog ();
-        var result = dialog.run ();
+        int result = ResponseType.CANCEL;
+        while (!dialog.complete)
+            result = dialog.run ();
 
         switch (result) {
         case ResponseType.OK:
@@ -436,35 +462,45 @@ public class IdentityManagerView : Window {
         this.request_queue.push_tail (request);
     }
 
-    public void check_add_password(IdCard identity, IdentityRequest request, IdentityManagerModel model)
+    public IdCard check_add_password(IdCard identity, IdentityRequest request, IdentityManagerModel model)
     {
-        if ((identity.password == "") && !identity.IsNoIdentity())
-        {
-            var dialog = new AddPasswordDialog (identity, request);
-            var result = dialog.run ();
-
-            switch (result) {
-            case ResponseType.OK:
-                identity.password = dialog.password;
-                identity.store_password = dialog.remember;
-                model.update_card(identity);
-                break;
-            default:
-                identity = null;
-                break;
+        IdCard retval = identity;
+        bool idcard_has_pw = (identity.password != null) && (identity.password != "");
+        bool request_has_pw = (request.password != null) && (request.password != "");
+        if ((!idcard_has_pw) && (!identity.IsNoIdentity())) {
+            if (request_has_pw) {
+                identity.password = request.password;
+                retval = model.update_card(identity);
+            } else {
+                var dialog = new AddPasswordDialog (identity, request);
+                var result = dialog.run ();
+
+                switch (result) {
+                case ResponseType.OK:
+                    identity.password = dialog.password;
+                    identity.store_password = dialog.remember;
+                    if (dialog.remember)
+                        identity.temporary = false;
+                    retval = model.update_card(identity);
+                    break;
+                default:
+                    identity = null;
+                    break;
+                }
+                dialog.destroy ();
             }
-
-            dialog.destroy ();
         }
+        return retval;
     }
 
-    public void send_identity_cb (IdCard identity)
+    public void send_identity_cb (IdCard id)
     {
+        IdCard identity = id;
         return_if_fail (request_queue.length > 0);
 
        candidates = null;
         var request = this.request_queue.pop_head ();
-        check_add_password(identity, request, identities_manager);
+        identity = check_add_password(identity, request, identities_manager);
         if (this.request_queue.is_empty())
         {
             candidates = null;