aboutsummaryrefslogblamecommitdiffstats
path: root/em-format/e-mail-part-attachment.c
blob: 21b138c0ad117e57572d00e6e2b1f6456c821bb6 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11


                           


                                                                           
  



                                                                             
  

                                                                           




                                   































































                                                                         
 




                                         
 


















                                                                           
         
















































                                                                              
 



                                                                 
                                                                      
 
                                                     

 
/*
 * 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.
 *
 * 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 General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 *
 */

#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);
}