diff --git a/src/main/java/sbu/javafx/MusicController.java b/src/main/java/sbu/javafx/MusicController.java index 6fc1e26..2f036fe 100644 --- a/src/main/java/sbu/javafx/MusicController.java +++ b/src/main/java/sbu/javafx/MusicController.java @@ -19,7 +19,8 @@ public class MusicController { @FXML private ListView lvSongs; @FXML private Label lblStatus; @FXML private Button btnPlayStop; - @FXML private Button btnViewPlaylist; + + private int previousSongIndex = -1; private MediaPlayer mediaPlayer; @@ -41,7 +42,7 @@ public class MusicController { String songName = ""; if (a == 0) songName = "Arcade"; else if (a == 1) songName = "How i love you"; - else if (a == 2) songName = "Memmories"; + else if (a == 2) songName = "Memories"; else if (a == 3) songName = "Night Changes"; else songName = "Careless Whisper"; @@ -52,65 +53,74 @@ public class MusicController { public void handlePlayAction() { String selectedSong = lvSongs.getSelectionModel().getSelectedItem(); + int newSongIndex = lvSongs.getSelectionModel().getSelectedIndex(); + boolean isNewSong = (newSongIndex != previousSongIndex); + if (selectedSong == null) { lblStatus.setText("Please choose a song"); return; } - String filePath = "src/main/resources/sbu.javafx/songs/" + songName(lvSongs.getSelectionModel().getSelectedIndex()) + ".mp3"; - File file = new File(filePath); + if (isNewSong) + { + if (mediaPlayer != null) + { + mediaPlayer.dispose(); + mediaPlayer = null; + } - boolean isPlayingOrPaused = (mediaPlayer != null && - (mediaPlayer.getStatus() == MediaPlayer.Status.PLAYING || - mediaPlayer.getStatus() == MediaPlayer.Status.PAUSED)); + String filePath = "src/main/resources/sbu/javafx/songs/" + songName(lvSongs.getSelectionModel().getSelectedIndex()) + ".mp3"; + File file = new File(filePath); - if (isPlayingOrPaused) + try { + Media media = new Media(file.toURI().toString()); + mediaPlayer = new MediaPlayer(media); + + mediaPlayer.setOnEndOfMedia(new Runnable() { + @Override + public void run() { + mediaPlayer.stop(); + btnPlayStop.setText("Play ▶"); + lblStatus.setText("Finished"); + } + }); + + mediaPlayer.play(); + btnPlayStop.setText("Paused ⏸"); + lblStatus.setText("Playing : " + songName(lvSongs.getSelectionModel().getSelectedIndex())); + previousSongIndex = newSongIndex; + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + else { if (mediaPlayer.getStatus() == MediaPlayer.Status.PLAYING) { mediaPlayer.pause(); - btnPlayStop.setText("Paused ⏸"); - lblStatus.setText("Playing : " + songName(lvSongs.getSelectionModel().getSelectedIndex())); - return; + btnPlayStop.setText("Play ▶"); + lblStatus.setText("Paused"); } else if (mediaPlayer.getStatus() == MediaPlayer.Status.PAUSED) { mediaPlayer.play(); - btnPlayStop.setText("Play ▶"); - lblStatus.setText("Paused"); - return; + btnPlayStop.setText("Pause ⏸"); + lblStatus.setText("Playing: " + songName(lvSongs.getSelectionModel().getSelectedIndex())); + } + else + { + mediaPlayer.play(); + btnPlayStop.setText("Pause ⏸"); + lblStatus.setText("Playing: " + songName(lvSongs.getSelectionModel().getSelectedIndex())); } - } - - if (mediaPlayer != null) - { - mediaPlayer.dispose(); - mediaPlayer = null; - } - - try { - Media media = new Media(file.toURI().toString()); - mediaPlayer = new MediaPlayer(media); - - mediaPlayer.setOnEndOfMedia(new Runnable() { - @Override - public void run() { - mediaPlayer.stop(); - btnPlayStop.setText("Play ▶"); - } - }); - - mediaPlayer.play(); - btnPlayStop.setText("Paused ⏸"); - lblStatus.setText("Playing : " + songName(lvSongs.getSelectionModel().getSelectedIndex())); - } catch (Exception e) { - throw new RuntimeException(e); } } //TODO: Logic to add a specific song to the user's playlist. + @FXML public void addToPlaylist() { String selectedSong = lvSongs.getSelectionModel().getSelectedItem();