Ejemplo n.º 1
0
 public static string ResponseTrackToString(ResponseTrack track)
 {
     return($"{track.Name}\n" +
            $"By **{track.Artist.Name}**" +
            (track.Album == null || string.IsNullOrWhiteSpace(track.Album.Title)
                ? "\n"
                : $" | *{track.Album.Title}*\n"));
 }
Ejemplo n.º 2
0
        public static string ResponseTrackToLinkedString(ResponseTrack track)
        {
            if (track.Url.IndexOfAny(new[] { '(', ')' }) >= 0)
            {
                return(ResponseTrackToString(track));
            }

            return($"[{track.Name}]({track.Url})\n" +
                   $"By **{track.Artist.Name}**" +
                   (track.Album == null || string.IsNullOrWhiteSpace(track.Album.Title)
                       ? "\n"
                       : $" | *{track.Album.Title}*\n"));
        }
Ejemplo n.º 3
0
        public async Task <Track> GetOrStoreTrackAsync(ResponseTrack track)
        {
            await using var db = new FMBotDbContext(ConfigData.Data.Database.ConnectionString);
            var dbTrack = await db.Tracks
                          .AsQueryable()
                          .FirstOrDefaultAsync(f => f.Name.ToLower() == track.Name.ToLower() && f.ArtistName.ToLower() == track.Artist.Name.ToLower());

            if (dbTrack == null)
            {
                var trackToAdd = new FMBot.Persistence.Domain.Models.Track
                {
                    Name       = track.Name,
                    AlbumName  = track.Album?.Title,
                    ArtistName = track.Artist?.Name
                };

                var artist = await db.Artists
                             .AsQueryable()
                             .FirstOrDefaultAsync(f => f.Name.ToLower() == track.Artist.Name.ToLower());

                if (artist != null)
                {
                    trackToAdd.Artist = artist;
                }

                var spotifyTrack = await GetTrackFromSpotify(track.Name, track.Artist.Name.ToLower());

                if (spotifyTrack != null)
                {
                    trackToAdd.SpotifyId  = spotifyTrack.Id;
                    trackToAdd.DurationMs = spotifyTrack.DurationMs;

                    var audioFeatures = await GetAudioFeaturesFromSpotify(spotifyTrack.Id);

                    if (audioFeatures != null)
                    {
                        trackToAdd.Key   = audioFeatures.Key;
                        trackToAdd.Tempo = audioFeatures.Tempo;
                    }
                }

                trackToAdd.SpotifyLastUpdated = DateTime.UtcNow;

                await db.Tracks.AddAsync(trackToAdd);

                await db.SaveChangesAsync();

                return(trackToAdd);
            }
            else
            {
                if (dbTrack.Artist == null)
                {
                    var artist = await db.Artists
                                 .AsQueryable()
                                 .FirstOrDefaultAsync(f => f.Name.ToLower() == track.Artist.Name.ToLower());

                    if (artist != null)
                    {
                        dbTrack.Artist          = artist;
                        db.Entry(dbTrack).State = EntityState.Modified;
                    }
                }
                if (string.IsNullOrEmpty(dbTrack.SpotifyId) && dbTrack.SpotifyLastUpdated < DateTime.UtcNow.AddMonths(-2))
                {
                    var spotifyTrack = await GetTrackFromSpotify(track.Name, track.Artist.Name.ToLower());

                    if (spotifyTrack != null)
                    {
                        dbTrack.SpotifyId  = spotifyTrack.Id;
                        dbTrack.DurationMs = spotifyTrack.DurationMs;

                        var audioFeatures = await GetAudioFeaturesFromSpotify(spotifyTrack.Id);

                        if (audioFeatures != null)
                        {
                            dbTrack.Key   = audioFeatures.Key;
                            dbTrack.Tempo = audioFeatures.Tempo;
                        }
                    }

                    dbTrack.SpotifyLastUpdated = DateTime.UtcNow;
                    db.Entry(dbTrack).State    = EntityState.Modified;
                }

                await db.SaveChangesAsync();

                return(dbTrack);
            }
        }