From 4113c4e1e6bda90dd5f6721accdd4862a2c3b07c Mon Sep 17 00:00:00 2001 From: Colin Leroy Date: Fri, 26 Aug 2005 16:38:40 +0000 Subject: [PATCH] 2005-08-26 [colin] 1.9.13cvs59 * src/procmime.c Fix "Problem with replies". This happened only on IMAP... * src/procmsg.c Factorize code a bit * src/compose.c Speed improvement on very long messages (wrapping) Fix signature color on Reedit and Redirect On Reedit, don't attach pgp-signatures parts, but set signing to On. --- ChangeLog-gtk2.claws | 13 +++++ PATCHSETS | 1 + configure.ac | 2 +- src/compose.c | 123 ++++++++++++++++++++++++++++++------------- src/procmime.c | 7 +++ src/procmsg.c | 61 ++++++++------------- 6 files changed, 129 insertions(+), 78 deletions(-) diff --git a/ChangeLog-gtk2.claws b/ChangeLog-gtk2.claws index c5fb49baf..ae2b8b981 100644 --- a/ChangeLog-gtk2.claws +++ b/ChangeLog-gtk2.claws @@ -1,3 +1,16 @@ +2005-08-26 [colin] 1.9.13cvs59 + + * src/procmime.c + Fix "Problem with replies". This happened only + on IMAP... + * src/procmsg.c + Factorize code a bit + * src/compose.c + Speed improvement on very long messages (wrapping) + Fix signature color on Reedit and Redirect + On Reedit, don't attach pgp-signatures parts, but + set signing to On. + 2005-08-24 [paul] 1.9.13cvs58 * src/compose.c diff --git a/PATCHSETS b/PATCHSETS index e04571a6e..07d82e441 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -744,3 +744,4 @@ ( cvs diff -u -r 1.179.2.59 -r 1.179.2.60 src/imap.c; cvs diff -u -r 1.1.4.16 -r 1.1.4.17 src/etpan/imap-thread.c; cvs diff -u -r 1.1.4.3 -r 1.1.4.4 src/etpan/imap-thread.h; cvs diff -u -r -1.1.2.1 -r -1.1.2.2 src/gtk/sylpheed-marshal.c; cvs diff -u -r -1.1.2.1 -r -1.1.2.2 src/gtk/sylpheed-marshal.h; cvs diff -u -r 1.2.2.5 -r 1.2.2.6 tools/kdeservicemenu/README; cvs diff -u -r 1.2.2.2 -r 1.2.2.3 tools/kdeservicemenu/install.sh; cvs diff -u -r 1.3.2.4 -r 1.3.2.5 tools/kdeservicemenu/template_sylpheed-attach-files.desktop; cvs diff -u -r 1.3.2.4 -r 1.3.2.5 tools/kdeservicemenu/template_sylpheed-compress-attach.desktop; ) > 1.9.13cvs56.patchset ( cvs diff -u -r 1.115.2.51 -r 1.115.2.52 src/main.c; cvs diff -u -r 1.9.2.14 -r 1.9.2.15 src/common/defs.h; ) > 1.9.13cvs57.patchset ( cvs diff -u -r 1.382.2.155 -r 1.382.2.156 src/compose.c; ) > 1.9.13cvs58.patchset +( cvs diff -u -r 1.49.2.55 -r 1.49.2.56 src/procmime.c; cvs diff -u -r 1.150.2.40 -r 1.150.2.41 src/procmsg.c; cvs diff -u -r 1.382.2.156 -r 1.382.2.157 src/compose.c; ) > 1.9.13cvs59.patchset diff --git a/configure.ac b/configure.ac index 55e94614d..6ea655c80 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=9 MICRO_VERSION=13 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=58 +EXTRA_VERSION=59 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/compose.c b/src/compose.c index 60ecdce61..fef63274a 100644 --- a/src/compose.c +++ b/src/compose.c @@ -951,6 +951,26 @@ static void compose_force_encryption(Compose *compose, PrefsAccount *account, } } +static void compose_force_signing(Compose *compose, PrefsAccount *account) +{ + gchar *privacy = NULL; + + if (account->default_privacy_system + && strlen(account->default_privacy_system)) { + privacy = account->default_privacy_system; + } else { + GSList *privacy_avail = privacy_get_system_ids(); + if (privacy_avail && g_slist_length(privacy_avail)) { + privacy = (gchar *)(privacy_avail->data); + } + } + if (privacy != NULL) { + compose->privacy_system = g_strdup(privacy); + compose_update_privacy_system_menu_item(compose); + compose_use_signing(compose, TRUE); + } +} + void compose_reply_mode(ComposeMode mode, GSList *msginfo_list, gchar *body) { MsgInfo *msginfo; @@ -1328,6 +1348,49 @@ Compose *compose_forward_multiple(PrefsAccount *account, GSList *msginfo_list) return compose; } +static gboolean compose_is_sig_separator(Compose *compose, GtkTextBuffer *textbuf, GtkTextIter *iter) +{ + GtkTextIter start = *iter; + GtkTextIter end_iter; + int start_pos = gtk_text_iter_get_offset(&start); + + if (!compose->account->sig_sep) + return FALSE; + + gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, + start_pos+strlen(compose->account->sig_sep)); + + /* check sig separator */ + if (!strcmp(gtk_text_iter_get_text(&start, &end_iter), + compose->account->sig_sep)) { + /* check end of line (\n) */ + gtk_text_buffer_get_iter_at_offset(textbuf, &start, + start_pos+strlen(compose->account->sig_sep)); + gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, + start_pos+strlen(compose->account->sig_sep)+1); + + if (!strcmp(gtk_text_iter_get_text(&start, &end_iter),"\n")); + return TRUE; + + + } + + return FALSE; +} + +static void compose_colorize_signature(Compose *compose) +{ + GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(compose->text)); + GtkTextIter iter; + GtkTextIter end_iter; + gtk_text_buffer_get_start_iter(buffer, &iter); + while (gtk_text_iter_forward_line(&iter)) + if (compose_is_sig_separator(compose, buffer, &iter)) { + gtk_text_buffer_get_end_iter(buffer, &end_iter); + gtk_text_buffer_apply_tag_by_name(buffer,"signature",&iter, &end_iter); + } +} + void compose_reedit(MsgInfo *msginfo) { Compose *compose = NULL; @@ -1468,6 +1531,8 @@ void compose_reedit(MsgInfo *msginfo) compose_attach_parts(compose, msginfo); + compose_colorize_signature(compose); + g_signal_handlers_unblock_by_func(G_OBJECT(textbuf), G_CALLBACK(compose_changed_cb), compose); @@ -1529,6 +1594,8 @@ Compose *compose_redirect(PrefsAccount *account, MsgInfo *msginfo) compose_quote_fmt(compose, msginfo, "%M", NULL, NULL); gtk_text_view_set_editable(GTK_TEXT_VIEW(compose->text), FALSE); + compose_colorize_signature(compose); + ifactory = gtk_item_factory_from_widget(compose->popupmenu); menu_set_sensitive(ifactory, "/Add...", FALSE); menu_set_sensitive(ifactory, "/Remove", FALSE); @@ -2603,13 +2670,20 @@ static void compose_attach_parts(Compose *compose, MsgInfo *msginfo) gchar *content_type; content_type = procmime_get_content_type_str(child->type, child->subtype); - partname = procmime_mimeinfo_get_parameter(child, "filename"); - if (partname == NULL) - partname = procmime_mimeinfo_get_parameter(child, "name"); - if (partname == NULL) - partname = ""; - compose_attach_append(compose, outfile, - partname, content_type); + + /* if we meet a pgp signature, we don't attach it, but + * we force signing. */ + if (strcmp(content_type, "application/pgp-signature")) { + partname = procmime_mimeinfo_get_parameter(child, "filename"); + if (partname == NULL) + partname = procmime_mimeinfo_get_parameter(child, "name"); + if (partname == NULL) + partname = ""; + compose_attach_append(compose, outfile, + partname, content_type); + } else { + compose_force_signing(compose, compose->account); + } g_free(content_type); } g_free(outfile); @@ -2843,36 +2917,6 @@ static gboolean compose_get_line_break_pos(GtkTextBuffer *buffer, return do_break; } -static gboolean compose_is_sig_separator(Compose *compose, GtkTextBuffer *textbuf, GtkTextIter *iter) -{ - GtkTextIter start = *iter; - GtkTextIter end_iter; - int start_pos = gtk_text_iter_get_offset(&start); - - if (!compose->account->sig_sep) - return FALSE; - - gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, - start_pos+strlen(compose->account->sig_sep)); - - /* check sig separator */ - if (!strcmp(gtk_text_iter_get_text(&start, &end_iter), - compose->account->sig_sep)) { - /* check end of line (\n) */ - gtk_text_buffer_get_iter_at_offset(textbuf, &start, - start_pos+strlen(compose->account->sig_sep)); - gtk_text_buffer_get_iter_at_offset(textbuf, &end_iter, - start_pos+strlen(compose->account->sig_sep)+1); - - if (!strcmp(gtk_text_iter_get_text(&start, &end_iter),"\n")); - return TRUE; - - - } - - return FALSE; -} - static gboolean compose_join_next_line(Compose *compose, GtkTextBuffer *buffer, GtkTextIter *iter, @@ -7490,7 +7534,10 @@ static void text_inserted(GtkTextBuffer *buffer, GtkTextIter *iter, gtk_text_buffer_insert(buffer, iter, text, len); mark = gtk_text_buffer_create_mark(buffer, NULL, iter, FALSE); - compose_wrap_all_full(compose, FALSE); + +/* compose_wrap_all_full(compose, FALSE); */ + compose_wrap_paragraph(compose, iter, FALSE); + gtk_text_buffer_get_iter_at_mark(buffer, iter, mark); gtk_text_buffer_delete_mark(buffer, mark); diff --git a/src/procmime.c b/src/procmime.c index 4f7e38452..6e00efe2e 100644 --- a/src/procmime.c +++ b/src/procmime.c @@ -409,6 +409,9 @@ gboolean procmime_encode_content(MimeInfo *mimeinfo, EncodingType encoding) gchar *tmpfilename; struct stat statbuf; + if (mimeinfo->content == MIMECONTENT_EMPTY) + return TRUE; + if (mimeinfo->encoding_type != ENC_UNKNOWN && mimeinfo->encoding_type != ENC_BINARY && mimeinfo->encoding_type != ENC_7BIT && @@ -2138,6 +2141,10 @@ gint procmime_write_mimeinfo(MimeInfo *mimeinfo, FILE *fp) debug_print("procmime_write_mimeinfo\n"); + if (mimeinfo->encoding_type == ENC_UNKNOWN + && mimeinfo->content != MIMECONTENT_EMPTY) + procmime_encode_content(mimeinfo, ENC_BINARY); + if (G_NODE_IS_LEAF(mimeinfo->node)) { switch (mimeinfo->content) { case MIMECONTENT_FILE: diff --git a/src/procmsg.c b/src/procmsg.c index 788bda559..48e949f68 100644 --- a/src/procmsg.c +++ b/src/procmsg.c @@ -1914,53 +1914,36 @@ MsgInfo *procmsg_msginfo_new_from_mimeinfo(MsgInfo *src_msginfo, MimeInfo *mimei { MsgInfo *tmp_msginfo = NULL; MsgFlags flags = {0, 0}; - + gchar *tmpfile = get_tmp_file(); + FILE *fp = g_fopen(tmpfile, "wb"); if (!mimeinfo || mimeinfo->type != MIMETYPE_MESSAGE || g_ascii_strcasecmp(mimeinfo->subtype, "rfc822")) { g_warning("procmsg_msginfo_new_from_mimeinfo(): unsuitable mimeinfo"); + if (fp) + fclose(fp); + g_free(tmpfile); return NULL; } - - if (mimeinfo->content == MIMECONTENT_MEM) { - gchar *tmpfile = get_tmp_file(); - str_write_to_file(mimeinfo->data.mem, tmpfile); - g_free(mimeinfo->data.mem); - mimeinfo->content = MIMECONTENT_FILE; - mimeinfo->data.filename = g_strdup(tmpfile); - g_free(tmpfile); - tmp_msginfo = procheader_parse_file(mimeinfo->data.filename, - flags, TRUE, FALSE); - if (tmp_msginfo != NULL) { - tmp_msginfo->folder = src_msginfo->folder; - tmp_msginfo->plaintext_file = g_strdup(mimeinfo->data.filename); - } else { - g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo"); - } - } else { - gchar *tmpfile = get_tmp_file(); - FILE *fp = g_fopen(tmpfile, "wb"); - if (fp && procmime_write_mimeinfo(mimeinfo, fp) >= 0) { - if (fp) - fclose(fp); - fp = NULL; - tmp_msginfo = procheader_parse_file( - tmpfile, flags, - TRUE, FALSE); - } - if (fp) - fclose(fp); + if (fp && procmime_write_mimeinfo(mimeinfo, fp) >= 0) { + fclose(fp); + fp = NULL; + tmp_msginfo = procheader_parse_file( + tmpfile, flags, + TRUE, FALSE); + } + if (fp) + fclose(fp); - if (tmp_msginfo != NULL) { - tmp_msginfo->folder = src_msginfo->folder; - tmp_msginfo->plaintext_file = g_strdup(tmpfile); - } else { - g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo"); - } - g_free(tmpfile); - + if (tmp_msginfo != NULL) { + tmp_msginfo->folder = src_msginfo->folder; + tmp_msginfo->plaintext_file = g_strdup(tmpfile); + } else { + g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo"); } - + + g_free(tmpfile); + return tmp_msginfo; } -- 2.25.1