[balsa: 1/2] message: LibBalsaMessage cleanup




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]