ringer: Use CallsUiCallData instead of CallsCall
This will allow us to handle pre-ringing better.
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
|
||||
#include "calls-manager.h"
|
||||
#include "calls-ringer.h"
|
||||
#include "calls-ui-call-data.h"
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
#include <glib-object.h>
|
||||
@@ -285,11 +286,13 @@ restart (CallsRinger *self,
|
||||
|
||||
|
||||
static inline gboolean
|
||||
is_ring_state (CallsCallState state)
|
||||
is_ring_state (CuiCallState state)
|
||||
{
|
||||
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
|
||||
switch (state) {
|
||||
case CALLS_CALL_STATE_INCOMING:
|
||||
case CALLS_CALL_STATE_WAITING:
|
||||
case CUI_CALL_STATE_INCOMING:
|
||||
case CUI_CALL_STATE_WAITING:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
@@ -298,18 +301,19 @@ is_ring_state (CallsCallState state)
|
||||
|
||||
|
||||
static inline gboolean
|
||||
is_active_state (CallsCallState state)
|
||||
is_active_state (CuiCallState state)
|
||||
{
|
||||
switch (state) {
|
||||
case CALLS_CALL_STATE_ACTIVE:
|
||||
case CALLS_CALL_STATE_DIALING:
|
||||
case CALLS_CALL_STATE_ALERTING:
|
||||
case CALLS_CALL_STATE_HELD:
|
||||
case CUI_CALL_STATE_ACTIVE:
|
||||
case CUI_CALL_STATE_CALLING:
|
||||
case CUI_CALL_STATE_ALERTING:
|
||||
case CUI_CALL_STATE_HELD:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
#pragma GCC diagnostic warning "-Wdeprecated-declarations"
|
||||
|
||||
|
||||
static gboolean
|
||||
@@ -318,9 +322,9 @@ has_active_call (CallsRinger *self)
|
||||
g_assert (CALLS_IS_RINGER (self));
|
||||
|
||||
for (GList *node = self->calls; node != NULL; node = node->next) {
|
||||
CallsCall *call = node->data;
|
||||
CallsUiCallData *call = node->data;
|
||||
|
||||
if (is_active_state (calls_call_get_state (call)))
|
||||
if (is_active_state (cui_call_get_state (CUI_CALL (call))))
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
@@ -333,10 +337,10 @@ has_incoming_call (CallsRinger *self)
|
||||
g_assert (CALLS_IS_RINGER (self));
|
||||
|
||||
for (GList *node = self->calls; node != NULL; node = node->next) {
|
||||
CallsCall *call = node->data;
|
||||
CallsUiCallData *call = node->data;
|
||||
|
||||
if (is_ring_state (calls_call_get_state (call)) &&
|
||||
!calls_call_get_silenced (call))
|
||||
if (is_ring_state (cui_call_get_state (CUI_CALL (call))) &&
|
||||
!calls_ui_call_data_get_silenced (call))
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
@@ -361,11 +365,11 @@ update_ring (CallsRinger *self)
|
||||
|
||||
|
||||
static void
|
||||
call_added_cb (CallsRinger *self,
|
||||
CallsCall *call)
|
||||
call_added_cb (CallsRinger *self,
|
||||
CallsUiCallData *call)
|
||||
{
|
||||
g_assert (CALLS_IS_RINGER (self));
|
||||
g_assert (CALLS_IS_CALL (call));
|
||||
g_assert (CALLS_IS_UI_CALL_DATA (call));
|
||||
|
||||
self->calls = g_list_append (self->calls, call);
|
||||
|
||||
@@ -382,8 +386,8 @@ call_added_cb (CallsRinger *self,
|
||||
|
||||
|
||||
static void
|
||||
call_removed_cb (CallsRinger *self,
|
||||
CallsCall *call)
|
||||
call_removed_cb (CallsRinger *self,
|
||||
CallsUiCallData *call)
|
||||
{
|
||||
self->calls = g_list_remove (self->calls, call);
|
||||
|
||||
@@ -442,12 +446,12 @@ constructed (GObject *object)
|
||||
CallsRinger *self = CALLS_RINGER (object);
|
||||
|
||||
g_signal_connect_swapped (calls_manager_get_default (),
|
||||
"call-add",
|
||||
"ui-call-added",
|
||||
G_CALLBACK (call_added_cb),
|
||||
self);
|
||||
|
||||
g_signal_connect_swapped (calls_manager_get_default (),
|
||||
"call-remove",
|
||||
"ui-call-removed",
|
||||
G_CALLBACK (call_removed_cb),
|
||||
self);
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ enum {
|
||||
PROP_CAN_DTMF,
|
||||
PROP_AVATAR_ICON,
|
||||
PROP_ACTIVE_TIME,
|
||||
PROP_SILENCED,
|
||||
PROP_LAST_PROP
|
||||
};
|
||||
|
||||
@@ -64,6 +65,7 @@ struct _CallsUiCallData
|
||||
guint timer_id;
|
||||
|
||||
CuiCallState state;
|
||||
gboolean silenced;
|
||||
};
|
||||
|
||||
static void calls_ui_call_data_cui_call_interface_init (CuiCallInterface *iface);
|
||||
@@ -412,6 +414,9 @@ calls_ui_call_data_get_property (GObject *object,
|
||||
|
||||
case PROP_ACTIVE_TIME:
|
||||
g_value_set_double (value, self->active_time);
|
||||
|
||||
case PROP_SILENCED:
|
||||
g_value_set_boolean (value, calls_ui_call_data_get_silenced (self));
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -476,6 +481,15 @@ calls_ui_call_data_class_init (CallsUiCallDataClass *klass)
|
||||
|
||||
g_object_class_install_property (object_class, PROP_PROTOCOL, props[PROP_PROTOCOL]);
|
||||
|
||||
props[PROP_SILENCED] =
|
||||
g_param_spec_boolean ("silenced",
|
||||
"Silenced",
|
||||
"Whether the call ringing should be silenced",
|
||||
FALSE,
|
||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_property (object_class, PROP_SILENCED, props[PROP_SILENCED]);
|
||||
|
||||
g_object_class_override_property (object_class, PROP_ID, "id");
|
||||
props[PROP_ID] = g_object_class_find_property (object_class, "id");
|
||||
|
||||
@@ -531,6 +545,39 @@ calls_ui_call_data_get_call (CallsUiCallData *self)
|
||||
return self->call;
|
||||
}
|
||||
|
||||
/**
|
||||
* calls_ui_call_data_silence_ring:
|
||||
* @self: a #CallsUiCallData
|
||||
*
|
||||
* Inhibit ringing
|
||||
*/
|
||||
void
|
||||
calls_ui_call_data_silence_ring (CallsUiCallData *self)
|
||||
{
|
||||
g_return_if_fail (CALLS_IS_UI_CALL_DATA (self));
|
||||
g_return_if_fail (self->state == CUI_CALL_STATE_INCOMING);
|
||||
|
||||
if (self->silenced)
|
||||
return;
|
||||
|
||||
self->silenced = TRUE;
|
||||
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SILENCED]);
|
||||
}
|
||||
|
||||
/**
|
||||
* calls_ui_call_data_get_silenced:
|
||||
* @self: a #CallsUiCallData
|
||||
*
|
||||
* Returns: %TRUE if call has been silenced to not ring, %FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
calls_ui_call_data_get_silenced (CallsUiCallData *self)
|
||||
{
|
||||
g_return_val_if_fail (CALLS_IS_UI_CALL_DATA (self), FALSE);
|
||||
|
||||
return self->silenced;
|
||||
}
|
||||
|
||||
|
||||
CuiCallState
|
||||
calls_call_state_to_cui_call_state (CallsCallState state)
|
||||
@@ -552,4 +599,3 @@ calls_call_state_to_cui_call_state (CallsCallState state)
|
||||
return CUI_CALL_STATE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@ G_DECLARE_FINAL_TYPE (CallsUiCallData, calls_ui_call_data, CALLS, UI_CALL_DATA,
|
||||
|
||||
CallsUiCallData *calls_ui_call_data_new (CallsCall *call);
|
||||
CallsCall *calls_ui_call_data_get_call (CallsUiCallData *self);
|
||||
void calls_ui_call_data_silence_ring (CallsUiCallData *self);
|
||||
gboolean calls_ui_call_data_get_silenced (CallsUiCallData *self);
|
||||
CuiCallState calls_call_state_to_cui_call_state (CallsCallState state);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
Reference in New Issue
Block a user