[folks] Modified libfolks to use LinkedHashSet in im_addresses.
- From: Eitan Isaacson <eitani src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [folks] Modified libfolks to use LinkedHashSet in im_addresses.
- Date: Tue, 18 Jan 2011 17:25:50 +0000 (UTC)
commit f1f826688cfec808d98bf3e588735812cde6160c
Author: Eitan Isaacson <eitan monotonous org>
Date: Sun Jan 16 11:47:50 2011 +0200
Modified libfolks to use LinkedHashSet in im_addresses.
NEWS | 1 +
folks/imable.vala | 4 ++--
folks/individual-aggregator.vala | 34 ++++++++--------------------------
folks/individual.vala | 29 +++++++++--------------------
4 files changed, 20 insertions(+), 48 deletions(-)
---
diff --git a/NEWS b/NEWS
index b1ea5e5..11652cc 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,7 @@ Major changes:
API changes:
* New type: LinkedHashSet, similar to Gee.HashSet, but ordered.
+* IMable.im_addresses is now a mapping of string to LinkedHashSet.
Bugs fixed:
* Bug 637240 â?? libfolks-telepathy.so exports private symbols
diff --git a/folks/imable.vala b/folks/imable.vala
index 25be0df..298c1d0 100644
--- a/folks/imable.vala
+++ b/folks/imable.vala
@@ -57,9 +57,9 @@ public interface Folks.IMable : Object
* All the IM addresses must be normalised using
* { link IMable.normalise_im_address} before being added to this property.
*
- * @since 0.1.13
+ * @since 0.3.UNRELEASED
*/
- public abstract HashTable<string, GenericArray<string>> im_addresses
+ public abstract HashTable<string, LinkedHashSet<string>> im_addresses
{
get; set;
}
diff --git a/folks/individual-aggregator.vala b/folks/individual-aggregator.vala
index a1d6e7c..a284e6f 100644
--- a/folks/individual-aggregator.vala
+++ b/folks/individual-aggregator.vala
@@ -878,14 +878,9 @@ public class Folks.IndividualAggregator : Object
/* FIXME: We hardcode this to use the key-file backend for now */
assert (this._writeable_store.type_id == "key-file");
- /* `protocols_addrs_list` will be passed to the new Kf.Persona, whereas
- * `protocols_addrs_set` is used to ensure we don't get duplicate IM
- * addresses in the ordered set of addresses for each protocol in
- * `protocols_addrs_list`. It's temporary. */
- var protocols_addrs_list =
- new HashTable<string, GenericArray<string>> (str_hash, str_equal);
+ /* `protocols_addrs_set` will be passed to the new Kf.Persona */
var protocols_addrs_set =
- new HashTable<string, HashSet<string>> (str_hash, str_equal);
+ new HashTable<string, LinkedHashSet<string>> (str_hash, str_equal);
foreach (var persona in personas)
{
@@ -895,37 +890,24 @@ public class Folks.IndividualAggregator : Object
((IMable) persona).im_addresses.foreach ((k, v) =>
{
unowned string protocol = (string) k;
- unowned GenericArray<string> addresses = (GenericArray<string>) v;
+ unowned LinkedHashSet<string> addresses =
+ (LinkedHashSet<string>) v;
- var address_list = protocols_addrs_list.lookup (protocol);
var address_set = protocols_addrs_set.lookup (protocol);
- if (address_list == null || address_set == null)
+ if (address_set == null)
{
- address_list = new GenericArray<string> ();
- address_set = new HashSet<string> ();
+ address_set = new LinkedHashSet<string> ();
- protocols_addrs_list.insert (protocol, address_list);
protocols_addrs_set.insert (protocol, address_set);
}
- addresses.foreach ((a) =>
- {
- unowned string address = (string) a;
-
- /* Only add the IM address to the ordered set if it isn't
- * already a member. */
- if (!address_set.contains (address))
- {
- address_list.add (address);
- address_set.add (address);
- }
- });
+ address_set.add_all (addresses);
});
}
var addresses_value = Value (typeof (HashTable));
- addresses_value.set_boxed (protocols_addrs_list);
+ addresses_value.set_boxed (protocols_addrs_set);
var details = new HashTable<string, Value?> (str_hash, str_equal);
details.insert ("im-addresses", addresses_value);
diff --git a/folks/individual.vala b/folks/individual.vala
index b07e4b1..64717b1 100644
--- a/folks/individual.vala
+++ b/folks/individual.vala
@@ -88,7 +88,7 @@ public class Folks.Individual : Object,
/* The number of Personas in this Individual which have
* Persona.is_user == true. Iff this is > 0, Individual.is_user == true. */
private uint _persona_user_count = 0;
- private HashTable<string, GenericArray<string>> _im_addresses;
+ private HashTable<string, LinkedHashSet<string>> _im_addresses;
/**
* The trust level of the Individual.
@@ -267,7 +267,7 @@ public class Folks.Individual : Object,
/**
* { inheritDoc}
*/
- public HashTable<string, GenericArray<string>> im_addresses
+ public HashTable<string, LinkedHashSet<string>> im_addresses
{
get { return this._im_addresses; }
private set {}
@@ -372,7 +372,7 @@ public class Folks.Individual : Object,
public Individual (GLib.List<Persona>? personas)
{
this._im_addresses =
- new HashTable<string, GenericArray<string>> (str_hash, str_equal);
+ new HashTable<string, LinkedHashSet<string>> (str_hash, str_equal);
this._persona_set = new HashSet<Persona> (null, null);
this._stores = new HashMap<PersonaStore, uint> (null, null);
this.personas = personas;
@@ -694,27 +694,16 @@ public class Folks.Individual : Object,
imable.im_addresses.foreach ((k, v) =>
{
var cur_protocol = (string) k;
- var cur_addresses = (GenericArray<string>) v;
- var old_im_array = this._im_addresses.lookup (cur_protocol);
- var im_array = new GenericArray<string> ();
+ var cur_addresses = (LinkedHashSet<string>) v;
+ var im_set = this._im_addresses.lookup (cur_protocol);
- /* use a set to eliminate duplicates */
- var address_set = new HashSet<string> (str_hash, str_equal);
- if (old_im_array != null)
+ if (im_set == null)
{
- old_im_array.foreach ((old_address) =>
- {
- address_set.add ((string) old_address);
- });
+ im_set = new LinkedHashSet<string> ();
+ this._im_addresses.insert (cur_protocol, im_set);
}
- cur_addresses.foreach ((cur_address) =>
- {
- address_set.add ((string) cur_address);
- });
- foreach (string addr in address_set)
- im_array.add (addr);
- this._im_addresses.insert (cur_protocol, im_array);
+ im_set.add_all (cur_addresses);
});
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]