/** * g_mime_part_is_attachment: * @mime_part: a #GMimePart object * * Determines whether or not the part is an attachment based on the * value of the Content-Disposition header. * * Returns: %TRUE if the part is an attachment, otherwise %FALSE. * * Since: 2.6.21 **/ gboolean g_mime_part_is_attachment (GMimePart *mime_part) { GMimeContentDisposition *disposition; g_return_val_if_fail (GMIME_IS_PART (mime_part), FALSE); disposition = g_mime_object_get_content_disposition ((GMimeObject *) mime_part); return disposition != NULL && g_mime_content_disposition_is_attachment (disposition); }
static void test_disposition_sync (void) { GMimeContentDisposition *disposition; const char *raw_value, *value; GMimeHeaderList *headers; GMimeParamList *params; GMimeObject *object; GMimeHeader *header; GMimePart *part; object = (GMimeObject *) (part = g_mime_part_new ()); headers = g_mime_object_get_header_list (object); testsuite_check ("content-disposition synchronization"); try { g_mime_object_set_disposition (object, "attachment"); /* first, check that the current Content-Disposition header * value is "application/octet-stream" as expected */ if (!(value = g_mime_object_get_header (object, "Content-Disposition"))) throw (exception_new ("initial content-disposition header was unexpectedly null")); if (strcmp ("attachment", value) != 0) throw (exception_new ("initial content-disposition header had unexpected value: %s", value)); header = g_mime_header_list_get_header (headers, "Content-Disposition"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("initial content-disposition raw_value was unexpectedly null")); if (strcmp (" attachment\n", raw_value) != 0) throw (exception_new ("initial content-disposition raw_value had unexpected value: %s", raw_value)); /* now change the content-disposition's disposition */ disposition = g_mime_object_get_content_disposition (object); g_mime_content_disposition_set_disposition (disposition, "inline"); if (!(value = g_mime_object_get_header (object, "Content-Disposition"))) throw (exception_new ("content-disposition header was unexpectedly null after changing type")); if (strcmp ("inline", value) != 0) throw (exception_new ("content-disposition header had unexpected value after changing type")); header = g_mime_header_list_get_header (headers, "Content-Disposition"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("content-disposition raw_value was unexpectedly null after changing type")); if (strcmp (" inline\n", raw_value) != 0) throw (exception_new ("content-disposition raw_value had unexpected value after changing type: %s", raw_value)); /* now change the content-disposition's parameters by setting a param */ g_mime_content_disposition_set_parameter (disposition, "filename", "hello.txt"); if (!(value = g_mime_object_get_header (object, "Content-Disposition"))) throw (exception_new ("content-disposition header was unexpectedly null after setting a param")); if (strcmp ("inline; filename=hello.txt", value) != 0) throw (exception_new ("content-disposition header had unexpected value after setting a param")); header = g_mime_header_list_get_header (headers, "Content-Disposition"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("content-disposition raw_value was unexpectedly null after setting a param")); if (strcmp (" inline; filename=hello.txt\n", raw_value) != 0) throw (exception_new ("content-disposition raw_value had unexpected value after setting a param: %s", raw_value)); /* now change the content-disposition's parameters by clearing the params */ params = g_mime_content_disposition_get_parameters (disposition); g_mime_param_list_clear (params); if (!(value = g_mime_object_get_header (object, "Content-Disposition"))) throw (exception_new ("content-disposition header was unexpectedly null after clearing params")); if (strcmp ("inline", value) != 0) throw (exception_new ("content-disposition header had unexpected value after clearing params")); header = g_mime_header_list_get_header (headers, "Content-Disposition"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("content-disposition raw_value was unexpectedly null after clearing params")); if (strcmp (" inline\n", raw_value) != 0) throw (exception_new ("content-disposition raw_value had unexpected value after clearing params: %s", raw_value)); /* let's try this in reverse... set the header value and make sure GMimeContentDisposition gets updated */ header = g_mime_header_list_get_header_at (headers, 1); g_mime_header_set_value (header, NULL, "attachment; filename=xyz", NULL); disposition = g_mime_object_get_content_disposition (object); if (!g_mime_content_disposition_is_attachment (disposition)) throw (exception_new ("GMimeContentDisposition object was not updated")); header = g_mime_header_list_get_header (headers, "Content-Disposition"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("content-disposition raw_value was unexpectedly null after setting value")); if (strcmp (" attachment; filename=xyz\n", raw_value) != 0) throw (exception_new ("content-disposition raw_value had unexpected value after setting value: %s", raw_value)); testsuite_check_passed (); } catch (ex) { testsuite_check_failed ("content-disposition header not synchronized: %s", ex->message); } finally; g_object_unref (part); }