From 230858e37d5764ddc39e7dd08f4ec0c0f45c3462 Mon Sep 17 00:00:00 2001 From: hoangbv15 Date: Tue, 7 May 2024 15:55:31 +0100 Subject: [PATCH] feature: add deius and fury timer (#2) Co-authored-by: Hoang Vu Bui --- src/Alarming/Alarm.cs | 12 +++++++++-- src/BossTiming/BossTimer.cs | 16 ++++++++++---- src/BossTiming/Dto/Boss.cs | 10 +++++++-- src/BossTiming/IBoss.cs | 4 +++- src/Logging/Log.cs | 11 ++++++++++ src/Networking/RestClient.cs | 21 +++++++++++++------ src/Resources/Raw/bosses.json | 36 +++++++++++++++++++------------- src/ServerTiming/Dto/PteuTime.cs | 8 +++---- src/ServerTiming/ServerTime.cs | 3 +-- src/Time/IBossTimer.cs | 17 --------------- 10 files changed, 86 insertions(+), 52 deletions(-) delete mode 100644 src/Time/IBossTimer.cs diff --git a/src/Alarming/Alarm.cs b/src/Alarming/Alarm.cs index 6048c28..6b6955e 100644 --- a/src/Alarming/Alarm.cs +++ b/src/Alarming/Alarm.cs @@ -76,7 +76,7 @@ private async Task Announce(IList> toBeAnnounced) for (var i = 0; i < announceCategories[minute].Count; i++) { var boss = announceCategories[minute][i]; - sb.Append(boss.Name); + sb.Append(GetTextToAnnounce(boss)); if (i == announceCategories[minute].Count - 2) { sb.Append(", and "); @@ -91,7 +91,15 @@ private async Task Announce(IList> toBeAnnounced) Log.Info(announceSentence); await TextToSpeech.Default.SpeakAsync(announceSentence); } - + } + + private string GetTextToAnnounce(IBoss boss) + { + if (boss.TextToSpeech != null) + { + return boss.TextToSpeech; + } + return boss.Name; } public void SetAlarm(IBoss boss, bool isSet) diff --git a/src/BossTiming/BossTimer.cs b/src/BossTiming/BossTimer.cs index 1ebd7f8..ff0bf38 100644 --- a/src/BossTiming/BossTimer.cs +++ b/src/BossTiming/BossTimer.cs @@ -28,14 +28,22 @@ public async Task Initialise() public TimeSpan GetTimeTillBoss(IBoss boss) { - var nextBossHour = DateTime.Today.AddHours(boss.ReferenceHour).AddMinutes(_serverTime.BossTimeMinute); + var nextBossTime = DateTime.Today.AddHours(boss.FirstHour); + + var minute = _serverTime.BossTimeMinute; + if (boss.MinuteOverride != null) + { + minute = boss.MinuteOverride.Value; + } + + nextBossTime = nextBossTime.AddMinutes(minute); - while (nextBossHour < _serverTime.Now && TimeSpan.FromHours(boss.IntervalHours) > TimeSpan.Zero) + while (nextBossTime < _serverTime.Now && TimeSpan.FromHours(boss.IntervalHours) > TimeSpan.Zero) { - nextBossHour = nextBossHour.AddHours(boss.IntervalHours); + nextBossTime = nextBossTime.AddHours(boss.IntervalHours); } - var result = nextBossHour - _serverTime.Now; + var result = nextBossTime - _serverTime.Now; return result; } } \ No newline at end of file diff --git a/src/BossTiming/Dto/Boss.cs b/src/BossTiming/Dto/Boss.cs index 7472b5b..b8f9194 100644 --- a/src/BossTiming/Dto/Boss.cs +++ b/src/BossTiming/Dto/Boss.cs @@ -16,12 +16,18 @@ public class Boss: IBoss { [JsonPropertyName("name")] public string Name { get; set; } + + [JsonPropertyName("textToSpeech")] + public string? TextToSpeech { get; set; } - [JsonPropertyName("referenceHour")] - public int ReferenceHour { get; set; } + [JsonPropertyName("firstHour")] + public int FirstHour { get; set; } [JsonPropertyName("intervalHours")] public int IntervalHours { get; set; } + + [JsonPropertyName("minuteOverride")] + public int? MinuteOverride { get; set; } } public class BossArray diff --git a/src/BossTiming/IBoss.cs b/src/BossTiming/IBoss.cs index 9426f27..bb29ae0 100644 --- a/src/BossTiming/IBoss.cs +++ b/src/BossTiming/IBoss.cs @@ -3,6 +3,8 @@ namespace PristonToolsEU.BossTiming; public interface IBoss { public string Name { get; set; } - public int ReferenceHour { get; set; } + public string? TextToSpeech { get; set; } + public int FirstHour { get; set; } public int IntervalHours { get; set; } + public int? MinuteOverride { get; set; } } \ No newline at end of file diff --git a/src/Logging/Log.cs b/src/Logging/Log.cs index c613fa1..dabb4f4 100644 --- a/src/Logging/Log.cs +++ b/src/Logging/Log.cs @@ -35,4 +35,15 @@ public static void Info(string msg, params object[] parameters) { Instance.InternalLog(LogLevel.Info, msg, parameters); } + + public static void Warn(string msg, params object[] parameters) + { + Instance.InternalLog(LogLevel.Warn, msg, parameters); + } + + public static void Error(string msg, params object[] parameters) + { + Instance.InternalLog(LogLevel.Error, msg, parameters); + } + } \ No newline at end of file diff --git a/src/Networking/RestClient.cs b/src/Networking/RestClient.cs index bdb4c50..f6a6e3b 100644 --- a/src/Networking/RestClient.cs +++ b/src/Networking/RestClient.cs @@ -20,11 +20,20 @@ public RestClient() public async Task Get(string url) where T : new() { Log.Info("Beginning sending rest request to {0}", url); - await using Stream stream = - await _httpClient.GetStreamAsync(url); - var deserialised = - await JsonSerializer.DeserializeAsync(stream); - Log.Debug("Got rest response \n{0}", deserialised); - return deserialised ?? new T(); + try + { + await using Stream stream = + await _httpClient.GetStreamAsync(url); + var deserialised = + await JsonSerializer.DeserializeAsync(stream); + + Log.Debug("Got rest response \n{0}", deserialised); + return deserialised ?? new T(); + } + catch (Exception e) + { + Log.Error("Got exception with rest: {0}", e); + throw; + } } } \ No newline at end of file diff --git a/src/Resources/Raw/bosses.json b/src/Resources/Raw/bosses.json index 00d59e5..b9bdda9 100644 --- a/src/Resources/Raw/bosses.json +++ b/src/Resources/Raw/bosses.json @@ -2,68 +2,76 @@ "bosses": [ { "name": "Valento", - "referenceHour": 1, + "firstHour": 1, "intervalHours": 2 }, { "name": "Kelvezu", - "referenceHour": 0, + "firstHour": 0, "intervalHours": 3 }, { "name": "Mokova", - "referenceHour": 2, + "firstHour": 2, "intervalHours": 3 }, { "name": "Devil Shy", - "referenceHour": 0, + "firstHour": 0, "intervalHours": 4 }, { "name": "Tulla", - "referenceHour": 1, + "firstHour": 1, "intervalHours": 4 }, { "name": "Draxos", - "referenceHour": 3, + "firstHour": 3, "intervalHours": 4 }, { "name": "Yagditha", - "referenceHour": 1, + "firstHour": 1, "intervalHours": 6 }, { "name": "Ignis", - "referenceHour": 2, + "firstHour": 2, "intervalHours": 6 }, { "name": "Primal Golem", - "referenceHour": 4, + "firstHour": 4, "intervalHours": 6 }, { "name": "Skillmaster", - "referenceHour": 0, + "firstHour": 0, "intervalHours": 3 }, { "name": "Greedy", - "referenceHour": 0, + "firstHour": 0, "intervalHours": 6 }, { "name": "Aragonian", - "referenceHour": 0, + "firstHour": 0, "intervalHours": 6 }, { "name": "Deius", - "referenceHour": 0, - "intervalHours": 2 + "firstHour": 0, + "intervalHours": 2, + "minuteOverride": 0 + }, + { + "name": "Wrath (104+)", + "textToSpeech": "Fury", + "firstHour": 2, + "intervalHours": 3, + "minuteOverride": 0 } ] } \ No newline at end of file diff --git a/src/ServerTiming/Dto/PteuTime.cs b/src/ServerTiming/Dto/PteuTime.cs index 1303587..487235a 100644 --- a/src/ServerTiming/Dto/PteuTime.cs +++ b/src/ServerTiming/Dto/PteuTime.cs @@ -4,11 +4,11 @@ namespace PristonToolsEU.ServerTiming.Dto; public class PteuTime { - [JsonPropertyName("online_babel")] - public bool IsBabelOnline { get; set; } + // [JsonPropertyName("online_babel")] + // public bool IsBabelOnline { get; set; } - [JsonPropertyName("online_seasonal")] - public bool IsSeasonalOnline { get; set; } + // [JsonPropertyName("online_seasonal")] + // public bool IsSeasonalOnline { get; set; } [JsonPropertyName("babel")] public ServerDetail? Babel { get; set; } diff --git a/src/ServerTiming/ServerTime.cs b/src/ServerTiming/ServerTime.cs index 779c976..ac365fc 100644 --- a/src/ServerTiming/ServerTime.cs +++ b/src/ServerTiming/ServerTime.cs @@ -9,8 +9,7 @@ namespace PristonToolsEU.ServerTiming; public class ServerTime : IServerTime, IDisposable { private const int SyncIntervalMs = 1800000; // 30 minutes - private const string PteuTimeUrl = $"https://pristontale.eu/api/api.php?key={ApiKey}"; - private const string ApiKey = "c4b90e23c554d10c3c9deadcdbfcf93b"; + private const string PteuTimeUrl = $"https://pristontale.eu/api/api.php?key=c4b90e23c554d10c3c9deadcdbfcf93b"; private readonly IRestClient _restClient; private TimeSpan _serverTimeOffset = TimeSpan.Zero; diff --git a/src/Time/IBossTimer.cs b/src/Time/IBossTimer.cs deleted file mode 100644 index 716ca7f..0000000 --- a/src/Time/IBossTimer.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace PristonToolsEU.Time; - -public interface IBossTimer -{ - - TimeSpan Valento { get; } - TimeSpan Kelvezu { get; } - TimeSpan Mokova { get; } - TimeSpan Devil { get; } - TimeSpan Tulla { get; } - TimeSpan Draxos { get; } - TimeSpan Greedy { get; } - TimeSpan Yagditha { get; } - TimeSpan Ignis { get; } - TimeSpan Primal { get; } - TimeSpan Aragonia { get; } -} \ No newline at end of file