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 SplitArtistNameShouldReturnOnlyOneItemWhenSingleArtistNameIsGiven(string artistName) { var splitter = new SongNameSplitter(); var items = splitter.SplitArtistName(artistName).ToList(); Assert.Single(items); Assert.Equal(artistName, items.First()); }
public void SplitSongNameShouldWorkCorrectly(string textToParse, string expectedArtist, string expectedSongTitle) { var songNameArtistNameSplitter = new SongNameSplitter(); var result = songNameArtistNameSplitter.SplitSongName(textToParse); Assert.NotNull(result.Artist); Assert.NotNull(result.Title); Assert.Equal(expectedArtist, result.Artist); Assert.Equal(expectedSongTitle, result.Title); }
//// TODO: [InlineData("A - C (feat. B)", "C", "A", "B")] //// TODO: [InlineData("Eminem - Lucky You ft. Joyner Lucas", "Lucky You", "Eminem", "Joyner Lucas")] public void SplitShouldWorkCorrectly( string inputString, string songName, params string[] artists) { var splitter = new SongNameSplitter(); var result = splitter.Split(inputString); Assert.Equal(songName, result.Title); Assert.Equal(artists, result.Artists); }
public void SplitArtistNameShouldReturnTwoItemsWhenComplexArtistNameIsGiven( string artistName, string firstArtistName, string secondArtistName) { var splitter = new SongNameSplitter(); var items = splitter.SplitArtistName(artistName).ToList(); Assert.Equal(2, items.Count); Assert.Equal(firstArtistName, items[0]); Assert.Equal(secondArtistName, items[1]); }
public void SplitArtistNameShouldRespectExceptions( string artistName, int artistsCount, string expectedArtist) { var splitter = new SongNameSplitter(); var items = splitter.SplitArtistName(artistName).ToList(); Assert.NotNull(items); Assert.Equal(artistsCount, items.Count); Assert.Contains(expectedArtist, items); }
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); }
public void SplitArtistNameShouldReturnProperNumberOfArtists( string artistName, int artistsCount, string firstArtist, string lastArtist) { var splitter = new SongNameSplitter(); var items = splitter.SplitArtistName(artistName).ToList(); Assert.Equal(artistsCount, items.Count); Assert.Equal(firstArtist, items[0]); Assert.Equal(lastArtist, items[items.Count - 1]); }
public async Task <ApiResponse <AddSongResponse> > AddSong([FromBody] AddSongRequest request) { if (request == null || !this.ModelState.IsValid) { return(this.ModelStateErrors <AddSongResponse>()); } var splitter = new SongNameSplitter(); // TODO: Move to constructor var artists = splitter.SplitArtistName(request.Artists).ToList(); var songId = await this.songsService.CreateSongAsync(request.SongName, artists, SourcesNames.User, this.User.GetId()); var song = new SongArtistsAndTitle(artists, request.SongName); await this.songsService.UpdateSongsSystemDataAsync(songId); return(new AddSongResponse { Id = songId, SongTitle = song.ToString() }.ToApiResponse()); }
public void SplitArtistNameShouldReturnProperArtistsWhenStrangeInputIsGiven( string artistName, int artistsCount, string firstArtist, string lastArtist) { var splitter = new SongNameSplitter(); var items = splitter.SplitArtistName(artistName).ToList(); Assert.NotNull(items); Assert.Equal(artistsCount, items.Count); if (artistsCount > 0) { Assert.Equal(firstArtist, items[0]); } if (artistsCount > 1) { Assert.Equal(lastArtist, items[items.Count - 1]); } }