My fork of airsonic with experimental fixes and improvements. See branch "custom"
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
airsonic-custom/airsonic-main/src/main/java/org/airsonic/player/service/playlist/XspfPlaylistExportHandler.java

66 lines
2.3 KiB

package org.airsonic.player.service.playlist;
import chameleon.playlist.SpecificPlaylist;
import chameleon.playlist.SpecificPlaylistProvider;
import chameleon.playlist.xspf.Location;
import chameleon.playlist.xspf.Track;
import chameleon.playlist.xspf.XspfProvider;
import org.airsonic.player.dao.MediaFileDao;
import org.airsonic.player.dao.PlaylistDao;
import org.airsonic.player.domain.MediaFile;
import org.airsonic.player.domain.Playlist;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component
public class XspfPlaylistExportHandler implements PlaylistExportHandler {
@Autowired
MediaFileDao mediaFileDao;
@Autowired
PlaylistDao playlistDao;
@Override
public boolean canHandle(Class<? extends SpecificPlaylistProvider> providerClass) {
return XspfProvider.class.equals(providerClass);
}
@Override
public SpecificPlaylist handle(int id, SpecificPlaylistProvider provider) {
return createXsfpPlaylistFromDBId(id);
}
chameleon.playlist.xspf.Playlist createXsfpPlaylistFromDBId(int id) {
chameleon.playlist.xspf.Playlist newPlaylist = new chameleon.playlist.xspf.Playlist();
Playlist playlist = playlistDao.getPlaylist(id);
newPlaylist.setTitle(playlist.getName());
newPlaylist.setCreator("Airsonic user " + playlist.getUsername());
newPlaylist.setDate(new Date());
List<MediaFile> files = mediaFileDao.getFilesInPlaylist(id);
files.stream().map(mediaFile -> {
Track track = new Track();
track.setTrackNumber(mediaFile.getTrackNumber());
track.setCreator(mediaFile.getArtist());
track.setTitle(mediaFile.getTitle());
track.setAlbum(mediaFile.getAlbumName());
track.setDuration(mediaFile.getDurationSeconds());
track.setImage(mediaFile.getCoverArtPath());
Location location = new Location();
location.setText(mediaFile.getPath());
track.getStringContainers().add(location);
return track;
}).forEach(newPlaylist::addTrack);
return newPlaylist;
}
@Override
public int getOrder() {
return 0;
}
}