* fixes NB#75530
[modest] / src / modest-mail-operation.h
1 /* Copyright (c) 2006, Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #ifndef __MODEST_MAIL_OPERATION_H__
31 #define __MODEST_MAIL_OPERATION_H__
32
33 #include <tny-transport-account.h>
34 #include <tny-folder-store.h>
35 #include <widgets/modest-msg-edit-window.h>
36
37 G_BEGIN_DECLS
38
39 /* convenience macros */
40 #define MODEST_TYPE_MAIL_OPERATION             (modest_mail_operation_get_type())
41 #define MODEST_MAIL_OPERATION(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_MAIL_OPERATION,ModestMailOperation))
42 #define MODEST_MAIL_OPERATION_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_MAIL_OPERATION,GObject))
43 #define MODEST_IS_MAIL_OPERATION(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_MAIL_OPERATION))
44 #define MODEST_IS_MAIL_OPERATION_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_MAIL_OPERATION))
45 #define MODEST_MAIL_OPERATION_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_MAIL_OPERATION,ModestMailOperationClass))
46
47 typedef struct _ModestMailOperation      ModestMailOperation;
48 typedef struct _ModestMailOperationClass ModestMailOperationClass;
49
50 /**
51  * ModestMailOperationStatus:
52  *
53  * The state of a mail operation
54  */
55 typedef enum _ModestMailOperationStatus {
56         MODEST_MAIL_OPERATION_STATUS_INVALID,
57         MODEST_MAIL_OPERATION_STATUS_SUCCESS,
58         MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS,
59         MODEST_MAIL_OPERATION_STATUS_FAILED,
60         MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS,
61         MODEST_MAIL_OPERATION_STATUS_CANCELED
62 } ModestMailOperationStatus;
63
64 /**
65  * ModestMailOperationId:
66  *
67  * The id for identifying the type of mail operation
68  */
69 typedef enum {
70         MODEST_MAIL_OPERATION_TYPE_SEND,
71         MODEST_MAIL_OPERATION_TYPE_RECEIVE,
72         MODEST_MAIL_OPERATION_TYPE_OPEN,
73         MODEST_MAIL_OPERATION_TYPE_DELETE,
74         MODEST_MAIL_OPERATION_TYPE_INFO,
75         MODEST_MAIL_OPERATION_TYPE_UNKNOWN,
76 } ModestMailOperationTypeOperation;
77
78 /**
79  * ErrorCheckingUserCallback:
80  *
81  * @mail_op: the current mail operation.
82  * @user_data: generic data passed to user defined function.
83  *
84  * This function implements required actions to performs under error
85  * states.  
86  */
87 typedef void (*ErrorCheckingUserCallback) (ModestMailOperation *mail_op, gpointer user_data);
88
89 /**
90  * ErrorCheckingUserDataDestroyer:
91  *
92  * @user_data: generic data passed to user defined function.
93  *
94  * This function is used to destroy the user_data passed to the error
95  * checking user callback function
96  */
97 typedef void (*ErrorCheckingUserDataDestroyer) (gpointer user_data);
98
99
100 /**
101  * GetMsgAsyncUserCallback:
102  *
103  * @mail_op: the current #ModestMailOperation.
104  * @header: a #TnyHeader summary item.
105  * @msg: a #TnyMsg message retrieved by async operation.
106  * @user_data: generic data passed to user defined function.
107  *
108  * This function will be called after get_msg_cb private function, which is
109  * used as tinymail operation callback. The private function fills private 
110  * fields of mail operation and calls user defined callback if it exists.
111  */
112 typedef void (*GetMsgAsyncUserCallback) (ModestMailOperation *mail_op, 
113                                          TnyHeader *header, 
114                                          TnyMsg *msg, 
115                                          gpointer user_data);
116
117 /**
118  * GetMimePartSizeCallback:
119  *
120  * @mail_op: the current #ModestMailOperation.
121  * @size: size of the attachment
122  * @user_data: generic data passed to user defined function.
123  *
124  */
125 typedef void (*GetMimePartSizeCallback) (ModestMailOperation *mail_op, 
126                                          gssize size,
127                                          gpointer user_data);
128
129 /**
130  * XferAsyncUserCallback:
131  *
132  * @obj: a #GObject generic object which has created current mail operation.
133  * @user_data: generic data passed to user defined function.
134  *
135  * This function will be called after transfer_msgs_cb private function, which is
136  * used as tinymail operation callback. The private function fills private 
137  * fields of mail operation and calls user defined callback if it exists.
138  */
139 typedef void (*XferAsyncUserCallback) (ModestMailOperation *mail_op, gpointer user_data);
140
141
142 /**
143  * RefreshAsyncUserCallback:
144  *
145  * @mail_op: the current #ModestMailOperation.
146  * @folder: a #TnyFolder which has been refreshed .
147  * @user_data: generic data passed to user defined function.
148  *
149  * This function will be called after refresh_folder_async_cb private function, which is
150  * used as tinymail operation callback. The private function fills private 
151  * fields of mail operation and calls user defined callback if it exists.
152  */
153 typedef void (*RefreshAsyncUserCallback) (ModestMailOperation *mail_op, 
154                                           TnyFolder *folder, 
155                                           gpointer user_data);
156
157 /**
158  * UpdateAccountCallback:
159  *
160  * @self: a #ModestMailOperation
161  * @new_headers: the list of new headers received
162  * @user_data: generic data passed to user defined function.
163  *
164  * This is the callback of the update_account operation. It informs
165  * the caller about the amount of new messages that have been
166  * downloaded
167  */
168 typedef void (*UpdateAccountCallback) (ModestMailOperation *self, 
169                                        TnyList *new_headers,
170                                        gpointer user_data);
171
172
173 /**
174  * SaveToDraftsCallback:
175  *
176  * @self: a #ModestMailOperation
177  * @saved_draft: the new draft message that has been saved
178  * @user_data: generic data passed to user defined function.
179  *
180  * This is the callback of the save_to_drafts operation. It returns
181  * the newly created msg stored in the Drafts folder
182  */
183 typedef void (*SaveToDraftstCallback) (ModestMailOperation *self, 
184                                        TnyMsg *saved_draft,
185                                        gpointer user_data);
186
187
188 /* This struct represents the internal state of a mail operation in a
189    given time */
190 typedef struct {
191         guint      done;
192         guint      total;
193         gdouble    bytes_done;
194         gdouble    bytes_total;
195         gboolean   finished;
196         ModestMailOperationStatus        status;
197         ModestMailOperationTypeOperation op_type;
198 } ModestMailOperationState;
199
200
201 struct _ModestMailOperation {
202          GObject parent;
203         /* insert public members, if any */
204 };
205
206 struct _ModestMailOperationClass {
207         GObjectClass parent_class;
208
209         /* Signals */
210         void (*progress_changed) (ModestMailOperation *self, ModestMailOperationState *state, gpointer user_data);
211         void (*operation_started) (ModestMailOperation *self, gpointer user_data);
212         void (*operation_finished) (ModestMailOperation *self, gpointer user_data);
213 };
214
215 /* member functions */
216 GType        modest_mail_operation_get_type    (void) G_GNUC_CONST;
217
218 /**
219  * modest_mail_operation_new:
220  * @source: a #GObject which creates this new operation.
221  * 
222  * Creates a new instance of class #ModestMailOperation, using parameters
223  * to initialize its private structure. @source parameter may be NULL.
224  **/
225 ModestMailOperation*    modest_mail_operation_new     (GObject *source);
226
227 /**
228  * modest_mail_operation_new_with_error_handling:
229  * @id: a #ModestMailOperationId identification of operation type.
230  * @source: a #GObject which creates this new operation.
231  * @error_handler: a #ErrorCheckingUserCallback function to performs operations when 
232  * an error occurs.
233  * 
234  * Creates a new instance of class #ModestMailOperation, using parameters
235  * to initialize its private structure. @source parameter may be NULL. 
236  * @error_handler can not be NULL, but it will be returned an mail operation
237  * object without error handling capability.
238  **/
239 ModestMailOperation*    modest_mail_operation_new_with_error_handling     (GObject *source,
240                                                                            ErrorCheckingUserCallback error_handler,
241                                                                            gpointer user_data,
242                                                                            ErrorCheckingUserDataDestroyer error_handler_destroyer);
243 /**
244  * modest_mail_operation_execute_error_handler
245  * @self: a #ModestMailOperation
246  * 
247  * Executes error handler if exists. The error handler is the one that
248  * MUST free the user data passed to the
249  * modest_mail_operation_new_with_error_handling constructor
250  **/
251 void
252 modest_mail_operation_execute_error_handler (ModestMailOperation *self);
253
254 /**
255  * modest_mail_operation_get_type_operation
256  * @self: a #ModestMailOperation
257  * 
258  * Gets the private op_type field of mail operation. This op_type
259  * identifies the class/type of mail operation.
260  **/
261 ModestMailOperationTypeOperation
262 modest_mail_operation_get_type_operation (ModestMailOperation *self);
263
264 /**
265  * modest_mail_operation_is_mine
266  * @self: a #ModestMailOperation
267  * @source: a #GObject to check if it have created @self operation.
268  * 
269  * Check if @source object its owner of @self mail operation.
270  *
271  * returns: TRUE if source its owner, FALSE otherwise.
272  **/
273 gboolean 
274 modest_mail_operation_is_mine (ModestMailOperation *self, 
275                                GObject *me);
276
277 /**
278  * modest_mail_operation_get_source
279  * @self: a #ModestMailOperation
280  *
281  * returns a new reference to the object that created the mail
282  * operation passed to the constructor, or NULL if none. The caller
283  * must free the new reference
284  **/
285 GObject *
286 modest_mail_operation_get_source (ModestMailOperation *self);
287
288 /* fill in other public functions, eg.: */
289
290 /**
291  * modest_mail_operation_send_mail:
292  * @self: a #ModestMailOperation
293  * @transport_account: a non-NULL #TnyTransportAccount
294  * @msg: a non-NULL #TnyMsg
295  * 
296  * Sends and already existing message using the provided
297  * #TnyTransportAccount. This operation is synchronous, so the
298  * #ModestMailOperation should not be added to any
299  * #ModestMailOperationQueue
300   **/
301 void    modest_mail_operation_send_mail       (ModestMailOperation *self,
302                                                TnyTransportAccount *transport_account,
303                                                TnyMsg* msg);
304
305 /**
306  * modest_mail_operation_send_new_mail:
307  * @self: a #ModestMailOperation
308  * @transport_account: a non-NULL #TnyTransportAccount
309  * @draft_msg: a #TnyMsg of the origin draft message, if any
310  * @from: the email address of the mail sender
311  * @to: a non-NULL email address of the mail receiver
312  * @cc: a comma-separated list of email addresses where to send a carbon copy
313  * @bcc: a comma-separated list of email addresses where to send a blind carbon copy
314  * @subject: the subject of the new mail
315  * @plain_body: the plain text body of the new mail.
316  * @html_body: the html version of the body of the new mail. If NULL, the mail will
317  *             be sent with the plain body only.
318  * @attachments_list: a #GList of attachments, each attachment must be a #TnyMimePart
319  * @images_list: a #GList of image attachments, each attachment must be a #TnyMimePart
320  * 
321  * Sends a new mail message using the provided
322  * #TnyTransportAccount. This operation is synchronous, so the
323  * #ModestMailOperation should not be added to any
324  * #ModestMailOperationQueue
325   **/
326 void    modest_mail_operation_send_new_mail   (ModestMailOperation *self,
327                                                TnyTransportAccount *transport_account,
328                                                TnyMsg *draft_msg,
329                                                const gchar *from,
330                                                const gchar *to,
331                                                const gchar *cc,
332                                                const gchar *bcc,
333                                                const gchar *subject,
334                                                const gchar *plain_body,
335                                                const gchar *html_body,
336                                                const GList *attachments_list,
337                                                const GList *images_list,
338                                                TnyHeaderFlags priority_flags);
339
340
341 /**
342  * modest_mail_operation_save_to_drafts:
343  * @self: a #ModestMailOperation
344  * @transport_account: a non-NULL #TnyTransportAccount
345  * @draft_msg: the previous draft message, in case it's an update
346  * to an existing draft.
347  * @from: the email address of the mail sender
348  * @to: a non-NULL email address of the mail receiver
349  * @cc: a comma-separated list of email addresses where to send a carbon copy
350  * @bcc: a comma-separated list of email addresses where to send a blind carbon copy
351  * @subject: the subject of the new mail
352  * @plain_body: the plain text body of the new mail.
353  * @html_body: the html version of the body of the new mail. If NULL, the mail will
354  *             be sent with the plain body only.
355  * @attachments_list: a #GList of attachments, each attachment must be a #TnyMimePart
356  * @images_list: a #GList of image attachments, each attachment must be a #TnyMimePart
357  * @callback: the user callback, will be called when the operation finishes
358  * @user_data: data that will be passed to the user callback
359  *
360  * Save a mail message to drafts using the provided
361  * #TnyTransportAccount. This operation is asynchronous.
362  *
363   **/
364 void modest_mail_operation_save_to_drafts   (ModestMailOperation *self,
365                                              TnyTransportAccount *transport_account,
366                                              TnyMsg *draft_msg,
367                                              const gchar *from,
368                                              const gchar *to,
369                                              const gchar *cc,
370                                              const gchar *bcc,
371                                              const gchar *subject,
372                                              const gchar *plain_body,
373                                              const gchar *html_body,
374                                              const GList *attachments_list,
375                                              const GList *images_list,
376                                              TnyHeaderFlags priority_flags,
377                                              SaveToDraftstCallback callback,
378                                              gpointer user_data);
379 /**
380  * modest_mail_operation_update_account:
381  * @self: a #ModestMailOperation
382  * @account_name: the id of a Modest account
383  * 
384  * Asynchronously refreshes the root folders of the given store
385  * account. The caller should add the #ModestMailOperation to a
386  * #ModestMailOperationQueue and then free it. The caller will be
387  * notified by the "progress_changed" signal each time the progress of
388  * the operation changes.
389  *
390  * Example
391  * <informalexample><programlisting>
392  * queue = modest_tny_platform_factory_get_modest_mail_operation_queue_instance (fact)
393  * mail_op = modest_mail_operation_new ();
394  * g_signal_connect (G_OBJECT (mail_op), "progress_changed", G_CALLBACK(on_progress_changed), NULL);
395  * modest_mail_operation_queue_add (queue, mail_op);
396  * modest_mail_operation_update_account (mail_op, account_name)
397  * g_object_unref (G_OBJECT (mail_op));
398  * </programlisting></informalexample>
399  *
400  * Note that the account_name *MUST* be a modest account name, not a
401  * tinymail store account name
402  * 
403  * Returns: TRUE if the mail operation could be started, or FALSE otherwise
404  **/
405 gboolean      modest_mail_operation_update_account (ModestMailOperation *self,
406                                                     const gchar *account_name,
407                                                     UpdateAccountCallback callback,
408                                                     gpointer user_data);
409
410 /* Functions that perform store operations */
411
412 /**
413  * modest_mail_operation_create_folder:
414  * @self: a #ModestMailOperation
415  * @parent: the #TnyFolderStore which is the parent of the new folder
416  * @name: the non-NULL new name for the new folder
417  * 
418  * Creates a new folder as a children of a existing one. If the store
419  * account supports subscriptions this method also sets the new folder
420  * as subscribed. This operation is synchronous, so the
421  * #ModestMailOperation should not be added to any
422  * #ModestMailOperationQueue
423  * 
424  * Returns: a newly created #TnyFolder or NULL in case of error.
425  **/
426 TnyFolder*    modest_mail_operation_create_folder  (ModestMailOperation *self,
427                                                     TnyFolderStore *parent,
428                                                     const gchar *name);
429
430 /**
431  * modest_mail_operation_remove_folder:
432  * @self: a #ModestMailOperation
433  * @folder: a #TnyFolder
434  * @remove_to_trash: TRUE to move it to trash or FALSE to delete
435  * permanently
436  * 
437  * Removes a folder. This operation is synchronous, so the
438  * #ModestMailOperation should not be added to any
439  * #ModestMailOperationQueue
440  **/
441 void          modest_mail_operation_remove_folder  (ModestMailOperation *self,
442                                                     TnyFolder *folder,
443                                                     gboolean remove_to_trash);
444
445 /**
446  * modest_mail_operation_rename_folder:
447  * @self: a #ModestMailOperation
448  * @folder: a #TnyFolder
449  * @name: a non-NULL name without "/"
450  * 
451  * Renames a given folder with the provided new name. This operation
452  * is synchronous, so the #ModestMailOperation should not be added to
453  * any #ModestMailOperationQueue
454  **/
455 void          modest_mail_operation_rename_folder  (ModestMailOperation *self,
456                                                     TnyFolder *folder, 
457                                                     const gchar *name);
458
459 /**
460  * modest_mail_operation_xfer_folder:
461  * @self: a #ModestMailOperation
462  * @folder: a #TnyFolder
463  * @parent: the new parent of the folder as #TnyFolderStore
464  * @delete_original: wheter or not delete the original folder
465  * @user_callback: a #XferAsyncUserCallback function to call after tinymail callback execution.
466  * @user_data: generic user data which will be passed to @user_callback function.
467  * 
468  * Sets the given @folder as child of a provided #TnyFolderStore. This
469  * operation also transfers all the messages contained in the folder
470  * and all of his children folders with their messages as well. This
471  * operation is synchronous, so the #ModestMailOperation should not be
472  * added to any #ModestMailOperationQueue.
473  *
474  * If @delete_original is TRUE this function moves the original
475  * folder, if it is FALSE the it just copies it
476  *
477  **/
478 void          modest_mail_operation_xfer_folder    (ModestMailOperation *self,
479                                                     TnyFolder *folder,
480                                                     TnyFolderStore *parent,
481                                                     gboolean delete_original,
482                                                     XferAsyncUserCallback user_callback,
483                                                     gpointer user_data);
484                                                     
485
486 /* Functions that performs msg operations */
487
488 /**
489  * modest_mail_operation_xfer_msgs:
490  * @self: a #ModestMailOperation
491  * @header_list: a #TnyList of #TnyHeader to transfer
492  * @folder: the #TnyFolder where the messages will be transferred
493  * @delete_original: whether or not delete the source messages
494  * @user_callback: a #XferAsyncUserCallback function to call after tinymail callback execution.
495  * @user_data: generic user data which will be passed to @user_callback function.
496  * 
497  * Asynchronously transfers messages from their current folder to
498  * another one. The caller should add the #ModestMailOperation to a
499  * #ModestMailOperationQueue and then free it. The caller will be
500  * notified by the "progress_changed" when the operation is completed.
501  *
502  * If the @delete_original paramter is TRUE then this function moves
503  * the messages between folders, otherwise it copies them.
504  * 
505  * Example
506  * <informalexample><programlisting>
507  * queue = modest_tny_platform_factory_get_modest_mail_operation_queue_instance (fact);
508  * mail_op = modest_mail_operation_new ();
509  * modest_mail_operation_queue_add (queue, mail_op);
510  * g_signal_connect (G_OBJECT (mail_op), "progress_changed", G_CALLBACK(on_progress_changed), queue);
511  *
512  * modest_mail_operation_xfer_msg (mail_op, headers, folder, TRUE);
513  * 
514  * g_object_unref (G_OBJECT (mail_op));
515  * </programlisting></informalexample>
516  *
517  **/
518 void          modest_mail_operation_xfer_msgs      (ModestMailOperation *self,
519                                                     TnyList *header_list, 
520                                                     TnyFolder *folder,
521                                                     gboolean delete_original,
522                                                     XferAsyncUserCallback user_callback,
523                                                     gpointer user_data);
524
525 /**
526  * modest_mail_operation_remove_msg:
527  * @self: a #ModestMailOperation
528  * @header: the #TnyHeader of the message to move
529  * @remove_to_trash: TRUE to move it to trash or FALSE to delete it
530  * permanently
531  * 
532  * Deletes a message. This operation is synchronous, so the
533  * #ModestMailOperation should not be added to any
534  * #ModestMailOperationQueue
535  **/
536 void          modest_mail_operation_remove_msg     (ModestMailOperation *self,
537                                                     TnyHeader *header,
538                                                     gboolean remove_to_trash);
539
540 /**
541  * modest_mail_operation_remove_msg:
542  * @self: a #ModestMailOperation
543  * @headers: the #TnyList of the messages to delete
544  * @remove_to_trash: TRUE to move it to trash or FALSE to delete it
545  * permanently
546  * 
547  * Deletes a list of messages. This operation is synchronous, so the
548  * #ModestMailOperation should not be added to any
549  * #ModestMailOperationQueue
550  **/
551 void          modest_mail_operation_remove_msgs     (ModestMailOperation *self,
552                                                      TnyList *headers,
553                                                      gboolean remove_to_trash);
554
555 /**
556  * modest_mail_operation_get_msg:
557  * @self: a #ModestMailOperation
558  * @header_list: the #TnyHeader of the message to get
559  * @user_callback: a #GetMsgAsyncUserCallback function to call after tinymail callback execution.
560  * @user_data: generic user data which will be passed to @user_callback function.
561  * 
562  * Gets a message from header using an user defined @callback function
563  * pased as argument. This operation is asynchronous, so the
564  * #ModestMailOperation should be added to #ModestMailOperationQueue
565  **/
566 void          modest_mail_operation_get_msg     (ModestMailOperation *self,
567                                                  TnyHeader *header, 
568                                                  GetMsgAsyncUserCallback user_callback,
569                                                  gpointer user_data);
570 /**
571  * modest_mail_operation_get_msgs_full:
572  * @self: a #ModestMailOperation
573  * @header_list: a #TnyList of #TnyHeader objects to get and process
574  * @user_callback: a #TnyGetMsgCallback function to call after tinymail operation execution.
575  * @user_data: user data passed to both, user_callback and update_status_callback.
576  * 
577  * Gets messages from headers list and process hem using @callback function
578  * pased as argument. This operation is asynchronous, so the
579  * #ModestMailOperation should be added to #ModestMailOperationQueue
580  **/
581 void          modest_mail_operation_get_msgs_full   (ModestMailOperation *self,
582                                                      TnyList *headers_list,
583                                                      GetMsgAsyncUserCallback user_callback,
584                                                      gpointer user_data,
585                                                      GDestroyNotify notify);
586
587 /* Functions to control mail operations */
588 /**
589  * modest_mail_operation_get_task_done:
590  * @self: a #ModestMailOperation
591  * 
592  * Gets the amount of work done for a given mail operation. This
593  * amount of work is an absolute value.
594  * 
595  * Returns: the amount of work completed
596  **/
597 guint     modest_mail_operation_get_task_done      (ModestMailOperation *self);
598
599 /**
600  * modest_mail_operation_get_task_total:
601  * @self: a #ModestMailOperation
602  * 
603  * Gets the total amount of work that must be done to complete a given
604  * mail operation. This amount of work is an absolute value.
605  * 
606  * Returns: the total required amount of work
607  **/
608 guint     modest_mail_operation_get_task_total     (ModestMailOperation *self);
609
610
611 /**
612  * modest_mail_operation_is_finished:
613  * @self: a #ModestMailOperation
614  * 
615  * Checks if the operation is finished. A #ModestMailOperation is
616  * finished if it's in any of the following states:
617  * MODEST_MAIL_OPERATION_STATUS_SUCCESS,
618  * MODEST_MAIL_OPERATION_STATUS_FAILED,
619  * MODEST_MAIL_OPERATION_STATUS_CANCELED or
620  * MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS
621  * 
622  * Returns: TRUE if the operation is finished, FALSE otherwise
623  **/
624 gboolean  modest_mail_operation_is_finished        (ModestMailOperation *self);
625
626 /**
627  * modest_mail_operation_is_finished:
628  * @self: a #ModestMailOperation
629  * 
630  * Gets the current status of the given mail operation
631  *
632  * Returns: the current status or MODEST_MAIL_OPERATION_STATUS_INVALID in case of error
633  **/
634 ModestMailOperationStatus modest_mail_operation_get_status  (ModestMailOperation *self);
635
636 /**
637  * modest_mail_operation_get_error:
638  * @self: a #ModestMailOperation
639  * 
640  * Gets the error associated to the mail operation if exists
641  * 
642  * Returns: the #GError associated to the #ModestMailOperation if it
643  * exists or NULL otherwise
644  **/
645 const GError*             modest_mail_operation_get_error   (ModestMailOperation *self);
646
647 /**
648  * modest_mail_operation_cancel:
649  * @self: a #ModestMailOperation
650  *
651  * Cancels an active mail operation
652  * 
653  * Returns: TRUE if the operation was succesfully canceled, FALSE otherwise
654  **/
655 gboolean  modest_mail_operation_cancel          (ModestMailOperation *self);
656
657 /**
658  * modest_mail_operation_refresh_folder
659  * @self: a #ModestMailOperation
660  * @folder: the #TnyFolder to refresh
661  * @user_callback: the #RefreshAsyncUserCallback function to be called
662  * after internal refresh async callback was being executed.
663  * 
664  * Refreshes the contents of a folder. After internal callback was executed, 
665  * and all interna mail operation field were filled, if exists, it calls an 
666  * user callback function to make UI operations which must be done after folder
667  * was refreshed.
668  */
669 void      modest_mail_operation_refresh_folder  (ModestMailOperation *self,
670                                                  TnyFolder *folder,
671                                                  RefreshAsyncUserCallback user_callback,
672                                                  gpointer user_data);
673
674 TnyAccount *modest_mail_operation_get_account   (ModestMailOperation *self);
675
676 G_END_DECLS
677
678 #endif /* __MODEST_MAIL_OPERATION_H__ */
679