Skip to content

Releases: Zastai/MetaBrainz.MusicBrainz

6.1.0

20 Jan 16:20
Compare
Choose a tag to compare

🚀 New Features and Improvements

🐛 Bug Fixes

  • Rework request query string handling (#67) @Zastai

6.0.0

01 Jan 14:59
Compare
Choose a tag to compare

This version targets net6.0 and net8.0 only.

💥 Breaking Changes

  • More OAuth2 extensions (#61) @Zastai
  • Update support libraries (and drop QueryException) (#57) @Zastai

🚀 New Features and Improvements

📦 Dependency Updates

  • Bump MetaBrainz.Common.Json to v6.0.2 (#63) @Zastai
  • Update support libraries (and drop QueryException) (#57) @Zastai
  • Update MetaBrainz.Build.Sdk to v3.1.1 (#56) @Zastai
  • Update the build SDK to version 3.1.0 (#53) @Zastai
  • Bump JetBrains.Annotations from 2023.2.0 to 2023.3.0 (#50) @dependabot

📝 Documentation Updates

👻 Maintenance

  • Apply minor tweaks to the processing (#62) @Zastai

5.0.1

01 Nov 12:42
Compare
Choose a tag to compare

🐛 Bug Fixes

  • Handle coordinates in string form. (#49) @Zastai

📦 Dependency Updates

  • Bump JetBrains.Annotations from 2021.3.0 to 2023.2.0 (#47) @dependabot

5.0.0

29 Jan 20:59
Compare
Choose a tag to compare

💥 Breaking Changes

  • Make all async operations cancelable (#39) @Zastai
    • This adds an optional cancellation token to all async methods, breaking binary compatibility.
      Client code will need to be recompiled.

🚀 New Features and Improvements

  • Add a RateLimitInfo property to Query (#43) @Zastai
    • This enables manual request volume management while setting the request delay to 0.
  • Make all async operations cancelable (#39) @Zastai
  • Enumerable query results (#37) @Zastai
    • This adds new BrowseAll... and FindAll... methods, which return a new IStreamingQueryResults interface.
      That interface includes both IEnumerable and IAsyncEnumerabe, enabling easy bulk processing of browse/search results using foreach or await foreach.

📦 Dependency Updates

👻 Maintenance

4.0.1

16 Dec 20:17
Compare
Choose a tag to compare

🐛 Bug Fixes

  • Fix call forwarding from non-async to async (#35) @Zastai
    • The non-async browse methods returning releases or release groups ignored some arguments

4.0.0

16 Dec 17:19
Compare
Choose a tag to compare

💥 API Changes (Breaking)

  • OAuth2 is now sealed and IDisposable
  • OAuth2.DefaultWebSite was renamed to OAuth2.DefaultServer
  • OAuth2.WebSite was renamed to OAuth2.Server
  • Removed string constant: Query.UserAgentUrl
  • The Query constructor taking an optional string (a User-Agent header string) has been dropped
    • Instead, there is a zero-argument constructor, plus one taking one or more ProductInfoHeaderValue objects
  • Query.DefaultWebSite was renamed to Query.DefaultServer
  • Query.WebSite was renamed to Query.Server
  • The type of Query.DefaultUserAgent and Query.UserAgent has changed to IList<ProductInfoHeaderValue>
  • Query.RemoveFromCollectionAsyncAsync was renamed to Query.RemoveFromCollectionAsync
  • The QueryException constructor taking only a string was dropped (the cause in the two-argument constructor is now nullable and optional, so this change is source compatible)

🚀 API Changes (Non-Breaking)

  • New string constant: OAuth2.TokenRequestBodyType
  • OAuth2 has a new constructor, taking an HttpClient and a flag to indicate whether it should take ownership of it
  • New method: OAuth2.Close()
  • New methods: OAuth2.ConfigureClient() and OAuth2.ConfigureClientCreation()
  • The PartialDate constructor taking a string will now accept null
  • The PartialDate relational operators will now accept null for either operand
  • Query has new constructor overloads for application/version/contact, with version and contact now accepting null
  • Query has a new constructor, taking an HttpClient and a flag to indicate whether it should take ownership of it
  • New methods: Query.ConfigureClient() and Query.ConfigureClientCreation()
  • QueryException has new Code and Reason fields
  • IRecording now has a FirstReleaseDate property
  • IWork now has a Languages property

💥 Breaking Changes

🚀 New Features and Improvements

🐛 Bug Fixes

  • Drop [JsonConverter] from PartialDate (#29) @Zastai

📦 Dependency Updates

👻 Maintenance

3.0.2

21 May 09:49
Compare
Choose a tag to compare

v3.0.2 (2020-05-21)

GitHub Issues

  • #4: Browse results now deserialize correctly.

3.0.1

05 May 22:05
Compare
Choose a tag to compare

v3.0.1 (2020-05-05)

GitHub Issues

  • #3: null values for a recording or track's length caused
    exceptions, as did null values for the status ID of a release. Both cases should now be handled properly.

3.0.0

26 Apr 15:58
Compare
Choose a tag to compare

v3.0.0 (2020-04-26)

This release has a completely rewritten JSON backend, using custom converters for flexibility.

Search processing was changed significantly. Instead of every searchable entity having a Score property, searches now return lists of ISearchResult<T>, which contain the found item and its score. In addition, all the FindXXX() methods now take an optional simple parameter, to disable the advanced query syntax.

This release also adds proper support for genres, including lookups, using a new IGenre interface.

Note that there are several breaking API changes in this release (hence the major version bump).

API Additions

  • Entity Interface: IAliasedEntity
    • this contains the Aliases property, moved from INamedEntity and ITitledEntity
  • Entity Interface: IGenre (derives from ITag)
  • Property: IArea.SortName
  • Property: ILabel.SortName
  • Property: IRelationship.AttributeIds
  • Search Interface: ISearchAttribute<T>
    • this adds an Item property of type T to the Score provided by the base ISearchResult
  • Method: Query.LookupGenre()
  • Method: Query.LookupGenreAsync()

API Removals

  • Entity Interface: IUserRating
  • Entity Interface: IUserTag
  • Property: ICollection.ContentTypeText
    • ContentType will be set to EntityType.Unknown when an unknown value was found (which will then be stored in UnhandledProperties)
  • Property: IDisc.OffsetCount (the count is already available via Offsets)
  • Property: IDiscIdLookupResult.Id
  • Property: INamedEntity.Aliases (moved to IAliasedEntity)
  • Property: IRelationship.TargetTypeText
    • TargetType will be set to EntityType.Unknown when an unknown value was found (which will then be stored in UnhandledProperties)
  • Property: ITitledEntity.Aliases (moved to IAliasedEntity)
  • Search Interface: IFoundAnnotation
  • Search Interface: IFoundArea
  • Search Interface: IFoundArtist
  • Search Interface: IFoundCdStub
  • Search Interface: IFoundEvent
  • Search Interface: IFoundInstrument
  • Search Interface: IFoundLabel
  • Search Interface: IFoundPlace
  • Search Interface: IFoundRecording
  • Search Interface: IFoundRelease
  • Search Interface: IFoundReleaseGroup
  • Search Interface: IFoundSeries
  • Search Interface: IFoundTag
  • Search Interface: IFoundUrl
  • Search Interface: IFoundWork

API Changes

  • Global:
    • the MbId property was renamed to just Id
    • the Genres and UserGenres properties now return objects of type IGenre
    • the UserRating property now returns objects of type IRating (with a null vote count)
    • the UserTags property now returns objects of type ITag (with a null vote count)
  • IAlias:
    • the Name and Primary properties are no longer nullable
  • IAnnotation:
    • moved from MetaBrainz.MusicBrainz.Interfaces.Searches to MetaBrainz.MusicBrainz.Interfaces.Entities
    • the Type property now has type EntityType
      • it will be set to EntityType.Unknown when an unknown value was found (which will then be stored in UnhandledProperties)
  • IAuthorizationToken:
    • the AccessToken, RefreshToken and TokenType properties are no longer nullable
  • ICdStub:
    • the Id, Title and TrackCount properties are no longer nullable
  • IDisc:
    • the Id and Offsets properties are no longer nullable
  • IIsrc:
    • the Recordings and Value properties are no longer nullable
  • IRating:
    • the VoteCount property is now nullable
  • IRecording:
    • the Length property is now a (nullable) TimeSpan instead of an int
  • IRelationship:
    • the TargetType property is now nullable
  • renamed IRelease.BarCode to Barcode
  • ISearchResult is now an IJsonBasedObject
  • ISearchResults<T>.Created is now a (nullable) DateTimeOffset
  • ISimpleTrack:
    • the Length property is now a (nullable) TimeSpan instead of an int
  • ITag:
    • the Name property is no longer nullable
    • the VoteCount property is now nullable
  • ITrack:
    • the Length property is now a (nullable) TimeSpan instead of an int
  • the Query.FindXxx() methods:
    • return value is now ISearchResults<ISearchResult<IXxx>>
      • in other words, the score is now moved up into a wrapper object
    • extra optional parameter simple
      • if passed as true, the advanced query syntax is disabled, making for a simpler use case
    • the doc comments were updated and tweaked

Other Changes

  • a workaround for SEARCH-444 was added for URL entities too
  • minor tweaks to the OAuth2 class, slightly improving its async processing

Dependency Updates

  • JetBrainz.Annotations → 2020.1.0
  • MetaBrainz.Common.Json → 3.0.0
  • System.Text.Json → 4.7.1

2.0.1

17 Apr 15:22
Compare
Choose a tag to compare

v2.0.1 (2020-04-17)

GitHub Issues

Other Changes

  • QueryException now has its HelpLink field set to the contents of the help field in the JSON error response body.
  • Fixed a build issue causing the XML documentation to be missing from the NuGet package.