[balsa/64-save-empty-attachment] body: implement libbalsa_message_body_is_empty()
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/64-save-empty-attachment] body: implement libbalsa_message_body_is_empty()
- Date: Wed, 19 Jan 2022 18:24:31 +0000 (UTC)
commit e0e90fd281e3ccdc8d01ca1ded1532e1cf40e31d
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Mon Jan 17 17:20:48 2022 -0500
body: implement libbalsa_message_body_is_empty()
balsa-mime-widget-callbacks: Warn about empty part
Do not try to save an empty attachment.
libbalsa/body.c | 31 +++++++++++++++++++++++++++++++
libbalsa/body.h | 2 ++
src/balsa-mime-widget-callbacks.c | 21 +++++++++++++++++++++
3 files changed, 54 insertions(+)
---
diff --git a/libbalsa/body.c b/libbalsa/body.c
index d2c732305..e4b23c26e 100644
--- a/libbalsa/body.c
+++ b/libbalsa/body.c
@@ -779,6 +779,37 @@ libbalsa_message_body_save_stream(LibBalsaMessageBody * body,
return len >= 0;
}
+/*
+ * libbalsa_message_body_is_empty
+ *
+ * The returned value is meaningless if an error occurred, in which case
+ * the GError is set.
+ */
+gboolean
+libbalsa_message_body_is_empty(LibBalsaMessageBody * body, GError **err)
+{
+ GMimeStream *body_stream;
+ gboolean is_empty = TRUE;
+
+ g_return_val_if_fail(body != NULL, is_empty);
+
+ body_stream = libbalsa_message_body_get_stream(body, err);
+ if (body_stream != NULL) {
+ gint64 len;
+
+ len = g_mime_stream_length(body_stream);
+ if (len < 0) {
+ char buf[1];
+
+ len = g_mime_stream_read(body_stream, buf, 1);
+ }
+ is_empty = (len == 0);
+ g_object_unref(body_stream);
+ }
+
+ return is_empty;
+}
+
gchar *
libbalsa_message_body_get_mime_type(LibBalsaMessageBody * body)
{
diff --git a/libbalsa/body.h b/libbalsa/body.h
index 08098aa28..dac3c206a 100644
--- a/libbalsa/body.h
+++ b/libbalsa/body.h
@@ -107,6 +107,8 @@ gboolean libbalsa_message_body_save_stream(LibBalsaMessageBody * body,
GMimeStream * dest,
gboolean filter_crlf,
GError **err);
+gboolean libbalsa_message_body_is_empty(LibBalsaMessageBody * body,
+ GError **err);
gboolean libbalsa_message_body_save(LibBalsaMessageBody * body,
const gchar * filename, mode_t mode,
gboolean filter_crlf, GError **err);
diff --git a/src/balsa-mime-widget-callbacks.c b/src/balsa-mime-widget-callbacks.c
index 895e5a844..5ef2d1903 100644
--- a/src/balsa-mime-widget-callbacks.c
+++ b/src/balsa-mime-widget-callbacks.c
@@ -67,6 +67,7 @@ balsa_mime_widget_ctx_menu_save(GtkWidget * parent_widget,
LibBalsaMessageBody * mime_body)
{
gchar *cont_type, *title;
+ gboolean is_empty;
GtkWidget *save_dialog;
gchar *file_uri;
LibbalsaVfs *save_file;
@@ -76,6 +77,26 @@ balsa_mime_widget_ctx_menu_save(GtkWidget * parent_widget,
g_return_if_fail(mime_body != NULL);
cont_type = libbalsa_message_body_get_mime_type(mime_body);
+
+ is_empty = libbalsa_message_body_is_empty(mime_body, &err);
+
+ if (err != NULL) {
+ balsa_information(LIBBALSA_INFORMATION_ERROR,
+ _("Could not access %s MIME Part: %s"), cont_type, err->message);
+ g_error_free(err);
+ g_free(cont_type);
+
+ return;
+ }
+
+ if (is_empty) {
+ balsa_information(LIBBALSA_INFORMATION_WARNING,
+ _("Empty %s MIME Part was not saved"), cont_type);
+ g_free(cont_type);
+
+ return;
+ }
+
title = g_strdup_printf(_("Save %s MIME Part"), cont_type);
save_dialog =
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]