package com.bitmovin.bitcodin.Job;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import com.bitmovin.bitcodin.Thumbnail.ThumbnailLoader;
import com.bitmovin.bitcodin.Thumbnail.ThumbnailLoaderListener;
import com.bitmovin.bitcodin.api.job.JobDetails;
import java.util.ArrayList;
public class BitcodinJob implements ThumbnailLoaderListener {
private int id;
private String inputFilename;
private ArrayList<Source> sources;
private String thumbnailUrl;
private String thumbnail;
private boolean thumbnailLoaded = false;
private ImageView thumbnailHolder;
private ThumbnailLoader mThumbnailLoader;
private boolean thumbnailLoading = false;
public BitcodinJob(JobDetails mJobDetails, ThumbnailLoader mThumbnailLoader) {
this(
mJobDetails.jobId,
mJobDetails.input.filename,
mJobDetails.input.thumbnailUrl,
mThumbnailLoader
);
if (mJobDetails.manifestUrls.mpdUrl != null && !mJobDetails.manifestUrls.mpdUrl.equals("")) {
addSource(mJobDetails.manifestUrls.mpdUrl, BitcodinJob.Source.Type.DASH);
}
if (mJobDetails.manifestUrls.m3u8Url != null && !mJobDetails.manifestUrls.m3u8Url.equals("")) {
addSource(mJobDetails.manifestUrls.m3u8Url, BitcodinJob.Source.Type.HLS);
}
loadThumbnail();
}
public BitcodinJob(int id, String inputFilename, String thumbnailUrl,
ThumbnailLoader mThumbnailLoader) {
this.id = id;
this.inputFilename = inputFilename;
this.sources = new ArrayList<>();
this.thumbnailUrl = thumbnailUrl;
this.thumbnail = null;
this.thumbnailHolder = null;
this.mThumbnailLoader = mThumbnailLoader;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getInputFilename() {
return this.inputFilename;
}
public void setInputFilename(String inputFilename) {
this.inputFilename = inputFilename;
}
public String getThumbnailUrl() {
return this.thumbnailUrl;
}
public void setThumbnailUrl(String thumbnailUrl) {
setThumbnailUrl(thumbnailUrl, false);
}
public void setThumbnailUrl(String thumbnailUrl, boolean loadThumbnail) {
this.thumbnailUrl = thumbnailUrl;
if (loadThumbnail) loadThumbnailAsync();
}
public String getThumbnail() {
return this.thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public void setThumbnailHolder(ImageView thumbnailHolder, boolean setOnLoad) {
if (thumbnailHolder == null) return;
this.thumbnailHolder = thumbnailHolder;
if (setOnLoad) {
if (this.thumbnailLoaded) setThumbnailHolderBackground();
else loadThumbnailAsync();
}
}
public int getNumSources() {
return this.sources.size();
}
public ArrayList<Source> getSources() {
return this.sources;
}
public void setSources(ArrayList<Source> sources) {
this.sources = sources;
}
public void addSource(Source src) {
if (this.sources != null) {
this.sources.add(src);
}
}
public void addSource(String srcUrl, int type) {
addSource(new Source(srcUrl, type));
}
public Source getSource() {
return getSourceAt(0);
}
public boolean hasSource(int type) {
if (this.sources == null || this.sources.size() == 0) {
return false;
} else {
for (Source src : this.sources) {
if (src.getType() == type) {
return true;
}
}
return false;
}
}
public Source getSource(int type) {
for (Source src : this.sources) {
if (src.getType() == type) {
return src;
}
}
return null;
}
public Source getSourceAt(int index) {
if (this.sources == null) return null;
if (index >= this.sources.size()) return null;
else return this.sources.get(index);
}
public boolean removeSource() {
return removeSource(0);
}
public boolean removeSource(int index) {
if (this.sources == null) return false;
if (index >= this.sources.size()) return false;
this.sources.remove(index);
return true;
}
public boolean removeSource(Source src) {
return this.sources != null && this.sources.remove(src);
}
public void loadThumbnail() {
this.thumbnailLoaded = true;
this.thumbnailLoading = false;
this.thumbnail = this.mThumbnailLoader.load((
(this.thumbnailUrl.startsWith("//") ? "http:" : "") +
this.thumbnailUrl).replace(" ", "%20"));
setThumbnailHolderBackground();
}
private void loadThumbnailAsync() {
if (!this.thumbnailLoading) {
this.thumbnailLoading = true;
this.mThumbnailLoader.loadAsync((
(this.thumbnailUrl.startsWith("//") ? "http:" : "") +
this.thumbnailUrl).replace(" ", "%20"), this);
}
}
private void setThumbnailHolderBackground() {
if (this.thumbnailHolder != null) {
this.thumbnailHolder.post(new Runnable() {
@Override
public void run() {
thumbnailHolder.setImageDrawable(Drawable.createFromPath(thumbnail));
}
});
}
}
@Override
public void onThumbnailLoaded(String thumbnailPath) {
this.thumbnailLoaded = true;
this.thumbnailLoading = false;
this.thumbnail = thumbnailPath;
setThumbnailHolderBackground();
}
@Override
public void onError(Throwable th) {
th.printStackTrace();
}
public class Source {
private String srcUrl;
private int type;
public Source(String srcUrl, int type) {
this.srcUrl = srcUrl;
this.type = type;
}
public String getSrcUrl() {
return this.srcUrl;
}
public void setSrcUrl(String srcUrl) {
this.srcUrl = srcUrl;
}
public int getType() {
return this.type;
}
public String getTypeStr() {
switch (this.type) {
case Type.DASH:
return "DASH";
case Type.HLS:
return "HLS";
default:
return "UNKNOWN";
}
}
public void setType(int type) {
this.type = type;
}
public final class Type {
public static final int DASH = 0;
public static final int HLS = 1;
/* TODO: DRM etc. */
public static final int OTHER = -1;
}
}
}