using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using Lastfm.Services; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.Core.EditorialPlaylists; using Sony.Filtr.Search.SearchItems; using Sony.Filtr.Utility; namespace Sony.Filtr.API.ViewModels.v3 { [DataContract] [Serializable] public class PlaylistViewModel { public const int Version = 4; public PlaylistViewModel() { } public static PlaylistViewModel BuildViewModel(EditorialPlaylistWithStats playlistStat, List tags, List artists, List categories, string baseUrl, EditorialPlaylistAttributes attributes, int? popularity = null) { PlaylistViewModel playlistViewModel = new PlaylistViewModel(); var playlist = playlistStat.Playlist; playlistViewModel.Id = playlist.ID; playlistViewModel.Slug = TextUtility.GenerateSlug(playlist.Name ?? playlist.DisplayName); playlistViewModel.Uri = playlist.SpotifyLink.Uri; playlistViewModel.Tags = tags; playlistViewModel.Name = playlist.Name; //playlistViewModel.DisplayName = playlist.DisplayName ?? playlist.Name; playlistViewModel.Artists = artists.Where(a=> Math.Abs(a.Match - 1) < 0.1).Take(10).Select(a=> a.Artist.Name).ToList(); //playlistViewModel.Artists = artists.Select(a => a.Artist.Name).Take(10).ToList(); playlistViewModel.Description = playlist.SpotifyDescription; playlistViewModel.Categories = categories; playlistViewModel.CountryCode = playlist.CountryCode; playlistViewModel.Popularity = popularity; string headerImageUrl = null; if (!string.IsNullOrWhiteSpace(playlist.HeaderImageUrl)) headerImageUrl = baseUrl + "/" + playlist.HeaderImageUrl; string spotifyImageUrl = null; if (!string.IsNullOrWhiteSpace(playlist.SpotifyImageFileName)) spotifyImageUrl = baseUrl + "/" + playlist.SpotifyImageFileName; playlistViewModel.ImageUrl = spotifyImageUrl; if (playlist.ThemeActive) { playlistViewModel.Theme = new ThemeViewModel() { Active = playlist.ThemeActive, //BackgroundColor = playlist.BackgroundColor, //HeaderBackgroundColor = playlist.HeaderBackgroundColor, HeaderBackgroundImage = headerImageUrl, //TextColor = playlist.TextColor, AccentColor = playlist.AccentColor, }; } playlistViewModel.Followers = playlistStat.LatestSubscribers; playlistViewModel.PriorityLevel = playlist.PriorityLevel; if (attributes != null) { if (attributes.TrackDuration.HasValue) playlistViewModel.TrackDuration = (int)attributes.TrackDuration; if (attributes.TrackCount.HasValue) playlistViewModel.TracksCount = (int)attributes.TrackCount.Value; if (attributes.TracksAddedThisWeek.HasValue) playlistViewModel.TracksAddedThisWeek = (int)attributes.TracksAddedThisWeek.Value; if (attributes.TracksAddedToday.HasValue) playlistViewModel.TracksAddedToday = (int)attributes.TracksAddedToday.Value; if (attributes.Changed.HasValue) playlistViewModel.TracksLastAdded = attributes.Changed.Value.ToString("O"); if (attributes.Energy.HasValue) playlistViewModel.Energy = (int)(attributes.Energy.Value * 100); if (attributes.Hotness.HasValue) playlistViewModel.Hotness = (int)(attributes.Hotness.Value * 100); if (attributes.Tempo.HasValue) playlistViewModel.Tempo = (int)attributes.Tempo.Value; if (attributes.FollowerChange7.HasValue) playlistViewModel.FollowerChange7 = attributes.FollowerChange7.Value; if (attributes.FollowerChange15.HasValue) playlistViewModel.FollowerChange15 = attributes.FollowerChange15.Value; if (attributes.FollowerChange30.HasValue) playlistViewModel.FollowerChange30 = attributes.FollowerChange30.Value; } return playlistViewModel; } //public static PlaylistViewModel BuildViewModel(PlaylistSearchIndexItem playlistSearchIndexItem) //{ // PlaylistViewModel playlistViewModel = new PlaylistViewModel(); // playlistViewModel.Id = playlistSearchIndexItem.Id; // playlistViewModel.Slug = TextUtility.GenerateSlug(playlistViewModel.Name); // playlistViewModel.Uri = playlistSearchIndexItem.PlaylistUri; // playlistViewModel.Tags = playlistSearchIndexItem.Tags.Select(t=> new TagViewModel() // { // Label = t, // Match = 100, // }).ToList(); // playlistViewModel.Name = playlistSearchIndexItem.Name; // //playlistViewModel.DisplayName = playlist.DisplayName ?? playlist.Name; // playlistViewModel.Artists = playlistSearchIndexItem.Artists.Take(10).ToList(); // playlistViewModel.Description = playlistSearchIndexItem.Description; // playlistViewModel.Categories = playlistSearchIndexItem.Categories.Select(); // playlistViewModel.CountryCode = playlist.CountryCode; // playlistViewModel.Popularity = popularity; // string headerImageUrl = null; // if (!string.IsNullOrWhiteSpace(playlist.HeaderImageUrl)) // headerImageUrl = baseUrl + "/" + playlist.HeaderImageUrl; // string spotifyImageUrl = null; // if (!string.IsNullOrWhiteSpace(playlist.SpotifyImageFileName)) // spotifyImageUrl = baseUrl + "/" + playlist.SpotifyImageFileName; // playlistViewModel.ImageUrl = spotifyImageUrl; // if (playlist.ThemeActive) // { // playlistViewModel.Theme = new ThemeViewModel() // { // Active = playlist.ThemeActive, // //BackgroundColor = playlist.BackgroundColor, // //HeaderBackgroundColor = playlist.HeaderBackgroundColor, // HeaderBackgroundImage = headerImageUrl, // //TextColor = playlist.TextColor, // AccentColor = playlist.AccentColor, // }; // } // playlistViewModel.Followers = playlistStat.LatestSubscribers; // playlistViewModel.PriorityLevel = playlist.PriorityLevel; // if (attributes != null) // { // if (attributes.TrackDuration.HasValue) // playlistViewModel.TrackDuration = (int)attributes.TrackDuration; // if (attributes.TrackCount.HasValue) // playlistViewModel.TracksCount = (int)attributes.TrackCount.Value; // if (attributes.TracksAddedThisWeek.HasValue) // playlistViewModel.TracksAddedThisWeek = (int)attributes.TracksAddedThisWeek.Value; // if (attributes.TracksAddedToday.HasValue) // playlistViewModel.TracksAddedToday = (int)attributes.TracksAddedToday.Value; // if (attributes.Changed.HasValue) // playlistViewModel.TracksLastAdded = attributes.Changed.Value.ToString("O"); // if (attributes.Energy.HasValue) // playlistViewModel.Energy = (int)(attributes.Energy.Value * 100); // if (attributes.Hotness.HasValue) // playlistViewModel.Hotness = (int)(attributes.Hotness.Value * 100); // if (attributes.Tempo.HasValue) // playlistViewModel.Tempo = (int)attributes.Tempo.Value; // if (attributes.FollowerChange7.HasValue) // playlistViewModel.FollowerChange7 = attributes.FollowerChange7.Value; // if (attributes.FollowerChange15.HasValue) // playlistViewModel.FollowerChange15 = attributes.FollowerChange15.Value; // if (attributes.FollowerChange30.HasValue) // playlistViewModel.FollowerChange30 = attributes.FollowerChange30.Value; // } // return playlistViewModel; //} public static PlaylistViewModel BuildViewModel(Contracts.Entities.EditorialPlaylistNew playlist) { PlaylistViewModel playlistViewModel = new PlaylistViewModel(); var deezerPlaylist = playlist.DeezerPlaylist; playlistViewModel.Id = playlist.ID; playlistViewModel.Slug = TextUtility.GenerateSlug(playlist.DisplayName); playlistViewModel.Uri = deezerPlaylist.DeezerId.ToString(); //playlistViewModel.Tags = tags; playlistViewModel.Name = deezerPlaylist.Title; //playlistViewModel.DisplayName = playlist.DisplayName; //playlistViewModel.Artists = artists.Take(10).ToList(); //if (detailedViewModels) //{ // playlistViewModel.Description = playlist.SpotifyDescription; //} //playlistViewModel.Categories = categories; //playlistViewModel.CountryCode = playlist.CountryCode; //playlistViewModel.Popularity = popularity; string headerImageUrl = null; if (playlist.Theme != null && !string.IsNullOrWhiteSpace(playlist.Theme.HeaderImageUrl)) headerImageUrl = playlist.Theme.HeaderImageUrl; string spotifyImageUrl = null; if (!string.IsNullOrWhiteSpace(deezerPlaylist.Picture)) spotifyImageUrl = deezerPlaylist.Picture; playlistViewModel.ImageUrl = spotifyImageUrl; if (playlist.Theme != null && playlist.Theme.ThemeActive) { playlistViewModel.Theme = new ThemeViewModel() { Active = playlist.Theme.ThemeActive, //BackgroundColor = playlist.BackgroundColor, //HeaderBackgroundColor = playlist.HeaderBackgroundColor, HeaderBackgroundImage = playlist.Theme.HeaderImageUrl, //TextColor = playlist.TextColor, AccentColor = playlist.Theme.AccentColor, }; } //playlistViewModel.Followers = playlistStat.LatestSubscribers; //playlistViewModel.PriorityLevel = playlist.PriorityLevel; //if (playlist.DeezerPlaylist != null) //{ // if (attributes.TrackDuration.HasValue) // playlistViewModel.TrackDuration = (int)attributes.TrackDuration; // if (attributes.TrackCount.HasValue) // playlistViewModel.TracksCount = (int)attributes.TrackCount.Value; // if (attributes.TracksAddedThisWeek.HasValue) // playlistViewModel.TracksAddedThisWeek = (int)attributes.TracksAddedThisWeek.Value; // if (attributes.TracksAddedToday.HasValue) // playlistViewModel.TracksAddedToday = (int)attributes.TracksAddedToday.Value; // if (attributes.Changed.HasValue) // playlistViewModel.TracksLastAdded = attributes.Changed.Value.ToString("O"); // if (attributes.Energy.HasValue) // playlistViewModel.Energy = (int)(attributes.Energy.Value * 100); // if (attributes.Hotness.HasValue) // playlistViewModel.Hotness = (int)(attributes.Hotness.Value * 100); // if (attributes.Tempo.HasValue) // playlistViewModel.Tempo = (int)attributes.Tempo.Value; // if (attributes.FollowerChange7.HasValue) // playlistViewModel.FollowerChange7 = attributes.FollowerChange7.Value; // if (attributes.FollowerChange15.HasValue) // playlistViewModel.FollowerChange15 = attributes.FollowerChange15.Value; // if (attributes.FollowerChange30.HasValue) // playlistViewModel.FollowerChange30 = attributes.FollowerChange30.Value; //} return playlistViewModel; } [DataMember(Name = "id")] public int Id { get; set; } [DataMember(Name = "slug")] public string Slug { get; set; } [DataMember(Name = "uri")] public string Uri { get; set; } [DataMember(Name = "categories")] public List Categories { get; set; } [DataMember(Name = "tags")] public List Tags { get; set; } [DataMember(Name = "artists")] public List Artists { get; set; } [DataMember(Name = "description", EmitDefaultValue = false)] public string Description { get; set; } [DataMember(Name = "name")] public string Name { get; set; } [DataMember(Name = "countryCode")] public string CountryCode { get; set; } [DataMember(Name = "match", EmitDefaultValue = false)] public int Match { get; set; } [DataMember(Name = "theme", EmitDefaultValue = false)] public ThemeViewModel Theme { get; set; } [DataMember(Name = "followers", EmitDefaultValue = false)] public uint Followers { get; set; } [DataMember(Name = "priorityLevel", EmitDefaultValue = false)] public int PriorityLevel { get; set; } [DataMember(Name = "imageUrl", EmitDefaultValue = false)] public string ImageUrl { get; set; } //[DataMember(Name = "displayName", EmitDefaultValue = false)] //public string DisplayName { get; set; } [DataMember(Name = "tracksAddedThisWeek", EmitDefaultValue = false)] public int TracksAddedThisWeek { get; set; } [DataMember(Name = "tracksAddedToday", EmitDefaultValue = false)] public int TracksAddedToday { get; set; } [DataMember(Name = "trackDuration", EmitDefaultValue = false)] public int TrackDuration { get; set; } [DataMember(Name = "tracksCount", EmitDefaultValue = false)] public int TracksCount { get; set; } [DataMember(Name = "tracksLastAdded", EmitDefaultValue = false)] public string TracksLastAdded { 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 = "followerChange7", EmitDefaultValue = false)] public long FollowerChange7 { get; set; } [DataMember(Name = "followerChange15", EmitDefaultValue = false)] public long FollowerChange15 { get; set; } [DataMember(Name = "followerChange30", EmitDefaultValue = false)] public long FollowerChange30 { get; set; } [DataMember(Name = "popularity", EmitDefaultValue = false)] public int? Popularity { get; set; } } }