Squashed merge of many commits, including (but not limited to) :
[moonshot-ui.git] / src / moonshot-identities-manager.vala
index 01eea71..5cb4279 100644 (file)
@@ -157,9 +157,8 @@ public class IdentityManagerModel : Object {
             remove_card_internal(id_card);
 
             if (new_card.trust_anchor.Compare(id_card.trust_anchor) == 0) {
-                logger.trace("Old and new cards have same trust anchor. Re-using the datetime_added and user_verified fields from the old card.");
+                logger.trace("Old and new cards have same trust anchor. Re-using the datetime_added field from the old card.");
                 new_card.trust_anchor.set_datetime_added(id_card.trust_anchor.datetime_added);
-                new_card.trust_anchor.user_verified = id_card.trust_anchor.user_verified;
             }
         }
 
@@ -170,6 +169,47 @@ public class IdentityManagerModel : Object {
         return (dups.size > 0);
     }
 
+
+    public bool find_duplicate_nai_sets(out ArrayList<ArrayList<IdCard>> duplicates)
+    {
+        var nais = new HashMap<string, ArrayList<IdCard>>();
+
+        duplicates = new ArrayList<ArrayList<IdCard>>();
+        LinkedList<IdCard> card_list = get_card_list() ;
+        if (card_list == null) {
+            return false;
+        }
+
+        bool found = false;
+        foreach (IdCard id_card in card_list) {
+            logger.trace(@"load_id_cards: Loading card with display name '$(id_card.display_name)'");
+
+            //!!TODO: This uniqueness check really belongs somewhere else -- like where we add
+            // IDs, and/or read them from storage. However, we should never hit this.
+
+            if (nais.has_key(id_card.nai)) {
+                ArrayList<IdCard> list = nais.get(id_card.nai);
+                list.add(id_card);
+            }
+            else {
+                ArrayList<IdCard> list = new ArrayList<IdCard>();
+                list.add(id_card);
+                nais.set(id_card.nai, list);
+            }
+        }
+
+        duplicates = new ArrayList<ArrayList<IdCard>>();
+        foreach (Map.Entry<string, ArrayList<IdCard>> entry in nais.entries) {
+            var list = entry.value;
+            if (list.size > 1) {
+                duplicates.add(list);
+                found = true;
+            }
+        }
+        return found;
+    }
+
+
     public IdCard? find_id_card(string nai, bool force_flat_file_store) {
         IdCard? retval = null;
         IIdentityCardStore.StoreType saved_store_type = get_store_type();