Changeset 1437

Show
Ignore:
Timestamp:
01/21/07 17:51:22
Author:
pvanhoof
Message:

Several bugfixes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r1430 r1437  
     12007-01-21  Philip Van Hoof <pvanhoof@gnome.org> 
     2 
     3        * Preperation for notification of changes in folders, mostly bugfixes 
     4        * Important bugfix for camel-folder-summar.c when creating new 
     5        CamelMessageInfo instances without having a summary instance (the size 
     6        was too small) 
     7        * Compile with -DIM_TESTING in the CFLAGS to see the TnyFolderMonitor 
     8        in action already 
     9 
    1102007-01-19  Philip Van Hoof <pvanhoof@gnome.org> 
    211 
  • trunk/libtinymail-camel/camel-lite/camel/camel-folder-summary.c

    r1435 r1437  
    10491049camel_folder_summary_info_new_from_header_with_uid (CamelFolderSummary *s, struct _camel_header_raw *h, const gchar *uid) 
    10501050{ 
    1051         CamelMessageInfo *mi = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_new_from_header(s, h); 
    1052         CamelMessageInfoBase *bi = (CamelMessageInfoBase *)mi; 
     1051 
     1052        CamelMessageInfo *mi; 
     1053        CamelMessageInfoBase *bi; 
     1054 
     1055        if (s != NULL) 
     1056                mi = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_new_from_header(s, h); 
     1057        else  
     1058                mi = message_info_new_from_header(s, h); 
     1059 
     1060        bi = (CamelMessageInfoBase *)mi; 
    10531061 
    10541062        if (bi->uid && (bi->flags & CAMEL_MESSAGE_INFO_UID_NEEDS_FREE)) 
     
    18081816        guchar digest[16]; 
    18091817        struct _camel_header_references *refs, *irt, *scan; 
    1810         char *msgid
     1818        char *msgid, *r=NULL
    18111819        int count; 
    1812         char *subject, *from, *to, *cc, *mlist; 
     1820        char *subject, *from, *to, *cc; 
     1821#ifdef NON_TINYMAIL_FEATURES 
     1822        char *mlist; 
     1823#endif 
    18131824        CamelContentType *ct = NULL; 
    18141825        const char *content, *charset = NULL; 
     
    18291840        to = summary_format_address(h, "to", charset); 
    18301841        cc = summary_format_address(h, "cc", charset); 
     1842 
     1843#ifdef NON_TINYMAIL_FEATURES 
    18311844        mlist = camel_header_raw_check_mailing_list(&h); 
     1845#endif 
    18321846 
    18331847        if (ct) 
     
    18361850        if (subject) 
    18371851                mi->subject = camel_pstring_add (subject, TRUE); 
    1838         else mi->subject = NULL; 
     1852        else  
     1853                mi->subject = camel_pstring_add (g_strdup (""), TRUE); 
    18391854 
    18401855        if (from) 
    18411856                mi->from = camel_pstring_add (from, TRUE); 
    1842         else mi->from = NULL; 
     1857        else  
     1858                mi->from = camel_pstring_add (g_strdup (""), TRUE); 
    18431859 
    18441860        if (to) 
    18451861                mi->to = camel_pstring_add (to, TRUE); 
    1846         else mi->to = NULL; 
     1862        else  
     1863                mi->to = camel_pstring_add (g_strdup (""), TRUE); 
    18471864 
    18481865        if (cc) 
    18491866                mi->cc = camel_pstring_add (cc, TRUE); 
    1850         else mi->cc = NULL; 
     1867        else  
     1868                mi->cc = camel_pstring_add (g_strdup (""), TRUE); 
    18511869 
    18521870#ifdef NON_TINYMAIL_FEATURES 
    18531871        if (mlist) 
    18541872                mi->mlist = camel_pstring_add (mlist, TRUE); 
    1855         else mi->mlist = NULL; 
     1873        else  
     1874                mi->mlist = camel_pstring_add (g_strdup (""), TRUE); 
    18561875 
    18571876        mi->user_flags = NULL; 
     
    18631882 
    18641883        if (received) 
    1865                 received = strrchr(received, ';'); 
    1866         if (received) 
    1867                 mi->date_received = camel_header_decode_date(received + 1, NULL); 
    1868         else 
     1884                r = strrchr(received, ';'); 
     1885        if (r) 
     1886                mi->date_received = camel_header_decode_date(r + 1, NULL); 
     1887 
     1888        else if (received) 
     1889                mi->date_received = camel_header_decode_date(received, NULL); 
     1890        else  
    18691891                mi->date_received = 0; 
    18701892 
    18711893        msgid = camel_header_msgid_decode(camel_header_raw_find(&h, "message-id", NULL)); 
    1872         if (msgid) { 
     1894        if (msgid)  
     1895        { 
    18731896                md5_get_digest(msgid, strlen(msgid), digest); 
    18741897                memcpy(mi->message_id.id.hash, digest, sizeof(mi->message_id.id.hash)); 
     
    29712994                info = g_slice_alloc0(s->message_info_size); 
    29722995        else 
    2973                 info = g_slice_new0(CamelMessageInfo); 
     2996                info = (CamelMessageInfo *) g_slice_new0(CamelMessageInfoBase); 
    29742997 
    29752998        info->refcount = 1; 
  • trunk/libtinymail-camel/tny-camel-folder.c

    r1432 r1437  
    8181*/ 
    8282 
     83#ifdef IM_TESTING 
     84static void  
     85add_dummy_test_header (TnyFolder *self, TnyFolderChange *change) 
     86{ 
     87        TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 
     88        TnyHeader *hdr_addded = tny_camel_header_new (); 
     89        CamelMessageInfo *added; 
     90        struct _camel_header_raw *headers = NULL; 
     91        static int nextuid = 0; 
     92 
     93        gchar *uid = g_strdup_printf ("%d", nextuid); 
     94 
     95        camel_header_raw_clear(&headers); 
     96        camel_header_raw_append(&headers, "From", "me@me.com", -1); 
     97        camel_header_raw_append(&headers, "Cc", "me@cc.com", -1); 
     98        camel_header_raw_append(&headers, "To", "me@to.com", -1); 
     99        camel_header_raw_append(&headers, "Subject", "Test subject", -1); 
     100        camel_header_raw_append(&headers, "Date", "Fri, 19 Jan 2007 20:31:12 +0100", -1); 
     101        camel_header_raw_append(&headers, "Received", "Fri, 19 Jan 2007 20:31:12 +0100", -1); 
     102        camel_header_raw_append(&headers, "Message-Id", "MyMEID", -1); 
     103        camel_header_raw_append(&headers, "Content-Type", "text/plain; charset=utf-8", -1); 
     104 
     105        /* For removals, just fill in the uid (and use NULL for headers) */ 
     106        added = camel_folder_summary_info_new_from_header_with_uid (NULL, headers, uid); 
     107        g_free (uid); nextuid++; 
     108 
     109        ((CamelMessageInfoBase *) added)->size = 1024; 
     110        camel_message_info_set_flags (added, 1, ~0); 
     111 
     112        /* Prepare the TnyHeader instance (it becomes the owner too) */ 
     113        _tny_camel_header_set_as_memory (TNY_CAMEL_HEADER (hdr_addded), added); 
     114 
     115        /* Add it to the TnyFolderChange */ 
     116        tny_folder_change_add_added_header (change, hdr_addded); 
     117 
     118        g_object_unref (G_OBJECT (hdr_addded)); 
     119} 
     120 
     121#endif 
     122 
    83123static void 
    84124notify_observers_about (TnyFolder *self, TnyFolderChange *change) 
     
    93133                tny_folder_observer_update (observer, change); 
    94134                g_object_unref (G_OBJECT (observer)); 
     135                tny_iterator_next (iter); 
    95136        } 
    96137        g_object_unref (G_OBJECT (iter)); 
     
    98139 
    99140static void 
    100 on_header_got_added (TnyCamelFolder *self
     141on_header_got_added (TnyCamelFolder *self, TnyHeader *added_header
    101142{ 
    102143        TnyFolderChange *change = tny_folder_change_new (TNY_FOLDER (self)); 
    103         TnyHeader *hdr_addded = tny_camel_header_new (); 
    104         CamelMessageInfo *added; 
    105         struct _camel_header_raw *headers = NULL; 
    106  
    107         camel_header_raw_clear(&headers); 
    108         camel_header_raw_append(&headers, "From", "me@me.com", -1); 
    109         camel_header_raw_append(&headers, "Cc", "me@me.com", -1); 
    110         camel_header_raw_append(&headers, "To", "me@me.com", -1); 
    111         camel_header_raw_append(&headers, "Subject", "me@me.com", -1); 
    112         camel_header_raw_append(&headers, "Date", "Fri, 19 Jan 2007 20:31:12 +0100", -1); 
    113         camel_header_raw_append(&headers, "Received", "Fri, 19 Jan 2007 20:31:12 +0100", -1); 
    114  
    115         /* For removals, just fill in the uid (and use NULL for headers) */ 
    116         added = camel_folder_summary_info_new_from_header_with_uid (NULL, headers, "1"); 
    117         ((CamelMessageInfoBase *) added)->size = 1024; 
    118         camel_message_info_set_flags (added, 1, ~0); 
    119  
    120         /* Prepare the TnyHeader instance (it becomes the owner too) */ 
    121         _tny_camel_header_set_as_memory (TNY_CAMEL_HEADER (hdr_addded), added); 
    122  
    123         /* Add it to the TnyFolderChange */ 
    124         tny_folder_change_add_added_header (change, hdr_addded); 
     144 
     145#ifdef IM_TESTING 
     146        add_dummy_test_header (TNY_FOLDER (self), change); /* added_header*/ 
     147#endif 
    125148 
    126149        /* And notify everybody about this great event! */ 
    127150        notify_observers_about (TNY_FOLDER (self), change); 
    128151 
    129         g_object_unref (G_OBJECT (hdr_addded)); 
    130152        g_object_unref (G_OBJECT (change)); 
    131153} 
     
    21922214        TnyFolderChange *change = tny_folder_change_new (self); 
    21932215 
     2216#ifdef IM_TESTING 
     2217        add_dummy_test_header (self, change); 
     2218#endif 
     2219 
    21942220        notify_observers_about (self, change); 
    21952221 
  • trunk/libtinymail-camel/tny-camel-header.c

    r1433 r1437  
    6262destroy_mem (TnyCamelHeader *self) 
    6363{ 
     64printf ("D\n"); 
    6465        camel_message_info_free ((CamelMessageInfo*) self->info); 
    6566        self->info = NULL; 
  • trunk/libtinymail/tny-folder-monitor.c

    r1431 r1437  
    111111        TnyFolderMonitorPriv *priv = TNY_FOLDER_MONITOR_GET_PRIVATE (self); 
    112112 
    113         g_mutex_lock (priv->lock); 
    114113        if (priv->folder && TNY_IS_FOLDER (priv->folder)) 
    115114                tny_folder_poke_status (priv->folder); 
    116         g_mutex_unlock (priv->lock); 
    117115 
    118116        return; 
     
    138136                tny_list_prepend (list, G_OBJECT (header)); 
    139137                g_object_unref (G_OBJECT (list)); 
     138                tny_iterator_next (iter); 
    140139        } 
    141140        g_object_unref (G_OBJECT (iter)); 
     
    155154                        break; 
    156155                g_object_unref (G_OBJECT (header)); 
     156                tny_iterator_next (iter); 
    157157        } 
    158158        g_object_unref (G_OBJECT (iter)); 
     
    176176                remove_header_from_list (list, uid); 
    177177                g_object_unref (G_OBJECT (list)); 
     178                tny_iterator_next (iter); 
    178179        } 
    179180        g_object_unref (G_OBJECT (iter)); 
     
    198199                foreach_list_add_header (priv, header); 
    199200                g_object_unref (G_OBJECT (header)); 
     201                tny_iterator_next (iter); 
    200202        } 
    201203        g_object_unref (G_OBJECT (iter)); 
     
    211213                foreach_list_remove_header (priv, tny_header_get_uid (header)); 
    212214                g_object_unref (G_OBJECT (header)); 
     215                tny_iterator_next (iter); 
    213216        } 
    214217        g_object_unref (G_OBJECT (iter)); 
     
    292295        klass->update_func = tny_folder_monitor_update_default; 
    293296        klass->poke_status_func = tny_folder_monitor_poke_status_default; 
     297        klass->add_list_func = tny_folder_monitor_add_list_default; 
    294298 
    295299        object_class->finalize = tny_folder_monitor_finalize; 
  • trunk/tests/functional/folder-lister.c

    r1336 r1437  
    6060                g_object_unref (G_OBJECT (folder)); 
    6161 
    62                 tny_iterator_next (iter);           
     62                tny_iterator_next (iter); 
    6363        } 
    6464 
  • trunk/tests/functional/msg-transfer.c

    r1336 r1437  
    6868                g_object_unref (G_OBJECT (folder)); 
    6969 
    70                 tny_iterator_next (iter);           
     70                tny_iterator_next (iter); 
    7171        } 
    7272 
  • trunk/tinymail/tny-demoui-summary-view.c

    r1419 r1437  
    7777#include <tny-camel-send-queue.h> 
    7878#include <tny-camel-transport-account.h> 
     79#include <tny-folder-monitor.h> 
    7980 
    8081static TnySendQueue *queue = NULL; 
     
    9798        guint connchanged_signal, online_button_signal; 
    9899        TnyList *current_accounts; 
     100        TnyFolderMonitor *monitor; GMutex *monitor_lock; 
     101        guint monitor_timeout; gboolean monitor_continue; 
    99102}; 
    100103 
     
    386389} 
    387390 
     391static gboolean 
     392check_new_messages (gpointer user_data) 
     393{ 
     394        TnyDemouiSummaryViewPriv *priv = user_data; 
     395        gboolean retval = FALSE; 
     396 
     397        //g_mutex_lock (priv->monitor_lock); 
     398        retval = priv->monitor_continue; 
     399        if (retval) { 
     400                g_print ("Check for new messages\n"); 
     401                tny_folder_monitor_poke_status (priv->monitor); 
     402        } else  
     403                priv->monitor_timeout = 0; 
     404        //g_mutex_unlock (priv->monitor_lock); 
     405 
     406        return priv->monitor_continue; 
     407} 
     408 
    388409static void 
    389410refresh_current_folder (TnyFolder *folder, gboolean cancelled, GError **err, gpointer user_data) 
     
    416437                        NULL, NULL); 
    417438 
    418                 set_header_view_model (header_view, sortable);           
     439                set_header_view_model (header_view, sortable); 
     440 
     441                //g_mutex_lock (priv->monitor_lock); 
     442                if (priv->monitor) 
     443                        g_object_unref (G_OBJECT (priv->monitor)); 
     444                priv->monitor = TNY_FOLDER_MONITOR (tny_folder_monitor_new (folder)); 
     445                tny_folder_monitor_add_list (priv->monitor, TNY_LIST (model)); 
     446                priv->monitor_continue = TRUE; 
     447                if (priv->monitor_timeout == 0) 
     448                        priv->monitor_timeout = g_timeout_add (5000, check_new_messages, priv); 
     449                //g_mutex_unlock (priv->monitor_lock); 
    419450 
    420451                g_idle_add (cleanup_statusbar, priv); 
     
    638669        /* TODO: Persist application UI status (of the panes) */ 
    639670 
     671        priv->monitor_lock = g_mutex_new (); 
     672        priv->monitor_timeout = 0; 
     673        priv->monitor = NULL; 
     674        priv->monitor_continue = FALSE; 
     675 
    640676        priv->last_mailbox_correct_select_set = FALSE; 
    641677        priv->online_button = gtk_toggle_button_new (); 
     
    857893                g_object_unref (G_OBJECT (priv->account_store)); 
    858894        } 
     895 
     896        g_mutex_lock (priv->monitor_lock); 
     897        priv->monitor_continue = FALSE; 
     898        if (priv->monitor) 
     899                g_object_unref (G_OBJECT (priv->monitor)); 
     900        g_mutex_unlock (priv->monitor_lock); 
     901 
     902        g_mutex_free (priv->monitor_lock); 
    859903 
    860904        (*parent_class->finalize) (object);