static gboolean check_header_in_message_info (CamelMessageInfo *info, gint argc, struct _CamelSExpResult **argv, camel_search_match_t how, gboolean *matched) { struct _KnownHeaders { const gchar *header_name; guint info_key; } known_headers[] = { { "Subject", CAMEL_MESSAGE_INFO_SUBJECT }, { "From", CAMEL_MESSAGE_INFO_FROM }, { "To", CAMEL_MESSAGE_INFO_TO }, { "Cc", CAMEL_MESSAGE_INFO_CC } }; camel_search_t type = CAMEL_SEARCH_TYPE_ENCODED; const gchar *name, *value; gboolean found = FALSE; gint ii; g_return_val_if_fail (argc > 1, FALSE); g_return_val_if_fail (argv != NULL, FALSE); g_return_val_if_fail (matched != NULL, FALSE); if (!info) return FALSE; name = argv[0]->value.string; g_return_val_if_fail (name != NULL, FALSE); value = NULL; for (ii = 0; ii < G_N_ELEMENTS (known_headers); ii++) { found = g_ascii_strcasecmp (name, known_headers[ii].header_name) == 0; if (found) { value = camel_message_info_ptr (info, known_headers[ii].info_key); if (known_headers[ii].info_key == CAMEL_MESSAGE_INFO_FROM || known_headers[ii].info_key == CAMEL_MESSAGE_INFO_TO || known_headers[ii].info_key == CAMEL_MESSAGE_INFO_CC) type = CAMEL_SEARCH_TYPE_ADDRESS_ENCODED; break; } } if (!found || !value) return FALSE; for (ii = 1; ii < argc && !*matched; ii++) { if (argv[ii]->type == CAMEL_SEXP_RES_STRING) *matched = camel_search_header_match (value, argv[ii]->value.string, how, type, NULL); } return TRUE; }
static gconstpointer vee_info_ptr (const CamelMessageInfo *mi, gint id) { CamelVeeMessageInfo *vmi = (CamelVeeMessageInfo *) mi; CamelMessageInfo *rmi; gpointer p; rmi = camel_folder_summary_uid (vmi->summary, mi->uid+8); HANDLE_NULL_INFO (NULL); p = (gpointer) camel_message_info_ptr (rmi, id); camel_message_info_free (rmi); return p; }