Beispiel #1
0
        public ArtistResponse GetArtist(int id)
        {
            var artistExist = _context.Artist.Any(t => t.IdArtist.Equals(id));

            if (!artistExist)
            {
                throw new Exception("Nie ma Artysty");
            }
            else
            {
                var artist = _context.Artist.Where(e => e.IdArtist == id).Single();

                var artistEvent = _context.ArtistEvent.Where(e => e.IdArtist == id).ToList();

                List <Event> eventResults = new List <Event>();

                foreach (var eventItem in artistEvent)
                {
                    eventResults.Add(
                        _context.Event.Single(x => x.IdEvent.Equals(eventItem.IdEvent))
                        );
                }

                List <Event> sortList = new List <Event>(eventResults.OrderByDescending(e => e.StartDate));

                ArtistResponse artistResponse = new ArtistResponse {
                    IdArtist = artist.IdArtist,
                    Nickname = artist.Nickname,
                    Events   = sortList
                };
                return(artistResponse);
            }
        }
        public async Task <ActionResult <ArtistResponse> > Put(int id, [FromBody] ArtistResponse input,
                                                               CancellationToken ct = default)
        {
            try
            {
                if (input == null)
                {
                    return(BadRequest());
                }
                if (await _chinookSupervisor.GetArtistByIdAsync(id, ct) == null)
                {
                    return(NotFound());
                }

                var errors = JsonConvert.SerializeObject(ModelState.Values
                                                         .SelectMany(state => state.Errors)
                                                         .Select(error => error.ErrorMessage));
                Debug.WriteLine(errors);

                if (await _chinookSupervisor.UpdateArtistAsync(input, ct))
                {
                    return(Ok(input));
                }

                return(StatusCode(500));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex));
            }
        }
Beispiel #3
0
        public static async Task <List <SongListItem> > GetSongs(int id)
        {
            string          url      = string.Format(Constants.URLs.ArtistSongs, id);
            HttpWebRequest  request  = HttpWebRequest.Create(url) as HttpWebRequest;
            HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse;

            return(ArtistResponse.GetSongs(response));
        }
Beispiel #4
0
        public async Task <ArtistResponse> Get(int id)
        {
            var artist = await _artistCollection.GetArtistByIdAsync(id);

            if (artist == null)
            {
                throw new HttpException(HttpStatusCode.NotFound);
            }

            return(await ArtistResponse.CreateFromArtistAsync(artist));
        }
        public async Task <ArtistResponse> AddArtistAsync(ArtistResponse newArtistViewModel,
                                                          CancellationToken ct = default)
        {
            var artist = new Artist
            {
                Name = newArtistViewModel.Name
            };

            artist = await _artistRepository.AddAsync(artist, ct);

            newArtistViewModel.ArtistId = artist.ArtistId;
            return(newArtistViewModel);
        }
        public async Task <bool> UpdateArtistAsync(ArtistResponse artistViewModel,
                                                   CancellationToken ct = default)
        {
            var artist = await _artistRepository.GetByIdAsync(artistViewModel.ArtistId, ct);

            if (artist == null)
            {
                return(false);
            }
            artist.ArtistId = artistViewModel.ArtistId;
            artist.Name     = artistViewModel.Name;

            return(await _artistRepository.UpdateAsync(artist, ct));
        }
Beispiel #7
0
        public async Task <string> GetOrStoreArtistImageAsync(ArtistResponse lastFmArtist, string artistNameBeforeCorrect)
        {
            await using var db = new FMBotDbContext(ConfigData.Data.Database.ConnectionString);
            var artist = await db.Artists
                         .AsQueryable()
                         .FirstOrDefaultAsync(f => f.Name.ToLower() == lastFmArtist.Artist.Name.ToLower());

            var imageUrlToReturn = "";

            if (artist == null)
            {
                var spotifyArtist = await GetArtistFromSpotify(lastFmArtist.Artist.Name);

                var artistToAdd = new Artist
                {
                    Name      = lastFmArtist.Artist.Name,
                    LastFmUrl = lastFmArtist.Artist.Url,
                    Mbid      = lastFmArtist.Artist.Mbid
                };

                if (spotifyArtist != null)
                {
                    artistToAdd.SpotifyId = spotifyArtist.Id;

                    if (spotifyArtist.Images.Any())
                    {
                        artistToAdd.SpotifyImageUrl  = spotifyArtist.Images.OrderByDescending(o => o.Height).First().Url;
                        artistToAdd.SpotifyImageDate = DateTime.UtcNow;
                        imageUrlToReturn             = artistToAdd.SpotifyImageUrl;
                    }
                }

                if (!string.Equals(artistNameBeforeCorrect, lastFmArtist.Artist.Name, StringComparison.CurrentCultureIgnoreCase))
                {
                    artistToAdd.Aliases = new[] { artistNameBeforeCorrect };
                }

                await db.Artists.AddAsync(artistToAdd);

                await db.SaveChangesAsync();
            }
            else
            {
                if (!string.Equals(artistNameBeforeCorrect, lastFmArtist.Artist.Name, StringComparison.CurrentCultureIgnoreCase))
                {
                    if (artist.Aliases != null && artist.Aliases.Length > 0)
                    {
                        var aliases = artist.Aliases;
                        Array.Resize(ref aliases, aliases.Length + 1);
                        aliases[^ 1]   = artistNameBeforeCorrect;
        /// <summary>
        /// Attach Get Artist Toggle
        /// </summary>
        /// <param name="client">Spotify Sdk Client</param>
        /// <param name="response">Artist Response</param>
        public async static Task AttachGetArtistToggles(
            this ISpotifySdkClient client,
            ArtistResponse response)
        {
            if (client.Config.IsAttachGetArtistToggles && response != null)
            {
                // Toggle Favourites
                response.ToggleFavourite = await client.GetToggleAsync(
                    ToggleType.Favourites, response.Id, (byte)FavouriteType.Artist);

                // Toggle Follow
                response.ToggleFollow = await client.GetToggleAsync(
                    ToggleType.Follow, response.Id, (byte)FollowType.Artist);
            }
        }
Beispiel #9
0
        public IActionResult GetArtist(int id)
        {
            var artist = _service.GetArtist(id);

            if (artist == null)
            {
                return(NotFound());
            }

            ArtistResponse artistResponse = new ArtistResponse();

            artistResponse.Artist       = artist;
            artistResponse.Paintings    = _service.GetPaintingByArtist(id);
            artistResponse.ArtMovements = _service.GetArtMovementByArtist(id);
            return(Ok(artistResponse));
        }
        public async Task <ActionResult <ArtistResponse> > Post([FromBody] ArtistResponse input,
                                                                CancellationToken ct = default)
        {
            try
            {
                if (input == null)
                {
                    return(BadRequest());
                }

                return(StatusCode(201, await _chinookSupervisor.AddArtistAsync(input, ct)));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex));
            }
        }
Beispiel #11
0
        public async Task <ArtistResponse> Create([FromBody] CreateArtistRequest request)
        {
            var user = await _authenticatedUser.GetUserAsync();

            var artist = await user.GetArtistAsync();

            if (artist != null)
            {
                throw new HttpException(HttpStatusCode.Unauthorized);
            }
            var result = await _artistCollection.CreateArtistAsync(user.Id, request.Name);

            if (result == null)
            {
                throw new HttpException(HttpStatusCode.InternalServerError);
            }
            return(await ArtistResponse.CreateFromArtistAsync(result));
        }
Beispiel #12
0
        public ArtistResponse GetArtist(string artist)
        {
            string link     = $"{_host}.art?apiKey=660a4395f992ff67786584e238f501aa&q={artist}&limit=10";
            var    music    = new Music();
            var    musicApi = new ArtistResponse();

            try
            {
                var result = _client.GetAsync(link).Result;
                music               = result.Content.ReadAsAsync <Music>().Result;
                musicApi.Result     = music.response.Docs;
                musicApi.StatusCode = result.StatusCode;
            }
            catch (Exception)
            {
                musicApi.StatusCode = HttpStatusCode.BadGateway;
            }
            return(musicApi);
        }
Beispiel #13
0
        public IActionResult GetArtist([FromRoute] int id)
        {
            var artist = _context.Artist.Where(a => a.IdArtist == id)
                         .Include(a => a.ArtistEvent)
                         .ThenInclude(ae => ae.Event)
                         .FirstOrDefault();

            if (artist == null)
            {
                return(NotFound());
            }

            var events = new List <Event>();

            foreach (var ae in artist.ArtistEvent)
            {
                events.Add(ae.Event);
            }
            events = events.OrderByDescending(e => e.StartDate).ToList();


            var response = new ArtistResponse();

            response.IdArtist = artist.IdArtist;
            response.Nickname = artist.Nickname;

            var eventsResp = new List <EventResponse>();

            foreach (var e in events)
            {
                var er = new EventResponse();
                er.IdEvent   = e.IdEvent;
                er.Name      = e.Name;
                er.StartDate = e.StartDate;
                er.EndDate   = e.EndDate;

                eventsResp.Add(er);
            }
            response.Events = eventsResp;

            return(Ok(response));
        }
Beispiel #14
0
        /// <summary>
        /// Attach Get Artist Commands
        /// </summary>
        /// <param name="client">Spotify Sdk Client</param>
        /// <param name="response">Artist Response</param>
        /// <param name="overrideIsAttach">Override Is Attach?</param>
        public static void AttachGetArtistCommands(
            this ISpotifySdkClient client,
            ArtistResponse response,
            bool?overrideIsAttach = null)
        {
            var isAttach = GetConfig(client.Config.IsAttachGetArtistCommands, overrideIsAttach);

            if (isAttach && response != null)
            {
                // Artist Command
                if (client.CommandActions.Artist != null)
                {
                    response.Command = new GenericCommand <ArtistResponse>(
                        client.CommandActions.Artist);
                }
                // Add User Playback Command
                response.AddUserPlaybackCommand = new GenericCommand <IPlaybackResponse>(
                    client.AddUserPlaybackHandler);
            }
        }
Beispiel #15
0
        public ArtistResponse GetArtist(int id)
        {
            var artist = _context.Artists.Where(a => a.IdArtist == id).FirstOrDefault();

            if (artist == null)
            {
                return(null);
            }
            var events = (from e in _context.Events
                          join ae in _context.Artist_Events on e.IdEvent equals ae.IdEvent
                          where ae.IdArtist == artist.IdArtist
                          select e).ToList();
            var res = new ArtistResponse
            {
                Artist = artist,
                Events = events
            };

            return(res);
        }
Beispiel #16
0
        public Music GetRelatedMusic(string music)
        {
            var url      = $"{_host}.excerpt?apikey=8225b96502a09ad6758f6c4d593b4230s&q={music}&limit=10";
            var musics   = new Music();
            var musicApi = new ArtistResponse();

            try
            {
                var result = _client.GetAsync(url).Result;
                musics            = result.Content.ReadAsAsync <Music>().Result;
                musicApi.Result   = musics.response.Docs;
                musics.StatusCode = result.StatusCode;
            }
            catch (Exception)
            {
                musics.StatusCode = HttpStatusCode.BadGateway;
            }

            return(musics);
        }
        public ArtistResponse Search(string criteria, int pageNumber, int pageSize)
        {
            //Fetch the unfiltered list from the repository layer so obtain the count of the results
            var artistResults = ArtistRepository.SearchArtist(criteria);

            //Filtered and paginated by LINQ
            var artistListResults = artistResults.OrderBy(a => a.Lastname).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();

            //Initialize the response to be returned
            var artistResponse = new ArtistResponse {
                ArtistCollectionResponse = new List <ArtistCollectionResponse>()
            };

            //Build the response to be returned
            foreach (var artistResult in artistListResults)
            {
                artistResponse.ArtistCollectionResponse.Add(new ArtistCollectionResponse
                {
                    Name    = string.Concat(artistResult.Firstname.Trim(), " ", artistResult.Lastname.Trim()).Trim(),
                    Country = artistResult.CountryIso,
                    Alias   = new List <string>(AliasRepository.GetByArtistId(artistResult.Id).Select(a => a.Text).ToList())
                });
            }

            //Assign proper values to the 'page' properties
            artistResponse.NumberOfSearchResults = artistResults.Count();

            //Round up the number to prevent decimal.
            //Example if there are 5 item and 2 per page, there should be 3 pages. so that 2.5 pages should be rounded up to 3 pages
            var numberOfpages = (int)Math.Ceiling((double)artistResponse.NumberOfSearchResults / pageSize);

            artistResponse.Page          = pageNumber.ToString();
            artistResponse.PageSize      = pageSize.ToString();
            artistResponse.NumberOfPages = numberOfpages.ToString();

            return(artistResponse);
        }
Beispiel #18
0
        public async Task <IActionResult> Post(AddArtistRequest request)
        {
            ArtistResponse result = await _artistService.AddArtistAsync(request);

            return(CreatedAtAction(nameof(GetById), new { id = result.ArtistId }, null));
        }
Beispiel #19
0
        public async Task <string> GetOrStoreArtistImageAsync(ArtistResponse lastFmArtist, string artistNameBeforeCorrect)
        {
            await using var db = new FMBotDbContext(ConfigData.Data.Database.ConnectionString);
            var dbArtist = await db.Artists
                           .AsQueryable()
                           .FirstOrDefaultAsync(f => f.Name.ToLower() == lastFmArtist.Artist.Name.ToLower());

            var imageUrlToReturn = "";

            try
            {
                if (dbArtist == null)
                {
                    var spotifyArtist = await GetArtistFromSpotify(lastFmArtist.Artist.Name);

                    var artistToAdd = new Artist
                    {
                        Name      = lastFmArtist.Artist.Name,
                        LastFmUrl = lastFmArtist.Artist.Url,
                        Mbid      = lastFmArtist.Artist.Mbid
                    };

                    if (spotifyArtist != null)
                    {
                        artistToAdd.SpotifyId = spotifyArtist.Id;

                        if (spotifyArtist.Images.Any())
                        {
                            artistToAdd.SpotifyImageUrl  = spotifyArtist.Images.OrderByDescending(o => o.Height).First().Url;
                            artistToAdd.SpotifyImageDate = DateTime.UtcNow;
                            imageUrlToReturn             = artistToAdd.SpotifyImageUrl;
                        }
                    }

                    if (!string.Equals(artistNameBeforeCorrect, lastFmArtist.Artist.Name, StringComparison.CurrentCultureIgnoreCase))
                    {
                        artistToAdd.Aliases = new[] { artistNameBeforeCorrect };
                    }

                    await db.Artists.AddAsync(artistToAdd);

                    await db.SaveChangesAsync();
                }
                else
                {
                    if (!string.Equals(artistNameBeforeCorrect, lastFmArtist.Artist.Name, StringComparison.CurrentCultureIgnoreCase))
                    {
                        AddAliasToExistingArtist(artistNameBeforeCorrect, dbArtist);

                        db.Entry(dbArtist).State = EntityState.Modified;
                    }

                    if (dbArtist.SpotifyImageUrl == null || dbArtist.SpotifyImageDate < DateTime.UtcNow.AddMonths(-2))
                    {
                        var spotifyArtist = await GetArtistFromSpotify(lastFmArtist.Artist.Name);

                        if (spotifyArtist != null && spotifyArtist.Images.Any())
                        {
                            dbArtist.SpotifyImageUrl = spotifyArtist.Images.OrderByDescending(o => o.Height).First().Url;
                            imageUrlToReturn         = dbArtist.SpotifyImageUrl;
                        }

                        dbArtist.SpotifyImageDate = DateTime.UtcNow;
                        db.Entry(dbArtist).State  = EntityState.Modified;
                    }
                    else
                    {
                        imageUrlToReturn = dbArtist.SpotifyImageUrl;
                    }

                    await db.SaveChangesAsync();
                }

                return(!string.IsNullOrEmpty(imageUrlToReturn) ? imageUrlToReturn : null);
            }
            catch (Exception e)
            {
                Log.Error(e, "Something went wrong while retrieving artist image");
                return(null);
            }
        }
            public ArtistResponse Get(int id)
            {
                string baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority);

                using (var session = library.sessionFactory.OpenSession())
                {
                  var res = new ArtistResponse();
                  res.artist = session.Query<Artist>().FirstOrDefault(x=>x.Id == id);
                  if(res.artist == null){
                return null;
                  }

                  res.artist._links = new Dictionary<string, Link>();
                  res.artist._links.Add("self", new Link(baseUrl + "/api/Artist/" + res.artist.Id));
                  res.artist._links.Add("collection", new Link(baseUrl + "/api/Library/"));

                  res.albums = res.artist.Albums.ToList();

                  res.albums.ForEach(x =>
                  {
                x._links = new Dictionary<string, Link>();
                x._links.Add("self", new Link(baseUrl + "/api/Album/" + x.Id));
                  });

                  return res;
                }
            }
Beispiel #21
0
        public static string ArtistWithUserToStringList(IList <ArtistWithUser> artists, ArtistResponse artistResponse, int userId)
        {
            var reply = "";

            var artistsCount = artists.Count;

            if (artistsCount > 14)
            {
                artistsCount = 14;
            }

            for (var index = 0; index < artistsCount; index++)
            {
                var artist = artists[index];

                var nameWithLink = NameWithLink(artist);
                var playString   = GetPlaysString(artist.Playcount);

                if (index == 0)
                {
                    reply += $"👑  {nameWithLink}";
                }
                else
                {
                    reply += $" {index + 1}.  {nameWithLink} ";
                }
                if (artist.UserId != userId)
                {
                    reply += $"- **{artist.Playcount}** {playString}\n";
                }
                else
                {
                    reply += $"- **{artistResponse.Artist.Stats.Userplaycount}** {playString}\n";
                }
            }

            if (artists.Count == 1)
            {
                reply += $"\nNobody else has this artist in their top {Constants.ArtistsToIndex} artists.";
            }

            return(reply);
        }
Beispiel #22
0
        public static IList <ArtistWithUser> AddUserToIndexList(IList <ArtistWithUser> artists, User userSettings, IGuildUser user, ArtistResponse artist)
        {
            artists.Add(new ArtistWithUser
            {
                UserId         = userSettings.UserId,
                ArtistName     = artist.Artist.Name,
                Playcount      = Convert.ToInt32(artist.Artist.Stats.Userplaycount.Value),
                LastFMUsername = userSettings.UserNameLastFM,
                DiscordUserId  = userSettings.DiscordUserId,
                DiscordName    = user.Nickname ?? user.Username
            });

            return(artists.OrderByDescending(o => o.Playcount).ToList());
        }
Beispiel #23
0
        public async Task <IActionResult> GetById(Guid id)
        {
            ArtistResponse result = await _artistService.GetArtistAsync(new GetArtistRequest { Id = id });

            return(Ok(result));
        }