// marked internal for testing (perhaps we should use reflection to test) internal void LoadFastLoadData() { FastLoadData data = null; try { using (var stream = ProtectedFileStream.OpenSharedReader(FastLoadFile)) { data = Serializer.Deserialize <object>(stream) as FastLoadData; } } catch (Exception e) { Logger.ReportException("Failed to load fast load data: ", e); } if (data != null && data.Items != null) { lock (dictionary) { foreach (var item in data.Items) { if (!dictionary.ContainsKey(item.Guid)) { dictionary[item.Guid] = new DatedObject() { FileDate = DateTime.MinValue, Data = item.Data }; } } } Logger.ReportInfo("Successfully loaded fastload data for : " + path + " " + typeof(T).ToString()); } }
public void Validate() { var loadedData = new Dictionary <Guid, T>(); var directory = Kernel.Instance.GetLocation <IFolderMediaLocation>(path); List <Guid> validChildren = new List <Guid>(); foreach (var item in directory.Children.OrderBy(key => key.DateModified).Reverse()) { if (item is IFolderMediaLocation) { continue; } if (item.Path == FastLoadFile) { continue; } var guid = GetGuid(item.Path); DatedObject data; if (guid != null) { lock (dictionary) { if (dictionary.TryGetValue(guid.Value, out data)) { if (data.FileDate == item.DateModified) { validChildren.Add(guid.Value); continue; } } } } T obj = LoadFile(item.Path); if (obj != null) { SetInternalData(guid.Value, obj, item.DateModified); validChildren.Add(guid.Value); } } lock (dictionary) { foreach (var key in dictionary.Keys.Except(validChildren).ToArray()) { dictionary.Remove(key); } } // Save the fastload file FastLoadData fastLoadData; lock (dictionary) { fastLoadData = new FastLoadData() { Items = dictionary.Select(pair => new IdentifiableData() { Guid = pair.Key, Data = pair.Value.Data }) .ToList() }; } using (var stream = ProtectedFileStream.OpenExclusiveWriter(FastLoadFile)) { Serializer.Serialize <object>(stream, fastLoadData); } Logger.ReportInfo("Finished validating : " + path + " " + typeof(T).ToString()); }