Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Implementation of the [MusicBrainz](https://musicbrainz.org/) API version 2 for

- First class MusicBrainz entities `Artist`, `Label`, `ReleaseGroup`, `Release` and `Recording` supporting asynchronous `Get` (lookup by MBID), `Search` and `Browse`.
- Advanced `Search` using Lucene query syntax (see [search documentation](https://musicbrainz.org/doc/MusicBrainz_API/Search) for supported fields).
- Support for sub-queries in lookup requests (see MusicBrainz [documentation](https://musicbrainz.org/doc/MusicBrainz_API#inc=_arguments_which_affect_subqueries) and [wiki](https://wiki.musicbrainz.org/User:Nikki/ws/2) for a list of supported `inc` parameters).
- Support for sub-queries in lookup requests (see MusicBrainz [documentation](https://musicbrainz.org/doc/MusicBrainz_API#Subqueries) and [wiki](https://wiki.musicbrainz.org/User:Nikki/ws/2) for a list of supported `inc` parameters).
- Limited support for entity relationships.

More information about the MusicBrainz API can be found in the [documentation](https://musicbrainz.org/doc/MusicBrainz_API).
Expand Down
2 changes: 1 addition & 1 deletion assets/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Implementation of the [MusicBrainz](https://musicbrainz.org/) API version 2 for

- First class MusicBrainz entities `Artist`, `Label`, `ReleaseGroup`, `Release` and `Recording` supporting asynchronous `Get` (lookup by MBID), `Search` and `Browse`.
- Advanced `Search` using Lucene query syntax (see [search documentation](https://musicbrainz.org/doc/MusicBrainz_API/Search) for supported fields).
- Support for sub-queries in lookup requests (see MusicBrainz [documentation](https://musicbrainz.org/doc/MusicBrainz_API#inc=_arguments_which_affect_subqueries) and [wiki](https://wiki.musicbrainz.org/User:Nikki/ws/2) for a list of supported `inc` parameters).
- Support for sub-queries in lookup requests (see MusicBrainz [documentation](https://musicbrainz.org/doc/MusicBrainz_API#Subqueries) and [wiki](https://wiki.musicbrainz.org/User:Nikki/ws/2) for a list of supported `inc` parameters).
- Limited support for entity relationships.

More information about the MusicBrainz API can be found [here](https://musicbrainz.org/doc/MusicBrainz_API).
Expand Down
4 changes: 2 additions & 2 deletions src/Hqub.MusicBrainz.Client/Example5.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ private static async Task Browse(MusicBrainzClient client, string name)
Console.WriteLine();

// Show official albums.
foreach (var item in groups.Items.Where(g => IsOfficial(g)).OrderBy(g => g.FirstReleaseDate))
foreach (var item in groups.Items.Where(IsOfficial).OrderBy(g => g.FirstReleaseDate))
{
Console.WriteLine(" {0} - {1} {2} {3}", item.FirstReleaseDate.ToShortDate(),
item.Id, GetRating(item.Rating, 10), item.Title);
Expand All @@ -47,7 +47,7 @@ private static async Task Browse(MusicBrainzClient client, string name)
Console.WriteLine();

// Show compilations.
foreach (var item in groups.Items.Where(g => IsCompilation(g)).OrderBy(g => g.FirstReleaseDate))
foreach (var item in groups.Items.Where(IsCompilation).OrderBy(g => g.FirstReleaseDate))
{
Console.WriteLine(" {0} - {1} {2} {3}", item.FirstReleaseDate.ToShortDate(),
item.Id, GetRating(item.Rating, 10), item.Title);
Expand Down
2 changes: 1 addition & 1 deletion src/Hqub.MusicBrainz.Client/Example7.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace Hqub.MusicBrainz.Client

/// <summary>
/// Search for a label using <c>client.Labels.SearchAsync()</c> and lookup label details
/// like releases and related urls using <c>clients.Label.GetAsync()</c>.
/// like releases and related urls using <c>client.Labels.GetAsync()</c>.
/// </summary>
public class Example7
{
Expand Down
1 change: 0 additions & 1 deletion src/Hqub.MusicBrainz.Client/FetchTestData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ public static async Task Download(bool overwrite = false)
foreach (var item in Data)
{
await Get(client, item.Key, item.Value, overwrite);

}

Console.Write("Done. Press any key to quit.");
Expand Down
22 changes: 22 additions & 0 deletions src/Hqub.MusicBrainz.Client/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ private static async Task Main(string[] args)
{
await RunExamples();
}
catch (WebServiceException e)
{
Error(e);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Expand Down Expand Up @@ -66,5 +70,23 @@ private static void Header(string title)

Console.ForegroundColor = color;
}

private static void Error(WebServiceException e)
{
var color = Console.ForegroundColor;

Console.ForegroundColor = ConsoleColor.DarkRed;

Console.WriteLine();
Console.WriteLine("MusicBrainz web service reported an error");

Console.ForegroundColor = color;

Console.WriteLine(" Requested URL: " + e.Uri);
Console.WriteLine(" Status Code: " + e.StatusCode);
Console.WriteLine(" Message: " + e.Message);
Console.WriteLine();

}
}
}
4 changes: 2 additions & 2 deletions src/Hqub.MusicBrainz.Tests/Hqub.MusicBrainz.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@

<ItemGroup>
<PackageReference Include="NUnit" Version="4.4.0" />
<PackageReference Include="NUnit3TestAdapter" Version="5.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down
1 change: 1 addition & 0 deletions src/Hqub.MusicBrainz.Tests/ReleaseGetTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public void TestReleaseElements()
Assert.That(release.Date, Is.EqualTo("2012-06-11"));
Assert.That(release.Country, Is.EqualTo("US"));
Assert.That(release.Barcode, Is.EqualTo("809236126221"));
Assert.That(release.Packaging, Is.EqualTo("Cardboard/Paper Sleeve"));
}

[Test]
Expand Down
77 changes: 77 additions & 0 deletions src/Hqub.MusicBrainz.Tests/UrlBuilderTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
namespace Hqub.MusicBrainz.Tests
{
using NUnit.Framework;

public class UrlBuilder
{
private MusicBrainzClient client;

[OneTimeSetUp]
public void Init()
{
client = new MusicBrainzClient();
}

[Test]
public void TestLookupRequest()
{
var request = client.Releases.Get("00000000-0000-0000-0000-000000000000");

const string expected = "release/00000000-0000-0000-0000-000000000000?fmt=json";

Assert.That(request.ToString(), Is.EqualTo(expected));

request.Include("artists", "tags");

Assert.That(request.ToString(), Is.EqualTo(expected + "&inc=artists+tags"));
}

[Test]
public void TestSearchRequest()
{
var request = client.Releases.Search("search-string");

const string expected = "release?query=search-string&fmt=json";

Assert.That(request.ToString(), Is.EqualTo(expected));

request.Limit(10);

Assert.That(request.ToString(), Is.EqualTo(expected + "&limit=10"));

request.Offset(20);

Assert.That(request.ToString(), Is.EqualTo(expected + "&limit=10&offset=20"));
}

[Test]
public void TestBrowseRequest()
{
var request = client.Releases.Browse("label", "00000000-0000-0000-0000-000000000000");

const string expected = "release?label=00000000-0000-0000-0000-000000000000&fmt=json";

Assert.That(request.ToString(), Is.EqualTo(expected));

request.Limit(10);

Assert.That(request.ToString(), Is.EqualTo(expected + "&limit=10"));

request.Offset(20);

Assert.That(request.ToString(), Is.EqualTo(expected + "&limit=10&offset=20"));

request.Include("artist-credits", "tags");

Assert.That(request.ToString(), Is.EqualTo(expected + "&limit=10&offset=20&inc=artist-credits+tags"));

request.Type("album|ep");

Assert.That(request.ToString(), Is.EqualTo(expected + "&limit=10&offset=20&inc=artist-credits+tags&type=album|ep"));

request.Status("official");

Assert.That(request.ToString(), Is.EqualTo(expected + "&limit=10&offset=20&inc=artist-credits+tags&type=album|ep&status=official"));
}
}
}
6 changes: 6 additions & 0 deletions src/Hqub.MusicBrainz/Entities/Release.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ public class Release : IEntity
[DataMember(Name = "barcode")]
public string Barcode { get; set; }

/// <summary>
/// Gets or sets the packaging.
/// </summary>
[DataMember(Name = "packaging")]
public string Packaging { get; set; }

/// <summary>
/// Gets or sets the release-group.
/// </summary>
Expand Down
29 changes: 12 additions & 17 deletions src/Hqub.MusicBrainz/Hqub.MusicBrainz.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
<Authors>Boris Glebov, Christian Woltering</Authors>
<PackageProjectUrl>https://github.com/avatar29A/MusicBrainz</PackageProjectUrl>
<RepositoryUrl>https://github.com/avatar29A/MusicBrainz</RepositoryUrl>
<AssemblyVersion>3.2.0.0</AssemblyVersion>
<FileVersion>3.2.0.0</FileVersion>
<AssemblyVersion>4.0.0.0</AssemblyVersion>
<FileVersion>4.0.0.0</FileVersion>
<PackageTags>music musicbrainz brainz</PackageTags>
<Version>3.2.0</Version>
<Version>4.0.0</Version>
<AssemblyName>Hqub.MusicBrainz</AssemblyName>
<RootNamespace>Hqub.MusicBrainz</RootNamespace>
<Configurations>Debug;Release</Configurations>
Expand All @@ -27,23 +27,18 @@
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryType>git</RepositoryType>
<PackageReleaseNotes>
Hqub.MusicBrainz version 3 breaking changes:
Hqub.MusicBrainz version 4.0 breaking changes:

* Remove the obsolete static API: fix by using the MusicBrainzClient class.
* Remove the ".API" suffix from assembly and namespaces: fix by removing the ".API" suffix in your using statements.
* Consistently return QueryResult instead of specialized collection types from search and browse requests.
* Removal of Hqub.MusicBrainz.Entities.Collections namespace.
* Removal of Area.IsoCodes property (use Iso1Codes or Iso2Codes instead).

Version 3.1 changes:
Other changes in version 4.0:

* Remove net6.0 target and add net8.0
* Remove obsolete serialization support from WebServiceException
* Improve cache interface (add Contains(request) method)
* Improve fluent API requests (add ToString() method returning the URL path of the request)

Version 3.2 changes:

* Add support for label lookup, search and browse
* Add release events info to releases
* Improve documentation
* Introduce IEntity as base interface for all entity classes supported by services.
* Add support for Area relationships.
* Add support for Area lookup to MusicBrainz client.
* Add missing Release.Packaging property.
</PackageReleaseNotes>
</PropertyGroup>

Expand Down
2 changes: 1 addition & 1 deletion src/Hqub.MusicBrainz/MusicBrainzClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class ResponseError
{
/// <summary>The error message.</summary>
[DataMember(Name = "error")]
public string Message;
public string Message { get; set; }
}

internal async Task<T> GetAsync<T>(string url, CancellationToken ct = default)
Expand Down
4 changes: 2 additions & 2 deletions src/Hqub.MusicBrainz/Resources/Constants.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions src/Hqub.MusicBrainz/Resources/Constants.resx
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,10 @@
<value>-alias-primary_alias-area-arid-artist-artistaccent-alias-begin-beginarea-comment-country-end-endarea-ended-gender-ipi-isni-sortname-tag-type-</value>
</data>
<data name="BrowseStatus" xml:space="preserve">
<value>+official+promotion+bootleg+pseudo-release+</value>
<value>+official+promotion+bootleg+pseudo-release+withdrawn+cancelled+</value>
</data>
<data name="BrowseType" xml:space="preserve">
<value>+nat+album+single+ep+compilation+soundtrack+spokenword+interview+audiobook+live+remix+other+</value>
<value>+album+single+ep+broadcast+audiobook+compilation+demo+dj-mix+soundtrack+spokenword+interview+live+remix+other+</value>
</data>
<data name="LabelQueryParams" xml:space="preserve">
<value>-alias-area-begin-code-comment-country-end-ended-ipi-isni-label-labelaccent-laid-release_count-sortname-tag-type-</value>
Expand Down
Loading