Ejemplo n.º 1
0
 public ImageSource CreateImageSource(LibraryHierarchyNode libraryHierarchyNode, int width, int height, bool cache)
 {
     try
     {
         var id = this.GetImageId(libraryHierarchyNode, width, height);
         if (cache)
         {
             var fileName = default(string);
             if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
             {
                 return(this.ImageLoader.Load(fileName, 0, 0, true));
             }
         }
         using (KeyLock.Lock(id))
         {
             if (cache)
             {
                 var fileName = default(string);
                 if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
                 {
                     return(this.ImageLoader.Load(fileName, 0, 0, true));
                 }
             }
             return(this.CreateImageSourceCore(libraryHierarchyNode, width, height, cache));
         }
     }
     catch (Exception e)
     {
         Logger.Write(this, LogLevel.Error, "Error creating image source: {0}", e.Message);
         return(null);
     }
 }
Ejemplo n.º 2
0
        private async Task <string> ImportImage(string fileName, string id, bool overwrite)
        {
            if (FileMetaDataStore.Contains(fileName))
            {
                return(fileName);
            }
            var prefix = this.GetType().Name;
            var result = default(string);

            if (overwrite || !FileMetaDataStore.Exists(prefix, id, out result))
            {
#if NET40
                Semaphore.Wait();
#else
                await Semaphore.WaitAsync().ConfigureAwait(false);
#endif
                try
                {
                    if (overwrite || !FileMetaDataStore.Exists(prefix, id, out result))
                    {
                        return(await FileMetaDataStore.WriteAsync(prefix, id, fileName).ConfigureAwait(false));
                    }
                }
                finally
                {
                    Semaphore.Release();
                }
            }
            return(result);
        }
Ejemplo n.º 3
0
        protected virtual string Resize(string id, Func <Image> factory, int width, int height)
        {
            var fileName = default(string);

            if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
            {
                return(fileName);
            }
            //TODO: Setting throwOnTimeout = false so we ignore synchronization timeout.
            //TODO: I think there exists a deadlock bug in KeyLock but I haven't been able to prove it.
            using (KeyLock.Lock(id, TIMEOUT, false))
            {
                if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
                {
                    return(fileName);
                }
                using (var image = new Bitmap(width, height))
                {
                    using (var graphics = Graphics.FromImage(image))
                    {
                        graphics.SmoothingMode     = SmoothingMode.HighQuality;
                        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        graphics.PixelOffsetMode   = PixelOffsetMode.HighQuality;
                        this.Resize(graphics, factory, width, height);
                    }
                    using (var stream = new MemoryStream())
                    {
                        image.Save(stream, ImageFormat.Png);
                        stream.Seek(0, SeekOrigin.Begin);
                        return(FileMetaDataStore.Write(PREFIX, id, stream));
                    }
                }
            }
        }
Ejemplo n.º 4
0
        protected virtual string Resize(string id, Func <Image> factory, int width, int height)
        {
            var fileName = default(string);

            if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
            {
                return(fileName);
            }
            using (KeyLock.Lock(id))
            {
                if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
                {
                    return(fileName);
                }
                using (var image = new Bitmap(width, height))
                {
                    using (var graphics = Graphics.FromImage(image))
                    {
                        graphics.SmoothingMode     = SmoothingMode.HighQuality;
                        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        graphics.PixelOffsetMode   = PixelOffsetMode.HighQuality;
                        this.Resize(graphics, factory, width, height);
                    }
                    using (var stream = new MemoryStream())
                    {
                        image.Save(stream, ImageFormat.Png);
                        stream.Seek(0, SeekOrigin.Begin);
                        return(FileMetaDataStore.Write(PREFIX, id, stream));
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public ImageSource CreateImageSource(LibraryHierarchyNode libraryHierarchyNode, int width, int height)
        {
            var id       = this.GetImageId(libraryHierarchyNode, width, height);
            var fileName = default(string);

            if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
            {
                return(this.ImageLoader.Load(id, fileName, 0, 0, true));
            }
            //TODO: Setting throwOnTimeout = false so we ignore synchronization timeout.
            //TODO: I think there exists a deadlock bug in KeyLock but I haven't been able to prove it.
            using (KeyLock.Lock(id, TIMEOUT, false))
            {
                if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
                {
                    return(this.ImageLoader.Load(id, fileName, 0, 0, true));
                }
                return(this.CreateImageSourceCore(libraryHierarchyNode, width, height));
            }
        }
Ejemplo n.º 6
0
        public WaveFormGenerator.WaveFormGeneratorData GetOrCreate(IOutputStream stream, int resolution, Func <WaveFormGenerator.WaveFormGeneratorData> factory)
        {
            var key = new Key(stream.FileName, stream.Length, resolution);

            return(this.Store.GetOrAdd(key, () =>
            {
                if (this.Enabled.Value)
                {
                    var id = this.GetDataId(stream, resolution);
                    var fileName = default(string);
                    if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
                    {
                        var data = default(WaveFormGenerator.WaveFormGeneratorData);
                        if (this.TryLoad(fileName, out data))
                        {
                            return data;
                        }
                    }
                }
                return factory();
            }));
        }
 public ImageSource CreateImageSource(LibraryHierarchyNode libraryHierarchyNode, int width, int height, bool cache)
 {
     var id = this.GetImageId(libraryHierarchyNode, width, height);
     if (cache)
     {
         var fileName = default(string);
         if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
         {
             return this.ImageLoader.Load(fileName, 0, 0, true);
         }
     }
     using (KeyLock.Lock(id))
     {
         if (cache)
         {
             var fileName = default(string);
             if (FileMetaDataStore.Exists(PREFIX, id, out fileName))
             {
                 return this.ImageLoader.Load(fileName, 0, 0, true);
             }
         }
         return this.CreateImageSourceCore(libraryHierarchyNode, width, height, cache);
     }
 }