/* * e-mail-part-attachment.c * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with the program; if not, see * */ #include "e-mail-part-attachment.h" #define E_MAIL_PART_ATTACHMENT_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE \ ((obj), E_TYPE_MAIL_PART_ATTACHMENT, EMailPartAttachmentPrivate)) struct _EMailPartAttachmentPrivate { EAttachment *attachment; }; enum { PROP_0, PROP_ATTACHMENT }; G_DEFINE_TYPE ( EMailPartAttachment, e_mail_part_attachment, E_TYPE_MAIL_PART) static void mail_part_attachment_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { switch (property_id) { case PROP_ATTACHMENT: g_value_take_object ( value, e_mail_part_attachment_ref_attachment ( E_MAIL_PART_ATTACHMENT (object))); return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } static void mail_part_attachment_dispose (GObject *object) { EMailPartAttachmentPrivate *priv; priv = E_MAIL_PART_ATTACHMENT_GET_PRIVATE (object); g_clear_object (&priv->attachment); /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (e_mail_part_attachment_parent_class)-> dispose (object); } static void mail_part_attachment_finalize (GObject *object) { EMailPartAttachment *part = E_MAIL_PART_ATTACHMENT (object); g_free (part->attachment_view_part_id); /* Chain up to parent's finalize() method. */ G_OBJECT_CLASS (e_mail_part_attachment_parent_class)-> finalize (object); } static void mail_part_attachment_constructed (GObject *object) { EMailPartAttachmentPrivate *priv; CamelMimePart *mime_part; EAttachment *attachment; EMailPart *part; const gchar *cid; part = E_MAIL_PART (object); priv = E_MAIL_PART_ATTACHMENT_GET_PRIVATE (object); /* Chain up to parent's constructed() method. */ G_OBJECT_CLASS (e_mail_part_attachment_parent_class)-> constructed (object); e_mail_part_set_mime_type (part, E_MAIL_PART_ATTACHMENT_MIME_TYPE); e_mail_part_set_is_attachment (part, TRUE); mime_part = e_mail_part_ref_mime_part (part); cid = camel_mime_part_get_content_id (mime_part); if (cid != NULL) { gchar *cid_uri; cid_uri = g_strconcat ("cid:", cid, NULL); e_mail_part_set_cid (part, cid_uri); g_free (cid_uri); } attachment = e_attachment_new (); e_attachment_set_mime_part (attachment, mime_part); priv->attachment = g_object_ref (attachment); g_object_unref (attachment); g_object_unref (mime_part); } static void e_mail_part_attachment_class_init (EMailPartAttachmentClass *class) { GObjectClass *object_class; g_type_class_add_private (class, sizeof (EMailPartAttachmentPrivate)); object_class = G_OBJECT_CLASS (class); object_class->get_property = mail_part_attachment_get_property; object_class->dispose = mail_part_attachment_dispose; object_class->finalize = mail_part_attachment_finalize; object_class->constructed = mail_part_attachment_constructed; g_object_class_install_property ( object_class, PROP_ATTACHMENT, g_param_spec_object ( "attachment", "Attachment", "The attachment object", E_TYPE_ATTACHMENT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); } static void e_mail_part_attachment_init (EMailPartAttachment *part) { part->priv = E_MAIL_PART_ATTACHMENT_GET_PRIVATE (part); } EMailPartAttachment * e_mail_part_attachment_new (CamelMimePart *mime_part, const gchar *id) { g_return_val_if_fail (id != NULL, NULL); return g_object_new ( E_TYPE_MAIL_PART_ATTACHMENT, "id", id, "mime-part", mime_part, NULL); } EAttachment * e_mail_part_attachment_ref_attachment (EMailPartAttachment *part) { g_return_val_if_fail (E_IS_MAIL_PART_ATTACHMENT (part), NULL); return g_object_ref (part->priv->attachment); }