diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b59e591..f65ba48b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to Chromatics are documented here. +## 4.3.33 + +- Fixed lighting stopping for the rest of the session when the Screen Capture base layer was in use and you returned to the title or character select screen. +- Yeelight, LIFX, Nanoleaf, and Alienware lights that are switched off or off the network at startup now log as device notices instead of errors. + +## 4.3.32 + +- Improved the accuracy and speed of game-data reads on FFXIV patch 7.55, including inventory, chat log, job gauges, and player stats. + ## 4.3.31 - Added support for FFXIV patch 7.55. diff --git a/Chromatics.Tests/Chromatics.Tests.csproj b/Chromatics.Tests/Chromatics.Tests.csproj index 53d68223..b71a0e18 100644 --- a/Chromatics.Tests/Chromatics.Tests.csproj +++ b/Chromatics.Tests/Chromatics.Tests.csproj @@ -38,7 +38,7 @@ - + diff --git a/Chromatics.Tests/Core/ScreenCaptureProcessorLifetimeTests.cs b/Chromatics.Tests/Core/ScreenCaptureProcessorLifetimeTests.cs new file mode 100644 index 00000000..891ebb6d --- /dev/null +++ b/Chromatics.Tests/Core/ScreenCaptureProcessorLifetimeTests.cs @@ -0,0 +1,21 @@ +using Chromatics.Layers; + +namespace Chromatics.Tests.Core; + +public class ScreenCaptureProcessorLifetimeTests +{ + [Fact] + public void Instance_IsRebuiltAfterDispose() + { + // DisposeAll runs every time the player returns to the title screen and + // nulls the processor's surface. Handing the disposed object back out + // left the Screen Capture base layer attaching to a dead surface on + // every later tick, which killed lighting for the rest of the session. + var first = ScreenCaptureProcessor.Instance; + first.Dispose(); + + var second = ScreenCaptureProcessor.Instance; + + Assert.NotSame(first, second); + } +} diff --git a/Chromatics.Tests/Helpers/NetworkFailureHelperTests.cs b/Chromatics.Tests/Helpers/NetworkFailureHelperTests.cs new file mode 100644 index 00000000..29ca8910 --- /dev/null +++ b/Chromatics.Tests/Helpers/NetworkFailureHelperTests.cs @@ -0,0 +1,53 @@ +using System; +using System.IO; +using System.Net.Http; +using System.Net.Sockets; +using Chromatics.Helpers; + +namespace Chromatics.Tests.Helpers; + +public class NetworkFailureHelperTests +{ + [Fact] + public void ConnectionRefused_IsUnreachable() + { + var ex = new SocketException((int)SocketError.ConnectionRefused); + + Assert.True(NetworkFailureHelper.IsUnreachable(ex)); + } + + [Fact] + public void SocketFailureWrappedInIoException_IsUnreachable() + { + var ex = new IOException("write failed", new SocketException((int)SocketError.HostUnreachable)); + + Assert.True(NetworkFailureHelper.IsUnreachable(ex)); + } + + [Fact] + public void HttpAndTimeoutFailures_AreUnreachable() + { + Assert.True(NetworkFailureHelper.IsUnreachable(new HttpRequestException("no route"))); + Assert.True(NetworkFailureHelper.IsUnreachable(new TimeoutException())); + Assert.True(NetworkFailureHelper.IsUnreachable(new TaskCanceledException())); + } + + [Fact] + public void SocketFailureInsideAggregate_IsUnreachable() + { + var ex = new AggregateException( + new InvalidOperationException("unrelated"), + new SocketException((int)SocketError.TimedOut)); + + Assert.True(NetworkFailureHelper.IsUnreachable(ex)); + } + + [Fact] + public void ApplicationBugs_AreNotUnreachable() + { + Assert.False(NetworkFailureHelper.IsUnreachable(new NullReferenceException())); + Assert.False(NetworkFailureHelper.IsUnreachable(new InvalidOperationException())); + Assert.False(NetworkFailureHelper.IsUnreachable( + new InvalidOperationException("outer", new ArgumentOutOfRangeException()))); + } +} diff --git a/Chromatics.Tests/Helpers/UpdateNotesTests.cs b/Chromatics.Tests/Helpers/UpdateNotesTests.cs index f370b39b..c44e8290 100644 --- a/Chromatics.Tests/Helpers/UpdateNotesTests.cs +++ b/Chromatics.Tests/Helpers/UpdateNotesTests.cs @@ -57,7 +57,7 @@ public void EmptyOrWhitespaceNotes_ReturnEmpty() { Assert.Equal(string.Empty, UpdateService.TrimNotesToOwnSection("", "4.3.26")); Assert.Equal(string.Empty, UpdateService.TrimNotesToOwnSection(" ", "4.3.26")); - Assert.Equal(string.Empty, UpdateService.TrimNotesToOwnSection(null, "4.3.26")); + Assert.Equal(string.Empty, UpdateService.TrimNotesToOwnSection(null!, "4.3.26")); } [Fact] diff --git a/Chromatics/Chromatics.csproj b/Chromatics/Chromatics.csproj index 7e22007b..1696a443 100644 --- a/Chromatics/Chromatics.csproj +++ b/Chromatics/Chromatics.csproj @@ -10,7 +10,7 @@ net10.0-windows10.0.19041.0 10.0.17763.0 Chromatics.Program - 4.3.31.0 + 4.3.33.0 Danielle Thompson