diff --git a/OpenBullet/ViewModels/RunnerManagerViewModel.cs b/OpenBullet/ViewModels/RunnerManagerViewModel.cs index 86fb73b..c0d199f 100644 --- a/OpenBullet/ViewModels/RunnerManagerViewModel.cs +++ b/OpenBullet/ViewModels/RunnerManagerViewModel.cs @@ -35,6 +35,8 @@ namespace OpenBullet.ViewModels public IRunner Create() { var instance = new RunnerInstance(rand.Next()); + instance.ViewModel.ConfigChanged += OnRunnerSessionChanged; + instance.ViewModel.WordlistChanged += OnRunnerSessionChanged; RunnersCollection.Add(instance); return instance.ViewModel; } @@ -54,6 +56,11 @@ namespace OpenBullet.ViewModels RunnersCollection.Clear(); } + public void OnRunnerSessionChanged(IRunnerMessaging obj) + { + SaveSession(); + } + public void SaveSession() { _repo.RemoveAll(); diff --git a/RuriLib/Runner/RunnerViewModel.cs b/RuriLib/Runner/RunnerViewModel.cs index 18f4a3a..f68e939 100644 --- a/RuriLib/Runner/RunnerViewModel.cs +++ b/RuriLib/Runner/RunnerViewModel.cs @@ -35,6 +35,7 @@ namespace RuriLib.Runner /// /// Main class that handles all the multi-threaded checking of a Wordlist given a Config. /// + // TODO: Split this into partial classes public class RunnerViewModel : ViewModelBase, IRunnerMessaging, IRunner { #region Constructor @@ -349,6 +350,7 @@ namespace RuriLib.Runner Config = config; if (setRecommended) BotsAmount = Clamp(config.Settings.SuggestedBots, 1, 200); OnPropertyChanged("ConfigName"); + RaiseConfigChanged(); } /// @@ -360,6 +362,7 @@ namespace RuriLib.Runner Wordlist = wordlist; OnPropertyChanged("WordlistName"); OnPropertyChanged("WordlistSize"); + RaiseWordlistChanged(); } #endregion @@ -1052,41 +1055,33 @@ namespace RuriLib.Runner #endregion #region Events - /// - /// Fired when a new message needs to be logged. - /// + /// Fired when a new message needs to be logged. public event Action MessageArrived; - /// - /// Fired when the Master Worker status changed. - /// + /// Fired when the Master Worker status changed. public event Action WorkerStatusChanged; - /// - /// Fired when a Hit was found. - /// + /// Fired when a Hit was found. public event Action FoundHit; - /// - /// Fired when proxies need to be reloaded. - /// + /// Fired when proxies need to be reloaded. public event Action ReloadProxies; - /// - /// Fired when an Action could change the UI and needs to be dispatched to another thread (usually it's handled by the UI thread). - /// + /// /// Fired when an Action could change the UI and needs to be dispatched to another thread (usually it's handled by the UI thread). public event Action DispatchAction; - /// - /// Fired when the progress record needs to be saved to the Database. - /// + /// Fired when the progress record needs to be saved to the Database. public event Action SaveProgress; - /// - /// Fired when custom inputs from the user are required. - /// + /// Fired when custom inputs from the user are required. public event Action AskCustomInputs; + /// Fired when the currently selected Config changed. + public event Action ConfigChanged; + + /// Fired when the currently selected Wordlist changed. + public event Action WordlistChanged; + private void RaiseMessageArrived(LogLevel level, string message, bool prompt = false, int timeout = 0) { MessageArrived?.Invoke(this, level, message, prompt, timeout); @@ -1122,6 +1117,16 @@ namespace RuriLib.Runner { AskCustomInputs?.Invoke(this); } + + private void RaiseConfigChanged() + { + ConfigChanged?.Invoke(this); + } + + private void RaiseWordlistChanged() + { + WordlistChanged?.Invoke(this); + } #endregion #region Proxy Management Methods