Skip to content
This repository was archived by the owner on Nov 25, 2023. It is now read-only.

Commit f43f45e

Browse files
authored
Merge pull request #97 from Invvard/fix/issue-96-loading-revision
Fix/issue 96 loading revision
2 parents 049e5da + 67f1f50 commit f43f45e

File tree

10 files changed

+698
-661
lines changed

10 files changed

+698
-661
lines changed

src/InvvardDev.EZLayoutDisplay.Desktop/Helper/EZLayoutMaker.cs

Lines changed: 34 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,22 @@ public EZLayoutMaker()
2222
_keyDefinitionDictionary = new KeyDefinitionDictionary();
2323
}
2424

25-
public EZLayout PrepareEZLayout(ErgodoxLayout ergodoxLayout)
25+
public EZLayout PrepareEZLayout(ErgodoxLayout ergodoxLayout, string layoutRevisionIds)
2626
{
2727
Logger.TraceMethod();
2828
Logger.DebugInputParam(nameof(ergodoxLayout), ergodoxLayout);
2929

30-
var ezLayout = new EZLayout {
31-
HashId = ergodoxLayout.HashId,
32-
Name = ergodoxLayout.Title
33-
};
30+
var ezLayout = new EZLayout { HashId = ergodoxLayout.HashId, Name = ergodoxLayout.Title };
3431

35-
foreach (var ergodoxLayer in ergodoxLayout.Revisions.First().Layers)
32+
var ergodoxLayers = ergodoxLayout.Revisions.FirstOrDefault(r => r.HashId == layoutRevisionIds)?.Layers ?? ergodoxLayout.Revisions.First().Layers;
33+
34+
if (ergodoxLayers?.Any() != null)
3635
{
37-
EZLayer ezLayer = PrepareEZLayer(ergodoxLayer);
38-
ezLayout.EZLayers.Add(ezLayer);
36+
foreach (var ergodoxLayer in ergodoxLayers)
37+
{
38+
var ezLayer = PrepareEZLayer(ergodoxLayer);
39+
ezLayout.EZLayers.Add(ezLayer);
40+
}
3941
}
4042

4143
Logger.DebugOutputParam(nameof(ezLayout), ezLayout);
@@ -48,15 +50,11 @@ private EZLayer PrepareEZLayer(ErgodoxLayer ergodoxLayer)
4850
Logger.TraceMethod();
4951
Logger.DebugInputParam(nameof(ergodoxLayer), ergodoxLayer);
5052

51-
var layer = new EZLayer {
52-
Index = ergodoxLayer.Position,
53-
Name = ergodoxLayer.Title,
54-
Color = GetColor(ergodoxLayer.Color)
55-
};
53+
var layer = new EZLayer { Index = ergodoxLayer.Position, Name = ergodoxLayer.Title, Color = GetColor(ergodoxLayer.Color) };
5654

5755
foreach (var ergodoxKey in ergodoxLayer.Keys)
5856
{
59-
EZKey key = PrepareKeyLabels(ergodoxKey, layer.Color);
57+
var key = PrepareKeyLabels(ergodoxKey, layer.Color);
6058

6159
layer.EZKeys.Add(key);
6260
}
@@ -71,7 +69,7 @@ private EZKey PrepareKeyLabels(ErgodoxKey ergodoxKey, string layerColor)
7169
Logger.TraceMethod();
7270
Logger.DebugInputParam(nameof(ergodoxKey), ergodoxKey);
7371

74-
KeyDefinition keyDefinition = GetKeyDefinition(ergodoxKey.Code);
72+
var keyDefinition = GetKeyDefinition(ergodoxKey.Code);
7573

7674
/** Every category has a label, so no need to make a special case :
7775
*
@@ -88,37 +86,32 @@ private EZKey PrepareKeyLabels(ErgodoxKey ergodoxKey, string layerColor)
8886
* KeyCategory.System
8987
*
9088
**/
91-
EZKey key = new EZKey {
92-
KeyCategory = keyDefinition.KeyCategory,
93-
Label = new KeyLabel(keyDefinition.Label, keyDefinition.IsGlyph),
94-
Color = GetColor(ergodoxKey.GlowColor, layerColor),
95-
DisplayType = KeyDisplayType.SimpleLabel
96-
};
89+
var key = new EZKey
90+
{
91+
KeyCategory = keyDefinition.KeyCategory,
92+
Label = new KeyLabel(keyDefinition.Label, keyDefinition.IsGlyph),
93+
Color = GetColor(ergodoxKey.GlowColor, layerColor),
94+
DisplayType = KeyDisplayType.SimpleLabel
95+
};
9796

9897
switch (keyDefinition.KeyCategory)
9998
{
10099
case KeyCategory.DualFunction:
101100

102101
if (AddCommandLabel(ergodoxKey, key))
103-
{
104102
key.DisplayType = KeyDisplayType.ModifierUnder;
105-
}
106103
else
107-
{
108104
key.KeyCategory = KeyCategory.Modifier;
109-
}
110105

111106
break;
112107
case KeyCategory.Layer:
113108
case KeyCategory.LayerShortcuts:
114109
key.Label.Content = string.Format(key.Label.Content, ergodoxKey.Layer.ToString());
115110

116-
if (AddCommandLabel(ergodoxKey, key))
117-
{
118-
key.DisplayType = KeyDisplayType.ModifierUnder;
119-
}
111+
if (AddCommandLabel(ergodoxKey, key)) key.DisplayType = KeyDisplayType.ModifierUnder;
120112

121113
break;
114+
122115
case KeyCategory.Modifier:
123116

124117
if (ergodoxKey.Code == KeyCodeOsm && !IsCommandEmpty(ergodoxKey.Command))
@@ -137,6 +130,7 @@ private EZKey PrepareKeyLabels(ErgodoxKey ergodoxKey, string layerColor)
137130
key.DisplayType = KeyDisplayType.SimpleLabel;
138131

139132
break;
133+
140134
case KeyCategory.Shortcuts:
141135

142136
if (!IsCommandEmpty(ergodoxKey.Command))
@@ -196,10 +190,10 @@ private KeyDefinition GetKeyDefinition(string ergodoxKeyCode)
196190
}
197191

198192
/// <summary>
199-
/// Apply the command label.
193+
/// Apply the command label.
200194
/// </summary>
201-
/// <param name="ergodoxKey">The <see cref="ErgodoxKey"/> containing the command to be applied.</param>
202-
/// <param name="key">The <see cref="EZKey"/> to apply the command to.</param>
195+
/// <param name="ergodoxKey">The <see cref="ErgodoxKey" /> containing the command to be applied.</param>
196+
/// <param name="key">The <see cref="EZKey" /> to apply the command to.</param>
203197
/// <returns><c>True</c> if command has been applied.</returns>
204198
private bool AddCommandLabel(ErgodoxKey ergodoxKey, EZKey key)
205199
{
@@ -229,45 +223,21 @@ private List<EZModifier> GetModifiersApplied(ErgodoxModifiers ergodoxModifiers)
229223
var keyModifiers = new KeyModifierDictionary();
230224
var mods = new List<EZModifier>();
231225

232-
if (ergodoxModifiers.LeftAlt)
233-
{
234-
mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.LeftAlt));
235-
}
226+
if (ergodoxModifiers.LeftAlt) mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.LeftAlt));
236227

237-
if (ergodoxModifiers.LeftCtrl)
238-
{
239-
mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.LeftCtrl));
240-
}
228+
if (ergodoxModifiers.LeftCtrl) mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.LeftCtrl));
241229

242-
if (ergodoxModifiers.LeftShift)
243-
{
244-
mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.LeftShift));
245-
}
230+
if (ergodoxModifiers.LeftShift) mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.LeftShift));
246231

247-
if (ergodoxModifiers.LeftWin)
248-
{
249-
mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.LeftWin));
250-
}
232+
if (ergodoxModifiers.LeftWin) mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.LeftWin));
251233

252-
if (ergodoxModifiers.RightAlt)
253-
{
254-
mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.RightAlt));
255-
}
234+
if (ergodoxModifiers.RightAlt) mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.RightAlt));
256235

257-
if (ergodoxModifiers.RightCtrl)
258-
{
259-
mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.RightCtrl));
260-
}
236+
if (ergodoxModifiers.RightCtrl) mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.RightCtrl));
261237

262-
if (ergodoxModifiers.RightShift)
263-
{
264-
mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.RightShift));
265-
}
238+
if (ergodoxModifiers.RightShift) mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.RightShift));
266239

267-
if (ergodoxModifiers.RightWin)
268-
{
269-
mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.RightWin));
270-
}
240+
if (ergodoxModifiers.RightWin) mods.Add(keyModifiers.EZModifiers.First(m => m.KeyModifier == KeyModifier.RightWin));
271241

272242
return mods.OrderBy(m => m.Index).ToList();
273243
}

src/InvvardDev.EZLayoutDisplay.Desktop/Model/Revision.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,18 @@ public class Revision
1111
[JsonProperty("hashId")]
1212
public string HashId { get; set; }
1313

14+
/// <summary>
15+
/// Gets or sets the keyboard revision comment.
16+
/// </summary>
17+
[JsonProperty("title")]
18+
public string Comment { get; set; }
19+
20+
/// <summary>
21+
/// Gets or sets the keyboard model.
22+
/// </summary>
23+
[JsonProperty("model")]
24+
public string Model { get; set; }
25+
1426
/// <summary>
1527
/// Gets or sets the keyboard layout HEX file URL.
1628
/// </summary>
@@ -23,12 +35,6 @@ public class Revision
2335
[JsonProperty("zipUrl")]
2436
public string SourcesUrl { get; set; }
2537

26-
/// <summary>
27-
/// Gets or sets the keyboard model.
28-
/// </summary>
29-
[JsonProperty("model")]
30-
public string Model { get; set; }
31-
3238
/// <summary>
3339
/// Gets or sets the list of <see cref="ErgodoxLayer"/>.
3440
/// </summary>

src/InvvardDev.EZLayoutDisplay.Desktop/Service/Design/LayoutService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public async Task<ErgodoxLayout> GetErgodoxLayout(string layoutHashId)
2727
}
2828

2929
/// <inheritdoc />
30-
public EZLayout PrepareEZLayout(ErgodoxLayout ergodoxLayout)
30+
public EZLayout PrepareEZLayout(ErgodoxLayout ergodoxLayout, string layoutRevisionIds)
3131
{
3232
Debug.WriteLine("Layout prepared");
3333

src/InvvardDev.EZLayoutDisplay.Desktop/Service/Implementation/LayoutService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ public class LayoutService : ILayoutService
1717
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
1818

1919
private readonly string GetLayoutBody =
20-
"{{\"operationName\":\"getLayout\",\"variables\":{{\"hashId\":\"{0}\"}},\"query\":\"query getLayout($hashId: String!) {{\\n Layout(hashId: $hashId) {{\\n ...LayoutData\\n }}\\n}}\\n\\nfragment LayoutData on Layout {{\\n hashId\\n title\\n revisions {{\\n hashId\\n model\\n layers {{\\n hashId\\n keys\\n position\\n title\\n color\\n }}\\n}}\\n}}\\n\"}}";
20+
"{{\"operationName\":\"getLayout\",\"variables\":{{\"hashId\":\"{0}\"}},\"query\":\"query getLayout($hashId: String!) {{\\n Layout(hashId: $hashId) {{\\n ...LayoutData\\n }}\\n}}\\n\\nfragment LayoutData on Layout {{\\n geometry\\n hashId\\n title\\n tags {{\\n id\\n hashId\\n name\\n }}\\n revisions {{\\n ...RevisionData\\n }}\\n}}\\n\\nfragment RevisionData on Revision {{\\n hashId\\n model\\n title\\n swatch\\n hexUrl\\n zipUrl\\n layers {{\\n hashId\\n keys\\n position\\n title\\n color\\n}}\\n}}\\n\"}}";
2121

2222
private readonly string GetLayoutInfoRequestBody =
23-
"{{\"operationName\":\"getLayout\",\"variables\":{{\"hashId\":\"{0}\"}},\"query\":\"query getLayout($hashId: String!) {{\\n Layout(hashId: $hashId) {{\\n ...LayoutData\\n __typename\\n }}\\n}}\\n\\nfragment LayoutData on Layout {{\\n geometry\\n hashId\\n title\\n tags {{\\n id\\n hashId\\n name\\n }}\\n revisions {{\\n hexUrl\\n model\\n zipUrl\\n layers {{\\n position\\n title\\n }}\\n }}\\n __typename\\n}}\\n\"}}";
23+
"{{\"operationName\":\"getLayout\",\"variables\":{{\"hashId\":\"{0}\"}},\"query\":\"query getLayout($hashId: String!) {{\\n Layout(hashId: $hashId) {{\\n ...LayoutData\\n __typename\\n }}\\n}}\\n\\nfragment LayoutData on Layout {{\\n geometry\\n hashId\\n title\\n tags {{\\n id\\n hashId\\n name\\n }}\\n revisions {{\\n hashId\\n title\\n hexUrl\\n model\\n zipUrl\\n layers {{\\n position\\n title\\n }}\\n }}\\n __typename\\n}}\\n\"}}";
2424

2525
private const string GetLayoutRequestUri = "https://oryx.ergodox-ez.com/graphql";
2626

@@ -53,12 +53,12 @@ public async Task<ErgodoxLayout> GetErgodoxLayout(string layoutHashId)
5353
}
5454

5555
/// <inheritdoc />
56-
public EZLayout PrepareEZLayout(ErgodoxLayout ergodoxLayout)
56+
public EZLayout PrepareEZLayout(ErgodoxLayout ergodoxLayout, string layoutRevisionId)
5757
{
5858
Logger.TraceMethod();
5959

6060
var ezLayoutMaker = new EZLayoutMaker();
61-
EZLayout ezLayout = ezLayoutMaker.PrepareEZLayout(ergodoxLayout);
61+
EZLayout ezLayout = ezLayoutMaker.PrepareEZLayout(ergodoxLayout, layoutRevisionId);
6262

6363
return ezLayout;
6464
}

src/InvvardDev.EZLayoutDisplay.Desktop/Service/Interface/ILayoutService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ public interface ILayoutService
2424
/// Transforms an <see cref="ErgodoxLayout"/> into a <see cref="EZLayout"/>.
2525
/// </summary>
2626
/// <param name="ergodoxLayout">The <see cref="ErgodoxLayout"/> to be transformed.</param>
27+
/// <param name="layoutRevisionId">The layout revision identifier.</param>
2728
/// <returns>The <see cref="EZLayout"/> transformed into.</returns>
28-
EZLayout PrepareEZLayout(ErgodoxLayout ergodoxLayout);
29+
EZLayout PrepareEZLayout(ErgodoxLayout ergodoxLayout, string layoutRevisionId);
2930

3031
/// <summary>
3132
/// Gets the list of <see cref="KeyTemplate"/> from the local repository.

0 commit comments

Comments
 (0)