Package com.tulskiy.musique.playlist

Source Code of com.tulskiy.musique.playlist.PlaylistManager

/*
* Copyright (c) 2008, 2009, 2010, 2011 Denis Tulskiy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
*/

/**
* Author: Denis Tulskiy
* Date: Dec 30, 2009
*/
package com.tulskiy.musique.playlist;

import com.tulskiy.musique.gui.playlist.PlaylistColumn;
import com.tulskiy.musique.library.Library;
import com.tulskiy.musique.system.Application;
import com.tulskiy.musique.system.configuration.Configuration;
import com.tulskiy.musique.system.configuration.PlaylistConfiguration;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;

import static com.tulskiy.musique.playlist.PlaylistListener.Event;

public class PlaylistManager {
    private Application app = Application.getInstance();
    private Configuration config = app.getConfiguration();
    private File PLAYLIST_PATH = new File(app.CONFIG_HOME, "playlists");
    private Logger logger = Logger.getLogger(getClass().getName());
    private ArrayList<Playlist> playlists = new ArrayList<Playlist>();
    private Playlist activePlaylist;
    private Playlist visiblePlaylist;
    private PlaybackOrder order = new PlaybackOrder();
    private Library library;
    private List<PlaylistListener> listeners = new ArrayList<PlaylistListener>();

    public ArrayList<Playlist> getPlaylists() {
        return playlists;
    }

    public void setActivePlaylist(Playlist playlist) {
        if (activePlaylist != playlist) {
            activePlaylist = playlist;
            notifyListeners(playlist, Event.ACTIVATED);
        }
        order.setPlaylist(playlist);
    }

    public Playlist getActivePlaylist() {
        return activePlaylist;
    }

    public void setVisiblePlaylist(Playlist playlist) {
        if (visiblePlaylist != playlist)
            notifyListeners(playlist, Event.SELECTED);
        this.visiblePlaylist = playlist;
    }

    public Playlist getVisiblePlaylist() {
        return visiblePlaylist;
    }

    public Library getLibrary() {
        return library;
    }

    public void loadPlaylists() {
        List<Playlist> list = PlaylistConfiguration.getPlaylists(new ArrayList<Playlist>());

        Playlist libraryPlaylist = new Playlist();
        File file = new File(PLAYLIST_PATH, "library.mus");
        if (file.exists())
            libraryPlaylist.load(file);
        library = new Library(libraryPlaylist);

        for (int i = 0; i < list.size(); i++) {
            Playlist playlist = list.get(i);
            playlist.load(new File(PLAYLIST_PATH, i + ".mus"));
            playlists.add(playlist);
        }

        if (playlists.size() == 0) {
            setActivePlaylist(addPlaylist("Default"));
        }

        int index = config.getInt("playlists.activePlaylist", -1);
        if (index < 0 || index >= playlists.size())
            index = 0;
        setActivePlaylist(playlists.get(index));
        app.getPlayer().setPlaybackOrder(order);

        int lastPlayed = config.getInt("player.lastPlayed", 0);
        if (lastPlayed >= 0 && lastPlayed < activePlaylist.size()) {
            order.setLastPlayed(activePlaylist.get(lastPlayed));
        }

        //need to do it here because lastPlayed index gets shifted
        //after regrouping
        for (Playlist playlist : playlists) {
            playlist.firePlaylistChanged();
        }
    }

    public void saveSettings() {
        //noinspection ResultOfMethodCallIgnored
        PLAYLIST_PATH.mkdir();
        File[] files = PLAYLIST_PATH.listFiles();
        for (File file : files) {
            if (file.getName().endsWith(".mus")) {
                if (!file.delete()) {
                    logger.severe("Could not delete old playlist. Check file permissions");
                }
            }
        }

        for (int i = 0; i < playlists.size(); i++) {
            Playlist playlist = playlists.get(i);
            playlist.save(new File(PLAYLIST_PATH, i + ".mus"));
        }
        library.getData().save(new File(PLAYLIST_PATH, "library.mus"));

        PlaylistConfiguration.setPlaylists(playlists);
        activePlaylist = visiblePlaylist; // workaround since activePlaylist variable isn't updated when tab clicked
        if (activePlaylist != null && playlists.contains(activePlaylist)) {
            config.setInt("playlists.activePlaylist", playlists.indexOf(activePlaylist));

            Track lastPlayed = app.getPlayer().getTrack();
            if (lastPlayed != null) {
                activePlaylist.cleanUp();
                int index = activePlaylist.indexOf(lastPlayed);
                config.setInt("player.lastPlayed", index);
            }
        }
    }

    public int getTotalPlaylists() {
        return playlists.size();
    }

    public Playlist addPlaylist(String name) {
        Playlist playlist = new Playlist();
        playlist.setName(name);
        // default columns
        playlist.setColumns(Arrays.asList(
                new PlaylistColumn("Playing", 55, "$isPlaying()"),
                new PlaylistColumn("Name", 325, "[%artist% - ]%title%"),
                new PlaylistColumn("Length", 70, "%length%"),
                new PlaylistColumn("Album", 225, "%album%"),
                new PlaylistColumn("Date", 55, "%year%")));
        playlists.add(playlist);
        notifyListeners(playlist, Event.ADDED);
        return playlist;
    }

    public void addPlaylist(Playlist playlist) {
        playlists.add(playlist);
        notifyListeners(playlist, Event.ADDED);
    }

    public void removePlaylist(Playlist playlist) {
        playlists.remove(playlist);
        if (playlists.size() == 0) {
            addPlaylist("Default");
        }
        notifyListeners(playlist, Event.REMOVED);
    }

    public void movePlaylist(int from, int to) {
        Playlist p = playlists.get(from);
        if (from > to)
            from++;
        else
            to++;
        playlists.add(to, p);
        playlists.remove(from);
    }

    public synchronized void addPlaylistListener(PlaylistListener listener) {
        listeners.add(listener);
    }

    private synchronized void notifyListeners(Playlist playlist, Event event) {
        for (PlaylistListener listener : listeners) {
            switch (event) {
                case ADDED:
                    listener.playlistAdded(playlist);
                    break;
                case REMOVED:
                    listener.playlistRemoved(playlist);
                    break;
                case SELECTED:
                    listener.playlistSelected(playlist);
                    break;
                case UPDATED:
                    listener.playlistUpdated(playlist);
                    break;
                case ACTIVATED:
                    listener.playlistActivated(playlist);
                    break;
            }

        }
    }

    public synchronized void removePlaylistListener(PlaylistListener playlistListener) {
        listeners.remove(playlistListener);
    }
}
TOP

Related Classes of com.tulskiy.musique.playlist.PlaylistManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.