Changeset 1437
- Timestamp:
- 01/21/07 17:51:22
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/libtinymail-camel/camel-lite/camel/camel-folder-summary.c (modified) (6 diffs)
- trunk/libtinymail-camel/tny-camel-folder.c (modified) (4 diffs)
- trunk/libtinymail-camel/tny-camel-header.c (modified) (1 diff)
- trunk/libtinymail/tny-folder-monitor.c (modified) (7 diffs)
- trunk/tests/functional/folder-lister.c (modified) (1 diff)
- trunk/tests/functional/msg-transfer.c (modified) (1 diff)
- trunk/tinymail/tny-demoui-summary-view.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r1430 r1437 1 2007-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 1 10 2007-01-19 Philip Van Hoof <pvanhoof@gnome.org> 2 11 trunk/libtinymail-camel/camel-lite/camel/camel-folder-summary.c
r1435 r1437 1049 1049 camel_folder_summary_info_new_from_header_with_uid (CamelFolderSummary *s, struct _camel_header_raw *h, const gchar *uid) 1050 1050 { 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; 1053 1061 1054 1062 if (bi->uid && (bi->flags & CAMEL_MESSAGE_INFO_UID_NEEDS_FREE)) … … 1808 1816 guchar digest[16]; 1809 1817 struct _camel_header_references *refs, *irt, *scan; 1810 char *msgid ;1818 char *msgid, *r=NULL; 1811 1819 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 1813 1824 CamelContentType *ct = NULL; 1814 1825 const char *content, *charset = NULL; … … 1829 1840 to = summary_format_address(h, "to", charset); 1830 1841 cc = summary_format_address(h, "cc", charset); 1842 1843 #ifdef NON_TINYMAIL_FEATURES 1831 1844 mlist = camel_header_raw_check_mailing_list(&h); 1845 #endif 1832 1846 1833 1847 if (ct) … … 1836 1850 if (subject) 1837 1851 mi->subject = camel_pstring_add (subject, TRUE); 1838 else mi->subject = NULL; 1852 else 1853 mi->subject = camel_pstring_add (g_strdup (""), TRUE); 1839 1854 1840 1855 if (from) 1841 1856 mi->from = camel_pstring_add (from, TRUE); 1842 else mi->from = NULL; 1857 else 1858 mi->from = camel_pstring_add (g_strdup (""), TRUE); 1843 1859 1844 1860 if (to) 1845 1861 mi->to = camel_pstring_add (to, TRUE); 1846 else mi->to = NULL; 1862 else 1863 mi->to = camel_pstring_add (g_strdup (""), TRUE); 1847 1864 1848 1865 if (cc) 1849 1866 mi->cc = camel_pstring_add (cc, TRUE); 1850 else mi->cc = NULL; 1867 else 1868 mi->cc = camel_pstring_add (g_strdup (""), TRUE); 1851 1869 1852 1870 #ifdef NON_TINYMAIL_FEATURES 1853 1871 if (mlist) 1854 1872 mi->mlist = camel_pstring_add (mlist, TRUE); 1855 else mi->mlist = NULL; 1873 else 1874 mi->mlist = camel_pstring_add (g_strdup (""), TRUE); 1856 1875 1857 1876 mi->user_flags = NULL; … … 1863 1882 1864 1883 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 1869 1891 mi->date_received = 0; 1870 1892 1871 1893 msgid = camel_header_msgid_decode(camel_header_raw_find(&h, "message-id", NULL)); 1872 if (msgid) { 1894 if (msgid) 1895 { 1873 1896 md5_get_digest(msgid, strlen(msgid), digest); 1874 1897 memcpy(mi->message_id.id.hash, digest, sizeof(mi->message_id.id.hash)); … … 2971 2994 info = g_slice_alloc0(s->message_info_size); 2972 2995 else 2973 info = g_slice_new0(CamelMessageInfo);2996 info = (CamelMessageInfo *) g_slice_new0(CamelMessageInfoBase); 2974 2997 2975 2998 info->refcount = 1; trunk/libtinymail-camel/tny-camel-folder.c
r1432 r1437 81 81 */ 82 82 83 #ifdef IM_TESTING 84 static void 85 add_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 83 123 static void 84 124 notify_observers_about (TnyFolder *self, TnyFolderChange *change) … … 93 133 tny_folder_observer_update (observer, change); 94 134 g_object_unref (G_OBJECT (observer)); 135 tny_iterator_next (iter); 95 136 } 96 137 g_object_unref (G_OBJECT (iter)); … … 98 139 99 140 static void 100 on_header_got_added (TnyCamelFolder *self )141 on_header_got_added (TnyCamelFolder *self, TnyHeader *added_header) 101 142 { 102 143 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 125 148 126 149 /* And notify everybody about this great event! */ 127 150 notify_observers_about (TNY_FOLDER (self), change); 128 151 129 g_object_unref (G_OBJECT (hdr_addded));130 152 g_object_unref (G_OBJECT (change)); 131 153 } … … 2192 2214 TnyFolderChange *change = tny_folder_change_new (self); 2193 2215 2216 #ifdef IM_TESTING 2217 add_dummy_test_header (self, change); 2218 #endif 2219 2194 2220 notify_observers_about (self, change); 2195 2221 trunk/libtinymail-camel/tny-camel-header.c
r1433 r1437 62 62 destroy_mem (TnyCamelHeader *self) 63 63 { 64 printf ("D\n"); 64 65 camel_message_info_free ((CamelMessageInfo*) self->info); 65 66 self->info = NULL; trunk/libtinymail/tny-folder-monitor.c
r1431 r1437 111 111 TnyFolderMonitorPriv *priv = TNY_FOLDER_MONITOR_GET_PRIVATE (self); 112 112 113 g_mutex_lock (priv->lock);114 113 if (priv->folder && TNY_IS_FOLDER (priv->folder)) 115 114 tny_folder_poke_status (priv->folder); 116 g_mutex_unlock (priv->lock);117 115 118 116 return; … … 138 136 tny_list_prepend (list, G_OBJECT (header)); 139 137 g_object_unref (G_OBJECT (list)); 138 tny_iterator_next (iter); 140 139 } 141 140 g_object_unref (G_OBJECT (iter)); … … 155 154 break; 156 155 g_object_unref (G_OBJECT (header)); 156 tny_iterator_next (iter); 157 157 } 158 158 g_object_unref (G_OBJECT (iter)); … … 176 176 remove_header_from_list (list, uid); 177 177 g_object_unref (G_OBJECT (list)); 178 tny_iterator_next (iter); 178 179 } 179 180 g_object_unref (G_OBJECT (iter)); … … 198 199 foreach_list_add_header (priv, header); 199 200 g_object_unref (G_OBJECT (header)); 201 tny_iterator_next (iter); 200 202 } 201 203 g_object_unref (G_OBJECT (iter)); … … 211 213 foreach_list_remove_header (priv, tny_header_get_uid (header)); 212 214 g_object_unref (G_OBJECT (header)); 215 tny_iterator_next (iter); 213 216 } 214 217 g_object_unref (G_OBJECT (iter)); … … 292 295 klass->update_func = tny_folder_monitor_update_default; 293 296 klass->poke_status_func = tny_folder_monitor_poke_status_default; 297 klass->add_list_func = tny_folder_monitor_add_list_default; 294 298 295 299 object_class->finalize = tny_folder_monitor_finalize; trunk/tests/functional/folder-lister.c
r1336 r1437 60 60 g_object_unref (G_OBJECT (folder)); 61 61 62 tny_iterator_next (iter); 62 tny_iterator_next (iter); 63 63 } 64 64 trunk/tests/functional/msg-transfer.c
r1336 r1437 68 68 g_object_unref (G_OBJECT (folder)); 69 69 70 tny_iterator_next (iter); 70 tny_iterator_next (iter); 71 71 } 72 72 trunk/tinymail/tny-demoui-summary-view.c
r1419 r1437 77 77 #include <tny-camel-send-queue.h> 78 78 #include <tny-camel-transport-account.h> 79 #include <tny-folder-monitor.h> 79 80 80 81 static TnySendQueue *queue = NULL; … … 97 98 guint connchanged_signal, online_button_signal; 98 99 TnyList *current_accounts; 100 TnyFolderMonitor *monitor; GMutex *monitor_lock; 101 guint monitor_timeout; gboolean monitor_continue; 99 102 }; 100 103 … … 386 389 } 387 390 391 static gboolean 392 check_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 388 409 static void 389 410 refresh_current_folder (TnyFolder *folder, gboolean cancelled, GError **err, gpointer user_data) … … 416 437 NULL, NULL); 417 438 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); 419 450 420 451 g_idle_add (cleanup_statusbar, priv); … … 638 669 /* TODO: Persist application UI status (of the panes) */ 639 670 671 priv->monitor_lock = g_mutex_new (); 672 priv->monitor_timeout = 0; 673 priv->monitor = NULL; 674 priv->monitor_continue = FALSE; 675 640 676 priv->last_mailbox_correct_select_set = FALSE; 641 677 priv->online_button = gtk_toggle_button_new (); … … 857 893 g_object_unref (G_OBJECT (priv->account_store)); 858 894 } 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); 859 903 860 904 (*parent_class->finalize) (object);
