package com.simplecity.amp_library.glide.fetcher;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.data.DataFetcher;
import com.simplecity.amp_library.ShuttleApplication;
import com.simplecity.amp_library.model.ArtworkProvider;
import com.simplecity.amp_library.model.UserSelectedArtwork;
import com.simplecity.amp_library.utils.SettingsManager;
import com.simplecity.amp_library.utils.ShuttleUtils;
import java.io.File;
import java.io.InputStream;
public class MultiFetcher implements DataFetcher<InputStream> {
private static final String TAG = "MultiFetcher";
private DataFetcher<InputStream> dataFetcher;
private ArtworkProvider artworkProvider;
private boolean allowOfflineDownload = false;
public MultiFetcher(ArtworkProvider artworkProvider, boolean allowOfflineDownload) {
this.artworkProvider = artworkProvider;
this.allowOfflineDownload = allowOfflineDownload;
}
private InputStream loadData(DataFetcher<InputStream> dataFetcher, Priority priority) {
InputStream inputStream;
try {
inputStream = dataFetcher.loadData(priority);
} catch (Exception e) {
if (dataFetcher != null) {
dataFetcher.cleanup();
}
inputStream = null;
}
return inputStream;
}
@Override
public InputStream loadData(Priority priority) throws Exception {
InputStream inputStream = null;
//Custom/user selected artwork. Loads from a specific source.
UserSelectedArtwork userSelectedArtwork = ShuttleApplication.getInstance().userSelectedArtwork.get(artworkProvider.getArtworkKey());
if (userSelectedArtwork != null) {
switch (userSelectedArtwork.type) {
case ArtworkProvider.Type.MEDIA_STORE:
dataFetcher = new MediaStoreFetcher(artworkProvider);
break;
case ArtworkProvider.Type.FOLDER:
dataFetcher = new FolderFetcher(artworkProvider, new File(userSelectedArtwork.path));
break;
case ArtworkProvider.Type.TAG:
dataFetcher = new TagFetcher(artworkProvider);
break;
case ArtworkProvider.Type.LAST_FM:
dataFetcher = new LastFmFetcher(artworkProvider);
break;
case ArtworkProvider.Type.ITUNES:
dataFetcher = new ItunesFetcher(artworkProvider);
break;
}
inputStream = loadData(dataFetcher, priority);
}
//No user selected artwork. Check local then remote sources, according to user's preferences.
//Check the MediaStore
if (inputStream == null && !SettingsManager.getInstance().ignoreMediaStoreArtwork()) {
dataFetcher = new MediaStoreFetcher(artworkProvider);
inputStream = loadData(dataFetcher, priority);
}
if (inputStream == null) {
if (SettingsManager.getInstance().preferEmbeddedArtwork()) {
//Check tags
if (!SettingsManager.getInstance().ignoreEmbeddedArtwork()) {
dataFetcher = new TagFetcher(artworkProvider);
inputStream = loadData(dataFetcher, priority);
}
//Check folders
if (inputStream == null && !SettingsManager.getInstance().ignoreFolderArtwork()) {
dataFetcher = new FolderFetcher(artworkProvider, null);
inputStream = loadData(dataFetcher, priority);
}
} else {
//Check folders
if (!SettingsManager.getInstance().ignoreFolderArtwork()) {
dataFetcher = new FolderFetcher(artworkProvider, null);
inputStream = loadData(dataFetcher, priority);
}
//Check tags
if (inputStream == null && !SettingsManager.getInstance().ignoreEmbeddedArtwork()) {
dataFetcher = new TagFetcher(artworkProvider);
inputStream = loadData(dataFetcher, priority);
}
}
}
if (inputStream == null) {
if (allowOfflineDownload
|| (SettingsManager.getInstance().canDownloadArtworkAutomatically()
&& ShuttleUtils.isOnline(true))) {
//Last FM
if (SettingsManager.getInstance().preferLastFM()) {
dataFetcher = new LastFmFetcher(artworkProvider);
inputStream = loadData(dataFetcher, priority);
} else {
dataFetcher = new ItunesFetcher(artworkProvider);
inputStream = loadData(dataFetcher, priority);
}
}
}
return inputStream;
}
@Override
public void cleanup() {
if (dataFetcher != null) {
dataFetcher.cleanup();
}
}
@Override
public void cancel() {
if (dataFetcher != null) {
dataFetcher.cancel();
}
}
private String getCustomArtworkSuffix() {
if (ShuttleApplication.getInstance().userSelectedArtwork.containsKey(artworkProvider.getArtworkKey())) {
UserSelectedArtwork userSelectedArtwork = ShuttleApplication.getInstance().userSelectedArtwork.get(artworkProvider.getArtworkKey());
return "_" + userSelectedArtwork.type + "_" + (userSelectedArtwork.path == null ? "" : userSelectedArtwork.path.hashCode());
}
return "";
}
@Override
public String getId() {
return artworkProvider.getArtworkKey() + getCustomArtworkSuffix();
}
}