aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mail-remote/e-corba-utils.c
blob: 545ac425e35880206e04aaada259b05a9fc8d160 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

#include "e-corba-utils.h"

#include "evolution-mail-store.h"
#include "evolution-mail-folder.h"

#include <camel/camel-folder-summary.h>

void
e_mail_property_set_string(GNOME_Evolution_Mail_Property *prop, const char *name, const char *val)
{
    prop->value._release = CORBA_TRUE;
    prop->value._type = TC_CORBA_string;
    prop->value._value = CORBA_sequence_CORBA_string_allocbuf(1);
    ((char **)prop->value._value)[0] = CORBA_string_dup(val);
    prop->name = CORBA_string_dup(name);
}

void
e_mail_property_set_null(GNOME_Evolution_Mail_Property *prop, const char *name)
{
    prop->value._release = CORBA_TRUE;
    prop->value._type = TC_null;
    prop->name = CORBA_string_dup(name);
}

void
e_mail_storeinfo_set_store(GNOME_Evolution_Mail_StoreInfo *si, EvolutionMailStore *store)
{
    si->name = CORBA_string_dup(evolution_mail_store_get_name(store));
    si->uid = CORBA_string_dup(evolution_mail_store_get_uid(store));
    si->store = CORBA_Object_duplicate(bonobo_object_corba_objref((BonoboObject *)store), NULL);
}

void
e_mail_messageinfo_set_message(GNOME_Evolution_Mail_MessageInfo *mi, CamelMessageInfo *info)
{
    const CamelTag *tag;
    const CamelFlag *flag;
    int i;

    mi->uid = CORBA_string_dup(camel_message_info_uid(info));
    mi->subject = CORBA_string_dup(camel_message_info_subject(info));
    mi->to = CORBA_string_dup(camel_message_info_to(info));
    mi->from = CORBA_string_dup(camel_message_info_from(info));
    mi->flags = camel_message_info_flags(info);

    flag = camel_message_info_user_flags(info);
    mi->userFlags._maximum = camel_flag_list_size((CamelFlag **)&flag);
    mi->userFlags._length = mi->userFlags._maximum;
    if (mi->userFlags._maximum) {
        mi->userFlags._buffer = GNOME_Evolution_Mail_UserFlags_allocbuf(mi->userFlags._maximum);
        CORBA_sequence_set_release(&mi->userFlags, CORBA_TRUE);

        for (i=0;flag;flag = flag->next,i++) {
            mi->userFlags._buffer[i] = CORBA_string_dup(flag->name);
            g_assert(mi->userFlags._buffer[i]);
        }
    }

    tag = camel_message_info_user_tags(info);
    mi->userTags._maximum = camel_tag_list_size((CamelTag **)&tag);
    mi->userTags._length = mi->userTags._maximum;
    if (mi->userTags._maximum) {
        mi->userTags._buffer = GNOME_Evolution_Mail_UserTags_allocbuf(mi->userTags._maximum);
        CORBA_sequence_set_release(&mi->userFlags, CORBA_TRUE);

        for (i=0;tag;tag = tag->next,i++) {
            mi->userTags._buffer[i].name = CORBA_string_dup(tag->name);
            mi->userTags._buffer[i].value = CORBA_string_dup(tag->value);
            g_assert(mi->userTags._buffer[i].name);
            g_assert(mi->userTags._buffer[i].value);
        }
    }
}

void
e_mail_folderinfo_set_folder(GNOME_Evolution_Mail_FolderInfo *fi, EvolutionMailFolder *emf)
{
    fi->name = CORBA_string_dup(emf->name);
    fi->full_name = CORBA_string_dup(emf->full_name);
    fi->folder = CORBA_Object_duplicate(bonobo_object_corba_objref((BonoboObject *)emf), NULL);
}

int
e_stream_bonobo_to_camel(Bonobo_Stream in, CamelStream *out)
{
    Bonobo_Stream_iobuf *buf;
    CORBA_Environment ev;
    int go;

    do {
        Bonobo_Stream_read(in, 4096, &buf, &ev);
        if (ev._major != CORBA_NO_EXCEPTION) {
            printf("stream read failed: %s\n", ev._id);
            CORBA_exception_free(&ev);
            return -1;
        }

        go = buf->_length > 0;
        if (go && camel_stream_write(out, buf->_buffer, buf->_length) == -1) {
            CORBA_free(buf);
            return -1;
        }

        CORBA_free(buf);
    } while (go);

    camel_stream_reset(out);

    return 0;
}