Start reiplementing The Right Way and not danw's fucking half-assed kludge

2001-12-14  Jeffrey Stedfast  <fejj@ximian.com>

	* mail-format.c (try_inline_pgp):
	(try_inline_pgp_sig): Start reiplementing The Right Way and not
	danw's fucking half-assed kludge that doesn't work.

svn path=/trunk/; revision=15076
This commit is contained in:
Jeffrey Stedfast
2001-12-14 17:57:08 +00:00
committed by Jeffrey Stedfast
parent 969ffa703d
commit 37f1f773e2
3 changed files with 40 additions and 129 deletions

View File

@ -1,3 +1,9 @@
2001-12-14 Jeffrey Stedfast <fejj@ximian.com>
* mail-format.c (try_inline_pgp):
(try_inline_pgp_sig): Start reiplementing The Right Way and not
danw's fucking half-assed kludge that doesn't work.
2001-12-12 Jeffrey Stedfast <fejj@ximian.com>
* mail-config.c (mail_config_set_new_mail_notification_command):

View File

@ -71,7 +71,7 @@ struct _PixbufLoader {
};
static GHashTable *thumbnail_cache = NULL;
static gchar *save_pathname = NULL; /* preserves last directory in save dialog */
static char *save_pathname = NULL; /* preserves last directory in save dialog */
/*----------------------------------------------------------------------*
* Callbacks
@ -126,7 +126,7 @@ make_safe_filename (const char *prefix,CamelMimePart *part)
{
const char *name = NULL;
char *safe, *p;
if (part) {
name = camel_mime_part_get_filename (part);
}
@ -135,7 +135,7 @@ make_safe_filename (const char *prefix,CamelMimePart *part)
/* This is a filename. Translators take note. */
name = _("attachment");
}
p = strrchr (name, '/');
if (p)
safe = g_strdup_printf ("%s%s", prefix, p);
@ -154,24 +154,23 @@ save_data_cb (GtkWidget *widget, gpointer user_data)
{
GtkFileSelection *file_select = (GtkFileSelection *)
gtk_widget_get_ancestor (widget, GTK_TYPE_FILE_SELECTION);
gchar *p;
char *p;
/* uh, this doesn't really feel right, but i dont know what to do better */
gtk_widget_hide (GTK_WIDGET (file_select));
write_data_to_file (user_data,
gtk_file_selection_get_filename (file_select),
write_data_to_file (user_data, gtk_file_selection_get_filename (file_select),
FALSE);
/* preserve the pathname */
g_free(save_pathname);
save_pathname = g_strdup(gtk_file_selection_get_filename(file_select));
if((p = strrchr(save_pathname, '/')) != NULL)
g_free (save_pathname);
save_pathname = g_strdup (gtk_file_selection_get_filename (file_select));
if((p = strrchr (save_pathname, '/')) != NULL)
p[0] = 0;
else {
g_free(save_pathname);
g_free (save_pathname);
save_pathname = NULL;
}
gtk_widget_destroy (GTK_WIDGET (file_select));
}
@ -1124,8 +1123,8 @@ struct _load_content_msg {
GtkHTML *html;
GtkHTMLStream *handle;
gint redisplay_counter;
gchar *url;
int redisplay_counter;
char *url;
CamelMimeMessage *message;
void (*callback)(MailDisplay *, gpointer);
gpointer data;
@ -1285,7 +1284,7 @@ stream_write_or_redisplay_when_loaded (MailDisplay *md,
void
mail_display_stream_write_when_loaded (MailDisplay *md,
gconstpointer key,
const gchar *url,
const char *url,
void (*callback)(MailDisplay *, gpointer),
GtkHTML *html,
GtkHTMLStream *handle,
@ -1309,12 +1308,12 @@ mail_text_write (GtkHTML *html, GtkHTMLStream *stream, gboolean printing, const
{
guint flags;
char *htmltext;
flags = E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_SPACES;
if (! printing)
if (!printing)
flags |= E_TEXT_TO_HTML_CONVERT_URLS | E_TEXT_TO_HTML_CONVERT_ADDRESSES;
if (mail_config_get_citation_highlight () && ! printing)
flags |= E_TEXT_TO_HTML_MARK_CITATION;
@ -1351,7 +1350,7 @@ static void
clear_data (CamelObject *object, gpointer event_data, gpointer user_data)
{
GData *data = user_data;
g_datalist_clear (&data);
}
@ -2065,10 +2064,10 @@ mail_display_new (void)
GtkWidget *scroll, *html;
GdkAtom clipboard_atom;
HTMLTokenizer *tok;
gtk_box_set_homogeneous (GTK_BOX (mail_display), FALSE);
gtk_widget_show (GTK_WIDGET (mail_display));
scroll = e_scroll_frame_new (NULL, NULL);
e_scroll_frame_set_policy (E_SCROLL_FRAME (scroll),
GTK_POLICY_AUTOMATIC,
@ -2076,36 +2075,36 @@ mail_display_new (void)
e_scroll_frame_set_shadow_type (E_SCROLL_FRAME (scroll), GTK_SHADOW_IN);
gtk_box_pack_start_defaults (GTK_BOX (mail_display), GTK_WIDGET (scroll));
gtk_widget_show (GTK_WIDGET (scroll));
html = gtk_html_new ();
tok = e_searching_tokenizer_new ();
html_engine_set_tokenizer (GTK_HTML (html)->engine, tok);
gtk_object_unref (GTK_OBJECT (tok));
mail_display_initialize_gtkhtml (mail_display, GTK_HTML (html));
gtk_container_add (GTK_CONTAINER (scroll), html);
gtk_widget_show (GTK_WIDGET (html));
gtk_signal_connect (GTK_OBJECT (mail_display->invisible), "selection_get",
GTK_SIGNAL_FUNC (invisible_selection_get_callback), mail_display);
gtk_signal_connect (GTK_OBJECT (mail_display->invisible), "selection_clear_event",
GTK_SIGNAL_FUNC (invisible_selection_clear_event_callback), mail_display);
gtk_selection_add_target (mail_display->invisible,
GDK_SELECTION_PRIMARY, GDK_SELECTION_TYPE_STRING, 1);
clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE);
if (clipboard_atom != GDK_NONE)
gtk_selection_add_target (mail_display->invisible,
clipboard_atom, GDK_SELECTION_TYPE_STRING, 1);
mail_display->scroll = E_SCROLL_FRAME (scroll);
mail_display->html = GTK_HTML (html);
mail_display->last_active = NULL;
mail_display->data = g_new0 (GData *, 1);
g_datalist_init (mail_display->data);
return GTK_WIDGET (mail_display);
}
@ -2114,9 +2113,9 @@ mail_display_initialize_gtkhtml (MailDisplay *mail_display, GtkHTML *html)
{
gtk_html_set_default_content_type (GTK_HTML (html),
"text/html; charset=utf-8");
gtk_html_set_editable (GTK_HTML (html), FALSE);
gtk_signal_connect (GTK_OBJECT (html), "url_requested",
GTK_SIGNAL_FUNC (on_url_requested),
mail_display);
@ -2136,7 +2135,6 @@ mail_display_initialize_gtkhtml (MailDisplay *mail_display, GtkHTML *html)
GTK_SIGNAL_FUNC (html_iframe_created), mail_display);
gtk_signal_connect (GTK_OBJECT (html), "on_url",
GTK_SIGNAL_FUNC (html_on_url), mail_display);
}

View File

@ -1350,107 +1350,14 @@ static char *
try_inline_pgp (char *start, CamelMimePart *mime_part,
guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream)
{
CamelMimePart *part;
CamelMultipart *multipart;
char *end;
end = strstr (start, "\n-----END PGP MESSAGE-----\n");
if (!end)
return start;
end += sizeof ("\n-----END PGP MESSAGE-----\n") - 1;
multipart = camel_multipart_new ();
camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (multipart),
"multipart/encrypted; "
"protocol=\"application/pgp-encrypted\"; "
"x-inline-pgp-hack=true");
part = fake_mime_part_from_data ("Version: 1\n",
sizeof ("Version: 1\n") - 1,
"application/pgp-encrypted",
offset + 1, md);
camel_multipart_add_part (multipart, part);
camel_object_unref (CAMEL_OBJECT (part));
part = fake_mime_part_from_data (start, end - start + 1,
"application/octet-stream",
offset, md);
camel_multipart_add_part (multipart, part);
camel_object_unref (CAMEL_OBJECT (part));
part = camel_mime_part_new ();
camel_medium_set_content_object (CAMEL_MEDIUM (part),
CAMEL_DATA_WRAPPER (multipart));
camel_object_hook_event (CAMEL_OBJECT (md->current_message),
"finalize", destroy_part, part);
write_hr (html, stream);
format_mime_part (part, md, html, stream);
return end;
return start;
}
static char *
try_inline_pgp_sig (char *start, CamelMimePart *mime_part,
guint offset, MailDisplay *md, GtkHTML *html, GtkHTMLStream *stream)
{
CamelMimePart *part;
CamelMultipart *multipart;
char *msg_start, *msg_end, *sig_start, *sig_end;
CamelContentType *type;
char *type_str;
/* We know start points to "-----BEGIN PGP SIGNED MESSAGE-----\n" */
msg_start = start + sizeof ("-----BEGIN PGP SIGNED MESSAGE-----\n") - 1;
/* Skip 'One or more "Hash" Armor Headers' followed by
* 'Exactly one empty line'.
*/
msg_start = strstr (msg_start, "\n\n");
if (!msg_start)
return start;
msg_start += 2;
msg_end = strstr (msg_start, "\n-----BEGIN PGP SIGNATURE-----\n");
if (!msg_end)
return start;
sig_start = msg_end;
sig_end = strstr (sig_start, "\n-----END PGP SIGNATURE-----\n");
if (!sig_end)
return start;
sig_end += sizeof ("\n-----END PGP SIGNATURE-----\n") - 1;
multipart = camel_multipart_new ();
camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (multipart),
"multipart/signed; micalg=pgp-sha1;"
"x-inline-pgp-hack=true");
type = camel_mime_part_get_content_type (mime_part);
type_str = header_content_type_format (type);
part = fake_mime_part_from_data (msg_start, msg_end - msg_start,
type_str, offset, md);
g_free (type_str);
camel_multipart_add_part (multipart, part);
camel_object_unref (CAMEL_OBJECT (part));
part = fake_mime_part_from_data (sig_start, sig_end - sig_start,
"application/pgp-signature",
offset + 1, md);
camel_multipart_add_part (multipart, part);
camel_object_unref (CAMEL_OBJECT (part));
part = camel_mime_part_new ();
camel_medium_set_content_object (CAMEL_MEDIUM (part),
CAMEL_DATA_WRAPPER (multipart));
camel_object_hook_event (CAMEL_OBJECT (md->current_message),
"finalize", destroy_part, part);
write_hr (html, stream);
format_mime_part (part, md, html, stream);
return sig_end;
return start;
}
static char *