Skip to content

Commit

Permalink
Add ability to recover patterns when some of the values are missing
Browse files Browse the repository at this point in the history
  • Loading branch information
Piotrekol committed Apr 29, 2018
1 parent 6143abf commit 3b7c5eb
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 10 deletions.
16 changes: 15 additions & 1 deletion osu!StreamCompanion/Code/Core/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class Settings
private readonly Dictionary<string, object> _settingsEntries = new Dictionary<string, object>();
private ILogger _logger;
private readonly List<string> _rawLines = new List<string>();
private readonly List<string> _backupRawLines = new List<string>();
public EventHandler<SettingUpdated> SettingUpdated;
private string saveLocation;
private readonly string configFileName = "settings.ini";
Expand Down Expand Up @@ -55,6 +56,17 @@ public void Add<T>(string key, List<T> valueList, bool raiseUpdate = false)
}
}

public string GetRaw(string key, string defaultValue="")
{
int idx = _backupRawLines.AnyStartsWith(key);
if (idx > -1)
{
string[] splited = _backupRawLines[idx].Split(new[] { '=' }, 2);
return splited[1].Trim();
}
return defaultValue;

}
public List<string> Get(string key)
{
lock (_lockingObject)
Expand Down Expand Up @@ -157,7 +169,9 @@ public void Load()
{
while (!fileHandle.EndOfStream)
{
_rawLines.Add(fileHandle.ReadLine());
string line = fileHandle.ReadLine();
_rawLines.Add(line);
_backupRawLines.Add(line);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,30 @@ private void Load()
List<int> saveEvents = _settings.Geti(_names.saveEvents.Name);
if (filenames.Count != patterns.Count || filenames.Count != saveEvents.Count)
{
string _filenames = _settings.Get<string>(_names.PatternFileNames);
string _patterns = _settings.Get<string>(_names.Patterns);
string _saveEvents = _settings.Get<string>(_names.saveEvents);
_logger?.Log("Your patterns seem to be broken, reseting. {0} {1} {2} \n{3}\n{4}\n{5}", LogLevel.Error,
string _filenames = _settings.GetRaw(_names.PatternFileNames.Name);
string _patterns = _settings.GetRaw(_names.Patterns.Name);
string _saveEvents = _settings.GetRaw(_names.saveEvents.Name);
_logger?.Log("User patterns are broken: {0} {1} {2} \n{3}\n{4}\n{5}", LogLevel.Error,
filenames.Count.ToString(), patterns.Count.ToString(), saveEvents.Count.ToString(),
_filenames, _patterns, _saveEvents);
return;
var userResponse = MessageBox.Show("Your output patterns are broken and could not be loaded successfully" + Environment.NewLine +
"I can load them with missing data or just reset to default patterns." + Environment.NewLine +
"Do you want to try to load them?"
, "osu!StreamCompanion - User action required!", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
if (userResponse == DialogResult.No)
return;

var requiredCount = Math.Max(filenames.Count, Math.Max(patterns.Count, saveEvents.Count));
var toFixCount = requiredCount * 3 - (filenames.Count + patterns.Count + saveEvents.Count);
while (filenames.Count < requiredCount)
filenames.Add(ParserSettings.GenerateFileName(filenames, "Recovered_"));
while (patterns.Count < requiredCount)
patterns.Add("Recovered");
while (saveEvents.Count < requiredCount)
saveEvents.Add((int)OsuStatus.All);
MessageBox.Show("Finished recovering patterns" + Environment.NewLine +
toFixCount + " entrys were missing" + Environment.NewLine +
"Go to settings and check your patterns!!!", "osu!StreamCompanion - Done", MessageBoxButtons.OK);
}
lock (_lockingObject)
{
Expand All @@ -167,7 +184,7 @@ private void Load()
saveEvents[i] = (int)OsuStatus.All;
if (filenames[i].EndsWith(".txt"))
filenames[i] = filenames[i].Substring(0, filenames[i].LastIndexOf(".txt", StringComparison.Ordinal));

_patterns.Add(new OutputPattern()
{
Name = filenames[i],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,19 @@ private void CheckBox_disableDiskSaving_CheckedChanged(object sender, EventArgs
_settings.Add(_names.DisableDiskPatternWrite.Name, checkBox_disableDiskSaving.Checked);
}

private void AddPattern(object sender, EventArgs eventArgs)
public static string GenerateFileName(IList<string> currentFileNames, string baseName = "name_")
{
var baseName = "name_";
string name;
int i = 0;
do
{
name = baseName + i++;
} while (_patterns.Any(p => p.Name == name));
} while (currentFileNames.Any(fileName => fileName == name));
return name;
}
private void AddPattern(object sender, EventArgs eventArgs)
{
var name = GenerateFileName(_patterns.Select(p => p.Name).ToList());
_patterns.Add(new OutputPattern()
{
Name = name
Expand Down

0 comments on commit 3b7c5eb

Please sign in to comment.