package com.dl7.mvp.engine.danmaku;
import android.graphics.Color;
import android.text.TextUtils;
import com.dl7.mvp.local.table.DanmakuInfo;
import com.dl7.mvp.utils.GsonHelper;
import com.orhanobut.logger.Logger;
import java.util.List;
import master.flame.danmaku.danmaku.model.BaseDanmaku;
import master.flame.danmaku.danmaku.model.IDanmakus;
import master.flame.danmaku.danmaku.model.android.Danmakus;
import master.flame.danmaku.danmaku.parser.BaseDanmakuParser;
import master.flame.danmaku.danmaku.util.DanmakuUtils;
import static android.R.attr.textColor;
/**
* Created by long on 2016/12/22.
* 自定义弹幕解析器,参考A站
*/
public class DanmakuParser extends BaseDanmakuParser {
@Override
protected IDanmakus parse() {
if (mDataSource != null && mDataSource instanceof JsonStrSource) {
JsonStrSource jsonSource = (JsonStrSource) mDataSource;
return _doParse(jsonSource.data());
}
return new Danmakus();
}
/**
* @param jsonStr 弹幕数据
* @return 转换后的Danmakus
*/
private Danmakus _doParse(String jsonStr) {
Logger.w(jsonStr);
Danmakus danmakus = new Danmakus();
if (TextUtils.isEmpty(jsonStr)) {
return danmakus;
}
try {
// 有同志提交了关于 Gson 解析的问题处理,这里去掉之前的 Fastjson
// List<DanmakuInfo> datas = JSON.parseArray(jsonStr, DanmakuInfo.class);
List<DanmakuInfo> datas = GsonHelper.convertEntities(jsonStr, DanmakuInfo.class);
Logger.i(datas.toString());
int size = datas.size();
for (int i = 0; i < size; i++) {
BaseDanmaku item = mContext.mDanmakuFactory.createDanmaku(datas.get(i).getType(), mContext);
if (item != null) {
item.setTime(datas.get(i).getTime());
item.textSize = datas.get(i).getTextSize();
item.textColor = datas.get(i).getTextColor();
item.textShadowColor = textColor <= Color.BLACK ? Color.WHITE : Color.BLACK;
DanmakuUtils.fillText(item, datas.get(i).getContent());
item.index = i;
item.setTimer(mTimer);
danmakus.addItem(item);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return danmakus;
}
}