[balsa/wip/gtk4: 262/351] message: Declare it final
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 262/351] message: Declare it final
- Date: Wed, 23 May 2018 21:38:59 +0000 (UTC)
commit af79159b97d4984a1fadc0e25afd09265a5e2577
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Thu Mar 29 16:19:44 2018 -0400
message: Declare it final
Use G_DECLARE_FINAL_TYPE for LibBalsaMessage, make it
private, and provide a complete set of getters and setters.
libbalsa/body.c | 39 +-
libbalsa/filter.c | 43 +-
libbalsa/mailbox.c | 82 ++--
libbalsa/mailbox_imap.c | 154 +++--
libbalsa/mailbox_local.c | 77 ++-
libbalsa/mailbox_maildir.c | 16 +-
libbalsa/mailbox_mbox.c | 52 +-
libbalsa/mailbox_mh.c | 25 +-
libbalsa/message.c | 1264 +++++++++++++++++++++++++------------
libbalsa/message.h | 358 +++++------
libbalsa/rfc3156.c | 10 +-
libbalsa/send.c | 214 ++++---
libbalsa/source-viewer.c | 16 +-
src/balsa-message.c | 108 ++--
src/balsa-mime-widget-message.c | 8 +-
src/balsa-mime-widget-text.c | 7 +-
src/balsa-mime-widget-vcalendar.c | 32 +-
src/balsa-mime-widget.c | 2 +-
src/balsa-print-object-header.c | 8 +-
src/main-window.c | 2 +-
src/message-window.c | 36 +-
src/print-gtk.c | 13 +-
src/sendmsg-window.c | 323 ++++++----
src/store-address.c | 13 +-
24 files changed, 1776 insertions(+), 1126 deletions(-)
---
diff --git a/libbalsa/body.c b/libbalsa/body.c
index d93e942..27656c0 100644
--- a/libbalsa/body.c
+++ b/libbalsa/body.c
@@ -213,9 +213,11 @@ libbalsa_message_body_set_multipart(LibBalsaMessageBody * body,
static void
libbalsa_message_body_set_text_rfc822headers(LibBalsaMessageBody *body)
{
+ LibBalsaMailbox *mailbox;
GMimeStream *headers;
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ mailbox = libbalsa_message_get_mailbox(body->message);
+ libbalsa_mailbox_lock_store(mailbox);
headers = libbalsa_message_body_get_stream(body, NULL);
if (headers != NULL) {
@@ -232,7 +234,7 @@ libbalsa_message_body_set_text_rfc822headers(LibBalsaMessageBody *body)
g_object_unref(dummy_msg);
}
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
}
static void
@@ -507,6 +509,8 @@ libbalsa_message_body_get_part_stream(LibBalsaMessageBody * body,
GMimeStream *stream_null;
GMimeStream *stream_filter;
GMimeFilter *filter_windows;
+ LibBalsaMailbox *mailbox;
+
stream_null = g_mime_stream_null_new();
stream_filter = g_mime_stream_filter_new(stream_null);
@@ -516,10 +520,11 @@ libbalsa_message_body_get_part_stream(LibBalsaMessageBody * body,
g_mime_stream_filter_add(GMIME_STREAM_FILTER(stream_filter),
filter_windows);
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ mailbox = libbalsa_message_get_mailbox(body->message);
+ libbalsa_mailbox_lock_store(mailbox);
g_mime_stream_reset(stream);
g_mime_stream_write_to_stream(stream, stream_filter);
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
g_object_unref(stream_filter);
charset = g_mime_filter_windows_real_charset(GMIME_FILTER_WINDOWS
@@ -543,15 +548,17 @@ libbalsa_message_body_get_message_part_stream(LibBalsaMessageBody * body,
GError ** err)
{
GMimeStream *stream;
+ LibBalsaMailbox *mailbox;
ssize_t bytes_written;
GMimeMessage *msg = g_mime_message_part_get_message
(GMIME_MESSAGE_PART(body->mime_part));
stream = g_mime_stream_mem_new();
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ mailbox = libbalsa_message_get_mailbox(body->message);
+ libbalsa_mailbox_lock_store(mailbox);
bytes_written =
g_mime_object_write_to_stream(GMIME_OBJECT(msg), stream);
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
printf("Written %ld bytes of embedded message\n",
(long) bytes_written);
@@ -573,7 +580,7 @@ libbalsa_message_body_get_stream(LibBalsaMessageBody * body, GError **err)
g_return_val_if_fail(body != NULL, NULL);
g_return_val_if_fail(body->message != NULL, NULL);
- if (!body->message->mailbox) {
+ if (libbalsa_message_get_mailbox(body->message) == NULL) {
if (err != NULL && *err == NULL) {
g_set_error(err, LIBBALSA_MAILBOX_ERROR,
LIBBALSA_MAILBOX_ACCESS_ERROR,
@@ -620,6 +627,7 @@ libbalsa_message_body_get_content(LibBalsaMessageBody * body, gchar ** buf,
{
GMimeStream *stream, *stream_mem;
GByteArray *array;
+ LibBalsaMailbox *mailbox;
gssize len;
g_return_val_if_fail(body != NULL, -1);
@@ -635,10 +643,11 @@ libbalsa_message_body_get_content(LibBalsaMessageBody * body, gchar ** buf,
stream_mem = g_mime_stream_mem_new_with_byte_array(array);
g_mime_stream_mem_set_owner(GMIME_STREAM_MEM(stream_mem), FALSE);
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ mailbox = libbalsa_message_get_mailbox(body->message);
+ libbalsa_mailbox_lock_store(mailbox);
g_mime_stream_reset(stream);
len = g_mime_stream_write_to_stream(stream, stream_mem);
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
g_object_unref(stream);
g_object_unref(stream_mem);
@@ -662,6 +671,7 @@ GdkPixbuf *
libbalsa_message_body_get_pixbuf(LibBalsaMessageBody * body, GError ** err)
{
GMimeStream *stream;
+ LibBalsaMailbox *mailbox;
gchar *mime_type;
GdkPixbufLoader *loader;
GdkPixbuf *pixbuf = NULL;
@@ -670,7 +680,8 @@ libbalsa_message_body_get_pixbuf(LibBalsaMessageBody * body, GError ** err)
if (!stream)
return pixbuf;
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ mailbox = libbalsa_message_get_mailbox(body->message);
+ libbalsa_mailbox_lock_store(mailbox);
g_mime_stream_reset(stream);
mime_type = libbalsa_message_body_get_mime_type(body);
@@ -704,7 +715,7 @@ libbalsa_message_body_get_pixbuf(LibBalsaMessageBody * body, GError ** err)
g_object_unref(loader);
}
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
g_object_unref(stream);
return pixbuf;
@@ -716,6 +727,7 @@ libbalsa_message_body_save_stream(LibBalsaMessageBody * body,
GError ** err)
{
GMimeStream *stream;
+ LibBalsaMailbox *mailbox;
ssize_t len;
stream = libbalsa_message_body_get_stream(body, err);
@@ -723,7 +735,8 @@ libbalsa_message_body_save_stream(LibBalsaMessageBody * body,
return FALSE;
g_clear_error(err);
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ mailbox = libbalsa_message_get_mailbox(body->message);
+ libbalsa_mailbox_lock_store(mailbox);
if (stream) {
g_mime_stream_reset(stream);
@@ -740,7 +753,7 @@ libbalsa_message_body_save_stream(LibBalsaMessageBody * body,
/* body->mime_part is neither a GMimePart nor a GMimeMessagePart. */
len = g_mime_object_write_to_stream(body->mime_part, dest);
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
g_object_unref(dest);
if (len < 0)
diff --git a/libbalsa/filter.c b/libbalsa/filter.c
index bf78ad9..910775d 100644
--- a/libbalsa/filter.c
+++ b/libbalsa/filter.c
@@ -104,13 +104,15 @@ gboolean
libbalsa_condition_matches(LibBalsaCondition* cond,
LibBalsaMessage * message)
{
+ LibBalsaMessageHeaders *headers;
gboolean match = FALSE;
gchar * str;
GString * body;
gboolean will_ref;
- g_return_val_if_fail(cond, FALSE);
- g_return_val_if_fail(message->headers != NULL, FALSE);
+ g_return_val_if_fail(cond != NULL, FALSE);
+ headers = libbalsa_message_get_headers(message);
+ g_return_val_if_fail(headers != NULL, FALSE);
switch (cond->type) {
case CONDITION_STRING:
@@ -128,20 +130,14 @@ libbalsa_condition_matches(LibBalsaCondition* cond,
}
}
/* do the work */
- if (CONDITION_CHKMATCH(cond,CONDITION_MATCH_TO)
- && message->headers->to_list) {
- str =
- internet_address_list_to_string(message->headers->to_list,
- FALSE);
- match=libbalsa_utf8_strstr(str,cond->match.string.string);
+ if (CONDITION_CHKMATCH(cond,CONDITION_MATCH_TO) && headers->to_list != NULL) {
+ str = internet_address_list_to_string(headers->to_list, FALSE);
+ match = libbalsa_utf8_strstr(str,cond->match.string.string);
g_free(str);
if(match) break;
}
- if (CONDITION_CHKMATCH(cond,CONDITION_MATCH_FROM)
- && message->headers->from) {
- str =
- internet_address_list_to_string(message->headers->from,
- FALSE);
+ if (CONDITION_CHKMATCH(cond,CONDITION_MATCH_FROM) && headers->from != NULL) {
+ str = internet_address_list_to_string(headers->from, FALSE);
match=libbalsa_utf8_strstr(str,cond->match.string.string);
g_free(str);
if (match) break;
@@ -153,11 +149,8 @@ libbalsa_condition_matches(LibBalsaCondition* cond,
break;
}
}
- if (CONDITION_CHKMATCH(cond,CONDITION_MATCH_CC)
- && message->headers->cc_list) {
- str =
- internet_address_list_to_string(message->headers->cc_list,
- FALSE);
+ if (CONDITION_CHKMATCH(cond,CONDITION_MATCH_CC) && headers->cc_list != NULL) {
+ str = internet_address_list_to_string(headers->cc_list, FALSE);
match=libbalsa_utf8_strstr(str,cond->match.string.string);
g_free(str);
if (match) break;
@@ -177,10 +170,10 @@ libbalsa_condition_matches(LibBalsaCondition* cond,
}
}
if (CONDITION_CHKMATCH(cond,CONDITION_MATCH_BODY)) {
- if (!message->mailbox)
+ if (libbalsa_message_get_mailbox(message) == NULL)
return FALSE; /* We don't want to match if an error occurred */
- body =
- content2reply(message->body_list, NULL, 0, FALSE, FALSE);
+ body = content2reply(libbalsa_message_get_body_list(message),
+ NULL, 0, FALSE, FALSE);
if (body) {
if (body->str)
match = libbalsa_utf8_strstr(body->str,
@@ -193,9 +186,9 @@ libbalsa_condition_matches(LibBalsaCondition* cond,
case CONDITION_REGEX:
break;
case CONDITION_DATE:
- match = message->headers->date>=cond->match.date.date_low
+ match = headers->date >= cond->match.date.date_low
&& (cond->match.date.date_high==0 ||
- message->headers->date<=cond->match.date.date_high);
+ headers->date <= cond->match.date.date_high);
break;
case CONDITION_FLAG:
match = LIBBALSA_MESSAGE_HAS_FLAG(message, cond->match.flags);
@@ -371,9 +364,9 @@ libbalsa_condition_can_match(LibBalsaCondition * cond,
switch (cond->type) {
case CONDITION_STRING:
return !(CONDITION_CHKMATCH(cond, CONDITION_MATCH_BODY)
- && message->body_list == NULL)
+ && libbalsa_message_get_body_list(message) == NULL)
&& !(CONDITION_CHKMATCH(cond, CONDITION_MATCH_US_HEAD)
- && message->mime_msg == NULL);
+ && libbalsa_message_get_mime_msg(message) == NULL);
case CONDITION_AND:
case CONDITION_OR:
return libbalsa_condition_can_match(cond->match.andor.left,
diff --git a/libbalsa/mailbox.c b/libbalsa/mailbox.c
index abd592d..b65c166 100644
--- a/libbalsa/mailbox.c
+++ b/libbalsa/mailbox.c
@@ -326,27 +326,29 @@ libbalsa_mailbox_dispose(GObject *object)
static gchar *
-get_from_field(LibBalsaMessage *message)
+get_from_field(LibBalsaMailbox *mailbox,
+ LibBalsaMessage *message)
{
- LibBalsaMailbox *mailbox = message->mailbox;
LibBalsaMailboxPrivate *priv = libbalsa_mailbox_get_instance_private(mailbox);
InternetAddressList *address_list = NULL;
const gchar *name_str = NULL;
gboolean append_dots = FALSE;
gchar *from;
+ LibBalsaMessageHeaders *headers;
- g_return_val_if_fail(message->mailbox, NULL);
+ g_return_val_if_fail(libbalsa_message_get_mailbox(message) != NULL, NULL);
- if (message->headers) {
+ headers = libbalsa_message_get_headers(message);
+ if (headers != NULL) {
if (priv->view &&
(priv->view->show == LB_MAILBOX_SHOW_TO)) {
- address_list = message->headers->to_list;
+ address_list = headers->to_list;
} else {
- address_list = message->headers->from;
+ address_list = headers->from;
}
}
- if (address_list) {
+ if (address_list != NULL) {
gint i, len = internet_address_list_length(address_list);
for (i = 0; i < len && name_str == NULL; i++) {
@@ -396,23 +398,25 @@ get_from_field(LibBalsaMessage *message)
static void
-lbm_index_entry_populate_from_msg(LibBalsaMailboxIndexEntry *entry,
+lbm_index_entry_populate_from_msg(LibBalsaMailbox *mailbox,
+ LibBalsaMailboxIndexEntry *entry,
LibBalsaMessage *msg)
{
- entry->from = get_from_field(msg);
+ entry->from = get_from_field(mailbox, msg);
entry->subject = g_strdup(LIBBALSA_MESSAGE_GET_SUBJECT(msg));
- entry->msg_date = msg->headers->date;
+ entry->msg_date = libbalsa_message_get_headers(msg)->date;
entry->internal_date = 0; /* FIXME */
- entry->status_icon = libbalsa_get_icon_from_flags(msg->flags);
+ entry->status_icon = libbalsa_get_icon_from_flags(libbalsa_message_get_flags(msg));
entry->attach_icon = libbalsa_message_get_attach_icon(msg);
- entry->size = msg->length;
+ entry->size = libbalsa_message_get_length(msg);
entry->foreground = NULL;
entry->background = NULL;
entry->foreground_set = 0;
entry->background_set = 0;
entry->unseen = LIBBALSA_MESSAGE_IS_UNREAD(msg);
entry->idle_pending = 0;
- libbalsa_mailbox_msgno_changed(msg->mailbox, msg->msgno);
+
+ libbalsa_mailbox_msgno_changed(mailbox, libbalsa_message_get_msgno(msg));
}
@@ -1027,7 +1031,7 @@ static void
libbalsa_mailbox_real_release_message(LibBalsaMailbox *mailbox,
LibBalsaMessage *message)
{
- g_clear_object(&message->mime_msg);
+ libbalsa_message_set_mime_msg(message, NULL);
}
@@ -2156,9 +2160,9 @@ lbm_cache_message(LibBalsaMailbox *mailbox,
if (!entry) {
g_ptr_array_index(priv->mindex, msgno - 1) =
entry = g_new(LibBalsaMailboxIndexEntry, 1);
- lbm_index_entry_populate_from_msg(entry, message);
+ lbm_index_entry_populate_from_msg(mailbox, entry, message);
} else if (entry->idle_pending) {
- lbm_index_entry_populate_from_msg(entry, message);
+ lbm_index_entry_populate_from_msg(mailbox, entry, message);
}
}
@@ -2234,11 +2238,9 @@ void
libbalsa_mailbox_release_message(LibBalsaMailbox *mailbox,
LibBalsaMessage *message)
{
- g_return_if_fail(mailbox != NULL);
g_return_if_fail(LIBBALSA_IS_MAILBOX(mailbox));
- g_return_if_fail(message != NULL);
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
- g_return_if_fail(mailbox == message->mailbox);
+ g_return_if_fail(mailbox == libbalsa_message_get_mailbox(message));
g_assert(LIBBALSA_MAILBOX_GET_CLASS(mailbox) != NULL);
LIBBALSA_MAILBOX_GET_CLASS(mailbox)->release_message(mailbox, message);
@@ -2254,9 +2256,9 @@ libbalsa_mailbox_set_msg_headers(LibBalsaMailbox *mailbox,
g_return_if_fail(message != NULL);
g_assert(LIBBALSA_MAILBOX_GET_CLASS(mailbox) != NULL);
- if (!message->has_all_headers) {
+ if (!libbalsa_message_get_has_all_headers(message)) {
LIBBALSA_MAILBOX_GET_CLASS(mailbox)->fetch_headers(mailbox, message);
- message->has_all_headers = 1;
+ libbalsa_message_set_has_all_headers(message, TRUE);
}
}
@@ -2266,14 +2268,16 @@ libbalsa_mailbox_get_message_part(LibBalsaMessage *message,
LibBalsaMessageBody *part,
GError **err)
{
+ LibBalsaMailbox *mailbox;
+
g_return_val_if_fail(message != NULL, FALSE);
- g_return_val_if_fail(message->mailbox != NULL, FALSE);
- g_return_val_if_fail(LIBBALSA_IS_MAILBOX(message->mailbox), FALSE);
- g_assert(LIBBALSA_MAILBOX_GET_CLASS(message->mailbox) != NULL);
+
+ mailbox = libbalsa_message_get_mailbox(message);
+ g_return_val_if_fail(LIBBALSA_IS_MAILBOX(mailbox), FALSE);
+ g_assert(LIBBALSA_MAILBOX_GET_CLASS(mailbox) != NULL);
g_return_val_if_fail(part != NULL, FALSE);
- return LIBBALSA_MAILBOX_GET_CLASS(message->mailbox)
- ->get_message_part(message, part, err);
+ return LIBBALSA_MAILBOX_GET_CLASS(mailbox)->get_message_part(message, part, err);
}
@@ -4403,29 +4407,32 @@ libbalsa_mailbox_set_msg_tree(LibBalsaMailbox *mailbox,
static GMimeMessage *
lbm_get_mime_msg(LibBalsaMailbox *mailbox,
- LibBalsaMessage *msg)
+ LibBalsaMessage *message)
{
GMimeMessage *mime_msg;
- if (!msg->mime_msg) {
- libbalsa_mailbox_fetch_message_structure(mailbox, msg,
+ mime_msg = libbalsa_message_get_mime_msg(message);
+ if (mime_msg == NULL) {
+ libbalsa_mailbox_fetch_message_structure(mailbox, message,
LB_FETCH_RFC822_HEADERS);
}
- mime_msg = msg->mime_msg;
- if (mime_msg) {
+ mime_msg = libbalsa_message_get_mime_msg(message);
+ if (mime_msg != NULL) {
g_object_ref(mime_msg);
} else {
GMimeStream *stream;
GMimeParser *parser;
- stream = libbalsa_mailbox_get_message_stream(mailbox, msg->msgno,
- TRUE);
+ stream =
+ libbalsa_mailbox_get_message_stream(mailbox,
+ libbalsa_message_get_msgno(message),
+ TRUE);
parser = g_mime_parser_new_with_stream(stream);
g_object_unref(stream);
mime_msg = g_mime_parser_construct_message(parser);
g_object_unref(parser);
}
- libbalsa_mailbox_release_message(mailbox, msg);
+ libbalsa_mailbox_release_message(mailbox, message);
return mime_msg;
}
@@ -4554,15 +4561,16 @@ lbm_try_reassemble(LibBalsaMailbox *mailbox,
if (partials->len == total) {
LibBalsaMessage *message = libbalsa_message_new();
- message->flags |= LIBBALSA_MESSAGE_FLAG_NEW;
+
+ libbalsa_message_set_flags(message, LIBBALSA_MESSAGE_FLAG_NEW);
libbalsa_information(LIBBALSA_INFORMATION_MESSAGE,
_("Reconstructing message"));
libbalsa_mailbox_lock_store(mailbox);
- message->mime_msg =
+ libbalsa_message_set_mime_msg(message,
g_mime_message_partial_reconstruct_message((GMimeMessagePartial
**) partials->
- pdata, total);
+ pdata, total));
libbalsa_message_copy(message, mailbox, NULL);
libbalsa_mailbox_unlock_store(mailbox);
diff --git a/libbalsa/mailbox_imap.c b/libbalsa/mailbox_imap.c
index 613d276..a4d7a3e 100644
--- a/libbalsa/mailbox_imap.c
+++ b/libbalsa/mailbox_imap.c
@@ -690,22 +690,25 @@ static void
lbimap_update_flags(LibBalsaMessage *message,
ImapMessage *imsg)
{
- message->flags = 0;
+ LibBalsaMessageFlag flags = 0;
+
if (!IMSG_FLAG_SEEN(imsg->flags)) {
- message->flags |= LIBBALSA_MESSAGE_FLAG_NEW;
+ flags |= LIBBALSA_MESSAGE_FLAG_NEW;
}
if (IMSG_FLAG_DELETED(imsg->flags)) {
- message->flags |= LIBBALSA_MESSAGE_FLAG_DELETED;
+ flags |= LIBBALSA_MESSAGE_FLAG_DELETED;
}
if (IMSG_FLAG_FLAGGED(imsg->flags)) {
- message->flags |= LIBBALSA_MESSAGE_FLAG_FLAGGED;
+ flags |= LIBBALSA_MESSAGE_FLAG_FLAGGED;
}
if (IMSG_FLAG_ANSWERED(imsg->flags)) {
- message->flags |= LIBBALSA_MESSAGE_FLAG_REPLIED;
+ flags |= LIBBALSA_MESSAGE_FLAG_REPLIED;
}
if (IMSG_FLAG_RECENT(imsg->flags)) {
- message->flags |= LIBBALSA_MESSAGE_FLAG_RECENT;
+ flags |= LIBBALSA_MESSAGE_FLAG_RECENT;
}
+
+ libbalsa_message_set_flags(message, flags);
}
@@ -861,18 +864,18 @@ imap_flags_cb(unsigned cnt,
connection is up. */
ImapMessage *imsg =
imap_mbox_handle_get_msg(mimap->handle, seqno[i]);
- if (!imsg) {
+ if (imsg == NULL) {
continue;
}
- flags = msg_info->message->flags;
+ flags = libbalsa_message_get_flags(msg_info->message);
lbimap_update_flags(msg_info->message, imsg);
- if (flags == msg_info->message->flags) {
+ if (flags == libbalsa_message_get_flags(msg_info->message)) {
continue;
}
libbalsa_mailbox_index_set_flags(mailbox, seqno[i],
- msg_info->message->flags);
+ libbalsa_message_get_flags(msg_info->message));
++mimap->search_stamp;
}
}
@@ -1017,8 +1020,8 @@ imap_expunge_cb(ImapMboxHandle *handle,
&g_array_index(mimap->messages_info, struct message_info, i);
g_assert(info != NULL);
- if (info->message) {
- info->message->msgno = i + 1;
+ if (info->message != NULL) {
+ libbalsa_message_set_msgno(info->message, i + 1);
}
}
@@ -1236,8 +1239,8 @@ free_messages_info(LibBalsaMailboxImap *mbox)
gchar *msgid;
struct message_info *msg_info =
&g_array_index(messages_info, struct message_info, i);
- if (msg_info->message) {
- msg_info->message->mailbox = NULL;
+ if (msg_info->message != NULL) {
+ libbalsa_message_set_mailbox(msg_info->message, NULL);
g_object_unref(msg_info->message);
}
msgid = g_ptr_array_index(mbox->msgids, i);
@@ -2238,7 +2241,7 @@ libbalsa_mailbox_imap_load_envelope(LibBalsaMailboxImap *mimap,
gchar *hdr;
g_return_val_if_fail(mimap->opened, FALSE);
- imsg = mi_get_imsg(mimap, message->msgno);
+ imsg = mi_get_imsg(mimap, libbalsa_message_get_msgno(message));
if (!imsg || !imsg->envelope) {
/* Connection severed and and restore
@@ -2249,20 +2252,20 @@ libbalsa_mailbox_imap_load_envelope(LibBalsaMailboxImap *mimap,
lbimap_update_flags(message, imsg);
- lb_set_headers(message->headers, imsg->envelope, FALSE);
+ lb_set_headers(libbalsa_message_get_headers(message), imsg->envelope, FALSE);
if ((hdr = imsg->fetched_header_fields) && *hdr && (*hdr != '\r')) {
libbalsa_message_set_headers_from_string(message, hdr);
}
- envelope = imsg->envelope;
- message->length = imsg->rfc822size;
+ envelope = imsg->envelope;
+ libbalsa_message_set_length(message, imsg->rfc822size);
libbalsa_message_set_subject_from_header(message, envelope->subject);
- message->sender =
- internet_address_new_list_from_imap_address_list(envelope->sender);
- libbalsa_message_set_in_reply_to_from_string(message,
- envelope->in_reply_to);
- if (envelope->message_id) {
- message->message_id =
- g_mime_utils_decode_message_id(envelope->message_id);
+ libbalsa_message_set_sender(message,
+ internet_address_new_list_from_imap_address_list(envelope->sender));
+ libbalsa_message_set_in_reply_to_from_string(message, envelope->in_reply_to);
+ if (envelope->message_id != NULL) {
+ gchar *message_id = g_mime_utils_decode_message_id(envelope->message_id);
+ libbalsa_message_set_message_id(message, message_id);
+ g_free(message_id);
}
return TRUE;
@@ -2285,18 +2288,20 @@ libbalsa_mailbox_imap_get_message(LibBalsaMailbox *mailbox,
}
if (!msg_info->message) {
- LibBalsaMessage *msg = libbalsa_message_new();
- msg->msgno = msgno;
- msg->mailbox = mailbox;
- if (libbalsa_mailbox_imap_load_envelope(mimap, msg)) {
+ LibBalsaMessage *message;
+
+ message = libbalsa_message_new();
+ libbalsa_message_set_msgno(message, msgno);
+ libbalsa_message_set_mailbox(message, mailbox);
+ if (libbalsa_mailbox_imap_load_envelope(mimap, message)) {
gchar *id;
- msg_info->message = msg;
- if (libbalsa_message_is_partial(msg, &id)) {
+ msg_info->message = message;
+ if (libbalsa_message_is_partial(message, &id)) {
libbalsa_mailbox_try_reassemble(mailbox, id);
g_free(id);
}
} else {
- g_object_unref(G_OBJECT(msg));
+ g_object_unref(message);
}
}
if (msg_info->message) {
@@ -2405,14 +2410,17 @@ get_struct_from_cache(LibBalsaMailbox *mailbox,
LibBalsaMessage *message,
LibBalsaFetchFlag flags)
{
- if (!message->mime_msg) {
+ GMimeMessage *mime_msg;
+ LibBalsaMessageHeaders *headers;
+
+ if ((mime_msg = libbalsa_message_get_mime_msg(message)) == NULL) {
gchar **pair, *filename;
int fd;
GMimeStream *stream, *fstream;
GMimeFilter *filter;
GMimeParser *mime_parser;
LibBalsaMailboxImap *mimap = LIBBALSA_MAILBOX_IMAP(mailbox);
- ImapMessage *imsg = mi_get_imsg(mimap, message->msgno);
+ ImapMessage *imsg = mi_get_imsg(mimap, libbalsa_message_get_msgno(message));
if (!imsg) {
return FALSE;
@@ -2440,25 +2448,27 @@ get_struct_from_cache(LibBalsaMailbox *mailbox,
g_object_unref(fstream);
g_mime_parser_set_scan_from(mime_parser, FALSE);
- message->mime_msg = g_mime_parser_construct_message(mime_parser);
+ mime_msg = g_mime_parser_construct_message(mime_parser);
g_object_unref(mime_parser);
+
+ libbalsa_message_set_mime_msg(message, mime_msg);
}
/* follow libbalsa_mailbox_local_fetch_structure here;
* perhaps create common helper */
+ headers = libbalsa_message_get_headers(message);
if (flags & LB_FETCH_STRUCTURE) {
LibBalsaMessageBody *body = libbalsa_message_body_new(message);
libbalsa_message_body_set_mime_body(body,
- message->mime_msg->mime_part);
+ mime_msg->mime_part);
libbalsa_message_append_part(message, body);
- libbalsa_message_headers_from_gmime(message->headers,
- message->mime_msg);
+ libbalsa_message_headers_from_gmime(headers,
+ mime_msg);
}
if (flags & LB_FETCH_RFC822_HEADERS) {
- g_assert(message->headers != NULL);
- message->headers->user_hdrs =
- libbalsa_message_user_hdrs_from_gmime(message->mime_msg);
- message->has_all_headers = 1;
+ g_assert(headers != NULL);
+ headers->user_hdrs = libbalsa_message_user_hdrs_from_gmime(mime_msg);
+ libbalsa_message_set_has_all_headers(message, TRUE);
}
return TRUE;
}
@@ -2472,7 +2482,10 @@ libbalsa_mailbox_imap_fetch_structure(LibBalsaMailbox *mailbox,
ImapResponse rc;
LibBalsaMailboxImap *mimap = LIBBALSA_MAILBOX_IMAP(mailbox);
LibBalsaServer *server;
+ LibBalsaMessageHeaders *headers;
+ glong msgno;
ImapFetchType ift = 0;
+
g_return_val_if_fail(mimap->opened, FALSE);
/* Work around some server bugs by fetching the RFC2822 form of
@@ -2484,17 +2497,19 @@ libbalsa_mailbox_imap_fetch_structure(LibBalsaMailbox *mailbox,
parts yet. Also, we save some RTTS for very small messages by
fetching them in their entirety. */
server = LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox);
+ headers = libbalsa_message_get_headers(message);
+ msgno = libbalsa_message_get_msgno(message);
if (!imap_mbox_handle_can_do(mimap->handle, IMCAP_FETCHBODY) ||
libbalsa_imap_server_has_bug(LIBBALSA_IMAP_SERVER(server),
ISBUG_FETCH) ||
(LIBBALSA_MESSAGE_GET_LENGTH(message) < 8192) ||
- (message->headers &&
- (!message->headers->content_type ||
- g_mime_content_type_is_type(message->headers->content_type, "text", "*")))) {
+ (headers != NULL &&
+ (headers->content_type == NULL ||
+ g_mime_content_type_is_type(headers->content_type, "text", "*")))) {
/* we could optimize this part a little bit: we do not need to
* keep reopening the stream. */
GMimeStream *stream =
- libbalsa_mailbox_imap_get_message_stream(mailbox, message->msgno,
+ libbalsa_mailbox_imap_get_message_stream(mailbox, msgno,
FALSE);
if (!stream) { /* oops, connection broken or the message disappeared? */
return FALSE;
@@ -2514,12 +2529,10 @@ libbalsa_mailbox_imap_fetch_structure(LibBalsaMailbox *mailbox,
}
II(rc, mimap->handle,
- imap_mbox_handle_fetch_range(mimap->handle, message->msgno,
- message->msgno, ift));
+ imap_mbox_handle_fetch_range(mimap->handle, msgno, msgno, ift));
if (rc == IMR_OK) { /* translate ImapData to LibBalsaMessage */
gchar *hdr;
- ImapMessage *im = imap_mbox_handle_get_msg(mimap->handle,
- message->msgno);
+ ImapMessage *im = imap_mbox_handle_get_msg(mimap->handle, msgno);
/* in case of msg number discrepancies: */
g_return_val_if_fail(im != NULL, FALSE);
if (flags & LB_FETCH_STRUCTURE) {
@@ -2530,7 +2543,7 @@ libbalsa_mailbox_imap_fetch_structure(LibBalsaMailbox *mailbox,
if ((flags & LB_FETCH_RFC822_HEADERS) &&
(hdr = im->fetched_header_fields) && *hdr && (*hdr != '\r')) {
libbalsa_message_set_headers_from_string(message, hdr);
- message->has_all_headers = 1;
+ libbalsa_message_set_has_all_headers(message, TRUE);
}
return TRUE;
}
@@ -2545,16 +2558,15 @@ libbalsa_mailbox_imap_fetch_headers(LibBalsaMailbox *mailbox,
{
LibBalsaMailboxImap *mimap = LIBBALSA_MAILBOX_IMAP(mailbox);
ImapResponse rc;
+ glong msgno;
+ msgno = libbalsa_message_get_msgno(message);
II(rc, mimap->handle,
- imap_mbox_handle_fetch_range(mimap->handle,
- message->msgno,
- message->msgno,
+ imap_mbox_handle_fetch_range(mimap->handle, msgno, msgno,
IMFETCH_RFC822HEADERS_SELECTED));
if (rc == IMR_OK) { /* translate ImapData to LibBalsaMessage */
const gchar *hdr;
- ImapMessage *im = imap_mbox_handle_get_msg(mimap->handle,
- message->msgno);
+ ImapMessage *im = imap_mbox_handle_get_msg(mimap->handle, msgno);
if ((hdr = im->fetched_header_fields) && *hdr && (*hdr != '\r')) {
libbalsa_message_set_headers_from_string(message, hdr);
}
@@ -2628,20 +2640,20 @@ print_structure(LibBalsaMessageBody *part,
#endif
static gchar *
-get_section_for(LibBalsaMessage *msg,
+get_section_for(LibBalsaMessage *message,
LibBalsaMessageBody *part)
{
GString *section = g_string_new("");
LibBalsaMessageBody *parent;
- parent = msg->body_list;
+ parent = libbalsa_message_get_body_list(message);
if (libbalsa_message_body_is_multipart(parent)) {
parent = parent->parts;
}
if (!is_child_of(parent, part, section, TRUE)) {
- g_warning("Internal error, part %p not found in msg %p.\n",
- part, msg);
+ g_warning("Internal error, part %p not found in message %p.\n",
+ part, message);
g_string_free(section, TRUE);
return g_strdup("1");
}
@@ -2717,17 +2729,17 @@ get_parent(LibBalsaMessageBody *root,
static gboolean
-lbm_imap_get_msg_part_from_cache(LibBalsaMessage *msg,
+lbm_imap_get_msg_part_from_cache(LibBalsaMessage *message,
LibBalsaMessageBody *part,
GError **err)
{
GMimeStream *partstream = NULL;
-
gchar **pair, *part_name;
- LibBalsaMailboxImap *mimap = LIBBALSA_MAILBOX_IMAP(msg->mailbox);
+ LibBalsaMailbox *mailbox = libbalsa_message_get_mailbox(message);
+ LibBalsaMailboxImap *mimap = LIBBALSA_MAILBOX_IMAP(mailbox);
FILE *fp;
gchar *section;
- ImapMessage *imsg = mi_get_imsg(mimap, msg->msgno);
+ ImapMessage *imsg = mi_get_imsg(mimap, libbalsa_message_get_msgno(message));
if (!imsg) {
g_set_error(err,
@@ -2738,7 +2750,7 @@ lbm_imap_get_msg_part_from_cache(LibBalsaMessage *msg,
}
/* look for a part cache */
- section = get_section_for(msg, part);
+ section = get_section_for(message, part);
pair = get_cache_name_pair(mimap, "part", imsg->uid);
part_name = g_strconcat(pair[0], G_DIR_SEPARATOR_S,
pair[1], "-", section, NULL);
@@ -2750,8 +2762,7 @@ lbm_imap_get_msg_part_from_cache(LibBalsaMessage *msg,
ImapResponse rc;
LibBalsaMessageBody *parent;
- libbalsa_lock_mailbox(msg->mailbox);
- mimap = LIBBALSA_MAILBOX_IMAP(msg->mailbox);
+ libbalsa_lock_mailbox(mailbox);
dt.body = imap_message_get_body_from_section(imsg, section);
if (!dt.body) {
@@ -2775,7 +2786,7 @@ lbm_imap_get_msg_part_from_cache(LibBalsaMessage *msg,
* which has no headers. In this case, we have to fake them.
* We could and probably should dump there first the headers
* that we have already fetched... */
- parent = get_parent(msg->body_list, part, NULL);
+ parent = get_parent(libbalsa_message_get_body_list(message), part, NULL);
if (parent == NULL) {
ifbo = IMFB_NONE;
} else {
@@ -2788,13 +2799,14 @@ lbm_imap_get_msg_part_from_cache(LibBalsaMessage *msg,
rc = IMR_OK;
if (dt.body->octets > 0) {
II(rc, mimap->handle,
- imap_mbox_handle_fetch_body(mimap->handle, msg->msgno,
+ imap_mbox_handle_fetch_body(mimap->handle,
+ libbalsa_message_get_msgno(message),
section, FALSE, ifbo, append_str, &dt));
}
- libbalsa_unlock_mailbox(msg->mailbox);
+ libbalsa_unlock_mailbox(mailbox);
if (rc != IMR_OK) {
fprintf(stderr, "Error fetching imap message no %lu section %s\n",
- msg->msgno, section);
+ libbalsa_message_get_msgno(message), section);
g_free(dt.block);
g_free(section);
g_strfreev(pair);
diff --git a/libbalsa/mailbox_local.c b/libbalsa/mailbox_local.c
index 2683868..7f09344 100644
--- a/libbalsa/mailbox_local.c
+++ b/libbalsa/mailbox_local.c
@@ -337,9 +337,9 @@ lbm_local_get_message_with_msg_info(LibBalsaMailboxLocal *local,
g_object_add_weak_pointer(G_OBJECT(message),
(gpointer) & msg_info->message);
- message->flags = msg_info->flags & LIBBALSA_MESSAGE_FLAGS_REAL;
- message->mailbox = LIBBALSA_MAILBOX(local);
- message->msgno = msgno;
+ libbalsa_message_set_flags(message, msg_info->flags & LIBBALSA_MESSAGE_FLAGS_REAL);
+ libbalsa_message_set_mailbox(message, LIBBALSA_MAILBOX(local));
+ libbalsa_message_set_msgno(message, msgno);
libbalsa_message_load_envelope(message);
lbml_add_message_to_pool(local, message);
}
@@ -912,6 +912,7 @@ message_match_real(LibBalsaMailbox *mailbox,
LibBalsaMailboxLocalInfo *info =
msgno <= priv->threading_info->len ?
g_ptr_array_index(priv->threading_info, msgno - 1) : NULL;
+ LibBalsaMessageHeaders *headers;
/* We may be able to match the msgno from info cached in entry or
* info; if those are NULL, we'll need to fetch the message, so we
@@ -930,6 +931,9 @@ message_match_real(LibBalsaMailbox *mailbox,
return FALSE; /* Can't match. */
}
+
+ headers = libbalsa_message_get_headers(message);
+
switch (cond->type) {
case CONDITION_STRING:
if (CONDITION_CHKMATCH(cond, (CONDITION_MATCH_TO |
@@ -954,10 +958,9 @@ message_match_real(LibBalsaMailbox *mailbox,
/* do the work */
if (CONDITION_CHKMATCH(cond, CONDITION_MATCH_TO)) {
g_assert(is_refed);
- if (message->headers->to_list) {
+ if (headers->to_list != NULL) {
gchar *str =
- internet_address_list_to_string(message->headers->
- to_list, FALSE);
+ internet_address_list_to_string(headers->to_list, FALSE);
match =
libbalsa_utf8_strstr(str, cond->match.string.string);
g_free(str);
@@ -982,10 +985,9 @@ message_match_real(LibBalsaMailbox *mailbox,
}
if (CONDITION_CHKMATCH(cond, CONDITION_MATCH_CC)) {
g_assert(is_refed);
- if (message->headers->cc_list) {
+ if (headers->cc_list != NULL) {
gchar *str =
- internet_address_list_to_string(message->headers->
- cc_list, FALSE);
+ internet_address_list_to_string(headers->cc_list, FALSE);
match =
libbalsa_utf8_strstr(str, cond->match.string.string);
g_free(str);
@@ -1018,12 +1020,13 @@ message_match_real(LibBalsaMailbox *mailbox,
if (CONDITION_CHKMATCH(cond, CONDITION_MATCH_BODY)) {
GString *body;
g_assert(is_refed);
- if (!message->mailbox) {
+ if (libbalsa_message_get_mailbox(message) == NULL) {
/* No need to body-unref */
g_object_unref(message);
return FALSE; /* We don't want to match if an error occurred */
}
- body = content2reply(message->body_list, NULL, 0, FALSE, FALSE);
+ body = content2reply(libbalsa_message_get_body_list(message),
+ NULL, 0, FALSE, FALSE);
if (body) {
if (body->str) {
match = libbalsa_utf8_strstr(body->str,
@@ -1103,15 +1106,16 @@ libbalsa_mailbox_local_cache_message(LibBalsaMailboxLocal *local,
libbalsa_mailbox_local_get_instance_private(local);
gpointer *entry;
LibBalsaMailboxLocalInfo *info;
+ LibBalsaMessageHeaders *headers;
- if (!message) {
+ if (message == NULL) {
return;
}
libbalsa_mailbox_cache_message(LIBBALSA_MAILBOX(local), msgno,
message);
- if (!priv->threading_info) {
+ if (priv->threading_info == NULL) {
return;
}
@@ -1120,21 +1124,21 @@ libbalsa_mailbox_local_cache_message(LibBalsaMailboxLocal *local,
}
entry = &g_ptr_array_index(priv->threading_info, msgno - 1);
- if (*entry) {
+ if (*entry != NULL) {
return;
}
*entry = info = g_new(LibBalsaMailboxLocalInfo, 1);
- info->message_id = g_strdup(message->message_id);
- info->refs_for_threading =
- libbalsa_message_refs_for_threading(message);
+ info->message_id = g_strdup(libbalsa_message_get_message_id(message));
+ info->refs_for_threading = libbalsa_message_refs_for_threading(message);
info->sender = NULL;
- if (message->headers->from) {
- info->sender =
- internet_address_list_to_string(message->headers->from, FALSE);
+
+ headers = libbalsa_message_get_headers(message);
+ if (headers->from != NULL) {
+ info->sender = internet_address_list_to_string(headers->from, FALSE);
}
- if (!info->sender) {
+ if (info->sender == NULL) {
info->sender = g_strdup("");
}
}
@@ -1510,23 +1514,27 @@ libbalsa_mailbox_local_fetch_structure(LibBalsaMailbox *mailbox,
LibBalsaMessage *message,
LibBalsaFetchFlag flags)
{
- GMimeMessage *mime_message = message->mime_msg;
+ GMimeMessage *mime_message;
+ LibBalsaMessageHeaders *headers;
- if (!mime_message || !mime_message->mime_part) {
+ mime_message = libbalsa_message_get_mime_msg(message);
+ if (mime_message == NULL || mime_message->mime_part == NULL) {
return FALSE;
}
+ headers = libbalsa_message_get_headers(message);
+
if (flags & LB_FETCH_STRUCTURE) {
LibBalsaMessageBody *body = libbalsa_message_body_new(message);
libbalsa_message_body_set_mime_body(body,
mime_message->mime_part);
libbalsa_message_append_part(message, body);
- libbalsa_message_headers_from_gmime(message->headers, mime_message);
+ libbalsa_message_headers_from_gmime(headers, mime_message);
}
if (flags & LB_FETCH_RFC822_HEADERS) {
- message->headers->user_hdrs =
+ headers->user_hdrs =
libbalsa_message_user_hdrs_from_gmime(mime_message);
- message->has_all_headers = 1;
+ libbalsa_message_set_has_all_headers(message, TRUE);
}
return TRUE;
@@ -1537,11 +1545,15 @@ static void
libbalsa_mailbox_local_fetch_headers(LibBalsaMailbox *mailbox,
LibBalsaMessage *message)
{
- g_return_if_fail(message->headers->user_hdrs == NULL);
+ LibBalsaMessageHeaders *headers;
+ GMimeMessage *mime_msg;
+
+ headers = libbalsa_message_get_headers(message);
+ g_return_if_fail(headers->user_hdrs == NULL);
- if (message->mime_msg) {
- message->headers->user_hdrs =
- libbalsa_message_user_hdrs_from_gmime(message->mime_msg);
+ mime_msg = libbalsa_message_get_mime_msg(message);
+ if (mime_msg != NULL) {
+ headers->user_hdrs = libbalsa_message_user_hdrs_from_gmime(mime_msg);
} else {
libbalsa_mailbox_fetch_message_structure(mailbox, message,
LB_FETCH_RFC822_HEADERS);
@@ -2513,10 +2525,9 @@ libbalsa_mailbox_local_messages_change_flags(LibBalsaMailbox *mailbox,
}
++changed;
- if (msg_info->message) {
- msg_info->message->flags = msg_info->flags;
+ if (msg_info->message != NULL) {
+ libbalsa_message_set_flags(msg_info->message, msg_info->flags);
}
-
libbalsa_mailbox_index_set_flags(mailbox, msgno, msg_info->flags);
if (msg_info->loaded) {
diff --git a/libbalsa/mailbox_maildir.c b/libbalsa/mailbox_maildir.c
index 674e494..49084fd 100644
--- a/libbalsa/mailbox_maildir.c
+++ b/libbalsa/mailbox_maildir.c
@@ -613,7 +613,7 @@ libbalsa_mailbox_maildir_check(LibBalsaMailbox *mailbox)
for (msgno = renumber; msgno <= mdir->msgno_2_msg_info->len; msgno++) {
msg_info = message_info_from_msgno(mdir, msgno);
if (msg_info->local_info.message) {
- msg_info->local_info.message->msgno = msgno;
+ libbalsa_message_set_msgno(msg_info->local_info.message, msgno);
}
}
@@ -632,8 +632,8 @@ free_message_info(struct message_info *msg_info)
g_free(msg_info->key);
g_free(msg_info->filename);
if (msg_info->local_info.message) {
- msg_info->local_info.message->mailbox = NULL;
- msg_info->local_info.message->msgno = 0;
+ libbalsa_message_set_mailbox(msg_info->local_info.message, NULL);
+ libbalsa_message_set_msgno(msg_info->local_info.message, 0);
g_object_remove_weak_pointer(G_OBJECT(msg_info->local_info.message),
(gpointer) & msg_info->local_info.message);
}
@@ -845,7 +845,7 @@ libbalsa_mailbox_maildir_sync(LibBalsaMailbox *mailbox,
for (msgno = renumber; msgno <= mdir->msgno_2_msg_info->len; msgno++) {
msg_info = message_info_from_msgno(mdir, msgno);
if (msg_info->local_info.message) {
- msg_info->local_info.message->msgno = msgno;
+ libbalsa_message_set_msgno(msg_info->local_info.message, msgno);
}
}
@@ -882,14 +882,14 @@ libbalsa_mailbox_maildir_fetch_message_structure(LibBalsaMailbox *mailbox,
LibBalsaMessage *message,
LibBalsaFetchFlag flags)
{
- if (!message->mime_msg) {
+ if (libbalsa_message_get_mime_msg(message) == NULL) {
struct message_info *msg_info =
message_info_from_msgno((LibBalsaMailboxMaildir *) mailbox,
- message->msgno);
- message->mime_msg =
+ libbalsa_message_get_msgno(message));
+ libbalsa_message_set_mime_msg(message,
libbalsa_mailbox_local_get_mime_message(mailbox,
msg_info->subdir,
- msg_info->filename);
+ msg_info->filename));
}
return LIBBALSA_MAILBOX_CLASS(libbalsa_mailbox_maildir_parent_class)->
diff --git a/libbalsa/mailbox_mbox.c b/libbalsa/mailbox_mbox.c
index 19ec09e..8cedc1c 100644
--- a/libbalsa/mailbox_mbox.c
+++ b/libbalsa/mailbox_mbox.c
@@ -559,10 +559,12 @@ parse_mailbox(LibBalsaMailboxMbox *mbox)
g_memdup(&msg_info, sizeof(msg_info)));
mbox->messages_info_changed = TRUE;
- msg->flags = msg_info.orig_flags;
- msg->length = msg_info.end - (msg_info.start + msg_info.from_len);
- msg->mailbox = LIBBALSA_MAILBOX(mbox);
- msg->msgno = ++msgno;
+ libbalsa_message_set_flags(msg, msg_info.orig_flags);
+ libbalsa_message_set_length(msg,
+ msg_info.end -
+ (msg_info.start + msg_info.from_len));
+ libbalsa_message_set_mailbox(msg, LIBBALSA_MAILBOX(mbox));
+ libbalsa_message_set_msgno(msg, ++msgno);
/* We must drop the mime-stream lock to call
* libbalsa_mailbox_local_cache_message, which calls
* libbalsa_mailbox_cache_message(), as it may grab the
@@ -586,10 +588,14 @@ parse_mailbox(LibBalsaMailboxMbox *mbox)
static void
free_message_info(struct message_info *msg_info)
{
- if (msg_info->local_info.message) {
- msg_info->local_info.message->mailbox = NULL;
- msg_info->local_info.message->msgno = 0;
- g_object_remove_weak_pointer(G_OBJECT(msg_info->local_info.message),
+ LibBalsaMessage *message;
+
+ message = msg_info->local_info.message;
+
+ if (message != NULL) {
+ libbalsa_message_set_mailbox(message, NULL);
+ libbalsa_message_set_msgno(message, 0);
+ g_object_remove_weak_pointer(G_OBJECT(message),
(gpointer) & msg_info->local_info.message);
msg_info->local_info.message = NULL;
}
@@ -1834,8 +1840,8 @@ libbalsa_mailbox_mbox_sync(LibBalsaMailbox *mailbox,
mbox->messages_info_changed = TRUE;
continue;
}
- if (msg_info->local_info.message) {
- msg_info->local_info.message->msgno = j + 1;
+ if (msg_info->local_info.message != NULL) {
+ libbalsa_message_set_msgno(msg_info->local_info.message, j + 1);
}
msg_info->status = msg_info->x_status = msg_info->mime_version = -1;
@@ -1869,16 +1875,17 @@ libbalsa_mailbox_mbox_sync(LibBalsaMailbox *mailbox,
msg_info->end = g_mime_parser_tell(gmime_parser);
msg_info->orig_flags = REAL_FLAGS(msg_info->local_info.flags);
g_assert(mime_msg->mime_part != NULL);
- if (!msg_info->local_info.message || !msg_info->local_info.message->mime_msg) {
+ if (msg_info->local_info.message == NULL ||
+ libbalsa_message_get_mime_msg(msg_info->local_info.message) == NULL) {
g_object_unref(mime_msg);
} else {
- g_object_unref(msg_info->local_info.message->mime_msg);
- msg_info->local_info.message->mime_msg = mime_msg;
+ libbalsa_message_set_mime_msg(msg_info->local_info.message, mime_msg);
/*
* reinit the message parts info
*/
- libbalsa_message_body_set_mime_body(msg_info->local_info.message->body_list,
- mime_msg->mime_part);
+ libbalsa_message_body_set_mime_body
+ (libbalsa_message_get_body_list(msg_info->local_info.message),
+ mime_msg->mime_part);
}
j++;
@@ -1908,8 +1915,11 @@ libbalsa_mailbox_mbox_fetch_message_structure(LibBalsaMailbox *mailbox,
LibBalsaMessage *message,
LibBalsaFetchFlag flags)
{
- if (!message->mime_msg) {
- message->mime_msg = lbm_mbox_get_mime_message(mailbox, message->msgno);
+ if (libbalsa_message_get_mime_msg(message) == NULL) {
+ libbalsa_message_set_mime_msg(message,
+ lbm_mbox_get_mime_message
+ (mailbox,
+ libbalsa_message_get_msgno(message)));
}
return LIBBALSA_MAILBOX_CLASS(libbalsa_mailbox_mbox_parent_class)->
@@ -2044,6 +2054,7 @@ lbm_mbox_add_message(LibBalsaMailboxLocal *local,
{
LibBalsaMailbox *mailbox = (LibBalsaMailbox *) local;
LibBalsaMessage *message;
+ LibBalsaMessageHeaders *headers;
gchar date_string[27];
gchar *sender;
gchar *address;
@@ -2060,10 +2071,11 @@ lbm_mbox_add_message(LibBalsaMailboxLocal *local,
message = libbalsa_message_new();
libbalsa_message_load_envelope_from_stream(message, stream);
- ctime_r(&(message->headers->date), date_string);
+ headers = libbalsa_message_get_headers(message);
+ ctime_r(&(headers->date), date_string);
- sender = message->headers->from ?
- internet_address_list_to_string(message->headers->from, FALSE) :
+ sender = headers->from != NULL ?
+ internet_address_list_to_string(headers->from, FALSE) :
g_strdup("none");
g_object_unref(message);
diff --git a/libbalsa/mailbox_mh.c b/libbalsa/mailbox_mh.c
index e8d13c2..daed46a 100644
--- a/libbalsa/mailbox_mh.c
+++ b/libbalsa/mailbox_mh.c
@@ -533,8 +533,8 @@ lbm_mh_free_message_info(struct message_info *msg_info)
return;
}
if (msg_info->local_info.message) {
- msg_info->local_info.message->mailbox = NULL;
- msg_info->local_info.message->msgno = 0;
+ libbalsa_message_set_mailbox(msg_info->local_info.message, NULL);
+ libbalsa_message_set_msgno(msg_info->local_info.message, 0);
g_object_remove_weak_pointer(G_OBJECT(msg_info->local_info.message),
(gpointer) & msg_info->local_info.message);
}
@@ -743,7 +743,7 @@ libbalsa_mailbox_mh_check(LibBalsaMailbox *mailbox)
for (msgno = renumber; msgno <= mh->msgno_2_msg_info->len; msgno++) {
msg_info = lbm_mh_message_info_from_msgno(mh, msgno);
if (msg_info->local_info.message) {
- msg_info->local_info.message->msgno = msgno;
+ libbalsa_message_set_msgno(msg_info->local_info.message, msgno);
}
}
@@ -962,7 +962,7 @@ libbalsa_mailbox_mh_sync(LibBalsaMailbox *mailbox,
for (msgno = 1; msgno <= mh->msgno_2_msg_info->len; msgno++) {
msg_info = lbm_mh_message_info_from_msgno(mh, msgno);
if (msg_info->local_info.message) {
- msg_info->local_info.message->msgno = msgno;
+ libbalsa_message_set_msgno(msg_info->local_info.message, msgno);
}
}
@@ -1085,24 +1085,25 @@ libbalsa_mailbox_mh_fetch_message_structure(LibBalsaMailbox *mailbox,
LibBalsaMessage *message,
LibBalsaFetchFlag flags)
{
- if (!message->mime_msg) {
+ if (libbalsa_message_get_mime_msg(message) == NULL) {
struct message_info *msg_info;
gchar *base_name;
+ GMimeMessage *mime_msg;
msg_info =
lbm_mh_message_info_from_msgno(LIBBALSA_MAILBOX_MH(mailbox),
- message->msgno);
+ libbalsa_message_get_msgno(message));
- base_name = MH_BASENAME(msg_info);
- message->mime_msg =
- libbalsa_mailbox_local_get_mime_message(mailbox, base_name, NULL);
+ base_name = MH_BASENAME(msg_info);
+ mime_msg = libbalsa_mailbox_local_get_mime_message(mailbox, base_name, NULL);
g_free(base_name);
- if (message->mime_msg) {
- g_mime_object_remove_header(GMIME_OBJECT(message->mime_msg),
+ if (mime_msg != NULL) {
+ g_mime_object_remove_header(GMIME_OBJECT(mime_msg),
"Status");
- g_mime_object_remove_header(GMIME_OBJECT(message->mime_msg),
+ g_mime_object_remove_header(GMIME_OBJECT(mime_msg),
"X-Status");
+ libbalsa_message_set_mime_msg(message, mime_msg);
}
}
diff --git a/libbalsa/message.c b/libbalsa/message.c
index 9eec27e..b35f871 100644
--- a/libbalsa/message.c
+++ b/libbalsa/message.c
@@ -5,14 +5,14 @@
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
+ * the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* 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
+ * 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 General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
@@ -26,10 +26,10 @@
- Lack of inline functions in C increases program complexity. This cost
can be accepted.
- thorough analysis of memory usage is needed.
-*/
-
+ */
+
#if defined(HAVE_CONFIG_H) && HAVE_CONFIG_H
-# include "config.h"
+# include "config.h"
#endif /* HAVE_CONFIG_H */
#include <ctype.h>
@@ -49,75 +49,132 @@
#include <gmime/gmime.h>
-static void libbalsa_message_class_init(LibBalsaMessageClass * klass);
-static void libbalsa_message_init(LibBalsaMessage * message);
+static void libbalsa_message_class_init(LibBalsaMessageClass *klass);
+static void libbalsa_message_init(LibBalsaMessage *message);
-static void libbalsa_message_dispose(GObject * object);
-static void libbalsa_message_finalize(GObject * object);
+static void libbalsa_message_dispose(GObject *object);
+static void libbalsa_message_finalize(GObject *object);
-static GObjectClass *parent_class = NULL;
+struct _LibBalsaMessageClass {
+ GObjectClass parent_class;
-GType
-libbalsa_message_get_type()
-{
- static GType libbalsa_message_type = 0;
+ /* deal with flags being set/unset */
+ /* Signal: */
+ void (*status_changed) (LibBalsaMessage *message,
+ LibBalsaMessageFlag flag,
+ gboolean);
+};
- if (!libbalsa_message_type) {
- static const GTypeInfo libbalsa_message_info = {
- sizeof(LibBalsaMessageClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) libbalsa_message_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(LibBalsaMessage),
- 0, /* n_preallocs */
- (GInstanceInitFunc) libbalsa_message_init
- };
+struct _LibBalsaMessage {
+ GObject object;
- libbalsa_message_type =
- g_type_register_static(G_TYPE_OBJECT, "LibBalsaMessage",
- &libbalsa_message_info, 0);
- }
+ /* the mailbox this message belongs to */
+ LibBalsaMailbox *mailbox;
- return libbalsa_message_type;
-}
+ /* flags */
+ LibBalsaMessageFlag flags;
+
+ /* headers */
+ LibBalsaMessageHeaders *headers;
+ int updated; /** whether complete headers have been fetched */
+
+ GMimeMessage *mime_msg;
+
+ /* sender address */
+ InternetAddressList *sender;
+
+ /* subject line; we still need it here for sending;
+ * although _SET_SUBJECT might resolve it(?)
+ * but we can set to to NULL unless there is no mailbox, like
+ * on sending. */
+ gchar *subj;
+
+ /* replied message ID's */
+ GList *references;
+
+ /* replied message ID; from address on date */
+ GList *in_reply_to;
+
+ /* message ID */
+ gchar *message_id;
+
+#ifdef HAVE_GPGME
+ /* GPG sign and/or encrypt message (sending) */
+ guint gpg_mode;
+
+ /* attach the GnuPG public key to the message (sending) */
+ gboolean att_pubkey;
+
+ /* protection (i.e. sign/encrypt) status (received message) */
+ LibBalsaMsgProtectState prot_state;
+
+ /* sender identity, required for choosing a forced GnuPG or S/MIME key */
+ LibBalsaIdentity *ident;
+#endif
+
+ /* request a DSN (sending) */
+ gboolean request_dsn;
+
+ /* a forced multipart subtype or NULL for mixed; used only for
+ * sending */
+ gchar *subtype;
+
+ /* additional message content type parameters; used only for sending */
+ GList *parameters;
+
+ /* message body */
+ guint body_ref;
+ LibBalsaMessageBody *body_list;
+
+ glong msgno; /* message no; always copy for faster sorting;
+ * counting starts at 1. */
+#if MESSAGE_COPY_CONTENT
+ glong length; /* byte len */
+#endif
+
+ gchar *tempdir; /* to hold named parts */
+
+ unsigned has_all_headers : 1;
+};
+
+G_DEFINE_TYPE(LibBalsaMessage,
+ libbalsa_message,
+ G_TYPE_OBJECT)
static void
-libbalsa_message_init(LibBalsaMessage * message)
-{
- message->headers = g_new0(LibBalsaMessageHeaders, 1);
- message->flags = 0;
- message->mailbox = NULL;
- message->sender = NULL;
- message->subj = NULL;
- message->references = NULL;
- message->in_reply_to = NULL;
- message->message_id = NULL;
- message->subtype = 0;
- message->parameters = NULL;
- message->body_ref = 0;
- message->body_list = NULL;
+libbalsa_message_init(LibBalsaMessage *message)
+{
+ message->headers = g_new0(LibBalsaMessageHeaders, 1);
+ message->flags = 0;
+ message->mailbox = NULL;
+ message->sender = NULL;
+ message->subj = NULL;
+ message->references = NULL;
+ message->in_reply_to = NULL;
+ message->message_id = NULL;
+ message->subtype = 0;
+ message->parameters = NULL;
+ message->body_ref = 0;
+ message->body_list = NULL;
message->has_all_headers = 0;
#ifdef HAVE_GPGME
message->prot_state = LIBBALSA_MSG_PROTECT_NONE;
- message->ident = NULL;
+ message->ident = NULL;
#endif
}
static void
-libbalsa_message_class_init(LibBalsaMessageClass * klass)
+libbalsa_message_class_init(LibBalsaMessageClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->dispose = libbalsa_message_dispose;
+ object_class->dispose = libbalsa_message_dispose;
object_class->finalize = libbalsa_message_finalize;
}
+
LibBalsaMessage *
libbalsa_message_new(void)
{
@@ -128,11 +185,12 @@ libbalsa_message_new(void)
return message;
}
+
/*
* libbalsa_message_dispose: must leave object in a sane state
*/
static void
-libbalsa_message_dispose(GObject * object)
+libbalsa_message_dispose(GObject *object)
{
LibBalsaMessage *message;
@@ -144,14 +202,15 @@ libbalsa_message_dispose(GObject * object)
g_clear_object(&message->ident);
#endif
- G_OBJECT_CLASS(parent_class)->dispose(object);
+ G_OBJECT_CLASS(libbalsa_message_parent_class)->dispose(object);
}
-/* libbalsa_message_finalize:
-*/
+/*
+ * libbalsa_message_finalize:
+ */
static void
-libbalsa_message_finalize(GObject * object)
+libbalsa_message_finalize(GObject *object)
{
LibBalsaMessage *message;
@@ -176,11 +235,12 @@ libbalsa_message_finalize(GObject * object)
g_free(message->tempdir);
}
- G_OBJECT_CLASS(parent_class)->finalize(object);
+ G_OBJECT_CLASS(libbalsa_message_parent_class)->finalize(object);
}
+
static void
-lb_message_headers_extra_destroy(LibBalsaMessageHeaders * headers)
+lb_message_headers_extra_destroy(LibBalsaMessageHeaders *headers)
{
if (headers != NULL) {
libbalsa_clear_list(&headers->user_hdrs, (GDestroyNotify) g_strfreev);
@@ -188,11 +248,13 @@ lb_message_headers_extra_destroy(LibBalsaMessageHeaders * headers)
}
}
-void
-libbalsa_message_headers_destroy(LibBalsaMessageHeaders * headers)
+
+void
+libbalsa_message_headers_destroy(LibBalsaMessageHeaders *headers)
{
if (!headers)
- return;
+ return;
+
g_free(headers->subject);
headers->subject = NULL;
@@ -210,17 +272,22 @@ libbalsa_message_headers_destroy(LibBalsaMessageHeaders * headers)
g_free(headers);
}
+
const gchar *
-libbalsa_message_body_charset(LibBalsaMessageBody * body)
+libbalsa_message_body_charset(LibBalsaMessageBody *body)
{
const gchar *charset;
if (!body)
- return NULL;
+ return NULL;
- if (body->charset) /* This overrides all! Important for non
- * us-ascii messages over IMAP. */
+
+ if (body->charset) {
+ /* This overrides all! Important for non
+ * us-ascii messages over IMAP. */
return body->charset;
+ }
+
if (GMIME_IS_PART(body->mime_part)) {
GMimeContentType *type;
@@ -233,9 +300,11 @@ libbalsa_message_body_charset(LibBalsaMessageBody * body)
if (charset)
return charset;
+
return libbalsa_message_body_charset(body->next);
}
+
/* UTF-8-aware header cleaning by Albrecht */
static void
canonize_header_value(gchar *value)
@@ -260,14 +329,16 @@ canonize_header_value(gchar *value)
*dptr = '\0';
}
+
/* message_user_hdrs:
returns allocated GList containing (header=>value) ALL headers pairs
as generated by g_strsplit.
The list has to be freed by the following chunk of code:
g_list_free_full(list, (GDestroyNotify) g_strfreev)
-*/
+ */
static gchar **
-libbalsa_create_hdr_pair(const gchar * name, gchar * value)
+libbalsa_create_hdr_pair(const gchar *name,
+ gchar *value)
{
gchar **item = g_new(gchar *, 3);
@@ -278,89 +349,101 @@ libbalsa_create_hdr_pair(const gchar * name, gchar * value)
return item;
}
-static GList*
-libbalsa_message_header_get_helper(LibBalsaMessageHeaders* headers,
- const gchar *find)
+
+static GList *
+libbalsa_message_header_get_helper(LibBalsaMessageHeaders *headers,
+ const gchar *find)
{
GList *list;
for (list = headers->user_hdrs; list; list = list->next) {
- const gchar * const *tmp = list->data;
-
- if (g_ascii_strcasecmp(tmp[0], find) == 0)
+ const gchar *const *tmp = list->data;
+
+ if (g_ascii_strcasecmp(tmp[0], find) == 0)
return list;
}
return NULL;
}
+
/** libbalsa_message_find_user_hdr:
returns.... list element matching given header.
-*/
+ */
static GList *
-libbalsa_message_find_user_hdr(LibBalsaMessage * message, const gchar * find)
+libbalsa_message_find_user_hdr(LibBalsaMessage *message,
+ const gchar *find)
{
LibBalsaMessageHeaders *headers = message->headers;
-
+
g_return_val_if_fail(headers, NULL);
- if (!headers->user_hdrs && message->mailbox)
+ if (!headers->user_hdrs && message->mailbox)
libbalsa_mailbox_set_msg_headers(message->mailbox, message);
return libbalsa_message_header_get_helper(headers, find);
}
-/*
+
+/*
* Public user header methods
*/
-const gchar*
-libbalsa_message_header_get_one(LibBalsaMessageHeaders* headers,
- const gchar *find)
+const gchar *
+libbalsa_message_header_get_one(LibBalsaMessageHeaders *headers,
+ const gchar *find)
{
GList *header;
const gchar *const *pair;
-
+
if (!(header = libbalsa_message_header_get_helper(headers, find)))
return NULL;
+
pair = header->data;
return pair[1];
}
-GList*
-libbalsa_message_header_get_all(LibBalsaMessageHeaders* headers,
- const gchar *find)
+
+GList *
+libbalsa_message_header_get_all(LibBalsaMessageHeaders *headers,
+ const gchar *find)
{
GList *header;
const gchar *const *pair;
GList *res = NULL;
-
+
if (!(header = libbalsa_message_header_get_helper(headers, find)))
return NULL;
+
pair = header->data;
- for(pair++; *pair; pair++)
+ for (pair++; *pair; pair++) {
res = g_list_append(res, g_strdup(*pair));
-
+ }
+
return res;
}
+
const gchar *
-libbalsa_message_get_user_header(LibBalsaMessage * message,
- const gchar * name)
+libbalsa_message_get_user_header(LibBalsaMessage *message,
+ const gchar *name)
{
GList *header;
const gchar *const *pair;
-
+
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), NULL);
g_return_val_if_fail(name != NULL, NULL);
if (!(header = libbalsa_message_find_user_hdr(message, name)))
return NULL;
+
pair = header->data;
return pair[1];
}
+
void
-libbalsa_message_set_user_header(LibBalsaMessage * message,
- const gchar * name, const gchar * value)
+libbalsa_message_set_user_header(LibBalsaMessage *message,
+ const gchar *name,
+ const gchar *value)
{
LibBalsaMessageHeaders *headers;
GList *header;
@@ -377,13 +460,15 @@ libbalsa_message_set_user_header(LibBalsaMessage * message,
g_list_free_full(header, (GDestroyNotify) g_strfreev);
}
- if (value && *value)
+ if (value && *value) {
headers->user_hdrs =
g_list_prepend(headers->user_hdrs,
libbalsa_create_hdr_pair(name,
g_strdup(value)));
+ }
}
+
static GList *
prepend_header_misc(GList *res,
const char *name,
@@ -396,37 +481,41 @@ prepend_header_misc(GList *res,
"disposition-notification-to";
unsigned i;
- if (value[0] == '\0')
- /* Empty header */
- return res;
+ if (value[0] == '\0') {
+ /* Empty header */
+ return res;
+ }
+
/* Standard Headers*/
- for(i = 0; i < sizeof(lcname) - 1 && name[i] != '\0'; i++) {
+ for (i = 0; i < sizeof(lcname) - 1 && name[i] != '\0'; i++) {
lcname[i] = tolower(name[i]);
}
lcname[i] = '\0';
- if(strstr(ignored_headers, lcname) != NULL)
+ if (strstr(ignored_headers, lcname) != NULL)
return res;
+
return
g_list_prepend(res,
libbalsa_create_hdr_pair(name,
g_mime_utils_header_decode_text(value)));
}
-/*
+
+/*
* libbalsa_message_user_hdrs_from_gmime:
- *
+ *
* returns allocated GList containing (header=>value) ALL headers
* pairs as generated by g_strsplit. The list has to be freed by the
* following chunk of code (or something functionally similar):
* g_list_free_full(list, (GDestroyNotify) g_strfreev)
-*/
+ */
GList *
-libbalsa_message_user_hdrs_from_gmime(GMimeMessage * message)
+libbalsa_message_user_hdrs_from_gmime(GMimeMessage *message)
{
GMimeHeaderList *hdrlist;
GMimeHeaderIter iter;
@@ -436,30 +525,31 @@ libbalsa_message_user_hdrs_from_gmime(GMimeMessage * message)
g_return_val_if_fail(message != NULL, NULL);
value = g_mime_message_get_message_id(message);
- if (value)
- res = g_list_prepend(res, libbalsa_create_hdr_pair("Message-ID",
- g_strdup_printf("<%s>", value)));
+ if (value) {
+ res = g_list_prepend(res, libbalsa_create_hdr_pair("Message-ID",
+ g_strdup_printf("<%s>", value)));
+ }
/* FIXME: This duplicates References headers since they are
already present in LibBalsaMessage::references field. FWIW,
mailbox driver does not copy references to user_headers.
- */
+ */
value = g_mime_object_get_header(GMIME_OBJECT(message), "References");
if (value) {
#if BALSA_NEEDS_SEPARATE_USER_HEADERS
- GMimeReferences *references, *reference;
- reference = references = g_mime_references_decode(value);
- while (reference) {
- res =
- g_list_prepend(res,
- libbalsa_create_hdr_pair("References",
- g_strdup_printf
- ("<%s>",
- reference->
- msgid)));
- reference = reference->next;
- }
- g_mime_references_clear(&references);
+ GMimeReferences *references, *reference;
+ reference = references = g_mime_references_decode(value);
+ while (reference) {
+ res =
+ g_list_prepend(res,
+ libbalsa_create_hdr_pair("References",
+ g_strdup_printf
+ ("<%s>",
+ reference->
+ msgid)));
+ reference = reference->next;
+ }
+ g_mime_references_clear(&references);
#else
res = g_list_prepend(res,
libbalsa_create_hdr_pair("References",
@@ -472,37 +562,41 @@ libbalsa_message_user_hdrs_from_gmime(GMimeMessage * message)
res =
g_list_prepend(res,
libbalsa_create_hdr_pair
- ("In-Reply-To",
- g_mime_utils_header_decode_text(value)));
+ ("In-Reply-To",
+ g_mime_utils_header_decode_text(value)));
}
hdrlist = g_mime_object_get_header_list (GMIME_OBJECT(message));
if (g_mime_header_list_get_iter (hdrlist, &iter)) {
- do {
+ do {
res = prepend_header_misc(res,
g_mime_header_iter_get_name (&iter),
g_mime_header_iter_get_value (&iter));
- } while (g_mime_header_iter_next (&iter));
+ } while (g_mime_header_iter_next (&iter));
}
-
+
return g_list_reverse(res);
}
+
/* libbalsa_message_get_part_by_id:
return a message part identified by Content-ID=id
message must be referenced. (FIXME?)
-*/
+ */
LibBalsaMessageBody *
-libbalsa_message_get_part_by_id(LibBalsaMessage* msg, const gchar* id)
+libbalsa_message_get_part_by_id(LibBalsaMessage *msg,
+ const gchar *id)
{
return libbalsa_message_body_get_by_id(msg->body_list, id);
}
+
/* libbalsa_message_save:
return TRUE on success and FALSE on failure.
-*/
+ */
gboolean
-libbalsa_message_save(LibBalsaMessage * message, const gchar *filename)
+libbalsa_message_save(LibBalsaMessage *message,
+ const gchar *filename)
{
FILE *outfile;
int res;
@@ -511,12 +605,15 @@ libbalsa_message_save(LibBalsaMessage * message, const gchar *filename)
g_return_val_if_fail(message->mailbox, FALSE);
- if( (outfile = fopen(filename, "w")) == NULL) return FALSE;
+ if ((outfile = fopen(filename, "w")) == NULL)
+ return FALSE;
+
g_return_val_if_fail(outfile, FALSE);
msg_stream = libbalsa_message_stream(message);
if (msg_stream == NULL)
- return FALSE;
+ return FALSE;
+
out_stream = g_mime_stream_file_new(outfile);
libbalsa_mailbox_lock_store(message->mailbox);
res = g_mime_stream_write_to_stream(msg_stream, out_stream);
@@ -528,37 +625,43 @@ libbalsa_message_save(LibBalsaMessage * message, const gchar *filename)
return res >= 0;
}
+
LibBalsaMessageAttach
-libbalsa_message_get_attach_icon(LibBalsaMessage * message)
+libbalsa_message_get_attach_icon(LibBalsaMessage *message)
{
#ifdef HAVE_GPGME
- if (libbalsa_message_is_pgp_encrypted(message))
- return LIBBALSA_MESSAGE_ATTACH_ENCR;
- else if (message->prot_state != LIBBALSA_MSG_PROTECT_NONE ||
- libbalsa_message_is_pgp_signed(message)) {
- switch (message->prot_state) {
- case LIBBALSA_MSG_PROTECT_SIGN_GOOD:
- return LIBBALSA_MESSAGE_ATTACH_GOOD;
- case LIBBALSA_MSG_PROTECT_SIGN_NOTRUST:
- return LIBBALSA_MESSAGE_ATTACH_NOTRUST;
- case LIBBALSA_MSG_PROTECT_SIGN_BAD:
- return LIBBALSA_MESSAGE_ATTACH_BAD;
- case LIBBALSA_MSG_PROTECT_CRYPT:
- return LIBBALSA_MESSAGE_ATTACH_ENCR;
- default:
- return LIBBALSA_MESSAGE_ATTACH_SIGN;
- }
+ if (libbalsa_message_is_pgp_encrypted(message)) {
+ return LIBBALSA_MESSAGE_ATTACH_ENCR;
+ } else if ((message->prot_state != LIBBALSA_MSG_PROTECT_NONE) ||
+ libbalsa_message_is_pgp_signed(message)) {
+ switch (message->prot_state) {
+ case LIBBALSA_MSG_PROTECT_SIGN_GOOD:
+ return LIBBALSA_MESSAGE_ATTACH_GOOD;
+
+ case LIBBALSA_MSG_PROTECT_SIGN_NOTRUST:
+ return LIBBALSA_MESSAGE_ATTACH_NOTRUST;
+
+ case LIBBALSA_MSG_PROTECT_SIGN_BAD:
+ return LIBBALSA_MESSAGE_ATTACH_BAD;
+
+ case LIBBALSA_MSG_PROTECT_CRYPT:
+ return LIBBALSA_MESSAGE_ATTACH_ENCR;
+
+ default:
+ return LIBBALSA_MESSAGE_ATTACH_SIGN;
+ }
} else
#endif
if (libbalsa_message_has_attachment(message))
- return LIBBALSA_MESSAGE_ATTACH_ATTACH;
+ return LIBBALSA_MESSAGE_ATTACH_ATTACH;
else
- return LIBBALSA_MESSAGE_ATTACH_ICONS_NUM;
+ return LIBBALSA_MESSAGE_ATTACH_ICONS_NUM;
}
+
/* Tell the mailbox driver to change flags. */
void
-libbalsa_message_change_flags(LibBalsaMessage * message,
+libbalsa_message_change_flags(LibBalsaMessage *message,
LibBalsaMessageFlag set,
LibBalsaMessageFlag clear)
{
@@ -578,8 +681,9 @@ libbalsa_message_change_flags(LibBalsaMessage * message,
set, clear);
}
+
void
-libbalsa_message_reply(LibBalsaMessage * message)
+libbalsa_message_reply(LibBalsaMessage *message)
{
g_return_if_fail(message->mailbox);
libbalsa_lock_mailbox(message->mailbox);
@@ -590,75 +694,87 @@ libbalsa_message_reply(LibBalsaMessage * message)
/* libbalsa_message_body_ref:
references the structure of given message possibly fetching also all
- headers.
+ headers.
message parts can be fetched later on.
-*/
+ */
gboolean
-libbalsa_message_body_ref(LibBalsaMessage * message, gboolean read,
- gboolean fetch_all_headers)
+libbalsa_message_body_ref(LibBalsaMessage *message,
+ gboolean read,
+ gboolean fetch_all_headers)
{
LibBalsaFetchFlag flags = 0;
- gboolean retval = TRUE;
+ gboolean retval = TRUE;
g_return_val_if_fail(message, FALSE);
- if (!message->mailbox) return FALSE;
+ if (!message->mailbox)
+ return FALSE;
+
g_return_val_if_fail(MAILBOX_OPEN(message->mailbox), FALSE);
libbalsa_lock_mailbox(message->mailbox);
- if(fetch_all_headers && !message->has_all_headers)
- flags |= LB_FETCH_RFC822_HEADERS;
+ if (fetch_all_headers && !message->has_all_headers)
+ flags |= LB_FETCH_RFC822_HEADERS;
- if (message->body_ref == 0 && !message->body_list)
+ if ((message->body_ref == 0) && !message->body_list) {
/* not fetched yet */
flags |= LB_FETCH_STRUCTURE;
+ }
- if (flags)
+ if (flags) {
retval =
libbalsa_mailbox_fetch_message_structure(message->mailbox,
message, flags);
+ }
+
if (retval)
- message->body_ref++;
+ message->body_ref++;
libbalsa_unlock_mailbox(message->mailbox);
-
+
return retval;
}
void
-libbalsa_message_body_unref(LibBalsaMessage * message)
+libbalsa_message_body_unref(LibBalsaMessage *message)
{
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
if (message->body_ref == 0)
- return;
+ return;
- if(message->mailbox) { libbalsa_lock_mailbox(message->mailbox); }
- if (--message->body_ref == 0) {
- libbalsa_message_body_free(message->body_list);
- message->body_list = NULL;
- if (message->mailbox)
- libbalsa_mailbox_release_message(message->mailbox, message);
- /* Free headers that we no longer need. */
- lb_message_headers_extra_destroy(message->headers);
- message->has_all_headers = 0;
- }
- if(message->mailbox) { libbalsa_unlock_mailbox(message->mailbox); }
+ if (message->mailbox)
+ libbalsa_lock_mailbox(message->mailbox);
+ if (--message->body_ref == 0) {
+ libbalsa_message_body_free(message->body_list);
+ message->body_list = NULL;
+ if (message->mailbox)
+ libbalsa_mailbox_release_message(message->mailbox, message);
+
+ /* Free headers that we no longer need. */
+ lb_message_headers_extra_destroy(message->headers);
+ message->has_all_headers = 0;
+ }
+ if (message->mailbox)
+ libbalsa_unlock_mailbox(message->mailbox);
}
+
gboolean
-libbalsa_message_is_multipart(LibBalsaMessage * message)
+libbalsa_message_is_multipart(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), FALSE);
return message->headers->content_type ?
- g_mime_content_type_is_type(message->headers->content_type,
- "multipart", "*") : FALSE;
+ g_mime_content_type_is_type(message->headers->content_type,
+ "multipart", "*") : FALSE;
}
+
gboolean
-libbalsa_message_is_partial(LibBalsaMessage * message, gchar ** id)
+libbalsa_message_is_partial(LibBalsaMessage *message,
+ gchar **id)
{
GMimeContentType *content_type;
@@ -666,17 +782,19 @@ libbalsa_message_is_partial(LibBalsaMessage * message, gchar ** id)
content_type = message->headers->content_type;
if (!content_type
- || !g_mime_content_type_is_type(content_type,
- "message", "partial"))
- return FALSE;
+ || !g_mime_content_type_is_type(content_type,
+ "message", "partial"))
+ return FALSE;
+
if (id)
- *id = g_strdup(g_mime_content_type_get_parameter(content_type,
- "id"));
+ *id = g_strdup(g_mime_content_type_get_parameter(content_type,
+ "id"));
return TRUE;
}
+
/* Go through all parts and try to figure out whether it is a message
with attachments or not. It still yields insatsfactory
results... */
@@ -685,23 +803,25 @@ has_attached_part(LibBalsaMessageBody *body)
{
LibBalsaMessageBody *lbbody;
/* the condition matches the one used in add_multipart_mixed() */
- for(lbbody=body; lbbody; lbbody = lbbody->next) {
+ for (lbbody = body; lbbody; lbbody = lbbody->next) {
/* printf("part %s has disposition %s\n",
lbbody->content_type, lbbody->content_dsp); */
- if(!libbalsa_message_body_is_multipart(lbbody) &&
- !libbalsa_message_body_is_inline(lbbody) ) {
+ if (!libbalsa_message_body_is_multipart(lbbody) &&
+ !libbalsa_message_body_is_inline(lbbody)) {
/* puts("Attachment found!"); */
return TRUE;
}
- if(lbbody->parts && has_attached_part(lbbody->parts))
+
+ if (lbbody->parts && has_attached_part(lbbody->parts))
return TRUE;
}
/* no part was an attachment */
return FALSE;
}
+
gboolean
-libbalsa_message_has_attachment(LibBalsaMessage * message)
+libbalsa_message_has_attachment(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), FALSE);
@@ -709,42 +829,46 @@ libbalsa_message_has_attachment(LibBalsaMessage * message)
has Content-type: multipart/mixed AND members with
Content-disposition: attachment. Unfortunately, part list may
not be available at this stage. */
- if(!message->body_list) {
+ if (!message->body_list) {
return message->headers->content_type &&
- g_mime_content_type_is_type(message->headers->content_type,
- "multipart", "mixed");
+ g_mime_content_type_is_type(message->headers->content_type,
+ "multipart", "mixed");
} else {
/* use "exact" algorithm */
return (has_attached_part(message->body_list->next) ||
- has_attached_part(message->body_list->parts));
+ has_attached_part(message->body_list->parts));
}
- }
+}
+
#ifdef HAVE_GPGME
gboolean
-libbalsa_message_is_pgp_signed(LibBalsaMessage * message)
+libbalsa_message_is_pgp_signed(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), FALSE);
return message->headers->content_type ?
- g_mime_content_type_is_type(message->headers->content_type,
- "multipart", "signed") : FALSE;
+ g_mime_content_type_is_type(message->headers->content_type,
+ "multipart", "signed") : FALSE;
}
+
gboolean
-libbalsa_message_is_pgp_encrypted(LibBalsaMessage * message)
+libbalsa_message_is_pgp_encrypted(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), FALSE);
return message->headers->content_type ?
- g_mime_content_type_is_type(message->headers->content_type,
- "multipart", "encrypted") : FALSE;
+ g_mime_content_type_is_type(message->headers->content_type,
+ "multipart", "encrypted") : FALSE;
}
+
+
#endif
void
-libbalsa_message_append_part(LibBalsaMessage * message,
- LibBalsaMessageBody * body)
+libbalsa_message_append_part(LibBalsaMessage *message,
+ LibBalsaMessageBody *body)
{
LibBalsaMessageBody *part;
@@ -752,83 +876,95 @@ libbalsa_message_append_part(LibBalsaMessage * message,
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
if (message->body_list == NULL) {
- message->body_list = body;
+ message->body_list = body;
} else {
- part = message->body_list;
- while (part->next != NULL)
- part = part->next;
- part->next = body;
+ part = message->body_list;
+ while (part->next != NULL) {
+ part = part->next;
+ }
+ part->next = body;
}
}
+
/* libbalsa_message_set_dispnotify:
sets a disposition notify to a given address
address can be NULL.
-*/
+ */
void
-libbalsa_message_set_dispnotify(LibBalsaMessage * message,
- InternetAddress * ia)
+libbalsa_message_set_dispnotify(LibBalsaMessage *message,
+ InternetAddress *ia)
{
g_return_if_fail(message);
g_object_unref(message->headers->dispnotify_to);
if (ia) {
- message->headers->dispnotify_to = internet_address_list_new ();
- internet_address_list_add (message->headers->dispnotify_to, ia);
+ message->headers->dispnotify_to = internet_address_list_new ();
+ internet_address_list_add (message->headers->dispnotify_to, ia);
} else {
- message->headers->dispnotify_to = NULL;
+ message->headers->dispnotify_to = NULL;
}
}
-#ifndef MESSAGE_COPY_CONTENT
+
/* libbalsa_message_get_subject:
- get constant pointer to the subject of the message;
-*/
+ get constant pointer to the subject of the message;
+ */
+#ifdef MESSAGE_COPY_CONTENT
const gchar *
-libbalsa_message_get_subject(LibBalsaMessage* msg)
+libbalsa_message_get_subject(LibBalsaMessage *message)
+{
+ return message->subj != NULL ? message->subj : _("(No subject)");
+}
+
+
+#else
+const gchar *
+libbalsa_message_get_subject(LibBalsaMessage *msg)
{
const gchar *ret;
- if(!msg->subj &&
- msg->mime_msg && msg->mailbox) { /* a message in a mailbox... */
+ if (!msg->subj &&
+ msg->mime_msg && msg->mailbox) { /* a message in a mailbox... */
g_return_val_if_fail(MAILBOX_OPEN(msg->mailbox), NULL);
ret = g_mime_message_get_subject(msg->mime_msg);
libbalsa_message_set_subject_from_header(msg, ret);
- } else
- ret = msg->subj;
+ } else {
+ ret = msg->subj;
+ }
return ret ? ret : _("(No subject)");
}
guint
-libbalsa_message_get_lines(LibBalsaMessage* msg)
+libbalsa_message_get_lines(LibBalsaMessage *msg)
{
/* set the line count */
const char *value;
if (!msg->mime_msg)
- return 0;
+ return 0;
+
value = g_mime_object_get_header(msg->mime_msg, "Lines");
if (!value)
- return 0;
+ return 0;
+
return atoi(value);
}
+
+
glong
-libbalsa_message_get_length(LibBalsaMessage* msg)
+libbalsa_message_get_length(LibBalsaMessage *msg)
{
/* set the length */
const char *value;
if (!msg->mime_msg)
- return 0;
+ return 0;
+
value = g_mime_object_get_header(msg->mime_msg, "Content-Length");
if (!value)
- return 0;
- return atoi(value);
-}
+ return 0;
-glong
-libbalsa_message_get_no(LibBalsaMessage* msg)
-{
- return msg->msgno;
+ return atoi(value);
}
@@ -837,22 +973,24 @@ libbalsa_message_get_no(LibBalsaMessage* msg)
/* Populate headers from mime_msg, but only the members that are needed
* all the time. */
static InternetAddressList *
-lb_message_recipients(GMimeMessage * message, GMimeRecipientType type)
+lb_message_recipients(GMimeMessage *message,
+ GMimeRecipientType type)
{
const InternetAddressList *list;
InternetAddressList *copy = NULL;
if ((list = g_mime_message_get_recipients (message, type))) {
- copy = internet_address_list_new ();
- internet_address_list_append (copy, (InternetAddressList *) list);
+ copy = internet_address_list_new ();
+ internet_address_list_append (copy, (InternetAddressList *) list);
}
-
+
return copy;
}
+
static void
lb_message_headers_basic_from_gmime(LibBalsaMessageHeaders *headers,
- GMimeMessage *mime_msg)
+ GMimeMessage *mime_msg)
{
g_return_if_fail(headers);
g_return_if_fail(mime_msg != NULL);
@@ -861,75 +999,84 @@ lb_message_headers_basic_from_gmime(LibBalsaMessageHeaders *headers,
headers->from = internet_address_list_parse_string(mime_msg->from);
if (!headers->date)
- g_mime_message_get_date(mime_msg, &headers->date, NULL);
+ g_mime_message_get_date(mime_msg, &headers->date, NULL);
- if (!headers->to_list)
+ if (!headers->to_list) {
headers->to_list =
lb_message_recipients(mime_msg, GMIME_RECIPIENT_TYPE_TO);
+ }
if (!headers->content_type) {
- /* If we could:
- * headers->content_type =
- * g_mime_content_type_copy
- * (g_mime_object_get_content_type(mime_msg->mime_part));
- */
- GMimeContentType *content_type;
- gchar *str;
- g_return_if_fail(headers->content_type == NULL);
- content_type = g_mime_object_get_content_type(mime_msg->mime_part);
- str = g_mime_content_type_to_string(content_type);
- headers->content_type = g_mime_content_type_new_from_string(str);
- g_free(str);
+ /* If we could:
+ * headers->content_type =
+ * g_mime_content_type_copy
+ * (g_mime_object_get_content_type(mime_msg->mime_part));
+ */
+ GMimeContentType *content_type;
+ gchar *str;
+ g_return_if_fail(headers->content_type == NULL);
+ content_type = g_mime_object_get_content_type(mime_msg->mime_part);
+ str = g_mime_content_type_to_string(content_type);
+ headers->content_type = g_mime_content_type_new_from_string(str);
+ g_free(str);
}
}
+
/* Populate headers from mime_msg, but only the members not handled in
* lb_message_headers_basic_from_gmime. */
static void
lb_message_headers_extra_from_gmime(LibBalsaMessageHeaders *headers,
- GMimeMessage *mime_msg)
+ GMimeMessage *mime_msg)
{
g_return_if_fail(headers);
g_return_if_fail(mime_msg != NULL);
- if (!headers->reply_to)
+ if (!headers->reply_to) {
headers->reply_to =
- internet_address_list_parse_string(mime_msg->reply_to);
+ internet_address_list_parse_string(mime_msg->reply_to);
+ }
- if (!headers->dispnotify_to)
+ if (!headers->dispnotify_to) {
headers->dispnotify_to =
internet_address_list_parse_string(g_mime_object_get_header
- (GMIME_OBJECT(mime_msg),
- "Disposition-Notification-To"));
+ (GMIME_OBJECT(mime_msg),
+ "Disposition-Notification-To"));
+ }
- if (!headers->cc_list)
+ if (!headers->cc_list) {
headers->cc_list =
lb_message_recipients(mime_msg, GMIME_RECIPIENT_TYPE_CC);
+ }
- if (!headers->bcc_list)
+ if (!headers->bcc_list) {
headers->bcc_list =
lb_message_recipients(mime_msg, GMIME_RECIPIENT_TYPE_BCC);
+ }
/* Get fcc from message */
- if (!headers->fcc_url)
- headers->fcc_url =
- g_strdup(g_mime_object_get_header(GMIME_OBJECT(mime_msg), "X-Balsa-Fcc"));
+ if (!headers->fcc_url) {
+ headers->fcc_url =
+ g_strdup(g_mime_object_get_header(GMIME_OBJECT(mime_msg), "X-Balsa-Fcc"));
+ }
}
+
/* Populate headers from the info in mime_msg. */
void
libbalsa_message_headers_from_gmime(LibBalsaMessageHeaders *headers,
- GMimeMessage *mime_msg)
+ GMimeMessage *mime_msg)
{
lb_message_headers_basic_from_gmime(headers, mime_msg);
lb_message_headers_extra_from_gmime(headers, mime_msg);
}
+
/* Populate message and message->headers from the info in mime_msg,
* but only the members that are needed all the time. */
void
-libbalsa_message_init_from_gmime(LibBalsaMessage * message,
- GMimeMessage *mime_msg)
+libbalsa_message_init_from_gmime(LibBalsaMessage *message,
+ GMimeMessage *mime_msg)
{
const gchar *header;
@@ -942,28 +1089,30 @@ libbalsa_message_init_from_gmime(LibBalsaMessage * message,
header = g_mime_object_get_header(GMIME_OBJECT(mime_msg), "Content-Length");
if (header)
- message->length = atoi(header);
+ message->length = atoi(header);
+
#endif
header = g_mime_message_get_message_id(mime_msg);
if (header)
- message->message_id = g_strdup(header);
+ message->message_id = g_strdup(header);
header = g_mime_object_get_header(GMIME_OBJECT(mime_msg), "References");
if (header)
- libbalsa_message_set_references_from_string(message, header);
+ libbalsa_message_set_references_from_string(message, header);
header = g_mime_object_get_header(GMIME_OBJECT(mime_msg), "In-Reply-To");
if (header)
- libbalsa_message_set_in_reply_to_from_string(message, header);
+ libbalsa_message_set_in_reply_to_from_string(message, header);
lb_message_headers_basic_from_gmime(message->headers, mime_msg);
}
+
/* Create a newly allocated list of references for threading.
* This is a deep copy, with its own strings: deallocate with
* g_free and g_list_free. */
GList *
-libbalsa_message_refs_for_threading(LibBalsaMessage * message)
+libbalsa_message_refs_for_threading(LibBalsaMessage *message)
{
GList *tmp;
GList *foo;
@@ -971,71 +1120,77 @@ libbalsa_message_refs_for_threading(LibBalsaMessage * message)
g_return_val_if_fail(message != NULL, NULL);
if (message->in_reply_to && message->in_reply_to->next)
- return NULL;
+ return NULL;
+
tmp = g_list_copy(message->references);
if (message->in_reply_to) {
- /* some mailers provide in_reply_to but no references, and
- * some apparently provide both but with the references in
- * the wrong order; we'll just make sure it's the last item
- * of this list */
- foo = g_list_find_custom(tmp, message->in_reply_to->data,
- (GCompareFunc) strcmp);
-
- if (foo) {
- tmp = g_list_remove_link(tmp, foo);
- g_list_free_1(foo);
- }
- tmp = g_list_append(tmp, message->in_reply_to->data);
+ /* some mailers provide in_reply_to but no references, and
+ * some apparently provide both but with the references in
+ * the wrong order; we'll just make sure it's the last item
+ * of this list */
+ foo = g_list_find_custom(tmp, message->in_reply_to->data,
+ (GCompareFunc) strcmp);
+
+ if (foo) {
+ tmp = g_list_remove_link(tmp, foo);
+ g_list_free_1(foo);
+ }
+ tmp = g_list_append(tmp, message->in_reply_to->data);
}
- for (foo = tmp; foo; foo = foo->next)
- foo->data = g_strdup((gchar *) foo->data);
+ for (foo = tmp; foo; foo = foo->next) {
+ foo->data = g_strdup((gchar *) foo->data);
+ }
return tmp;
}
+
static GList *
-references_decode(const gchar * str)
+references_decode(const gchar *str)
{
GMimeReferences *references, *reference;
GList *list = NULL;
reference = references = g_mime_references_decode(str);
while (reference) {
- list = g_list_prepend(list, g_strdup(reference->msgid));
- reference = reference->next;
+ list = g_list_prepend(list, g_strdup(reference->msgid));
+ reference = reference->next;
}
g_mime_references_clear(&references);
return g_list_reverse(list);
}
+
void
-libbalsa_message_set_references_from_string(LibBalsaMessage * message,
- const gchar *str)
+libbalsa_message_set_references_from_string(LibBalsaMessage *message,
+ const gchar *str)
{
- /* Empty references are acceptable but require no action. Similarly,
- if references were set already, there is not reason to set them
- again - they are immutable anyway. */
- if(!message->references && str)
+ /* Empty references are acceptable but require no action. Similarly,
+ if references were set already, there is not reason to set them
+ again - they are immutable anyway. */
+ if (!message->references && str)
message->references = references_decode(str);
}
+
void
-libbalsa_message_set_in_reply_to_from_string(LibBalsaMessage * message,
- const gchar * str)
+libbalsa_message_set_in_reply_to_from_string(LibBalsaMessage *message,
+ const gchar *str)
{
if (!message->in_reply_to && str) {
- /* FIXME for Balsa's old non-compliant header */
- gchar *p = strrchr(str, ';');
- p = p ? g_strndup(str, p - str) : g_strdup(str);
- message->in_reply_to = references_decode(p);
- g_free(p);
+ /* FIXME for Balsa's old non-compliant header */
+ gchar *p = strrchr(str, ';');
+ p = p ? g_strndup(str, p - str) : g_strdup(str);
+ message->in_reply_to = references_decode(p);
+ g_free(p);
}
}
+
/* set a header, if (all) or if it's needed all the time:
* headers->from
* headers->date
@@ -1050,8 +1205,10 @@ libbalsa_message_set_in_reply_to_from_string(LibBalsaMessage * message,
* in_reply_to
*/
static gboolean
-lbmsg_set_header(LibBalsaMessage *message, const gchar *name,
- const gchar* value, gboolean all)
+lbmsg_set_header(LibBalsaMessage *message,
+ const gchar *name,
+ const gchar *value,
+ gboolean all)
{
gchar *val = NULL;
@@ -1071,99 +1228,99 @@ lbmsg_set_header(LibBalsaMessage *message, const gchar *name,
}
if (g_ascii_strcasecmp(name, "Subject") == 0) {
- if (!strcmp(value,
+ if (!strcmp(value,
"DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA")) {
g_free(val);
- return FALSE;
+ return FALSE;
}
#if MESSAGE_COPY_CONTENT
libbalsa_message_set_subject_from_header(message, value);
#endif
- } else
- if (g_ascii_strcasecmp(name, "Date") == 0) {
- message->headers->date = g_mime_utils_header_decode_date(value, NULL);
- } else
- if (message->headers->from == NULL &&
- g_ascii_strcasecmp(name, "From") == 0) {
+ } else if (g_ascii_strcasecmp(name, "Date") == 0) {
+ message->headers->date = g_mime_utils_header_decode_date(value, NULL);
+ } else if ((message->headers->from == NULL) &&
+ (g_ascii_strcasecmp(name, "From") == 0)) {
message->headers->from = internet_address_list_parse_string(value);
- } else
- if (message->headers->to_list == NULL &&
- g_ascii_strcasecmp(name, "To") == 0) {
- message->headers->to_list = internet_address_list_parse_string(value);
- } else
- if (g_ascii_strcasecmp(name, "In-Reply-To") == 0) {
- libbalsa_message_set_in_reply_to_from_string(message, value);
- } else
- if (message->message_id == NULL &&
- g_ascii_strcasecmp(name, "Message-ID") == 0) {
- message->message_id = g_mime_utils_decode_message_id(value);
- } else
- if (g_ascii_strcasecmp(name, "References") == 0) {
- libbalsa_message_set_references_from_string(message, value);
- } else
- if (message->headers->content_type == NULL &&
- g_ascii_strcasecmp(name, "Content-Type") == 0) {
- message->headers->content_type =
- g_mime_content_type_new_from_string(value);
- } else
- if (message->headers->dispnotify_to == NULL &&
- g_ascii_strcasecmp(name, "Disposition-Notification-To") == 0) {
- message->headers->dispnotify_to =
- internet_address_list_parse_string(value);
+ } else if ((message->headers->to_list == NULL) &&
+ (g_ascii_strcasecmp(name, "To") == 0)) {
+ message->headers->to_list = internet_address_list_parse_string(value);
+ } else if (g_ascii_strcasecmp(name, "In-Reply-To") == 0) {
+ libbalsa_message_set_in_reply_to_from_string(message, value);
+ } else if ((message->message_id == NULL) &&
+ (g_ascii_strcasecmp(name, "Message-ID") == 0)) {
+ message->message_id = g_mime_utils_decode_message_id(value);
+ } else if (g_ascii_strcasecmp(name, "References") == 0) {
+ libbalsa_message_set_references_from_string(message, value);
+ } else if ((message->headers->content_type == NULL) &&
+ (g_ascii_strcasecmp(name, "Content-Type") == 0)) {
+ message->headers->content_type = g_mime_content_type_new_from_string(value);
+ } else if ((message->headers->dispnotify_to == NULL) &&
+ (g_ascii_strcasecmp(name, "Disposition-Notification-To") == 0)) {
+ message->headers->dispnotify_to = internet_address_list_parse_string(value);
} else
#ifdef MESSAGE_COPY_CONTENT
if (g_ascii_strcasecmp(name, "Content-Length") == 0) {
- message->length = atoi(value);
+ message->length = atoi(value);
} else
#endif
- if (all)
+ if (all) {
message->headers->user_hdrs =
g_list_prepend(message->headers->user_hdrs,
- libbalsa_create_hdr_pair(name,
- g_strdup(value)));
+ libbalsa_create_hdr_pair(name, g_strdup(value)));
+ }
g_free(val);
return TRUE;
}
+
static gboolean
lb_message_set_headers_from_string(LibBalsaMessage *message,
- const gchar *lines, gboolean all)
+ const gchar *lines,
+ gboolean all)
{
gchar *header, *value;
const gchar *val, *eoh;
do {
- for(val = lines; *val && *val >32 && *val<127 && *val != ':'; val++)
- ;
- if(*val != ':') /* parsing error */
+ for (val = lines; *val && *val > 32 && *val < 127 && *val != ':'; val++) {
+ }
+ if (*val != ':') /* parsing error */
return FALSE;
- for(eoh = val+1; *eoh && (eoh[0] != '\n' || isspace(eoh[1])); eoh++)
- ;
- header = g_strndup(lines, val-lines);
- lines = eoh;
- for(val=val+1; *val && isspace(*val); val++)
- ; /* strip spaces at front... */
- while(eoh>val && isspace(*eoh)) eoh--; /* .. and at the end */
- value = g_strndup(val, eoh-val+1);
-
+
+ for (eoh = val + 1; *eoh && (eoh[0] != '\n' || isspace(eoh[1])); eoh++) {
+ }
+ header = g_strndup(lines, val - lines);
+ lines = eoh;
+ for (val = val + 1; *val && isspace(*val); val++) {
+ /* strip spaces at front... */
+ }
+ while (eoh > val && isspace(*eoh)) {
+ eoh--; /* .. and at the end */
+ }
+ value = g_strndup(val, eoh - val + 1);
+
lbmsg_set_header(message, header, value, all);
- g_free(header); g_free(value);
- if(!*lines || !*++lines) break;
- } while(1);
+ g_free(header);
+ g_free(value);
+ if (!*lines || !*++lines)
+ break;
+ } while (1);
return TRUE;
}
+
gboolean
libbalsa_message_set_headers_from_string(LibBalsaMessage *message,
- const gchar *lines)
+ const gchar *lines)
{
return lb_message_set_headers_from_string(message, lines, TRUE);
}
+
void
-libbalsa_message_load_envelope_from_stream(LibBalsaMessage * message,
- GMimeStream *gmime_stream)
+libbalsa_message_load_envelope_from_stream(LibBalsaMessage *message,
+ GMimeStream *gmime_stream)
{
GMimeStream *gmime_stream_filter;
GMimeFilter *gmime_filter_crlf;
@@ -1183,7 +1340,7 @@ libbalsa_message_load_envelope_from_stream(LibBalsaMessage * message,
g_mime_filter_crlf_new(FALSE,
FALSE);
g_mime_stream_filter_add(GMIME_STREAM_FILTER(gmime_stream_filter),
- gmime_filter_crlf);
+ gmime_filter_crlf);
g_object_unref(gmime_filter_crlf);
/* Buffer the message stream, so we can read it line by line. */
@@ -1198,30 +1355,30 @@ libbalsa_message_load_envelope_from_stream(LibBalsaMessage * message,
*/
line = g_byte_array_new();
do {
- g_mime_stream_buffer_readln(gmime_stream_buffer, line);
- while (g_mime_stream_read(gmime_stream_buffer,
- (char *) &lookahead, 1) == 1
+ g_mime_stream_buffer_readln(gmime_stream_buffer, line);
+ while (g_mime_stream_read(gmime_stream_buffer,
+ (char *) &lookahead, 1) == 1
&& (lookahead == ' ' || lookahead == '\t')) {
g_byte_array_append(line, &lookahead, 1);
g_mime_stream_buffer_readln(gmime_stream_buffer, line);
- }
- if (line->len == 0 || line->data[line->len-1]!='\n') {
- /* EOF or read error; in either case, message has no body. */
- break;
- }
- line->data[line->len-1]='\0'; /* terminate line by overwriting '\n' */
- if (!lb_message_set_headers_from_string(message,
- (gchar *) line->data,
- FALSE)) {
- /* Ignore error return caused by malformed header. */
- }
- if (lookahead == '\n') {/* end of header */
+ }
+ if ((line->len == 0) || (line->data[line->len - 1] != '\n')) {
+ /* EOF or read error; in either case, message has no body. */
+ break;
+ }
+ line->data[line->len - 1] = '\0'; /* terminate line by overwriting '\n' */
+ if (!lb_message_set_headers_from_string(message,
+ (gchar *) line->data,
+ FALSE)) {
+ /* Ignore error return caused by malformed header. */
+ }
+ if (lookahead == '\n') {/* end of header */
/* Message looks valid--set its length. */
message->length = g_mime_stream_length(gmime_stream);
- break;
- }
- line->len = 0;
- g_byte_array_append(line, &lookahead, 1);
+ break;
+ }
+ line->len = 0;
+ g_byte_array_append(line, &lookahead, 1);
} while (TRUE);
g_byte_array_free(line, TRUE);
@@ -1230,6 +1387,7 @@ libbalsa_message_load_envelope_from_stream(LibBalsaMessage * message,
libbalsa_mime_stream_shared_unlock(gmime_stream);
}
+
void
libbalsa_message_load_envelope(LibBalsaMessage *message)
{
@@ -1237,14 +1395,16 @@ libbalsa_message_load_envelope(LibBalsaMessage *message)
gmime_stream = libbalsa_message_stream(message);
if (!gmime_stream)
- return;
+ return;
+
libbalsa_message_load_envelope_from_stream(message, gmime_stream);
g_object_unref(gmime_stream);
}
+
GMimeStream *
-libbalsa_message_stream(LibBalsaMessage * message)
+libbalsa_message_stream(LibBalsaMessage *message)
{
LibBalsaMailbox *mailbox;
GMimeStream *mime_stream;
@@ -1258,6 +1418,7 @@ libbalsa_message_stream(LibBalsaMessage * message)
return libbalsa_mailbox_get_message_stream(mailbox,
message->msgno, FALSE);
+
mime_stream = g_mime_stream_mem_new();
g_mime_object_write_to_stream(GMIME_OBJECT(message->mime_msg),
mime_stream);
@@ -1266,9 +1427,11 @@ libbalsa_message_stream(LibBalsaMessage * message)
return mime_stream;
}
+
gboolean
-libbalsa_message_copy(LibBalsaMessage * message, LibBalsaMailbox * dest,
- GError ** err)
+libbalsa_message_copy(LibBalsaMessage *message,
+ LibBalsaMailbox *dest,
+ GError **err)
{
LibBalsaMailbox *mailbox;
gboolean retval;
@@ -1295,9 +1458,10 @@ libbalsa_message_copy(LibBalsaMessage * message, LibBalsaMailbox * dest,
return retval;
}
+
void
-libbalsa_message_set_subject(LibBalsaMessage * message,
- const gchar * subject)
+libbalsa_message_set_subject(LibBalsaMessage *message,
+ const gchar *subject)
{
g_free(message->subj);
message->subj = g_strdup(subject);
@@ -1305,9 +1469,10 @@ libbalsa_message_set_subject(LibBalsaMessage * message,
canonize_header_value(message->subj);
}
+
void
-libbalsa_message_set_subject_from_header(LibBalsaMessage * message,
- const gchar * header)
+libbalsa_message_set_subject_from_header(LibBalsaMessage *message,
+ const gchar *header)
{
if (header) {
gchar *subject =
@@ -1317,13 +1482,322 @@ libbalsa_message_set_subject_from_header(LibBalsaMessage * message,
}
}
+
const gchar *
-libbalsa_message_get_tempdir(LibBalsaMessage * message)
+libbalsa_message_get_tempdir(LibBalsaMessage *message)
{
- if (!message->tempdir) {
+ if (!message->tempdir)
if (!libbalsa_mktempdir(&message->tempdir))
g_warning("Could not make tempdir");
- }
return message->tempdir;
}
+
+
+/*
+ * Getters
+ */
+
+LibBalsaMailbox *
+libbalsa_message_get_mailbox(LibBalsaMessage *message)
+{
+ return message->mailbox;
+}
+
+
+LibBalsaMessageHeaders *
+libbalsa_message_get_headers(LibBalsaMessage *message)
+{
+ return message->headers;
+}
+
+
+LibBalsaMessageBody *
+libbalsa_message_get_body_list(LibBalsaMessage *message)
+{
+ return message->body_list;
+}
+
+
+GMimeMessage *
+libbalsa_message_get_mime_msg(LibBalsaMessage *message)
+{
+ return message->mime_msg;
+}
+
+
+LibBalsaMessageFlag
+libbalsa_message_get_flags(LibBalsaMessage *message)
+{
+ return message->flags;
+}
+
+
+const gchar *
+libbalsa_message_get_message_id(LibBalsaMessage *message)
+{
+ return message->message_id;
+}
+
+
+glong
+libbalsa_message_get_msgno(LibBalsaMessage *message)
+{
+ return message->msgno;
+}
+
+
+glong
+libbalsa_message_get_length(LibBalsaMessage *message)
+{
+ return message->length;
+}
+
+
+gboolean
+libbalsa_message_get_has_all_headers(LibBalsaMessage *message)
+{
+ return message->has_all_headers;
+}
+
+
+InternetAddressList *
+libbalsa_message_get_sender(LibBalsaMessage *message)
+{
+ return message->sender;
+}
+
+
+gboolean
+libbalsa_message_get_request_dsn(LibBalsaMessage *message)
+{
+ return message->request_dsn;
+}
+
+
+GList *
+libbalsa_message_get_references(LibBalsaMessage *message)
+{
+ return message->references;
+}
+
+
+#ifdef HAVE_GPGME
+LibBalsaIdentity *
+libbalsa_message_get_identity(LibBalsaMessage *message)
+{
+ return message->ident;
+}
+
+
+#endif
+
+GList *
+libbalsa_message_get_parameters(LibBalsaMessage *message)
+{
+ return message->parameters;
+}
+
+
+const gchar *
+libbalsa_message_get_subtype(LibBalsaMessage *message)
+{
+ return message->subtype;
+}
+
+
+guint
+libbalsa_message_get_gpg_mode(LibBalsaMessage *message)
+{
+ return message->gpg_mode;
+}
+
+
+GList *
+libbalsa_message_get_in_reply_to(LibBalsaMessage *message)
+{
+ return message->in_reply_to;
+}
+
+
+gboolean
+libbalsa_message_get_att_pubkey(LibBalsaMessage *message)
+{
+ return message->att_pubkey;
+}
+
+
+LibBalsaMsgProtectState
+libbalsa_message_get_prot_state(LibBalsaMessage *message)
+{
+ return message->prot_state;
+}
+
+
+guint
+libbalsa_message_get_body_ref(LibBalsaMessage *message)
+{
+ return message->body_ref;
+}
+
+
+/*
+ * Setters
+ */
+
+void
+libbalsa_message_set_flags(LibBalsaMessage *message,
+ LibBalsaMessageFlag flags)
+{
+ message->flags = flags;
+}
+
+
+void
+libbalsa_message_set_mailbox(LibBalsaMessage *message,
+ LibBalsaMailbox *mailbox)
+{
+ message->mailbox = mailbox;
+}
+
+
+void
+libbalsa_message_set_msgno(LibBalsaMessage *message,
+ glong msgno)
+{
+ message->msgno = msgno;
+}
+
+
+void
+libbalsa_message_set_has_all_headers(LibBalsaMessage *message,
+ gboolean has_all_headers)
+{
+ message->has_all_headers = has_all_headers;
+}
+
+
+#if MESSAGE_COPY_CONTENT
+void
+libbalsa_message_set_length(LibBalsaMessage *message,
+ glong length)
+{
+ message->length = length;
+}
+
+
+#endif
+
+void
+libbalsa_message_set_mime_msg(LibBalsaMessage *message,
+ GMimeMessage *mime_message)
+{
+ g_set_object(&message->mime_msg, mime_message);
+}
+
+
+void
+libbalsa_message_set_sender(LibBalsaMessage *message,
+ InternetAddressList *sender)
+{
+ g_set_object(&message->sender, sender);
+}
+
+
+void
+libbalsa_message_set_message_id(LibBalsaMessage *message,
+ const gchar *message_id)
+{
+ g_free(message->message_id);
+ message->message_id = g_strdup(message_id);
+}
+
+
+void
+libbalsa_message_set_prot_state(LibBalsaMessage *message,
+ LibBalsaMsgProtectState prot_state)
+{
+ message->prot_state = prot_state;
+}
+
+
+void
+libbalsa_message_set_request_dsn(LibBalsaMessage *message,
+ gboolean request_dsn)
+{
+ message->request_dsn = request_dsn;
+}
+
+
+void
+libbalsa_message_set_subtype(LibBalsaMessage *message,
+ const gchar *subtype)
+{
+ g_free(message->subtype);
+ message->subtype = g_strdup(subtype);
+}
+
+
+void
+libbalsa_message_set_parameters(LibBalsaMessage *message,
+ GList *parameters)
+{
+ g_list_free_full(message->parameters, (GDestroyNotify) g_strfreev);
+ message->parameters = parameters;
+}
+
+
+void
+libbalsa_message_set_body_list(LibBalsaMessage *message,
+ LibBalsaMessageBody *body_list)
+{
+ message->body_list = body_list;
+}
+
+
+void
+libbalsa_message_set_references(LibBalsaMessage *message,
+ GList *references)
+{
+ g_list_free_full(message->references, g_free);
+ /* We steal the GList and its data; see libbalsa_message_finalize */
+ message->references = references;
+}
+
+
+void
+libbalsa_message_set_in_reply_to(LibBalsaMessage *message,
+ GList *in_reply_to)
+{
+ g_list_free_full(message->in_reply_to, g_free);
+ /* We steal the GList and its data; see libbalsa_message_finalize */
+ message->in_reply_to = in_reply_to;
+}
+
+
+void
+libbalsa_message_set_gpg_mode(LibBalsaMessage *message,
+ guint mode)
+{
+ message->gpg_mode = mode;
+}
+
+
+void
+libbalsa_message_set_att_pubkey(LibBalsaMessage *message,
+ gboolean att_pubkey)
+{
+ message->att_pubkey = att_pubkey;
+}
+
+
+#ifdef HAVE_GPGME
+void
+libbalsa_message_set_identity(LibBalsaMessage *message,
+ LibBalsaIdentity *ident)
+{
+ message->ident = g_object_ref(ident);
+}
+
+
+#endif
diff --git a/libbalsa/message.h b/libbalsa/message.h
index 02f3a72..40c07f0 100644
--- a/libbalsa/message.h
+++ b/libbalsa/message.h
@@ -5,14 +5,14 @@
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
+ * the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* 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
+ * 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 General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
@@ -21,7 +21,7 @@
#define __LIBBALSA_MESSAGE_H__
#ifndef BALSA_VERSION
-# error "Include config.h before this file."
+# error "Include config.h before this file."
#endif
#include <glib.h>
@@ -32,23 +32,19 @@
#include <gmime/gmime.h>
#ifdef HAVE_GPGME
-#include "rfc3156.h"
+# include "rfc3156.h"
#endif
#define MESSAGE_COPY_CONTENT 1
-#define LIBBALSA_TYPE_MESSAGE \
- (libbalsa_message_get_type())
-#define LIBBALSA_MESSAGE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST(obj, LIBBALSA_TYPE_MESSAGE, LibBalsaMessage))
-#define LIBBALSA_MESSAGE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST(klass, LIBBALSA_TYPE_MESSAGE, \
- LibBalsaMessageClass))
-#define LIBBALSA_IS_MESSAGE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE(obj, LIBBALSA_TYPE_MESSAGE))
-#define LIBBALSA_IS_MESSAGE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE(klass, LIBBALSA_TYPE_MESSAGE))
-
-typedef struct _LibBalsaMessageClass LibBalsaMessageClass;
+
+#define LIBBALSA_TYPE_MESSAGE libbalsa_message_get_type()
+
+G_DECLARE_FINAL_TYPE(LibBalsaMessage,
+ libbalsa_message,
+ LIBBALSA,
+ MESSAGE,
+ GObject)
+
typedef enum _LibBalsaMessageFlag LibBalsaMessageFlag;
enum _LibBalsaMessageFlag {
@@ -57,16 +53,16 @@ enum _LibBalsaMessageFlag {
LIBBALSA_MESSAGE_FLAG_REPLIED = 1 << 2,
LIBBALSA_MESSAGE_FLAG_FLAGGED = 1 << 3,
LIBBALSA_MESSAGE_FLAG_RECENT = 1 << 4,
- LIBBALSA_MESSAGE_FLAG_SELECTED= 1 << 5, /* pseudo flag */
- LIBBALSA_MESSAGE_FLAG_INVALID = 1 << 6 /* pseudo flag */
+ LIBBALSA_MESSAGE_FLAG_SELECTED= 1 << 5, /* pseudo flag */
+ LIBBALSA_MESSAGE_FLAG_INVALID = 1 << 6 /* pseudo flag */
};
#define LIBBALSA_MESSAGE_FLAGS_REAL \
- (LIBBALSA_MESSAGE_FLAG_NEW | \
- LIBBALSA_MESSAGE_FLAG_DELETED | \
- LIBBALSA_MESSAGE_FLAG_REPLIED | \
- LIBBALSA_MESSAGE_FLAG_FLAGGED | \
- LIBBALSA_MESSAGE_FLAG_RECENT)
+ (LIBBALSA_MESSAGE_FLAG_NEW | \
+ LIBBALSA_MESSAGE_FLAG_DELETED | \
+ LIBBALSA_MESSAGE_FLAG_REPLIED | \
+ LIBBALSA_MESSAGE_FLAG_FLAGGED | \
+ LIBBALSA_MESSAGE_FLAG_RECENT)
typedef enum _LibBalsaMessageStatus LibBalsaMessageStatus;
enum _LibBalsaMessageStatus {
@@ -156,92 +152,8 @@ struct _LibBalsaMessageHeaders {
GList *user_hdrs;
};
-struct _LibBalsaMessage {
- GObject object;
-
- /* the mailbox this message belongs to */
- LibBalsaMailbox *mailbox;
-
- /* flags */
- LibBalsaMessageFlag flags;
-
- /* headers */
- LibBalsaMessageHeaders *headers;
- int updated; /** whether complete headers have been fetched */
-
- GMimeMessage *mime_msg;
-
- /* sender address */
- InternetAddressList *sender;
-
- /* subject line; we still need it here for sending;
- * although _SET_SUBJECT might resolve it(?)
- * but we can set to to NULL unless there is no mailbox, like
- * on sending. */
- gchar *subj;
-#ifdef MESSAGE_COPY_CONTENT
-#define LIBBALSA_MESSAGE_GET_SUBJECT(m) \
- ((m)->subj ? (m)->subj : _("(No subject)"))
-#else
-#define LIBBALSA_MESSAGE_GET_SUBJECT(m) libbalsa_message_get_subject(m)
-#endif
-
- /* replied message ID's */
- GList *references;
-
- /* replied message ID; from address on date */
- GList *in_reply_to;
-
- /* message ID */
- gchar *message_id;
-
-#ifdef HAVE_GPGME
- /* GPG sign and/or encrypt message (sending) */
- guint gpg_mode;
-
- /* attach the GnuPG public key to the message (sending) */
- gboolean att_pubkey;
-
- /* protection (i.e. sign/encrypt) status (received message) */
- LibBalsaMsgProtectState prot_state;
-
- /* sender identity, required for choosing a forced GnuPG or S/MIME key */
- LibBalsaIdentity *ident;
-#endif
-
- /* request a DSN (sending) */
- gboolean request_dsn;
-
- /* a forced multipart subtype or NULL for mixed; used only for
- * sending */
- gchar *subtype;
-
- /* additional message content type parameters; used only for sending */
- GList *parameters;
-
- /* message body */
- guint body_ref;
- LibBalsaMessageBody *body_list;
- /* GList *body_list; */
-
- glong msgno; /* message no; always copy for faster sorting;
- * counting starts at 1. */
-#if MESSAGE_COPY_CONTENT
-#define LIBBALSA_MESSAGE_GET_NO(m) ((m)->msgno)
- glong length; /* byte len */
-#define LIBBALSA_MESSAGE_GET_LENGTH(m) ((m)->length)
-#else
-#define LIBBALSA_MESSAGE_GET_LENGTH(m) libbalsa_message_get_length(m)
-#define LIBBALSA_MESSAGE_GET_NO(m) libbalsa_message_get_no(m)
-#endif
-
- gchar *tempdir; /* to hold named parts */
-
- unsigned has_all_headers:1;
-};
-
#define LIBBALSA_MESSAGE_HAS_FLAG(message, mask) \
- ((LIBBALSA_MESSAGE(message)->flags & mask) != 0)
+ ((libbalsa_message_get_flags(LIBBALSA_MESSAGE(message)) & mask) != 0)
#define LIBBALSA_MESSAGE_IS_UNREAD(message) \
LIBBALSA_MESSAGE_HAS_FLAG(message, LIBBALSA_MESSAGE_FLAG_NEW)
#define LIBBALSA_MESSAGE_IS_DELETED(message) \
@@ -253,26 +165,18 @@ struct _LibBalsaMessage {
#define LIBBALSA_MESSAGE_IS_RECENT(message) \
LIBBALSA_MESSAGE_HAS_FLAG(message, LIBBALSA_MESSAGE_FLAG_RECENT)
-struct _LibBalsaMessageClass {
- GObjectClass parent_class;
-
- /* deal with flags being set/unset */
- /* Signal: */
- void (*status_changed) (LibBalsaMessage * message,
- LibBalsaMessageFlag flag, gboolean);
-};
-
-
-GType libbalsa_message_get_type(void);
+#define LIBBALSA_MESSAGE_GET_SUBJECT(m) libbalsa_message_get_subject(m)
+#define LIBBALSA_MESSAGE_GET_NO(m) libbalsa_message_get_msgno(m)
+#define LIBBALSA_MESSAGE_GET_LENGTH(m) libbalsa_message_get_length(m)
/*
* message headers
*/
-void libbalsa_message_headers_destroy(LibBalsaMessageHeaders * headers);
-void libbalsa_message_headers_from_gmime(LibBalsaMessageHeaders *headers,
- GMimeMessage *msg);
-void libbalsa_message_init_from_gmime(LibBalsaMessage * message,
- GMimeMessage * msg);
+void libbalsa_message_headers_destroy(LibBalsaMessageHeaders *headers);
+void libbalsa_message_headers_from_gmime(LibBalsaMessageHeaders *headers,
+ GMimeMessage *msg);
+void libbalsa_message_init_from_gmime(LibBalsaMessage *message,
+ GMimeMessage *msg);
GList *libbalsa_message_user_hdrs_from_gmime(GMimeMessage *msg);
@@ -281,84 +185,170 @@ GList *libbalsa_message_user_hdrs_from_gmime(GMimeMessage *msg);
*/
LibBalsaMessage *libbalsa_message_new(void);
-gboolean libbalsa_message_save(LibBalsaMessage * message,
- const gchar *filename);
+gboolean libbalsa_message_save(LibBalsaMessage *message,
+ const gchar *filename);
-void libbalsa_message_reply(LibBalsaMessage * message);
+void libbalsa_message_reply(LibBalsaMessage *message);
-void libbalsa_message_append_part(LibBalsaMessage * message,
- LibBalsaMessageBody * body);
+void libbalsa_message_append_part(LibBalsaMessage *message,
+ LibBalsaMessageBody *body);
-gboolean libbalsa_message_body_ref(LibBalsaMessage * message, gboolean read,
- gboolean fetch_all_headers);
-void libbalsa_message_body_unref(LibBalsaMessage * message);
+gboolean libbalsa_message_body_ref(LibBalsaMessage *message,
+ gboolean read,
+ gboolean fetch_all_headers);
+void libbalsa_message_body_unref(LibBalsaMessage *message);
/*
* misc message releated functions
*/
-const gchar *libbalsa_message_pathname(LibBalsaMessage * message);
-const gchar *libbalsa_message_body_charset(LibBalsaMessageBody * body);
-gboolean libbalsa_message_is_multipart(LibBalsaMessage * message);
-gboolean libbalsa_message_is_partial(LibBalsaMessage * message,
- gchar ** id);
-gboolean libbalsa_message_has_attachment(LibBalsaMessage * message);
+const gchar *libbalsa_message_pathname(LibBalsaMessage *message);
+const gchar *libbalsa_message_body_charset(LibBalsaMessageBody *body);
+gboolean libbalsa_message_is_multipart(LibBalsaMessage *message);
+gboolean libbalsa_message_is_partial(LibBalsaMessage *message,
+ gchar **id);
+gboolean libbalsa_message_has_attachment(LibBalsaMessage *message);
+
#ifdef HAVE_GPGME
-gboolean libbalsa_message_is_pgp_signed(LibBalsaMessage * message);
-gboolean libbalsa_message_is_pgp_encrypted(LibBalsaMessage * message);
+gboolean libbalsa_message_is_pgp_signed(LibBalsaMessage *message);
+gboolean libbalsa_message_is_pgp_encrypted(LibBalsaMessage *message);
+
#endif
-const gchar* libbalsa_message_header_get_one(LibBalsaMessageHeaders* headers,
- const gchar *find);
-GList* libbalsa_message_header_get_all(LibBalsaMessageHeaders* headers,
- const gchar *find);
-const gchar *libbalsa_message_get_user_header(LibBalsaMessage * message,
- const gchar * name);
-void libbalsa_message_set_user_header(LibBalsaMessage * message,
- const gchar * name,
- const gchar * value);
+const gchar *libbalsa_message_header_get_one(LibBalsaMessageHeaders *headers,
+ const gchar *find);
+GList *libbalsa_message_header_get_all(LibBalsaMessageHeaders *headers,
+ const gchar *find);
+const gchar *libbalsa_message_get_user_header(LibBalsaMessage *message,
+ const gchar *name);
+void libbalsa_message_set_user_header(LibBalsaMessage *message,
+ const gchar *name,
+ const gchar *value);
LibBalsaMessageBody *libbalsa_message_get_part_by_id(LibBalsaMessage *
message,
- const gchar * id);
+ const gchar *id);
+
+void libbalsa_message_set_dispnotify(LibBalsaMessage *message,
+ InternetAddress *ia);
-void libbalsa_message_set_dispnotify(LibBalsaMessage *message,
- InternetAddress *ia);
+void libbalsa_message_set_subject(LibBalsaMessage *message,
+ const gchar *subject);
+void libbalsa_message_set_subject_from_header(LibBalsaMessage *message,
+ const gchar *header);
-void libbalsa_message_set_subject(LibBalsaMessage * message,
- const gchar * subject);
-void libbalsa_message_set_subject_from_header(LibBalsaMessage * message,
- const gchar * header);
/* use LIBBALSA_MESSAGE_GET_SUBJECT() macro, we may optimize this
function out if we find a way.
-*/
+ */
+const gchar *libbalsa_message_get_subject(LibBalsaMessage *message);
+
#ifndef MESSAGE_COPY_CONTENT
-const gchar* libbalsa_message_get_subject(LibBalsaMessage* message);
-guint libbalsa_message_get_lines(LibBalsaMessage* msg);
-glong libbalsa_message_get_length(LibBalsaMessage* msg);
+guint libbalsa_message_get_lines(LibBalsaMessage *msg);
+glong libbalsa_message_get_length(LibBalsaMessage *msg);
+
#endif
-glong libbalsa_message_get_no(LibBalsaMessage* msg);
LibBalsaMessageAttach libbalsa_message_get_attach_icon(LibBalsaMessage *
- message);
-#define libbalsa_message_date_to_utf8(m, f) libbalsa_date_to_utf8((m)->headers->date, (f))
+ message);
+
+#define libbalsa_message_date_to_utf8(m, f) libbalsa_date_to_utf8(libbalsa_message_get_headers( \
+ m)->date, (f))
#define libbalsa_message_headers_date_to_utf8(h, f) libbalsa_date_to_utf8((h)->date, (f))
-GList *libbalsa_message_refs_for_threading(LibBalsaMessage* msg);
-
-void libbalsa_message_load_envelope_from_stream(LibBalsaMessage * message,
- GMimeStream * stream);
-void libbalsa_message_load_envelope(LibBalsaMessage *message);
-gboolean libbalsa_message_set_headers_from_string(LibBalsaMessage *message,
- const gchar *str);
-void libbalsa_message_set_references_from_string(LibBalsaMessage * message,
- const gchar *str);
-void libbalsa_message_set_in_reply_to_from_string(LibBalsaMessage * message,
- const gchar *str);
-GMimeStream *libbalsa_message_stream(LibBalsaMessage * message);
-gboolean libbalsa_message_copy(LibBalsaMessage * message,
- LibBalsaMailbox * dest, GError ** err);
-void libbalsa_message_change_flags(LibBalsaMessage * message,
+GList *libbalsa_message_refs_for_threading(LibBalsaMessage *msg);
+
+void libbalsa_message_load_envelope_from_stream(LibBalsaMessage *message,
+ GMimeStream *stream);
+void libbalsa_message_load_envelope(LibBalsaMessage *message);
+gboolean libbalsa_message_set_headers_from_string(LibBalsaMessage *message,
+ const gchar *str);
+void libbalsa_message_set_references_from_string(LibBalsaMessage *message,
+ const gchar *str);
+void libbalsa_message_set_in_reply_to_from_string(LibBalsaMessage *message,
+ const gchar *str);
+GMimeStream *libbalsa_message_stream(LibBalsaMessage *message);
+gboolean libbalsa_message_copy(LibBalsaMessage *message,
+ LibBalsaMailbox *dest,
+ GError **err);
+void libbalsa_message_change_flags(LibBalsaMessage *message,
LibBalsaMessageFlag set,
LibBalsaMessageFlag clear);
-const gchar *libbalsa_message_get_tempdir(LibBalsaMessage * message);
-#endif /* __LIBBALSA_MESSAGE_H__ */
+const gchar *libbalsa_message_get_tempdir(LibBalsaMessage *message);
+
+/*
+ * Getters
+ */
+LibBalsaMailbox *libbalsa_message_get_mailbox(LibBalsaMessage *message);
+LibBalsaMessageHeaders *libbalsa_message_get_headers(LibBalsaMessage *message);
+LibBalsaMessageBody *libbalsa_message_get_body_list(LibBalsaMessage *message);
+GMimeMessage *libbalsa_message_get_mime_msg(LibBalsaMessage *message);
+LibBalsaMessageFlag libbalsa_message_get_flags(LibBalsaMessage *message);
+const gchar *libbalsa_message_get_message_id(LibBalsaMessage *message);
+glong libbalsa_message_get_msgno(LibBalsaMessage *message);
+glong libbalsa_message_get_length(LibBalsaMessage *message);
+gboolean libbalsa_message_get_has_all_headers(LibBalsaMessage *message);
+InternetAddressList *libbalsa_message_get_sender(LibBalsaMessage *message);
+gboolean libbalsa_message_get_request_dsn(LibBalsaMessage *message);
+GList *libbalsa_message_get_references(LibBalsaMessage *message);
+
+#ifdef HAVE_GPGME
+LibBalsaIdentity *libbalsa_message_get_identity(LibBalsaMessage *message);
+
+#endif
+GList *libbalsa_message_get_parameters(LibBalsaMessage *message);
+const gchar *libbalsa_message_get_subtype(LibBalsaMessage *message);
+guint libbalsa_message_get_gpg_mode(LibBalsaMessage *message);
+GList *libbalsa_message_get_in_reply_to(LibBalsaMessage *message);
+gboolean libbalsa_message_get_att_pubkey(LibBalsaMessage *message);
+LibBalsaMsgProtectState libbalsa_message_get_prot_state(LibBalsaMessage *message);
+guint libbalsa_message_get_body_ref(LibBalsaMessage *message);
+
+/*
+ * Setters
+ */
+void libbalsa_message_set_flags(LibBalsaMessage *message,
+ LibBalsaMessageFlag flags);
+void libbalsa_message_set_mailbox(LibBalsaMessage *message,
+ LibBalsaMailbox *mailbox);
+void libbalsa_message_set_msgno(LibBalsaMessage *message,
+ glong msgno);
+void libbalsa_message_set_has_all_headers(LibBalsaMessage *message,
+ gboolean has_all_headers);
+
+#if MESSAGE_COPY_CONTENT
+void libbalsa_message_set_length(LibBalsaMessage *message,
+ glong length);
+
+#endif
+
+void libbalsa_message_set_mime_msg(LibBalsaMessage *message,
+ GMimeMessage *mime_message);
+void libbalsa_message_set_sender(LibBalsaMessage *message,
+ InternetAddressList *sender);
+void libbalsa_message_set_message_id(LibBalsaMessage *message,
+ const gchar *message_id);
+void libbalsa_message_set_prot_state(LibBalsaMessage *message,
+ LibBalsaMsgProtectState prot_state);
+void libbalsa_message_set_request_dsn(LibBalsaMessage *message,
+ gboolean request_dsn);
+void libbalsa_message_set_subtype(LibBalsaMessage *message,
+ const gchar *subtype);
+void libbalsa_message_set_parameters(LibBalsaMessage *message,
+ GList *parameters);
+void libbalsa_message_set_body_list(LibBalsaMessage *message,
+ LibBalsaMessageBody *body_list);
+void libbalsa_message_set_references(LibBalsaMessage *message,
+ GList *references);
+void libbalsa_message_set_in_reply_to(LibBalsaMessage *message,
+ GList *in_reply_to);
+void libbalsa_message_set_gpg_mode(LibBalsaMessage *message,
+ guint mode);
+void libbalsa_message_set_att_pubkey(LibBalsaMessage *message,
+ gboolean att_pubkey);
+
+#ifdef HAVE_GPGME
+void libbalsa_message_set_identity(LibBalsaMessage *message,
+ LibBalsaIdentity *identity);
+
+#endif
+
+#endif /* __LIBBALSA_MESSAGE_H__ */
diff --git a/libbalsa/rfc3156.c b/libbalsa/rfc3156.c
index 695f421..20de720 100644
--- a/libbalsa/rfc3156.c
+++ b/libbalsa/rfc3156.c
@@ -361,7 +361,7 @@ libbalsa_body_check_signature(LibBalsaMessageBody * body,
g_object_unref(G_OBJECT(body->parts->next->sig_info));
/* verify the signature */
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ libbalsa_mailbox_lock_store(libbalsa_message_get_mailbox(body->message));
result = g_mime_gpgme_mps_verify(GMIME_MULTIPART_SIGNED(body->mime_part), &error);
if (!result) {
if (error) {
@@ -375,7 +375,7 @@ libbalsa_body_check_signature(LibBalsaMessageBody * body,
}
body->parts->next->sig_info = result;
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(libbalsa_message_get_mailbox(body->message));
return TRUE;
}
@@ -420,7 +420,7 @@ libbalsa_body_decrypt(LibBalsaMessageBody *body, gpgme_protocol_t protocol, GtkW
smime_encrypted = body->was_encrypted;
}
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ libbalsa_mailbox_lock_store(libbalsa_message_get_mailbox(body->message));
if (protocol == GPGME_PROTOCOL_OpenPGP) {
mime_obj =
g_mime_gpgme_mpe_decrypt(GMIME_MULTIPART_ENCRYPTED(body->mime_part),
@@ -430,7 +430,7 @@ libbalsa_body_decrypt(LibBalsaMessageBody *body, gpgme_protocol_t protocol, GtkW
g_mime_application_pkcs7_decrypt_verify(GMIME_PART(body->mime_part),
&sig_state, parent, &error);
}
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(libbalsa_message_get_mailbox(body->message));
/* check the result */
if (mime_obj == NULL) {
@@ -456,7 +456,7 @@ libbalsa_body_decrypt(LibBalsaMessageBody *body, gpgme_protocol_t protocol, GtkW
body->was_encrypted = smime_encrypted;
}
if (body->was_encrypted)
- body->message->prot_state = LIBBALSA_MSG_PROTECT_CRYPT;
+ libbalsa_message_set_prot_state(body->message, LIBBALSA_MSG_PROTECT_CRYPT);
libbalsa_message_body_set_mime_body(body, mime_obj);
if (sig_state) {
diff --git a/libbalsa/send.c b/libbalsa/send.c
index 2850ab9..39b3680 100644
--- a/libbalsa/send.c
+++ b/libbalsa/send.c
@@ -434,6 +434,7 @@ lbs_message_queue_real(LibBalsaMessage *message,
GError **error)
{
LibBalsaMsgCreateResult result;
+ GMimeMessage *mime_msg;
guint big_message;
gboolean rc;
@@ -445,23 +446,22 @@ lbs_message_queue_real(LibBalsaMessage *message,
return result;
}
+ mime_msg = libbalsa_message_get_mime_msg(message);
if (fccbox != NULL) {
- g_mime_object_set_header(GMIME_OBJECT(message->mime_msg), "X-Balsa-Fcc",
+ g_mime_object_set_header(GMIME_OBJECT(mime_msg), "X-Balsa-Fcc",
libbalsa_mailbox_get_url(fccbox));
}
- g_mime_object_set_header(GMIME_OBJECT(message->mime_msg), "X-Balsa-DSN",
- message->request_dsn ? "1" : "0");
- g_mime_object_set_header(GMIME_OBJECT(message->mime_msg), "X-Balsa-SmtpServer",
+ g_mime_object_set_header(GMIME_OBJECT(mime_msg), "X-Balsa-DSN",
+ libbalsa_message_get_request_dsn(message) ? "1" : "0");
+ g_mime_object_set_header(GMIME_OBJECT(mime_msg), "X-Balsa-SmtpServer",
libbalsa_smtp_server_get_name(smtp_server));
big_message = libbalsa_smtp_server_get_big_message(smtp_server);
if (big_message > 0) {
- GMimeMessage *mime_msg;
GMimeMessage **mime_msgs;
size_t nparts;
guint i;
- mime_msg = message->mime_msg;
mime_msgs =
g_mime_message_partial_split_message(mime_msg, big_message,
&nparts);
@@ -477,13 +477,15 @@ lbs_message_queue_real(LibBalsaMessage *message,
libbalsa_set_message_id(mime_msgs[i]);
}
if (rc) {
- message->mime_msg = mime_msgs[i];
+ /* Temporarily modify message by changing its mime_msg: */
+ libbalsa_message_set_mime_msg(message, mime_msgs[i]);
rc = libbalsa_message_copy(message, outbox, error);
}
g_object_unref(mime_msgs[i]);
}
g_free(mime_msgs);
- message->mime_msg = mime_msg;
+ /* Restore message's original mime_msg: */
+ libbalsa_message_set_mime_msg(message, mime_msg);
} else {
rc = libbalsa_message_copy(message, outbox, error);
}
@@ -721,7 +723,7 @@ lbs_process_queue_msg(guint msgno,
}
dsn_header = libbalsa_message_get_user_header(msg, "X-Balsa-DSN");
- msg->request_dsn = dsn_header != NULL ? atoi(dsn_header) != 0 : FALSE;
+ libbalsa_message_set_request_dsn(msg, dsn_header != NULL ? atoi(dsn_header) != 0 : FALSE);
new_message = msg_queue_item_new(send_message_info);
created = libbalsa_fill_msg_queue_item_from_queu(msg, new_message);
libbalsa_message_body_unref(msg);
@@ -729,18 +731,27 @@ lbs_process_queue_msg(guint msgno,
if (created != LIBBALSA_MESSAGE_CREATE_OK) {
msg_queue_item_destroy(new_message);
} else {
+ gboolean request_dsn;
+ LibBalsaMessageHeaders *headers;
+ InternetAddressList *from;
const InternetAddress* ia;
const gchar* mailbox;
libbalsa_message_change_flags(msg, LIBBALSA_MESSAGE_FLAG_FLAGGED, 0);
send_message_info->items = g_list_prepend(send_message_info->items, new_message);
new_message->smtp_msg = net_client_smtp_msg_new(send_message_data_cb, new_message);
- if (msg->request_dsn) {
- net_client_smtp_msg_set_dsn_opts(new_message->smtp_msg, msg->message_id, FALSE);
+ request_dsn = libbalsa_message_get_request_dsn(msg);
+ if (request_dsn) {
+ const gchar *message_id = libbalsa_message_get_message_id(msg);
+ net_client_smtp_msg_set_dsn_opts(new_message->smtp_msg,
+ message_id, FALSE);
}
/* Add the sender info */
- if (msg->headers->from && (ia = internet_address_list_get_address(msg->headers->from, 0))) {
+ headers = libbalsa_message_get_headers(msg);
+ from = headers->from;
+ if (from != NULL &&
+ (ia = internet_address_list_get_address(from, 0)) != NULL) {
while (ia != NULL && INTERNET_ADDRESS_IS_GROUP(ia)) {
ia = internet_address_list_get_address(INTERNET_ADDRESS_GROUP(
ia)->members, 0);
@@ -753,9 +764,9 @@ lbs_process_queue_msg(guint msgno,
net_client_smtp_msg_set_sender(new_message->smtp_msg, mailbox);
/* Now need to add the recipients to the message. */
- add_recipients(new_message->smtp_msg, msg->headers->to_list, msg->request_dsn);
- add_recipients(new_message->smtp_msg, msg->headers->cc_list, msg->request_dsn);
- add_recipients(new_message->smtp_msg, msg->headers->bcc_list, msg->request_dsn);
+ add_recipients(new_message->smtp_msg, headers->to_list, request_dsn);
+ add_recipients(new_message->smtp_msg, headers->cc_list, request_dsn);
+ add_recipients(new_message->smtp_msg, headers->bcc_list, request_dsn);
/* Estimate the size of the message. This need not be exact but it's better to err
* on the large side since some message headers may be altered during the transfer. */
@@ -931,8 +942,12 @@ static inline void
balsa_send_message_success(MessageQueueItem *mqi,
SendMessageInfo *info)
{
+ LibBalsaMailbox *mailbox;
+
+ mailbox = mqi->orig != NULL ? libbalsa_message_get_mailbox(mqi->orig) : NULL;
+
/* sending message successful */
- if ((mqi->orig != NULL) && (mqi->orig->mailbox != NULL)) {
+ if (mailbox != NULL) {
gboolean remove = TRUE;
const gchar *fccurl = libbalsa_message_get_user_header(mqi->orig, "X-Balsa-Fcc");
@@ -947,7 +962,7 @@ balsa_send_message_success(MessageQueueItem *mqi,
}
libbalsa_message_change_flags(mqi->orig, 0, LIBBALSA_MESSAGE_FLAG_NEW |
LIBBALSA_MESSAGE_FLAG_FLAGGED);
- libbalsa_mailbox_sync_storage(mqi->orig->mailbox, FALSE);
+ libbalsa_mailbox_sync_storage(mailbox, FALSE);
remove = libbalsa_message_copy(mqi->orig, fccbox, &err);
if (!remove) {
libbalsa_information(LIBBALSA_INFORMATION_ERROR,
@@ -968,8 +983,12 @@ static inline void
balsa_send_message_error(MessageQueueItem *mqi,
GError *error)
{
+ LibBalsaMailbox *mailbox;
+
+ mailbox = mqi->orig != NULL ? libbalsa_message_get_mailbox(mqi->orig) : NULL;
+
/* sending message failed */
- if ((mqi->orig != NULL) && (mqi->orig->mailbox != NULL)) {
+ if (mailbox != NULL) {
if (ERROR_IS_TRANSIENT(error)) {
/* Mark it as:
* - neither flagged nor deleted, so it can be resent later
@@ -1015,6 +1034,9 @@ balsa_send_message_real(SendMessageInfo *info)
for (this_msg = info->items; this_msg != NULL; this_msg = this_msg->next) {
MessageQueueItem *mqi = (MessageQueueItem *) this_msg->data;
gboolean send_res;
+ LibBalsaMailbox *mailbox;
+
+ mailbox = mqi->orig != NULL ? libbalsa_message_get_mailbox(mqi->orig) : NULL;
info->curr_msg++;
g_debug("%s: %u/%u mqi = %p", __func__, info->msg_count, info->curr_msg, mqi);
@@ -1022,13 +1044,11 @@ balsa_send_message_real(SendMessageInfo *info)
send_res = net_client_smtp_send_msg(info->session, mqi->smtp_msg, &error);
g_mutex_lock(&send_messages_lock);
- if ((mqi->orig != NULL) && (mqi->orig->mailbox != NULL)) {
+ if (mailbox != NULL) {
libbalsa_message_change_flags(mqi->orig, 0, LIBBALSA_MESSAGE_FLAG_FLAGGED);
} else {
- g_message("mqi: %p mqi->orig: %p mqi->orig->mailbox: %p\n",
- mqi,
- mqi ? mqi->orig : NULL,
- mqi && mqi->orig ? mqi->orig->mailbox : NULL);
+ g_message("mqi: %p mqi->orig: %p mailbox: %p\n",
+ mqi, mqi->orig, mailbox);
}
if (send_res) {
@@ -1052,8 +1072,12 @@ balsa_send_message_real(SendMessageInfo *info)
* without changing flags. */
for (this_msg = info->items; this_msg != NULL; this_msg = this_msg->next) {
MessageQueueItem *mqi = (MessageQueueItem *) this_msg->data;
+ LibBalsaMailbox *mailbox;
+
+ mailbox = mqi->orig != NULL ?
+ libbalsa_message_get_mailbox(mqi->orig) : NULL;
- if ((mqi->orig != NULL) && (mqi->orig->mailbox != NULL)) {
+ if (mailbox != NULL) {
libbalsa_message_change_flags(mqi->orig,
0,
LIBBALSA_MESSAGE_FLAG_FLAGGED |
@@ -1096,12 +1120,14 @@ balsa_send_message_real(SendMessageInfo *info)
static void
-message_add_references(const LibBalsaMessage *message,
+message_add_references(LibBalsaMessage *message,
GMimeMessage *msg)
{
+ GList *list;
+
/* If the message has references set, add them to the envelope */
- if (message->references != NULL) {
- GList *list = message->references;
+ list = libbalsa_message_get_references(message);
+ if (list != NULL) {
GString *str = g_string_new(NULL);
do {
@@ -1114,10 +1140,10 @@ message_add_references(const LibBalsaMessage *message,
g_string_free(str, TRUE);
}
- if (message->in_reply_to != NULL) {
+ list = libbalsa_message_get_in_reply_to(message);
+ if (list != NULL) {
/* There's no specific header function for In-Reply-To */
- g_mime_object_set_header(GMIME_OBJECT(msg), "In-Reply-To",
- message->in_reply_to->data);
+ g_mime_object_set_header(GMIME_OBJECT(msg), "In-Reply-To", list->data);
}
}
@@ -1195,6 +1221,7 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
GMimeObject *mime_root = NULL;
GMimeMessage *mime_message;
LibBalsaMessageBody *body;
+ LibBalsaMessageHeaders *headers;
InternetAddressList *ia_list;
gchar *tmp;
GList *list;
@@ -1205,14 +1232,16 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
#ifdef HAVE_GPGME
/* attach the public key only if we send the message, not if we just postpone it */
- if (!postponing && message->att_pubkey && ((message->gpg_mode & LIBBALSA_PROTECT_PROTOCOL) != 0)) {
+ if (!postponing &&
+ libbalsa_message_get_att_pubkey(message) &&
+ ((libbalsa_message_get_gpg_mode(message) & LIBBALSA_PROTECT_PROTOCOL) != 0)) {
attach_pubkey = TRUE;
}
#endif
- body = message->body_list;
+ body = libbalsa_message_get_body_list(message);
if ((body != NULL) && ((body->next != NULL) || attach_pubkey)) {
- mime_root = GMIME_OBJECT(g_mime_multipart_new_with_subtype(message->subtype));
+ mime_root = GMIME_OBJECT(g_mime_multipart_new_with_subtype(libbalsa_message_get_subtype(message)));
}
while (body != NULL) {
@@ -1349,14 +1378,16 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
g_strfreev(mime_type);
} else if (body->buffer != NULL) {
#ifdef HAVE_GPGME
+ guint mode;
guint use_gpg_mode;
LibBalsaMsgCreateResult crypt_res = LIBBALSA_MESSAGE_CREATE_OK;
/* in '2440 mode, touch *only* the first body! */
- if (!postponing && (body == body->message->body_list) &&
- (message->gpg_mode > 0) &&
- ((message->gpg_mode & LIBBALSA_PROTECT_OPENPGP) != 0)) {
- use_gpg_mode = message->gpg_mode;
+ mode = libbalsa_message_get_gpg_mode(message);
+ if (!postponing && (body == libbalsa_message_get_body_list(body->message)) &&
+ (mode > 0) &&
+ ((mode & LIBBALSA_PROTECT_OPENPGP) != 0)) {
+ use_gpg_mode = mode;
} else {
use_gpg_mode = 0;
}
@@ -1405,7 +1436,7 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
#endif
#ifdef HAVE_GPGME
- if ((message->body_list != NULL) && !postponing) {
+ if ((libbalsa_message_get_body_list(message) != NULL) && !postponing) {
LibBalsaMsgCreateResult crypt_res =
do_multipart_crypto(message, &mime_root, parent, error);
if (crypt_res != LIBBALSA_MESSAGE_CREATE_OK) {
@@ -1416,7 +1447,7 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
mime_message = g_mime_message_new(TRUE);
if (mime_root != NULL) {
- GList *param = message->parameters;
+ GList *param = libbalsa_message_get_parameters(message);
while (param != NULL) {
gchar **vals = (gchar **)param->data;
@@ -1430,17 +1461,16 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
}
message_add_references(message, mime_message);
- if (message->headers->from != NULL) {
- tmp = internet_address_list_to_string(message->headers->from,
- TRUE);
+ headers = libbalsa_message_get_headers(message);
+ if (headers->from != NULL) {
+ tmp = internet_address_list_to_string(headers->from, TRUE);
if (tmp != NULL) {
g_mime_message_set_sender(mime_message, tmp);
g_free(tmp);
}
}
- if (message->headers->reply_to != NULL) {
- tmp = internet_address_list_to_string(message->headers->reply_to,
- TRUE);
+ if (headers->reply_to != NULL) {
+ tmp = internet_address_list_to_string(headers->reply_to, TRUE);
if (tmp != NULL) {
g_mime_message_set_reply_to(mime_message, tmp);
g_free(tmp);
@@ -1452,32 +1482,31 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
LIBBALSA_MESSAGE_GET_SUBJECT(message));
}
- g_mime_message_set_date(mime_message, message->headers->date,
- get_tz_offset(message->headers->date));
+ g_mime_message_set_date(mime_message, headers->date, get_tz_offset(headers->date));
- if ((ia_list = message->headers->to_list)) {
+ if ((ia_list = headers->to_list) != NULL) {
InternetAddressList *recipients =
g_mime_message_get_recipients(mime_message,
GMIME_RECIPIENT_TYPE_TO);
internet_address_list_append(recipients, ia_list);
}
- if ((ia_list = message->headers->cc_list)) {
+ if ((ia_list = headers->cc_list) != NULL) {
InternetAddressList *recipients =
g_mime_message_get_recipients(mime_message,
GMIME_RECIPIENT_TYPE_CC);
internet_address_list_append(recipients, ia_list);
}
- if ((ia_list = message->headers->bcc_list)) {
+ if ((ia_list = headers->bcc_list) != NULL) {
InternetAddressList *recipients =
g_mime_message_get_recipients(mime_message,
GMIME_RECIPIENT_TYPE_BCC);
internet_address_list_append(recipients, ia_list);
}
- if (message->headers->dispnotify_to != NULL) {
- tmp = internet_address_list_to_string(message->headers->dispnotify_to, TRUE);
+ if (headers->dispnotify_to != NULL) {
+ tmp = internet_address_list_to_string(headers->dispnotify_to, TRUE);
if (tmp != NULL) {
g_mime_object_append_header(GMIME_OBJECT(mime_message),
"Disposition-Notification-To", tmp);
@@ -1485,7 +1514,7 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
}
}
- for (list = message->headers->user_hdrs; list; list = list->next) {
+ for (list = headers->user_hdrs; list; list = list->next) {
gchar **pair = list->data;
g_strchug(pair[1]);
g_mime_object_append_header(GMIME_OBJECT(mime_message), pair[0], pair[1]);
@@ -1498,7 +1527,8 @@ libbalsa_message_create_mime_message(LibBalsaMessage *message,
g_mime_object_append_header(GMIME_OBJECT(mime_message), "X-Mailer", tmp);
g_free(tmp);
- message->mime_msg = mime_message;
+ libbalsa_message_set_mime_msg(message, mime_message);
+ g_object_unref(mime_message);
return LIBBALSA_MESSAGE_CREATE_OK;
}
@@ -1518,7 +1548,7 @@ libbalsa_message_postpone(LibBalsaMessage *message,
gboolean flow,
GError **error)
{
- if (!message->mime_msg
+ if (!libbalsa_message_get_mime_msg(message)
&& (libbalsa_message_create_mime_message(message, flow,
TRUE, error) !=
LIBBALSA_MESSAGE_CREATE_OK)) {
@@ -1529,7 +1559,7 @@ libbalsa_message_postpone(LibBalsaMessage *message,
gint i;
for (i = 0; extra_headers[i] && extra_headers[i + 1]; i += 2) {
- g_mime_object_set_header(GMIME_OBJECT(message->mime_msg), extra_headers[i],
+ g_mime_object_set_header(GMIME_OBJECT(libbalsa_message_get_mime_msg(message)), extra_headers[i],
extra_headers[i + 1]);
}
}
@@ -1628,7 +1658,7 @@ libbalsa_create_msg(LibBalsaMessage *message,
gboolean flow,
GError **error)
{
- if (!message->mime_msg) {
+ if (libbalsa_message_get_mime_msg(message) == NULL) {
LibBalsaMsgCreateResult res =
libbalsa_message_create_mime_message(message, flow,
FALSE, error);
@@ -1637,7 +1667,7 @@ libbalsa_create_msg(LibBalsaMessage *message,
}
}
- libbalsa_set_message_id(message->mime_msg);
+ libbalsa_set_message_id(libbalsa_message_get_mime_msg(message));
return LIBBALSA_MESSAGE_CREATE_OK;
}
@@ -1651,11 +1681,13 @@ libbalsa_fill_msg_queue_item_from_queu(LibBalsaMessage *message,
LibBalsaMsgCreateResult result = LIBBALSA_MESSAGE_CREATE_ERROR;
mqi->orig = message;
- if (message->mime_msg != NULL) {
+ if (libbalsa_message_get_mime_msg(message) != NULL) {
+ LibBalsaMailbox *mailbox = libbalsa_message_get_mailbox(message);
+
msg_stream = g_mime_stream_mem_new();
- libbalsa_mailbox_lock_store(message->mailbox);
- g_mime_object_write_to_stream(GMIME_OBJECT(message->mime_msg), msg_stream);
- libbalsa_mailbox_unlock_store(message->mailbox);
+ libbalsa_mailbox_lock_store(mailbox);
+ g_mime_object_write_to_stream(GMIME_OBJECT(libbalsa_message_get_mime_msg(message)), msg_stream);
+ libbalsa_mailbox_unlock_store(mailbox);
g_mime_stream_reset(msg_stream);
} else {
msg_stream = libbalsa_message_stream(message);
@@ -1705,18 +1737,17 @@ lb_send_from(LibBalsaMessage * message, gpgme_protocol_t protocol)
if ((protocol == GPGME_PROTOCOL_OpenPGP) &&
((key_id =
- libbalsa_identity_get_force_gpg_key_id(message->ident)) != NULL)
+ libbalsa_identity_get_force_gpg_key_id(libbalsa_message_get_identity(message))) != NULL)
&& (key_id[0] != '\0')) {
from_id = key_id;
} else if ((protocol == GPGME_PROTOCOL_CMS) &&
((key_id =
- libbalsa_identity_get_force_smime_key_id(message->
- ident)) != NULL)
+ libbalsa_identity_get_force_smime_key_id(libbalsa_message_get_identity(message))) != NULL)
&& (key_id[0] != '\0')) {
from_id = key_id;
} else {
InternetAddress *ia =
- internet_address_list_get_address(message->headers->from, 0);
+ internet_address_list_get_address(libbalsa_message_get_headers(message)->from, 0);
while (INTERNET_ADDRESS_IS_GROUP(ia)) {
ia = internet_address_list_get_address(((InternetAddressGroup
@@ -1773,7 +1804,7 @@ libbalsa_create_rfc2440_buffer(LibBalsaMessage *message,
GtkWindow *parent,
GError **error)
{
- gint mode = message->gpg_mode;
+ gint mode = libbalsa_message_get_gpg_mode(message);
gboolean always_trust = (mode & LIBBALSA_PROTECT_ALWAYS_TRUST) != 0;
switch (mode & LIBBALSA_PROTECT_MODE) {
@@ -1789,27 +1820,25 @@ libbalsa_create_rfc2440_buffer(LibBalsaMessage *message,
case LIBBALSA_PROTECT_ENCRYPT:
case LIBBALSA_PROTECT_SIGN | LIBBALSA_PROTECT_ENCRYPT:
{
+ LibBalsaMessageHeaders *headers;
GList *encrypt_for = NULL;
gboolean result;
+ headers = libbalsa_message_get_headers(message);
/* build a list containing the addresses of all to:, cc:
and the from: address. Note: don't add bcc: addresses
as they would be visible in the encrypted block. */
- encrypt_for = get_mailbox_names(encrypt_for,
- message->headers->to_list);
- encrypt_for = get_mailbox_names(encrypt_for,
- message->headers->cc_list);
- encrypt_for = get_mailbox_names(encrypt_for,
- message->headers->from);
- if (message->headers->bcc_list != NULL) {
+ encrypt_for = get_mailbox_names(encrypt_for, headers->to_list);
+ encrypt_for = get_mailbox_names(encrypt_for, headers->cc_list);
+ encrypt_for = get_mailbox_names(encrypt_for, headers->from);
+ if (headers->bcc_list != NULL) {
libbalsa_information
(LIBBALSA_INFORMATION_WARNING,
ngettext("This message will not be encrypted "
"for the BCC: recipient.",
"This message will not be encrypted "
"for the BCC: recipients.",
- internet_address_list_length
- (message->headers->bcc_list)));
+ internet_address_list_length(headers->bcc_list)));
}
if (mode & LIBBALSA_PROTECT_SIGN) {
@@ -1849,27 +1878,30 @@ do_multipart_crypto(LibBalsaMessage *message,
GtkWindow *parent,
GError **error)
{
+ guint mode;
gpgme_protocol_t protocol;
gboolean always_trust;
+ mode = libbalsa_message_get_gpg_mode(message);
+
/* check if we shall do any protection */
- if (!(message->gpg_mode & LIBBALSA_PROTECT_MODE)) {
+ if ((mode & LIBBALSA_PROTECT_MODE) == 0) {
return LIBBALSA_MESSAGE_CREATE_OK;
}
/* check which protocol should be used */
- if (message->gpg_mode & LIBBALSA_PROTECT_RFC3156) {
+ if (mode & LIBBALSA_PROTECT_RFC3156) {
protocol = GPGME_PROTOCOL_OpenPGP;
- } else if (message->gpg_mode & LIBBALSA_PROTECT_SMIMEV3) {
+ } else if (mode & LIBBALSA_PROTECT_SMIMEV3) {
protocol = GPGME_PROTOCOL_CMS;
- } else if (message->gpg_mode & LIBBALSA_PROTECT_OPENPGP) {
+ } else if (mode & LIBBALSA_PROTECT_OPENPGP) {
return LIBBALSA_MESSAGE_CREATE_OK; /* already done... */
} else {
return LIBBALSA_MESSAGE_ENCRYPT_ERROR; /* hmmm.... */
}
- always_trust = (message->gpg_mode & LIBBALSA_PROTECT_ALWAYS_TRUST) != 0;
+ always_trust = (mode & LIBBALSA_PROTECT_ALWAYS_TRUST) != 0;
/* sign and/or encrypt */
- switch (message->gpg_mode & LIBBALSA_PROTECT_MODE) {
+ switch (mode & LIBBALSA_PROTECT_MODE) {
case LIBBALSA_PROTECT_SIGN: /* sign message */
if (!libbalsa_sign_mime_object(mime_root,
lb_send_from(message, protocol),
@@ -1881,27 +1913,26 @@ do_multipart_crypto(LibBalsaMessage *message,
case LIBBALSA_PROTECT_ENCRYPT:
case LIBBALSA_PROTECT_ENCRYPT | LIBBALSA_PROTECT_SIGN:
{
+ LibBalsaMessageHeaders *headers;
GList *encrypt_for = NULL;
gboolean success;
+ headers = libbalsa_message_get_headers(message);
/* build a list containing the addresses of all to:, cc:
and the from: address. Note: don't add bcc: addresses
as they would be visible in the encrypted block. */
- encrypt_for = get_mailbox_names(encrypt_for,
- message->headers->to_list);
- encrypt_for = get_mailbox_names(encrypt_for,
- message->headers->cc_list);
+ encrypt_for = get_mailbox_names(encrypt_for, headers->to_list);
+ encrypt_for = get_mailbox_names(encrypt_for, headers->cc_list);
encrypt_for = g_list_append(encrypt_for,
g_strdup(lb_send_from(message, protocol)));
- if (message->headers->bcc_list
- && (internet_address_list_length(message->headers->
- bcc_list) > 0)) {
+ if (headers->bcc_list != NULL &&
+ (internet_address_list_length(headers-> bcc_list) > 0)) {
libbalsa_information(LIBBALSA_INFORMATION_WARNING,
_(
"This message will not be encrypted for the BCC: recipient(s)."));
}
- if (message->gpg_mode & LIBBALSA_PROTECT_SIGN) {
+ if (mode & LIBBALSA_PROTECT_SIGN) {
success =
libbalsa_sign_encrypt_mime_object(mime_root,
lb_send_from(message, protocol),
@@ -1923,8 +1954,7 @@ do_multipart_crypto(LibBalsaMessage *message,
}
default:
- g_error("illegal gpg_mode %d (" __FILE__ " line %d)",
- message->gpg_mode, __LINE__);
+ g_error("illegal gpg_mode %d (" __FILE__ " line %d)", mode, __LINE__);
}
return LIBBALSA_MESSAGE_CREATE_OK;
diff --git a/libbalsa/source-viewer.c b/libbalsa/source-viewer.c
index ee4c53c..de4e84f 100644
--- a/libbalsa/source-viewer.c
+++ b/libbalsa/source-viewer.c
@@ -117,24 +117,28 @@ lsv_escape_change_state(GSimpleAction * action,
LibBalsaSourceViewerInfo *lsvi =
g_object_get_data(G_OBJECT(user_data), "lsvi");
LibBalsaMessage *msg = lsvi->msg;
+ LibBalsaMailbox *mailbox;
GMimeStream *msg_stream;
GMimeStream *mem_stream;
char *raw_message;
- if (!msg->mailbox) {
+ mailbox = libbalsa_message_get_mailbox(msg);
+ if (mailbox == NULL) {
libbalsa_information(LIBBALSA_INFORMATION_WARNING,
_("Mailbox closed"));
return;
}
- msg_stream = libbalsa_mailbox_get_message_stream(msg->mailbox, msg->msgno,
- TRUE);
+ msg_stream =
+ libbalsa_mailbox_get_message_stream(mailbox,
+ libbalsa_message_get_msgno(msg),
+ TRUE);
if (msg_stream == NULL)
return;
mem_stream = g_mime_stream_mem_new();
- libbalsa_mailbox_lock_store(msg->mailbox);
+ libbalsa_mailbox_lock_store(mailbox);
g_mime_stream_write_to_stream(msg_stream, mem_stream);
- libbalsa_mailbox_unlock_store(msg->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
g_mime_stream_write(mem_stream, "", 1); /* close string */
raw_message = (char *) GMIME_STREAM_MEM(mem_stream)->buffer->data;
@@ -208,7 +212,7 @@ libbalsa_show_message_source(GtkApplication * application,
GAction *escape_action;
g_return_if_fail(msg);
- g_return_if_fail(MAILBOX_OPEN(msg->mailbox));
+ g_return_if_fail(MAILBOX_OPEN(libbalsa_message_get_mailbox(msg)));
text = gtk_text_view_new();
diff --git a/src/balsa-message.c b/src/balsa-message.c
index 7a163d1..6a87db9 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -1106,7 +1106,7 @@ balsa_message_set(BalsaMessage * bm, LibBalsaMailbox * mailbox, guint msgno)
balsa_information(LIBBALSA_INFORMATION_WARNING,
_("Could not access message %u "
"in mailbox ā%sā."),
- (unsigned int) message->msgno, libbalsa_mailbox_get_name(mailbox));
+ (unsigned int) libbalsa_message_get_msgno(message),
libbalsa_mailbox_get_name(mailbox));
return FALSE;
}
@@ -1115,17 +1115,17 @@ balsa_message_set(BalsaMessage * bm, LibBalsaMailbox * mailbox, guint msgno)
libbalsa_mailbox_get_crypto_mode(mailbox),
FALSE, 1);
/* calculate the signature summary state if not set earlier */
- if(message->prot_state == LIBBALSA_MSG_PROTECT_NONE) {
+ if(libbalsa_message_get_prot_state(message) == LIBBALSA_MSG_PROTECT_NONE) {
LibBalsaMsgProtectState prot_state =
- balsa_message_scan_signatures(message->body_list, message);
+ balsa_message_scan_signatures(libbalsa_message_get_body_list(message), message);
/* update the icon if necessary */
- if (message->prot_state != prot_state)
- message->prot_state = prot_state;
+ if (libbalsa_message_get_prot_state(message) != prot_state)
+ libbalsa_message_set_prot_state(message, prot_state);
}
#endif
/* may update the icon */
- libbalsa_mailbox_msgno_update_attach(mailbox, message->msgno, message);
+ libbalsa_mailbox_msgno_update_attach(mailbox, libbalsa_message_get_msgno(message), message);
display_headers(bm);
display_content(bm);
@@ -1143,7 +1143,7 @@ balsa_message_set(BalsaMessage * bm, LibBalsaMailbox * mailbox, guint msgno)
* present.
*
*/
- if (is_new && message->headers->dispnotify_to)
+ if (is_new && libbalsa_message_get_headers(message)->dispnotify_to)
handle_mdn_request (balsa_get_parent_window(GTK_WIDGET(bm)), message);
if (!gtk_tree_model_get_iter_first (gtk_tree_view_get_model(GTK_TREE_VIEW(bm->treeview)),
@@ -1161,7 +1161,7 @@ balsa_message_set(BalsaMessage * bm, LibBalsaMailbox * mailbox, guint msgno)
* emit read message
*/
if (is_new && !libbalsa_mailbox_get_readonly(mailbox))
- libbalsa_mailbox_msgno_change_flags(mailbox, message->msgno, 0,
+ libbalsa_mailbox_msgno_change_flags(mailbox, libbalsa_message_get_msgno(message), 0,
LIBBALSA_MESSAGE_FLAG_NEW);
/* restore keyboard focus to the content, if it was there before */
@@ -1214,7 +1214,7 @@ balsa_message_set_displayed_headers(BalsaMessage * bmessage,
if (bmessage->message) {
if(sh == HEADERS_ALL)
- libbalsa_mailbox_set_msg_headers(bmessage->message->mailbox,
+ libbalsa_mailbox_set_msg_headers(libbalsa_message_get_mailbox(bmessage->message),
bmessage->message);
display_headers(bmessage);
gtk_tree_model_foreach
@@ -1241,7 +1241,7 @@ balsa_message_set_wrap(BalsaMessage * bm, gboolean wrap)
/* This is easier than reformating all the widgets... */
if (bm->message) {
LibBalsaMessage *msg = bm->message;
- balsa_message_set(bm, msg->mailbox, msg->msgno);
+ balsa_message_set(bm, libbalsa_message_get_mailbox(msg), libbalsa_message_get_msgno(msg));
}
}
@@ -1250,8 +1250,8 @@ static void
display_headers(BalsaMessage * bm)
{
balsa_mime_widget_message_set_headers_d(bm, bm->bm_widget,
- bm->message->headers,
- bm->message->body_list,
+ libbalsa_message_get_headers(bm->message),
+ libbalsa_message_get_body_list(bm->message),
LIBBALSA_MESSAGE_GET_SUBJECT(bm->message));
}
@@ -1536,7 +1536,7 @@ display_content(BalsaMessage * bm)
g_object_unref(bm->parts_popup);
bm->parts_popup = gtk_menu_new();
g_object_ref_sink(bm->parts_popup);
- display_parts(bm, bm->message->body_list, NULL, NULL);
+ display_parts(bm, libbalsa_message_get_body_list(bm->message), NULL, NULL);
if (bm->info_count > 1) {
gtk_widget_show(bm->parts_popup);
gtk_widget_show
@@ -2341,22 +2341,22 @@ handle_mdn_request(GtkWindow *parent, LibBalsaMessage *message)
/* Check if the dispnotify_to address is equal to the (in this order,
if present) reply_to, from or sender address. */
- if (message->headers->reply_to)
- use_from = message->headers->reply_to;
- else if (message->headers->from)
- use_from = message->headers->from;
- else if (message->sender)
- use_from = message->sender;
+ if (libbalsa_message_get_headers(message)->reply_to)
+ use_from = libbalsa_message_get_headers(message)->reply_to;
+ else if (libbalsa_message_get_headers(message)->from)
+ use_from = libbalsa_message_get_headers(message)->from;
+ else if (libbalsa_message_get_sender(message))
+ use_from = libbalsa_message_get_sender(message);
else
use_from = NULL;
/* note: neither Disposition-Notification-To: nor Reply-To:, From: or
Sender: may be address groups */
from = use_from ? internet_address_list_get_address (use_from, 0) : NULL;
- dn = internet_address_list_get_address (message->headers->dispnotify_to, 0);
+ dn = internet_address_list_get_address (libbalsa_message_get_headers(message)->dispnotify_to, 0);
suspicious = !libbalsa_ia_rfc2821_equal(dn, from);
/* Try to find "my" identity first in the to, then in the cc list */
- list = message->headers->to_list;
+ list = libbalsa_message_get_headers(message)->to_list;
len = list ? internet_address_list_length(list) : 0;
for (i = 0; i < len && !mdn_ident; i++) {
GList * id_list;
@@ -2372,7 +2372,7 @@ handle_mdn_request(GtkWindow *parent, LibBalsaMessage *message)
}
}
- list = message->headers->cc_list;
+ list = libbalsa_message_get_headers(message)->cc_list;
for (i = 0; i < len && !mdn_ident; i++) {
GList * id_list;
@@ -2411,7 +2411,7 @@ handle_mdn_request(GtkWindow *parent, LibBalsaMessage *message)
gchar *reply_to;
sender = from ? internet_address_to_string (from, FALSE) : NULL;
reply_to =
- internet_address_list_to_string (message->headers->dispnotify_to,
+ internet_address_list_to_string (libbalsa_message_get_headers(message)->dispnotify_to,
FALSE);
gtk_widget_show (create_mdn_dialog (parent, sender, reply_to, mdn,
mdn_ident));
@@ -2441,6 +2441,7 @@ static LibBalsaMessage *create_mdn_reply (const LibBalsaIdentity *mdn_ident,
gboolean manual)
{
LibBalsaMessage *message;
+ LibBalsaMessageHeaders *headers;
LibBalsaMessageBody *body;
gchar *date, *dummy;
GString *report;
@@ -2450,27 +2451,28 @@ static LibBalsaMessage *create_mdn_reply (const LibBalsaIdentity *mdn_ident,
/* create a message with the header set from the incoming message */
message = libbalsa_message_new();
- message->headers->from = internet_address_list_new();
- internet_address_list_add(message->headers->from,
+ headers = libbalsa_message_get_headers(message);
+ headers->from = internet_address_list_new();
+ internet_address_list_add(headers->from,
libbalsa_identity_get_address(balsa_app.current_ident));
- message->headers->date = time(NULL);
+ headers->date = time(NULL);
libbalsa_message_set_subject(message, "Message Disposition Notification");
- message->headers->to_list = internet_address_list_new ();
- internet_address_list_append(message->headers->to_list,
- for_msg->headers->dispnotify_to);
+ headers->to_list = internet_address_list_new ();
+ internet_address_list_append(headers->to_list,
+ libbalsa_message_get_headers(for_msg)->dispnotify_to);
/* RFC 2298 requests this mime type... */
- message->subtype = g_strdup("report");
+ libbalsa_message_set_subtype(message, g_strdup("report"));
params = g_new(gchar *, 3);
params[0] = g_strdup("report-type");
params[1] = g_strdup("disposition-notification");
params[2] = NULL;
- message->parameters = g_list_prepend(message->parameters, params);
+ libbalsa_message_set_parameters(message, g_list_prepend(libbalsa_message_get_parameters(message),
params));
/* the first part of the body is an informational note */
body = libbalsa_message_body_new(message);
date = libbalsa_message_date_to_utf8(for_msg, balsa_app.date_string);
- dummy = internet_address_list_to_string(for_msg->headers->to_list, FALSE);
+ dummy = internet_address_list_to_string(libbalsa_message_get_headers(for_msg)->to_list, FALSE);
body->buffer = g_strdup_printf(
"The message sent on %s to %s with subject ā%sā has been displayed.\n"
"There is no guarantee that the message has been read or understood.\n\n",
@@ -2500,9 +2502,9 @@ static LibBalsaMessage *create_mdn_reply (const LibBalsaIdentity *mdn_ident,
INTERNET_ADDRESS_MAILBOX
(libbalsa_identity_get_address
(balsa_app.current_ident))->addr);
- if (for_msg->message_id)
+ if (libbalsa_message_get_message_id(for_msg))
g_string_append_printf(report, "Original-Message-ID: <%s>\n",
- for_msg->message_id);
+ libbalsa_message_get_message_id(for_msg));
g_string_append_printf(report,
"Disposition: %s-action/MDN-sent-%sly; displayed",
manual ? "manual" : "automatic",
@@ -2639,7 +2641,7 @@ balsa_message_scan_signatures(LibBalsaMessageBody *body,
{
LibBalsaMsgProtectState result = LIBBALSA_MSG_PROTECT_NONE;
- g_return_val_if_fail(message->headers != NULL, result);
+ g_return_val_if_fail(libbalsa_message_get_headers(message) != NULL, result);
while (body) {
LibBalsaMsgProtectState this_part_state =
@@ -2751,7 +2753,7 @@ libbalsa_msg_try_decrypt(LibBalsaMessage * message, LibBalsaMessageBody * body,
* adds an extra ref) leads to a crash if we have both the encrypted and
* the unencrypted version open as the body chain of the first one will be
* unref'd. */
- if (message->body_ref > chk_crypto->max_ref) {
+ if (libbalsa_message_get_body_ref(message) > chk_crypto->max_ref) {
if (chk_crypto->chk_mode == LB_MAILBOX_CHK_CRYPT_ALWAYS) {
libbalsa_information
(LIBBALSA_INFORMATION_ERROR,
@@ -2963,6 +2965,7 @@ libbalsa_msg_part_2440(LibBalsaMessage * message, LibBalsaMessageBody * body,
{
gpgme_error_t sig_res;
GMimePartRfc2440Mode rfc2440mode;
+ LibBalsaMailbox *mailbox;
/* multiparts or complete messages can not be RFC 2440 protected */
if (body->body_type == LIBBALSA_MESSAGE_BODY_TYPE_MESSAGE ||
@@ -2991,9 +2994,11 @@ libbalsa_msg_part_2440(LibBalsaMessage * message, LibBalsaMessageBody * body,
/* check if this is a RFC2440 part */
if (!GMIME_IS_PART(body->mime_part))
return;
- libbalsa_mailbox_lock_store(body->message->mailbox);
+
+ mailbox = libbalsa_message_get_mailbox(body->message);
+ libbalsa_mailbox_lock_store(mailbox);
rfc2440mode = g_mime_part_check_rfc2440(GMIME_PART(body->mime_part));
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
/* if not, or if we have more than one instance of this message open, eject
(see remark for libbalsa_msg_try_decrypt above) - remember that
@@ -3001,7 +3006,7 @@ libbalsa_msg_part_2440(LibBalsaMessage * message, LibBalsaMessageBody * body,
(i.e. RFC2440 stuff removed) one! */
if (rfc2440mode == GMIME_PART_RFC2440_NONE)
return;
- if (message->body_ref > chk_crypto->max_ref) {
+ if (libbalsa_message_get_body_ref(message) > chk_crypto->max_ref) {
if (chk_crypto->chk_mode == LB_MAILBOX_CHK_CRYPT_ALWAYS) {
libbalsa_information
(LIBBALSA_INFORMATION_ERROR, "%s\n%s",
@@ -3020,7 +3025,7 @@ libbalsa_msg_part_2440(LibBalsaMessage * message, LibBalsaMessageBody * body,
}
/* do the rfc2440 stuff */
- libbalsa_mailbox_lock_store(body->message->mailbox);
+ libbalsa_mailbox_lock_store(mailbox);
if (rfc2440mode == GMIME_PART_RFC2440_SIGNED)
sig_res =
libbalsa_rfc2440_verify(GMIME_PART(body->mime_part),
@@ -3038,7 +3043,7 @@ libbalsa_msg_part_2440(LibBalsaMessage * message, LibBalsaMessageBody * body,
body->charset = NULL;
}
}
- libbalsa_mailbox_unlock_store(body->message->mailbox);
+ libbalsa_mailbox_unlock_store(mailbox);
if (body->sig_info && sig_res == GPG_ERR_NO_ERROR) {
if ((g_mime_gpgme_sigstat_get_summary(body->sig_info) & GPGME_SIGSUM_VALID) == GPGME_SIGSUM_VALID) {
@@ -3122,7 +3127,7 @@ balsa_message_perform_crypto(LibBalsaMessage * message,
{
chk_crypto_t chk_crypto;
- if (!message->body_list)
+ if (!libbalsa_message_get_body_list(message))
return;
/* check if the user requested to ignore any crypto stuff */
@@ -3133,15 +3138,16 @@ balsa_message_perform_crypto(LibBalsaMessage * message,
chk_crypto.chk_mode = chk_mode;
chk_crypto.no_mp_signed = no_mp_signed;
chk_crypto.max_ref = max_ref;
- chk_crypto.sender = balsa_message_sender_to_gchar(message->headers->from, -1);
+ chk_crypto.sender = balsa_message_sender_to_gchar(libbalsa_message_get_headers(message)->from, -1);
chk_crypto.subject = g_strdup(LIBBALSA_MESSAGE_GET_SUBJECT(message));
libbalsa_utf8_sanitize(&chk_crypto.subject, balsa_app.convert_unknown_8bit,
NULL);
/* do the real work */
- message->body_list =
- libbalsa_msg_perform_crypto_real(message, message->body_list,
- &chk_crypto);
+ libbalsa_message_set_body_list(message,
+ libbalsa_msg_perform_crypto_real(message,
+ libbalsa_message_get_body_list(message),
+ &chk_crypto));
/* clean up */
g_free(chk_crypto.subject);
@@ -3183,15 +3189,15 @@ message_recheck_crypto_cb(GtkWidget * button, BalsaMessage * bm)
/* calculate the signature summary state */
prot_state =
- balsa_message_scan_signatures(message->body_list, message);
+ balsa_message_scan_signatures(libbalsa_message_get_body_list(message), message);
/* update the icon if necessary */
- if (message->prot_state != prot_state)
- message->prot_state = prot_state;
+ if (libbalsa_message_get_prot_state(message) != prot_state)
+ libbalsa_message_set_prot_state(message, prot_state);
/* may update the icon */
- libbalsa_mailbox_msgno_update_attach(bm->message->mailbox,
- bm->message->msgno, bm->message);
+ libbalsa_mailbox_msgno_update_attach(libbalsa_message_get_mailbox(bm->message),
+ libbalsa_message_get_msgno(bm->message), bm->message);
display_headers(bm);
display_content(bm);
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index 9a282f9..a4a16f9 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -334,6 +334,7 @@ static void
extbody_send_mail(GtkWidget * button, LibBalsaMessageBody * mime_body)
{
LibBalsaMessage *message;
+ LibBalsaMessageHeaders *headers;
LibBalsaMessageBody *body;
gchar *data;
GError *err = NULL;
@@ -341,8 +342,9 @@ extbody_send_mail(GtkWidget * button, LibBalsaMessageBody * mime_body)
/* create a message */
message = libbalsa_message_new();
- message->headers->from = internet_address_list_new();
- internet_address_list_add(message->headers->from,
+ headers = libbalsa_message_get_headers(message);
+ headers->from = internet_address_list_new();
+ internet_address_list_add(headers->from,
libbalsa_identity_get_address(balsa_app.current_ident));
data = libbalsa_message_body_get_parameter(mime_body, "subject");
@@ -352,7 +354,7 @@ extbody_send_mail(GtkWidget * button, LibBalsaMessageBody * mime_body)
}
data = libbalsa_message_body_get_parameter(mime_body, "server");
- message->headers->to_list = internet_address_list_parse_string(data);
+ headers->to_list = internet_address_list_parse_string(data);
g_free(data);
/* the original body my have some data to be returned as commands... */
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index d3eaf00..4a68617 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -1307,10 +1307,9 @@ check_text_encoding(BalsaMessage * bm, gchar *text_buf)
&target_cs)
&& !g_object_get_data(G_OBJECT(bm->message),
BALSA_MIME_WIDGET_NEW_TEXT_NOTIFIED)) {
- gchar *from =
- balsa_message_sender_to_gchar(bm->message->headers->from, 0);
- gchar *subject =
- g_strdup(LIBBALSA_MESSAGE_GET_SUBJECT(bm->message));
+ LibBalsaMessageHeaders *headers = libbalsa_message_get_headers(bm->message);
+ gchar *from = balsa_message_sender_to_gchar(headers->from, 0);
+ gchar *subject = g_strdup(LIBBALSA_MESSAGE_GET_SUBJECT(bm->message));
libbalsa_utf8_sanitize(&from, balsa_app.convert_unknown_8bit,
NULL);
diff --git a/src/balsa-mime-widget-vcalendar.c b/src/balsa-mime-widget-vcalendar.c
index b293abd..c61c2c7 100644
--- a/src/balsa-mime-widget-vcalendar.c
+++ b/src/balsa-mime-widget-vcalendar.c
@@ -75,18 +75,17 @@ balsa_mime_widget_new_vcalendar(BalsaMessage * bm,
/* a reply may be created only for unread requests */
if ((vcal_obj->method == ITIP_REQUEST) &&
LIBBALSA_MESSAGE_IS_UNREAD(lbm)) {
+ LibBalsaMessageHeaders *headers;
+
+ headers = libbalsa_message_get_headers(lbm);
may_reply = TRUE;
- if (lbm->headers) {
- if (lbm->headers->reply_to)
- sender =
- internet_address_list_get_address(lbm->headers->
- reply_to, 0);
- else if (lbm->headers && lbm->headers->from)
- sender =
- internet_address_list_get_address(lbm->headers->from,
- 0);
- } else if (lbm->sender)
- sender = internet_address_list_get_address(lbm->sender, 0);
+ if (headers != NULL) {
+ if (headers->reply_to != NULL)
+ sender = internet_address_list_get_address(headers-> reply_to, 0);
+ else if (headers->from != NULL)
+ sender = internet_address_list_get_address(headers->from, 0);
+ } else if (libbalsa_message_get_sender(lbm))
+ sender = internet_address_list_get_address(libbalsa_message_get_sender(lbm), 0);
}
/* add events */
@@ -297,10 +296,10 @@ vevent_reply(GObject * button, GtkWidget * box)
/* create a message with the header set from the incoming message */
message = libbalsa_message_new();
- message->headers->from = internet_address_list_new();
- internet_address_list_add(message->headers->from, ia);
- message->headers->to_list = internet_address_list_parse_string(rcpt);
- message->headers->date = time(NULL);
+ libbalsa_message_get_headers(message)->from = internet_address_list_new();
+ internet_address_list_add(libbalsa_message_get_headers(message)->from, ia);
+ libbalsa_message_get_headers(message)->to_list = internet_address_list_parse_string(rcpt);
+ libbalsa_message_get_headers(message)->date = time(NULL);
/* create the message subject */
dummy = g_strdup_printf("%s: %s",
@@ -324,7 +323,8 @@ vevent_reply(GObject * button, GtkWidget * box)
params[0] = g_strdup("method");
params[1] = g_strdup("reply");
params[2] = NULL;
- message->parameters = g_list_prepend(message->parameters, params);
+ libbalsa_message_set_parameters(message,
+ g_list_prepend(libbalsa_message_get_parameters(message), params));
result = libbalsa_message_send(message, balsa_app.outbox, NULL,
balsa_find_sentbox_by_url,
diff --git a/src/balsa-mime-widget.c b/src/balsa-mime-widget.c
index ff98c99..35d2a70 100644
--- a/src/balsa-mime-widget.c
+++ b/src/balsa-mime-widget.c
@@ -189,7 +189,7 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
/* on local mailboxes only, to avoid possibly long downloads */
if ((content_type == NULL ||
g_ascii_strcasecmp(content_type, "application/octet-stream") == 0)
- && LIBBALSA_IS_MAILBOX_LOCAL(mime_body->message->mailbox)) {
+ && LIBBALSA_IS_MAILBOX_LOCAL(libbalsa_message_get_mailbox(mime_body->message))) {
GError *err = NULL;
GMimeStream *stream =
libbalsa_message_body_get_stream(mime_body, &err);
diff --git a/src/balsa-print-object-header.c b/src/balsa-print-object-header.c
index 4864d9e..f0f4c9f 100644
--- a/src/balsa-print-object-header.c
+++ b/src/balsa-print-object-header.c
@@ -332,9 +332,13 @@ balsa_print_object_header_from_message(GList *list,
const gchar * subject,
BalsaPrintSetup * psetup)
{
+ LibBalsaMessageBody *body_list;
+ LibBalsaMessageHeaders *headers;
+
+ body_list = libbalsa_message_get_body_list(message);
+ headers = libbalsa_message_get_headers(message);
return balsa_print_object_header_new_real(list, context,
- message->body_list,
- message->headers, subject,
+ body_list, headers, subject,
psetup, FALSE);
}
diff --git a/src/main-window.c b/src/main-window.c
index 13b9c92..0d2a390 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -4242,7 +4242,7 @@ bw_index_changed_cb(GtkWidget * widget, gpointer data)
bw_enable_mailbox_menus(window, index);
current_msgno = BALSA_MESSAGE(window->preview)->message ?
- BALSA_MESSAGE(window->preview)->message->msgno : 0;
+ libbalsa_message_get_msgno(BALSA_MESSAGE(window->preview)->message) : 0;
if (current_msgno != index->current_msgno)
bw_idle_replace(window, index);
diff --git a/src/message-window.c b/src/message-window.c
index 4fcc744..097891b 100644
--- a/src/message-window.c
+++ b/src/message-window.c
@@ -115,7 +115,7 @@ message_window_idle_handler(MessageWindow * mw)
mw->idle_handler_id = 0;
msg = BALSA_MESSAGE(mw->bmessage);
- if (!balsa_message_set(msg, mw->message->mailbox, mw->message->msgno)) {
+ if (!balsa_message_set(msg, libbalsa_message_get_mailbox(mw->message),
libbalsa_message_get_msgno(mw->message))) {
gtk_widget_destroy(mw->window);
return FALSE;
}
@@ -303,9 +303,9 @@ mw_menubar_foreach(GtkWidget *widget, gpointer data)
static void
mw_set_buttons_sensitive(MessageWindow * mw)
{
- LibBalsaMailbox *mailbox = mw->message->mailbox;
+ LibBalsaMailbox *mailbox = libbalsa_message_get_mailbox(mw->message);
BalsaIndex *index = mw->bindex;
- guint current_msgno = mw->message->msgno;
+ guint current_msgno = libbalsa_message_get_msgno(mw->message);
gboolean enable;
if (!mailbox) {
@@ -386,7 +386,7 @@ destroy_message_window(GtkWidget * widget, MessageWindow * mw)
static void
mw_expunged_cb(LibBalsaMailbox * mailbox, guint msgno, MessageWindow * mw)
{
- if (mw->message && (guint) mw->message->msgno == msgno)
+ if (mw->message && (guint) libbalsa_message_get_msgno(mw->message) == msgno)
gtk_widget_destroy(mw->window);
}
@@ -398,7 +398,7 @@ mw_reply_activated(GSimpleAction * action, GVariant * parameter,
g_return_if_fail(mw != NULL);
- sendmsg_window_reply(mw->message->mailbox, mw->message->msgno,
+ sendmsg_window_reply(libbalsa_message_get_mailbox(mw->message), libbalsa_message_get_msgno(mw->message),
SEND_REPLY);
}
@@ -410,7 +410,7 @@ mw_reply_all_activated(GSimpleAction * action, GVariant * parameter,
g_return_if_fail(mw != NULL);
- sendmsg_window_reply(mw->message->mailbox, mw->message->msgno,
+ sendmsg_window_reply(libbalsa_message_get_mailbox(mw->message), libbalsa_message_get_msgno(mw->message),
SEND_REPLY_ALL);
}
@@ -422,7 +422,7 @@ mw_reply_group_activated(GSimpleAction * action, GVariant * parameter,
g_return_if_fail(mw != NULL);
- sendmsg_window_reply(mw->message->mailbox, mw->message->msgno,
+ sendmsg_window_reply(libbalsa_message_get_mailbox(mw->message), libbalsa_message_get_msgno(mw->message),
SEND_REPLY_GROUP);
}
@@ -434,7 +434,7 @@ mw_forward_attached_activated(GSimpleAction * action, GVariant * parameter,
g_return_if_fail(mw != NULL);
- sendmsg_window_forward(mw->message->mailbox, mw->message->msgno, TRUE);
+ sendmsg_window_forward(libbalsa_message_get_mailbox(mw->message),
libbalsa_message_get_msgno(mw->message), TRUE);
}
static void
@@ -445,7 +445,7 @@ mw_forward_inline_activated(GSimpleAction * action, GVariant * parameter,
g_return_if_fail(mw != NULL);
- sendmsg_window_forward(mw->message->mailbox, mw->message->msgno,
+ sendmsg_window_forward(libbalsa_message_get_mailbox(mw->message),
libbalsa_message_get_msgno(mw->message),
FALSE);
}
@@ -458,7 +458,7 @@ mw_forward_default_activated(GSimpleAction * action, GVariant * parameter,
g_return_if_fail(mw != NULL);
- sendmsg_window_forward(mw->message->mailbox, mw->message->msgno,
+ sendmsg_window_forward(libbalsa_message_get_mailbox(mw->message),
libbalsa_message_get_msgno(mw->message),
balsa_app.forward_attached);
}
#endif
@@ -568,10 +568,10 @@ mw_set_selected(MessageWindow * mw, void (*select_func) (BalsaIndex *))
LibBalsaMessage *message;
MessageWindow *tmp;
- balsa_index_set_next_msgno(mw->bindex, mw->message->msgno);
+ balsa_index_set_next_msgno(mw->bindex, libbalsa_message_get_msgno(mw->message));
select_func(mw->bindex);
msgno = balsa_index_get_next_msgno(mw->bindex);
- message = libbalsa_mailbox_get_message(mw->message->mailbox, msgno);
+ message = libbalsa_mailbox_get_message(libbalsa_message_get_mailbox(mw->message), msgno);
if (!message)
return;
@@ -593,16 +593,18 @@ static void
message_window_move_message(MessageWindow * mw, LibBalsaMailbox * mailbox)
{
GArray *messages;
+ glong msgno;
LibBalsaMessage *original = mw->message;
g_return_if_fail(mailbox != NULL);
/* Transferring to same mailbox? */
- if (mw->message->mailbox == mailbox)
+ if (libbalsa_message_get_mailbox(mw->message) == mailbox)
return;
messages = g_array_new(FALSE, FALSE, sizeof(guint));
- g_array_append_val(messages, mw->message->msgno);
+ msgno = libbalsa_message_get_msgno(mw->message);
+ g_array_append_val(messages, msgno);
if (balsa_app.mw_action_after_move == NEXT_UNREAD)
/* Try selecting the next unread message. */
@@ -739,8 +741,10 @@ mw_select_part_cb(BalsaMessage * bm, gpointer data)
/* set window title */
if (bm && bm->message) {
- from = internet_address_list_to_string(bm->message->headers->from,
- FALSE);
+ LibBalsaMessageHeaders *headers;
+
+ headers = libbalsa_message_get_headers(bm->message);
+ from = internet_address_list_to_string(headers->from, FALSE);
title = g_strdup_printf(_("Message from %s: %s"), from,
LIBBALSA_MESSAGE_GET_SUBJECT(bm->message));
g_free(from);
diff --git a/src/print-gtk.c b/src/print-gtk.c
index 74f32a6..5060f53 100644
--- a/src/print-gtk.c
+++ b/src/print-gtk.c
@@ -224,6 +224,7 @@ begin_print(GtkPrintOperation * operation, GtkPrintContext * context,
gchar *subject;
gchar *date;
GString *footer_string;
+ LibBalsaMessageHeaders *headers;
/* initialise the context */
page_setup = gtk_print_context_get_page_setup(context);
@@ -285,9 +286,9 @@ begin_print(GtkPrintOperation * operation, GtkPrintContext * context,
footer_string = g_string_new(date);
g_free(date);
- if (pdata->message->headers->from) {
- gchar *from =
- internet_address_list_to_string(pdata->message->headers->from, FALSE);
+ headers = libbalsa_message_get_headers(pdata->message);
+ if (headers->from != NULL) {
+ gchar *from = internet_address_list_to_string(headers->from, FALSE);
libbalsa_utf8_sanitize(&from, balsa_app.convert_unknown_8bit,
NULL);
@@ -325,15 +326,15 @@ begin_print(GtkPrintOperation * operation, GtkPrintContext * context,
/* add the message headers */
pdata->setup.c_y_pos = 0.0; /* to simplify calculating the layout... */
- pdata->print_parts =
+ pdata->print_parts =
balsa_print_object_header_from_message(NULL, context, pdata->message,
subject, &pdata->setup);
g_free(subject);
/* add the mime bodies */
- pdata->print_parts =
+ pdata->print_parts =
scan_body(pdata->print_parts, context, &pdata->setup,
- pdata->message->body_list, FALSE);
+ libbalsa_message_get_body_list(pdata->message), FALSE);
/* done */
gtk_print_operation_set_n_pages(operation, pdata->setup.page_count);
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index 60b8282..7ed8499 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -483,10 +483,15 @@ sw_delete_draft(BalsaSendmsg * bsmsg)
LibBalsaMessage *message;
message = bsmsg->draft_message;
- if (message != NULL && message->mailbox != NULL
- && !libbalsa_mailbox_get_readonly(message->mailbox))
- libbalsa_message_change_flags(message,
- LIBBALSA_MESSAGE_FLAG_DELETED, 0);
+ if (message != NULL) {
+ LibBalsaMailbox *mailbox;
+
+ mailbox = libbalsa_message_get_mailbox(message);
+ if (mailbox != NULL && !libbalsa_mailbox_get_readonly(mailbox)) {
+ libbalsa_message_change_flags(message,
+ LIBBALSA_MESSAGE_FLAG_DELETED, 0);
+ }
+ }
}
static gboolean
@@ -602,24 +607,30 @@ balsa_sendmsg_destroy_handler(BalsaSendmsg * bsmsg)
}
if(balsa_app.debug) g_message("balsa_sendmsg_destroy()_handler: Start.");
- if (bsmsg->parent_message) {
- if (bsmsg->parent_message->mailbox)
- libbalsa_mailbox_close(bsmsg->parent_message->mailbox,
+ if (bsmsg->parent_message != NULL) {
+ LibBalsaMailbox *mailbox;
+
+ mailbox = libbalsa_message_get_mailbox(bsmsg->parent_message);
+ if (mailbox != NULL) {
+ libbalsa_mailbox_close(mailbox,
/* Respect pref setting: */
balsa_app.expunge_on_close);
- g_object_unref(G_OBJECT(bsmsg->parent_message));
- bsmsg->parent_message = NULL;
+ }
+ g_clear_object(&bsmsg->parent_message);
}
if (bsmsg->draft_message) {
+ LibBalsaMailbox *mailbox;
+
g_object_set_data(G_OBJECT(bsmsg->draft_message),
BALSA_SENDMSG_WINDOW_KEY, NULL);
- if (bsmsg->draft_message->mailbox)
- libbalsa_mailbox_close(bsmsg->draft_message->mailbox,
+ mailbox = libbalsa_message_get_mailbox(bsmsg->draft_message);
+ if (mailbox != NULL) {
+ libbalsa_mailbox_close(mailbox,
/* Respect pref setting: */
balsa_app.expunge_on_close);
- g_object_unref(G_OBJECT(bsmsg->draft_message));
- bsmsg->draft_message = NULL;
+ }
+ g_clear_object(&bsmsg->draft_message);
}
if (balsa_app.debug)
@@ -1194,9 +1205,11 @@ update_bsmsg_identity(BalsaSendmsg* bsmsg, LibBalsaIdentity* ident)
} else {
if ( (replen == 0 && reply_type) ||
(fwdlen == 0 && forward_type) ) {
- LibBalsaMessage *msg = bsmsg->parent_message ?
+ LibBalsaMessage *message = bsmsg->parent_message != NULL ?
bsmsg->parent_message : bsmsg->draft_message;
- bsmsg_set_subject_from_body(bsmsg, msg->body_list, ident);
+ bsmsg_set_subject_from_body(bsmsg,
+ libbalsa_message_get_body_list(message),
+ ident);
}
}
@@ -2595,10 +2608,16 @@ create_info_pane(BalsaSendmsg * bsmsg)
balsa_mblist_mru_add(&balsa_app.fcc_mru, "");
balsa_app.fcc_mru = g_list_reverse(balsa_app.fcc_mru);
}
- if (bsmsg->draft_message && bsmsg->draft_message->headers &&
- bsmsg->draft_message->headers->fcc_url)
- balsa_mblist_mru_add(&balsa_app.fcc_mru,
- bsmsg->draft_message->headers->fcc_url);
+
+ if (bsmsg->draft_message != NULL) {
+ LibBalsaMessageHeaders *headers;
+
+ headers = libbalsa_message_get_headers(bsmsg->draft_message);
+ if (headers != NULL && headers->fcc_url != NULL) {
+ balsa_mblist_mru_add(&balsa_app.fcc_mru, headers->fcc_url);
+ }
+ }
+
bsmsg->fcc[1] =
balsa_mblist_mru_option_menu(GTK_WINDOW(bsmsg->window),
&balsa_app.fcc_mru);
@@ -2976,7 +2995,7 @@ continue_body(BalsaSendmsg * bsmsg, LibBalsaMessage * message)
{
LibBalsaMessageBody *body;
- body = message->body_list;
+ body = libbalsa_message_get_body_list(message);
if (body) {
if (libbalsa_message_body_type(body) == LIBBALSA_MESSAGE_BODY_TYPE_MULTIPART)
body = body->parts;
@@ -3046,14 +3065,19 @@ continue_body(BalsaSendmsg * bsmsg, LibBalsaMessage * message)
static gchar*
message_part_get_subject(LibBalsaMessageBody *part)
{
- gchar *subject = NULL;
- if(part->embhdrs && part->embhdrs->subject)
- subject = g_strdup(part->embhdrs->subject);
- else if(part->message && part->message->subj)
- subject = g_strdup(part->message->subj);
- else subject = g_strdup(_("No subject"));
- libbalsa_utf8_sanitize(&subject, balsa_app.convert_unknown_8bit,
- NULL);
+ const gchar *subj = NULL;
+ gchar *subject;
+
+ if (part->embhdrs != NULL)
+ subj = part->embhdrs->subject;
+ if (subj == NULL && part->message != NULL)
+ subj = libbalsa_message_get_subject(part->message);
+ if (subj == NULL)
+ subj = _("No subject");
+
+ subject = g_strdup(subj);
+ libbalsa_utf8_sanitize(&subject, balsa_app.convert_unknown_8bit, NULL);
+
return subject;
}
@@ -3624,8 +3648,12 @@ quote_message_body(BalsaSendmsg * bsmsg,
{
GString *res;
if(libbalsa_message_body_ref(message, FALSE, FALSE)) {
- res = quote_body(bsmsg, message->headers, message->message_id,
- message->references, message->body_list, qtype);
+ res = quote_body(bsmsg,
+ libbalsa_message_get_headers(message),
+ libbalsa_message_get_message_id(message),
+ libbalsa_message_get_references(message),
+ libbalsa_message_get_body_list(message),
+ qtype);
libbalsa_message_body_unref(message);
} else res = g_string_new("");
return res;
@@ -3635,8 +3663,12 @@ static void
fill_body_from_message(BalsaSendmsg *bsmsg, LibBalsaMessage *message,
QuoteType qtype)
{
- fill_body_from_part(bsmsg, message->headers, message->message_id,
- message->references, message->body_list, qtype);
+ fill_body_from_part(bsmsg,
+ libbalsa_message_get_headers(message),
+ libbalsa_message_get_message_id(message),
+ libbalsa_message_get_references(message),
+ libbalsa_message_get_body_list(message),
+ qtype);
}
@@ -3784,7 +3816,8 @@ bsmsg_set_subject_from_body(BalsaSendmsg * bsmsg,
case SEND_FORWARD_ATTACH:
case SEND_FORWARD_INLINE:
headers =
- part->embhdrs ? part->embhdrs : part->message->headers;
+ part->embhdrs != NULL? part->embhdrs :
+ libbalsa_message_get_headers(part->message);
newsubject =
generate_forwarded_subject(subject, headers, ident);
break;
@@ -3823,14 +3856,18 @@ sw_save_draft(BalsaSendmsg * bsmsg)
return FALSE;
}
- if (bsmsg->draft_message) {
+ if (bsmsg->draft_message != NULL) {
+ LibBalsaMailbox *mailbox;
+
g_object_set_data(G_OBJECT(bsmsg->draft_message),
BALSA_SENDMSG_WINDOW_KEY, NULL);
- if (bsmsg->draft_message->mailbox)
- libbalsa_mailbox_close(bsmsg->draft_message->mailbox,
+ mailbox = libbalsa_message_get_mailbox(bsmsg->draft_message);
+ if (mailbox != NULL) {
+ libbalsa_mailbox_close(mailbox,
/* Respect pref setting: */
balsa_app.expunge_on_close);
- g_object_unref(G_OBJECT(bsmsg->draft_message));
+ }
+ g_object_unref(bsmsg->draft_message);
}
bsmsg->state = SENDMSG_STATE_CLEAN;
@@ -3861,7 +3898,10 @@ sw_autosave_timeout_cb(BalsaSendmsg * bsmsg)
static void
setup_headers_from_message(BalsaSendmsg* bsmsg, LibBalsaMessage *message)
{
- g_return_if_fail(message->headers);
+ LibBalsaMessageHeaders *headers;
+
+ headers = libbalsa_message_get_headers(message);
+ g_return_if_fail(headers!= NULL);
/* Try to make the blank line in the address view useful;
* - never make it a Bcc: line;
@@ -3871,13 +3911,13 @@ setup_headers_from_message(BalsaSendmsg* bsmsg, LibBalsaMessage *message)
* will be a To: line */
libbalsa_address_view_set_from_list(bsmsg->recipient_view,
"BCC:",
- message->headers->bcc_list);
+ headers->bcc_list);
libbalsa_address_view_set_from_list(bsmsg->recipient_view,
"To:",
- message->headers->to_list);
+ headers->to_list);
libbalsa_address_view_set_from_list(bsmsg->recipient_view,
"CC:",
- message->headers->cc_list);
+ headers->cc_list);
}
@@ -3888,30 +3928,33 @@ setup_headers_from_message(BalsaSendmsg* bsmsg, LibBalsaMessage *message)
* the message.
**/
static gboolean
-set_identity_from_mailbox(BalsaSendmsg* bsmsg, LibBalsaMessage * message)
+set_identity_from_mailbox(BalsaSendmsg * bsmsg, LibBalsaMessage * message)
{
- if( message && message->mailbox && balsa_app.identities) {
- const gchar *identity;
- GList *ilist;
+ if (message != NULL && balsa_app.identities != NULL) {
+ LibBalsaMailbox *mailbox;
- identity = libbalsa_mailbox_get_identity_name(message->mailbox);
- if (identity == NULL)
- return FALSE;
+ mailbox = libbalsa_message_get_mailbox(message);
+ if (mailbox != NULL) {
+ const gchar *identity;
+ GList *list;
- for (ilist = balsa_app.identities;
- ilist != NULL;
- ilist = ilist->next) {
- LibBalsaIdentity *ident = LIBBALSA_IDENTITY(ilist->data);
+ identity = libbalsa_mailbox_get_identity_name(mailbox);
+ if (identity == NULL)
+ return FALSE;
- if (g_ascii_strcasecmp(libbalsa_identity_get_identity_name(ident),
- identity) == 0) {
- bsmsg->ident = ident;
- return TRUE;
+ for (list = balsa_app.identities; list != NULL; list = list->next) {
+ LibBalsaIdentity *ident = LIBBALSA_IDENTITY(list->data);
+
+ if (g_ascii_strcasecmp(libbalsa_identity_get_identity_name(ident),
+ identity) == 0) {
+ bsmsg->ident = ident;
+ return TRUE;
+ }
}
}
}
- return FALSE; /* use default */
+ return FALSE; /* use default */
}
/*
@@ -3963,21 +4006,24 @@ guess_identity_from_list(BalsaSendmsg * bsmsg, InternetAddressList * list,
static gboolean
guess_identity(BalsaSendmsg* bsmsg, LibBalsaMessage * message)
{
- if (!message || !message->headers || !balsa_app.identities)
+ LibBalsaMessageHeaders *headers;
+
+ if (message == NULL || balsa_app.identities == NULL)
return FALSE; /* use default */
+ headers = libbalsa_message_get_headers(message);
+ if (headers == NULL)
+ return FALSE;
+
if (bsmsg->is_continue)
- return guess_identity_from_list(bsmsg, message->headers->from,
- FALSE);
+ return guess_identity_from_list(bsmsg, headers->from, FALSE);
if (bsmsg->type != SEND_NORMAL)
/* bsmsg->type == SEND_REPLY || bsmsg->type == SEND_REPLY_ALL ||
* bsmsg->type == SEND_REPLY_GROUP || bsmsg->type == SEND_FORWARD_ATTACH ||
* bsmsg->type == SEND_FORWARD_INLINE */
- return guess_identity_from_list(bsmsg, message->headers->to_list,
- TRUE)
- || guess_identity_from_list(bsmsg, message->headers->cc_list,
- TRUE);
+ return guess_identity_from_list(bsmsg, headers->to_list, TRUE)
+ || guess_identity_from_list(bsmsg, headers->cc_list, TRUE);
return FALSE;
}
@@ -4247,8 +4293,11 @@ insert_initial_sig(BalsaSendmsg *bsmsg)
static void
bsm_prepare_for_setup(LibBalsaMessage *message)
{
- if (message->mailbox)
- libbalsa_mailbox_open(message->mailbox, NULL);
+ LibBalsaMailbox *mailbox;
+
+ mailbox = libbalsa_message_get_mailbox(message);
+ if (mailbox != NULL)
+ libbalsa_mailbox_open(mailbox, NULL);
/* fill in that info:
* ref the message so that we have all needed headers */
libbalsa_message_body_ref(message, TRUE, TRUE);
@@ -4268,9 +4317,14 @@ bsm_finish_setup(BalsaSendmsg *bsmsg, LibBalsaMessageBody *part)
g_return_if_fail(part != NULL);
g_return_if_fail(part->message != NULL);
- if (part->message->mailbox &&
- !bsmsg->parent_message && !bsmsg->draft_message)
- libbalsa_mailbox_close(part->message->mailbox, FALSE);
+ if (!bsmsg->parent_message && !bsmsg->draft_message) {
+ LibBalsaMailbox *mailbox;
+
+ mailbox = libbalsa_message_get_mailbox(part->message);
+ if (mailbox != NULL)
+ libbalsa_mailbox_close(mailbox, FALSE);
+ }
+
/* ...but mark it as unmodified. */
bsmsg->state = SENDMSG_STATE_CLEAN;
bsmsg_set_subject_from_body(bsmsg, part, bsmsg->ident);
@@ -4817,6 +4871,7 @@ static LibBalsaMessage *
bsmsg2message(BalsaSendmsg * bsmsg)
{
LibBalsaMessage *message;
+ LibBalsaMessageHeaders *headers;
LibBalsaMessageBody *body;
gchar *tmp;
GtkTextIter start, end;
@@ -4827,21 +4882,22 @@ bsmsg2message(BalsaSendmsg * bsmsg)
message = libbalsa_message_new();
- message->headers->from = internet_address_list_new ();
- internet_address_list_add(message->headers->from, ia);
+ headers = libbalsa_message_get_headers(message);
+ headers->from = internet_address_list_new ();
+ internet_address_list_add(headers->from, ia);
tmp = gtk_editable_get_chars(GTK_EDITABLE(bsmsg->subject[1]), 0, -1);
strip_chars(tmp, "\r\n");
libbalsa_message_set_subject(message, tmp);
g_free(tmp);
- message->headers->to_list =
+ headers->to_list =
libbalsa_address_view_get_list(bsmsg->recipient_view, "To:");
- message->headers->cc_list =
+ headers->cc_list =
libbalsa_address_view_get_list(bsmsg->recipient_view, "CC:");
- message->headers->bcc_list =
+ headers->bcc_list =
libbalsa_address_view_get_list(bsmsg->recipient_view, "BCC:");
@@ -4849,12 +4905,12 @@ bsmsg2message(BalsaSendmsg * bsmsg)
bsmsg->fcc_url =
g_strdup(balsa_mblist_mru_option_menu_get(bsmsg->fcc[1]));
- message->headers->reply_to =
+ headers->reply_to =
libbalsa_address_view_get_list(bsmsg->replyto_view, "Reply To:");
if (bsmsg->req_mdn)
libbalsa_message_set_dispnotify(message, ia);
- message->request_dsn = bsmsg->req_dsn;
+ libbalsa_message_set_request_dsn(message, bsmsg->req_dsn);
sw_set_header_from_path(message, "Face", libbalsa_identity_get_face_path(ident),
/* Translators: please do not translate Face. */
@@ -4863,12 +4919,13 @@ bsmsg2message(BalsaSendmsg * bsmsg)
/* Translators: please do not translate Face. */
_("Could not load X-Face header file %s: %s"));
- message->references = bsmsg->references;
+ libbalsa_message_set_references(message, bsmsg->references);
bsmsg->references = NULL; /* steal it */
- if (bsmsg->in_reply_to)
- message->in_reply_to =
- g_list_prepend(NULL, g_strdup(bsmsg->in_reply_to));
+ if (bsmsg->in_reply_to != NULL)
+ libbalsa_message_set_in_reply_to(message,
+ g_list_prepend(NULL,
+ g_strdup(bsmsg->in_reply_to)));
body = libbalsa_message_body_new(message);
@@ -4899,7 +4956,7 @@ bsmsg2message(BalsaSendmsg * bsmsg)
if (bsmsg->send_mp_alt)
body->html_buffer =
- libbalsa_text_to_html(message->subj, body->buffer,
+ libbalsa_text_to_html(libbalsa_message_get_subject(message), body->buffer,
bsmsg->spell_check_lang);
if (bsmsg->flow)
body->buffer =
@@ -4922,16 +4979,16 @@ bsmsg2message(BalsaSendmsg * bsmsg)
gtk_tree_model_foreach(BALSA_MSG_ATTACH_MODEL(bsmsg),
attachment2message, message);
- message->headers->date = time(NULL);
+ headers->date = time(NULL);
#ifdef HAVE_GPGME
if (balsa_app.has_openpgp || balsa_app.has_smime) {
- message->gpg_mode =
- (bsmsg->gpg_mode & LIBBALSA_PROTECT_MODE) != 0 ? bsmsg->gpg_mode : 0;
- message->att_pubkey = bsmsg->attach_pubkey;
- message->ident = g_object_ref(ident);
+ libbalsa_message_set_gpg_mode(message,
+ (bsmsg->gpg_mode & LIBBALSA_PROTECT_MODE) != 0 ? bsmsg->gpg_mode : 0);
+ libbalsa_message_set_att_pubkey(message, bsmsg->attach_pubkey);
+ libbalsa_message_set_identity(message, ident);
} else {
- message->gpg_mode = 0;
- message->att_pubkey = FALSE;
+ libbalsa_message_set_gpg_mode(message, 0);
+ libbalsa_message_set_att_pubkey(message, FALSE);
}
#endif
@@ -5224,7 +5281,7 @@ send_message_handler(BalsaSendmsg * bsmsg, gboolean queue_only)
balsa_information_parented(GTK_WINDOW(bsmsg->window),
LIBBALSA_INFORMATION_DEBUG,
_("sending message with GPG mode %d"),
- message->gpg_mode);
+ libbalsa_message_get_gpg_mode(message));
#endif
if(queue_only)
@@ -5239,13 +5296,19 @@ send_message_handler(BalsaSendmsg * bsmsg, gboolean queue_only)
GTK_WINDOW(balsa_app.main_window),
bsmsg->flow, &error);
if (result == LIBBALSA_MESSAGE_CREATE_OK) {
- if (bsmsg->parent_message && bsmsg->parent_message->mailbox
- && !libbalsa_mailbox_get_readonly(bsmsg->parent_message->mailbox))
- libbalsa_message_reply(bsmsg->parent_message);
+ if (bsmsg->parent_message != NULL) {
+ LibBalsaMailbox *mailbox;
+
+ mailbox = libbalsa_message_get_mailbox(bsmsg->parent_message);
+ if (mailbox != NULL &&
+ !libbalsa_mailbox_get_readonly(mailbox)) {
+ libbalsa_message_reply(bsmsg->parent_message);
+ }
+ }
sw_delete_draft(bsmsg);
}
- g_object_unref(G_OBJECT(message));
+ g_object_unref(message);
if (result != LIBBALSA_MESSAGE_CREATE_OK) {
const char *msg;
@@ -6763,11 +6826,18 @@ BalsaSendmsg *
sendmsg_window_reply(LibBalsaMailbox * mailbox, guint msgno,
SendType reply_type)
{
- LibBalsaMessage *message =
- libbalsa_mailbox_get_message(mailbox, msgno);
- BalsaSendmsg *bsmsg = sendmsg_window_new();
+ LibBalsaMessage *message;
+ LibBalsaMessageHeaders *headers;
+ BalsaSendmsg *bsmsg;
+ const gchar *message_id;
+ GList *references;
+ GList *in_reply_to;
- g_assert(message);
+ message = libbalsa_mailbox_get_message(mailbox, msgno);
+ g_assert(message != NULL);
+ headers = libbalsa_message_get_headers(message);
+
+ bsmsg = sendmsg_window_new();
switch(reply_type) {
case SEND_REPLY:
case SEND_REPLY_ALL:
@@ -6780,21 +6850,24 @@ sendmsg_window_reply(LibBalsaMailbox * mailbox, guint msgno,
bsm_prepare_for_setup(message);
- set_to(bsmsg, message->headers);
+ set_to(bsmsg, headers);
- if (message->message_id)
- set_in_reply_to(bsmsg, message->message_id, message->headers);
+ message_id = libbalsa_message_get_message_id(message);
+ if (message_id != NULL)
+ set_in_reply_to(bsmsg, message_id, headers);
if (reply_type == SEND_REPLY_ALL)
- set_cc_from_all_recipients(bsmsg, message->headers);
- set_references_reply(bsmsg, message->references,
- message->in_reply_to
- ? message->in_reply_to->data : NULL,
- message->message_id);
+ set_cc_from_all_recipients(bsmsg, headers);
+
+ references = libbalsa_message_get_references(message);
+ in_reply_to = libbalsa_message_get_in_reply_to(message);
+ set_references_reply(bsmsg, references,
+ in_reply_to != NULL ? in_reply_to->data : NULL,
+ message_id);
if(balsa_app.autoquote)
fill_body_from_message(bsmsg, message, QUOTE_ALL);
if (libbalsa_identity_get_sig_whenreply(bsmsg->ident))
insert_initial_sig(bsmsg);
- bsm_finish_setup(bsmsg, message->body_list);
+ bsm_finish_setup(bsmsg, libbalsa_message_get_body_list(message));
g_idle_add((GSourceFunc) sw_grab_focus_to_text,
g_object_ref(bsmsg->text));
return bsmsg;
@@ -6853,12 +6926,16 @@ BalsaSendmsg*
sendmsg_window_forward(LibBalsaMailbox *mailbox, guint msgno,
gboolean attach)
{
- LibBalsaMessage *message =
- libbalsa_mailbox_get_message(mailbox, msgno);
- BalsaSendmsg *bsmsg = sendmsg_window_new();
- g_assert(message);
+ LibBalsaMessage *message;
+ BalsaSendmsg *bsmsg;
+ LibBalsaMessageBody *body_list;
+ message = libbalsa_mailbox_get_message(mailbox, msgno);
+ g_assert(message != NULL);
+
+ bsmsg = sendmsg_window_new();
bsmsg->type = attach ? SEND_FORWARD_ATTACH : SEND_FORWARD_INLINE;
+ body_list = libbalsa_message_get_body_list(message);
if (attach) {
if(!attach_message(bsmsg, message))
balsa_information_parented(GTK_WINDOW(bsmsg->window),
@@ -6866,11 +6943,11 @@ sendmsg_window_forward(LibBalsaMailbox *mailbox, guint msgno,
_("Attaching message failed.\n"
"Possible reason: not enough temporary space"));
bsmsg->state = SENDMSG_STATE_CLEAN;
- bsmsg_set_subject_from_body(bsmsg, message->body_list, bsmsg->ident);
+ bsmsg_set_subject_from_body(bsmsg, body_list, bsmsg->ident);
} else {
bsm_prepare_for_setup(message);
fill_body_from_message(bsmsg, message, QUOTE_NOPREFIX);
- bsm_finish_setup(bsmsg, message->body_list);
+ bsm_finish_setup(bsmsg, body_list);
}
if (libbalsa_identity_get_sig_whenforward(bsmsg->ident))
insert_initial_sig(bsmsg);
@@ -6890,12 +6967,14 @@ sendmsg_window_forward(LibBalsaMailbox *mailbox, guint msgno,
BalsaSendmsg*
sendmsg_window_continue(LibBalsaMailbox * mailbox, guint msgno)
{
- LibBalsaMessage *message =
- libbalsa_mailbox_get_message(mailbox, msgno);
+ LibBalsaMessage *message;
BalsaSendmsg *bsmsg;
+ LibBalsaMessageHeaders *headers;
+ GList *in_reply_to;
const gchar *postpone_hdr;
GList *list, *refs = NULL;
+ message = libbalsa_mailbox_get_message(mailbox, msgno);
g_assert(message);
if ((bsmsg = g_object_get_data(G_OBJECT(message),
@@ -6913,12 +6992,13 @@ sendmsg_window_continue(LibBalsaMailbox * mailbox, guint msgno)
set_identity(bsmsg, message);
setup_headers_from_message(bsmsg, message);
+ headers = libbalsa_message_get_headers(message);
libbalsa_address_view_set_from_list(bsmsg->replyto_view,
"Reply To:",
- message->headers->reply_to);
- if (message->in_reply_to)
- bsmsg->in_reply_to =
- g_strconcat("<", message->in_reply_to->data, ">", NULL);
+ headers->reply_to);
+ in_reply_to = libbalsa_message_get_in_reply_to(message);
+ if (in_reply_to != NULL)
+ bsmsg->in_reply_to = g_strconcat("<", in_reply_to->data, ">", NULL);
#ifdef HAVE_GPGME
if ((postpone_hdr =
@@ -6964,12 +7044,15 @@ sendmsg_window_continue(LibBalsaMailbox * mailbox, guint msgno)
libbalsa_message_get_user_header(message, "X-Balsa-Send-Type")))
bsmsg->type = atoi(postpone_hdr);
- for (list = message->references; list; list = list->next)
+ list = libbalsa_message_get_references(message);
+ while (list != NULL) {
refs = g_list_prepend(refs, g_strdup(list->data));
+ list = list->next;
+ }
bsmsg->references = g_list_reverse(refs);
continue_body(bsmsg, message);
- bsm_finish_setup(bsmsg, message->body_list);
+ bsm_finish_setup(bsmsg, libbalsa_message_get_body_list(message));
g_idle_add((GSourceFunc) sw_grab_focus_to_text,
g_object_ref(bsmsg->text));
return bsmsg;
diff --git a/src/store-address.c b/src/store-address.c
index a6cc2ea..e298123 100644
--- a/src/store-address.c
+++ b/src/store-address.c
@@ -330,12 +330,15 @@ store_address_note_frame(StoreAddressInfo *info)
g_object_set(G_OBJECT(info->notebook), "margin", 4, NULL);
for (list = info->message_list; list; list = list->next) {
+ LibBalsaMessageHeaders *headers;
+
message = LIBBALSA_MESSAGE(list->data);
- if (message->headers) {
- store_address_add_list(info, _("From: "), message->headers->from);
- store_address_add_list(info, _("To: "), message->headers->to_list);
- store_address_add_list(info, _("CC: "), message->headers->cc_list);
- store_address_add_list(info, _("BCC: "), message->headers->bcc_list);
+ headers = libbalsa_message_get_headers(message);
+ if (headers != NULL) {
+ store_address_add_list(info, _("From: "), headers->from);
+ store_address_add_list(info, _("To: "), headers->to_list);
+ store_address_add_list(info, _("CC: "), headers->cc_list);
+ store_address_add_list(info, _("BCC: "), headers->bcc_list);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]