base-call: no need to delete call info from the device

Call information only lives in the ModemManager logic, there is no
associated date stored within the device itself. Therefore, simplify
everything by assuming there is nothing to remove.

Looks like this logic was implemented because it was originally based
on the SMS management logic, but for SMS we do have to remove
them (the stored PDU parts) from the device.
This commit is contained in:
Aleksander Morgado
2018-06-14 12:19:26 +02:00
committed by Dan Williams
parent 9503af95e2
commit 60d42de68e
5 changed files with 30 additions and 175 deletions

View File

@@ -819,65 +819,6 @@ call_send_dtmf (MMBaseCall *self,
/*****************************************************************************/
static void
call_delete (MMBaseCall *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
GTask *task;
task = g_task_new (self, NULL, callback, user_data);
g_task_return_boolean (task, TRUE);
g_object_unref (task);
}
static gboolean
call_delete_finish (MMBaseCall *self,
GAsyncResult *res,
GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
/*****************************************************************************/
gboolean
mm_base_call_delete_finish (MMBaseCall *self,
GAsyncResult *res,
GError **error)
{
if (MM_BASE_CALL_GET_CLASS (self)->delete_finish) {
gboolean deleted;
deleted = MM_BASE_CALL_GET_CLASS (self)->delete_finish (self, res, error);
if (deleted)
/* We do change the state of this call back to UNKNOWN */
mm_base_call_change_state (self, MM_CALL_STATE_UNKNOWN, MM_CALL_STATE_REASON_UNKNOWN);
return deleted;
}
return g_task_propagate_boolean (G_TASK (res), error);
}
void
mm_base_call_delete (MMBaseCall *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
if (MM_BASE_CALL_GET_CLASS (self)->delete &&
MM_BASE_CALL_GET_CLASS (self)->delete_finish) {
MM_BASE_CALL_GET_CLASS (self)->delete (self, callback, user_data);
return;
}
g_task_report_new_error (self, callback, user_data, mm_base_call_delete,
MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
"Deleting call is not supported by this modem");
}
/*****************************************************************************/
MMBaseCall *
mm_base_call_new (MMBaseModem *modem)
{
@@ -1053,8 +994,6 @@ mm_base_call_class_init (MMBaseCallClass *klass)
klass->accept_finish = call_accept_finish;
klass->hangup = call_hangup;
klass->hangup_finish = call_hangup_finish;
klass->delete = call_delete;
klass->delete_finish = call_delete_finish;
klass->send_dtmf = call_send_dtmf;
klass->send_dtmf_finish = call_send_dtmf_finish;

View File

@@ -79,14 +79,6 @@ struct _MMBaseCallClass {
gboolean (* send_dtmf_finish) (MMBaseCall *self,
GAsyncResult *res,
GError **error);
/* Delete the call */
void (* delete) (MMBaseCall *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* delete_finish) (MMBaseCall *self,
GAsyncResult *res,
GError **error);
};
GType mm_base_call_get_type (void);
@@ -106,11 +98,4 @@ void mm_base_call_change_state (MMBaseCall *self,
void mm_base_call_received_dtmf (MMBaseCall *self,
const gchar *dtmf);
void mm_base_call_delete (MMBaseCall *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_base_call_delete_finish (MMBaseCall *self,
GAsyncResult *res,
GError **error);
#endif /* MM_BASE_CALL_H */

View File

@@ -207,14 +207,6 @@ mm_call_list_send_dtmf_to_active_calls (MMCallList *self,
/*****************************************************************************/
gboolean
mm_call_list_delete_call_finish (MMCallList *self,
GAsyncResult *res,
GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
static guint
cmp_call_by_path (MMBaseCall *call,
const gchar *path)
@@ -222,78 +214,34 @@ cmp_call_by_path (MMBaseCall *call,
return g_strcmp0 (mm_base_call_get_path (call), path);
}
static void
delete_ready (MMBaseCall *call,
GAsyncResult *res,
GTask *task)
gboolean
mm_call_list_delete_call (MMCallList *self,
const gchar *call_path,
GError **error)
{
MMCallList *self;
const gchar *path;
GError *error = NULL;
GList *l;
self = g_task_get_source_object (task);
path = g_task_get_task_data (task);
if (!mm_base_call_delete_finish (call, res, &error)) {
/* We report the error */
g_task_return_error (task, error);
g_object_unref (task);
return;
}
/* The CALL was properly deleted, we now remove it from our list */
l = g_list_find_custom (self->priv->list,
path,
(GCompareFunc)cmp_call_by_path);
if (l) {
g_object_unref (MM_BASE_CALL (l->data));
self->priv->list = g_list_delete_link (self->priv->list, l);
}
/* We don't need to unref the CALL any more, but we can use the
* reference we got in the method, which is the one kept alive
* during the async operation. */
mm_base_call_unexport (call);
g_signal_emit (self,
signals[SIGNAL_CALL_DELETED], 0,
path);
g_task_return_boolean (task, TRUE);
g_object_unref (task);
}
void
mm_call_list_delete_call (MMCallList *self,
const gchar *call_path,
GAsyncReadyCallback callback,
gpointer user_data)
{
GList *l;
GTask *task;
GList *l;
MMBaseCall *call;
l = g_list_find_custom (self->priv->list,
(gpointer)call_path,
(GCompareFunc)cmp_call_by_path);
if (!l) {
g_task_report_new_error (self,
callback,
user_data,
mm_call_list_delete_call,
MM_CORE_ERROR,
MM_CORE_ERROR_NOT_FOUND,
"No CALL found with path '%s'",
call_path);
return;
g_set_error (error,
MM_CORE_ERROR,
MM_CORE_ERROR_NOT_FOUND,
"No call found with path '%s'",
call_path);
return FALSE;
}
/* Delete all CALL parts */
task = g_task_new (self, NULL, callback, user_data);
g_task_set_task_data (task, g_strdup (call_path), g_free);
call = MM_BASE_CALL (l->data);
mm_base_call_unexport (call);
g_signal_emit (self, signals[SIGNAL_CALL_DELETED], 0, call_path);
mm_base_call_delete (MM_BASE_CALL (l->data),
(GAsyncReadyCallback)delete_ready,
task);
g_object_unref (call);
self->priv->list = g_list_delete_link (self->priv->list, l);
return TRUE;
}
/*****************************************************************************/

View File

@@ -64,13 +64,9 @@ guint mm_call_list_get_count (MMCallList *self);
void mm_call_list_add_call (MMCallList *self,
MMBaseCall *call);
void mm_call_list_delete_call (MMCallList *self,
const gchar *call_path,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_call_list_delete_call_finish (MMCallList *self,
GAsyncResult *res,
GError **error);
gboolean mm_call_list_delete_call (MMCallList *self,
const gchar *call_path,
GError **error);
MMBaseCall *mm_call_list_get_new_incoming (MMCallList *self);
MMBaseCall *mm_call_list_get_first_ringing_call (MMCallList *self);

View File

@@ -229,21 +229,6 @@ handle_delete_context_free (HandleDeleteContext *ctx)
g_free (ctx);
}
static void
handle_delete_ready (MMCallList *list,
GAsyncResult *res,
HandleDeleteContext *ctx)
{
GError *error = NULL;
if (!mm_call_list_delete_call_finish (list, res, &error))
g_dbus_method_invocation_take_error (ctx->invocation, error);
else
mm_gdbus_modem_voice_complete_delete_call (ctx->skeleton, ctx->invocation);
handle_delete_context_free (ctx);
}
static void
handle_delete_auth_ready (MMBaseModem *self,
GAsyncResult *res,
@@ -267,7 +252,7 @@ handle_delete_auth_ready (MMBaseModem *self,
g_dbus_method_invocation_return_error (ctx->invocation,
MM_CORE_ERROR,
MM_CORE_ERROR_WRONG_STATE,
"Cannot delete CALL: device not yet enabled");
"Cannot delete call: device not yet enabled");
handle_delete_context_free (ctx);
return;
}
@@ -279,15 +264,17 @@ handle_delete_auth_ready (MMBaseModem *self,
g_dbus_method_invocation_return_error (ctx->invocation,
MM_CORE_ERROR,
MM_CORE_ERROR_WRONG_STATE,
"Cannot delete CALL: missing CALL list");
"Cannot delete call: missing call list");
handle_delete_context_free (ctx);
return;
}
mm_call_list_delete_call (list,
ctx->path,
(GAsyncReadyCallback)handle_delete_ready,
ctx);
if (!mm_call_list_delete_call (list, ctx->path, &error))
g_dbus_method_invocation_take_error (ctx->invocation, error);
else
mm_gdbus_modem_voice_complete_delete_call (ctx->skeleton, ctx->invocation);
handle_delete_context_free (ctx);
g_object_unref (list);
}