public void DeleteArtist()
        {
            ViewArtists();
            Console.WriteLine();
InputId:
            Console.Write("Enter artist id to delete: ");
            int  deleteId;
            bool isInt = int.TryParse(Console.ReadLine(), out deleteId);

            while (isInt == false)
            {
                Console.WriteLine("IDs can only be integer numbers. Try again!!");
                Console.ReadKey(true);
                goto InputId;
            }

            ArtistsRepository artistsRepo = new ArtistsRepository(Constants.ArtistsPath);
            Artist            artist      = artistsRepo.GetAll(a => a.Id == deleteId).FirstOrDefault();

            if (artist == null)
            {
                Console.WriteLine("No artist with that Id exists in the system yet!");
                Console.ReadKey(true);
                return;
            }
            SongsArtistsRepository songsArtistsRepo     = new SongsArtistsRepository(Constants.SongsArtistsPath);
            List <SongsArtists>    songsArtistsEntities = songsArtistsRepo.GetAll(sae => sae.ArtistId == deleteId);
            SongsRepository        songsRepo            = new SongsRepository(Constants.SongsPath);
            List <Song>            songs = new List <Song>();

            foreach (SongsArtists songsArtistsEntity in songsArtistsEntities)
            {
                Song song = songsRepo.GetAll(s => s.Id == songsArtistsEntity.SongId).FirstOrDefault();
                songs.Add(song);
            }

            PlaylistsSongsRepository playlistsSongsRepo     = new PlaylistsSongsRepository(Constants.PlaylistsSongsPath);
            List <PlaylistsSongs>    playlistsSongsEntities = new List <PlaylistsSongs>();

            foreach (SongsArtists songsArtistsEntity in songsArtistsEntities)
            {
                PlaylistsSongs playlistSongEntity = playlistsSongsRepo.GetAll(pse => pse.SongId == songsArtistsEntity.SongId).FirstOrDefault();
                playlistsSongsEntities.Add(playlistSongEntity);
            }

            foreach (PlaylistsSongs playlistsSongsEntity in playlistsSongsEntities)
            {
                playlistsSongsRepo.Delete(playlistsSongsEntity);
            }

            foreach (Song song in songs)
            {
                songsRepo.Delete(song);
            }

            artistsRepo.Delete(artist);
            Console.WriteLine("Artist deleted successfully!");
            Console.ReadKey(true);
        }
Exemple #2
0
        private void AddSongToPlaylist()
        {
            Console.Clear();
            SongsRepository songsRepo = new SongsRepository(Constants.SongsDirectory);
            List <Song>     songsDb   = songsRepo.GetAll();

            foreach (Song song in songsDb)
            {
                Console.WriteLine("Song ID: " + song.Id);
                Console.WriteLine("Song Title: " + song.Title);
                Console.WriteLine("Song ArtistName: " + song.ArtistName);
                Console.WriteLine("Song Year: " + song.Year);
                Console.WriteLine("==================================================");
            }
            Console.Write("Song ID: ");
            int         songIdInput = Int32.Parse(Console.ReadLine());
            List <Song> songDb      = songsRepo.GetAll((song => song.Id == songIdInput));

            if (songDb[0] == null)
            {
                Console.WriteLine("Cannot find song");
                Console.ReadKey(true);
                return;
            }
            Console.Clear();
            PlaylistsRepository playlistsRepo = new PlaylistsRepository(Constants.PlaylistsDirectory);
            List <Playlist>     playlistsDb   = playlistsRepo.GetAll(playlist => AuthenticationService.LoggedUser.Id == playlist.ParentUserId);

            foreach (Playlist playlist in playlistsDb)// user's playlists
            {
                Console.WriteLine("Playlist ID: " + playlist.Id);
                Console.WriteLine("Playlist Name: " + playlist.Name);
                Console.WriteLine("Playlist Description: " + playlist.Description);
                Console.WriteLine("Playlist Is public?: " + playlist.IsPublic);
                Console.WriteLine("====================================================");
            }
            Console.Write("Playlist ID: ");
            int playlistIdInput = Int32.Parse(Console.ReadLine());

            if (playlistsDb.Count == 0)
            {
                Console.WriteLine("Playlist not found");
                Console.ReadKey(true);
                return;
            }
            playlistsDb = playlistsDb.Where(playlist => playlist.Id == playlistIdInput).ToList();
            PlaylistsSongs           playlistsSongs     = new PlaylistsSongs(songDb[0], playlistsDb[0]);
            PlaylistsSongsRepository playlistsSongsRepo = new PlaylistsSongsRepository(Constants.PlaylistsSongsDirectory);

            playlistsSongsRepo.Save(playlistsSongs);
            Console.WriteLine("Song saved successfully to playlist!");
            Console.ReadKey(true);
        }
        /// <summary>
        /// Generates a playlist, saves it on the database and adds it to the User
        /// </summary>
        /// <param name="timeForTrip">Seconds of the trip</param>
        /// <param name="playlistTitle">Playlist's title</param>
        /// <param name="metalPercentagee">Percentage for Metal songs.</param>
        /// <param name="rockPercentagee">Percentage for Rock songs.</param>
        /// <param name="popPercentagee">Percentage for Pop songs.</param>
        /// <param name="topTracks">Allows using top tracks (tracks with s rank higher than 100,000).</param>
        /// <param name="sameArtist">Allows songs from the same artist.</param>
        /// <param name="user">User to add playlist to</param>
        public async Task GeneratePlaylist(int timeForTrip, string playlistTitle, int metalPercentagee,
                                           int rockPercentagee, int popPercentagee, bool topTracks, bool sameArtist, User user)
        {
            var databasePlaylist = await Create(new PlaylistDTO { Title = playlistTitle });

            var pixabatImage = await _context.PixabayImage.AddAsync(new PixabayImage()
            {
                PlaylistId    = databasePlaylist.Id,
                LargeImageURL = "https://cdn.pixabay.com/photo/2010/11/25/palm-trees-45_150.jpg",
                WebformatURL  = "https://cdn.pixabay.com/photo/2010/11/25/palm-trees-45_150.jpg",
                PreviewURL    = "https://cdn.pixabay.com/photo/2010/11/25/palm-trees-45_150.jpg",
            });

            databasePlaylist.PixabayId = pixabatImage.Entity.Id;

            int tripTime          = timeForTrip;
            int allowedOffsetMore = 5 * 60; // 5 Min +
            int allowedOffsetLess = 5 * 60; // 5 Min -

            //TODO: да се приемат колкото и да са
            var listGenres = new List <Tuple <string, int> >
            {
                new Tuple <string, int> ("metal", metalPercentagee),
                new Tuple <string, int> ("rock", rockPercentagee),
                new Tuple <string, int> ("pop", popPercentagee),
            };

            //Проверяваме колко genres са селектирани.
            int genresSelected = await CheckSelectedGenres(listGenres, _context, databasePlaylist);

            //Лист от имената на всеки жанр, офсетите им, и процентите им.
            List <Tuple <string, int[], double> > namesOffsetsAndPercentages = SetOffsets(listGenres, allowedOffsetMore, allowedOffsetLess, genresSelected);

            bool useTopTracks    = topTracks;
            bool allowSameArtist = sameArtist;

            List <Song> finalPlaylist = new List <Song>();

            if (useTopTracks && allowSameArtist)
            {
                foreach (var item in namesOffsetsAndPercentages)
                {
                    var genreSongs     = GetGenreSongs(item.Item2, item.Item1, true);
                    var extractedSongs = ExtractSongs(tripTime, item.Item2[0], item.Item2[1], item.Item3, genreSongs);

                    foreach (var song in extractedSongs)
                    {
                        finalPlaylist.Add(song);
                    }
                }

                Shuffle(finalPlaylist);
            }
            else if (useTopTracks && allowSameArtist == false)
            {
                foreach (var item in namesOffsetsAndPercentages)
                {
                    var genreSongs     = GetGenreSongs(item.Item2, item.Item1, true);
                    var extractedSongs = ExtractSongsUniqueArtist(tripTime, item.Item2[0], item.Item2[1], item.Item3, genreSongs);

                    foreach (var song in extractedSongs)
                    {
                        finalPlaylist.Add(song);
                    }
                }

                Shuffle(finalPlaylist);
            }
            else if (useTopTracks == false && allowSameArtist)
            {
                foreach (var item in namesOffsetsAndPercentages)
                {
                    var genreSongs     = GetGenreSongs(item.Item2, item.Item1, false);
                    var extractedSongs = ExtractSongs(tripTime, item.Item2[0], item.Item2[1], item.Item3, genreSongs);

                    foreach (var song in extractedSongs)
                    {
                        finalPlaylist.Add(song);
                    }
                }

                Shuffle(finalPlaylist);
            }
            else
            {
                foreach (var item in namesOffsetsAndPercentages)
                {
                    var genreSongs     = GetGenreSongs(item.Item2, item.Item1, false);
                    var extractedSongs = ExtractSongsUniqueArtist(tripTime, item.Item2[0], item.Item2[1], item.Item3, genreSongs);

                    foreach (var song in extractedSongs)
                    {
                        finalPlaylist.Add(song);
                    }
                }

                Shuffle(finalPlaylist);
            }

            int realTotalDuration = 0;
            int totalRank         = 0;

            foreach (var song in finalPlaylist)
            {
                var relation = new PlaylistsSongs()
                {
                    SongId = song.Id, PlaylistId = databasePlaylist.Id
                };

                databasePlaylist.PlaylistsSongs.Add(relation);

                song.PlaylistsSongs.Add(relation);

                realTotalDuration += song.Duration;
                totalRank         += song.Rank;
            }

            databasePlaylist.Duration = realTotalDuration;
            databasePlaylist.UserId   = user.Id;
            databasePlaylist.Rank     = totalRank / finalPlaylist.Count();


            user.Playlists.Add(databasePlaylist);

            await _context.SaveChangesAsync();
        }
        public void RemoveSongFromPlaylist()
        {
            ViewUserPlaylists();
            Console.WriteLine();
            Console.Write("Enter id of playlist: ");
            int  playlistId;
            bool isIntPlaylistId = int.TryParse(Console.ReadLine(), out playlistId);

            while (isIntPlaylistId == false)
            {
                Console.WriteLine("Id can only be an integer number. Try again!!");
                Console.ReadKey();
                Console.Write("Enter id of playlist: ");
                isIntPlaylistId = int.TryParse(Console.ReadLine(), out playlistId);
            }

            UsersPlaylistsRepository usersPlaylistsRepo = new UsersPlaylistsRepository(Constants.UsersPlaylistsPath);
            int currentUserId = AuthenticationService.LoggedUser.Id;

            if (usersPlaylistsRepo.EntityExists(upe => upe.PlaylistId == playlistId && upe.UserId == currentUserId) == false)
            {
                Console.WriteLine("Playlist does not exist exist or you have no rights to add songs to it!");
                Console.ReadKey(true);
                return;
            }

            PlaylistsSongsRepository playlistsSongsRepo     = new PlaylistsSongsRepository(Constants.PlaylistsSongsPath);
            List <PlaylistsSongs>    playlistsSongsEntities = playlistsSongsRepo.GetAll(pse => pse.PlaylistId == playlistId);
            SongsRepository          songsRepo        = new SongsRepository(Constants.SongsPath);
            SongsArtistsRepository   songsArtistsRepo = new SongsArtistsRepository(Constants.SongsArtistsPath);
            ArtistsRepository        artistsRepo      = new ArtistsRepository(Constants.ArtistsPath);
            List <Song> songs = new List <Song>();

            foreach (PlaylistsSongs playlistSongsEntity in playlistsSongsEntities)
            {
                Song song = songsRepo.GetAll(s => s.Id == playlistSongsEntity.SongId).FirstOrDefault();
                songs.Add(song);
            }

            Console.Clear();
            foreach (Song song in songs)
            {
                Console.WriteLine("********************************");
                Console.WriteLine("Id: {0}", song.Id);
                Console.WriteLine("Song title: {0}", song.Title);
                Console.WriteLine("Song release year: {0}", song.Year);
                List <SongsArtists> songsArtists = songsArtistsRepo.GetAll(sa => sa.SongId == song.Id);
                List <Artist>       artists      = new List <Artist>();
                foreach (SongsArtists songArtistItem in songsArtists)
                {
                    int    artistId = songArtistItem.ArtistId;
                    Artist artist   = artistsRepo.GetAll(a => a.Id == songArtistItem.ArtistId).FirstOrDefault();
                    artists.Add(artist);
                }

                if (artists.Count == 1)
                {
                    Console.WriteLine("Artist: {0}", artists[0].Name);
                }
                else
                {
                    Console.Write("Artists: ");
                    int end = artists.Count - 1;
                    for (int i = 0; i < end; i++)
                    {
                        Console.WriteLine("{0}, ", artists[i].Name);
                    }
                    Console.WriteLine(artists[end]);
                }
                Console.WriteLine("********************************");
            }
            Console.WriteLine();
            Console.Write("Select song id to remove from the playlist: ");
            int  songId;
            bool isIntSongId = int.TryParse(Console.ReadLine(), out songId);

            while (isIntSongId == false)
            {
                Console.WriteLine("Id can only be an integer number. Try again!!");
                Console.ReadKey();
                Console.Write("Select song id to remove from the playlist: ");
                isIntSongId = int.TryParse(Console.ReadLine(), out songId);
            }

            PlaylistsSongs playlistsSongsEntity = playlistsSongsRepo.GetAll(pse => pse.PlaylistId == playlistId && pse.SongId == songId).FirstOrDefault();

            if (playlistsSongsEntity == null)
            {
                Console.WriteLine("Song does not exist in that playlist or you have no rights to remove!");
                Console.ReadKey(true);
                return;
            }
            playlistsSongsRepo.Delete(playlistsSongsEntity);
            Console.WriteLine("Song successfully removed from playlist!");
            Console.ReadKey(true);
        }
        public void AddSongToPlaylist()
        {
            SongsView.ViewSongs();
            Console.WriteLine();
            Console.Write("Enter id of song to add: ");
            int  songId      = 0;
            bool isIntSongId = int.TryParse(Console.ReadLine(), out songId);

            while (isIntSongId == false)
            {
                Console.WriteLine("Song id can only be an integer number. Try again!");
                Console.ReadKey(true);
                Console.Write("Enter id of song to add: ");
                isIntSongId = int.TryParse(Console.ReadLine(), out songId);
            }

            SongsRepository songsRepo = new SongsRepository(Constants.SongsPath);

            if (songsRepo.EntityExists(s => s.Id == songId) == false)
            {
                Console.WriteLine("Song with id {0} doesn't exist!", songId);
                Console.ReadKey(true);
                return;
            }

            ViewUserPlaylists();
            Console.Write("Select id of playlist you would add to: ");
            int  playlistId      = 0;
            bool isIntPlaylistId = int.TryParse(Console.ReadLine(), out playlistId);

            while (isIntPlaylistId == false)
            {
                Console.WriteLine("Song id can only be an integer number. Try again!");
                Console.ReadKey(true);
                Console.Write("Enter id of song to add: ");
                isIntPlaylistId = int.TryParse(Console.ReadLine(), out playlistId);
            }

            UsersPlaylistsRepository usersPlaylistsRepo = new UsersPlaylistsRepository(Constants.UsersPlaylistsPath);
            int currentUserId = AuthenticationService.LoggedUser.Id;

            if (usersPlaylistsRepo.EntityExists(upe => upe.PlaylistId == playlistId && upe.UserId == currentUserId) == false)
            {
                Console.WriteLine("Playlist does not exist exist or you have no rights to add songs to it!");
                Console.ReadKey(true);
                return;
            }
            PlaylistsSongs playlistSongsEntity = new PlaylistsSongs();

            playlistSongsEntity.SongId     = songId;
            playlistSongsEntity.PlaylistId = playlistId;
            PlaylistsSongsRepository playlistsSongsRepo = new PlaylistsSongsRepository(Constants.PlaylistsSongsPath);

            if (playlistsSongsRepo.EntityExists(p => p.PlaylistId == playlistSongsEntity.PlaylistId && p.SongId == playlistSongsEntity.SongId))
            {
                Console.WriteLine("The selected song is already in that playlist!");
                Console.ReadKey(true);
                return;
            }

            playlistsSongsRepo.Save(playlistSongsEntity);
            Console.WriteLine("Song successfully added to playlist");
            Console.ReadKey(true);
        }