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); }
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); }