public static SimpleTrack FileLookup(MusicBrainzClient client, string artistName, string albumName, string trackName, int trackNumber, int duration) { Rdf rdf = new Rdf(); SimpleTrack track = null; if (client != null) { client.QueryDepth = 4; if (!client.Query(rdf.QueryFileInfoLookup, new string[] { string.Empty, // trmid artistName, albumName, trackName, trackNumber.ToString(System.Globalization.CultureInfo.InvariantCulture), duration.ToString(System.Globalization.CultureInfo.InvariantCulture), string.Empty, // filename string.Empty, // artistid string.Empty, // albumid string.Empty })) { //"File Lookup Query unsuccessful" throw new ApplicationException("File Lookup Query unsuccessful"); } client.Select(rdf.SelectRewind); if (!client.Select(rdf.SelectLookupResult, 1)) { // "Selection failed" throw new ApplicationException("Selection failed"); } track = new SimpleTrack(); string result_type = client.GetId(client.GetResultData(rdf.ExpressionLookupGetType)); switch (result_type) { case "AlbumTrackResult": client.Select(rdf.SelectLookupResultTrack); //track.Title = client.GetResultData(rdf.ExpressionTrackGetTrackName); track.Title = client.GetResultData(rdf.ExpressionTrackGetTrackName); track.Artist = client.GetResultData(rdf.ExpressionTrackGetArtistName); int length = (client.GetResultInt(rdf.ExpressionTrackGetTrackDuration) / 1000); track.Duration = new TimeSpan(0, 0, 0, 0, length); //track.Length = client.GetResultInt(rdf.ExpressionTrackGetTrackDuration); client.Select(rdf.SelectBack); client.Select(rdf.SelectLookupResultAlbum, 1); track.Album = client.GetResultData(rdf.ExpressionAlbumGetAlbumName); track.TrackCount = client.GetResultInt(rdf.ExpressionAlbumGetNumberTracks); track.Number = client.GetResultInt(rdf.ExpressionAlbumGetTrackNumber); track.Asin = client.GetResultData(rdf.ExpressionAlbumGetAmazonAsin); client.Select(rdf.SelectBack); break; case "AlbumResult": client.Select(rdf.SelectLookupResultAlbum, 1); track.TrackCount = client.GetResultInt(rdf.ExpressionAlbumGetNumberTracks); track.Album = client.GetResultData(rdf.ExpressionAlbumGetAlbumName); track.Asin = client.GetResultData(rdf.ExpressionAlbumGetAmazonAsin); string track_id = client.GetResultData(rdf.ExpressionAlbumGetTrackId, trackNumber); if (client.Query(rdf.QueryGetTrackById, new string[] { client.GetId(track_id) })) { client.Select(rdf.SelectTrack, 1); //track.Title = client.GetResultData(rdf.ExpressionTrackGetTrackName); track.Title = client.GetResultData(rdf.ExpressionTrackGetTrackName); track.Artist = client.GetResultData(rdf.ExpressionTrackGetArtistName); track.Number = client.GetResultInt(rdf.ExpressionTrackGetTrackNumber); track.Length = client.GetResultInt(rdf.ExpressionTrackGetTrackDuration); client.Select(rdf.SelectBack); } client.Select(rdf.SelectBack); break; default: //"Invalid result type: " + result_type throw new ApplicationException("Invalid result type: " + result_type); } } return(track); }
public static SimpleTrack FileLookup(MusicBrainzClient client, string artistName, string albumName, string trackName, int trackNumber, int duration) { Rdf rdf = new Rdf(); SimpleTrack track = null; if (client != null) { client.QueryDepth = 4; if (!client.Query(rdf.QueryFileInfoLookup, new string[] { string.Empty, // trmid artistName, albumName, trackName, trackNumber.ToString(System.Globalization.CultureInfo.InvariantCulture), duration.ToString(System.Globalization.CultureInfo.InvariantCulture), string.Empty, // filename string.Empty, // artistid string.Empty, // albumid string.Empty })) { //"File Lookup Query unsuccessful" throw new ApplicationException("File Lookup Query unsuccessful"); } client.Select(rdf.SelectRewind); if (!client.Select(rdf.SelectLookupResult, 1)) { // "Selection failed" throw new ApplicationException("Selection failed"); } track = new SimpleTrack(); string result_type = client.GetId(client.GetResultData(rdf.ExpressionLookupGetType)); switch(result_type) { case "AlbumTrackResult": client.Select(rdf.SelectLookupResultTrack); //track.Title = client.GetResultData(rdf.ExpressionTrackGetTrackName); track.Title = client.GetResultData(rdf.ExpressionTrackGetTrackName); track.Artist = client.GetResultData(rdf.ExpressionTrackGetArtistName); int length = (client.GetResultInt(rdf.ExpressionTrackGetTrackDuration) / 1000); track.Duration = new TimeSpan(0, 0, 0, 0, length); //track.Length = client.GetResultInt(rdf.ExpressionTrackGetTrackDuration); client.Select(rdf.SelectBack); client.Select(rdf.SelectLookupResultAlbum, 1); track.Album = client.GetResultData(rdf.ExpressionAlbumGetAlbumName); track.TrackCount = client.GetResultInt(rdf.ExpressionAlbumGetNumberTracks); track.Number = client.GetResultInt(rdf.ExpressionAlbumGetTrackNumber); track.Asin = client.GetResultData(rdf.ExpressionAlbumGetAmazonAsin); client.Select(rdf.SelectBack); break; case "AlbumResult": client.Select(rdf.SelectLookupResultAlbum, 1); track.TrackCount = client.GetResultInt(rdf.ExpressionAlbumGetNumberTracks); track.Album = client.GetResultData(rdf.ExpressionAlbumGetAlbumName); track.Asin = client.GetResultData(rdf.ExpressionAlbumGetAmazonAsin); string track_id = client.GetResultData(rdf.ExpressionAlbumGetTrackId, trackNumber); if (client.Query(rdf.QueryGetTrackById, new string[] { client.GetId(track_id) })) { client.Select(rdf.SelectTrack, 1); //track.Title = client.GetResultData(rdf.ExpressionTrackGetTrackName); track.Title = client.GetResultData(rdf.ExpressionTrackGetTrackName); track.Artist = client.GetResultData(rdf.ExpressionTrackGetArtistName); track.Number = client.GetResultInt(rdf.ExpressionTrackGetTrackNumber); track.Length = client.GetResultInt(rdf.ExpressionTrackGetTrackDuration); client.Select(rdf.SelectBack); } client.Select(rdf.SelectBack); break; default: //"Invalid result type: " + result_type throw new ApplicationException("Invalid result type: " + result_type); } } return track; }