package com.kitty.poclient.bean;
import java.util.ArrayList;
import java.util.List;
import android.util.Log;
import com.kitty.poclient.common.WatchDog;
import com.kitty.poclient.data.VirtualData;
import com.kitty.poclient.domain.Album;
import com.kitty.poclient.domain.AlbumDetail;
import com.kitty.poclient.domain.Disk;
import com.kitty.poclient.domain.Music;
import com.kitty.poclient.service.impl.AlbumDetailServiceImpl;
public class LocalAlbums extends ArrayList<LocalAlbum> {
/**
*
*/
private static final long serialVersionUID = -2970790984264603754L;
public static LocalAlbums translateAlbumList(List<Album> albumList) {
LocalAlbums localAlbums = new LocalAlbums();
for (int albumIndex = 0; albumIndex < albumList.size(); albumIndex++) {
LocalAlbum localAlbum = new LocalAlbum();
Album album = albumList.get(albumIndex);
localAlbum.setName(album.getName()); // name
AlbumDetail albumDetail = new AlbumDetailServiceImpl().getAblumDetail(album.getId());
if(albumDetail == null){
albumList.remove(albumIndex);
continue;
}
List<Disk> diskList = albumDetail.getDisklist();
List<Music> musicList = new ArrayList<Music>();
for (Disk disk : diskList) {
// Log.i("AlbumListCache", "disk:size=" + diskList.size());
musicList.addAll(disk.getMusicList());
}
Log.i("AlbumListCache", "musicList:size=" + musicList.size());
int totalMusicNum = musicList.size();
if(totalMusicNum == 0){
albumList.remove(albumIndex);
continue;
}
localAlbum.setTotalMusicNum(totalMusicNum); // total music number
int waitMusicNum = 0;
int loadedMusicNum = 0;
int loadingMusicNum = 0;
int cacheFailMusicNum = 0;
for (int musicIndex = 0; musicIndex < totalMusicNum; musicIndex++) {
long id = musicList.get(musicIndex).getId();
if (WatchDog.cacheStateMap.containsKey(id) == false) {
waitMusicNum++;
} else{
if (WatchDog.cacheStateMap.get(id).equals(Music.CACHE_WAIT)) {
waitMusicNum++;
} else if (WatchDog.cacheStateMap.get(id).equals(Music.CACHE_DOWNLOADED)) {
loadedMusicNum++;
} else if (WatchDog.cacheStateMap.get(id).equals(Music.CACHE_DOWNLOADING)) {
loadingMusicNum++;
} else if (WatchDog.cacheStateMap.get(id).equals(Music.CACHE_FAILURE_NOSPACE)){
cacheFailMusicNum++;
} else {
//不明状态
waitMusicNum++;
}
}
}
localAlbum.setWaitMusicNum(waitMusicNum); // wait music number
localAlbum.setdownloadingMusicNum(loadingMusicNum); // loading music number
localAlbum.setDownloadedMusicNum(loadedMusicNum); // loaded music number
localAlbum.setFailCachedMusicNum(cacheFailMusicNum); // failcache music number
int cacheStatus;
if(loadedMusicNum == totalMusicNum){
cacheStatus = LocalCache.CACHE_STATUS_DOWNLOADED;
} else {
if(loadingMusicNum > 0){
cacheStatus = LocalCache.CACHE_STATUS_DOWNLOADING;
} else if(cacheFailMusicNum > 0){
cacheStatus = LocalCache.CACHE_STATUS_FAILURE_NOSPACE;
} else {
cacheStatus = LocalCache.CACHE_STATUS_WAIT;
}
}
localAlbum.setCacheStatus(cacheStatus); // cache status
// Log.i("AlbumListCache", "localAlbum:cacheStatus"+cacheStatus);
// Log.i("AlbumListCache", "localAlbum:totalMusicNum"+totalMusicNum);
// Log.i("AlbumListCache", "localAlbum:loadedMusicNum"+loadedMusicNum);
// Log.i("AlbumListCache", "localAlbum:loadingMusicNum"+loadingMusicNum);
localAlbums.add(localAlbum);
}
return localAlbums;
}
public void refreshAlbumCacheStatus(int albumIndex){
Album album = VirtualData.albums.get(albumIndex);
AlbumDetail albumDetail = new AlbumDetailServiceImpl().getAblumDetail(album.getId());
List<Disk> diskList = albumDetail.getDisklist();
List<Music> musicList = new ArrayList<Music>();
for (Disk disk : diskList) {
musicList.addAll(disk.getMusicList());
}
int totalMusicNum = musicList.size();
int waitMusicNum = 0;
int loadedMusicNum = 0;
int loadingMusicNum = 0;
int cacheFailMusicNum = 0;
for (int musicIndex = 0; musicIndex < totalMusicNum; musicIndex++) {
long id = musicList.get(musicIndex).getId();
if (WatchDog.cacheStateMap.containsKey(id) == false) {
waitMusicNum++;
} else{
if (WatchDog.cacheStateMap.get(id).equals(Music.CACHE_WAIT)) {
waitMusicNum++;
} else if (WatchDog.cacheStateMap.get(id).equals(Music.CACHE_DOWNLOADED)) {
loadedMusicNum++;
} else if (WatchDog.cacheStateMap.get(id).equals(Music.CACHE_DOWNLOADING)) {
loadingMusicNum++;
} else if (WatchDog.cacheStateMap.get(id).equals(Music.CACHE_FAILURE_NOSPACE)){
cacheFailMusicNum++;
} else {
//不明状态
waitMusicNum++;
}
}
}
int cacheStatus;
if(loadedMusicNum == totalMusicNum){
cacheStatus = LocalCache.CACHE_STATUS_DOWNLOADED;
} else {
if(loadingMusicNum > 0){
cacheStatus = LocalCache.CACHE_STATUS_DOWNLOADING;
} else if(cacheFailMusicNum > 0){
cacheStatus = LocalCache.CACHE_STATUS_FAILURE_NOSPACE;
} else {
cacheStatus = LocalCache.CACHE_STATUS_WAIT;
}
}
LocalAlbum relevantAlbum = get(albumIndex);
relevantAlbum.setWaitMusicNum(waitMusicNum); // wait music number
relevantAlbum.setdownloadingMusicNum(loadingMusicNum); // loading music number
relevantAlbum.setDownloadedMusicNum(loadedMusicNum); // loaded music number
relevantAlbum.setFailCachedMusicNum(cacheFailMusicNum); // failcache music number
relevantAlbum.setCacheStatus(cacheStatus);
}
public List<Music> getAllMusicOfAlbum(Album album){
AlbumDetail albumDetail = new AlbumDetailServiceImpl().getAblumDetail(album.getId());
List<Disk> diskList = albumDetail.getDisklist();
List<Music> musicList = new ArrayList<Music>();
for (Disk disk : diskList) {
musicList.addAll(disk.getMusicList());
}
return musicList;
}
public int getParentAlbumIndex(long musicId){
int albumIndex = -1;
for (int index = 0; index < VirtualData.albums.size(); index++) {
Album album = VirtualData.albums.get(index);
List<Music> musicList = getAllMusicOfAlbum(album);
for (int musicIndex = 0; musicIndex < musicList.size(); musicIndex++) {
if(musicList.get(musicIndex).getId() == musicId){
albumIndex = index;
break;
}
}
}
return albumIndex;
}
}