package com.quiltplayer.controller;
import java.awt.event.ActionEvent;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.quiltplayer.core.scanner.CoverScanner;
import com.quiltplayer.core.storage.ArtistStorage;
import com.quiltplayer.core.storage.Storage;
import com.quiltplayer.external.covers.model.LocalImage;
import com.quiltplayer.model.Album;
import com.quiltplayer.model.Artist;
import com.quiltplayer.model.ArtistName;
import com.quiltplayer.model.Song;
import com.quiltplayer.model.StringId;
import com.quiltplayer.model.jotify.JotifyAlbum;
import com.quiltplayer.view.swing.listeners.AddAlbumListener;
import com.quiltplayer.view.swing.panels.UtilityPanel;
import com.quiltplayer.view.swing.panels.controlpanels.AlbumControlPanel;
/**
* Controller for adding non-ID3 albums.
*
* @author Vlado Palczynski
*/
@Controller()
public class AddAlbumController implements AddAlbumListener {
public static final String EVENT_ADD_ALBUM = "add.album";
private Logger log = Logger.getLogger(AddAlbumController.class);
@Autowired
private Storage storage;
@Autowired
private ArtistStorage artistStorage;
@Autowired
private UtilityPanel playlistPanel;
@Autowired
private CoverScanner coverScanner;
@Autowired
private AlbumControlPanel albumControlPanel;
/*
* @see
* java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public final void actionPerformed(final ActionEvent e) {
if (EVENT_ADD_ALBUM == e.getActionCommand()) {
final Album album = playlistPanel.getPlayingAlbum();
if (album instanceof JotifyAlbum) {
// TODO Could be a Task...
new Thread() {
/*
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
@Override
public void run() {
// TODO double code, same as in DefaultID3Scanner.
StringId artistId = new StringId(album.getArtist().getArtistName().getName());
Artist artist = artistStorage.getArtist(artistId);
if (artist == null) {
log.debug("Artist " + artistId.getId() + " not found, creating...");
artist = artistStorage.createArtist(artistId);
}
artist.setArtistName(new ArtistName(album.getArtist().getArtistName().getName()));
artist.setSpotifyId(album.getArtist().getSpotifyId());
StringId albumId;
if (album instanceof JotifyAlbum)
albumId = album.getId();
else
albumId = new StringId(album.getTitle());
Album quiltAlbum = storage.getAlbum(albumId);
if (quiltAlbum == null) {
log.debug("Album not found, creating...");
quiltAlbum = storage.createAlbum(albumId);
artist.addAlbum(quiltAlbum);
}
if (!artist.hasAlbum(quiltAlbum))
artist.addAlbum(quiltAlbum);
quiltAlbum.setTitle(album.getTitle());
quiltAlbum.setArtist(artist);
quiltAlbum.setType(Album.TYPE_SPOTIFY);
quiltAlbum.setSpotifyId(album.getSpotifyId());
quiltAlbum.setYear(album.getYear());
for (Song s : album.getSongCollection().getSongs()) {
StringId songId = new StringId(album.getTitle() + s.getTitle());
Song song = storage.getSong(album.getTitle(), songId);
if (song == null) {
song = storage.createSong(songId);
quiltAlbum.addSong(song);
}
song.setFileName(s.getFileName());
song.setTitle(s.getTitle());
song.setTrackNumber(s.getTrackNumber());
song.setSpotifyId(s.getSpotifyId());
song.setType(Song.TYPE_SPOTIFY);
song.setDuration(s.getDuration());
}
/* Add cover */
if (!album.getImages().isEmpty()) {
quiltAlbum.deleteImages();
LocalImage image = album.getImages().get(0);
image.setType(LocalImage.TYPE_PRIMARY);
LocalImage localImage = storage.createLocalImage(quiltAlbum, image.getLargeImage()
.getName(), image);
album.getImages().add(localImage);
}
coverScanner.scanCovers(quiltAlbum);
albumControlPanel.update(album);
}
}.start();
}
}
}
}