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")); }
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")); }
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); } }