private void SaveTrackerProcessesToStorage() { var list = new List <QuestItem>(); foreach (var tracker in availableTrackers) { var item = new QuestItem { Id = tracker.Id, Type = tracker.Type, Name = tracker.Name, IsTracking = tracker.IsTracking }; DateTime dT; questsStartTracking.TryGetValue(tracker.Id, out dT); item.TrackingStart = dT; item.ProcessStorageString = tracker.SerializeData(); list.Add(item); } QuestFS.SaveQuests(list.ToArray()); }
private void RegisterAllTrackers() { Assembly.GetExecutingAssembly() .GetTypes() .ToList() .Where(t => t.Namespace == "Grabacr07.KanColleViewer.Plugins.Trackers") .ToList() .ForEach(i => availableTrackers.Add((ITracker)Activator.CreateInstance(i))); availableTrackers = new ObservableCollection <ITracker>(availableTrackers.OrderBy(i => i.Id)); // read storage info for all trackers var storage = QuestFS.GetQuests(); availableTrackers.ToList().ForEach(tracker => { if (!storage.Any(qi => qi.Id == tracker.Id)) { return; } var questItem = storage.Where(qi => qi.Id == tracker.Id).First(); // if the tracking is still available, restore the pervious process. if (IsTrackingAvailable(questItem.Type, questItem.TrackingStart)) { questsStartTracking.Add(questItem.Id, questItem.TrackingStart); tracker.IsTracking = questItem.IsTracking; tracker.DeserializeData(questItem.ProcessStorageString); } }); OnEventProcessChanged(new EventArgs()); }