typedef struct _ModestMailOperationPrivate ModestMailOperationPrivate;
struct _ModestMailOperationPrivate {
TnyAccount *account;
+ gchar *account_name;
guint done;
guint total;
GObject *source;
typedef struct _GetMsgAsyncHelper {
ModestMailOperation *mail_op;
GetMsgAsyncUserCallback user_callback;
- guint pending_ops;
gpointer user_data;
} GetMsgAsyncHelper;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(obj);
+
+
if (priv->error) {
g_error_free (priv->error);
priv->error = NULL;
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);
if (draft_msg != NULL) {
header = tny_msg_get_header (draft_msg);
+ /* Remove the old draft expunging it */
tny_folder_remove_msg (folder, header, NULL);
+ tny_folder_sync (folder, TRUE, NULL);
g_object_unref (header);
}
gint max_size;
gint retrieve_limit;
gchar *retrieve_type;
+ gchar *account_name;
} UpdateAccountInfo;
/***** I N T E R N A L F O L D E R O B S E R V E R *****/
state = modest_mail_operation_clone_state (mail_op);
g_signal_emit (G_OBJECT (mail_op), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL);
g_slice_free (ModestMailOperationState, state);
-
+
return TRUE;
}
ModestMailOperationPrivate *priv = NULL;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(mail_op);
-
+
modest_mail_operation_notify_end (mail_op);
g_object_unref (mail_op);
ModestMailOperationPrivate *priv;
ModestTnySendQueue *send_queue;
-
info = (UpdateAccountInfo *) thr_user_data;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(info->mail_op);
/* Notify about operation end. Note that the info could be
freed before this idle happens, but the mail operation will
be still alive */
- g_idle_add (notify_update_account_queue, info->mail_op);
-
+ g_idle_add (notify_update_account_queue, g_object_ref (info->mail_op));
+
/* Frees */
g_object_unref (query);
g_object_unref (all_folders);
/* printf ("DEBUG: %s: info->retrieve_limit = %d\n", __FUNCTION__, info->retrieve_limit); */
+ /* Set account busy */
+ modest_account_mgr_set_account_busy(mgr, account_name, TRUE);
+ priv->account_name = g_strdup(account_name);
+
thread = g_thread_create (update_account_thread, info, FALSE, NULL);
return TRUE;
helper = g_slice_new0 (GetMsgAsyncHelper);
helper->mail_op = self;
helper->user_callback = user_callback;
- helper->pending_ops = 1;
helper->user_data = user_data;
tny_folder_get_msg_async (folder, header, get_msg_cb, get_msg_status_cb, helper);
self = helper->mail_op;
g_return_if_fail (MODEST_IS_MAIL_OPERATION(self));
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
-
- helper->pending_ops--;
/* Check errors and cancel */
if (*error) {
helper->user_callback (self, NULL, msg, helper->user_data);
}
- /* Free */
out:
- if (helper->pending_ops == 0) {
- g_slice_free (GetMsgAsyncHelper, helper);
+ /* Free */
+ g_slice_free (GetMsgAsyncHelper, helper);
- /* Notify about operation end */
- modest_mail_operation_notify_end (self);
- }
+ /* Notify about operation end */
+ modest_mail_operation_notify_end (self);
}
static void
priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
/* Notify about operation end */
- g_idle_add (notify_update_account_queue, info->mail_op);
+ g_idle_add (notify_update_account_queue, g_object_ref (info->mail_op));
/* Free thread resources. Will be called after all previous idles */
g_idle_add_full (G_PRIORITY_DEFAULT_IDLE + 1, get_msgs_full_destroyer, info, NULL);
modest_mail_operation_notify_end (ModestMailOperation *self)
{
ModestMailOperationState *state;
+ ModestMailOperationPrivate *priv = NULL;
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+
+ /* Set the account back to not busy */
+ if (priv->account_name)
+ {
+ modest_account_mgr_set_account_busy(modest_runtime_get_account_mgr(), priv->account_name,
+ FALSE);
+ g_free(priv->account_name);
+ priv->account_name = NULL;
+ }
+
/* Notify the observers about the mail opertation end */
state = modest_mail_operation_clone_state (self);
g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL);