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:
parent
3ac8cc1580
commit
7f40314810
2 changed files with 99 additions and 4 deletions
|
@ -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 "";
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue