Skip to content

Commit cc5fee4

Browse files
committed
refactoring
1 parent a40114f commit cc5fee4

File tree

3 files changed

+42
-64
lines changed

3 files changed

+42
-64
lines changed

src/PainKiller.PowerCommands/Core/PainKiller.PowerCommands.Core/Services/ConsoleTableService.cs

Lines changed: 38 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,59 @@
11
using PainKiller.PowerCommands.Shared.Utils.DisplayTable;
22

3-
43
namespace PainKiller.PowerCommands.Core.Services;
54
public static class ConsoleTableService
65
{
76
private static readonly Dictionary<string, IEnumerable<IColumnRender>> TableColumnRenderDefinitions = new();
8-
97
public static void RenderTable<T>(IEnumerable<T> items, IConsoleWriter consoleWriter) where T : new()
108
{
11-
var tableITems = items.ToArray();
12-
if (!tableITems.Any()) return;
9+
var tableItems = items.ToArray();
10+
if (!tableItems.Any()) return;
1311
var rows = ConsoleTable
14-
.From<T>(tableITems)
12+
.From<T>(tableItems)
1513
.Configure(o => o.NumberAlignment = Alignment.Right)
1614
.Read(WriteFormat.Alternative).Split("\r\n");
17-
18-
for (var rowIndex = 0; rowIndex < rows.Length; rowIndex++)
19-
{
20-
var row = rows[rowIndex];
21-
if (rowIndex < 3)
22-
{
23-
consoleWriter.WriteHeadLine(row);
24-
continue;
25-
}
26-
consoleWriter.WriteLine(row);
27-
}
15+
RenderConsoleTable(rows, consoleWriter);
2816
}
29-
3017
public static void RenderConsoleCommandTable<T>(IEnumerable<T> items, IConsoleWriter consoleWriter) where T : class, IConsoleCommandTable, new()
3118
{
32-
var tableITems = items.ToArray();
33-
if(!tableITems.Any()) return;
19+
var tableItems = items.ToArray();
20+
if (!tableItems.Any()) return;
3421
if (typeof(T).GetInterface(nameof(IConsoleCommandTable)) != null)
3522
{
36-
var consoleCommandTable = tableITems.First();
37-
RenderTable(tableITems, consoleCommandTable.GetColumnRenderOptionsAttribute().ToArray(), consoleWriter);
23+
var consoleCommandTable = tableItems.First();
24+
RenderTable(tableItems, consoleCommandTable.GetColumnRenderOptionsAttribute().ToArray(), consoleWriter);
3825
return;
3926
}
4027
var rows = ConsoleTable
41-
.From<T>(tableITems)
28+
.From<T>(tableItems)
4229
.Configure(o => o.NumberAlignment = Alignment.Right)
4330
.Read(WriteFormat.Alternative).Split("\r\n");
44-
31+
RenderConsoleTable(rows, consoleWriter);
32+
}
33+
private static void RenderConsoleTable(string[] rows, IConsoleWriter consoleWriter)
34+
{
4535
for (var rowIndex = 0; rowIndex < rows.Length; rowIndex++)
4636
{
37+
if(rowIndex % 2 == 0) continue;
4738
var row = rows[rowIndex];
39+
row = row.Replace("+-", "").Replace("-+", "").Replace(" |", "").Replace("| ", "");
4840
if (rowIndex < 3)
4941
{
50-
consoleWriter.WriteHeadLine(row);
42+
var foregroundColor = Console.ForegroundColor;
43+
var color = Console.BackgroundColor;
44+
Console.BackgroundColor = ConsoleColor.White;
45+
Console.ForegroundColor = ConsoleColor.Blue;
46+
consoleWriter.Write(row);
47+
Console.BackgroundColor = color;
48+
Console.ForegroundColor = foregroundColor;
49+
Console.WriteLine();
5150
continue;
5251
}
53-
consoleWriter.WriteLine(row);
52+
var color2 = Console.BackgroundColor;
53+
Console.BackgroundColor = ConsoleColor.DarkCyan;
54+
consoleWriter.Write(row);
55+
Console.BackgroundColor = color2;
56+
Console.WriteLine();
5457
}
5558
}
5659
public static void AddTableColumnRenderDefinitions(string name, IEnumerable<IColumnRender> columnRenderDefinitions)
@@ -73,7 +76,7 @@ private static void RenderTable<T>(IEnumerable<T> tableData, ColumnRenderOptions
7376

7477
for (var index = 0; index < rows.Length; index++)
7578
{
76-
if(index<3) continue;
79+
if (index < 3) continue;
7780
var row = rows[index];
7881
if (row.StartsWith("+-"))
7982
{
@@ -94,43 +97,18 @@ private static void RenderTable<T>(IEnumerable<T> tableData, ColumnRenderOptions
9497
}
9598
}
9699
}
97-
private static void WriteHeaderRow(string row, ColumnRenderOptionsAttribute[] columnRenderDefinitions, IConsoleWriter consoleWriter)
98-
{
99-
var cols = row.Split('|');
100-
var render = new ColumnRenderHeader(consoleWriter);
101-
for (var colIndex = 0; colIndex < cols.Length; colIndex++)
102-
{
103-
if (colIndex == cols.Length - 1)
104-
{
105-
consoleWriter.WriteLine("");
106-
break;
107-
}
108-
render.Write(cols[colIndex]);
109-
}
110-
}
111100
private static IEnumerable<IColumnRender> GetColumnRenders<T>(IEnumerable<ColumnRenderOptionsAttribute> columnRenderDefinitions, IConsoleWriter consoleWriter)
112101
{
113-
var renderCol = new List<IColumnRender>();
114-
foreach (var optionsAttribute in columnRenderDefinitions.OrderBy(c => c.Order))
115-
{
116-
IColumnRender render;
117-
switch (optionsAttribute.RenderFormat)
102+
var renderCol = columnRenderDefinitions.OrderBy(c => c.Order)
103+
.Select(optionsAttribute => optionsAttribute.RenderFormat switch
118104
{
119-
case ColumnRenderFormat.None:
120-
render = new ColumnRenderBase(consoleWriter);
121-
break;
122-
case ColumnRenderFormat.Standard:
123-
render = new ColumnRenderStandard(consoleWriter);
124-
break;
125-
case ColumnRenderFormat.SucessOrFailure:
126-
render = new ColumnRenderSuccsessOrFailure(consoleWriter, optionsAttribute.Trigger1, optionsAttribute.Trigger2, optionsAttribute.Mark);
127-
break;
128-
default:
129-
throw new ArgumentOutOfRangeException();
130-
}
131-
renderCol.Add(render);
132-
}
133-
renderCol.Insert(0,new ColumnRenderStandard(consoleWriter));
105+
ColumnRenderFormat.None => new ColumnRenderBase(consoleWriter),
106+
ColumnRenderFormat.Standard => new ColumnRenderStandard(consoleWriter),
107+
ColumnRenderFormat.SucessOrFailure => new ColumnRenderSuccsessOrFailure(consoleWriter, optionsAttribute.Trigger1, optionsAttribute.Trigger2, optionsAttribute.Mark), _ => throw new ArgumentOutOfRangeException()
108+
})
109+
.Cast<IColumnRender>()
110+
.ToList();
111+
renderCol.Insert(0, new ColumnRenderStandard(consoleWriter));
134112
renderCol.Add(new ColumnRenderBase(consoleWriter));
135113
AddTableColumnRenderDefinitions(typeof(T).Name, renderCol);
136114
return renderCol;

src/PainKiller.PowerCommands/Core/PainKiller.PowerCommands.Core/Services/ShellService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public void OpenDirectory(string directory)
1818
if (!Directory.Exists(path)) return;
1919
Process.Start(new ProcessStartInfo { FileName = path, UseShellExecute = true, Verb = "open" });
2020
}
21-
public void OpenWithDefaultProgram(string uri)
21+
public void OpenWithDefaultProgram(string uri, string workingDirectory = "")
2222
{
23-
_logger.LogInformation($"{nameof(ShellService)} {nameof(OpenDirectory)} {uri}");
24-
Process.Start(new ProcessStartInfo {FileName = uri, UseShellExecute = true, Verb = "open" });
23+
_logger.LogInformation($"{workingDirectory} {nameof(ShellService)} {nameof(OpenDirectory)} {uri}");
24+
Process.Start(new ProcessStartInfo { FileName = uri, WorkingDirectory = workingDirectory, UseShellExecute = true, Verb = "open" });
2525
}
2626
public void Execute(string programName, string arguments, string workingDirectory, Action<string> writeFunction, string fileExtension = "exe", bool waitForExit = false, bool useShellExecute = false, bool disableOutputLogging = false)
2727
{

src/PainKiller.PowerCommands/Core/PainKiller.PowerCommands.Shared/Contracts/IShellService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ public interface IShellService
44
{
55
void Execute(string programName, string arguments, string workingDirectory, string fileExtension = "exe", bool waitForExit = false, bool useShellExecute = false, bool disableOutputLogging = false);
66
void OpenDirectory(string directory);
7-
void OpenWithDefaultProgram(string uri);
7+
void OpenWithDefaultProgram(string uri, string workingDirectory = "");
88
void Execute(string programName, string arguments, string workingDirectory, Action<string> writeFunction, string fileExtension = "exe", bool waitForExit = false, bool useShellExecute = false, bool disableOutputLogging = false);
99
}

0 commit comments

Comments
 (0)