IMAP: Fix fetch responses (closes #2940) (credits to @markstos)
This commit is contained in:
@@ -309,6 +309,20 @@ impl<'x> DecodedParts<'x> {
|
||||
DecodedPartContent::Binary(binary) => binary.as_ref(),
|
||||
})
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn transfer_decoded_contents(
|
||||
&self,
|
||||
message_id: usize,
|
||||
part: &ArchivedMessageMetadataPart,
|
||||
) -> Option<Cow<'_, [u8]>> {
|
||||
match self.raw_messages.get(message_id)? {
|
||||
DecodedRawMessage::Borrowed(chain) => Some(part.contents(chain)),
|
||||
DecodedRawMessage::Owned(vec) => Some(Cow::Owned(
|
||||
part.contents(&ChainedBytes::new(vec)).into_owned(),
|
||||
)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl DecodedPartContent<'_> {
|
||||
|
||||
@@ -1077,12 +1077,12 @@ impl AsImapDataItem for ArchivedMessageMetadata {
|
||||
let part_offset = u32::from(part.offset_header) as usize;
|
||||
Ok(match &part.body {
|
||||
ArchivedMetadataPartType::Text | ArchivedMetadataPartType::Html => {
|
||||
BodyContents::Text(String::from_utf8_lossy(get_partial_bytes(
|
||||
BodyContents::Bytes(get_cow_partial_bytes(
|
||||
decoded
|
||||
.binary_part(message_id, part_offset)
|
||||
.transfer_decoded_contents(message_id, part)
|
||||
.unwrap_or_default(),
|
||||
partial,
|
||||
)))
|
||||
))
|
||||
.into()
|
||||
}
|
||||
ArchivedMetadataPartType::Binary | ArchivedMetadataPartType::InlineBinary => {
|
||||
@@ -1152,10 +1152,11 @@ impl AsImapDataItem for ArchivedMessageMetadata {
|
||||
}
|
||||
|
||||
match &part.body {
|
||||
ArchivedMetadataPartType::Text
|
||||
| ArchivedMetadataPartType::Html
|
||||
| ArchivedMetadataPartType::Binary
|
||||
| ArchivedMetadataPartType::InlineBinary => decoded
|
||||
ArchivedMetadataPartType::Text | ArchivedMetadataPartType::Html => decoded
|
||||
.transfer_decoded_contents(message_id, part)
|
||||
.map(|p| p.len())
|
||||
.unwrap_or_default(),
|
||||
ArchivedMetadataPartType::Binary | ArchivedMetadataPartType::InlineBinary => decoded
|
||||
.part(message_id, u32::from(part.offset_header) as usize)
|
||||
.map(|p| p.len())
|
||||
.unwrap_or_default(),
|
||||
|
||||
Reference in New Issue
Block a user