gpointer user_data;
} XFerFolderAsyncHelper;
+typedef struct _SyncFolderHelper {
+ ModestMailOperation *mail_op;
+ SyncFolderCallback user_callback;
+ gpointer user_data;
+} SyncFolderHelper;
+
typedef void (*ModestMailOperationCreateMsgCallback) (ModestMailOperation *mail_op,
TnyMsg *msg,
gpointer userdata);
/* Call the user callback and free */
new_headers = tny_iterator_get_list (msg_info->more_msgs);
update_account_notify_user_and_free (info, new_headers);
- g_object_unref (new_headers);
/* Delete the helper */
g_object_unref (msg_info->more_msgs);
/* Get all folders and continue in the callback */
folders = tny_simple_list_new ();
tny_folder_store_get_folders_async (TNY_FOLDER_STORE (priv->account),
- folders, NULL, FALSE,
+ folders, NULL, TRUE,
recurse_folders_async_cb,
NULL, info);
g_object_unref (folders);
ModestMailOperation *self;
ModestMailOperationPrivate *priv;
ModestProtocolRegistry *protocol_registry;
+ SyncFolderHelper *helper;
self = (ModestMailOperation *) user_data;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
else
expunge = FALSE;
+ /* Create helper */
+ helper = g_slice_new0 (SyncFolderHelper);
+ helper->mail_op = g_object_ref (self);
+ helper->user_callback = NULL;
+ helper->user_data = NULL;
+
/* Sync folder */
- tny_folder_sync_async(folder, expunge, sync_folder_finish_callback,
- NULL, self);
+ tny_folder_sync_async(folder, expunge, sync_folder_finish_callback, NULL, helper);
+
+ /* Remove the extra reference */
+ g_object_unref (self);
}
void
}
static void
-sync_folder_finish_callback (TnyFolder *self,
- gboolean cancelled,
- GError *err,
+sync_folder_finish_callback (TnyFolder *self,
+ gboolean cancelled,
+ GError *err,
gpointer user_data)
{
- ModestMailOperation *mail_op;
ModestMailOperationPrivate *priv;
+ SyncFolderHelper *helper;
- mail_op = (ModestMailOperation *) user_data;
- priv = MODEST_MAIL_OPERATION_GET_PRIVATE (mail_op);
+ helper = (SyncFolderHelper *) user_data;
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE (helper->mail_op);
/* If canceled by the user, ignore the error given by Tinymail */
if (cancelled) {
priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
}
- modest_mail_operation_notify_end (mail_op);
- g_object_unref (mail_op);
+ /* User callback */
+ if (helper->user_callback)
+ helper->user_callback (helper->mail_op, self, helper->user_data);
+
+ modest_mail_operation_notify_end (helper->mail_op);
+
+ /* Frees */
+ g_object_unref (helper->mail_op);
+ g_slice_free (SyncFolderHelper, helper);
}
void
modest_mail_operation_sync_folder (ModestMailOperation *self,
- TnyFolder *folder, gboolean expunge)
+ TnyFolder *folder,
+ gboolean expunge,
+ SyncFolderCallback callback,
+ gpointer user_data)
{
ModestMailOperationPrivate *priv;
+ SyncFolderHelper *helper;
g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
g_return_if_fail (TNY_IS_FOLDER (folder));
priv->account = modest_tny_folder_get_account (folder);
priv->op_type = MODEST_MAIL_OPERATION_TYPE_SYNC_FOLDER;
+ /* Create helper */
+ helper = g_slice_new0 (SyncFolderHelper);
+ helper->mail_op = g_object_ref (self);
+ helper->user_callback = callback;
+ helper->user_data = user_data;
+
modest_mail_operation_notify_start (self);
- g_object_ref (self);
- tny_folder_sync_async (folder, expunge,
- (TnyFolderCallback) sync_folder_finish_callback,
- NULL, self);
+ tny_folder_sync_async (folder, expunge,
+ (TnyFolderCallback) sync_folder_finish_callback,
+ NULL, helper);
}
static void
switch (priv->op_type) {
case MODEST_MAIL_OPERATION_TYPE_SEND: type= "SEND"; break;
+ case MODEST_MAIL_OPERATION_TYPE_SEND_AND_RECEIVE: type= "SEND-AND-RECEIVE"; break;
case MODEST_MAIL_OPERATION_TYPE_RECEIVE: type= "RECEIVE"; break;
case MODEST_MAIL_OPERATION_TYPE_OPEN: type= "OPEN"; break;
case MODEST_MAIL_OPERATION_TYPE_DELETE: type= "DELETE"; break;
case MODEST_MAIL_OPERATION_TYPE_INFO: type= "INFO"; break;
case MODEST_MAIL_OPERATION_TYPE_RUN_QUEUE: type= "RUN-QUEUE"; break;
case MODEST_MAIL_OPERATION_TYPE_SYNC_FOLDER: type= "SYNC-FOLDER"; break;
+ case MODEST_MAIL_OPERATION_TYPE_SHUTDOWN: type= "SHUTDOWN"; break;
case MODEST_MAIL_OPERATION_TYPE_UNKNOWN: type= "UNKNOWN"; break;
default: type = "UNEXPECTED"; break;
}