added playlist controls to mpdcontroller

This commit is contained in:
Lucas Pleß 2012-06-10 21:55:33 +02:00
parent 2bbd040f4d
commit 535a66a216
2 changed files with 87 additions and 23 deletions

View File

@ -7,4 +7,6 @@ package de.ctdo.crashtest.mpd;
public interface IMPDController { public interface IMPDController {
void playSong(final String artist, final String title); void playSong(final String artist, final String title);
void setVolume(final int volume); void setVolume(final int volume);
void clearPlaylist();
void addToPlayList(final String artist, final String title);
} }

View File

@ -20,6 +20,7 @@ import java.util.List;
*/ */
public class MPDController implements IMPDController { public class MPDController implements IMPDController {
private MPD mpd; private MPD mpd;
private final Object lockObject = new Object();
public MPDController(String host) { public MPDController(String host) {
try { try {
@ -46,7 +47,6 @@ public class MPDController implements IMPDController {
addToPlayListIfNeeded(artist, title); addToPlayListIfNeeded(artist, title);
try { try {
MPDPlaylist playlist = mpd.getMPDPlaylist(); MPDPlaylist playlist = mpd.getMPDPlaylist();
for(MPDSong song: playlist.getSongList()) { for(MPDSong song: playlist.getSongList()) {
@ -71,13 +71,23 @@ public class MPDController implements IMPDController {
} }
}; };
synchronized (mpd) { synchronized (lockObject) {
new Thread(r).start(); new Thread(r).start();
} }
} }
} }
private void addToPlayListIfNeeded(final String artist, final String title) { /**
* Add a song to current mpd playlist
* @param artist Artist of the track to play
* @param title Title of the track to play
*/
@Override
public void addToPlayList(final String artist, final String title) {
if(mpd != null) {
Runnable r = new Runnable() {
@Override
public void run() {
MPDDatabase db = mpd.getMPDDatabase(); MPDDatabase db = mpd.getMPDDatabase();
MPDPlaylist playlist = mpd.getMPDPlaylist(); MPDPlaylist playlist = mpd.getMPDPlaylist();
@ -85,16 +95,11 @@ public class MPDController implements IMPDController {
List<MPDSong> tracks = new ArrayList<MPDSong>(db.findArtist(artist)); List<MPDSong> tracks = new ArrayList<MPDSong>(db.findArtist(artist));
for(MPDSong song: tracks) { for(MPDSong song: tracks) {
if(song.getName() != null && if(song.getName() != null && song.getName().toLowerCase().contains(title.toLowerCase())) {
song.getName().toLowerCase().contains(title.toLowerCase())) {
if(!playlist.getSongList().contains(song)) {
playlist.addSong(song); playlist.addSong(song);
}
break; break;
} }
} }
} catch (MPDConnectionException e) { } catch (MPDConnectionException e) {
Logger.sLog("MPD error: " + e.getMessage()); Logger.sLog("MPD error: " + e.getMessage());
} catch (MPDDatabaseException e) { } catch (MPDDatabaseException e) {
@ -103,6 +108,13 @@ public class MPDController implements IMPDController {
Logger.sLog("MPD error: " + e.getMessage()); Logger.sLog("MPD error: " + e.getMessage());
} }
} }
};
synchronized (lockObject) {
new Thread(r).start();
}
}
}
/** /**
* Sets the current mpd volume * Sets the current mpd volume
@ -111,7 +123,6 @@ public class MPDController implements IMPDController {
@Override @Override
public void setVolume(final int volume) { public void setVolume(final int volume) {
if(mpd != null) { if(mpd != null) {
Runnable r = new Runnable() { Runnable r = new Runnable() {
@Override @Override
public void run() { public void run() {
@ -125,9 +136,60 @@ public class MPDController implements IMPDController {
} }
}; };
synchronized (mpd) { synchronized (lockObject) {
new Thread(r).start(); new Thread(r).start();
} }
} }
} }
/**
* Clears the current mpd playlist
*/
@Override
public void clearPlaylist() {
if(mpd != null) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
MPDPlaylist playlist = mpd.getMPDPlaylist();
playlist.clearPlaylist();
} catch (MPDConnectionException e) {
Logger.sLog("MPD error: " + e.getMessage());
} catch (MPDPlaylistException e) {
Logger.sLog("MPD error: " + e.getMessage());
}
}
};
synchronized (lockObject) {
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());
}
}
} }