mail_op = modest_mail_operation_new (NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
- modest_mail_operation_sync_folder (mail_op, folder, FALSE);
+ modest_mail_operation_sync_folder (mail_op, folder, FALSE, NULL, NULL);
g_object_unref (mail_op);
}
g_object_unref (header);
mail_op = modest_mail_operation_new (NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
- modest_mail_operation_sync_folder (mail_op, TNY_FOLDER (folder_store), FALSE);
+ modest_mail_operation_sync_folder (mail_op, TNY_FOLDER (folder_store), FALSE, NULL, NULL);
g_object_unref (mail_op);
g_object_unref (folder_store);
}
mail_op = modest_mail_operation_new (NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
- modest_mail_operation_sync_folder (mail_op, folder, FALSE);
+ modest_mail_operation_sync_folder (mail_op, folder, FALSE, NULL, NULL);
g_object_unref (mail_op);
g_object_unref (folder);
}
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);
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
TnyFolder *new_folder,
gpointer user_data);
+/**
+ * SyncFolderCallback:
+ *
+ * @self: a #ModestMailOperation
+ * @folder: the #TnyFolder to sync
+ * @user_data: generic data passed to user defined function.
+ *
+ * This is the callback of the sync_folder operation.
+ */
+typedef void (*SyncFolderCallback) (ModestMailOperation *self,
+ TnyFolder *folder,
+ gpointer user_data);
+
+
/* This struct represents the internal state of a mail operation in a
given time */
typedef struct {
* running while we do that sync operation.
*/
void modest_mail_operation_sync_folder (ModestMailOperation *self,
- TnyFolder *folder, gboolean expunge);
+ TnyFolder *folder,
+ gboolean expunge,
+ SyncFolderCallback callback,
+ gpointer user_data);
/**
* modest_mail_operation_shutdown:
}
static void
-sync_folder_cb (TnyFolder *folder,
- gboolean cancelled,
- GError *err,
+sync_folder_cb (ModestMailOperation *mail_op,
+ TnyFolder *folder,
gpointer user_data)
{
ModestHeaderView *header_view = (ModestHeaderView *) user_data;
- tny_folder_refresh_async (folder, NULL, NULL, NULL);
- /* ModestWindow *parent = (ModestWindow *) gtk_widget_get_ancestor ((GtkWidget *) user_data, GTK_TYPE_WINDOW); */
+ if (modest_mail_operation_get_status (mail_op) == MODEST_MAIL_OPERATION_STATUS_SUCCESS) {
+ ModestWindow *parent = (ModestWindow *) modest_mail_operation_get_source (mail_op);
- /* We must clear first, because otherwise set_folder will ignore
- the change as the folders are the same */
- /* modest_header_view_clear (header_view); */
- /* modest_header_view_set_folder (header_view, folder, TRUE, parent, NULL, NULL); */
+ /* We must clear first, because otherwise set_folder will ignore */
+ /* the change as the folders are the same */
+ modest_header_view_clear (header_view);
+ modest_header_view_set_folder (header_view, folder, TRUE, parent, NULL, NULL);
+
+ g_object_unref (parent);
+ }
g_object_unref (header_view);
}
TnyFolder *folder = modest_header_view_get_folder (header_view);
if (folder) {
/* Sync the folder status */
- tny_folder_sync_async (folder, TRUE, sync_folder_cb, NULL, g_object_ref (header_view));
+ ModestMailOperation *mail_op = modest_mail_operation_new (source);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
+ modest_mail_operation_sync_folder (mail_op, folder, FALSE, sync_folder_cb, g_object_ref (header_view));
g_object_unref (folder);
+ g_object_unref (mail_op);
}
}