Ejemplo n.º 1
0
        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));
        }