Skip to content

Commit 7e1d933

Browse files
committed
Add an event when an error occurs in the Cytrus watcher
1 parent d263000 commit 7e1d933

Some content is hidden

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

41 files changed

+218
-78
lines changed

Cyberia.Cytrusaurus/CytrusWatcher.cs

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,24 @@ public interface ICytrusWatcher
6262
Task CheckAsync();
6363

6464
/// <summary>
65-
/// Delegate for the NewCytrusFileDetected event.
65+
/// Delegate for the <see cref="NewCytrusFileDetected"/> event.
6666
/// </summary>
6767
delegate ValueTask NewCytrusFileDetectedEventHandler(ICytrusWatcher sender, NewCytrusFileDetectedEventArgs eventArgs);
6868

6969
/// <summary>
7070
/// Event that is triggered when a new Cytrus file is detected.
7171
/// </summary>
7272
event NewCytrusFileDetectedEventHandler? NewCytrusFileDetected;
73+
74+
/// <summary>
75+
/// Delegate for the <see cref="CytrusErrored"/> event.
76+
/// </summary>
77+
delegate ValueTask CytrusErroredEventHandler(ICytrusWatcher sender, CytrusErroredEventArgs eventArgs);
78+
79+
/// <summary>
80+
/// Event that is triggered when an error occurs while processing Cytrus data.
81+
/// </summary>
82+
event CytrusErroredEventHandler? CytrusErrored;
7383
}
7484

7585
public sealed class CytrusWatcher : ICytrusWatcher
@@ -149,7 +159,8 @@ await _onlineMonitoredFileRepository.UpsertAsync(new OnlineMonitoredFile
149159
}
150160
catch (HttpRequestException e)
151161
{
152-
Log.Error(e, "An error occurred while sending Get request to {CytrusUrl}", $"{BaseUrl}/{CytrusFileName}");
162+
await OnCytrusErroredAsync(new CytrusErroredEventArgs(e, "An error occurred while sending a GET request to the Cytrus URL, see the logs for more details."));
163+
Log.Error(e, "An error occurred while sending a GET request to {CytrusUrl}", $"{BaseUrl}/{CytrusFileName}");
153164
return;
154165
}
155166

@@ -164,6 +175,9 @@ await _onlineMonitoredFileRepository.UpsertAsync(new OnlineMonitoredFile
164175
var cytrus = DeserializeCytrus(json);
165176
if (cytrus is null)
166177
{
178+
await OnCytrusErroredAsync(new CytrusErroredEventArgs("Failed to deserialize the Cytrus data from the response content, see the logs for more details."));
179+
Log.Error("Failed to deserialize the Cytrus data from the response content:\n{CytrusJson}", json);
180+
167181
return;
168182
}
169183

@@ -177,7 +191,7 @@ await _onlineMonitoredFileRepository.UpsertAsync(new OnlineMonitoredFile
177191
File.WriteAllText(CytrusPath, json);
178192

179193
Log.Information("Cytrus update detected :\n{CytrusDiff}", diff);
180-
await OnNewCytrusFileDetected(new NewCytrusFileDetectedEventArgs(Cytrus, OldCytrus, diff));
194+
await OnNewCytrusFileDetectedAsync(new NewCytrusFileDetectedEventArgs(Cytrus, OldCytrus, diff));
181195
}
182196

183197
/// <summary>
@@ -238,9 +252,9 @@ await _onlineMonitoredFileRepository.UpsertAsync(new OnlineMonitoredFile
238252
public event ICytrusWatcher.NewCytrusFileDetectedEventHandler? NewCytrusFileDetected;
239253

240254
/// <summary>
241-
/// Triggers the NewCytrusFileDetected event.
255+
/// Triggers the <see cref="NewCytrusFileDetected"/> event.
242256
/// </summary>
243-
internal async ValueTask OnNewCytrusFileDetected(NewCytrusFileDetectedEventArgs eventArgs)
257+
internal async ValueTask OnNewCytrusFileDetectedAsync(NewCytrusFileDetectedEventArgs eventArgs)
244258
{
245259
var handler = NewCytrusFileDetected;
246260
if (handler is not null)
@@ -249,5 +263,19 @@ internal async ValueTask OnNewCytrusFileDetected(NewCytrusFileDetectedEventArgs
249263
}
250264
}
251265

266+
public event ICytrusWatcher.CytrusErroredEventHandler? CytrusErrored;
267+
268+
/// <summary>
269+
/// Triggers the <see cref="CytrusErrored"/> event.
270+
/// </summary>
271+
internal async ValueTask OnCytrusErroredAsync(CytrusErroredEventArgs eventArgs)
272+
{
273+
var handler = CytrusErrored;
274+
if (handler is not null)
275+
{
276+
await handler.Invoke(this, eventArgs);
277+
}
278+
}
279+
252280
#endregion
253281
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System.Diagnostics.CodeAnalysis;
2+
3+
namespace Cyberia.Cytrusaurus.EventArgs;
4+
5+
/// <summary>
6+
/// Represents the event arguments for when an error occurs in the Cytrus watcher.
7+
/// </summary>
8+
public sealed class CytrusErroredEventArgs : System.EventArgs
9+
{
10+
/// <summary>
11+
/// Gets the exception that occurred, if any.
12+
/// </summary>
13+
public Exception? Exception { get; init; }
14+
15+
/// <summary>
16+
/// Gets the error message.
17+
/// </summary>
18+
public required string ErrorMessage { get; init; }
19+
20+
/// <inheritdoc cref="CytrusErroredEventArgs(Exception?, string)"/>
21+
[SetsRequiredMembers]
22+
public CytrusErroredEventArgs(string errorMessage)
23+
: this(null, errorMessage)
24+
{
25+
26+
}
27+
28+
/// <summary>
29+
/// Initializes a new instance of the <see cref="CytrusErroredEventArgs"/> class.
30+
/// </summary>
31+
/// <param name="errorMessage">The error message.</param>
32+
/// <param name="exception">The exception that occurred, if any.</param>
33+
[SetsRequiredMembers]
34+
public CytrusErroredEventArgs(Exception? exception, string errorMessage)
35+
{
36+
Exception = exception;
37+
ErrorMessage = errorMessage;
38+
}
39+
}

Cyberia.Cytrusaurus/EventArgs/NewCytrusFileDetectedEventArgs.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Cyberia.Cytrusaurus.Models;
22

3+
using System.Diagnostics.CodeAnalysis;
4+
35
namespace Cyberia.Cytrusaurus.EventArgs;
46

57
/// <summary>
@@ -10,24 +12,25 @@ public sealed class NewCytrusFileDetectedEventArgs : System.EventArgs
1012
/// <summary>
1113
/// Gets the current Cytrus data.
1214
/// </summary>
13-
public Cytrus Cytrus { get; init; }
15+
public required Cytrus Cytrus { get; init; }
1416

1517
/// <summary>
1618
/// Gets the old Cytrus data.
1719
/// </summary>
18-
public Cytrus OldCytrus { get; init; }
20+
public required Cytrus OldCytrus { get; init; }
1921

2022
/// <summary>
2123
/// Gets the difference between the current and old Cytrus data.
2224
/// </summary>
23-
public string Diff { get; init; }
25+
public required string Diff { get; init; }
2426

2527
/// <summary>
2628
/// Initializes a new instance of the <see cref="NewCytrusFileDetectedEventArgs"/> class.
2729
/// </summary>
2830
/// <param name="cytrus">The current Cytrus data.</param>
2931
/// <param name="oldCytrus">The old Cytrus data.</param>
3032
/// <param name="diff">The difference between the current and old Cytrus data.</param>
33+
[SetsRequiredMembers]
3134
internal NewCytrusFileDetectedEventArgs(Cytrus cytrus, Cytrus oldCytrus, string diff)
3235
{
3336
Cytrus = cytrus;

Cyberia.Langzilla/EventArgs/CheckLangFinishedEventArgs.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Cyberia.Langzilla.Models;
22

3+
using System.Diagnostics.CodeAnalysis;
4+
35
namespace Cyberia.Langzilla.EventArgs;
46

57
/// <summary>
@@ -10,18 +12,19 @@ public sealed class CheckLangFinishedEventArgs : System.EventArgs
1012
/// <summary>
1113
/// The checked lang repository.
1214
/// </summary>
13-
public LangsRepository Repository { get; init; }
15+
public required LangsRepository Repository { get; init; }
1416

1517
/// <summary>
1618
/// The list of the updated langs.
1719
/// </summary>
18-
public IReadOnlyList<Lang> UpdatedLangs { get; init; }
20+
public required IReadOnlyList<Lang> UpdatedLangs { get; init; }
1921

2022
/// <summary>
2123
/// Initializes a new instance of the <see cref="CheckLangFinishedEventArgs"/> class.
2224
/// </summary>
2325
/// <param name="repository">The checked lang repository.</param>
2426
/// <param name="updatedLangs">The list of updated langs.</param>
27+
[SetsRequiredMembers]
2528
internal CheckLangFinishedEventArgs(LangsRepository repository, IReadOnlyList<Lang> updatedLangs)
2629
{
2730
Repository = repository;

Cyberia.Langzilla/EventArgs/CheckLangStartedEventArgs.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Cyberia.Langzilla.Models;
22

3+
using System.Diagnostics.CodeAnalysis;
4+
35
namespace Cyberia.Langzilla.EventArgs;
46

57
/// <summary>
@@ -10,12 +12,13 @@ public sealed class CheckLangStartedEventArgs : System.EventArgs
1012
/// <summary>
1113
/// The checked lang repository.
1214
/// </summary>
13-
public LangsRepository Repository { get; init; }
15+
public required LangsRepository Repository { get; init; }
1416

1517
/// <summary>
1618
/// Initializes a new instance of the <see cref="CheckLangStartedEventArgs"/> class.
1719
/// </summary>
1820
/// <param name="repository">The checked lang repository.</param>
21+
[SetsRequiredMembers]
1922
internal CheckLangStartedEventArgs(LangsRepository repository)
2023
{
2124
Repository = repository;

Cyberia.Salamandra/Commands/Admin/Parse/ParseCommandModule.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public async Task EffectsExecuteAsync(SlashCommandContext ctx,
3636
var effects = EffectFactory.CreateMany(value);
3737
if (effects.Count > 0)
3838
{
39-
var embed = _embedBuilderService.CreateEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
39+
var embed = _embedBuilderService.CreateBaseEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
4040
.WithTitle("Item effects parser");
4141

4242
_embedBuilderService.AddEffectFields(embed, "Effects :", effects, true, culture);
@@ -59,7 +59,7 @@ public async Task CriteriaExecuteAsync(SlashCommandContext ctx,
5959
var criteria = CriterionFactory.CreateMany(value);
6060
if (criteria.Count > 0)
6161
{
62-
var embed = _embedBuilderService.CreateEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
62+
var embed = _embedBuilderService.CreateBaseEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
6363
.WithTitle("Criteria parser");
6464

6565
_embedBuilderService.AddCriteriaFields(embed, criteria, culture);

Cyberia.Salamandra/Commands/Admin/Search/SearchCommandModule.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public async Task CriterionExecuteAsync(SlashCommandContext ctx,
7272
return;
7373
}
7474

75-
var embed = _embedBuilderService.CreateEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
75+
var embed = _embedBuilderService.CreateBaseEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
7676
.WithTitle($"Search criterion {criterionId} in {location}")
7777
.WithDescription(descriptionBuilder.ToString().WithMaxLength(Constant.MaxEmbedDescriptionSize));
7878

@@ -119,7 +119,7 @@ public async Task EffectExecuteAsync(SlashCommandContext ctx,
119119
return;
120120
}
121121

122-
var embed = _embedBuilderService.CreateEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
122+
var embed = _embedBuilderService.CreateBaseEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
123123
.WithTitle($"Search effect {effectId} in {location}")
124124
.WithDescription(descriptionBuilder.ToString().WithMaxLength(Constant.MaxEmbedDescriptionSize));
125125

@@ -151,7 +151,7 @@ public async Task ItemSpriteExecuteAsync(SlashCommandContext ctx,
151151
}
152152
}
153153

154-
var embed = _embedBuilderService.CreateEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
154+
var embed = _embedBuilderService.CreateBaseEmbedBuilder(EmbedCategory.Tools, "Tools", culture)
155155
.WithTitle($"Search gfx {gfxId} in {_dofusDatacenter.ItemsRepository.GetItemTypeNameById(itemTypeId, culture)} ({itemTypeId})")
156156
.WithThumbnail(await ImageUrlProvider.GetImagePathAsync($"items/{itemTypeId}", gfxId, CdnImageSize.Size128))
157157
.WithDescription(descriptionBuilder.ToString().WithMaxLength(Constant.MaxEmbedDescriptionSize));

Cyberia.Salamandra/Commands/Data/Cytrus/CytrusCommandModule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public async Task ShowExecuteAsync(SlashCommandContext ctx)
5252
{
5353
var culture = await _cultureService.GetCultureAsync(ctx.Interaction);
5454

55-
var embed = _embedBuilderService.CreateEmbedBuilder(EmbedCategory.Tools, "Cytrus", culture)
55+
var embed = _embedBuilderService.CreateBaseEmbedBuilder(EmbedCategory.Tools, "Cytrus", culture)
5656
.WithDescription(CytrusWatcher.CytrusUrl)
5757
.AddField("Name", _cytrusWatcher.Cytrus.Name.Capitalize(), true)
5858
.AddField("Version", _cytrusWatcher.Cytrus.Version.ToString(), true)

Cyberia.Salamandra/Commands/Data/Langs/LangsMessageBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private Task<DiscordEmbedBuilder> EmbedBuilder()
6868
var type = _repository.Type.ToStringFast();
6969
var language = _repository.Language.ToStringFast();
7070

71-
var embed = _embedBuilderService.CreateEmbedBuilder(EmbedCategory.Tools, "Langs", _culture)
71+
var embed = _embedBuilderService.CreateBaseEmbedBuilder(EmbedCategory.Tools, "Langs", _culture)
7272
.WithTitle($"Langs {type} in {language}");
7373

7474
if (_repository.Langs.Count > 0)

Cyberia.Salamandra/Commands/Dofus/Breed/BreedMessageBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public static string GetPacket(int breedId)
8686

8787
private async Task<DiscordEmbedBuilder> EmbedBuilder()
8888
{
89-
var embed = _embedBuilderService.CreateEmbedBuilder(EmbedCategory.Breeds, Translation.Get<BotTranslations>("Embed.Breed.Author", _culture), _culture)
89+
var embed = _embedBuilderService.CreateBaseEmbedBuilder(EmbedCategory.Breeds, Translation.Get<BotTranslations>("Embed.Breed.Author", _culture), _culture)
9090
.WithTitle($"{_breedData.LongName.ToString(_culture)} ({_breedData.Id})")
9191
.WithDescription(Formatter.Italic(_breedData.Description.ToString(_culture)))
9292
.WithThumbnail(await _breedData.GetIconImagePathAsync(CdnImageSize.Size128))

0 commit comments

Comments
 (0)