[balsa: 1/2] message: LibBalsaMessage cleanup
- From: Albrecht Dreß <albrecht src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa: 1/2] message: LibBalsaMessage cleanup
- Date: Fri, 6 May 2022 16:32:50 +0000 (UTC)
commit afc9e85b7b0474399f3fc43ed252f8a7aac62a81
Author: Peter Bloomfield <peterbloomfield bellsouth net>
Date: Fri May 6 16:32:41 2022 +0000
message: LibBalsaMessage cleanup
libbalsa/libbalsa_private.h | 2 +-
libbalsa/mailbox.c | 8 +-
libbalsa/mailbox_imap.c | 8 +-
libbalsa/message.c | 177 +++++++++++++++++---------------------------
libbalsa/message.h | 35 +++------
src/balsa-message.c | 2 +-
src/message-window.c | 2 +-
7 files changed, 93 insertions(+), 141 deletions(-)
---
diff --git a/libbalsa/libbalsa_private.h b/libbalsa/libbalsa_private.h
index 11ff99496..734bdb54c 100644
--- a/libbalsa/libbalsa_private.h
+++ b/libbalsa/libbalsa_private.h
@@ -37,7 +37,7 @@ struct LibBalsaMailboxIndexEntry_ {
time_t internal_date;
unsigned short status_icon;
unsigned short attach_icon;
- unsigned long size;
+ gint64 size;
gchar *foreground;
gchar *background;
unsigned foreground_set:1;
diff --git a/libbalsa/mailbox.c b/libbalsa/mailbox.c
index 2619a38e9..ec72a0dac 100644
--- a/libbalsa/mailbox.c
+++ b/libbalsa/mailbox.c
@@ -3259,8 +3259,12 @@ mailbox_model_get_value(GtkTreeModel *tree_model,
break;
case LB_MBOX_SIZE_COL:
if(msg) {
- tmp = libbalsa_size_to_gchar(msg->size);
- g_value_take_string(value, tmp);
+ if (msg->size != -1) {
+ tmp = libbalsa_size_to_gchar(msg->size);
+ g_value_take_string(value, tmp);
+ } else {
+ g_value_set_static_string(value, "?");
+ }
}
else g_value_set_static_string(value, " ");
break;
diff --git a/libbalsa/mailbox_imap.c b/libbalsa/mailbox_imap.c
index 929e3a2ef..df329ebda 100644
--- a/libbalsa/mailbox_imap.c
+++ b/libbalsa/mailbox_imap.c
@@ -2256,7 +2256,7 @@ libbalsa_mailbox_imap_fetch_structure(LibBalsaMailbox *mailbox,
LibBalsaMailboxImap *mimap = LIBBALSA_MAILBOX_IMAP(mailbox);
LibBalsaServer *server;
LibBalsaMessageHeaders *headers;
- glong msgno;
+ guint msgno;
ImapFetchType ift = 0;
g_return_val_if_fail(mimap->opened, FALSE);
@@ -2327,7 +2327,7 @@ libbalsa_mailbox_imap_fetch_headers(LibBalsaMailbox *mailbox,
ImapResponse rc;
guint msgno;
- msgno = (guint) libbalsa_message_get_msgno(message);
+ msgno = libbalsa_message_get_msgno(message);
/* If message numbers are out of sync with the mail store,
* just skip the message: */
if (msgno > imap_mbox_handle_get_exists(mimap->handle))
@@ -2473,7 +2473,7 @@ lbm_imap_get_msg_part_from_cache(LibBalsaMessage * message,
LibBalsaMailboxImap *mimap = LIBBALSA_MAILBOX_IMAP(mailbox);
FILE *fp;
gchar *section;
- glong msgno = libbalsa_message_get_msgno(message);
+ guint msgno = libbalsa_message_get_msgno(message);
ImapMessage *imsg = mi_get_imsg(mimap, msgno);
if (imsg == NULL) {
@@ -2538,7 +2538,7 @@ lbm_imap_get_msg_part_from_cache(LibBalsaMessage * message,
section, FALSE, ifbo, append_str, &dt));
libbalsa_unlock_mailbox(mailbox);
if(rc != IMR_OK) {
- g_debug("Error fetching imap message no %ld section %s",
+ g_debug("Error fetching imap message no %u section %s",
msgno, section);
g_set_error(err,
LIBBALSA_MAILBOX_ERROR, LIBBALSA_MAILBOX_ACCESS_ERROR,
diff --git a/libbalsa/message.c b/libbalsa/message.c
index a3d210f70..6682d9928 100644
--- a/libbalsa/message.c
+++ b/libbalsa/message.c
@@ -26,6 +26,7 @@
- Lack of inline functions in C increases program complexity. This cost
can be accepted.
- thorough analysis of memory usage is needed.
+ 2022-03-21: All code conditional on MESSAGE_COPY_CONTENT is removed.
*/
#if defined(HAVE_CONFIG_H) && HAVE_CONFIG_H
@@ -61,12 +62,8 @@ struct _LibBalsaMessage {
/* 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;
@@ -88,21 +85,9 @@ struct _LibBalsaMessage {
/* message ID */
gchar *message_id;
- /* GnuPG or S/MIME sign and/or encrypt message (sending), or status of received message */
- guint crypt_mode;
-
- /* Indicate that uid's should always be trusted when signing a message */
- gboolean always_trust;
-
- /* attach the GnuPG public key to the message (sending) */
- gboolean att_pubkey;
-
/* sender identity, required for choosing a forced GnuPG or S/MIME key */
LibBalsaIdentity *ident;
- /* request a DSN (sending) */
- gboolean request_dsn;
-
/* a forced multipart subtype or NULL for mixed; used only for
* sending */
gchar *subtype;
@@ -110,19 +95,40 @@ struct _LibBalsaMessage {
/* additional message content type parameters; used only for sending */
GList *parameters;
+ gchar *tempdir; /* to hold named parts */
+
/* message body */
- guint body_ref;
LibBalsaMessageBody *body_list;
- glong msgno; /* message no; always copy for faster sorting;
+ /* end of pointers, begin 64-bit ints */
+ gint64 length; /* byte len */
+
+ /* end of 64-bit ints, begin ints */
+ /* GnuPG or S/MIME sign and/or encrypt message (sending), or status of received message */
+ guint crypt_mode;
+
+ guint body_ref;
+
+ /* flags */
+ LibBalsaMessageFlag flags;
+
+ guint msgno; /* message no; always copy for faster sorting;
* counting starts at 1. */
-#if MESSAGE_COPY_CONTENT
- glong length; /* byte len */
-#endif /* MESSAGE_COPY_CONTENT */
- gchar *tempdir; /* to hold named parts */
+ /* GPG sign and/or encrypt message (sending) */
+ guint gpg_mode;
+ /* end of ints, begin bit fields */
unsigned has_all_headers : 1;
+
+ /* Indicate that uid's should always be trusted when signing a message */
+ unsigned always_trust : 1;
+
+ /* attach the GnuPG public key to the message (sending) */
+ unsigned att_pubkey : 1;
+
+ /* request a DSN (sending) */
+ unsigned request_dsn : 1;
};
G_DEFINE_TYPE(LibBalsaMessage,
@@ -133,20 +139,26 @@ 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->subtype = NULL;
message->parameters = NULL;
message->body_ref = 0;
message->body_list = NULL;
message->has_all_headers = 0;
message->crypt_mode = LIBBALSA_PROTECT_NONE;
message->ident = NULL;
+ message->body_list = NULL;
+ message->body_ref = 0;
+ message->flags = LIBBALSA_MESSAGE_FLAG_NONE;
+ message->gpg_mode = 0;
+ message->has_all_headers = 0;
+ message->att_pubkey = 0;
+ message->request_dsn = 0;
}
@@ -199,9 +211,7 @@ libbalsa_message_finalize(GObject * object)
g_free(message->message_id);
g_free(message->subtype);
-#if MESSAGE_COPY_CONTENT
g_free(message->subj);
-#endif /* MESSAGE_COPY_CONTENT */
libbalsa_message_body_free(message->body_list);
@@ -725,7 +735,7 @@ libbalsa_message_body_ref(LibBalsaMessage *message,
libbalsa_lock_mailbox(message->mailbox);
- if (fetch_all_headers && !message->has_all_headers)
+ if (fetch_all_headers && message->has_all_headers == 0)
flags |= LB_FETCH_RFC822_HEADERS;
if ((message->body_ref == 0) && !message->body_list) {
@@ -933,65 +943,12 @@ libbalsa_message_set_dispnotify(LibBalsaMessage * message,
/* libbalsa_message_get_subject:
get constant pointer to the subject of the message;
*/
-#ifdef MESSAGE_COPY_CONTENT
const gchar *
libbalsa_message_get_subject(LibBalsaMessage *message)
{
return message->subj != NULL ? message->subj : _("(No subject)");
}
-
-#else /* MESSAGE_COPY_CONTENT */
-const gchar *
-libbalsa_message_get_subject(LibBalsaMessage* msg)
-{
- const gchar *ret;
- if(msg->subj == NULL &&
- msg->mime_msg != NULL && msg->mailbox != NULL) { /* 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;
-
- return ret ? ret : _("(No subject)");
-}
-
-
-guint
-libbalsa_message_get_lines(LibBalsaMessage* msg)
-{
- /* set the line count */
- const char *value;
- if (msg->mime_msg == NULL)
- return 0;
- value = g_mime_object_get_header(msg->mime_msg, "Lines");
- if (value == NULL)
- return 0;
- return atoi(value);
-}
-glong
-libbalsa_message_get_length(LibBalsaMessage* msg)
-{
- /* set the length */
- const char *value;
- if (msg->mime_msg == NULL)
- return 0;
- value = g_mime_object_get_header(msg->mime_msg, "Content-Length");
- if (value == NULL)
- return 0;
- return atoi(value);
-}
-
-glong
-libbalsa_message_get_no(LibBalsaMessage* msg)
-{
- return msg->msgno;
-}
-
-
-#endif /* MESSAGE_COPY_CONTENT */
-
/* Populate headers from mime_msg, but only the members that are needed
* all the time. */
@@ -1113,15 +1070,20 @@ libbalsa_message_init_from_gmime(LibBalsaMessage * message,
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
g_return_if_fail(GMIME_IS_MESSAGE(mime_msg));
-#ifdef MESSAGE_COPY_CONTENT
header = g_mime_message_get_subject(mime_msg);
libbalsa_message_set_subject_from_header(message, header);
header = g_mime_object_get_header(GMIME_OBJECT(mime_msg), "Content-Length");
- if (header)
- message->length = atoi(header);
+ if (header) {
+ char *endptr;
+
+ message->length = strtoll(header, &endptr, 10);
+ if (*endptr != '\0') {
+ message->length = -1;
+ g_debug("Bad Content-Length header: “%s”; using -1", header);
+ }
+ }
-#endif /* MESSAGE_COPY_CONTENT */
header = g_mime_message_get_message_id(mime_msg);
if (header)
message->message_id = g_strdup(header);
@@ -1259,9 +1221,7 @@ lbmsg_set_header(LibBalsaMessage *message,
g_free(val);
return FALSE;
}
-#if MESSAGE_COPY_CONTENT
libbalsa_message_set_subject_from_header(message, value);
-#endif /* MESSAGE_COPY_CONTENT */
} else if (g_ascii_strcasecmp(name, "Date") == 0) {
GDateTime *datetime;
@@ -1289,13 +1249,15 @@ lbmsg_set_header(LibBalsaMessage *message,
} else if ((headers->dispnotify_to == NULL) &&
(g_ascii_strcasecmp(name, "Disposition-Notification-To") == 0)) {
headers->dispnotify_to = internet_address_list_parse(libbalsa_parser_options(), value);
- } else
-#ifdef MESSAGE_COPY_CONTENT
- if (g_ascii_strcasecmp(name, "Content-Length") == 0) {
- message->length = atoi(value);
- } else
-#endif /* MESSAGE_COPY_CONTENT */
- if (all) {
+ } else if (g_ascii_strcasecmp(name, "Content-Length") == 0) {
+ char *endptr;
+
+ message->length = strtoll(value, &endptr, 10);
+ if (*endptr != '\0') {
+ message->length = -1;
+ g_debug("Bad Content-Length header: “%s”; using -1", value);
+ }
+ } else if (all) {
headers->user_hdrs =
g_list_prepend(headers->user_hdrs,
libbalsa_create_hdr_pair(name, g_strdup(value)));
@@ -1584,7 +1546,7 @@ libbalsa_message_get_message_id(LibBalsaMessage *message)
}
-glong
+guint
libbalsa_message_get_msgno(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), 0);
@@ -1593,7 +1555,7 @@ libbalsa_message_get_msgno(LibBalsaMessage *message)
}
-glong
+gint64
libbalsa_message_get_length(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), 0);
@@ -1607,7 +1569,7 @@ libbalsa_message_get_has_all_headers(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), FALSE);
- return message->has_all_headers;
+ return message->has_all_headers != 0;
}
@@ -1625,7 +1587,7 @@ libbalsa_message_get_request_dsn(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), FALSE);
- return message->request_dsn;
+ return message->request_dsn != 0;
}
@@ -1680,7 +1642,7 @@ libbalsa_message_get_always_trust(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), FALSE);
- return message->always_trust;
+ return message->always_trust != 0;
}
@@ -1698,7 +1660,7 @@ libbalsa_message_get_attach_pubkey(LibBalsaMessage *message)
{
g_return_val_if_fail(LIBBALSA_IS_MESSAGE(message), FALSE);
- return message->att_pubkey;
+ return message->att_pubkey != 0;
}
@@ -1747,7 +1709,7 @@ libbalsa_message_set_mailbox(LibBalsaMessage *message,
void
libbalsa_message_set_msgno(LibBalsaMessage *message,
- glong msgno)
+ guint msgno)
{
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
@@ -1761,14 +1723,13 @@ libbalsa_message_set_has_all_headers(LibBalsaMessage *message,
{
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
- message->has_all_headers = has_all_headers;
+ message->has_all_headers = has_all_headers ? 1 : 0;
}
-#if MESSAGE_COPY_CONTENT
void
libbalsa_message_set_length(LibBalsaMessage *message,
- glong length)
+ gint64 length)
{
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
@@ -1776,8 +1737,6 @@ libbalsa_message_set_length(LibBalsaMessage *message,
}
-#endif /* MESSAGE_COPY_CONTENT */
-
void
libbalsa_message_set_mime_message(LibBalsaMessage *message,
GMimeMessage *mime_message)
@@ -1817,7 +1776,7 @@ libbalsa_message_set_request_dsn(LibBalsaMessage *message,
{
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
- message->request_dsn = request_dsn;
+ message->request_dsn = request_dsn ? 1 : 0;
}
@@ -1882,17 +1841,17 @@ libbalsa_message_set_always_trust(LibBalsaMessage *message,
{
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
- message->always_trust = mode;
+ message->always_trust = mode ? 1 : 0;
}
void
libbalsa_message_set_attach_pubkey(LibBalsaMessage *message,
- gboolean att_pubkey)
+ gboolean att_pubkey)
{
g_return_if_fail(LIBBALSA_IS_MESSAGE(message));
- message->att_pubkey = att_pubkey;
+ message->att_pubkey = att_pubkey ? 1 : 0;
}
diff --git a/libbalsa/message.h b/libbalsa/message.h
index 8c20e3f5b..272227941 100644
--- a/libbalsa/message.h
+++ b/libbalsa/message.h
@@ -33,8 +33,6 @@
#include "rfc3156.h"
-#define MESSAGE_COPY_CONTENT 1
-
#define LIBBALSA_TYPE_MESSAGE libbalsa_message_get_type()
G_DECLARE_FINAL_TYPE(LibBalsaMessage,
@@ -46,13 +44,14 @@ G_DECLARE_FINAL_TYPE(LibBalsaMessage,
typedef enum _LibBalsaMessageFlag LibBalsaMessageFlag;
enum _LibBalsaMessageFlag {
- LIBBALSA_MESSAGE_FLAG_NEW = 1 << 0,
- LIBBALSA_MESSAGE_FLAG_DELETED = 1 << 1,
- 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_NONE = 0,
+ LIBBALSA_MESSAGE_FLAG_NEW = 1 << 0,
+ LIBBALSA_MESSAGE_FLAG_DELETED = 1 << 1,
+ 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 */
};
#define LIBBALSA_MESSAGE_FLAGS_REAL \
@@ -261,11 +260,6 @@ void libbalsa_message_set_subject_from_header(LibBalsaMessage * message,
function out if we find a way.
*/
const gchar* libbalsa_message_get_subject(LibBalsaMessage* message);
-#ifndef MESSAGE_COPY_CONTENT
-guint libbalsa_message_get_lines(LibBalsaMessage* msg);
-glong libbalsa_message_get_length(LibBalsaMessage* msg);
-#endif /* !MESSAGE_COPY_CONTENT */
-glong libbalsa_message_get_no(LibBalsaMessage* msg);
LibBalsaMessageAttach libbalsa_message_get_attach_icon(LibBalsaMessage *
message);
#define libbalsa_message_date_to_utf8(m, f) \
@@ -300,8 +294,8 @@ LibBalsaMessageBody *libbalsa_message_get_body_list(LibBalsaMessage *message)
GMimeMessage *libbalsa_message_get_mime_message(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);
+guint libbalsa_message_get_msgno(LibBalsaMessage *message);
+gint64 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);
@@ -324,16 +318,11 @@ void libbalsa_message_set_flags(LibBalsaMessage *message,
void libbalsa_message_set_mailbox(LibBalsaMessage *message,
LibBalsaMailbox *mailbox);
void libbalsa_message_set_msgno(LibBalsaMessage *message,
- glong msgno);
+ guint 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 /* MESSAGE_COPY_CONTENT */
-
+ gint64 length);
void libbalsa_message_set_mime_message(LibBalsaMessage *message,
GMimeMessage *mime_message);
void libbalsa_message_set_sender(LibBalsaMessage *message,
diff --git a/src/balsa-message.c b/src/balsa-message.c
index dc4bcd980..0f1bc8f33 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -1146,7 +1146,7 @@ balsa_message_set(BalsaMessage * balsa_message, LibBalsaMailbox * mailbox, guint
balsa_information(LIBBALSA_INFORMATION_WARNING,
_("Could not access message %u "
"in mailbox “%s”."),
- (guint) libbalsa_message_get_msgno(message),
+ libbalsa_message_get_msgno(message),
libbalsa_mailbox_get_name(mailbox));
return FALSE;
}
diff --git a/src/message-window.c b/src/message-window.c
index 46c5413b3..b2bfd8d5c 100644
--- a/src/message-window.c
+++ b/src/message-window.c
@@ -402,7 +402,7 @@ destroy_message_window(GtkWidget * widget, MessageWindow * mw)
static void
mw_expunged_cb(LibBalsaMailbox * mailbox, guint msgno, MessageWindow * mw)
{
- if (mw->message != NULL && (guint) libbalsa_message_get_msgno(mw->message) == msgno)
+ if (mw->message != NULL && libbalsa_message_get_msgno(mw->message) == msgno)
gtk_widget_destroy(mw->window);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]