package com.quiltplayer.core.player; import java.awt.event.ActionEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.quiltplayer.controller.PlayerController; import com.quiltplayer.controller.PlayerListener; import com.quiltplayer.core.player.jotify.JotifyPlayer; import com.quiltplayer.core.player.simpleplayer.BasicPlayerPlayer; import com.quiltplayer.external.lyrics.LyricsListener; import com.quiltplayer.model.Song; import com.quiltplayer.model.impl.NullAlbum; import com.quiltplayer.model.neo.NeoSong; @Component public class PlayerSelector implements Player { @Autowired private BasicPlayerPlayer basicPlayer; @Autowired private JotifyPlayer jotifyPlayer; @Autowired private PlayerListener playerListener; @Autowired private LyricsListener lyricsListener; private Song currentSong; /* * (non-Javadoc) * * @see com.quiltplayer.core.player.Player#getElapsedTime() */ @Override public synchronized long getElapsedTime() { if (currentSong instanceof NullAlbum) return 0; return getPlayer(currentSong).getElapsedTime(); } /* * (non-Javadoc) * * @see com.quiltplayer.core.player.Player#pause() */ @Override public synchronized void pause() { getPlayer(currentSong).pause(); } /* * (non-Javadoc) * * @see com.quiltplayer.core.player.Player#play(com.quiltplayer.model.Song) */ @Override public synchronized void play(Song song) { currentSong = song; getPlayer(song).play(song); playerListener.actionPerformed(new ActionEvent(song, 0, PlayerController.PlayerEvents.PLAYING.toString())); lyricsListener.actionPerformed(new ActionEvent(song, 0, PlayerController.PlayerEvents.PLAYING.toString())); } /* * (non-Javadoc) * * @see com.quiltplayer.core.player.Player#stop() */ @Override public synchronized void stop() { getPlayer(currentSong).stop(); } private Player getPlayer(Song song) { if (song == null || song instanceof NeoSong && song.getType().equals(Song.TYPE_FILE)) { return basicPlayer; } return jotifyPlayer; } /* * (non-Javadoc) * * @see com.quiltplayer.core.player.Player#removeCurrentSong() */ @Override public synchronized void removeCurrentSong() { currentSong = null; } @Override public synchronized void seek(int i) { getPlayer(currentSong).seek(i); } }