package com.dl7.mvp.engine.danmaku;
import android.net.Uri;
import android.text.TextUtils;
import com.orhanobut.logger.Logger;
import org.json.JSONException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import master.flame.danmaku.danmaku.parser.IDataSource;
import master.flame.danmaku.danmaku.util.IOUtils;
/**
* Created by long on 2016/12/22.
* 自定义弹幕数据源,参考A站
*/
public class JsonStrSource implements IDataSource<String> {
private String mJsonStr;
private InputStream mInput;
public JsonStrSource(String json) throws JSONException{
init(json);
}
public JsonStrSource(InputStream in) throws JSONException{
init(in);
}
private void init(InputStream in) throws JSONException {
if(in == null)
throw new NullPointerException("input stream cannot be null!");
mInput = in;
Logger.e("init");
String json = IOUtils.getString(mInput);
Logger.w(json);
init(json);
}
public JsonStrSource(URL url) throws JSONException, IOException {
this(url.openStream());
}
public JsonStrSource(File file) throws FileNotFoundException, JSONException{
init(new FileInputStream(file));
}
public JsonStrSource(Uri uri) throws IOException, JSONException {
String scheme = uri.getScheme();
if (SCHEME_HTTP_TAG.equalsIgnoreCase(scheme) || SCHEME_HTTPS_TAG.equalsIgnoreCase(scheme)) {
init(new URL(uri.getPath()).openStream());
} else if (SCHEME_FILE_TAG.equalsIgnoreCase(scheme)) {
init(new FileInputStream(uri.getPath()));
}
}
private void init(String json) throws JSONException {
if(!TextUtils.isEmpty(json)){
mJsonStr = json;
}
}
@Override
public String data(){
return mJsonStr;
}
@Override
public void release() {
IOUtils.closeQuietly(mInput);
mInput = null;
mJsonStr = null;
}
}