package com.simplecity.amp_library.glide.fetcher; import android.text.TextUtils; import android.util.Log; import com.bumptech.glide.util.ContentLengthInputStream; import com.simplecity.amp_library.http.HttpClient; import com.simplecity.amp_library.model.ArtworkProvider; import java.io.IOException; import java.io.InputStream; import okhttp3.Request; import okhttp3.Response; import retrofit2.Call; abstract class BaseRemoteFetcher extends BaseFetcher { Call retrofitCall; private okhttp3.Call okHttpCall; private Response response; BaseRemoteFetcher(ArtworkProvider artworkProvider) { super(artworkProvider); } abstract String getUrl() throws IOException; @Override protected InputStream getStream() throws IOException { try { if (!TextUtils.isEmpty(getUrl())) { Request request = new Request.Builder().url(getUrl()).build(); okHttpCall = HttpClient.getInstance().okHttpClient.newCall(request); response = okHttpCall.execute(); if (response.isSuccessful()) { long contentLength = response.body().contentLength(); stream = ContentLengthInputStream.obtain(response.body().byteStream(), contentLength); return stream; } else { response.close(); } } } catch (IOException e) { Log.e(getTag(), "getStream() failed: " + e.toString()); } return stream; } @Override public void cleanup() { super.cleanup(); if (response != null) { response.close(); } } @Override public void cancel() { super.cancel(); if (retrofitCall != null) { retrofitCall.cancel(); } if (okHttpCall != null) { okHttpCall.cancel(); } } }