コード例 #1
0
        public DeserializationContext Deserialize(SerializedMonitor data)
        {
            DeserializationContext context = new DeserializationContext();

            if (MinTiffFileSize != data.Monitor.MinTiffFileSize)
            {
                Trace.TraceWarning("Min tiff size does not match restored information.  Using current setting ({0:F2} MB).", MinTiffFileSize);
            }

            WhenCached = data.WhenCached;

            List<int> validIndices = new List<int>();

            foreach (var day in data.Monitor.Days.Where(s => s != null).OrderBy(x => x.Index))
            {
                var fullPath = Path.Combine(this.Location, day.RelativePath);

                if (!UserOptions.Default.VerifyDeserializationPaths || Directory.Exists(fullPath))
                {
                    TileDay tileDay = CreateOrGetDay(fullPath);
                    validIndices.Add(tileDay.Index);
                }
                else
                {
                    Trace.TraceWarning("Failed to find existing directory for cached tileDay location {0}.", fullPath);
                }
            }

            foreach (var dayIndex in validIndices)
            {
                foreach (Tile tile in data.TileMap[dayIndex])
                {
                    tile.ExpectedChannelCount = ExpectedChannelCount;
                    tile.MinTiffFileSize = MinTiffFileSize;
                    tile.IsEvaluated = true;
                }

                var dayData = this.Days[dayIndex].Deserialize(data.TileMap[dayIndex]);

                context.CompleteCount += dayData.Item1;
                context.Incomplete.AddRange(dayData.Item2);

                foreach (Tile tile in data.TileMap[dayIndex])
                {
                    foreach (ImageContent c in tile.Contents.ImageContents)
                    {
                        if (c.Exists)
                        {
                            if (Double.IsNaN(c.Luminance))
                            {
                                context.QueueImage(Path.Combine(tile.FullPath, String.Format("{0:D5}-ngc.{1}.tif", tile.Id, c.Channel)), tile, c.Channel);
                            }

                            if (c.FrameCount > 0)
                            {
                                context.ConsiderImplicitFrameData(c.FileSize, c.FrameCount);
                            }
                        }
                    }
                }
            }

            return context;
        }