public bool HandleResult( IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response )
        {
            response.AddHeader("Accept-Ranges", "bytes");

            Range range;
            if ( !TryGetRequestedRange( request, out range ) )
            {
                return false;
            }

            if (!ValidateIfRangeHeader(request, result))
            {
                return false;
            }

            var offset = range.Start ?? 0;
            var end = range.End.HasValue ? range.End.Value : result.ContentLength - 1;
            var length = end - offset + 1;

            response.AddHeader( "Content-Range", "bytes " + offset + "-" + end + "/" + result.ContentLength );
            response.StatusCode = 206;

            result.Serve( response, offset, length );
            return true;
        }
Пример #2
0
 private string GetCacheFileName(string cacheKey, IFormatInfo outputFormat)
 {
     var inputBytes = Encoding.UTF8.GetBytes(cacheKey);
     var hash = MD5.Create().ComputeHash(inputBytes);
     var relativeUrl = new Guid(hash).ToString().Replace('-', '\\') + outputFormat.Extension;
     return Path.Combine(m_cacheRoot.FullName, relativeUrl);
 }
        public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
        {
            response.AddHeader("Accept-Ranges", "bytes");

            Range range;

            if (!TryGetRequestedRange(request, out range))
            {
                return(false);
            }

            if (!ValidateIfRangeHeader(request, result))
            {
                return(false);
            }

            var offset = range.Start ?? 0;
            var end    = range.End.HasValue ? range.End.Value : result.ContentLength - 1;
            var length = end - offset + 1;

            response.AddHeader("Content-Range", "bytes " + offset + "-" + end + "/" + result.ContentLength);
            response.StatusCode = 206;

            result.Serve(response, offset, length);
            return(true);
        }
        public bool TryGetContentType(IFormatInfo originalFormat, HttpRequestBase request, IFormatInfoProvider formatInfoProvider, out IFormatInfo transformedFormat, out BitmapEncoder encoder)
        {
            var format = request.QueryString["format"];
            if (string.IsNullOrEmpty(format))
            {
                format = originalFormat.Extension.Substring(1);
            }

            switch (format.ToLower())
            {
                case "jpg":
                    int quality;
                    if (!int.TryParse(request.QueryString["quality"], out quality) || quality <= 0 || quality > 100)
                    {
                        quality = 80;
                    }

                    transformedFormat = formatInfoProvider.ResolveFromExtension(".jpg");
                    encoder = new JpegBitmapEncoder { QualityLevel = quality };
                    return transformedFormat != null;

                case "png":
                    transformedFormat = formatInfoProvider.ResolveFromExtension(".png");
                    encoder = new PngBitmapEncoder();
                    return transformedFormat != null;

                default:
                    transformedFormat = null;
                    encoder = null;
                    return false;
            }
        }
        private bool TryGetResult(HttpRequestBase request, IFormatInfo outputFormat, bool transformMedia, IMediaTransformer mediaTransformer, out IResult result)
        {
            var path         = GetRequestPath(request);
            var originalPath = GetOriginalPath(request, mediaTransformer);

            if (MediaCache.TryServeRequestFromCache(transformMedia ? path : originalPath, outputFormat, out result))
            {
                return(true);
            }

            IStorageFile storageFile;

            if (!StorageBackend.TryGetStorageFile(originalPath, out storageFile))
            {
                return(false);
            }

            if (!transformMedia && !CacheOriginals)
            {
                result = storageFile;
                return(true);
            }

            if (transformMedia)
            {
                result = TransformMedia(storageFile.GetStream(), outputFormat, path, mediaTransformer);
                return(true);
            }

            result = ServeOriginal(originalPath, storageFile, outputFormat);
            return(true);
        }
Пример #6
0
        public bool TryGetContentType(IFormatInfo originalFormat, HttpRequestBase request, IFormatInfoProvider formatInfoProvider, out IFormatInfo transformedFormat, out BitmapEncoder encoder)
        {
            var format = request.QueryString["format"];

            if (string.IsNullOrEmpty(format))
            {
                format = originalFormat.Extension.Substring(1);
            }

            switch (format.ToLower())
            {
            case "jpg":
                int quality;
                if (!int.TryParse(request.QueryString["quality"], out quality) || quality <= 0 || quality > 100)
                {
                    quality = 80;
                }

                transformedFormat = formatInfoProvider.ResolveFromExtension(".jpg");
                encoder           = new JpegBitmapEncoder {
                    QualityLevel = quality
                };
                return(transformedFormat != null);

            case "png":
                transformedFormat = formatInfoProvider.ResolveFromExtension(".png");
                encoder           = new PngBitmapEncoder();
                return(transformedFormat != null);

            default:
                transformedFormat = null;
                encoder           = null;
                return(false);
            }
        }
        public bool TryCreateTransformer(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IMediaTransformer mediaTransformer)
        {
            if (!CanHandleFormat(originalFormat))
            {
                mediaTransformer = null;
                return(false);
            }

            if (!IsValidFilePath(request.Url.AbsolutePath))
            {
                mediaTransformer = null;
                return(false);
            }

            IFormatInfo outputFormat;

            if (!TryGetOutputFormat(request, originalFormat, formatInfoProvider, out outputFormat))
            {
                mediaTransformer = null;
                return(false);
            }

            mediaTransformer = new MediaTransformer(outputFormat, this);
            return(true);
        }
Пример #8
0
 public StoredProcedureRtt(
     ProcedureInfo procedureInfo,
     IDiagnosticsCallback diagnosticsCallback,
     IFormatInfo formatInfo)
     : base(diagnosticsCallback, formatInfo)
 {
     Procedure = procedureInfo;
 }
Пример #9
0
 public static FormatInfoProxy Create(IFormatInfo formatInfo)
 {
     if (ReferenceEquals(formatInfo, null))
     {
         throw new ArgumentNullException(nameof(formatInfo));
     }
     return(formatInfo as FormatInfoProxy ?? new FormatInfoProxy(formatInfo));
 }
Пример #10
0
        private string GetCacheFileName(string cacheKey, IFormatInfo outputFormat)
        {
            var inputBytes  = Encoding.UTF8.GetBytes(cacheKey);
            var hash        = MD5.Create().ComputeHash(inputBytes);
            var relativeUrl = new Guid(hash).ToString().Replace('-', '\\') + outputFormat.Extension;

            return(Path.Combine(m_cacheRoot.FullName, relativeUrl));
        }
        public bool TryCreateTransformer(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IMediaTransformer mediaTransformer)
        {
            var compositeTransformer = new CompositeMediaTransformer();
            var factories = _transformerFactories.ToList();
            AddTransformerToComposite(request, originalFormat, compositeTransformer, factories, formatInfoProvider);

            mediaTransformer = compositeTransformer;
            return compositeTransformer.Count > 0;
        }
        public bool TryCreateTransformer(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IMediaTransformer mediaTransformer)
        {
            var compositeTransformer = new CompositeMediaTransformer();
            var factories            = _transformerFactories.ToList();

            AddTransformerToComposite(request, originalFormat, compositeTransformer, factories, formatInfoProvider);

            mediaTransformer = compositeTransformer;
            return(compositeTransformer.Count > 0);
        }
Пример #13
0
 public CmdBuilderFactoryRtt(
     IEnumerable <ProcedureInfo> procedures,
     IDiagnosticsCallback diagnosticsCallback,
     IFormatInfo formatInfo)
     : base(diagnosticsCallback, formatInfo)
 {
     procedures  = procedures ?? Enumerable.Empty <ProcedureInfo>();
     Procedures  = procedures.OrderBy(sp => sp.FullName, StringComparer.Ordinal).ToList();
     SpFullNames = Procedures.Select(sp => sp.FullName).ToList();
 }
Пример #14
0
        public readonly string SourceScript; // if null, it was from interactive
        internal ViewDefinitionInfo(IFormatInfo viewDef, string sourceScript)
        {
            if (null == viewDef)
            {
                throw new ArgumentNullException("viewDef");
            }

            ViewDefinition = viewDef;
            SourceScript   = sourceScript;
        }
Пример #15
0
 public UserDefinedTableTypeRtt(
     DataTable schema,
     IDiagnosticsCallback diagnosticsCallback,
     IFormatInfo formatInfo) : base(diagnosticsCallback, formatInfo)
 {
     if (ReferenceEquals(schema, null))
     {
         throw new ArgumentNullException(nameof(schema));
     }
     Schema = schema;
 }
        // TODO: -All parameter?

        protected override void ProcessRecord()
        {
            base.ProcessRecord();

            IFormatInfo fi = AltFormattingManager.ChooseFormatInfoForPSObject(ForObject,
                                                                              FormatInfoType);

            if (null != fi)
            {
                WriteObject(fi);
            }
        } // end ProcessRecord()
        protected override bool TryGetOutputFormat(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IFormatInfo outputFormat)
        {
            var format = request.QueryString["format"];
            if (string.Equals(format, "exif-xml", StringComparison.InvariantCultureIgnoreCase))
            {
                outputFormat = formatInfoProvider.ResolveFromExtension(".xml");
                return outputFormat != null;
            }

            outputFormat = null;
            return false;
        }
        } // end constructor

        /// <summary>
        ///    Not a true, complete comparison; just enough to handle the needs of dealing
        ///    with calculated properties.
        /// </summary>
        public bool LooksLikeExistingFromPropertyDefinition(IFormatInfo otherBase)
        {
            if (!(otherBase is AltTableViewDefinition other))
            {
                return(false);
            }

            if (m_columns.Length != other.m_columns.Length)
            {
                return(false);
            }

            for (int i = 0; i < m_columns.Length; i++)
            {
                if (m_columns[i] is PropertyColumn pc1)
                {
                    if (other.m_columns[i] is PropertyColumn pc2)
                    {
                        if (!pc1.LooksSimilar(pc2))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
                else if (m_columns[i] is ScriptColumn sc1)
                {
                    if (other.m_columns[i] is ScriptColumn sc2)
                    {
                        if (!sc1.LooksSimilar(sc2))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            // For the purposes of -Property stuff, we shouldn't need to care about other
            // stuff. If any of these fire... somebody is using this method that probably
            // shouldn't.
            Util.Assert(null == GroupBy);
            Util.Assert(null == ProduceGroupByHeader);

            return(true);
        } // end LooksLikeExistingFromPropertyDefinition()
Пример #19
0
        /// <summary>
        ///    Not a true, complete comparison; just enough to handle the needs of dealing
        ///    with calculated properties.
        /// </summary>
        public bool LooksLikeExistingFromPropertyDefinition(IFormatInfo otherBase)
        {
            if (!(otherBase is AltListViewDefinition other))
            {
                return(false);
            }

            if (ListItems.Count != other.ListItems.Count)
            {
                return(false);
            }

            for (int i = 0; i < ListItems.Count; i++)
            {
                if (ListItems[i] is PropertyListItem pli1)
                {
                    if (other.ListItems[i] is PropertyListItem pli2)
                    {
                        if (pli1 != pli2)
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
                else if (ListItems[i] is ScriptListItem sli1)
                {
                    if (other.ListItems[i] is ScriptListItem sli2)
                    {
                        if (!sli1.LooksSimilar(sli2))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            // For the purposes of -Property stuff, we shouldn't need to care about other
            // stuff. If any of these fire... somebody is using this method that probably
            // shouldn't.
            Util.Assert(null == GroupBy);
            Util.Assert(null == ProduceGroupByHeader);

            return(true);
        } // end LooksLikeExistingFromPropertyDefinition()
        protected override bool TryGetOutputFormat(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IFormatInfo outputFormat)
        {
            var format = request.QueryString["format"];

            if (string.Equals(format, "exif-json", StringComparison.InvariantCultureIgnoreCase))
            {
                outputFormat = formatInfoProvider.ResolveFromExtension(".json");
                return(outputFormat != null);
            }

            outputFormat = null;
            return(false);
        }
Пример #21
0
 protected RuntimeTextTemplate(IDiagnosticsCallback diagnosticsCallback, IFormatInfo formatInfo)
 {
     if (ReferenceEquals(diagnosticsCallback, null))
     {
         throw new ArgumentException(nameof(diagnosticsCallback));
     }
     if (ReferenceEquals(diagnosticsCallback, null))
     {
         throw new ArgumentException(nameof(formatInfo));
     }
     m_diagnosticsCallback = diagnosticsCallback;
     m_formatInfo          = formatInfo;
 }
        private IResult ServeOriginal(string path, IStorageFile storageFile, IFormatInfo outputFormat)
        {
            var stream = storageFile.GetStream();

            IAddToCacheResult cacheResult;

            if (MediaCache.TryAddToCache(path, stream, outputFormat, out cacheResult))
            {
                return(new CopyToOutputStreamResult(cacheResult.LastModified, cacheResult.ETag, storageFile.ContentLength, stream));
            }

            return(storageFile);
        }
 private static void AddTransformerToComposite(HttpRequestBase request, IFormatInfo originalFormat, CompositeMediaTransformer compositeTransformer, List <IMediaTransformerFactory> factories, IFormatInfoProvider formatInfoProvider)
 {
     foreach (var transformerFactory in factories)
     {
         IMediaTransformer transformer;
         if (transformerFactory.TryCreateTransformer(request, originalFormat, formatInfoProvider, out transformer))
         {
             compositeTransformer.AddMediaTransformer(transformer);
             factories.Remove(transformerFactory);
             AddTransformerToComposite(request, transformer.OutputFormat, compositeTransformer, factories, formatInfoProvider);
             return;
         }
     }
 }
 private static void AddTransformerToComposite(HttpRequestBase request, IFormatInfo originalFormat, CompositeMediaTransformer compositeTransformer, List<IMediaTransformerFactory> factories, IFormatInfoProvider formatInfoProvider)
 {
     foreach (var transformerFactory in factories)
     {
         IMediaTransformer transformer;
         if (transformerFactory.TryCreateTransformer(request, originalFormat, formatInfoProvider, out transformer))
         {
             compositeTransformer.AddMediaTransformer(transformer);
             factories.Remove(transformerFactory);
             AddTransformerToComposite( request, transformer.OutputFormat, compositeTransformer, factories, formatInfoProvider);
             return;
         }
     }
 }
        public bool TryServeRequestFromCache(string path, IFormatInfo outputFormat, out IResult result)
        {
            var cacheFile = GetCacheFileInfo(path, outputFormat);

            if (!cacheFile.Exists)
            {
                result = null;
                return false;
            }

            var etag = m_fileInfoETagCalculator.CalculateETag( cacheFile );
            result = new TransmitFileResult(cacheFile.LastWriteTime, etag, cacheFile.Length, cacheFile.FullName);
            return true;
        }
        public bool TryServeRequestFromCache(string path, IFormatInfo outputFormat, out IResult result)
        {
            var cacheFile = GetCacheFileInfo(path, outputFormat);

            if (!cacheFile.Exists)
            {
                result = null;
                return(false);
            }

            var etag = m_fileInfoETagCalculator.CalculateETag(cacheFile);

            result = new TransmitFileResult(cacheFile.LastWriteTime, etag, cacheFile.Length, cacheFile.FullName);
            return(true);
        }
Пример #27
0
        } // end _MarkPropertyHidden()

        /// <summary>
        ///    Sets an object-specific default view for a particular object (which will
        ///    override views registered by type name when selecting a default view). This
        ///    works by attaching a hidden property to the object.
        /// </summary>
        public static void SetDefaultFormatInfoForObject(PSObject pso, IFormatInfo formatInfo)
        {
            PSPropertyInfo pspi = pso.Properties[DefaultViewDefPropName];

            if (null != pspi)
            {
                // It already exists. We'll just change the value.
                pspi.Value = formatInfo;
            }
            else
            {
                // Need to tack it on.
                PSNoteProperty psnp = new PSNoteProperty(DefaultViewDefPropName, formatInfo);
                _MarkPropertyHidden(psnp);
                pso.Properties.Add(psnp);
            }
        } // end SetDefaultFormatInfoForObject()
        public bool TryAddToCache(string path, Stream stream, IFormatInfo outputFormat, out IAddToCacheResult result)
        {
            var cacheFile = GetCacheFileInfo(path, outputFormat);

            if (!cacheFile.Directory.Exists)
            {
                cacheFile.Directory.Create();
            }

            using (var fileStream = cacheFile.Create())
            {
                stream.CopyTo(fileStream);
            }

            var etag = m_fileInfoETagCalculator.CalculateETag( cacheFile );
            result = new AddToCacheResult(cacheFile.LastWriteTime, etag);
            return true;
        }
        private IResult TransformMedia(Stream original, IFormatInfo outputFormat, string path, IMediaTransformer mediaTransformer)
        {
            Stream stream;
            var    transformResult = mediaTransformer.TransformStream(original, out stream);

            original.Dispose();

            if (transformResult == MediaTransformResult.Success)
            {
                IAddToCacheResult cacheResult;
                if (MediaCache.TryAddToCache(path, stream, outputFormat, out cacheResult))
                {
                    return(new CopyToOutputStreamResult(cacheResult.LastModified, cacheResult.ETag, stream.Length, stream));
                }
            }

            return(new CopyToOutputStreamResult(null, null, stream.Length, stream));
        }
        public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
        {
            response.Cache.VaryByHeaders["Accept-Encoding"] = true;

            if (!outputFormat.AllowCompression)
            {
                return false;
            }

            ICompression compression;
            if (!TryGetCompressionFromRequest(request, out compression))
            {
                return false;
            }

            response.Filter = compression.Compress(response.Filter);
            response.AddHeader("Content-Encoding", compression.ContentEncoding);
            return false;
        }
        public bool TryAddToCache(string path, Stream stream, IFormatInfo outputFormat, out IAddToCacheResult result)
        {
            var cacheFile = GetCacheFileInfo(path, outputFormat);

            if (!cacheFile.Directory.Exists)
            {
                cacheFile.Directory.Create();
            }

            using (var fileStream = cacheFile.Create())
            {
                stream.CopyTo(fileStream);
            }

            var etag = m_fileInfoETagCalculator.CalculateETag(cacheFile);

            result = new AddToCacheResult(cacheFile.LastWriteTime, etag);
            return(true);
        }
        public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
        {
            response.Cache.VaryByHeaders["Accept-Encoding"] = true;

            if (!outputFormat.AllowCompression)
            {
                return(false);
            }

            ICompression compression;

            if (!TryGetCompressionFromRequest(request, out compression))
            {
                return(false);
            }

            response.Filter = compression.Compress(response.Filter);
            response.AddHeader("Content-Encoding", compression.ContentEncoding);
            return(false);
        }
Пример #33
0
 public RuntimeTextTemplateFactory(
     Projection.Projection projection,
     IDiagnosticsCallback diagnosticsCallback,
     IFormatInfo formatInfo)
 {
     if (ReferenceEquals(projection, null))
     {
         throw new ArgumentException(nameof(projection));
     }
     if (ReferenceEquals(diagnosticsCallback, null))
     {
         throw new ArgumentException(nameof(diagnosticsCallback));
     }
     if (ReferenceEquals(diagnosticsCallback, null))
     {
         throw new ArgumentException(nameof(formatInfo));
     }
     m_projection          = projection;
     m_diagnosticsCallback = diagnosticsCallback;
     m_formatInfo          = formatInfo;
 }
        public bool TryCreateTransformer(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IMediaTransformer mediaTransformer)
        {
            var transforms = GetBitmapTransforms(request.QueryString).ToArray();
            if (!transforms.Any())
            {
                mediaTransformer = null;
                return false;
            }

            IFormatInfo outputFormat;
            BitmapEncoder encoder;

            if (!TryGetContentType(originalFormat, request, formatInfoProvider, out outputFormat, out encoder))
            {
                mediaTransformer = null;
                return false;
            }

            mediaTransformer = new ImageMediaTransformer(transforms, encoder, outputFormat);
            return true;
        }
Пример #35
0
        public bool TryCreateTransformer(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IMediaTransformer mediaTransformer)
        {
            var transforms = GetBitmapTransforms(request.QueryString).ToArray();

            if (!transforms.Any())
            {
                mediaTransformer = null;
                return(false);
            }

            IFormatInfo   outputFormat;
            BitmapEncoder encoder;

            if (!TryGetContentType(originalFormat, request, formatInfoProvider, out outputFormat, out encoder))
            {
                mediaTransformer = null;
                return(false);
            }

            mediaTransformer = new ImageMediaTransformer(transforms, encoder, outputFormat);
            return(true);
        }
        public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
        {
            response.Cache.SetCacheability( HttpCacheability.Public );

            if ( outputFormat.ClientCacheMaxAge.HasValue )
            {
                response.Cache.SetNoServerCaching();
                response.Cache.SetExpires( DateTime.Now.Add( outputFormat.ClientCacheMaxAge.Value ) );
                response.Cache.SetMaxAge( outputFormat.ClientCacheMaxAge.Value );
            }

            if (result.LastModified.HasValue)
            {
                response.Cache.SetLastModified(result.LastModified.Value);
            }

            if (!string.IsNullOrEmpty(result.ETag))
            {
                response.Cache.SetETag( result.ETag );
            }

            return false;
        }
Пример #37
0
        public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
        {
            response.Cache.SetCacheability(HttpCacheability.Public);

            if (outputFormat.ClientCacheMaxAge.HasValue)
            {
                response.Cache.SetNoServerCaching();
                response.Cache.SetExpires(DateTime.Now.Add(outputFormat.ClientCacheMaxAge.Value));
                response.Cache.SetMaxAge(outputFormat.ClientCacheMaxAge.Value);
            }

            if (result.LastModified.HasValue)
            {
                response.Cache.SetLastModified(result.LastModified.Value);
            }

            if (!string.IsNullOrEmpty(result.ETag))
            {
                response.Cache.SetETag(result.ETag);
            }

            return(false);
        }
Пример #38
0
        public bool TryCreateTransformer(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IMediaTransformer mediaTransformer)
        {
            if (!CanHandleFormat(originalFormat))
            {
                mediaTransformer = null;
                return false;
            }

            if(!IsValidFilePath(request.Url.AbsolutePath))
            {
                mediaTransformer = null;
                return false;
            }

            IFormatInfo outputFormat;
            if( !TryGetOutputFormat(request, originalFormat, formatInfoProvider, out outputFormat) )
            {
                mediaTransformer = null;
                return false;
            }

            mediaTransformer = new MediaTransformer(outputFormat, this);
            return true;
        }
        public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
        {
            var ifNoneMatchHeader = request.Headers["If-None-Match"];
            var ifModifiedSinceHeader = request.Headers["If-Modified-Since"];

            if (string.IsNullOrEmpty(ifNoneMatchHeader) && string.IsNullOrEmpty(ifModifiedSinceHeader))
            {
                return false;
            }

            if (!ValidateETag(ifNoneMatchHeader, result))
            {
                return false;
            }

            if (!ValidateLastModifyDate(ifModifiedSinceHeader, result))
            {
                return false;
            }

            response.StatusCode = 304;
            response.SuppressContent = true;
            return true;
        }
        public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
        {
            var ifNoneMatchHeader     = request.Headers["If-None-Match"];
            var ifModifiedSinceHeader = request.Headers["If-Modified-Since"];

            if (string.IsNullOrEmpty(ifNoneMatchHeader) && string.IsNullOrEmpty(ifModifiedSinceHeader))
            {
                return(false);
            }

            if (!ValidateETag(ifNoneMatchHeader, result))
            {
                return(false);
            }

            if (!ValidateLastModifyDate(ifModifiedSinceHeader, result))
            {
                return(false);
            }

            response.StatusCode      = 304;
            response.SuppressContent = true;
            return(true);
        }
Пример #41
0
 public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
 {
     result.Serve(response);
     return true;
 }
        private IResult ServeOriginal( string path, IStorageFile storageFile, IFormatInfo outputFormat )
        {
            var stream = storageFile.GetStream();

            IAddToCacheResult cacheResult;
            if ( MediaCache.TryAddToCache( path, stream, outputFormat, out cacheResult ) )
            {
                return new CopyToOutputStreamResult( cacheResult.LastModified, cacheResult.ETag, storageFile.ContentLength, stream );
            }

            return storageFile;
        }
Пример #43
0
 public MediaTransformer(IFormatInfo outputFormat, TransformerFactoryBase transformerFactory)
 {
     _transformerFactory = transformerFactory;
     OutputFormat        = outputFormat;
 }
Пример #44
0
 protected abstract bool CanHandleFormat(IFormatInfo format);
 protected abstract FileInfo GetCacheFileInfo(string path, IFormatInfo outputFormat);
 public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
 {
     response.ContentType = outputFormat.ContentType;
     return false;
 }
Пример #47
0
 public bool TryAddToCache(string path, Stream stream, IFormatInfo outputFormat, out IAddToCacheResult result)
 {
     result = null;
     return false;
 }
Пример #48
0
 public ImageMediaTransformer( IEnumerable<Func<BitmapSource, BitmapSource>> bitmapTransformChain, BitmapEncoder encoder, IFormatInfo formatInfo )
 {
     _bitmapTransformChain = bitmapTransformChain;
     _encoder = encoder;
     OutputFormat = formatInfo;
 }
 protected override bool CanHandleFormat(IFormatInfo format)
 {
     return string.Equals(format.ContentType, "text/css", StringComparison.InvariantCultureIgnoreCase);
 }
Пример #50
0
 protected abstract bool CanHandleFormat(IFormatInfo format);
Пример #51
0
 protected virtual bool TryGetOutputFormat(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IFormatInfo outputFormat)
 {
     outputFormat = originalFormat;
     return true;
 }
Пример #52
0
 public bool HandleResult(IResult result, IFormatInfo outputFormat, HttpRequestBase request, HttpResponseBase response)
 {
     return _handlers.Any(handler => handler.HandleResult(result, outputFormat, request, response));
 }
Пример #53
0
 public MediaTransformer(IFormatInfo outputFormat, TransformerFactoryBase transformerFactory)
 {
     _transformerFactory = transformerFactory;
     OutputFormat = outputFormat;
 }
Пример #54
0
 public bool TryServeRequestFromCache(string path, IFormatInfo outputFormat, out IResult result)
 {
     result = null;
     return false;
 }
        private IResult TransformMedia( Stream original, IFormatInfo outputFormat, string path, IMediaTransformer mediaTransformer )
        {
            Stream stream;
            var transformResult = mediaTransformer.TransformStream( original, out stream );
            original.Dispose();

            if ( transformResult == MediaTransformResult.Success )
            {
                IAddToCacheResult cacheResult;
                if ( MediaCache.TryAddToCache( path, stream, outputFormat, out cacheResult ) )
                {
                    return new CopyToOutputStreamResult( cacheResult.LastModified, cacheResult.ETag, stream.Length, stream );
                }
            }

            return new CopyToOutputStreamResult( null, null, stream.Length, stream );
        }
Пример #56
0
 protected virtual bool TryGetOutputFormat(HttpRequestBase request, IFormatInfo originalFormat, IFormatInfoProvider formatInfoProvider, out IFormatInfo outputFormat)
 {
     outputFormat = originalFormat;
     return(true);
 }
 protected override bool CanHandleFormat(IFormatInfo format)
 {
     return string.Equals(format.Extension, ".jpg", StringComparison.InvariantCultureIgnoreCase);
 }
        private bool TryGetResult( HttpRequestBase request, IFormatInfo outputFormat, bool transformMedia, IMediaTransformer mediaTransformer, out IResult result )
        {
            var path = GetRequestPath( request );
            var originalPath = GetOriginalPath( request, mediaTransformer );

            if ( MediaCache.TryServeRequestFromCache( transformMedia ? path : originalPath, outputFormat, out result ) )
            {
                return true;
            }

            IStorageFile storageFile;
            if ( !StorageBackend.TryGetStorageFile( originalPath, out storageFile ) )
            {
                return false;
            }

            if ( !transformMedia && !CacheOriginals )
            {
                result = storageFile;
                return true;
            }

            if ( transformMedia )
            {
                result = TransformMedia( storageFile.GetStream(), outputFormat, path, mediaTransformer );
                return true;
            }

            result = ServeOriginal( originalPath, storageFile, outputFormat );
            return true;
        }
Пример #59
0
 protected override FileInfo GetCacheFileInfo(string path, IFormatInfo outputFormat)
 {
     return new FileInfo(GetCacheFileName(path, outputFormat));
 }