[calls] best-match: Add property for primary and secondary display information
- From: Evangelos Ribeiro Tzaras <devrtz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [calls] best-match: Add property for primary and secondary display information
- Date: Tue, 22 Feb 2022 09:30:39 +0000 (UTC)
commit 7f40314810939be3ae31243c083950cbbe5fdf48
Author: Evangelos Ribeiro Tzaras <devrtz fortysixandtwo eu>
Date: Sun Feb 13 10:44:31 2022 +0100
best-match: Add property for primary and secondary display information
This allows to get rid of any special casing that the users of the
calls_best_match_get_name() and calls_best_match_get_id() had to do previously.
We also allow passing in NULL for *_get_primary_info ()
and *_get_secondary_info () for the anonymous caller case.
src/calls-best-match.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++--
src/calls-best-match.h | 2 +
2 files changed, 99 insertions(+), 4 deletions(-)
---
diff --git a/src/calls-best-match.c b/src/calls-best-match.c
index 7c8a2d9a..f3598689 100644
--- a/src/calls-best-match.c
+++ b/src/calls-best-match.c
@@ -53,6 +53,8 @@ enum {
PROP_AVATAR,
PROP_HAS_INDIVIDUAL,
PROP_COUNTRY_CODE,
+ PROP_PRIMARY_INFO,
+ PROP_SECONDARY_INFO,
PROP_LAST_PROP,
};
static GParamSpec *props[PROP_LAST_PROP];
@@ -71,12 +73,23 @@ search_view_prepare_cb (FolksSearchView *view,
}
+static void
+notify_display_info (CallsBestMatch *self)
+{
+ g_assert (CALLS_IS_BEST_MATCH (self));
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PRIMARY_INFO]);
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SECONDARY_INFO]);
+}
+
+
static void
notify_name (CallsBestMatch *self)
{
g_assert (CALLS_IS_BEST_MATCH (self));
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NAME]);
+ notify_display_info (self);
}
@@ -193,6 +206,16 @@ get_property (GObject *object,
calls_best_match_get_avatar (self));
break;
+ case PROP_PRIMARY_INFO:
+ g_value_set_string (value,
+ calls_best_match_get_primary_info (self));
+ break;
+
+ case PROP_SECONDARY_INFO:
+ g_value_set_string (value,
+ calls_best_match_get_secondary_info (self));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -263,6 +286,19 @@ calls_best_match_class_init (CallsBestMatchClass *klass)
G_TYPE_LOADABLE_ICON,
G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
+ props[PROP_PRIMARY_INFO] =
+ g_param_spec_string ("primary-info",
+ "Primary Information",
+ "Primary information to display",
+ NULL,
+ G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
+
+ props[PROP_SECONDARY_INFO] =
+ g_param_spec_string ("secondary-info",
+ "Secondary Information",
+ "Secondary information to display",
+ NULL,
+ G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
}
@@ -327,6 +363,7 @@ calls_best_match_set_phone_number (CallsBestMatch *self,
g_free (self->name_sip);
self->name_sip = g_strdup (split[1]);
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PHONE_NUMBER]);
+ notify_display_info (self);
return;
}
query = calls_phone_number_query_new (phone_number, self->country_code);
@@ -343,6 +380,7 @@ calls_best_match_set_phone_number (CallsBestMatch *self,
}
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PHONE_NUMBER]);
+ notify_display_info (self);
}
const char *
@@ -354,10 +392,8 @@ calls_best_match_get_name (CallsBestMatch *self)
return folks_individual_get_display_name (self->matched_individual);
else if (self->name_sip)
return self->name_sip;
- else if (self->phone_number)
- return self->phone_number;
- else
- return _("Anonymous caller");
+
+ return NULL;
}
@@ -371,3 +407,60 @@ calls_best_match_get_avatar (CallsBestMatch *self)
else
return NULL;
}
+
+/**
+ * calls_best_match_get_primary_info:
+ * @self: A #CallsBestMatch
+ *
+ * Returns: (transfer none): The contact description to be used
+ * for primary labels
+ */
+const char *
+calls_best_match_get_primary_info (CallsBestMatch *self)
+{
+ const char *name;
+
+ if (!self)
+ goto anon;
+
+ g_return_val_if_fail (CALLS_IS_BEST_MATCH (self), NULL);
+
+ name = calls_best_match_get_name (self);
+ if (name)
+ return name;
+
+ if (self->phone_number)
+ return self->phone_number;
+
+ anon:
+ return _("Anonymous caller");
+}
+
+/**
+ * calls_best_match_get_secondary_info:
+ * @self: A #CallsBestMatch
+ *
+ * Returns: (transfer none): The contact description to be used
+ * for secondary labels
+ */
+const char *
+calls_best_match_get_secondary_info (CallsBestMatch *self)
+{
+ if (!self)
+ goto anon;
+
+ g_return_val_if_fail (CALLS_IS_BEST_MATCH (self), NULL);
+
+ if (self->matched_individual)
+ return self->phone_number;
+ else if (self->name_sip)
+ return self->phone_number; /* XXX despite the misnomer, this is actually a SIP address */
+
+ /** TODO for phone calls:
+ * lookup location information based on country/area code
+ * https://gitlab.gnome.org/GNOME/calls/-/issues/358
+ */
+
+ anon:
+ return "";
+}
diff --git a/src/calls-best-match.h b/src/calls-best-match.h
index 859825b2..5b4df301 100644
--- a/src/calls-best-match.h
+++ b/src/calls-best-match.h
@@ -40,6 +40,8 @@ void calls_best_match_set_phone_number (CallsBestMatch *self,
const char *phone_number);
const char *calls_best_match_get_name (CallsBestMatch *self);
GLoadableIcon *calls_best_match_get_avatar (CallsBestMatch *self);
+const char *calls_best_match_get_primary_info (CallsBestMatch *self);
+const char *calls_best_match_get_secondary_info (CallsBestMatch *self);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]