2012-06-01 15:00:34 +00:00
|
|
|
package de.ctdo.crashtest.mpd;
|
|
|
|
|
|
|
|
import de.ctdo.crashtest.log.Logger;
|
|
|
|
import org.bff.javampd.MPD;
|
|
|
|
import org.bff.javampd.MPDDatabase;
|
|
|
|
import org.bff.javampd.MPDPlayer;
|
2012-06-01 19:04:35 +00:00
|
|
|
import org.bff.javampd.MPDPlaylist;
|
2012-06-01 15:00:34 +00:00
|
|
|
import org.bff.javampd.exception.MPDConnectionException;
|
|
|
|
import org.bff.javampd.exception.MPDDatabaseException;
|
2012-06-01 19:04:35 +00:00
|
|
|
import org.bff.javampd.exception.MPDPlayerException;
|
|
|
|
import org.bff.javampd.exception.MPDPlaylistException;
|
2012-06-01 15:00:34 +00:00
|
|
|
import org.bff.javampd.objects.MPDSong;
|
|
|
|
|
|
|
|
import java.net.UnknownHostException;
|
2012-06-01 19:04:35 +00:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
2012-06-01 15:00:34 +00:00
|
|
|
|
|
|
|
/**
|
2012-06-03 13:45:39 +00:00
|
|
|
* A MPD abstraction to the org.bff.javampd library
|
2012-06-01 15:00:34 +00:00
|
|
|
*/
|
|
|
|
public class MPDController implements IMPDController {
|
|
|
|
private MPD mpd;
|
|
|
|
|
2012-06-03 13:45:39 +00:00
|
|
|
public MPDController(String host) {
|
2012-06-01 15:00:34 +00:00
|
|
|
try {
|
2012-06-03 13:45:39 +00:00
|
|
|
mpd = new MPD(host, 6600);
|
2012-06-01 15:00:34 +00:00
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
} catch (MPDConnectionException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-06-03 13:45:39 +00:00
|
|
|
/**
|
|
|
|
* Play a song, defined by artist and track title
|
|
|
|
* Song gets added to current playlist and is played.
|
|
|
|
* @param artist Artist of the track to play
|
|
|
|
* @param title Title of the track to play
|
|
|
|
*/
|
2012-06-01 15:00:34 +00:00
|
|
|
@Override
|
2012-06-01 19:04:35 +00:00
|
|
|
public void playSong(final String artist, final String title) {
|
|
|
|
if(mpd != null) {
|
|
|
|
Runnable r = new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
addToPlayListIfNeeded(artist, title);
|
|
|
|
|
|
|
|
try {
|
2012-06-01 15:00:34 +00:00
|
|
|
|
2012-06-01 19:04:35 +00:00
|
|
|
MPDPlaylist playlist = mpd.getMPDPlaylist();
|
2012-06-01 15:00:34 +00:00
|
|
|
|
2012-06-01 19:04:35 +00:00
|
|
|
for(MPDSong song: playlist.getSongList()) {
|
|
|
|
|
|
|
|
if(song.getArtist() != null && song.getTitle() != null) {
|
|
|
|
if(song.getArtist().getName().toLowerCase().equals(artist.toLowerCase()) &&
|
|
|
|
song.getTitle().toLowerCase().equals(title.toLowerCase())) {
|
|
|
|
|
|
|
|
MPDPlayer player = mpd.getMPDPlayer();
|
|
|
|
player.stop();
|
|
|
|
player.playId(song);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch (MPDConnectionException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
} catch (MPDPlayerException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2012-06-06 10:24:09 +00:00
|
|
|
synchronized (mpd) {
|
|
|
|
new Thread(r).start();
|
|
|
|
}
|
2012-06-01 15:00:34 +00:00
|
|
|
}
|
|
|
|
}
|
2012-06-01 19:04:35 +00:00
|
|
|
|
|
|
|
private void addToPlayListIfNeeded(final String artist, final String title) {
|
|
|
|
MPDDatabase db = mpd.getMPDDatabase();
|
|
|
|
MPDPlaylist playlist = mpd.getMPDPlaylist();
|
2012-06-01 15:00:34 +00:00
|
|
|
|
2012-06-01 19:04:35 +00:00
|
|
|
try {
|
|
|
|
List<MPDSong> tracks = new ArrayList<MPDSong>(db.findArtist(artist));
|
2012-06-01 15:00:34 +00:00
|
|
|
|
2012-06-01 19:04:35 +00:00
|
|
|
for(MPDSong song: tracks) {
|
|
|
|
if(song.getName() != null &&
|
|
|
|
song.getName().toLowerCase().contains(title.toLowerCase())) {
|
|
|
|
|
|
|
|
if(!playlist.getSongList().contains(song)) {
|
|
|
|
playlist.addSong(song);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch (MPDConnectionException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
} catch (MPDDatabaseException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
} catch (MPDPlaylistException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-06-03 13:45:39 +00:00
|
|
|
/**
|
|
|
|
* Sets the current mpd volume
|
|
|
|
* @param volume the volume in percent (0-100)
|
|
|
|
*/
|
2012-06-01 19:04:35 +00:00
|
|
|
@Override
|
|
|
|
public void setVolume(final int volume) {
|
|
|
|
if(mpd != null) {
|
|
|
|
|
|
|
|
Runnable r = new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
try {
|
|
|
|
mpd.getMPDPlayer().setVolume(volume);
|
|
|
|
} catch (MPDConnectionException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
} catch (MPDPlayerException e) {
|
|
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2012-06-06 10:24:09 +00:00
|
|
|
synchronized (mpd) {
|
|
|
|
new Thread(r).start();
|
|
|
|
}
|
2012-06-01 15:00:34 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|