1
0
Fork 0
mirror of https://gitlab.gnome.org/GNOME/calls.git synced 2024-11-17 07:46:03 +00:00

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.
This commit is contained in:
Evangelos Ribeiro Tzaras 2022-02-13 10:44:31 +01:00
parent 3ac8cc1580
commit 7f40314810
2 changed files with 99 additions and 4 deletions

View file

@ -53,6 +53,8 @@ enum {
PROP_AVATAR, PROP_AVATAR,
PROP_HAS_INDIVIDUAL, PROP_HAS_INDIVIDUAL,
PROP_COUNTRY_CODE, PROP_COUNTRY_CODE,
PROP_PRIMARY_INFO,
PROP_SECONDARY_INFO,
PROP_LAST_PROP, PROP_LAST_PROP,
}; };
static GParamSpec *props[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 static void
notify_name (CallsBestMatch *self) notify_name (CallsBestMatch *self)
{ {
g_assert (CALLS_IS_BEST_MATCH (self)); g_assert (CALLS_IS_BEST_MATCH (self));
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NAME]); 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)); calls_best_match_get_avatar (self));
break; 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: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break; break;
@ -263,6 +286,19 @@ calls_best_match_class_init (CallsBestMatchClass *klass)
G_TYPE_LOADABLE_ICON, G_TYPE_LOADABLE_ICON,
G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY); 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); 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); g_free (self->name_sip);
self->name_sip = g_strdup (split[1]); self->name_sip = g_strdup (split[1]);
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PHONE_NUMBER]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PHONE_NUMBER]);
notify_display_info (self);
return; return;
} }
query = calls_phone_number_query_new (phone_number, self->country_code); 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]); g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PHONE_NUMBER]);
notify_display_info (self);
} }
const char * const char *
@ -354,10 +392,8 @@ calls_best_match_get_name (CallsBestMatch *self)
return folks_individual_get_display_name (self->matched_individual); return folks_individual_get_display_name (self->matched_individual);
else if (self->name_sip) else if (self->name_sip)
return self->name_sip; return self->name_sip;
else if (self->phone_number)
return self->phone_number; return NULL;
else
return _("Anonymous caller");
} }
@ -371,3 +407,60 @@ calls_best_match_get_avatar (CallsBestMatch *self)
else else
return NULL; 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 "";
}

View file

@ -40,6 +40,8 @@ void calls_best_match_set_phone_number (CallsBestMatch *self,
const char *phone_number); const char *phone_number);
const char *calls_best_match_get_name (CallsBestMatch *self); const char *calls_best_match_get_name (CallsBestMatch *self);
GLoadableIcon *calls_best_match_get_avatar (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 G_END_DECLS