-
Notifications
You must be signed in to change notification settings - Fork 5
/
ActionManager.cs
80 lines (70 loc) · 2.69 KB
/
ActionManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using Fix.ConsoleHelpers;
using System.Collections.Generic;
using System.Linq;
namespace Fix.CommandFixers
{
public class ActionManager
{
private List<ICommandFixer> _fixActions = new();
public string LastCommand { get; private set; } = "";
public void AddFix(ICommandFixer fixAction)
{
_fixActions.Add(fixAction);
}
private string GetLastCommand(string[] lines)
{
var currentPath = ConsoleHelper.GetCurrentPath();
var lastCommandLine = lines.Where(x => x.StartsWith(currentPath + ConsoleHelper.CONSOLE_SEPARATOR))
.Reverse()
.Skip(1)
.FirstOrDefault();
if (lastCommandLine == null)
{
return "";
}
var index = lastCommandLine.IndexOf(ConsoleHelper.CONSOLE_SEPARATOR);
return lastCommandLine[(index + 1)..];
}
private string[] FilterLastCommand(string lastCommand, string[] lines)
{
var currentPath = ConsoleHelper.GetCurrentPath();
return lines.Reverse()
.Skip(1)
.TakeWhile(x => x != $"{currentPath}{ConsoleHelper.CONSOLE_SEPARATOR}{lastCommand}")
.Reverse()
.ToArray();
}
public CommandFix GetFix(string[] consoleBufferInLines)
{
LastCommand = GetLastCommand(consoleBufferInLines);
var lastCommandResult = FilterLastCommand(LastCommand, consoleBufferInLines);
LogBuffer(lastCommandResult);
foreach (var fix in _fixActions)
{
var fixResult = fix.Fix(LastCommand, lastCommandResult);
if (fixResult.IsFixed)
{
ConsoleHelper.Log($"Fixer {fix.GetType().Name} FIXED IT!");
return fixResult;
}
else
{
ConsoleHelper.Log($"Fixer {fix.GetType().Name} cannot fix it");
}
}
return new CommandFix(false, "", nameof(ActionManager));
}
private void LogBuffer(string[] consoleBufferInLines)
{
ConsoleHelper.Log("LastCommand:" + LastCommand);
ConsoleHelper.Log("---------------");
ConsoleHelper.Log("Buffer:");
ConsoleHelper.Log("---------------");
for (var i = 0; i < consoleBufferInLines.Length; i++)
{
ConsoleHelper.Log(consoleBufferInLines[i]);
}
ConsoleHelper.Log("---------------");
}
}
}