using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.PlaylistGeneration; namespace Sony.Filtr.API.ViewModels.v3 { [DataContract] public class TrackViewModel { public static TrackViewModel BuildTrackViewModel(ExtendedTrackSuggestion trackSuggestion, IEnumerable tags, List> artistMood = null, string relatedTo = null) { var track = trackSuggestion.ExtendedTrack; string imageId = null; if (trackSuggestion.Artist != null) { imageId = trackSuggestion.Artist.LastFMImageID; } var viewModel = new TrackViewModel { ArtistName = track.ArtistName, Title = track.Title, ArtistTags = tags.ToList(), Match = trackSuggestion.Score, ImageID = imageId, Duration = track.Duration, DeezerId = track.DeezerId, //SongType = track.SongType, //Danceability = track.Danceability, Mode = track.Mode, Tempo = (int?)track.Tempo, }; if (trackSuggestion.Artist != null && !string.IsNullOrWhiteSpace(trackSuggestion.Artist.ImageUrl)) { if (trackSuggestion.Artist.ImageUrl.StartsWith("http://img2-ak.lst.fm/i/u/")) viewModel.ImageUrl = trackSuggestion.Artist.ImageUrl.Replace("/64s/", "/252s/"); if (trackSuggestion.Artist.ImageUrl.StartsWith("http://userserve-ak.last.fm/serve/64/")) viewModel.ImageUrl = trackSuggestion.Artist.ImageUrl.Replace("/64/", "/252/"); } if (track.SpotifyLink != null) viewModel.Id = track.SpotifyLink.Uri; else if (track.DeezerId.HasValue) viewModel.Id = track.DeezerId.ToString(); if (track.ArtistFamiliarity.HasValue) viewModel.ArtistFamiliarity = (int) (track.ArtistFamiliarity*100); if (track.ArtistHotnesss.HasValue) viewModel.ArtistHotness = (int) (track.ArtistHotnesss*100); if (track.Energy.HasValue) viewModel.Energy = (int) (track.Energy*100); //if (track.Loudness.HasValue) // viewModel.Loudness = (int) (track.Loudness*100); if (track.Hotness.HasValue) viewModel.Hotness = (int) (track.Hotness*100); if (track.SpotifyLink != null) viewModel.SpotifyUri = track.SpotifyLink.Uri; if (artistMood != null) { viewModel.ArtistMoods = artistMood.Select(t => new TagViewModel() { ID = "tag-" + t.Item, Label = t.Item, Match = t.Weight, Type = "Mood" }).ToList(); } viewModel.RelatedTo = relatedTo; return viewModel; } [DataMember(Name = "id", Order = 0)] public string Id { get; set; } [DataMember(Name = "artistName", Order = 1)] public string ArtistName { get; set; } [DataMember(Name = "title", Order = 2)] public string Title { get; set; } //[DataMember(Name = "danceability", Order = 3)] //public double? Danceability { get; set; } [DataMember(Name = "energy", Order = 4)] public int? Energy { get; set; } //[DataMember(Name = "loudness", Order = 5)] //public double? Loudness { get; set; } [DataMember(Name = "mode", Order = 6)] public int? Mode { get; set; } [DataMember(Name = "tempo", Order = 7)] public int? Tempo { get; set; } [DataMember(Name = "hotness", Order = 8)] public int? Hotness { get; set; } [DataMember(Name = "spotifyUri", Order = 9)] public string SpotifyUri { get; set; } [DataMember(Name = "tags", Order = 10)] public List ArtistTags { get; set; } [DataMember(Name = "artistFamiliarity", Order = 11)] public int? ArtistFamiliarity { get; set; } //[DataMember(Name = "songType", Order = 12)] //public List SongType { get; set; } [DataMember(Name = "artistHotness", Order = 13)] public int? ArtistHotness { get; set; } [DataMember(Name = "match", Order = 14)] public double Match { get; set; } [DataMember(Name = "mood", Order = 15, EmitDefaultValue = false)] public List ArtistMoods { get; set; } [DataMember(Name = "imageId", Order = 16)] public string ImageID { get; set; } [DataMember(Name = "imageUrl", Order = 17)] public string ImageUrl { get; set; } [DataMember(Name = "duration", Order = 18, EmitDefaultValue = false)] public int Duration { get; set; } [DataMember(Name = "relatedTo", Order = 19, EmitDefaultValue = false)] public string RelatedTo { get; set; } [DataMember(Name = "deezerId", Order = 20, EmitDefaultValue = false)] public long? DeezerId { get; set; } } }