Use a more-flexible a{sv} type for the add_persona_from_details() functions.
authorTravis Reitter <travis.reitter@collabora.co.uk>
Tue, 13 Jul 2010 06:22:37 +0000 (23:22 -0700)
committerTravis Reitter <travis.reitter@collabora.co.uk>
Tue, 13 Jul 2010 06:22:37 +0000 (23:22 -0700)
backends/telepathy/tpf-persona-store.vala
configure.ac
folks/individual-aggregator.vala
folks/persona-store.vala

index 12bf110..383c329 100644 (file)
@@ -1002,9 +1002,9 @@ public class Tpf.PersonaStore : Folks.PersonaStore
    * {@inheritDoc}
    */
   public override async Folks.Persona? add_persona_from_details (
-      HashTable<string, string> details) throws Folks.PersonaStoreError
+      HashTable<string, Value?> details) throws Folks.PersonaStoreError
     {
-      var contact_id = details.lookup ("contact");
+      var contact_id = TelepathyGLib.asv_get_string (details, "contact");
       if (contact_id == null)
         {
           throw new PersonaStoreError.INVALID_ARGUMENT (
index e20753e..9b57386 100644 (file)
@@ -3,7 +3,7 @@ m4_define(folks_released, 0)
 
 m4_define([folks_major_version], [0])
 m4_define([folks_minor_version], [1])
-m4_define([folks_micro_version], [8])
+m4_define([folks_micro_version], [9])
 m4_define([folks_nano_version], [0])
 
 dnl Display the nano_version only if it's not '0'
index 2c121f7..f21a237 100644 (file)
@@ -211,7 +211,7 @@ public class Folks.IndividualAggregator : Object
   public async Persona? add_persona_from_details (Individual? parent,
       string persona_store_type,
       string persona_store_id,
-      HashTable<string, string> details) throws IndividualAggregatorError
+      HashTable<string, Value?> details) throws IndividualAggregatorError
     {
       var full_id = this.get_store_full_id (persona_store_type,
           persona_store_id);
@@ -227,7 +227,8 @@ public class Folks.IndividualAggregator : Object
       Persona persona = null;
       try
         {
-          persona = yield store.add_persona_from_details (details);
+          var details_copy = asv_copy (details);
+          persona = yield store.add_persona_from_details (details_copy);
         }
       catch (PersonaStoreError e)
         {
@@ -247,6 +248,18 @@ public class Folks.IndividualAggregator : Object
       return persona;
     }
 
+  private HashTable<string, Value?> asv_copy (HashTable<string, Value?> asv)
+    {
+      var retval = new HashTable<string, Value?> (str_hash, str_equal);
+
+      asv.foreach ((k, v) =>
+        {
+          retval.insert ((string) k, (Value?) v);
+        });
+
+      return retval;
+    }
+
   /**
    * Completely remove the individual and all of its personas from their
    * backing stores.
index b96a3ea..94cecbe 100644 (file)
@@ -101,7 +101,7 @@ public abstract class Folks.PersonaStore : Object
    * @return the new {@link Persona}, or `null` on failure
    */
   public abstract async Persona? add_persona_from_details (
-      HashTable<string, string> details) throws Folks.PersonaStoreError;
+      HashTable<string, Value?> details) throws Folks.PersonaStoreError;
 
   /**
    * Remove a {@link Persona} from the PersonaStore.