/* * Copyright (c) 2013, Sorokin Alexander (uas.sorokin@gmail.com) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. The names of the authors may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.uas.media.aimp.player; import com.uas.media.aimp.api.ApiException; import com.uas.media.aimp.api.IPlugin; import com.uas.media.aimp.api.models.CurrentSongInfo; import com.uas.media.aimp.api.models.Playlist; import com.uas.media.aimp.api.models.Song; import java.io.IOException; import java.util.List; /** * User: uas.sorokin@gmail.com */ class AimpPlayerPackageLoaders { public static final boolean CHECK_HASH_YES = true; public static final boolean CHECK_HASH_NO = false; private AimpPlayer mPlayer; AimpPlayerPackageLoaders(AimpPlayer player) { mPlayer = player; } void loadCommons() throws InterruptedException, IOException, ApiException { boolean isShuffle = mPlayer.getPlugin().isShuffle(); boolean isRepeat = mPlayer.getPlugin().isRepeatSong(); boolean isMute = mPlayer.getPlugin().isMute(); AimpPlayer.PlayState playState = mPlayer.getPlugin().getPlayState() == IPlugin.PLAY_STATE_PLAYING ? AimpPlayer.PlayState.PLAYING : AimpPlayer.PlayState.STOPPED ; synchronized (mPlayer) { mPlayer.setStateIsShuffle(isShuffle); mPlayer.setStateIsRepeatSong(isRepeat); mPlayer.setStateIsMute(isMute); mPlayer.setStatePlayState(playState); } } void loadSongPlayPosition() throws InterruptedException, IOException, ApiException { int playPosition = mPlayer.getPlugin().getSongPlayPosition(); synchronized (mPlayer) { int duration = mPlayer.getCurrentSong().getDuration(); mPlayer.setStateSongPlayPosition(Math.min(playPosition, duration)); } } void loadCurrentSong() throws InterruptedException, IOException, ApiException { CurrentSongInfo currentSong = mPlayer.getPlugin().getCurrentSongInfo(); int songPlayPosition = mPlayer.getPlugin().getSongPlayPosition(); int checkedSongPlayPosition = currentSong.getSongPosition() < 0 ? 0 : songPlayPosition; synchronized (mPlayer) { mPlayer.setStateCurrentSong( currentSong.getPlaylistId(), currentSong.getSongPosition(), checkedSongPlayPosition ); } } void loadVolume() throws InterruptedException, IOException, ApiException { int volume = mPlayer.getPlugin().getVolume(); synchronized (mPlayer) { mPlayer.setStateVolumeValue(volume); } } void loadPlaylists(boolean checkHash) throws InterruptedException, IOException, ApiException { List<Playlist> plsListRemote = mPlayer.getPlugin().getPlaylists(); // we should download songs only if flag is set if (!checkHash) { for (Playlist pl: plsListRemote) { loadPlaylistSongs(pl); } } else { for (Playlist pRemote: plsListRemote) { Playlist pLocal = mPlayer.getPlaylistById(pRemote.getId()); if (pLocal == null || !pLocal.getHash().equals(pRemote.getHash())) { loadPlaylistSongs(pRemote); } else { pRemote.setSongs(pLocal.getSongs()); } } } // load current playlist id int currentPlaylistId = mPlayer.getPlugin().getCurrentSongInfo().getPlaylistId(); synchronized (mPlayer) { mPlayer.setStatePlaylists(plsListRemote, currentPlaylistId); } } /** * Load songs to specified playlist * @param pl - Playlist to load songs */ void loadPlaylistSongs(Playlist pl) throws InterruptedException, IOException, ApiException { List<Song> s = mPlayer.getPlugin().getPlaylistSongs(pl.getId()); pl.setSongs(s); } }