static ESource * guess_mail_account_from_message (ESourceRegistry *registry, CamelMimeMessage *message) { ESource *source = NULL; const gchar *uid; /* Lookup an ESource by 'X-Evolution-Source' header. */ uid = camel_mime_message_get_source (message); if (uid != NULL) source = e_source_registry_ref_source (registry, uid); /* If we found an ESource, make sure it's a mail account. */ if (source != NULL) { const gchar *extension_name; extension_name = E_SOURCE_EXTENSION_MAIL_ACCOUNT; if (!e_source_has_extension (source, extension_name)) { g_object_unref (source); source = NULL; } } return source; }
static CamelSExpResult * header_source (struct _CamelSExp *f, gint argc, struct _CamelSExpResult **argv, FilterMessageSearch *fms) { CamelMimeMessage *message; CamelSExpResult *r; const gchar *src; CamelService *msg_source = NULL; gboolean truth = FALSE; if (fms->source) { src = fms->source; } else { message = camel_filter_search_get_message (fms, f); src = camel_mime_message_get_source (message); } if (src) msg_source = ref_service_for_source (fms->session, src); if (msg_source != NULL) { gint ii; for (ii = 0; ii < argc && !truth; ii++) { if (argv[ii]->type == CAMEL_SEXP_RES_STRING) { CamelService *candidate; candidate = ref_service_for_source ( fms->session, argv[ii]->value.string); if (candidate != NULL) { truth = (msg_source == candidate); g_object_unref (candidate); } } } g_object_unref (msg_source); } r = camel_sexp_result_new (f, CAMEL_SEXP_RES_BOOL); r->value.boolean = truth; return r; }