133 lines
4.1 KiB
Java
133 lines
4.1 KiB
Java
package de.ctdo.crashtest.mpd;
|
|
|
|
import de.ctdo.crashtest.game.TheGame;
|
|
import de.ctdo.crashtest.log.Logger;
|
|
import org.bff.javampd.MPD;
|
|
import org.bff.javampd.MPDDatabase;
|
|
import org.bff.javampd.MPDPlayer;
|
|
import org.bff.javampd.MPDPlaylist;
|
|
import org.bff.javampd.exception.MPDConnectionException;
|
|
import org.bff.javampd.exception.MPDDatabaseException;
|
|
import org.bff.javampd.exception.MPDPlayerException;
|
|
import org.bff.javampd.exception.MPDPlaylistException;
|
|
import org.bff.javampd.objects.MPDSong;
|
|
|
|
import java.net.UnknownHostException;
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* @author: lucas
|
|
* @date: 01.06.12 10:34
|
|
*/
|
|
public class MPDController implements IMPDController {
|
|
|
|
private MPD mpd;
|
|
|
|
public MPDController() {
|
|
initMPD();
|
|
|
|
}
|
|
|
|
private void initMPD() {
|
|
try {
|
|
mpd = new MPD("dampfradio.raum.chaostreff-dortmund.de", 6600);
|
|
|
|
|
|
} catch (UnknownHostException e) {
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
} catch (MPDConnectionException e) {
|
|
Logger.sLog("MPD error: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void playSong(final String artist, final String title) {
|
|
if(mpd != null) {
|
|
|
|
Runnable r = new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
addToPlayListIfNeeded(artist, title);
|
|
|
|
try {
|
|
|
|
MPDPlaylist playlist = mpd.getMPDPlaylist();
|
|
|
|
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());
|
|
}
|
|
}
|
|
};
|
|
|
|
new Thread(r).start();
|
|
}
|
|
}
|
|
|
|
private void addToPlayListIfNeeded(final String artist, final String title) {
|
|
MPDDatabase db = mpd.getMPDDatabase();
|
|
MPDPlaylist playlist = mpd.getMPDPlaylist();
|
|
|
|
try {
|
|
List<MPDSong> tracks = new ArrayList<MPDSong>(db.findArtist(artist));
|
|
|
|
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());
|
|
}
|
|
}
|
|
|
|
@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());
|
|
}
|
|
}
|
|
};
|
|
|
|
new Thread(r).start();
|
|
}
|
|
}
|
|
}
|