Skip to content

Commit 49d445f

Browse files
committed
allow to configure column separator, rename options
1 parent 8418502 commit 49d445f

File tree

5 files changed

+30
-18
lines changed

5 files changed

+30
-18
lines changed

src/CommandLineTool/Commands/ClientOptionsCommand.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ public override Task OnExecuteAsync(CancellationToken ct)
3333
var allValues = accessor.GetAllValues().ToList();
3434

3535
console.WriteLine("Single value:");
36-
WriteOptions(allValues.Where(v => v.isMultiValue == false));
36+
WriteOptions(allValues.Where(v => !v.isMultiValue));
3737
console.WriteLine();
3838
console.WriteLine("Multiple values:");
39-
WriteOptions(allValues.Where(v => v.isMultiValue == true));
39+
WriteOptions(allValues.Where(v => v.isMultiValue));
4040

4141
return Task.CompletedTask;
4242
}
@@ -55,17 +55,22 @@ public override Task OnExecuteAsync(CancellationToken ct)
5555
return Task.CompletedTask;
5656
}
5757

58-
writer.WriteRow(accessor.GetValues(Name));
58+
writer.WriteRow(accessor.GetValues(Name).Select(Quote).ToList());
5959
return Task.CompletedTask;
6060
}
6161

6262
private void WriteOptions(IEnumerable<(string name, bool isMultiValue, List<string> values)> allValues)
6363
{
6464
var rows = allValues
6565
.OrderBy(a => a.name)
66-
.Select(a => (string[]) [" " + a.name, ..a.values])
66+
.Select(a => (string[]) [" " + a.name, ..a.values.Select(Quote)])
6767
.ToList();
6868

6969
writer.WriteTable(rows);
7070
}
71+
72+
private static string Quote(string s)
73+
{
74+
return s.Length > 0 && char.IsWhiteSpace(s[0]) || char.IsWhiteSpace(s[^1]) ? $"\"{s}\"" : s;
75+
}
7176
}

src/CommandLineTool/Commands/ListCommand.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ public class ListCommand(IClientProvider clientProvider, ISettingsStorage storag
3030
public bool IndicesFrom0 { get; set; }
3131

3232
[Option(T.Separator, Description = D.Separator)]
33-
public string Separator { get; set; } = " | ";
33+
public string? Separator { get; set; }
3434

3535
public string[]? RemainingArguments { get; set; }
3636

3737
public override async Task OnExecuteAsync(CancellationToken ct)
3838
{
3939
await base.OnExecuteAsync(ct);
4040

41-
var columns = Columns.GetOrDefault(storage.Settings.ListFormat);
41+
var columns = Columns.GetOrDefault(storage.Settings.ListColumns);
4242
var playlist = await Client.GetPlaylist(Playlist, IndicesFrom0, ct);
4343
var itemRange = new PlaylistItemRange(0, 100);
4444

@@ -63,7 +63,7 @@ public override async Task OnExecuteAsync(CancellationToken ct)
6363
writer.WriteTable(rows, new TableWriteOptions
6464
{
6565
RightAlign = [ShowIndices],
66-
Separator = Separator
66+
Separator = Separator.GetOrDefault(storage.Settings.ColumnSeparator)
6767
});
6868
}
6969
}

src/CommandLineTool/Commands/QueueCommand.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ public class QueueCommand(IClientProvider clientProvider, ISettingsStorage stora
2929
public bool IndicesFrom0 { get; set; }
3030

3131
[Option(T.Separator, Description = D.Separator)]
32-
public string Separator { get; set; } = " | ";
32+
public string? Separator { get; set; }
3333

3434
public override async Task OnExecuteAsync(CancellationToken ct)
3535
{
3636
await base.OnExecuteAsync(ct);
3737

38-
var columns = Columns.GetOrDefault(storage.Settings.PlayQueueFormat);
38+
var columns = Columns.GetOrDefault(storage.Settings.PlayQueueColumns);
3939
var queue = await Client.GetPlayQueue(columns, ct);
4040
var baseIndex = IndicesFrom0 ? 0 : 1;
4141
var data = queue.Select(q => GetItemColumns(q, baseIndex));
@@ -47,7 +47,7 @@ public override async Task OnExecuteAsync(CancellationToken ct)
4747
writer.WriteTable(rows, new TableWriteOptions
4848
{
4949
RightAlign = [ShowIndices],
50-
Separator = Separator
50+
Separator = Separator.GetOrDefault(storage.Settings.ColumnSeparator)
5151
});
5252
}
5353

src/CommandLineTool/Services/Settings.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ public sealed class Settings
99

1010
public string? DefaultServer { get; set; }
1111

12+
public string ColumnSeparator { get; set; } = "";
13+
1214
public string NowPlayingFormat { get; set; } = "";
1315

1416
public string StatusFormat { get; set; } = "";
1517

16-
public List<string> ListFormat { get; set; } = new();
18+
public List<string> ListColumns { get; set; } = new();
1719

18-
public List<string> PlayQueueFormat { get; set; } = new();
20+
public List<string> PlayQueueColumns { get; set; } = new();
1921

2022
public bool IsDefaultServer(string name) => string.Equals(name, DefaultServer, StringComparison.OrdinalIgnoreCase);
2123

@@ -28,10 +30,11 @@ public static Settings CreateDefault()
2830
{
2931
{ Constants.LocalServerName, new Uri(Constants.LocalServerUrl) }
3032
},
33+
ColumnSeparator = " | ",
3134
NowPlayingFormat = "%artist% - %title%",
3235
StatusFormat = "%artist% - %title%",
33-
ListFormat = ["%artist%", "%album%", "%title%"],
34-
PlayQueueFormat = ["%artist%", "%album%", "%title%"],
36+
ListColumns = ["%artist%", "%album%", "%title%"],
37+
PlayQueueColumns = ["%artist%", "%album%", "%title%"],
3538
};
3639
}
3740
}

src/CommandLineTool/Services/SettingsAccessor.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ static SettingsAccessor()
6161
{
6262
var accessors = new Dictionary<string, AccessorEntry>(StringComparer.OrdinalIgnoreCase)
6363
{
64+
{
65+
nameof(Settings.ColumnSeparator),
66+
(false, s => [s.ColumnSeparator], (s, v) => s.ColumnSeparator = v.First())
67+
},
6468
{
6569
nameof(Settings.NowPlayingFormat),
6670
(false, s => [s.NowPlayingFormat], (s, v) => s.NowPlayingFormat = v.First())
@@ -70,12 +74,12 @@ static SettingsAccessor()
7074
(false, s => [s.StatusFormat], (s, v) => s.StatusFormat = v.First())
7175
},
7276
{
73-
nameof(Settings.ListFormat),
74-
(true, s => s.ListFormat, (s, v) => s.ListFormat = v.ToList())
77+
nameof(Settings.ListColumns),
78+
(true, s => s.ListColumns, (s, v) => s.ListColumns = v.ToList())
7579
},
7680
{
77-
nameof(Settings.PlayQueueFormat),
78-
(true, s => s.PlayQueueFormat, (s, v) => s.PlayQueueFormat = v.ToList())
81+
nameof(Settings.PlayQueueColumns),
82+
(true, s => s.PlayQueueColumns, (s, v) => s.PlayQueueColumns = v.ToList())
7983
},
8084
};
8185

0 commit comments

Comments
 (0)