mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-28 05:34:11 +01:00
notmuch/emacs: Observe the charset of text/html parts, where known.
Add the charset of text/html parts to the JSON output of 'notmuch -show' when it is known. Observe the encoding when rendering such parts in emacs.
This commit is contained in:
parent
e40c01bb14
commit
647c250989
2 changed files with 25 additions and 6 deletions
|
@ -328,7 +328,8 @@ message at DEPTH in the current thread."
|
||||||
current buffer, if possible."
|
current buffer, if possible."
|
||||||
(let ((display-buffer (current-buffer)))
|
(let ((display-buffer (current-buffer)))
|
||||||
(with-temp-buffer
|
(with-temp-buffer
|
||||||
(let ((handle (mm-make-handle (current-buffer) (list content-type))))
|
(let* ((charset (plist-get part :content-charset))
|
||||||
|
(handle (mm-make-handle (current-buffer) `(,content-type (charset . ,charset)))))
|
||||||
(if (and (mm-inlinable-p handle)
|
(if (and (mm-inlinable-p handle)
|
||||||
(mm-inlined-p handle))
|
(mm-inlined-p handle))
|
||||||
(let ((content (notmuch-show-get-bodypart-content msg part nth)))
|
(let ((content (notmuch-show-get-bodypart-content msg part nth)))
|
||||||
|
|
|
@ -675,13 +675,31 @@ format_part_content_json (GMimeObject *part)
|
||||||
printf (", \"filename\": %s", json_quote_str (ctx, filename));
|
printf (", \"filename\": %s", json_quote_str (ctx, filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_mime_content_type_is_type (content_type, "text", "*") &&
|
if (g_mime_content_type_is_type (content_type, "text", "*"))
|
||||||
!g_mime_content_type_is_type (content_type, "text", "html"))
|
|
||||||
{
|
{
|
||||||
show_text_part_content (part, stream_memory);
|
/* For non-HTML text/* parts, we include the content in the
|
||||||
part_content = g_mime_stream_mem_get_byte_array (GMIME_STREAM_MEM (stream_memory));
|
* JSON. Since JSON must be Unicode, we handle charset
|
||||||
|
* decoding here and do not report a charset to the caller.
|
||||||
|
* For text/html parts, we do not include the content. If a
|
||||||
|
* caller is interested in text/html parts, it should retrieve
|
||||||
|
* them separately and they will not be decoded. Since this
|
||||||
|
* makes charset decoding the responsibility on the caller, we
|
||||||
|
* report the charset for text/html parts.
|
||||||
|
*/
|
||||||
|
if (g_mime_content_type_is_type (content_type, "text", "html"))
|
||||||
|
{
|
||||||
|
const char *content_charset = g_mime_object_get_content_type_parameter (GMIME_OBJECT (part), "charset");
|
||||||
|
|
||||||
printf (", \"content\": %s", json_quote_chararray (ctx, (char *) part_content->data, part_content->len));
|
if (content_charset != NULL)
|
||||||
|
printf (", \"content-charset\": %s", json_quote_str (ctx, content_charset));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
show_text_part_content (part, stream_memory);
|
||||||
|
part_content = g_mime_stream_mem_get_byte_array (GMIME_STREAM_MEM (stream_memory));
|
||||||
|
|
||||||
|
printf (", \"content\": %s", json_quote_chararray (ctx, (char *) part_content->data, part_content->len));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (g_mime_content_type_is_type (content_type, "multipart", "*"))
|
else if (g_mime_content_type_is_type (content_type, "multipart", "*"))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue