using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Contracts.Entities.Genre; using Sony.Filtr.Search.SearchItems; namespace Sony.Filtr.API.ViewModels.v3 { [DataContract] [Serializable] public class ReleaseViewModel { public const int Version = 2; public static ReleaseViewModel Build(Release release, int index, List tags, string baseUrl) { var viewModel = new ReleaseViewModel(); viewModel.Id = release.ID; viewModel.ArtistName = release.ArtistName; viewModel.Artists = new List() {release.ArtistName}; if (!string.IsNullOrWhiteSpace(release.ArtistUri)) { var artistLink = new SpotifyLink(release.ArtistUri); viewModel.ArtistId = artistLink.ExtractArtistID(); } viewModel.TrackName = release.TrackName; if (release.ReleaseType == ReleaseType.Single && release.TrackLink != null) { viewModel.Uri = release.TrackLink.Uri; viewModel.Name = release.TrackName; } else { viewModel.Uri = release.AlbumLink.Uri; viewModel.Name = release.AlbumName; } viewModel.AlbumName = release.AlbumName; if (release.AlbumLink != null) { viewModel.AlbumId = release.AlbumLink.ExtractAlbumID(); } if (release.TrackLink != null) { viewModel.TrackId = release.TrackLink.ExtractTrackID(); } viewModel.Tags = tags; viewModel.Index = index + 1; //Start index at 1 viewModel.ReleaseType = release.ReleaseType; if (baseUrl != null) { if (!string.IsNullOrWhiteSpace(release.ImageFilename)) viewModel.ImageUrl = baseUrl + "/" + release.ImageFilename; } if (release.Energy.HasValue) viewModel.Energy = (int)(release.Energy.Value * 100); if (release.Hotness.HasValue) viewModel.Hotness = (int)(release.Hotness.Value * 100); //if (release.Danceability.HasValue) // Danceability = release.Danceability.Value; if (release.Tempo.HasValue) viewModel.Tempo = (int)release.Tempo.Value; return viewModel; } public static ReleaseViewModel Build(DeezerRelease release, int index, IEnumerable> tags, Dictionary genreCategories) { var viewModel = new ReleaseViewModel() { Id = release.ID, ArtistName = release.ArtistName, ArtistId = release.ArtistId, ReleaseType = release.ReleaseType, TrackId = release.TrackId, AlbumId = release.AlbumID, AlbumName = release.AlbumName, TrackName = release.TrackName, Artists = new List() {release.ArtistName}, }; if (!string.IsNullOrWhiteSpace(release.ImageFilename)) viewModel.ImageUrl = ForceHttps(release.ImageFilename + "?size=big"); if (release.ReleaseType == ReleaseType.Single) { viewModel.Name = release.TrackName; viewModel.Uri = string.Format("https://www.deezer.com/track/{0}", release.TrackId); } else { viewModel.Name = release.TrackName; viewModel.Uri = string.Format("https://www.deezer.com/album/{0}", release.AlbumID); } if (release.Energy.HasValue) viewModel.Energy = (int)(release.Energy * 100); if (release.Hotness.HasValue) viewModel.Hotness = (int)(release.Hotness * 100); if (release.Tempo.HasValue) viewModel.Tempo = (int)release.Tempo; viewModel.Index = index + 1; viewModel.ReleaseType = release.ReleaseType; viewModel.Tags = tags.Select(p => p.Item).Select(t => new TagViewModel(t, genreCategories)).ToList(); //if (release.Danceability.HasValue) // viewModel.Danceability = (int)(release.Danceability * 100); return viewModel; } private static string ForceHttps(string url) { //We force https. var uriBuilder = new UriBuilder(url) { Scheme = "https", Port = -1 }; return uriBuilder.ToString(); } [DataMember(Name = "id")] public int Id { get; set; } [DataMember(Name = "uri")] public string Uri { get; set; } [DataMember(Name = "tags")] public List Tags { get; set; } [DataMember(Name = "name")] public string Name { get; set; } [DataMember(Name = "releaseType", EmitDefaultValue = false)] public ReleaseType ReleaseType { get; set; } [DataMember(Name = "artistName", EmitDefaultValue = false)] public string ArtistName { get; set; } [DataMember(Name = "artists", EmitDefaultValue = false)] public List Artists { get; set; } [DataMember(Name = "artistId", EmitDefaultValue = false)] public string ArtistId { get; set; } [DataMember(Name = "trackId", EmitDefaultValue = false)] public string TrackId { get; set; } [DataMember(Name = "trackName", EmitDefaultValue = false)] public string TrackName { get; set; } [DataMember(Name = "index", EmitDefaultValue = false)] public int Index { get; set; } [DataMember(Name = "imageUrl", EmitDefaultValue = false)] public string ImageUrl { get; set; } [DataMember(Name = "energy", EmitDefaultValue = false)] public int Energy { get; set; } [DataMember(Name = "hotness", EmitDefaultValue = false)] public int Hotness { get; set; } [DataMember(Name = "tempo", EmitDefaultValue = false)] public int Tempo { get; set; } [DataMember(Name = "albumName", EmitDefaultValue = false)] public string AlbumName { get; set; } [DataMember(Name = "albumId", EmitDefaultValue = false)] public string AlbumId { get; set; } //public static ReleaseViewModel Build(ReleaseSearchIndexItem release) //{ // var viewModel = new ReleaseViewModel() // { // AlbumId = release.AlbumLink, // AlbumName = release.AlbumName, // Name = release.Name, // TrackId = null, // ArtistId = null, // //Index = null, // ImageUrl = release.ImageUrl, // Uri = release.PlaylistUri, // //Id = release., // ArtistName = release.ArtistName, // ReleaseType = release.ReleaseType, // TrackName = release.TrackName, // }; // //if (release.Tags != null) // // viewModel.Tags = release.Tags.Select(t=> ) // if (release.Tempo != null) // viewModel.Tempo = (int)release.Tempo.Value; // if (release.Energy.HasValue) // viewModel.Energy = (int)(release.Energy.Value * 100); // if (release.Hotness.HasValue) // viewModel.Hotness = (int)(release.Hotness.Value * 100); // return viewModel; //} } }