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.
97 lines
2.7 KiB
97 lines
2.7 KiB
package org.airsonic.player.service.playlist;
|
|
|
|
import chameleon.playlist.*;
|
|
import org.airsonic.player.domain.MediaFile;
|
|
import org.airsonic.player.service.MediaFileService;
|
|
import org.apache.commons.lang3.tuple.Pair;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.core.Ordered;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.io.File;
|
|
import java.net.URI;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
@Component
|
|
public class DefaultPlaylistImportHandler implements PlaylistImportHandler {
|
|
|
|
@Autowired
|
|
MediaFileService mediaFileService;
|
|
|
|
@Override
|
|
public boolean canHandle(Class<? extends SpecificPlaylist> playlistClass) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public Pair<List<MediaFile>, List<String>> handle(
|
|
SpecificPlaylist inputSpecificPlaylist
|
|
) {
|
|
List<MediaFile> mediaFiles = new ArrayList<>();
|
|
List<String> errors = new ArrayList<>();
|
|
try {
|
|
inputSpecificPlaylist.toPlaylist().acceptDown(new PlaylistVisitor() {
|
|
@Override
|
|
public void beginVisitPlaylist(Playlist playlist) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void endVisitPlaylist(Playlist playlist) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void beginVisitParallel(Parallel parallel) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void endVisitParallel(Parallel parallel) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void beginVisitSequence(Sequence sequence) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void endVisitSequence(Sequence sequence) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void beginVisitMedia(Media media) {
|
|
try {
|
|
URI uri = media.getSource().getURI();
|
|
File file = new File(uri);
|
|
MediaFile mediaFile = mediaFileService.getMediaFile(file);
|
|
if (mediaFile != null) {
|
|
mediaFiles.add(mediaFile);
|
|
} else {
|
|
errors.add("Cannot find media file " + file);
|
|
}
|
|
} catch (Exception e) {
|
|
errors.add(e.getMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void endVisitMedia(Media media) {
|
|
|
|
}
|
|
});
|
|
} catch (Exception e) {
|
|
errors.add(e.getMessage());
|
|
}
|
|
|
|
return Pair.of(mediaFiles, errors);
|
|
}
|
|
|
|
@Override
|
|
public int getOrder() {
|
|
return Ordered.LOWEST_PRECEDENCE;
|
|
}
|
|
}
|
|
|