From 6487df776a3ede23ea2ba40dde1c459da02e9621 Mon Sep 17 00:00:00 2001 From: Natrium <1583803226@qq.com> Date: Tue, 23 Apr 2024 00:57:34 +0800 Subject: [PATCH] Fix Announcement time display --- .../Resource/Localization/SH.en.resx | 12 ++++++-- .../Resource/Localization/SH.id.resx | 12 ++++++-- .../Resource/Localization/SH.ja.resx | 14 ++++++--- .../Resource/Localization/SH.ko.resx | 12 ++++++-- .../Resource/Localization/SH.pt.resx | 12 ++++++-- .../Snap.Hutao/Resource/Localization/SH.resx | 12 ++++++-- .../Resource/Localization/SH.ru.resx | 12 ++++++-- .../Resource/Localization/SH.zh-Hant.resx | 12 ++++++-- .../Announcement/AnnouncementService.cs | 29 ++++++++++++++----- .../Common/Announcement/AnnouncementRegex.cs | 6 ++++ 10 files changed, 101 insertions(+), 32 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx index 1f7ec92f..5a42562f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx @@ -2922,13 +2922,19 @@ Weapon WIKI - (?:〓Event Duration〓|〓Quest Start Time〓).*?\d\.\dthe Version update(?:after|)Permanently available + (?:〓Event Duration〓|〓Quest Start Time〓).*?Permanently.*?Version.*?(\d\.\d).*?update - 〓Event Duration〓.*?\d\.\d Available throughout the entirety of Version + 〓Event Duration〓.*?Available throughout the entirety of Version (\d\.\d) - (?:〓Event Duration〓|Event Wish Duration|【Availability Duration】|〓Discount Period〓).*?(\d\.\dAfter the Version update).*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + (?:〓Event Duration〓|Event Wish Duration|【Availability Duration】|〓Discount Period〓).*?After.*?(\d\.\d).*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + + + Dear.*?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; + + + Version \d\.\d Update Maintenance Preview 〓Update Maintenance Duration〓.+?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.id.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.id.resx index e80e0912..1602838c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.id.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.id.resx @@ -2922,13 +2922,19 @@ Senjata WIKI - (?:〓Durasi Event〓|〓Waktu Mulai Misi〓).*?\d\.\dthe Version update(?:after|)Selamanya Tersedia + (?:〓Durasi Event〓|〓Waktu Mulai Misi〓).*?(\d\.\d)the Version update(?:after|)Selamanya Tersedia - 〓Durasi Event〓.*?\d\.\d Tersedia selama versi ini + 〓Durasi Event〓.*?(\d\.\d) Tersedia selama versi ini - (?:〓Waktu Acara〓|Waktu Menginginkan|【Waktu Peluncuran】|〓Waktu Diskon〓).*?(\d\.\d Setelah Pembaruan Versi).*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + (?:〓Waktu Acara〓|Waktu Menginginkan|【Waktu Peluncuran】|〓Waktu Diskon〓).*?(\d\.\d) Setelah Pembaruan Versi.*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + + + 将于&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt;进行版本更新维护 + + + \d\.\d版本更新维护预告 〓Durasi Pemeliharaan Pembaruan.+?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ja.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ja.resx index 75a9737e..ac931807 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ja.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ja.resx @@ -2922,19 +2922,25 @@ 武器一覧 - (?:〓イベント期間〓|〓任務開始時間〓).*?\d\.\dバージョンアップ(?:完了|)後常設オープン + (?:〓イベント期間〓|〓任務開(?:始|放)時間〓).*?(\d\.\d).*?開放 - 〓イベント期間〓.*?\d\.\d当バージョン期間オープン + 〓イベント期間〓.*?(\d\.\d)バージョン - (?:〓イベント期間〓|祈願期間|【開始日時】).*?(\d\.\dバージョンアップ完了後).*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + (?:〓イベント期間〓|祈願期間|【開始日時】).*?(\d\.\d)バージョンアップ.*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + + + 親愛.*?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; + + + Ver\.\d\.\dバージョンアップのお知らせ 〓メンテナンス時間〓.+?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; - Ver.\d\.\d.+正式リリース + Ver\.\d\.\d.*?正式リリース {0} 日後に開始 diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ko.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ko.resx index a902c876..b388c318 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ko.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ko.resx @@ -2922,13 +2922,19 @@ 무기 자료 - (?:〓活动时间〓|〓任务开放时间〓).*?\d\.\d版本更新(?:完成|)后永久开放 + (?:〓活动时间〓|〓任务开放时间〓).*?(\d\.\d)版本更新(?:完成|)后永久开放 - 〓活动时间〓.*?\d\.\d版本期间持续开放 + 〓活动时间〓.*?(\d\.\d)版本期间持续开放 - (?:〓活动时间〓|祈愿时间|【上架时间】).*?(\d\.\d版本更新后).*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + (?:〓活动时间〓|祈愿时间|【上架时间】|〓折扣时间〓).*?(\d\.\d)版本更新后.*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + + + 将于&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt;进行版本更新维护 + + + \d\.\d版本更新维护预告 〓更新时间〓.+?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.pt.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.pt.resx index 8ea53d63..b3d00aca 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.pt.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.pt.resx @@ -2922,13 +2922,19 @@ Wiki de armas - (?:〓Duração do evento〓|〓Hora de início da missão〓).*?\d\.\da atualização da versão(?:after|)Disponível permanentemente + (?:〓Duração do evento〓|〓Hora de início da missão〓).*?(\d\.\d)a atualização da versão(?:after|)Disponível permanentemente - 〓Duração do evento〓.*?\d\.\d Disponível em toda as versões + 〓Duração do evento〓.*?(\d\.\d) Disponível em toda as versões - (?:〓Duração do evento〓|Duração da oração do evento|【Duração da disponibilidade】).*?(\d\.\dApós a atualização da versão).*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + (?:〓Duração do evento〓|Duração da oração do evento|【Duração da disponibilidade】).*?(\d\.\d)Após a atualização da versão.*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + + + 将于&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt;进行版本更新维护 + + + \d\.\d版本更新维护预告 〓Duração da manutenção da atualização.+?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx index 6bec3145..49fdaf68 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx @@ -2991,13 +2991,19 @@ 武器资料 - (?:〓活动时间〓|〓任务开放时间〓).*?\d\.\d版本更新(?:完成|)后永久开放 + (?:〓活动时间〓|〓任务开放时间〓).*?(\d\.\d)版本更新(?:完成|)后永久开放 - 〓活动时间〓.*?\d\.\d版本期间持续开放 + 〓活动时间〓.*?(\d\.\d)版本期间持续开放 - (?:〓活动时间〓|祈愿时间|【上架时间】|〓折扣时间〓).*?(\d\.\d版本更新后).*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + (?:〓活动时间〓|祈愿时间|【上架时间】|〓折扣时间〓).*?(\d\.\d)版本更新后.*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + + + 将于&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt;进行版本更新维护 + + + \d\.\d版本更新维护预告 〓更新时间〓.+?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ru.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ru.resx index a28ab4ff..394ac05f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ru.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.ru.resx @@ -2922,13 +2922,19 @@ 武器资料 - (?:〓活动时间〓|〓任务开放时间〓).*?\d\.\d版本更新(?:完成|)后永久开放 + (?:〓活动时间〓|〓任务开放时间〓).*?(\d\.\d)版本更新(?:完成|)后永久开放 - 〓活动时间〓.*?\d\.\d版本期间持续开放 + 〓活动时间〓.*?(\d\.\d)版本期间持续开放 - (?:〓活动时间〓|祈愿时间|【上架时间】).*?(\d\.\d版本更新后).*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + (?:〓活动时间〓|祈愿时间|【上架时间】|〓折扣时间〓).*?(\d\.\d)版本更新后.*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + + + 将于&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt;进行版本更新维护 + + + \d\.\d版本更新维护预告 〓更新时间〓.+?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.zh-Hant.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.zh-Hant.resx index b4a9a3fb..26b503f8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.zh-Hant.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.zh-Hant.resx @@ -2922,13 +2922,19 @@ 武器資料 - (?:〓活動時間〓|〓任務開放時間〓).*?\d\.\d版本更新(?:完成|)後永久開放 + (?:〓活動時間〓|〓任務開放時間〓).*?(\d\.\d)版本更新(?:完成|)後永久開放 - 〓活動時間〓.*?\d\.\d版本期間持續開放 + 〓活動時間〓.*?(\d\.\d)版本期間持續開放 - (?:〓活動時間〓|祈願時間|【上架時間】|〓折扣時間〓).*?(\d\.\d版本更新後).*?~.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + (?:〓活動時間〓|祈願時間|【上架時間】|〓折扣時間〓).*?(\d\.\d).*?版本更新後.*?&lt;t class="t_(?:gl|lc)".*?&gt;(.*?)&lt;/t&gt; + + + 親愛.*?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; + + + \d\.\d版本更新維護預告 〓更新時間〓.+?&lt;t class=\"t_(?:gl|lc)\".*?&gt;(.*?)&lt;/t&gt; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Announcement/AnnouncementService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Announcement/AnnouncementService.cs index b2d79bb1..eef346f9 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Announcement/AnnouncementService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Announcement/AnnouncementService.cs @@ -110,37 +110,52 @@ internal sealed partial class AnnouncementService : IAnnouncementService .Single(wrapper => wrapper.TypeId == 1) .List; - // 更新公告 + // x.x版本更新说明 WebAnnouncement versionUpdate = announcementListWrappers .Single(wrapper => wrapper.TypeId == 2) .List .Single(ann => AnnouncementRegex.VersionUpdateTitleRegex.IsMatch(ann.Title)); - if (AnnouncementRegex.VersionUpdateTimeRegex.Match(versionUpdate.Content) is not { Success: true } versionMatch) + if (AnnouncementRegex.VersionUpdateTimeRegex.Match(versionUpdate.Content) is not { Success: true } versionUpdateMatch) { return; } - DateTimeOffset versionUpdateTime = UnsafeDateTimeOffset.ParseDateTime(versionMatch.Groups[1].ValueSpan, offset); + // x.x版本更新维护预告 + WebAnnouncement versionUpdatePreview = announcementListWrappers + .Single(wrapper => wrapper.TypeId == 2) + .List + .Single(ann => AnnouncementRegex.VersionUpdatePreviewTitleRegex.IsMatch(ann.Title)); + + if (AnnouncementRegex.VersionUpdatePreviewTimeRegex.Match(versionUpdatePreview.Content) is not { Success: true } versionUpdatePreviewMatch) + { + return; + } + + Dictionary versionStartTimeDict = new Dictionary(); + DateTimeOffset versionUpdateTime = UnsafeDateTimeOffset.ParseDateTime(versionUpdateMatch.Groups[1].ValueSpan, offset); + DateTimeOffset versionUpdatePreviewTime = UnsafeDateTimeOffset.ParseDateTime(versionUpdatePreviewMatch.Groups[1].ValueSpan, offset); + versionStartTimeDict.Add(new Regex("(\\d\\.\\d)").Match(versionUpdate.Title).Groups[1].Value, versionUpdateTime); + versionStartTimeDict.TryAdd(new Regex("(\\d\\.\\d)").Match(versionUpdatePreview.Title).Groups[1].Value, versionUpdatePreviewTime); foreach (ref readonly WebAnnouncement announcement in CollectionsMarshal.AsSpan(activities)) { if (AnnouncementRegex.PermanentActivityAfterUpdateTimeRegex.Match(announcement.Content) is { Success: true } permanent) { - announcement.StartTime = versionUpdateTime; + announcement.StartTime = versionStartTimeDict[permanent.Groups[1].Value]; continue; } if (AnnouncementRegex.PersistentActivityAfterUpdateTimeRegex.Match(announcement.Content) is { Success: true } persistent) { - announcement.StartTime = versionUpdateTime; - announcement.EndTime = versionUpdateTime + TimeSpan.FromDays(42); + announcement.StartTime = versionStartTimeDict[persistent.Groups[1].Value]; + announcement.EndTime = versionStartTimeDict[persistent.Groups[1].Value] + TimeSpan.FromDays(42); continue; } if (AnnouncementRegex.TransientActivityAfterUpdateTimeRegex.Match(announcement.Content) is { Success: true } transient) { - announcement.StartTime = versionUpdateTime; + announcement.StartTime = versionStartTimeDict[transient.Groups[1].Value]; announcement.EndTime = UnsafeDateTimeOffset.ParseDateTime(transient.Groups[2].ValueSpan, offset); continue; } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementRegex.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementRegex.cs index eb73d9aa..8ead9877 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementRegex.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementRegex.cs @@ -13,6 +13,12 @@ internal static partial class AnnouncementRegex /// public static readonly Regex VersionUpdateTimeRegex = new(SH.WebAnnouncementMatchVersionUpdateTime, RegexOptions.Compiled); + /// + public static readonly Regex VersionUpdatePreviewTitleRegex = new(SH.WebAnnouncementMatchVersionUpdatePreviewTitle, RegexOptions.Compiled); + + /// + public static readonly Regex VersionUpdatePreviewTimeRegex = new(SH.WebAnnouncementMatchVersionUpdatePreviewTime, RegexOptions.Compiled); + /// public static readonly Regex TransientActivityAfterUpdateTimeRegex = new(SH.WebAnnouncementMatchTransientActivityTime, RegexOptions.Compiled);