summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Reitter <travis.reitter@collabora.co.uk>2011-10-20 17:24:14 (GMT)
committerTravis Reitter <travis.reitter@collabora.co.uk>2011-10-24 18:39:23 (GMT)
commitba233588b1208c761e4512054626f6ddb6db8647 (patch)
treef75bd13d819f9c74b26488b53759ab48a4d1d480
parent99e18f7bc15a793768b8a32b4bdb769a2c68ca04 (diff)
downloadfolks-ba233588b1208c761e4512054626f6ddb6db8647.tar.gz
folks-ba233588b1208c761e4512054626f6ddb6db8647.tar.xz
Migrate RoleDetails to AbstractFieldDetails.id
Deprecate Role.uid in favor of AbstractFieldDetails.id Helps: bgo#662433 - AbstractFieldDetails.equal() is ambiguous about checking parameters.
-rw-r--r--NEWS1
-rw-r--r--backends/tracker/lib/trf-persona.vala8
-rw-r--r--folks/role-details.vala29
-rw-r--r--tests/tracker/role-details-interface.vala18
4 files changed, 53 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 020a38a..0f973c6 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ API changes:
* Add AbstractFieldDetails.id to identify instances of details
* Deprecate PostalAddress.uid in favor of AbstractFieldDetails.id
* Deprecate NoteFieldDetails.uid in favor of AbstractFieldDetails.id
+* Deprecate Role.uid in favor of AbstractFieldDetails.id
Behavior changes:
* PostalAddress.equal() now ignores PostalAddress.uid
diff --git a/backends/tracker/lib/trf-persona.vala b/backends/tracker/lib/trf-persona.vala
index 8867684..b37b0af 100644
--- a/backends/tracker/lib/trf-persona.vala
+++ b/backends/tracker/lib/trf-persona.vala
@@ -967,9 +967,10 @@ public class Trf.Persona : Folks.Persona,
var title = r_info[Trf.RoleFields.TITLE];
var organisation = r_info[Trf.RoleFields.DEPARTMENT];
- var new_role = new Role (title, organisation, tracker_id);
+ var new_role = new Role (title, organisation, null);
new_role.role = role;
var role_fd = new RoleFieldDetails (new_role);
+ role_fd.id = tracker_id;
role_fds.add (role_fd);
}
@@ -981,9 +982,10 @@ public class Trf.Persona : Folks.Persona,
internal bool _add_role (string tracker_id, string? role, string? title, string? org)
{
- var new_role = new Role (title, org, tracker_id);
+ var new_role = new Role (title, org, null);
new_role.role = role;
var role_fd = new RoleFieldDetails (new_role);
+ role_fd.id = tracker_id;
if (this._roles.add (role_fd))
{
this.notify_property ("roles");
@@ -996,7 +998,7 @@ public class Trf.Persona : Folks.Persona,
{
foreach (var role_fd in this._roles)
{
- if (role_fd.value.uid == tracker_id)
+ if (role_fd.id == tracker_id)
{
this._roles.remove (role_fd);
this.notify_property ("roles");
diff --git a/folks/role-details.vala b/folks/role-details.vala
index 890acfc..f13b7a2 100644
--- a/folks/role-details.vala
+++ b/folks/role-details.vala
@@ -68,9 +68,11 @@ public class Folks.Role : Object
set { this._role = (value != null ? value : ""); }
}
+ private string _uid;
/**
* The UID that distinguishes this role.
*/
+ [Deprecated (since = "UNRELEASED", replacement = "AbstractFieldDetails.id")]
public string uid
{
get { return _uid; }
@@ -143,6 +145,23 @@ public class Folks.Role : Object
*/
public class Folks.RoleFieldDetails : AbstractFieldDetails<Role>
{
+ private string _id;
+ /**
+ * {@inheritDoc}
+ */
+ public override string id
+ {
+ get { return this._id; }
+ set
+ {
+ this._id = (value != null ? value : "");
+
+ /* Keep the Role.uid sync'd from our id */
+ if (this._id != this.value.uid)
+ this.value.uid = this._id;
+ }
+ }
+
/**
* Create a new RoleFieldDetails.
*
@@ -161,6 +180,16 @@ public class Folks.RoleFieldDetails : AbstractFieldDetails<Role>
this.value = value;
if (parameters != null)
this.parameters = parameters;
+
+ /* We keep these sync'd both directions */
+ this.id = this.value.uid;
+
+ /* Keep the Role.uid sync'd to our id */
+ this.value.notify["uid"].connect ((s, p) =>
+ {
+ if (this.id != this.value.uid)
+ this.id = this.value.uid;
+ });
}
/**
diff --git a/tests/tracker/role-details-interface.vala b/tests/tracker/role-details-interface.vala
index beea993..79baadc 100644
--- a/tests/tracker/role-details-interface.vala
+++ b/tests/tracker/role-details-interface.vala
@@ -115,8 +115,26 @@ public class RoleDetailsInterfaceTests : Folks.TestCase
var role_expected = new Role ("boss", "Company");
role_expected.role = "Role";
var role_fd_expected = new RoleFieldDetails (role_expected);
+
+ /* We copy the tracker_id - we don't know it.
+ * We could get it from the 1st personas iid but there is no
+ * real need. */
+ role_fd_expected.id = role_fd.id;
+
if (role_fd.equal (role_fd_expected))
{
+ /* Ensure that setting the Role uid directly (which is
+ * deprecated) is equivalent to setting the id on a
+ * RoleFieldDetails directly */
+ var role_2 = new Role (
+ role_expected.title,
+ role_expected.organisation_name,
+ role_fd.id);
+ role_2.role = role_expected.role;
+ var role_fd_2 = new RoleFieldDetails (role_2);
+ assert (role_fd.equal (role_fd_2));
+ assert (role_fd.id == role_fd_2.id);
+
this._found_role = true;
this._main_loop.quit ();
}