private static int SandboxCode(SandboxOptions options, IServiceProvider serviceProvider) { var sw = Stopwatch.StartNew(); var songsRepository = serviceProvider.GetService <IDeletableEntityRepository <Song> >(); var songMetadataRepository = serviceProvider.GetService <IDeletableEntityRepository <SongMetadata> >(); var songsService = serviceProvider.GetService <ISongsService>(); var metadataService = serviceProvider.GetService <ISongMetadataService>(); var provider = new Top40ChartsDataProvider(); var splitter = new SongNameSplitter(); var youTubeDataProvider = new YouTubeDataProvider(); var lyricsPluginDataProvider = new LyricsPluginDataProvider(); var songIds = songsRepository.All().Select(x => x.Id).ToList(); for (var index = 0; index < songIds.Count; index++) { var songId = songIds[index]; songsService.UpdateSongsSystemDataAsync(songId).GetAwaiter().GetResult(); if (index % 100 == 0) { songsRepository.DetachAll(); } } Console.WriteLine(sw.Elapsed); return(0); }
public void GetSongShouldWorkCorrectly(int id, string expectedArtist, string expectedSongTitle) { var songsSearcher = new Top40ChartsDataProvider(); var result = songsSearcher.GetSong(id); Assert.NotNull(result); Assert.Equal(expectedArtist, result[SongMetadataType.Artist]); Assert.Equal(expectedSongTitle, result[SongMetadataType.Title]); Assert.NotNull(result[SongMetadataType.YouTubeVideoId]); Assert.NotNull(result[SongMetadataType.Lyrics]); }
private static int InitialSeed(InitialSeedOptions opts, IServiceProvider serviceProvider) { var sw = Stopwatch.StartNew(); // Step 1. Seed songs from top40 charts (5 minutes for 1000 songs, so 50000 should be 4-5 hours) Console.Title = "Top40 charts songs seed"; var songsRepository = serviceProvider.GetService <IDeletableEntityRepository <Song> >(); var songsService = serviceProvider.GetService <ISongsService>(); var metadataService = serviceProvider.GetService <ISongMetadataService>(); var provider = new Top40ChartsDataProvider(); var splitter = new SongNameSplitter(); for (var i = 1; i <= 50000; i++) { try { var song = provider.GetSong(i); if (song == null) { Console.WriteLine($"{SourcesNames.Top40Charts}#{i} => not found!"); continue; } var artists = splitter.SplitArtistName(song[SongMetadataType.Artist]).ToList(); var songId = songsService.CreateSongAsync( song[SongMetadataType.Title], artists, SourcesNames.Top40Charts, i.ToString()).GetAwaiter().GetResult(); metadataService.AddMetadataInfoAsync(songId, song, SourcesNames.Top40Charts, i.ToString()).GetAwaiter().GetResult(); songsService.UpdateSongsSystemDataAsync(songId).GetAwaiter().GetResult(); // For better performance if (i % 100 == 0) { songsRepository.DetachAll(); } Console.WriteLine($"{SourcesNames.Top40Charts}#{i} => ({songId}) {song}"); } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"{SourcesNames.Top40Charts}#{i} => {e.Message}"); Console.ResetColor(); } } Console.WriteLine(sw.Elapsed); return(0); }