+GObject *
+modest_mail_operation_get_source (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+
+ g_return_val_if_fail (self, NULL);
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+ if (!priv) {
+ g_warning ("BUG: %s: priv == NULL", __FUNCTION__);
+ return NULL;
+ }
+
+ return g_object_ref (priv->source);
+}
+
+ModestMailOperationStatus
+modest_mail_operation_get_status (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+
+ g_return_val_if_fail (self, MODEST_MAIL_OPERATION_STATUS_INVALID);
+ g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self),
+ MODEST_MAIL_OPERATION_STATUS_INVALID);
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+ if (!priv) {
+ g_warning ("BUG: %s: priv == NULL", __FUNCTION__);
+ return MODEST_MAIL_OPERATION_STATUS_INVALID;
+ }
+
+ return priv->status;
+}
+
+const GError *
+modest_mail_operation_get_error (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+
+ g_return_val_if_fail (self, NULL);
+ g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self), NULL);
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+
+ if (!priv) {
+ g_warning ("BUG: %s: priv == NULL", __FUNCTION__);
+ return NULL;
+ }
+
+ return priv->error;
+}
+
+gboolean
+modest_mail_operation_cancel (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+
+ if (!MODEST_IS_MAIL_OPERATION (self)) {
+ g_warning ("%s: invalid parametter", G_GNUC_FUNCTION);
+ return FALSE;
+ }
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+ if (!priv) {
+ g_warning ("BUG: %s: priv == NULL", __FUNCTION__);
+ return FALSE;
+ }
+
+ did_a_cancel = TRUE;
+
+ /* Set new status */
+ priv->status = MODEST_MAIL_OPERATION_STATUS_CANCELED;
+
+ /* This emits progress-changed on which the mail operation queue is
+ * listening, so the mail operation is correctly removed from the
+ * queue without further explicit calls. */
+ modest_mail_operation_notify_end (self);
+
+ return TRUE;
+}
+
+guint
+modest_mail_operation_get_task_done (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self), 0);
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+ return priv->done;
+}
+
+guint
+modest_mail_operation_get_task_total (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self), 0);
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+ return priv->total;
+}
+
+gboolean
+modest_mail_operation_is_finished (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+ gboolean retval = FALSE;
+
+ if (!MODEST_IS_MAIL_OPERATION (self)) {
+ g_warning ("%s: invalid parametter", G_GNUC_FUNCTION);
+ return retval;
+ }
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+
+ if (priv->status == MODEST_MAIL_OPERATION_STATUS_SUCCESS ||
+ priv->status == MODEST_MAIL_OPERATION_STATUS_FAILED ||
+ priv->status == MODEST_MAIL_OPERATION_STATUS_CANCELED ||
+ priv->status == MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS) {
+ retval = TRUE;
+ } else {
+ retval = FALSE;
+ }
+
+ return retval;
+}
+
+guint
+modest_mail_operation_get_id (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self), 0);
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+ return priv->done;
+}
+
+guint
+modest_mail_operation_set_id (ModestMailOperation *self,
+ guint id)
+{
+ ModestMailOperationPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self), 0);
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+ return priv->done;
+}
+
+/*
+ * Creates an image of the current state of a mail operation, the
+ * caller must free it
+ */
+static ModestMailOperationState *
+modest_mail_operation_clone_state (ModestMailOperation *self)
+{
+ ModestMailOperationState *state;
+ ModestMailOperationPrivate *priv;
+
+ /* FIXME: this should be fixed properly
+ *
+ * in some cases, priv was NULL, so checking here to
+ * make sure.
+ */
+ g_return_val_if_fail (self, NULL);
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+ g_return_val_if_fail (priv, NULL);
+
+ if (!priv)
+ return NULL;
+
+ state = g_slice_new (ModestMailOperationState);
+
+ state->status = priv->status;
+ state->op_type = priv->op_type;
+ state->done = priv->done;
+ state->total = priv->total;
+ state->finished = modest_mail_operation_is_finished (self);
+ state->bytes_done = 0;
+ state->bytes_total = 0;
+
+ return state;
+}
+
+/* ******************************************************************* */
+/* ************************** SEND ACTIONS ************************* */
+/* ******************************************************************* */