internal Stream ConvertWriteStreamFormat(Stream stream, Charset writeStreamCharset) { if (this.internalFormat == (InternalBodyFormat)this.format && (writeStreamCharset == null || this.charset == writeStreamCharset)) { return(stream); } Charset charset = writeStreamCharset ?? this.charset; TextConverter converter; if (this.internalFormat == InternalBodyFormat.RtfCompressed) { stream = new ConverterStream(stream, new RtfToRtfCompressed(), ConverterStreamAccess.Write); if (BodyFormat.Rtf == this.format) { return(stream); } converter = new TextToRtf { InputEncoding = charset.GetEncoding() }; } else if (this.internalFormat == InternalBodyFormat.Enriched) { converter = new HtmlToEnriched { InputEncoding = charset.GetEncoding(), OutputEncoding = this.Encoding }; } else if (this.internalFormat == InternalBodyFormat.Html) { converter = new HtmlToHtml { InputEncoding = charset.GetEncoding(), OutputEncoding = this.Encoding }; } else { converter = new TextToText { InputEncoding = charset.GetEncoding(), OutputEncoding = this.Encoding }; } return(new ConverterStream(stream, converter, ConverterStreamAccess.Write)); }
public override Stream OpenReadStream(long start, long end) { base.ThrowIfDisposed(); BodyFormatConversionStorage.BodyFormatConversion conversion = BodyFormatConversionStorage.GetConversion(this.originalFormat, this.targetFormat); TextConverter converter = null; Encoding inputEncoding = null; if (this.originalCharset != null) { inputEncoding = this.originalCharset.GetEncoding(); } Encoding outputEncoding = null; if (this.targetCharset != null) { outputEncoding = this.targetCharset.GetEncoding(); } Stream stream = this.originalStorage.OpenReadStream(this.originalStart, this.originalEnd); switch (conversion) { case BodyFormatConversionStorage.BodyFormatConversion.HtmlToText: converter = new HtmlToText { InputEncoding = inputEncoding, OutputEncoding = outputEncoding }; break; case BodyFormatConversionStorage.BodyFormatConversion.HtmlToEnriched: converter = new HtmlToEnriched { InputEncoding = inputEncoding, OutputEncoding = outputEncoding }; break; case BodyFormatConversionStorage.BodyFormatConversion.RtfCompressedToText: stream = new ConverterStream(stream, new RtfCompressedToRtf(), ConverterStreamAccess.Read); converter = new RtfToText { OutputEncoding = outputEncoding }; break; case BodyFormatConversionStorage.BodyFormatConversion.TextToText: converter = new TextToText { InputEncoding = inputEncoding, OutputEncoding = outputEncoding }; break; case BodyFormatConversionStorage.BodyFormatConversion.HtmlToHtml: converter = new HtmlToHtml { InputEncoding = inputEncoding, OutputEncoding = outputEncoding }; break; case BodyFormatConversionStorage.BodyFormatConversion.EnrichedToText: converter = new EnrichedToText { InputEncoding = inputEncoding, OutputEncoding = outputEncoding }; break; } return(new ConverterStream(stream, converter, ConverterStreamAccess.Read)); }