Changeset 424

Show
Ignore:
Timestamp:
05/29/06 23:07:46
Author:
pvanhoof
Message:

The ubercool iterator design pattern in tinymail

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libtinymail-camel/tny-msg-folder-priv.h

    r243 r424  
    3030{ 
    3131        GMutex *cached_hdrs_lock; 
    32         GList *cached_hdrs; 
     32        TnyListIface *cached_hdrs; 
    3333        GPtrArray *cached_uids; 
    3434         
     35        GType headers_list_type; 
     36 
    3537        GMutex *cached_msgs_lock; 
    3638        GHashTable *cached_msgs; 
  • trunk/libtinymail-camel/tny-msg-folder.c

    r401 r424  
    3131#include <tny-store-account-iface.h> 
    3232#include <tny-store-account.h> 
     33#include <tny-list-iface.h> 
    3334 
    3435#include <camel/camel-folder.h> 
     
    5758typedef struct 
    5859{ 
    59         GList *list; 
     60        TnyListIface *list; 
    6061        GFunc relaxed_func; 
    6162        GMutex *lock; 
     
    7172        g_mutex_lock (d->lock); 
    7273 
    73         g_list_free (d->list); 
     74printf ("removed proxy obj\n"); 
     75        g_object_unref (G_OBJECT (d->list)); 
     76 
    7477        d->list = NULL; 
    7578        g_free (d); 
     
    8891{ 
    8992        RelaxedData *d = data; 
    90         GList *list = d->list; 
     93        TnyListIface *list = d->list; 
     94 
     95        if (!list) 
     96                return FALSE; 
     97 
     98        TnyIteratorIface *iterator = tny_list_iface_create_iterator (list); 
     99        GList *toremove=NULL; 
     100 
    91101        gint count = 0; 
    92102 
    93103        g_mutex_lock (d->lock); 
    94104 
    95         while (G_LIKELY ((count < 5) && list)) 
    96         { 
    97                 GList *element = list; 
    98                 if (G_LIKELY (element && element->data)) 
    99                         d->relaxed_func (element->data, d->priv); 
    100                 list = g_list_remove_link (list, element); 
    101                 g_list_free (element); 
     105        while (G_LIKELY ((count < 5) && tny_iterator_iface_has_next (iterator))) 
     106        { 
     107                gpointer item = tny_iterator_iface_next (iterator); 
     108 
     109                if (G_LIKELY (item)) 
     110                        d->relaxed_func (item, d->priv); 
     111 
     112                toremove = g_list_prepend (toremove, item); 
     113 
    102114                count++; 
    103115        } 
     116        g_object_unref (G_OBJECT (iterator)); 
     117 
     118        while (toremove) 
     119        { printf ("rem\n"); 
     120                tny_list_iface_remove (list, toremove->data); 
     121                toremove = g_list_next (toremove); 
     122        } 
     123printf ("-\n"); 
     124         
    104125 
    105126        d->list = list; 
     
    135156 
    136157                g_mutex_lock (priv->cached_hdrs_lock); 
    137                 d->list = g_list_copy (priv->cached_hdrs); 
     158                d->list = tny_list_iface_copy (priv->cached_hdrs); 
    138159                g_mutex_unlock (priv->cached_hdrs_lock); 
    139160 
     
    415436        g_mutex_lock (priv->cached_hdrs_lock); 
    416437 
    417         priv->cached_hdrs = g_list_prepend (priv->cached_hdrs, header); 
     438        tny_list_iface_prepend (priv->cached_hdrs, header); 
    418439        priv->cached_length++; 
    419440        /* TODO: If unread -- priv->unread_length++; */ 
     
    554575        _tny_account_stop_camel_operation (TNY_ACCOUNT_IFACE (priv->account)); 
    555576 
    556         g_list_foreach (priv->cached_hdrs, destroy_header, NULL); 
    557         g_list_free (priv->cached_hdrs); 
     577        if (priv->cached_hdrs) 
     578        { 
     579                tny_list_iface_foreach (priv->cached_hdrs, destroy_header, NULL); 
     580                g_object_unref (G_OBJECT (priv->cached_hdrs)); 
     581        } 
    558582        priv->cached_hdrs = NULL; 
    559583 
     
    591615} 
    592616 
    593 static const GList
     617static TnyListIface
    594618tny_msg_folder_get_headers (TnyMsgFolderIface *self, gboolean refresh) 
    595619{ 
     
    597621 
    598622        g_mutex_lock (priv->folder_lock); 
    599  
     623         
    600624        load_folder_no_lock (priv); 
    601625 
     
    604628        if (G_UNLIKELY (!priv->cached_hdrs)) 
    605629        { 
     630 
    606631                GPtrArray *uids = NULL; 
    607632                CamelException ex; 
     
    609634 
    610635                priv->cached_length = 0; 
    611                 priv->cached_hdrs = NULL; 
     636                priv->cached_hdrs = g_object_new (priv->headers_list_type, NULL); 
     637 
    612638                g_mutex_unlock (priv->cached_hdrs_lock); 
    613639 
     
    918944 
    919945        tny_msg_folder_hdr_cache_remover (priv); 
     946        priv->cached_hdrs = NULL; 
    920947 
    921948        g_mutex_lock (priv->cached_hdrs_lock); 
     
    9781005 
    9791006 
     1007void 
     1008tny_msg_folder_set_headers_list_type (TnyMsgFolderIface *self, GType type) 
     1009{ 
     1010        TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (self); 
     1011 
     1012        if (priv->cached_hdrs) 
     1013                tny_msg_folder_hdr_cache_remover (priv); 
     1014 
     1015        priv->headers_list_type = type; 
     1016        return; 
     1017} 
     1018 
    9801019static void 
    9811020tny_msg_folder_iface_init (gpointer g_iface, gpointer iface_data) 
     
    9831022        TnyMsgFolderIfaceClass *klass = (TnyMsgFolderIfaceClass *)g_iface; 
    9841023 
     1024        klass->set_headers_list_type_func = tny_msg_folder_set_headers_list_type; 
    9851025        klass->get_headers_func = tny_msg_folder_get_headers; 
    9861026        klass->get_message_func = tny_msg_folder_get_message; 
  • trunk/libtinymail-gnome-desktop/tny-device.c

    r416 r424  
    7575nm_callback (libnm_glib_ctx *nm_ctx, gpointer user_data) 
    7676{ 
    77         TnyDevice *self = (TnyDevice *)user_data; 
     77        TnyDeviceIface *self = (TnyDeviceIface *)user_data; 
    7878 
    7979        if (tny_device_is_online (self)) 
    80                 tny_device_on_online (TNY_DEVICE_IFACE (self)); 
     80                tny_device_on_online (self); 
    8181        else 
    82                 tny_device_on_offline (TNY_DEVICE_IFACE (self)); 
     82                tny_device_on_offline (self); 
    8383 
    8484        return; 
  • trunk/libtinymail/Makefile.am

    r379 r424  
    55libtinymail_1_0_headers =               \ 
    66        tny-shared.h                    \ 
     7        tny-list-iface.h                \ 
     8        tny-iterator-iface.h            \ 
    79        tny-msg-folder-iface.h          \ 
    810        tny-msg-mime-part-iface.h       \ 
     
    1921libtinymail_1_0_la_SOURCES =            \ 
    2022        $(libtinymail_1_0_headers)      \ 
     23        tny-list-iface.c                \ 
     24        tny-iterator-iface.c            \ 
    2125        tny-msg-iface.c                 \ 
    2226        tny-msg-header-iface.c          \ 
  • trunk/libtinymail/tny-msg-folder-iface.c

    r408 r424  
    2626 
    2727/** 
     28 * tny_msg_folder_iface_set_headers_list_type: 
     29 * @self: a #TnyMsgHeaderIface object 
     30 * @type: the list-type 
     31 *  
     32 * Set which #TnyListIfaceClass type to use for the 
     33 * tny_msg_header_iface_get_headers return value 
     34 * 
     35 * If you use libtinymailui-gtk, you should probably 
     36 * set this to TNY_TYPE_MSG_HEADER_LIST_MODEL 
     37 *  
     38 **/ 
     39void  
     40tny_msg_folder_iface_set_headers_list_type (TnyMsgFolderIface *self, GType type) 
     41{ 
     42        TNY_MSG_FOLDER_IFACE_GET_CLASS (self)->set_headers_list_type_func (self, type); 
     43        return; 
     44} 
     45 
     46/** 
    2847 * tny_msg_folder_iface_refresh_headers_async: 
    2948 * @self: a TnyMsgFolderIface object 
     
    177196 * Get a read-only list of message header instances that are in this folder 
    178197 *  
    179  * Return value: A read-only GList with TnyMsgHeaderIface instances 
    180  **/ 
    181 const GList
     198 * Return value: A #TnyListIface with TnyMsgHeaderIface instances 
     199 **/ 
     200TnyListIface
    182201tny_msg_folder_iface_get_headers (TnyMsgFolderIface *self, gboolean refresh) 
    183202{ 
  • trunk/libtinymail/tny-msg-folder-iface.h

    r367 r424  
    2727#include <tny-msg-header-iface.h> 
    2828#include <tny-account-iface.h> 
     29#include <tny-list-iface.h> 
    2930 
    3031G_BEGIN_DECLS 
     
    7071        const TnyMsgIface*   
    7172                       (*get_message_func)  (TnyMsgFolderIface *self, const TnyMsgHeaderIface *header); 
    72         const GList*   (*get_headers_func)  (TnyMsgFolderIface *self, gboolean refresh); 
     73 
     74        void           (*set_headers_list_type_func) (TnyMsgFolderIface *self, GType type); 
     75 
     76        TnyListIface*  (*get_headers_func)  (TnyMsgFolderIface *self, gboolean refresh); 
    7377 
    7478        const gchar*   (*get_name_func)    (TnyMsgFolderIface *self); 
     
    101105const TnyMsgIface* 
    102106               tny_msg_folder_iface_get_message  (TnyMsgFolderIface *self, const TnyMsgHeaderIface *header); 
    103 const GList*   tny_msg_folder_iface_get_headers  (TnyMsgFolderIface *self, gboolean refresh); 
     107TnyListIface*  tny_msg_folder_iface_get_headers  (TnyMsgFolderIface *self, gboolean refresh); 
     108 
     109void tny_msg_folder_iface_set_headers_list_type (TnyMsgFolderIface *self, GType type); 
    104110 
    105111const TnyAccountIface*   
  • trunk/libtinymail/tny-shared.h

    r411 r424  
    2323G_BEGIN_DECLS 
    2424 
     25typedef struct _TnyListIface TnyListIface; 
     26typedef struct _TnyIteratorIface TnyIteratorIface; 
     27typedef struct _TnyListIfaceClass TnyListIfaceClass; 
     28typedef struct _TnyIteratorIfaceClass TnyIteratorIfaceClass; 
    2529typedef struct _TnyMsgIface TnyMsgIface; 
    2630typedef struct _TnyMsgIfaceClass TnyMsgIfaceClass; 
  • trunk/libtinymailui-gtk/Makefile.am

    r379 r424  
    1515        tny-msg-window.h                \ 
    1616        tny-msg-header-list-model.h     \ 
     17        tny-msg-header-list-iterator.h  \ 
    1718        tny-account-tree-model.h        \ 
    1819        tny-attach-list-model.h         \ 
     
    2021        tny-msg-header-view.h 
    2122 
    22 libtinymailui_gtk_1_0_la_SOURCES =      \ 
    23         $(libtinymailui_gtk_1_0_headers)\ 
    24         tny-save-strategy.c             \ 
    25         tny-msg-view.c                  \ 
    26         tny-msg-window.c                \ 
    27         tny-msg-header-list-model.c     \ 
    28         tny-account-tree-model.c        \ 
    29         tny-attach-list-model-priv.h    \ 
    30         tny-attach-list-model.c         \ 
    31         tny-text-buffer-stream.c        \ 
     23libtinymailui_gtk_1_0_la_SOURCES =       \ 
     24        $(libtinymailui_gtk_1_0_headers) \ 
     25        tny-save-strategy.c              \ 
     26        tny-msg-view.c                   \ 
     27        tny-msg-window.c                 \ 
     28        tny-msg-header-list-model-priv.h \ 
     29        tny-msg-header-list-model.c      \ 
     30        tny-msg-header-list-iterator.c   \ 
     31        tny-account-tree-model.c         \ 
     32        tny-attach-list-model-priv.h     \ 
     33        tny-attach-list-model.c          \ 
     34        tny-text-buffer-stream.c         \ 
    3235        tny-msg-header-view.c 
    3336 
  • trunk/libtinymailui-gtk/tny-msg-header-list-model.c

    r417 r424  
    2727#include <tny-msg-folder-iface.h> 
    2828 
     29#include <tny-list-iface.h> 
     30#include <tny-iterator-iface.h> 
     31 
     32#include <tny-msg-header-list-iterator.h> 
     33 
    2934#define G_LIST(o) ((GList *) o) 
    3035 
    3136static GObjectClass *parent_class; 
    3237 
    33 struct _TnyMsgHeaderListModel  
    34 
    35         GObject parent; 
    36  
    37         GMutex *folder_lock; 
    38         TnyMsgFolderIface *folder; 
    39         gint length; 
    40         gint stamp; 
    41  
    42         guint last_nth; 
    43         GList *last_iter; 
    44 }; 
    45  
    46 struct _TnyMsgHeaderListModelClass  
    47 
    48         GObjectClass parent; 
    49 }; 
    50  
    51  
    52 static void 
    53 destroy_internal_list (TnyMsgHeaderListModel *self) 
    54 
    55         self->length = 0; 
    56         self->last_iter = NULL; 
    57         self->last_nth = 0; 
    58  
    59         return; 
    60 
    61  
     38#include "tny-msg-header-list-model-priv.h" 
    6239 
    6340static guint 
     
    126103{ 
    127104        TnyMsgHeaderListModel *list_model = TNY_MSG_HEADER_LIST_MODEL (self); 
     105 
    128106        GList *list, *headers; 
    129107        gint i; 
     
    141119        } 
    142120 
    143         if (list_model->last_iter) 
    144         { /* This is a little speed hack */ 
    145                 if (list_model->last_nth != i) 
    146                         list_model->last_iter = g_list_travel_to_nth (list_model->last_iter, list_model->last_nth, i); 
    147                 list_model->last_nth = i; 
    148                 list = list_model->last_iter; 
    149         } else { 
    150                 headers = (GList*)tny_msg_folder_iface_get_headers (list_model->folder, FALSE); 
    151                 destroy_internal_list (list_model); 
    152                 list_model->length = g_list_length (headers); 
    153                 list_model->last_nth = i; 
    154                 list = g_list_nth (G_LIST (headers), i); 
    155                 list_model->last_iter = list; 
    156         } 
     121        _tny_msg_header_list_iterator_travel_to_nth  
     122                ((TnyMsgHeaderListIterator*)list_model->iterator,  
     123                list_model->last_nth, i); 
     124 
     125        list_model->last_nth = i; 
    157126 
    158127        iter->stamp = list_model->stamp; 
    159         iter->user_data = list
     128        iter->user_data = tny_iterator_iface_current (list_model->iterator)
    160129 
    161130        g_mutex_unlock (list_model->folder_lock); 
     
    177146        g_mutex_lock (list_model->folder_lock); 
    178147 
    179         headers = (GList*)tny_msg_folder_iface_get_headers (list_model->folder, FALSE); 
    180         destroy_internal_list (list_model); 
    181         list_model->length = g_list_length (headers); 
    182  
    183         for (list = G_LIST (headers); list; list = list->next)  
    184         { 
    185                 if (G_UNLIKELY (list == G_LIST (iter->user_data))) 
     148 
     149        while (tny_iterator_iface_has_next (list_model->iterator)) 
     150        { 
     151                if (tny_iterator_iface_next (list_model->iterator) == iter->user_data) 
    186152                        break; 
    187153                i++; 
    188154        } 
    189  
    190         if (list == NULL) 
    191         { 
    192                 g_mutex_unlock (list_model->folder_lock); 
    193                 return NULL; 
    194         } 
     155        tny_iterator_iface_first (list_model->iterator); 
     156 
    195157         
    196158        tree_path = gtk_tree_path_new (); 
     
    229191        g_mutex_lock (list_model->folder_lock); 
    230192         
    231         header = G_LIST (iter->user_data)->data; 
     193        header = iter->user_data; 
    232194         
    233195        switch (column)  
     
    288250        g_mutex_lock (list_model->folder_lock); 
    289251 
    290         /* Need to call this in case the instance was uncached */ 
    291         headers = (GList*)tny_msg_folder_iface_get_headers (list_model->folder, FALSE); 
    292         destroy_internal_list (list_model); 
    293         list_model->length = g_list_length (headers); 
    294  
    295         iter->user_data = G_LIST (iter->user_data)->next; 
     252        iter->user_data = tny_iterator_iface_next (list_model->iterator); 
    296253        retval = (iter->user_data != NULL); 
     254 
    297255        g_mutex_unlock (list_model->folder_lock); 
    298256 
     
    333291        g_mutex_lock (list_model->folder_lock); 
    334292 
    335         headers = (GList*)tny_msg_folder_iface_get_headers (list_model->folder, FALSE); 
    336         destroy_internal_list (list_model); 
    337         list_model->length = g_list_length (headers); 
    338  
    339         child = g_list_nth (G_LIST (headers), n); 
     293        child = tny_iterator_iface_nth (list_model->iterator, n); 
    340294 
    341295        if (G_LIKELY (child)) 
     
    365319        g_mutex_lock (list_model->folder_lock); 
    366320 
    367         header = G_LIST (iter->user_data)->data; 
     321        header = iter->user_data; 
    368322         
    369323        if (G_LIKELY (header)) 
     
    415369} 
    416370 
     371 
     372static void 
     373tny_msg_header_list_model_prepend (TnyListIface *self, gpointer item) 
     374{ 
     375        TnyMsgHeaderListModel *me = (TnyMsgHeaderListModel*)self; 
     376 
     377        me->first = g_list_prepend (me->first, item); 
     378} 
     379 
     380static void 
     381tny_msg_header_list_model_append (TnyListIface *self, gpointer item) 
     382{ 
     383        TnyMsgHeaderListModel *me = (TnyMsgHeaderListModel*)self; 
     384 
     385        me->first = g_list_append (me->first, item); 
     386} 
     387 
     388static void 
     389tny_msg_header_list_model_remove (TnyListIface *self, gpointer item) 
     390{ 
     391        TnyMsgHeaderListModel *me = (TnyMsgHeaderListModel*)self; 
     392 
     393        me->first = g_list_remove (me->first, (gconstpointer)item); 
     394} 
     395 
     396static TnyIteratorIface* 
     397tny_msg_header_list_model_create_iterator (TnyListIface *self) 
     398{ 
     399        TnyMsgHeaderListModel *me = (TnyMsgHeaderListModel*)self; 
     400 
     401        return TNY_ITERATOR_IFACE (tny_msg_header_list_iterator_new (me)); 
     402} 
     403 
     404static TnyListIface* 
     405tny_msg_header_list_model_copy_the_list (TnyListIface *self) 
     406{ 
     407        TnyMsgHeaderListModel *me = (TnyMsgHeaderListModel*)self; 
     408        TnyMsgHeaderListModel *copy = g_object_new (TNY_TYPE_MSG_HEADER_LIST_MODEL, NULL); 
     409 
     410        GList *list_copy = g_list_copy (me->first); 
     411 
     412        copy->first = list_copy; 
     413 
     414        return TNY_LIST_IFACE (copy); 
     415} 
     416 
     417static void  
     418tny_msg_header_list_model_foreach_in_the_list (TnyListIface *self, GFunc func, gpointer user_data) 
     419{ 
     420        TnyMsgHeaderListModel *me = (TnyMsgHeaderListModel*)self; 
     421 
     422        g_list_foreach (me->first, func, user_data); 
     423 
     424        return; 
     425} 
     426 
     427static void 
     428tny_list_iface_init (TnyListIfaceClass *klass) 
     429{ 
     430        klass->prepend_func = tny_msg_header_list_model_prepend; 
     431        klass->append_func = tny_msg_header_list_model_append; 
     432        klass->remove_func = tny_msg_header_list_model_remove; 
     433        klass->create_iterator_func = tny_msg_header_list_model_create_iterator; 
     434        klass->copy_func = tny_msg_header_list_model_copy_the_list; 
     435        klass->foreach_func = tny_msg_header_list_model_foreach_in_the_list; 
     436 
     437        return; 
     438} 
     439 
     440 
     441 
    417442static void 
    418443tny_msg_header_list_model_finalize (GObject *object) 
    419444{ 
    420445        TnyMsgHeaderListModel *self = (TnyMsgHeaderListModel *)object; 
    421         const GList* headers; 
     446 
     447        printf ("REALLYT\n"); 
    422448 
    423449        g_mutex_lock (self->folder_lock); 
     
    426452        if (self->folder)  
    427453        { 
    428                 headers = tny_msg_folder_iface_get_headers (self->folder, FALSE); 
    429                 g_list_foreach ((GList*)headers, unref_header, NULL); 
     454                tny_msg_header_list_model_foreach_in_the_list  
     455                       (TNY_LIST_IFACE (self), unref_header, NULL); 
    430456                g_object_unref (G_OBJECT (self->folder)); 
    431457        } 
     
    441467} 
    442468 
     469 
    443470static void 
    444471tny_msg_header_list_model_class_init (TnyMsgHeaderListModelClass *klass) 
     
    459486        self->folder = NULL; 
    460487        self->folder_lock = g_mutex_new (); 
    461         destroy_internal_list (self); 
    462  
    463         return; 
    464 
    465  
    466  
     488 
     489        self->first = NULL; 
     490 
     491        return; 
     492
    467493 
    468494 
     
    471497 * @self: A #TnyMsgHeaderListModel instance 
    472498 * @folder: a #TnyMsgFolderIface instance 
    473  * @refresh: whether or not to synchronize with the server first 
    474499 * 
    475500 * Set the folder where the #TnyMsgHeaderIface instances are located 
    476501 *  
    477502 **/ 
     503 
    478504void 
    479 tny_msg_header_list_model_set_folder (TnyMsgHeaderListModel *self, TnyMsgFolderIface *folder, gboolean refresh
     505tny_msg_header_list_model_set_folder (TnyMsgHeaderListModel *self, TnyMsgFolderIface *folder
    480506{ 
    481507        const GList* headers; 
     
    483509        g_mutex_lock (self->folder_lock); 
    484510 
    485         destroy_internal_list (self); 
    486  
    487         headers = tny_msg_folder_iface_get_headers (folder, refresh); 
     511        self->iterator = TNY_ITERATOR_IFACE (tny_msg_header_list_iterator_new (self)); 
    488512 
    489513        if (G_LIKELY (self->folder)) 
     
    499523        /* We add a reference to each header instance because this type 
    500524           references it (needs it) using the tree-iter token. */ 
    501         g_list_foreach ((GList*)headers, ref_header, NULL); 
     525        tny_msg_header_list_model_foreach_in_the_list  
     526                (TNY_LIST_IFACE (self), ref_header, NULL); 
    502527 
    503528        g_mutex_unlock (self->folder_lock); 
     
    549574                }; 
    550575                 
     576 
     577                static const GInterfaceInfo tny_list_iface_info = { 
     578                        (GInterfaceInitFunc) tny_list_iface_init, 
     579                        NULL, 
     580                        NULL 
     581                }; 
     582 
    551583                object_type = g_type_register_static (G_TYPE_OBJECT,  
    552584                                                "TnyMsgHeaderListModel", &object_info, 0); 
    553585 
    554                 g_type_add_interface_static (object_type, 
    555                                              GTK_TYPE_TREE_MODEL, 
     586                g_type_add_interface_static (object_type, GTK_TYPE_TREE_MODEL, 
    556587                                             &tree_model_info); 
     588 
     589                g_type_add_interface_static (object_type, TNY_TYPE_LIST_IFACE, 
     590                                             &tny_list_iface_info); 
     591 
    557592        } 
    558593 
  • trunk/libtinymailui-gtk/tny-msg-header-list-model.h

    r376 r424  
    5454GtkTreeModel* tny_msg_header_list_model_new        (void); 
    5555 
    56 void          tny_msg_header_list_model_set_folder (TnyMsgHeaderListModel *self, TnyMsgFolderIface *folder, gboolean refresh); 
     56void          tny_msg_header_list_model_set_folder (TnyMsgHeaderListModel *self, TnyMsgFolderIface *folder); 
    5757 
    5858G_END_DECLS 
  • trunk/tinymail/tny-summary-window.c

    r387 r424  
    242242                GtkTreeModel *header_model, *sortable; 
    243243                GtkTreeModel *select_model; 
    244  
    245                 header_model = GTK_TREE_MODEL ( 
     244                TnyListIface *headers = NULL; 
     245                TnyMsgHeaderListModel *model; 
     246 
     247                tny_msg_folder_iface_set_headers_list_type (folder, TNY_TYPE_MSG_HEADER_LIST_MODEL); 
     248 
     249#ifdef ASYNC_HEADERS 
     250                headers = tny_msg_folder_iface_get_headers (folder, FALSE); 
     251#else 
     252                headers = tny_msg_folder_iface_get_headers (folder, TRUE); 
     253#endif 
     254 
     255                model = TNY_MSG_HEADER_LIST_MODEL (headers); 
     256                header_model = GTK_TREE_MODEL (model); 
     257 
     258                tny_msg_header_list_model_set_folder (model, folder); 
     259 
     260/* 
     261                GTK_TREE_MODEL ( 
    246262                        tny_msg_header_list_model_new ()); 
    247263 
     
    253269                        TNY_MSG_HEADER_LIST_MODEL (header_model), folder, TRUE); 
    254270#endif 
     271*/ 
    255272 
    256273                sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); 
     
    261278                                (GTK_TREE_MODEL_SORT (sortable)); 
    262279 
    263                         if (G_LIKELY (model)) 
    264                               g_object_unref (G_OBJECT (model)); 
     280                        //if (G_LIKELY (model)) 
     281                        //    g_object_unref (G_OBJECT (model)); 
    265282 
    266283                        g_object_unref (G_OBJECT (sortable));