private void ParseCombatLog() { var filePicker = new OpenFileDialog { Filter = "Text files (*.txt)|*.txt", Multiselect = true }; if (filePicker.ShowDialog() == true) { var combats = new List<Combat>(); Mouse.OverrideCursor = Cursors.Wait; foreach (var filePath in filePicker.FileNames) { try { combats.AddRange(CombatLog.Load(filePath).Combats); } catch (Exception e) { MessageBox.Show($"Error parsing combat log: {e.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } Mouse.OverrideCursor = null; if (combats.Count == 0) { MessageBox.Show("File doesn't contain any combat.", "Parse combat log", MessageBoxButton.OK, MessageBoxImage.Information); return; } try { var sessions = combats.Where(c => c.Duration > 120 || c.Targets.Max(t => t.DamageDone > 1000000)).Select(c => c.ToSession(_profile.DefaultValues)).ToList(); if (sessions.Count == 0) { MessageBox.Show("File doesn't contain any suitable combat session (duration >= 120s and/or damage >= 1 000 000).", "Parse combat log", MessageBoxButton.OK, MessageBoxImage.Information); return; } HasUnsavedChanges = true; foreach (var session in sessions) { _profile.Sessions.Add(session); var sessionViewModel = new SessionViewModel(session, _profile.Configuration, _profile.DefaultValues); sessionViewModel.SessionUpdated += () => { ConfigurationViewModel.CorrectionViewModel.IsOutdated = true; UpdateDps(); }; SessionViewModels.Add(sessionViewModel); } if (ActiveSessionViewModel == null) ActiveSessionViewModel = SessionViewModels.FirstOrDefault(); } catch (Exception e) { MessageBox.Show($"Error parsing combat log: {e.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } }
private void LoadProfile(Profile profile) { if (profile == null) throw new Exception("Profile is null (most likely file is corrupted)."); _profile = profile; if (ConfigurationViewModel != null) { ConfigurationViewModel.ConfigurationUpdated -= OnConfigurationChanged; foreach (var sessionViewModel in SessionViewModels) sessionViewModel.SessionUpdated -= OnConfigurationChanged; } ConfigurationViewModel = new ConfigurationViewModel(profile.Configuration); ConfigurationViewModel.ConfigurationUpdated += OnConfigurationChanged; SessionViewModels.Clear(); foreach (var session in profile.Sessions) { var sessionViewModel = new SessionViewModel(session, profile.Configuration, profile.DefaultValues); sessionViewModel.SessionUpdated += OnConfigurationChanged; SessionViewModels.Add(sessionViewModel); } ActiveSessionViewModel = SessionViewModels.FirstOrDefault(s => s.Active) ?? SessionViewModels.First(); NewDps = new ValueCorrectionViewModel(ValueType.Double); HasUnsavedChanges = false; }