Skip to content

v1.0.0-rc.3

Pre-release
Pre-release
Compare
Choose a tag to compare
@sliekens sliekens released this 17 May 23:10
· 83 commits to main since this release

This is one of the last pre-releases with improvements to the public API of the code. All code has been meticulously reviewed and documented. I now consider it ready for general use. I don't expect to make any further design changes, only bug fixes.

Highlights

I invested heavily in improving the performance for this release.

Bulk queries now have better throughput. Previously, the rate limiter would wait for a response to be fully processed before allowing the next request to begin. Now, the next request is allowed to begin immediately after receiving a response. This way, the time it takes to process a response is no longer a factor in rate limiting.

Heap allocations in JSON parsers have been further reduced by using static lambdas, to avoid allocating many System.Func<T> and "DisplayClass" closure objects.

Methods which take a collection of IDs, like GetAchievementsByIds, now accept IEnumerable<T> instead of IReadOnlyCollection<T>, making it possible to compose requests with LINQ, without the use of ToList().

WvW objectives polymorphy has been reworked, because there were inconsistencies and name conflicts between owned objectives and the reference data for those owned objectives.

The API exceptions have been simplified. All API failures now throw HttpRequestException instead of InvalidOperationException. A subtype BadResponseException was introduced for responses that don't contain a success status code and a valid JSON document.

The NuGet package size was reduced by about 20% by eliminating duplicate code.

New features

Characters:

  • Added the ability to retrieve multiple characters by name at once

Training:

  • Added the ability to retrieve specializations by page numbers and page size

Bug fixes

Guilds:

  • Fixed a crash when retrieving a guild without a valid access token
  • Properties of Guild which require a valid access token can now be null

Miscellaneous:

  • Improved ReadAsStreamAsync cancellation in older .NET versions
  • Fixed ValueOnly() extension method could throw AggregateException instead of the real exception
  • Fixed missing Extensible<T> enum support for MountName, ProfessionName and RaceName

Breaking changes

Story journal:

  • Removed unused MissingMemberHandling argument from method GetCompletedStorySteps

WvW objectives:

  • Removed property Objective.Kind and instead introduced subtypes like Camp, Tower, Keep etc.

WvW matches:

  • Renamed record Objective to OwnedObjective to fix name conflicts
  • Did the same for all subtypes like OwnedCamp, OwnedTower, OwnedKeep etc.

Miscellaneous:

  • Changed ByIds methods to operate on IEnumerable<T> instead of IReadOnlyCollection<T>
  • Changed QueryBuilder to be always mutable since the immutability was never really needed
  • Moved Link header types to a new WebLinks namespace
  • Changed Gw2Client error handling to throw HttpRequestException instead of types likes InvalidOperationException

Full Changelog: v1.0.0-rc.2...v1.0.0-rc.3