Example #1
0
        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);
        }
Example #7
0
        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]);
        }
Example #9
0
        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]);
            }
        }