void test_message_info (CamelMimeMessage *msg, const CamelMessageInfo *info) { check_msg (safe_strcmp (camel_message_info_subject (info), camel_mime_message_get_subject (msg)) == 0, "info->subject = '%s', get_subject () = '%s'", camel_message_info_subject (info), camel_mime_message_get_subject (msg)); /* FIXME: testing from/cc/to, etc is more tricky */ check (camel_message_info_date_sent (info) == camel_mime_message_get_date (msg, NULL)); /* date received isn't set for messages that haven't been sent anywhere ... */ /*check (info->date_received == camel_mime_message_get_date_received (msg, NULL));*/ /* so is messageid/references, etc */ }
static void mail_browser_set_message (EMailReader *reader, const gchar *uid) { EMailReaderInterface *iface; EMailBrowser *browser; CamelMessageInfo *info; CamelFolder *folder; browser = E_MAIL_BROWSER (reader); /* Chain up to parent's set_message() method. */ iface = g_type_default_interface_peek (E_TYPE_MAIL_READER); iface->set_message (reader, uid); if (uid == NULL) { e_mail_browser_close (browser); return; } folder = e_mail_reader_ref_folder (reader); info = camel_folder_get_message_info (folder, uid); if (info != NULL) { gtk_window_set_title ( GTK_WINDOW (reader), camel_message_info_subject (info)); camel_message_info_unref (info); } g_clear_object (&folder); }
static void emmb_set_message (EMFolderView *emfv, const gchar *uid, gint nomarkseen) { EMMessageBrowser *emmb = EM_MESSAGE_BROWSER (emfv); EMFolderViewClass *folder_view_class; CamelMessageInfo *info; /* Chain up to parent's set_message() method. */ folder_view_class = EM_FOLDER_VIEW_CLASS (parent_class); folder_view_class->set_message (emfv, uid, nomarkseen); if (uid == NULL) { gtk_widget_destroy (GTK_WIDGET (emfv)); return; } info = camel_folder_get_message_info (emfv->folder, uid); if (info != NULL) { gtk_window_set_title ( GTK_WINDOW (emmb->window), camel_message_info_subject (info)); camel_folder_free_message_info (emfv->folder, info); } /* Well we don't know if it got displayed (yet) ... but whatever ... */ if (!nomarkseen) camel_folder_set_message_flags ( emfv->folder, uid, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN); }
static void mail_browser_message_selected_cb (EMailBrowser *browser, const gchar *uid) { CamelMessageInfo *info; CamelFolder *folder; EMailReader *reader; guint32 state; reader = E_MAIL_READER (browser); state = e_mail_reader_check_state (reader); e_mail_reader_update_actions (reader, state); if (uid == NULL) return; folder = e_mail_reader_ref_folder (reader); info = camel_folder_get_message_info (folder, uid); if (info != NULL) { EMailDisplay *display; const gchar *title; display = e_mail_reader_get_mail_display (reader); title = camel_message_info_subject (info); if (title == NULL || *title == '\0') title = _("(No Subject)"); gtk_window_set_title (GTK_WINDOW (browser), title); gtk_widget_grab_focus (GTK_WIDGET (display)); camel_message_info_set_flags ( info, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN); camel_message_info_unref (info); } g_clear_object (&folder); }
static void emmb_list_message_selected_cb (struct _MessageList *ml, const gchar *uid, EMMessageBrowser *emmb) { EMFolderView *emfv = EM_FOLDER_VIEW (emmb); CamelMessageInfo *info; if (uid == NULL) return; info = camel_folder_get_message_info (emfv->folder, uid); if (info == NULL) return; gtk_window_set_title ( GTK_WINDOW (emmb->window), camel_message_info_subject (info)); gtk_widget_grab_focus ( GTK_WIDGET (emfv->preview->formathtml.html)); camel_folder_free_message_info (emfv->folder, info); }
/* this should probably take a folder instead of a session ... */ void test_folder_message_ops (CamelSession *session, const gchar *name, gint local, const gchar *mailbox) { CamelStore *store; CamelFolder *folder; CamelMimeMessage *msg; gint j; gint indexed, max; GPtrArray *uids; CamelMessageInfo *info; GError *error = NULL; max=local?2:1; for (indexed = 0;indexed<max;indexed++) { gchar *what = g_strdup_printf ("folder ops: %s %s", name, local?(indexed?"indexed":"non-indexed"):""); gint flags; camel_test_start (what); test_free (what); push ("getting store"); store = camel_session_get_store (session, name, &error); check_msg (error == NULL, "getting store: %s", error->message); check (store != NULL); g_clear_error (&error); pull (); push ("creating %sindexed folder", indexed?"":"non-"); if (indexed) flags = CAMEL_STORE_FOLDER_CREATE|CAMEL_STORE_FOLDER_BODY_INDEX; else flags = CAMEL_STORE_FOLDER_CREATE; folder = camel_store_get_folder_sync ( store, mailbox, flags, NULL, &error); /* we can't create mailbox outside of namespace, since we have no api for it, try using inbox namespace, works for courier */ if (folder == NULL) { gchar *mbox = g_strdup_printf ("INBOX/%s", mailbox); mailbox = mbox; g_clear_error (&error); folder = camel_store_get_folder_sync ( store, mailbox, flags, NULL, &error); } check_msg (error == NULL, "%s", error->message); check (folder != NULL); /* verify empty/can't get nonexistant stuff */ test_folder_counts (folder, 0, 0); test_folder_not_message (folder, "0"); test_folder_not_message (folder, ""); for (j=0;j<10;j++) { gchar *content, *subject; push ("creating test message"); msg = test_message_create_simple (); content = g_strdup_printf ("Test message %d contents\n\n", j); test_message_set_content_simple ((CamelMimePart *)msg, 0, "text/plain", content, strlen (content)); test_free (content); subject = g_strdup_printf ("Test message %d", j); camel_mime_message_set_subject (msg, subject); pull (); push ("appending simple message %d", j); camel_folder_append_message_sync ( folder, msg, NULL, NULL, NULL, &error); check_msg (error == NULL, "%s", error->message); #if 0 /* sigh, this shouldn't be required, but the imap code is too dumb to do it itself */ if (!local) { push ("forcing a refresh of folder updates"); camel_folder_refresh_info (folder, ex); check_msg (error == NULL, "%s", error->message); pull (); } #endif /*if (!local) camel_test_nonfatal ("unread counts dont seem right for imap");*/ test_folder_counts (folder, j+1, j+1); /*if (!local) camel_test_fatal ();*/ push ("checking it is in the right uid slot & exists"); uids = camel_folder_get_uids (folder); check (uids != NULL); check (uids->len == j+1); if (uids->len > j) test_folder_message (folder, uids->pdata[j]); pull (); push ("checking it is the right message (subject): %s", subject); if (uids->len > j) { info = camel_folder_get_message_info (folder, uids->pdata[j]); check (info != NULL); check_msg (strcmp (camel_message_info_subject (info), subject)==0, "info->subject %s", camel_message_info_subject (info)); camel_folder_free_message_info (folder, info); } camel_folder_free_uids (folder, uids); pull (); test_free (subject); /*if (!local) camel_test_fatal ();*/ check_unref (msg, 1); pull (); } if (local) check_unref (folder, 1); else check_unref (folder, 2); pull (); #if 0 push ("deleting test folder, with messages in it"); camel_store_delete_folder (store, mailbox, ex); check (camel_exception_is_set (ex)); camel_exception_clear (ex); pull (); #endif push ("re-opening folder"); folder = camel_store_get_folder_sync ( store, mailbox, flags, NULL, &error); check_msg (error == NULL, "%s", error->message); check (folder != NULL); g_clear_error (&error); /* verify counts */ test_folder_counts (folder, 10, 10); /* re-check uid's, after a reload */ uids = camel_folder_get_uids (folder); check (uids != NULL); check (uids->len == 10); for (j=0;j<10;j++) { gchar *subject = g_strdup_printf ("Test message %d", j); push ("verify reload of %s", subject); test_folder_message (folder, uids->pdata[j]); info = camel_folder_get_message_info (folder, uids->pdata[j]); check_msg (strcmp (camel_message_info_subject (info), subject)==0, "info->subject %s", camel_message_info_subject (info)); test_free (subject); camel_folder_free_message_info (folder, info); pull (); } push ("deleting first message & expunging"); camel_folder_delete_message (folder, uids->pdata[0]); test_folder_counts (folder, 10, 9); camel_folder_expunge_sync (folder, NULL, &error); check_msg (error == NULL, "%s", error->message); g_clear_error (&error); test_folder_not_message (folder, uids->pdata[0]); test_folder_counts (folder, 9, 9); camel_folder_free_uids (folder, uids); uids = camel_folder_get_uids (folder); check (uids != NULL); check (uids->len == 9); for (j=0;j<9;j++) { gchar *subject = g_strdup_printf ("Test message %d", j+1); push ("verify after expunge of %s", subject); test_folder_message (folder, uids->pdata[j]); info = camel_folder_get_message_info (folder, uids->pdata[j]); check_msg (strcmp (camel_message_info_subject (info), subject)==0, "info->subject %s", camel_message_info_subject (info)); test_free (subject); camel_folder_free_message_info (folder, info); pull (); } pull (); push ("deleting last message & expunging"); camel_folder_delete_message (folder, uids->pdata[8]); /* sync? */ test_folder_counts (folder, 9, 8); camel_folder_expunge_sync (folder, NULL, &error); check_msg (error == NULL, "%s", error->message); g_clear_error (&error); test_folder_not_message (folder, uids->pdata[8]); test_folder_counts (folder, 8, 8); camel_folder_free_uids (folder, uids); uids = camel_folder_get_uids (folder); check (uids != NULL); check (uids->len == 8); for (j=0;j<8;j++) { gchar *subject = g_strdup_printf ("Test message %d", j+1); push ("verify after expunge of %s", subject); test_folder_message (folder, uids->pdata[j]); info = camel_folder_get_message_info (folder, uids->pdata[j]); check_msg (strcmp (camel_message_info_subject (info), subject)==0, "info->subject %s", camel_message_info_subject (info)); test_free (subject); camel_folder_free_message_info (folder, info); pull (); } pull (); push ("deleting all messages & expunging"); for (j=0;j<8;j++) { camel_folder_delete_message (folder, uids->pdata[j]); } /* sync? */ test_folder_counts (folder, 8, 0); camel_folder_expunge_sync (folder, NULL, &error); check_msg (error == NULL, "%s", error->message); g_clear_error (&error); for (j=0;j<8;j++) { test_folder_not_message (folder, uids->pdata[j]); } test_folder_counts (folder, 0, 0); camel_folder_free_uids (folder, uids); pull (); if (local) check_unref (folder, 1); else check_unref (folder, 2); pull (); /* re-opening folder */ if (g_ascii_strcasecmp (mailbox, "INBOX") != 0) { push ("deleting test folder, with no messages in it"); camel_store_delete_folder_sync ( store, mailbox, NULL, &error); check_msg (error == NULL, "%s", error->message); g_clear_error (&error); pull (); } if (!local) { push ("disconneect service"); camel_service_disconnect_sync ( CAMEL_SERVICE (store), TRUE, &error); check_msg (error == NULL, "%s", error->message); g_clear_error (&error); pull (); } check_unref (store, 1); camel_test_end (); } }