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