package com.bitmovin.bitcodin.Thumbnail;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.util.Log;
import com.bitmovin.bitcodin.Settings;
import com.bitmovin.bitcodin.Utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ref.WeakReference;
@SuppressWarnings("FieldCanBeLocal")
public class ThumbnailLoader extends Thread {
private static final String TAG = "ThumbnailLoader";
private MessageHandler mMessageHandler;
private Messenger mMessenger;
private File thumbnailFile;
private InputStream mInputStream;
private OutputStream mOutputStream;
private byte[] buffer;
private ThumbnailManager mThumbnailManager;
public ThumbnailLoader(ThumbnailManager mThumbnailManager) {
this.mThumbnailManager = mThumbnailManager;
this.buffer = new byte[1024];
this.start();
}
@Override
public void run() {
Looper.prepare();
mMessageHandler = new MessageHandler(this);
mMessenger = new Messenger(mMessageHandler);
Log.i(TAG, "starting looper...");
Looper.loop();
}
public String load(String url) {
downloadThumbnail(new ThumbnailJob(url, null));
return this.thumbnailFile.getAbsolutePath();
}
public void loadAsync(String url, ThumbnailLoaderListener listener) {
try {
this.mMessenger.send(Message.obtain(
null,
MessageHandler.Action.DOWNLOAD,
new ThumbnailJob(
url,
listener
)));
} catch (Exception ex) {
listener.onError(ex);
}
}
private void downloadThumbnail(ThumbnailJob data) {
try {
Utils.makeDirs(Settings.THUMBNAIL_CACHE);
this.thumbnailFile = new File(
Settings.THUMBNAIL_CACHE + data.url.substring(data.url.lastIndexOf("/"))
);
if (!this.thumbnailFile.exists()) {
this.mInputStream = new java.net.URL(data.url).openStream();
this.mOutputStream = new FileOutputStream(thumbnailFile, false);
int len;
while ((len = this.mInputStream.read(buffer)) > 0) {
this.mOutputStream.write(buffer, 0, len);
}
this.mInputStream.close();
this.mOutputStream.flush();
this.mOutputStream.close();
}
this.mThumbnailManager.add(this.thumbnailFile.getAbsolutePath());
if (data.listener != null) {
data.listener.onThumbnailLoaded(thumbnailFile.getAbsolutePath());
}
} catch (Exception ex) {
if (data.listener != null) {
data.listener.onError(ex);
}
}
}
private static class MessageHandler extends Handler {
private WeakReference<ThumbnailLoader> mThumbnailLoaderRef;
public MessageHandler(ThumbnailLoader mThumbnailLoader) {
this.mThumbnailLoaderRef = new WeakReference<>(mThumbnailLoader);
}
public static class Action {
public static final int DOWNLOAD = 0;
}
@Override
public void handleMessage(Message msg) {
ThumbnailLoader mThumbnailLoader = this.mThumbnailLoaderRef.get();
switch (msg.what) {
case Action.DOWNLOAD:
mThumbnailLoader.downloadThumbnail((ThumbnailJob) msg.obj);
break;
}
}
}
private static class ThumbnailJob {
String url;
ThumbnailLoaderListener listener;
public ThumbnailJob(String url, ThumbnailLoaderListener listener) {
this.url = url;
this.listener = listener;
}
}
}