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:
committed by
Jeffrey Stedfast
parent
969ffa703d
commit
37f1f773e2
@ -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):
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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 *
|
||||
|
||||
Reference in New Issue
Block a user