Exemple #1
0
        public void Store(string originalFileName, string guid)
        {
            string mediaServerUrlBase = ConfigurationManager.AppSettings["MediaServerSaveBaseUrl"];
            string fullName           = Path.Combine(mediaServerUrlBase, guid);

            using (SmartPlayerEntities context = new SmartPlayerEntities())
            {
                MusicRepository repo = new MusicRepository(context);

                var allSongs = repo.GetAll()
                               .Select(x => new AnalyzableSong {
                    Id = x.Id, PhysicalFileName = x.Guid
                })
                               .ToList();

                allSongs.ForEach(x => x.PhysicalFileName = Path.Combine(mediaServerUrlBase, x.PhysicalFileName));

                List <double> correlationCoefficients = Analyzer.GetCorreleationCoefficientsFor(fullName, allSongs);

                Song song = new Song()
                {
                    Name = originalFileName,
                    Guid = guid
                };

                for (int i = 0; i < correlationCoefficients.Count; i++)
                {
                    song.CorrelationsAsPrimary.Add(new SongSongCorrelation {
                        SecondarySongId = allSongs[i].Id, CorrelationScore = correlationCoefficients[i]
                    });
                }

                repo.Create(song);
            }
        }
        public async Task <ActionResult> Create(Music music, IFormFile musicFile, Guid playlistId)
        {
            Playlist playlist = _playlistRepo.Get(playlistId);

            if (playlist.ApplicationUserId != this.User.GetUserId())
            {
                return(Unauthorized());
            }
            if (musicFile == null || musicFile.Length == 0)
            {
                ViewBag.playlistId = playlistId;
                ViewBag.noFile     = "You must upload a file";
                return(View());
            }
            var folderPath = Path.Combine(_appEnv.WebRootPath, "audio", playlistId.ToString());

            if (!Directory.Exists(folderPath))
            {
                Directory.CreateDirectory(folderPath);
            }

            var fileExtension = musicFile.FileName.Substring(musicFile.FileName.Length - 4);

            if (fileExtension != ".mp3" && fileExtension != ".wav")
            {
                ViewBag.playlistId = playlistId;
                ViewBag.noFile     = "Your file must be of type mp3 or wav";
                return(View());
            }

            var filePath = Path.Combine(folderPath, musicFile.FileName);

            if (System.IO.File.Exists(filePath))
            {
                ViewBag.playlistId = playlistId;
                ViewBag.noFile     = "The file that you want to upload already exists";
                return(View());
            }
            try
            {
                music.filePath   = String.Concat("/audio/", playlistId.ToString(), "/", musicFile.FileName);
                music.PlaylistId = playlistId;
                _musicRepo.Create(music);
                _musicRepo.SaveChanges();
            }
            catch
            {
                ViewBag.playlistId = playlistId;
                return(View());
            }
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await musicFile.CopyToAsync(stream);
            }
            return(RedirectToAction(nameof(Index), new { playlistId = playlistId }));
        }
        public void Store(string originalFileName, string guid)
        {
            string mediaServerUrlBase = ConfigurationManager.AppSettings["MediaServerSaveBaseUrl"];
            string fullName = Path.Combine(mediaServerUrlBase, guid);
            using(SmartPlayerEntities context = new SmartPlayerEntities())
            {
                MusicRepository repo = new MusicRepository(context);

                var allSongs = repo.GetAll()
                    .Select(x => new AnalyzableSong { Id = x.Id, PhysicalFileName = x.Guid })
                    .ToList();

                allSongs.ForEach(x => x.PhysicalFileName = Path.Combine(mediaServerUrlBase, x.PhysicalFileName));

                List<double> correlationCoefficients = Analyzer.GetCorreleationCoefficientsFor(fullName, allSongs);

                Song song = new Song()
                {
                    Name = originalFileName,
                    Guid = guid
                };

                for(int i = 0; i < correlationCoefficients.Count; i++)
                {
                    song.CorrelationsAsPrimary.Add(new SongSongCorrelation { SecondarySongId = allSongs[i].Id, CorrelationScore = correlationCoefficients[i] });
                }

                repo.Create(song);
            }
        }
        public void Test2()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: "MovieListDatabase")
                          .Options;

            var data = new List <Playlist>
            {
                new Playlist
                {
                    Id                = new Guid("D6439971-6030-4983-A531-08D8C6A0B4A2"),
                    PlaylistName      = "Just a playlist",
                    ApplicationUserId = "1265ace9-c141-4837-aab7-32eb45d1af2d",
                    Musics            = new List <Music>
                    {
                        new Music
                        {
                            Id         = new Guid("C80F178B-D710-48B6-BFAA-08D8C87ECF9B"),
                            MusicName  = "Song",
                            filePath   = "/audio/cca3e07d-55b8-4a17-bb9b-08d8c84436ea/Rick Astley - Never Gonna Give You Up (Video).mp3",
                            PlaylistId = new Guid("D6439971-6030-4983-A531-08D8C6A0B4A2")
                        }
                    }
                },
                new Playlist
                {
                    Id                = new Guid("2B363996-E8AA-4710-70CA-08D8C6CBFC5B"),
                    PlaylistName      = "Just a playlist",
                    ApplicationUserId = "937bcaf9-3a2a-4136-a5b6-f3c8c6945b55",
                    Musics            = new List <Music>
                    {
                        new Music
                        {
                            Id         = new Guid("309CDBC0-5DA6-443F-EC25-08D8C875CA44"),
                            MusicName  = "Music",
                            filePath   = "/audio/cca3e07d-55b8-4a17-bb9b-08d8c84436ea/Vicetone & Tony Igy - Astronomia.mp3",
                            PlaylistId = new Guid("2B363996-E8AA-4710-70CA-08D8C6CBFC5B")
                        },
                        new Music
                        {
                            Id         = new Guid("C80F178B-D710-48B6-BFAA-08D8C87ECF9B"),
                            MusicName  = "Song",
                            filePath   = "/audio/cca3e07d-55b8-4a17-bb9b-08d8c84436ea/Rick Astley - Never Gonna Give You Up (Video).mp3",
                            PlaylistId = new Guid("2B363996-E8AA-4710-70CA-08D8C6CBFC5B")
                        }
                    }
                }
            }.AsQueryable();
            var mockSet = new Mock <DbSet <Playlist> >();

            mockSet.As <IQueryable <Playlist> >().Setup(m => m.Provider).Returns(data.Provider);
            mockSet.As <IQueryable <Playlist> >().Setup(m => m.Expression).Returns(data.Expression);
            mockSet.As <IQueryable <Playlist> >().Setup(m => m.ElementType).Returns(data.ElementType);
            mockSet.As <IQueryable <Playlist> >().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

            Guid pIdOne = new Guid("D6439971-6030-4983-A531-08D8C6A0B4A2");
            Guid pIdTwo = new Guid("2B363996-E8AA-4710-70CA-08D8C6CBFC5B");

            var musicData = new List <Music>
            {
                new Music
                {
                    Id         = new Guid("309CDBC0-5DA6-443F-EC25-08D8C875CA44"),
                    MusicName  = "Music",
                    filePath   = "/audio/cca3e07d-55b8-4a17-bb9b-08d8c84436ea/Vicetone & Tony Igy - Astronomia.mp3",
                    PlaylistId = new Guid("2B363996-E8AA-4710-70CA-08D8C6CBFC5B"),
                    Playlist   = data.FirstOrDefault(p => p.Id == pIdTwo)
                },
                new Music
                {
                    Id         = new Guid("C80F178B-D710-48B6-BFAA-08D8C87ECF9B"),
                    MusicName  = "Song",
                    filePath   = "/audio/cca3e07d-55b8-4a17-bb9b-08d8c84436ea/Rick Astley - Never Gonna Give You Up (Video).mp3",
                    PlaylistId = new Guid("2B363996-E8AA-4710-70CA-08D8C6CBFC5B"),
                    Playlist   = data.FirstOrDefault(p => p.Id == pIdTwo)
                }
            }.AsQueryable();
            var mockSetMusic = new Mock <DbSet <Music> >();

            mockSetMusic.As <IQueryable <Music> >().Setup(m => m.Provider).Returns(musicData.Provider);
            mockSetMusic.As <IQueryable <Music> >().Setup(m => m.Expression).Returns(musicData.Expression);
            mockSetMusic.As <IQueryable <Music> >().Setup(m => m.ElementType).Returns(musicData.ElementType);
            mockSetMusic.As <IQueryable <Music> >().Setup(m => m.GetEnumerator()).Returns(musicData.GetEnumerator());

            _dbContext = new Mock <ApplicationDbContext>(options);
            _dbContext.Setup(c => c.Playlists).Returns(mockSet.Object);
            _dbContext.Setup(c => c.Musics).Returns(mockSetMusic.Object);

            _musicRepo = new MusicRepository(_dbContext.Object);
            _musicRepo.Create(new Music
            {
                Id         = new Guid("ABD44931-3DEA-4B43-238F-08D8C8848C7D"),
                MusicName  = "Yes",
                filePath   = "/audio/cca3e07d-55b8-4a17-bb9b-08d8c84436ea/Smash Mouth - All Star.mp3",
                PlaylistId = new Guid("D6439971-6030-4983-A531-08D8C6A0B4A2"),
                Playlist   = data.FirstOrDefault(p => p.Id == pIdOne)
            });

            _musicRepo.SaveChanges();
            Assert.Equal(2, _musicRepo.GetAllFromPlaylist(pIdTwo).Count);
        }