Skip to content

Commit 7f3670f

Browse files
committed
[SIDE-1007] Add Whisper List Message to Client
1 parent 592a3a0 commit 7f3670f

File tree

67 files changed

+414
-267
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+414
-267
lines changed

ldk/csharp/OliveHelpsLDK/OliveHelpsLDK/Whispers/IWhisperFormBuilder.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ public interface IWhisperFormBuilder
66
{
77
WhisperFormRequest BuildRequest(WhisperForm formRequest, Proto.Session session);
88
WhisperMeta BuildMeta(WhisperConfig config);
9+
10+
WhisperListRequest BuildRequest(WhisperList list, Proto.Session session);
911
}
1012
}

ldk/csharp/OliveHelpsLDK/OliveHelpsLDK/Whispers/IWhisperService.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ public interface IWhisperService
1010
{
1111
Task MarkdownAsync(WhisperMarkdown message, CancellationToken cancellationToken = default);
1212
Task<bool> ConfirmAsync(WhisperConfirm message, CancellationToken cancellationToken = default);
13-
IStreamingCall<IWhisperFormResponse> FormAsync(WhisperForm message, CancellationToken cancellationToken = default);
13+
14+
IStreamingCall<IWhisperFormResponse> FormAsync(WhisperForm message,
15+
CancellationToken cancellationToken = default);
16+
17+
Task ListAsync(WhisperList message, CancellationToken cancellationToken = default);
1418
}
1519

1620
public struct WhisperConfig
@@ -41,4 +45,10 @@ public struct WhisperForm
4145
public string CancelLabel;
4246
public IDictionary<string, IBase> Inputs;
4347
}
48+
49+
public struct WhisperList
50+
{
51+
public WhisperConfig Config;
52+
public IDictionary<string, List.ListBase> Elements;
53+
}
4454
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
namespace OliveHelpsLDK.Whispers.List
2+
{
3+
public abstract class ListBase
4+
{
5+
public uint Order { get; }
6+
public bool Extra { get; }
7+
}
8+
9+
public enum Style
10+
{
11+
None,
12+
Success,
13+
Warn,
14+
Error
15+
}
16+
17+
public enum Align
18+
{
19+
Left,
20+
Center,
21+
Right
22+
}
23+
24+
public class ListPair : ListBase
25+
{
26+
public string Label { get; }
27+
public string Value { get; }
28+
public Style Style { get; }
29+
public bool Copyable { get; }
30+
}
31+
32+
public class ListMessage : ListBase
33+
{
34+
public string Header { get; }
35+
public string Body { get; }
36+
public Style Style { get; }
37+
public Align Align { get; }
38+
}
39+
40+
public class ListDivider : ListBase
41+
{
42+
public Style Style { get; }
43+
}
44+
}

ldk/csharp/OliveHelpsLDK/OliveHelpsLDK/Whispers/WhisperClient.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public WhisperClient(Whisper.WhisperClient client, Session session, ILogger logg
2222

2323
public WhisperClient(ChannelBase channel, Session session, ILogger logger,
2424
IWhisperFormBuilder formBuilder = null,
25-
IWhisperFormParser parser = null) : base(new Whisper.WhisperClient(channel), session, logger, "whisper")
25+
IWhisperFormParser parser = null) : this(new Whisper.WhisperClient(channel), session, logger)
2626
{
2727
Parser = parser ?? new WhisperFormParser();
2828
Builder = formBuilder ?? new WhisperFormBuilder();
@@ -66,5 +66,12 @@ public IStreamingCall<IWhisperFormResponse> FormAsync(WhisperForm message,
6666
LoggedParser<WhisperFormStreamResponse, IWhisperFormResponse>(response =>
6767
Parser.ParseResponse(response)));
6868
}
69+
70+
public Task ListAsync(WhisperList message, CancellationToken cancellationToken = default)
71+
{
72+
var request = Builder.BuildRequest(message, CreateSession());
73+
var call = Client.WhisperListAsync(request, CreateOptions(cancellationToken));
74+
return call.ResponseAsync;
75+
}
6976
}
7077
}

ldk/csharp/OliveHelpsLDK/OliveHelpsLDK/Whispers/WhisperFormBuilder.cs

Lines changed: 88 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using OliveHelpsLDK.Whispers.Forms.Inputs;
5+
using OliveHelpsLDK.Whispers.List;
56
using Proto;
67

78
namespace OliveHelpsLDK.Whispers
@@ -22,6 +23,26 @@ public WhisperFormRequest BuildRequest(WhisperForm formRequest, Proto.Session se
2223
return request;
2324
}
2425

26+
public WhisperListRequest BuildRequest(WhisperList list, Proto.Session session)
27+
{
28+
var request = new WhisperListRequest
29+
{
30+
Meta = BuildMeta(list.Config),
31+
Session = session
32+
};
33+
BuildInputs(request.Elements, list.Elements);
34+
return request;
35+
}
36+
37+
public WhisperMeta BuildMeta(WhisperConfig config)
38+
{
39+
return new WhisperMeta
40+
{
41+
Icon = config.Icon ?? "announcement",
42+
Label = config.Label ?? "Whisper",
43+
};
44+
}
45+
2546
private void BuildInputs(IDictionary<string, WhisperFormInput> inputs,
2647
IDictionary<string, IBase> formRequestInputs)
2748
{
@@ -70,12 +91,75 @@ private WhisperFormInput BuildInput(IBase input)
7091
return formInput;
7192
}
7293

73-
public WhisperMeta BuildMeta(WhisperConfig config)
94+
private void BuildInputs(IDictionary<string, WhisperListElement> messageElements,
95+
IDictionary<string, ListBase> items)
7496
{
75-
return new WhisperMeta
97+
items.ToList().ForEach(input => messageElements.Add(input.Key, BuildInput(input.Value)));
98+
}
99+
100+
private WhisperListElement BuildInput(ListBase element)
101+
{
102+
var listElement = new WhisperListElement
76103
{
77-
Icon = config.Icon ?? "announcement",
78-
Label = config.Label ?? "Whisper",
104+
Order = element.Order,
105+
Extra = element.Extra,
106+
};
107+
switch (element)
108+
{
109+
case ListDivider listDivider:
110+
var divider = new WhisperListElement.Types.Divider
111+
{
112+
Style = ToProto(listDivider.Style)
113+
};
114+
listElement.Divider = divider;
115+
break;
116+
case ListMessage listMessage:
117+
var message = new WhisperListElement.Types.Message
118+
{
119+
Align = ToProto(listMessage.Align),
120+
Body = listMessage.Body,
121+
Header = listMessage.Body,
122+
Style = ToProto(listMessage.Style)
123+
};
124+
listElement.Message = message;
125+
break;
126+
case ListPair listPair:
127+
var pair = new WhisperListElement.Types.Pair
128+
{
129+
Copyable = listPair.Copyable,
130+
Label = listPair.Label,
131+
Style = ToProto(listPair.Style),
132+
Value = listPair.Value,
133+
};
134+
listElement.Pair = pair;
135+
break;
136+
default:
137+
throw new ArgumentOutOfRangeException(nameof(element));
138+
}
139+
140+
return listElement;
141+
}
142+
143+
private WhisperListElement.Types.Style ToProto(Style style)
144+
{
145+
return style switch
146+
{
147+
Style.None => WhisperListElement.Types.Style.None,
148+
Style.Success => WhisperListElement.Types.Style.Success,
149+
Style.Warn => WhisperListElement.Types.Style.Warn,
150+
Style.Error => WhisperListElement.Types.Style.Error,
151+
_ => throw new ArgumentOutOfRangeException(nameof(style), style, null)
152+
};
153+
}
154+
155+
private WhisperListElement.Types.Align ToProto(Align align)
156+
{
157+
return align switch
158+
{
159+
Align.Left => WhisperListElement.Types.Align.Left,
160+
Align.Center => WhisperListElement.Types.Align.Center,
161+
Align.Right => WhisperListElement.Types.Align.Right,
162+
_ => throw new ArgumentOutOfRangeException(nameof(align), align, null)
79163
};
80164
}
81165
}

ldk/node/docs/classes/logger.html

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ldk/node/docs/classes/networkclient.html

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ldk/node/docs/classes/plugin.html

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)