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; }