Changeset 2593

Show
Ignore:
Timestamp:
08/08/07 16:37:35
Author:
pvanhoof
Message:

2007-08-08 Philip Van Hoof <pvanhoof@gnome.org>

        • Code cleanups in TnyCamelSendQueue
        • Introduction of tny_folder_add_msg_async
        • Better handling of offline (because service is unavailable) cases
        • This was a major API change
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r2587 r2593  
    22 
    33        * Code cleanups in TnyCamelSendQueue 
     4        * Introduction of tny_folder_add_msg_async 
     5        * Better handling of offline (because service is unavailable) cases 
     6 
     7        * This was a major API change 
    48 
    592007-08-07  Philip Van Hoof  <pvanhoof@gnome.org> 
  • trunk/libtinymail-camel/tny-camel-account.c

    r2576 r2593  
    127127        g_slice_free (ReconInfo, info); 
    128128        return NULL; 
     129} 
     130 
     131static gboolean  
     132cancelled_refresh (gpointer user_data) 
     133{ 
     134        return FALSE; 
     135} 
     136 
     137static void  
     138cancelled_refresh_destroy (gpointer user_data) 
     139{ 
     140        ReconInfo *info = (ReconInfo *) user_data; 
     141        g_object_unref (info->self); 
     142        g_slice_free (ReconInfo, info); 
     143        return; 
    129144} 
    130145 
     
    217232 
    218233                        _tny_camel_queue_launch_wflags (aspriv->queue,  
    219                                 reconnect_thread, NULL, NULL, NULL, info, 
     234                                reconnect_thread, cancelled_refresh,  
     235                                cancelled_refresh_destroy, NULL, info, 
    220236                                TNY_CAMEL_QUEUE_RECONNECT_ITEM, 
    221237                                __FUNCTION__); 
  • trunk/libtinymail-camel/tny-camel-folder.c

    r2583 r2593  
    8686 
    8787 
     88 
     89 
     90/* When using a #GMainLoop this method will execute a callback using 
     91 * g_idle_add_full.  Note that without a #GMainLoop, the callbacks 
     92 * could happen in a worker thread (depends on who call it) at an 
     93 * unknown moment in time (check your locking in this case). */ 
     94 
     95static void 
     96execute_callback (gint depth,  
     97                  gint priority, 
     98                  GSourceFunc idle_func, 
     99                  gpointer data,  
     100                  GDestroyNotify destroy_func) 
     101{ 
     102        if (depth > 0){ 
     103                g_idle_add_full (priority, idle_func, data, destroy_func); 
     104        } else { 
     105                idle_func (data); 
     106                destroy_func (data); 
     107        } 
     108} 
     109 
     110 
    88111typedef struct {  
    89112        GObject *self; 
     
    627650        g_static_rec_mutex_unlock (priv->folder_lock); 
    628651} 
     652 
     653 
     654 
     655typedef struct  
     656{ 
     657        TnyFolder *self; 
     658        TnyFolderCallback callback; 
     659        TnyStatusCallback status_callback; 
     660        gpointer user_data; 
     661        TnyMsg *adding_msg; 
     662        gboolean cancelled; 
     663        TnyIdleStopper* stopper; 
     664        guint depth; 
     665        GError *err; 
     666        TnySessionCamel *session; 
     667 
     668        GCond* condition; 
     669        gboolean had_callback; 
     670        GMutex *mutex; 
     671 
     672} AddMsgFolderInfo; 
     673 
     674 
     675static void 
     676tny_camel_folder_add_msg_async_destroyer (gpointer thr_user_data) 
     677{ 
     678        AddMsgFolderInfo *info = thr_user_data; 
     679        TnyFolder *self = info->self; 
     680        TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 
     681 
     682        if (info->adding_msg) 
     683                g_object_unref (info->adding_msg); 
     684 
     685        /* thread reference */ 
     686        _tny_camel_folder_unreason (priv); 
     687        g_object_unref (self); 
     688 
     689        if (info->err) 
     690                g_error_free (info->err); 
     691 
     692        _tny_session_stop_operation (info->session); 
     693 
     694        tny_idle_stopper_destroy (info->stopper); 
     695        info->stopper = NULL; 
     696 
     697        if (info->condition) { 
     698                g_mutex_lock (info->mutex); 
     699                g_cond_broadcast (info->condition); 
     700                info->had_callback = TRUE; 
     701                g_mutex_unlock (info->mutex); 
     702        } 
     703 
     704        return; 
     705} 
     706 
     707static gboolean 
     708tny_camel_folder_add_msg_async_callback (gpointer thr_user_data) 
     709{ 
     710        AddMsgFolderInfo *info = thr_user_data; 
     711        TnyFolder *self = info->self; 
     712        TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 
     713        TnyFolderChange *change = tny_folder_change_new (self); 
     714 
     715        tny_folder_change_set_new_all_count (change, priv->cached_length); 
     716        tny_folder_change_set_new_unread_count (change, priv->unread_length); 
     717        notify_folder_observers_about (self, change); 
     718        g_object_unref (change); 
     719 
     720        if (info->callback) { 
     721                tny_lockable_lock (info->session->priv->ui_lock); 
     722                info->callback (info->self, info->cancelled, info->err, info->user_data); 
     723                tny_lockable_unlock (info->session->priv->ui_lock); 
     724        } 
     725 
     726        tny_idle_stopper_stop (info->stopper); 
     727 
     728        return FALSE; 
     729} 
     730 
     731 
     732static void 
     733tny_camel_folder_add_msg_async_status (struct _CamelOperation *op, const char *what, int sofar, int oftotal, void *thr_user_data) 
     734{ 
     735        AddMsgFolderInfo *oinfo = thr_user_data; 
     736        TnyProgressInfo *info = NULL; 
     737 
     738        info = tny_progress_info_new (G_OBJECT (oinfo->self), oinfo->status_callback,  
     739                TNY_FOLDER_STATUS, TNY_FOLDER_STATUS_CODE_XFER_MSGS, what, sofar,  
     740                oftotal, oinfo->stopper, oinfo->session->priv->ui_lock, oinfo->user_data); 
     741 
     742        execute_callback (oinfo->depth, G_PRIORITY_HIGH, 
     743                tny_progress_info_idle_func, info, 
     744                tny_progress_info_destroy); 
     745 
     746        return; 
     747} 
     748 
     749 
     750static gpointer  
     751tny_camel_folder_add_msg_async_thread (gpointer thr_user_data) 
     752{ 
     753        AddMsgFolderInfo *info = thr_user_data; 
     754        TnyFolder *self = info->self; 
     755        TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 
     756        TnyCamelAccountPriv *apriv = TNY_CAMEL_ACCOUNT_GET_PRIVATE (priv->account); 
     757        CamelException ex = CAMEL_EXCEPTION_INITIALISER; 
     758 
     759        g_static_rec_mutex_lock (priv->folder_lock); 
     760 
     761        _tny_camel_account_start_camel_operation (TNY_CAMEL_ACCOUNT (priv->account),  
     762                tny_camel_folder_add_msg_async_status, info,  
     763                "Adding message"); 
     764 
     765        tny_folder_add_msg (info->self, info->adding_msg, &info->err); 
     766 
     767        info->cancelled = FALSE; 
     768        if (info->err != NULL) { 
     769                if (strcasestr (info->err->message, "cancel") != NULL) 
     770                        info->cancelled = TRUE; 
     771        } 
     772 
     773        priv->cached_length = camel_folder_get_message_count (priv->folder); 
     774        priv->unread_length = (guint)camel_folder_get_unread_message_count (priv->folder); 
     775        update_iter_counts (priv); 
     776 
     777        _tny_camel_account_stop_camel_operation (TNY_CAMEL_ACCOUNT (priv->account)); 
     778 
     779        g_static_rec_mutex_unlock (priv->folder_lock); 
     780 
     781        info->mutex = g_mutex_new (); 
     782        info->condition = g_cond_new (); 
     783        info->had_callback = FALSE; 
     784 
     785        execute_callback (info->depth, G_PRIORITY_DEFAULT,  
     786                tny_camel_folder_add_msg_async_callback, info,  
     787                tny_camel_folder_add_msg_async_destroyer); 
     788 
     789 
     790        /* Wait on the queue for the mainloop callback to be finished */ 
     791        g_mutex_lock (info->mutex); 
     792        if (!info->had_callback) 
     793                g_cond_wait (info->condition, info->mutex); 
     794        g_mutex_unlock (info->mutex); 
     795 
     796        g_mutex_free (info->mutex); 
     797        g_cond_free (info->condition); 
     798 
     799        g_slice_free (AddMsgFolderInfo, thr_user_data); 
     800 
     801        return NULL; 
     802} 
     803 
     804static void 
     805tny_camel_folder_add_msg_async_cancelled_destroyer (gpointer thr_user_data) 
     806{ 
     807        AddMsgFolderInfo *info = thr_user_data; 
     808        TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (info->self); 
     809 
     810        if (info->adding_msg) 
     811                g_object_unref (info->adding_msg); 
     812 
     813        /* thread reference */ 
     814        _tny_camel_folder_unreason (priv); 
     815        g_object_unref (info->self); 
     816 
     817        if (info->err) 
     818                g_error_free (info->err); 
     819        g_slice_free (AddMsgFolderInfo, thr_user_data); 
     820        return; 
     821} 
     822 
     823static gboolean 
     824tny_camel_folder_add_msg_async_cancelled_callback (gpointer thr_user_data) 
     825{ 
     826        AddMsgFolderInfo *info = thr_user_data; 
     827        if (info->callback) { 
     828                tny_lockable_lock (info->session->priv->ui_lock); 
     829                info->callback (info->self, TRUE, info->err, info->user_data); 
     830                tny_lockable_unlock (info->session->priv->ui_lock); 
     831        } 
     832        return FALSE; 
     833} 
     834 
     835 
     836static void  
     837tny_camel_folder_add_msg_async (TnyFolder *self, TnyMsg *msg, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     838{ 
     839        TNY_CAMEL_FOLDER_GET_CLASS (self)->add_msg_async_func (self, msg, callback, status_callback, user_data); 
     840        return; 
     841} 
     842 
     843static void  
     844tny_camel_folder_add_msg_async_default (TnyFolder *self, TnyMsg *msg, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     845{ 
     846 
     847        AddMsgFolderInfo *info; 
     848        GError *err = NULL; 
     849        TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 
     850 
     851        /* Idle info for the callbacks */ 
     852        info = g_slice_new (AddMsgFolderInfo); 
     853        info->session = TNY_FOLDER_PRIV_GET_SESSION (priv); 
     854        info->self = self; 
     855        info->callback = callback; 
     856        info->status_callback = status_callback; 
     857        info->user_data = user_data; 
     858        info->depth = g_main_depth (); 
     859        info->condition = NULL; 
     860        info->adding_msg = msg; 
     861        info->err = NULL; 
     862 
     863        if (!_tny_session_check_operation (TNY_FOLDER_PRIV_GET_SESSION(priv), priv->account, &err,  
     864                                TNY_FOLDER_ERROR, TNY_FOLDER_ERROR_ADD_MSG)) 
     865        { 
     866                if (callback) { 
     867                        info->err = g_error_copy (err); 
     868                        g_object_ref (info->self); 
     869                        g_object_ref (info->adding_msg); 
     870                        _tny_camel_folder_reason (priv); 
     871                        execute_callback (info->depth, G_PRIORITY_DEFAULT, 
     872                                tny_camel_folder_add_msg_async_cancelled_callback, info,  
     873                                tny_camel_folder_add_msg_async_cancelled_destroyer); 
     874                } 
     875                g_error_free (err); 
     876                return; 
     877        } 
     878 
     879        info->stopper = tny_idle_stopper_new(); 
     880 
     881        g_object_ref (info->adding_msg); 
     882 
     883        /* thread reference */ 
     884        g_object_ref (info->self); 
     885        _tny_camel_folder_reason (priv); 
     886 
     887        _tny_camel_queue_launch (TNY_FOLDER_PRIV_GET_QUEUE (priv),  
     888                tny_camel_folder_add_msg_async_thread,  
     889                tny_camel_folder_add_msg_async_cancelled_callback, 
     890                tny_camel_folder_add_msg_async_cancelled_destroyer, &info->cancelled, 
     891                info, __FUNCTION__); 
     892 
     893        return; 
     894} 
     895 
    629896 
    630897static void  
     
    9901257} 
    9911258 
    992 /* When using a #GMainLoop this method will execute a callback using 
    993  * g_idle_add_full.  Note that without a #GMainLoop, the callbacks 
    994  * could happen in a worker thread (depends on who call it) at an 
    995  * unknown moment in time (check your locking in this case). */ 
    996  
    997 static void 
    998 execute_callback (gint depth,  
    999                   gint priority, 
    1000                   GSourceFunc idle_func, 
    1001                   gpointer data,  
    1002                   GDestroyNotify destroy_func) 
    1003 { 
    1004         if (depth > 0){ 
    1005                 g_idle_add_full (priority, idle_func, data, destroy_func); 
    1006         } else { 
    1007                 idle_func (data); 
    1008                 destroy_func (data); 
    1009         } 
    1010 } 
    10111259 
    10121260 
     
    10641312{ 
    10651313        TnyFolder *self; 
    1066         TnySyncFolderCallback callback; 
     1314        TnyFolderCallback callback; 
    10671315        TnyStatusCallback status_callback; 
    10681316        gpointer user_data; 
     
    12431491 
    12441492void  
    1245 tny_camel_folder_sync_async_default (TnyFolder *self, gboolean expunge, TnySyncFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     1493tny_camel_folder_sync_async_default (TnyFolder *self, gboolean expunge, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    12461494{ 
    12471495        SyncFolderInfo *info; 
     
    12911539 
    12921540void  
    1293 tny_camel_folder_sync_async (TnyFolder *self, gboolean expunge, TnySyncFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     1541tny_camel_folder_sync_async (TnyFolder *self, gboolean expunge, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    12941542{ 
    12951543        TNY_CAMEL_FOLDER_GET_CLASS (self)->sync_async_func (self, expunge, callback, status_callback, user_data); 
     
    13001548{ 
    13011549        TnyFolder *self; 
    1302         TnyRefreshFolderCallback callback; 
     1550        TnyFolderCallback callback; 
    13031551        TnyStatusCallback status_callback; 
    13041552        gpointer user_data; 
     
    14531701 
    14541702static void 
    1455 tny_camel_folder_refresh_async (TnyFolder *self, TnyRefreshFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     1703tny_camel_folder_refresh_async (TnyFolder *self, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    14561704{ 
    14571705        TNY_CAMEL_FOLDER_GET_CLASS (self)->refresh_async_func (self, callback, status_callback, user_data); 
     
    15021750 
    15031751static void 
    1504 tny_camel_folder_refresh_async_default (TnyFolder *self, TnyRefreshFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     1752tny_camel_folder_refresh_async_default (TnyFolder *self, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    15051753{ 
    15061754        RefreshFolderInfo *info; 
     
    50495297        TnyFolderIface *klass = (TnyFolderIface *)g; 
    50505298 
     5299        klass->add_msg_async_func = tny_camel_folder_add_msg_async; 
    50515300        klass->get_msg_remove_strategy_func = tny_camel_folder_get_msg_remove_strategy; 
    50525301        klass->set_msg_remove_strategy_func = tny_camel_folder_set_msg_remove_strategy; 
     
    51115360        object_class->finalize = tny_camel_folder_finalize; 
    51125361 
     5362        class->add_msg_async_func = tny_camel_folder_add_msg_async_default; 
    51135363        class->get_msg_receive_strategy_func = tny_camel_folder_get_msg_receive_strategy_default; 
    51145364        class->set_msg_receive_strategy_func = tny_camel_folder_set_msg_receive_strategy_default; 
  • trunk/libtinymail-camel/tny-camel-folder.h

    r2537 r2593  
    5454 
    5555        /* virtual methods */ 
     56        void (*remove_msg_func) (TnyFolder *self, TnyHeader *header, GError **err); 
    5657        void (*add_msg_func) (TnyFolder *self, TnyMsg *msg, GError **err); 
    57         void (*remove_msg_func) (TnyFolder *self, TnyHeader *header, GError **err); 
     58        void (*add_msg_async_func) (TnyFolder *self, TnyMsg *msg, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    5859        void (*sync_func) (TnyFolder *self, gboolean expunge, GError **err); 
    59         void (*sync_async_func) (TnyFolder *self, gboolean expunge, TnySyncFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
     60        void (*sync_async_func) (TnyFolder *self, gboolean expunge, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    6061        TnyMsgRemoveStrategy* (*get_msg_remove_strategy_func) (TnyFolder *self); 
    6162        void (*set_msg_remove_strategy_func) (TnyFolder *self, TnyMsgRemoveStrategy *st); 
     
    7576        guint (*get_local_size_func) (TnyFolder *self); 
    7677        gboolean (*is_subscribed_func) (TnyFolder *self); 
    77         void (*refresh_async_func) (TnyFolder *self, TnyRefreshFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
     78        void (*refresh_async_func) (TnyFolder *self, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    7879        void (*refresh_func) (TnyFolder *self, GError **err); 
    7980        void (*transfer_msgs_func) (TnyFolder *self, TnyList *headers, TnyFolder *folder_dst, gboolean delete_originals, GError **err); 
  • trunk/libtinymail-camel/tny-camel-store-account.c

    r2584 r2593  
    10641064        g_assert (CAMEL_IS_SESSION (apriv->session)); 
    10651065 
     1066/* 
    10661067        if (!_tny_session_check_operation (apriv->session, TNY_ACCOUNT (self), err,  
    10671068                        TNY_FOLDER_STORE_ERROR, TNY_FOLDER_STORE_ERROR_GET_FOLDERS)) 
    10681069                return; 
    1069  
     1070*/ 
    10701071        if (query != NULL) 
    10711072                g_assert (TNY_IS_FOLDER_STORE_QUERY (query)); 
     
    11621163          } 
    11631164        } 
     1165/* 
    11641166        _tny_session_stop_operation (apriv->session); 
     1167*/ 
    11651168        return; 
    11661169} 
     
    12531256        info->cancelled = FALSE; 
    12541257        if (info->err != NULL) { 
    1255                 if (strcasestr (err->message, "cancel") != NULL) 
     1258                if (strcasestr (info->err->message, "cancel") != NULL) 
    12561259                        info->cancelled = TRUE; 
    12571260        } 
     
    13361339        info->depth = g_main_depth (); 
    13371340 
    1338         if (!_tny_session_check_operation (apriv->session, TNY_ACCOUNT (self), &err,  
    1339                         TNY_FOLDER_STORE_ERROR, TNY_FOLDER_STORE_ERROR_GET_FOLDERS)) 
    1340         { 
    1341                 if (callback) { 
    1342                         info->err = g_error_copy (err); 
    1343                         if (info->query) 
    1344                                 g_object_ref (info->query); 
    1345                         g_object_ref (info->self); 
    1346                         g_object_ref (info->list); 
    1347  
    1348                         execute_callback (info->depth, G_PRIORITY_DEFAULT,  
    1349                                 tny_camel_store_account_get_folders_async_cancelled_callback, info, 
    1350                                 tny_camel_store_account_get_folders_async_cancelled_destroyer); 
    1351                 } 
    1352                 g_error_free (err); 
    1353                 return; 
    1354         } 
    1355  
    13561341        /* thread reference */ 
    13571342        g_object_ref (info->self); 
     
    13601345                g_object_ref (info->query); 
    13611346 
    1362         _tny_camel_queue_launch (priv->queue,  
     1347        _tny_camel_queue_launch_wflags (priv->queue,  
    13631348                tny_camel_store_account_get_folders_async_thread, 
    13641349                tny_camel_store_account_get_folders_async_cancelled_callback, 
    13651350                tny_camel_store_account_get_folders_async_cancelled_destroyer,  
    1366                 &info->cancelled, info, __FUNCTION__); 
     1351                &info->cancelled, info, TNY_CAMEL_QUEUE_NORMAL_ITEM| 
     1352                        TNY_CAMEL_QUEUE_PRIORITY_ITEM, __FUNCTION__); 
    13671353 
    13681354        return; 
     
    17161702 * url-string and/or proto setting of @self). */ 
    17171703 
     1704static gboolean  
     1705cancelled_conn (gpointer user_data) 
     1706{ 
     1707        return FALSE; 
     1708} 
     1709 
     1710static void  
     1711cancelled_conn_destroy (gpointer user_data) 
     1712{ 
     1713        GoingOnlineInfo *info = (GoingOnlineInfo *) user_data; 
     1714        g_object_unref (info->self); 
     1715        camel_object_unref (info->session); 
     1716        g_slice_free (GoingOnlineInfo, info); 
     1717        return; 
     1718} 
     1719 
    17181720void 
    17191721_tny_camel_store_account_queue_going_online (TnyCamelStoreAccount *self, TnySessionCamel *session, gboolean online, go_online_callback_func done_func, gpointer user_data) 
     
    17401742        /* It's indeed a very typical queue operation */ 
    17411743 
    1742         _tny_camel_queue_launch (priv->queue,  
     1744        _tny_camel_queue_remove_items (priv->queue, 
     1745                TNY_CAMEL_QUEUE_RECONNECT_ITEM); 
     1746 
     1747        _tny_camel_queue_launch_wflags (priv->queue,  
    17431748                tny_camel_store_account_queue_going_online_thread, 
    1744                 NULL, NULL, NULL, 
    1745                  info, __FUNCTION__); 
     1749                cancelled_conn, cancelled_conn_destroy, NULL, 
     1750                 info, TNY_CAMEL_QUEUE_RECONNECT_ITEM, 
     1751                __FUNCTION__); 
    17461752 
    17471753        return; 
  • trunk/libtinymail/tny-folder.c

    r2579 r2593  
    586586 **/ 
    587587void  
    588 tny_folder_sync_async (TnyFolder *self, gboolean expunge, TnySyncFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     588tny_folder_sync_async (TnyFolder *self, gboolean expunge, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    589589{ 
    590590#ifdef DBC /* require */ 
     
    596596        return; 
    597597} 
     598 
     599 
     600/** 
     601 * tny_folder_add_msg_async: 
     602 * @self: a #TnyFolder object 
     603 * @msg: a #TnyMsg object 
     604 * @callback: a callback that'll happen when adding is finished 
     605 * @status_callback: a status callback 
     606 * @user_data: user data for the status callback and callback 
     607 * 
     608 * Add a message to a folder. It's recommended to destroy @msg afterwards because  
     609 * after receiving the same message from the folder again, the instance wont be 
     610 * the same anymore and a property like the tny_msg_get_id might have changed 
     611 * and assigned too. 
     612 *  
     613 * Folder observers of @self will get a header-added trigger caused by this 
     614 * action. 
     615 **/ 
     616void  
     617tny_folder_add_msg_async (TnyFolder *self, TnyMsg *msg, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     618{ 
     619#ifdef DBC /* require */ 
     620        g_assert (TNY_IS_FOLDER (self)); 
     621        g_assert (msg); 
     622        g_assert (TNY_IS_MSG (msg)); 
     623        g_assert (TNY_FOLDER_GET_IFACE (self)->add_msg_async_func != NULL); 
     624#endif 
     625        TNY_FOLDER_GET_IFACE (self)->add_msg_async_func (self, msg, callback, status_callback, user_data); 
     626        return; 
     627} 
     628 
    598629 
    599630/** 
     
    744775 **/ 
    745776void 
    746 tny_folder_refresh_async (TnyFolder *self, TnyRefreshFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     777tny_folder_refresh_async (TnyFolder *self, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    747778{ 
    748779#ifdef DBC /* require */ 
  • trunk/libtinymail/tny-folder.h

    r2537 r2593  
    9191        void (*remove_msg_func) (TnyFolder *self, TnyHeader *header, GError **err); 
    9292        void (*add_msg_func) (TnyFolder *self, TnyMsg *msg, GError **err); 
     93        void (*add_msg_async_func) (TnyFolder *self, TnyMsg *msg, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    9394        void (*sync_func) (TnyFolder *self, gboolean expunge, GError **err); 
    94         void (*sync_async_func) (TnyFolder *self, gboolean expunge, TnySyncFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
     95        void (*sync_async_func) (TnyFolder *self, gboolean expunge, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    9596        TnyMsgRemoveStrategy* (*get_msg_remove_strategy_func) (TnyFolder *self); 
    9697        void (*set_msg_remove_strategy_func) (TnyFolder *self, TnyMsgRemoveStrategy *st); 
     
    110111        guint (*get_local_size_func) (TnyFolder *self); 
    111112        gboolean (*is_subscribed_func) (TnyFolder *self); 
    112         void (*refresh_async_func) (TnyFolder *self, TnyRefreshFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
     113        void (*refresh_async_func) (TnyFolder *self, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    113114        void (*refresh_func) (TnyFolder *self, GError **err); 
    114115        void (*transfer_msgs_func) (TnyFolder *self, TnyList *header_list, TnyFolder *folder_dst, gboolean delete_originals, GError **err); 
     
    133134void tny_folder_set_msg_receive_strategy (TnyFolder *self, TnyMsgReceiveStrategy *st); 
    134135void tny_folder_remove_msg (TnyFolder *self, TnyHeader *header, GError **err); 
     136void tny_folder_remove_msg_async (TnyFolder *self, TnyHeader *header, GError **err); 
    135137void tny_folder_add_msg (TnyFolder *self, TnyMsg *msg, GError **err); 
     138void tny_folder_add_msg_async (TnyFolder *self, TnyMsg *msg, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    136139void tny_folder_sync (TnyFolder *self, gboolean expunge, GError **err); 
    137 void tny_folder_sync_async (TnyFolder *self, gboolean expunge, TnySyncFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
     140void tny_folder_sync_async (TnyFolder *self, gboolean expunge, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    138141TnyMsg* tny_folder_get_msg (TnyFolder *self, TnyHeader *header, GError **err); 
    139142TnyMsg* tny_folder_find_msg (TnyFolder *self, const gchar *url_string, GError **err); 
     
    149152guint tny_folder_get_local_size (TnyFolder *self); 
    150153gboolean tny_folder_is_subscribed (TnyFolder *self); 
    151 void tny_folder_refresh_async (TnyFolder *self, TnyRefreshFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
     154void tny_folder_refresh_async (TnyFolder *self, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    152155void tny_folder_refresh (TnyFolder *self, GError **err); 
    153156void tny_folder_transfer_msgs (TnyFolder *self, TnyList *header_list, TnyFolder *folder_dst, gboolean delete_originals, GError **err); 
  • trunk/libtinymail/tny-merge-folder.c

    r2576 r2593  
    138138{ 
    139139        TnyFolder *self; 
    140         TnyRefreshFolderCallback callback; 
     140        TnyFolderCallback callback; 
    141141        TnyStatusCallback status_callback; 
    142142        gpointer user_data; 
     
    235235 
    236236static void 
    237 tny_merge_folder_sync_async (TnyFolder *self, gboolean expunge, TnySyncFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     237tny_merge_folder_sync_async (TnyFolder *self, gboolean expunge, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    238238{ 
    239239        SyncFolderInfo *info; 
     
    817817{ 
    818818        TnyFolder *self; 
    819         TnyRefreshFolderCallback callback; 
     819        TnyFolderCallback callback; 
    820820        TnyStatusCallback status_callback; 
    821821        gpointer user_data; 
     
    927927 
    928928static void 
    929 tny_merge_folder_refresh_async (TnyFolder *self, TnyRefreshFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     929tny_merge_folder_refresh_async (TnyFolder *self, TnyFolderCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    930930{ 
    931931        RefreshFolderInfo *info; 
  • trunk/libtinymail/tny-shared.h

    r2574 r2593  
    5757typedef struct _TnyStream TnyStream; 
    5858typedef struct _TnyStreamIface TnyStreamIface; 
    59 typedef gchar* (*TnyGetPassFunc) (TnyAccount *self, const gchar *prompt, gboolean *cancel); 
    60 typedef void (*TnyForgetPassFunc) (TnyAccount *self); 
    61 typedef void (*TnyRefreshFolderCallback) (TnyFolder *self, gboolean cancelled, GError *err, gpointer user_data); 
    62 typedef void (*TnyGetHeadersCallback) (TnyFolder *self, gboolean cancelled, TnyList *headers, GError *err, gpointer user_data); 
    63 typedef void (*TnyGetMsgCallback) (TnyFolder *folder, gboolean cancelled, TnyMsg *msg, GError *err, gpointer user_data); 
    64 typedef void (*TnySyncFolderCallback) (TnyFolder *folder, gboolean cancelled, GError *err, gpointer user_data); 
    65 typedef void (*TnyTransferMsgsCallback) (TnyFolder *folder, gboolean cancelled, GError *err, gpointer user_data); 
    66 typedef void (*TnyStatusCallback) (GObject *self, TnyStatus *status, gpointer user_data); 
    6759typedef enum _TnyHeaderFlags TnyHeaderFlags; 
    6860typedef enum _TnyHeaderPriorityFlags TnyHeaderPriorityFlags; 
     
    8274typedef struct _TnyFolderStoreQueryItem TnyFolderStoreQueryItem; 
    8375typedef struct _TnyFolderStoreQueryItemClass TnyFolderStoreQueryItemClass; 
    84 typedef void (*TnyGetFoldersCallback) (TnyFolderStore *self, gboolean cancelled, TnyList *list, GError *err, gpointer user_data); 
    85 typedef void (*TnyCopyFolderCallback) (TnyFolder *self, gboolean cancelled, TnyFolderStore *into, TnyFolder *new_folder, GError *err, gpointer user_data); 
    8676typedef enum _TnyFolderSignal TnyFolderSignal; 
    8777typedef enum _TnyDeviceSignal TnyDeviceSignal; 
     
    125115typedef enum _TnyConnectionStatus TnyConnectionStatus; 
    126116 
     117typedef gchar* (*TnyGetPassFunc) (TnyAccount *self, const gchar *prompt, gboolean *cancel); 
     118typedef void (*TnyForgetPassFunc) (TnyAccount *self); 
     119typedef void (*TnyFolderCallback) (TnyFolder *self, gboolean cancelled, GError *err, gpointer user_data); 
     120typedef void (*TnyGetHeadersCallback) (TnyFolder *self, gboolean cancelled, TnyList *headers, GError *err, gpointer user_data); 
     121typedef void (*TnyGetMsgCallback) (TnyFolder *folder, gboolean cancelled, TnyMsg *msg, GError *err, gpointer user_data); 
     122typedef void (*TnyTransferMsgsCallback) (TnyFolder *folder, gboolean cancelled, GError *err, gpointer user_data); 
     123typedef void (*TnyStatusCallback) (GObject *self, TnyStatus *status, gpointer user_data); 
     124typedef void (*TnyGetFoldersCallback) (TnyFolderStore *self, gboolean cancelled, TnyList *list, GError *err, gpointer user_data); 
     125typedef void (*TnyCopyFolderCallback) (TnyFolder *self, gboolean cancelled, TnyFolderStore *into, TnyFolder *new_folder, GError *err, gpointer user_data); 
     126 
    127127G_END_DECLS 
    128128 
  • trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c

    r2574 r2593  
    397397        } 
    398398 
    399         recurse_folders_sync (self, TNY_FOLDER_STORE (folder_store), &name_iter); 
     399        /* recurse_folders_sync (self, TNY_FOLDER_STORE (folder_store), &name_iter); */ 
     400 
     401        tny_folder_store_get_folders_async (TNY_FOLDER_STORE (folder_store),  
     402                folders, get_folders_cb, NULL, NULL, g_object_ref (self)); 
    400403 
    401404        /* Add an observer for the root folder store, so that we can observe  
     
    405408        self->store_observables = g_list_prepend (self->store_observables, folder_store); 
    406409 
    407         g_object_unref (G_OBJECT (folders)); 
     410        /* g_object_unref (G_OBJECT (folders)); */ 
    408411 
    409412        return;