Changeset 3295

Show
Ignore:
Timestamp:
01/26/08 13:15:20
Author:
pvanhoof
Message:

2008-01-26 Philip Van Hoof <pvanhoof@gnome.org>

        • Workaround for a known problem that ain't easy to solve right now:

expunged headers stay around for too long. When this is detected, a
dummy header is returned (with as flags TNY_HEADER_FLAG_EXPUNGED)

        • Finished Sergio's API change
        • This was a major API change
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r3294 r3295  
     12008-01-26  Philip Van Hoof <pvanhoof@gnome.org> 
     2 
     3        * Workaround for a known problem that ain't easy to solve right now: 
     4        expunged headers stay around for too long. When this is detected, a 
     5        dummy header is returned (with as flags TNY_HEADER_FLAG_EXPUNGED) 
     6        * Finished Sergio's API change 
     7 
     8        * This was a major API change 
     9 
    1102008-01-25  Philip Van Hoof <pvanhoof@gnome.org> 
    211 
     
    2837        (thread_main): added the "queue-start" and "queue-stop" signals that 
    2938        are emitted before and after the queue processes the messages 
     39 
     40        * This was a major API change 
    3041 
    31422008-01-22  Philip Van Hoof <pvanhoof@gnome.org> 
  • trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-folder.c

    r3294 r3295  
    12751275        camel_operation_end (NULL); 
    12761276 
    1277         if (type == CAMEL_IMAP_RESPONSE_ERROR) 
    1278         { 
     1277        if (type == CAMEL_IMAP_RESPONSE_ERROR) { 
    12791278                for (i = 0; i < summary_len && new[i].uid; i++) 
    12801279                        g_free (new[i].uid); 
     
    13571356        } 
    13581357 
    1359         if (changes) 
    1360         { 
     1358        if (changes) { 
    13611359                camel_object_trigger_event(CAMEL_OBJECT (folder), "folder_changed", changes); 
    13621360                camel_folder_change_info_free(changes); 
  • trunk/libtinymail-camel/tny-camel-send-queue.c

    r3293 r3295  
    294294        if (apriv) 
    295295                tny_lockable_lock (apriv->session->priv->ui_lock); 
    296         g_signal_emit (info->self, tny_send_queue_signals [info->signal_id], 0);        
     296        g_signal_emit (info->self, tny_send_queue_signals [info->signal_id], 0); 
    297297        if (apriv) 
    298298                tny_lockable_unlock (apriv->session->priv->ui_lock); 
    299299 
    300         return NULL
     300        return FALSE
    301301} 
    302302 
     
    752752 
    753753 
    754 void 
    755 tny_camel_send_queue_add_async (TnyCamelSendQueue *self, TnyMsg *msg, TnySendQueueAddCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     754static void 
     755tny_camel_send_queue_add_async (TnySendQueue *self, TnyMsg *msg, TnySendQueueAddCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    756756{ 
    757757        TNY_CAMEL_SEND_QUEUE_GET_CLASS (self)->add_async_func (self, msg, callback, status_callback, user_data); 
     
    760760 
    761761static void 
    762 tny_camel_send_queue_add_async_default (TnyCamelSendQueue *self, TnyMsg *msg, TnySendQueueAddCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
     762tny_camel_send_queue_add_async_default (TnySendQueue *self, TnyMsg *msg, TnySendQueueAddCallback callback, TnyStatusCallback status_callback, gpointer user_data) 
    763763{ 
    764764        TnyCamelSendQueuePriv *priv = TNY_CAMEL_SEND_QUEUE_GET_PRIVATE (self); 
  • trunk/libtinymail-camel/tny-camel-send-queue.h

    r3283 r3295  
    5454        TnyFolder* (*get_outbox_func) (TnySendQueue *self); 
    5555        void (*cancel_func) (TnySendQueue *self, TnySendQueueCancelAction cancel_action, GError **err); 
    56  
    57         void (*add_async_func) (TnyCamelSendQueue *self, TnyMsg *msg, TnySendQueueAddCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
     56        void (*add_async_func) (TnySendQueue *self, TnyMsg *msg, TnySendQueueAddCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    5857}; 
    5958 
     
    6968                                                 TnyCamelTransportAccount *trans_account); 
    7069 
    71 void tny_camel_send_queue_add_async (TnyCamelSendQueue *self, TnyMsg *msg, TnySendQueueAddCallback callback, TnyStatusCallback status_callback, gpointer user_data); 
    7270 
    7371G_END_DECLS 
  • trunk/libtinymail/Makefile.am

    r3125 r3295  
    5050        tny-merge-folder.h \ 
    5151        tny-combined-account.h \ 
    52         tny-connection-policy.h 
     52        tny-connection-policy.h  
    5353 
    5454libtinymail_1_0_la_SOURCES = \ 
    5555        $(libtinymail_1_0_headers) \ 
     56        tny-expunged-header.c \ 
    5657        tny-signals-marshal.c \ 
    5758        tny-error.c \ 
  • trunk/libtinymail/tny-common-priv.h

    r2825 r3295  
    4848gboolean tny_idle_stopper_is_stopped (TnyIdleStopper* stopper); 
    4949 
     50 
     51 
     52 
     53 
     54#define TNY_TYPE_EXPUNGED_HEADER             (tny_expunged_header_get_type ()) 
     55#define TNY_EXPUNGED_HEADER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), TNY_TYPE_EXPUNGED_HEADER, TnyExpungedHeader)) 
     56#define TNY_EXPUNGED_HEADER_CLASS(vtable)    (G_TYPE_CHECK_CLASS_CAST ((vtable), TNY_TYPE_EXPUNGED_HEADER, TnyExpungedHeaderClass)) 
     57#define TNY_IS_EXPUNGED_HEADER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TNY_TYPE_EXPUNGED_HEADER)) 
     58#define TNY_IS_EXPUNGED_HEADER_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), TNY_TYPE_EXPUNGED_HEADER)) 
     59#define TNY_EXPUNGED_HEADER_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), TNY_TYPE_EXPUNGED_HEADER, TnyExpungedHeaderClass)) 
     60 
     61typedef struct _TnyExpungedHeader TnyExpungedHeader; 
     62typedef struct _TnyExpungedHeaderClass TnyExpungedHeaderClass; 
     63 
     64struct _TnyExpungedHeader { 
     65        GObject parent; 
     66}; 
     67 
     68struct _TnyExpungedHeaderClass { 
     69        GObjectClass parent; 
     70}; 
     71 
     72GType tny_expunged_header_get_type (void); 
     73TnyHeader* tny_expunged_header_new (void); 
     74 
     75 
    5076G_END_DECLS 
    5177 
  • trunk/libtinymailui-gtk/tny-gtk-header-list-model.c

    r3223 r3295  
    5858 
    5959#include "tny-gtk-header-list-iterator-priv.h" 
     60 
     61#define TINYMAIL_ENABLE_PRIVATE_API 
     62#include "tny-common-priv.h" 
     63#undef TINYMAIL_ENABLE_PRIVATE_API 
    6064 
    6165 
     
    301305} 
    302306 
     307 
     308static void  
     309set_dummy (gint column, GValue *value) 
     310{ 
     311        switch (column)  
     312        { 
     313                case TNY_GTK_HEADER_LIST_MODEL_TO_COLUMN: 
     314                case TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN: 
     315                case TNY_GTK_HEADER_LIST_MODEL_FROM_COLUMN: 
     316                case TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_COLUMN: 
     317                case TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_COLUMN: 
     318                case TNY_GTK_HEADER_LIST_MODEL_CC_COLUMN: 
     319                        g_value_init (value, G_TYPE_STRING); 
     320                        g_value_set_string (value, "Expunged"); 
     321                        break; 
     322                case TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN: 
     323                case TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN: 
     324                case TNY_GTK_HEADER_LIST_MODEL_MESSAGE_SIZE_COLUMN: 
     325                        g_value_init (value, G_TYPE_INT); 
     326                        g_value_set_int (value, -1); 
     327                        break; 
     328                case TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN: { 
     329                        static TnyHeader *header = NULL; 
     330                        if (!header)  
     331                                header = tny_expunged_header_new (); 
     332                        g_value_init (value, G_TYPE_OBJECT); 
     333                        g_value_set_object (value, header); 
     334                        } break; 
     335                case TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN: 
     336                        g_value_init (value, G_TYPE_INT); 
     337                        g_value_set_int (value, TNY_HEADER_FLAG_EXPUNGED); 
     338                        break; 
     339                default: 
     340                        break; 
     341        } 
     342} 
     343 
    303344static void 
    304345tny_gtk_header_list_model_get_value (GtkTreeModel *self, GtkTreeIter *iter, gint column, GValue *value) 
     
    310351        gint i; 
    311352 
    312         if (iter->stamp != priv->stamp) 
     353        if (iter->stamp != priv->stamp) { 
     354                g_warning ("GtkTreeModel in invalid state\n"); 
     355                set_dummy (column, value); 
    313356                return; 
     357        } 
    314358 
    315359        g_static_rec_mutex_lock (priv->iterator_lock); 
     
    326370        if (i < 0 || i >= priv->items->len) 
    327371        { 
     372                set_dummy (column, value); 
    328373                g_warning ("GtkTreeModel in invalid state\n"); 
    329374                g_static_rec_mutex_unlock (priv->iterator_lock); 
     
    331376        } 
    332377 
    333         if (priv->items->pdata[i] == NULL) 
     378        if (priv->items->pdata[i] == NULL) { 
     379                g_warning ("GtkTreeModel in invalid state\n"); 
     380                set_dummy (column, value); 
    334381                return; 
     382        } 
     383 
     384        if (!TNY_IS_HEADER (priv->items->pdata[i])) { 
     385                g_warning ("GtkTreeModel in invalid state\n"); 
     386                set_dummy (column, value); 
     387                return; 
     388        } 
    335389 
    336390        switch (column)