Reduced the artist image loading timeout, this should fix album images not showing up when being on slow network.
This commit is contained in:
parent
629b94cf42
commit
abebf06a27
4 changed files with 43 additions and 13 deletions
|
|
@ -12,8 +12,12 @@ import com.kabouzeid.gramophone.util.LastFMUtil;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import hugo.weaving.DebugLog;
|
||||||
|
import retrofit.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
*/
|
*/
|
||||||
|
|
@ -27,6 +31,7 @@ public class ArtistImageFetcher implements DataFetcher<InputStream> {
|
||||||
private final int height;
|
private final int height;
|
||||||
private volatile boolean isCancelled;
|
private volatile boolean isCancelled;
|
||||||
private DataFetcher<InputStream> urlFetcher;
|
private DataFetcher<InputStream> urlFetcher;
|
||||||
|
private InputStream inputStream;
|
||||||
|
|
||||||
public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImage model, ModelLoader<GlideUrl, InputStream> urlLoader, int width, int height) {
|
public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImage model, ModelLoader<GlideUrl, InputStream> urlLoader, int width, int height) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
|
@ -45,12 +50,21 @@ public class ArtistImageFetcher implements DataFetcher<InputStream> {
|
||||||
@Override
|
@Override
|
||||||
public InputStream loadData(Priority priority) throws Exception {
|
public InputStream loadData(Priority priority) throws Exception {
|
||||||
if (!MusicUtil.isArtistNameUnknown(model.artistName) && Util.isAllowedToAutoDownload(context)) {
|
if (!MusicUtil.isArtistNameUnknown(model.artistName) && Util.isAllowedToAutoDownload(context)) {
|
||||||
LastFmArtist lastFmArtist = lastFMRestClient.getApiService().getArtistInfo(model.artistName, model.skipOkHttpCache ? "no-cache" : null).execute().body();
|
Response<LastFmArtist> response = lastFMRestClient.getApiService().getArtistInfo(model.artistName, model.skipOkHttpCache ? "no-cache" : null).execute();
|
||||||
|
|
||||||
|
if (!response.isSuccess()) {
|
||||||
|
throw new IOException("Request failed with code: " + response.code());
|
||||||
|
}
|
||||||
|
|
||||||
|
LastFmArtist lastFmArtist = response.body();
|
||||||
|
|
||||||
if (isCancelled) return null;
|
if (isCancelled) return null;
|
||||||
|
|
||||||
urlFetcher = urlLoader.getResourceFetcher(new GlideUrl(LastFMUtil.getLargestArtistImageUrl(lastFmArtist.getArtist().getImage())), width, height);
|
GlideUrl url = new GlideUrl(LastFMUtil.getLargestArtistImageUrl(lastFmArtist.getArtist().getImage()));
|
||||||
return urlFetcher.loadData(priority);
|
urlFetcher = urlLoader.getResourceFetcher(url, width, height);
|
||||||
|
inputStream = urlFetcher.loadData(priority);
|
||||||
|
|
||||||
|
return inputStream;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -62,11 +76,19 @@ public class ArtistImageFetcher implements DataFetcher<InputStream> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DebugLog
|
||||||
@Override
|
@Override
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
isCancelled = true;
|
isCancelled = true;
|
||||||
if (urlFetcher != null) {
|
if (urlFetcher != null) {
|
||||||
urlFetcher.cancel();
|
urlFetcher.cancel();
|
||||||
}
|
}
|
||||||
|
if (inputStream != null) {
|
||||||
|
try {
|
||||||
|
inputStream.close();
|
||||||
|
} catch (Throwable t) {
|
||||||
|
t.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,10 @@ import com.bumptech.glide.load.model.ModelLoader;
|
||||||
import com.bumptech.glide.load.model.ModelLoaderFactory;
|
import com.bumptech.glide.load.model.ModelLoaderFactory;
|
||||||
import com.bumptech.glide.load.model.stream.StreamModelLoader;
|
import com.bumptech.glide.load.model.stream.StreamModelLoader;
|
||||||
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
||||||
|
import com.squareup.okhttp.OkHttpClient;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
|
@ -38,8 +40,14 @@ public class ArtistImageLoader implements StreamModelLoader<ArtistImage> {
|
||||||
private OkHttpUrlLoader.Factory okHttpFactory;
|
private OkHttpUrlLoader.Factory okHttpFactory;
|
||||||
|
|
||||||
public Factory(Context context) {
|
public Factory(Context context) {
|
||||||
okHttpFactory = new OkHttpUrlLoader.Factory();
|
// we need these very low values to make sure our artist image loading calls doesn't block the image loading queue
|
||||||
lastFMClient = new LastFMRestClient(context);
|
OkHttpClient okHttpClient = new OkHttpClient();
|
||||||
|
okHttpClient.setConnectTimeout(500, TimeUnit.MILLISECONDS);
|
||||||
|
okHttpClient.setReadTimeout(500, TimeUnit.MILLISECONDS);
|
||||||
|
okHttpClient.setWriteTimeout(500, TimeUnit.MILLISECONDS);
|
||||||
|
|
||||||
|
okHttpFactory = new OkHttpUrlLoader.Factory(okHttpClient);
|
||||||
|
lastFMClient = new LastFMRestClient(context, okHttpClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,10 @@ public class LastFMRestClient {
|
||||||
private LastFMService apiService;
|
private LastFMService apiService;
|
||||||
|
|
||||||
public LastFMRestClient(@NonNull Context context) {
|
public LastFMRestClient(@NonNull Context context) {
|
||||||
OkHttpClient okHttpClient = new OkHttpClient();
|
this(context, new OkHttpClient());
|
||||||
|
}
|
||||||
|
|
||||||
|
public LastFMRestClient(@NonNull Context context, @NonNull OkHttpClient okHttpClient) {
|
||||||
File cacheDir = new File(context.getCacheDir().getAbsolutePath(), "/okhttp-lastfm/");
|
File cacheDir = new File(context.getCacheDir().getAbsolutePath(), "/okhttp-lastfm/");
|
||||||
if (cacheDir.mkdirs() || cacheDir.isDirectory()) {
|
if (cacheDir.mkdirs() || cacheDir.isDirectory()) {
|
||||||
okHttpClient.setCache(new Cache(cacheDir, 1024 * 1024 * 10));
|
okHttpClient.setCache(new Cache(cacheDir, 1024 * 1024 * 10));
|
||||||
|
|
|
||||||
|
|
@ -265,21 +265,19 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
|
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
|
||||||
.listener(new RequestListener<ArtistImage, BitmapPaletteWrapper>() {
|
.listener(new RequestListener<ArtistImage, BitmapPaletteWrapper>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onException(Exception e, ArtistImage model, Target<BitmapPaletteWrapper> target, boolean isFirstResource) {
|
public boolean onException(@Nullable Exception e, ArtistImage model, Target<BitmapPaletteWrapper> target, boolean isFirstResource) {
|
||||||
toastUpdatedArtistImageIfDownloadWasForced();
|
if (forceDownload) {
|
||||||
|
Toast.makeText(ArtistDetailActivity.this, e != null ? e.getClass().getSimpleName() : "Error", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onResourceReady(BitmapPaletteWrapper resource, ArtistImage model, Target<BitmapPaletteWrapper> target, boolean isFromMemoryCache, boolean isFirstResource) {
|
public boolean onResourceReady(BitmapPaletteWrapper resource, ArtistImage model, Target<BitmapPaletteWrapper> target, boolean isFromMemoryCache, boolean isFirstResource) {
|
||||||
toastUpdatedArtistImageIfDownloadWasForced();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toastUpdatedArtistImageIfDownloadWasForced() {
|
|
||||||
if (forceDownload) {
|
if (forceDownload) {
|
||||||
Toast.makeText(ArtistDetailActivity.this, getString(R.string.updated_artist_image), Toast.LENGTH_SHORT).show();
|
Toast.makeText(ArtistDetailActivity.this, getString(R.string.updated_artist_image), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.into(new PhonographColoredTarget(artistImage) {
|
.into(new PhonographColoredTarget(artistImage) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue