- 指定搜索源弹窗卡顿bug修复 (by okjack)

- 嗅探规则配置新增filter字段 (by okjack)
pull/68/head
okjackcaptain 4 years ago
parent 29fd780334
commit 4d62279650
  1. 27
      app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java
  2. 14
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  3. 10
      app/src/main/java/com/github/tvbox/osc/ui/adapter/CheckboxSearchAdapter.java
  4. 4
      app/src/main/java/com/github/tvbox/osc/ui/dialog/SearchCheckboxDialog.java
  5. 14
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
  6. 22
      app/src/main/java/com/github/tvbox/osc/util/SearchHelper.java
  7. 68
      app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java
  8. 2
      app/src/main/res/layout/dialog_checkbox_search.xml

@ -384,13 +384,28 @@ public class ApiConfig {
for(JsonElement oneHostRule : infoJson.getAsJsonArray("rules")) {
JsonObject obj = (JsonObject) oneHostRule;
String host = obj.get("host").getAsString();
JsonArray ruleJsonArr = obj.getAsJsonArray("rule");
ArrayList<String> rule = new ArrayList<>();
for(JsonElement one : ruleJsonArr) {
String oneRule = one.getAsString();
rule.add(oneRule);
if (obj.has("rule")) {
JsonArray ruleJsonArr = obj.getAsJsonArray("rule");
ArrayList<String> rule = new ArrayList<>();
for(JsonElement one : ruleJsonArr) {
String oneRule = one.getAsString();
rule.add(oneRule);
}
if (rule.size() > 0) {
VideoParseRuler.addHostRule(host, rule);
}
}
if (obj.has("filter")) {
JsonArray filterJsonArr = obj.getAsJsonArray("filter");
ArrayList<String> filter = new ArrayList<>();
for(JsonElement one : filterJsonArr) {
String oneFilter = one.getAsString();
filter.add(oneFilter);
}
if (filter.size() > 0) {
VideoParseRuler.addHostFilter(host, filter);
}
}
VideoParseRuler.addHostRule(host, rule);
}
}
// 广告地址

@ -1437,6 +1437,13 @@ public class PlayActivity extends BaseActivity {
}
return null;
}
boolean isFilter = VideoParseRuler.isFilter(webUrl, url);
if (isFilter) {
LOG.i( "shouldInterceptLoadRequest filter:" + url);
return null;
}
boolean ad;
if (!loadedUrls.containsKey(url)) {
ad = AdBlocker.isAd(url);
@ -1608,6 +1615,13 @@ public class PlayActivity extends BaseActivity {
}
return null;
}
boolean isFilter = VideoParseRuler.isFilter(webUrl, url);
if (isFilter) {
LOG.i( "shouldInterceptLoadRequest filter:" + url);
return null;
}
boolean ad;
if (!loadedUrls.containsKey(url)) {
ad = AdBlocker.isAd(url);

@ -47,6 +47,7 @@ public class CheckboxSearchAdapter extends ListAdapter<SourceBean, CheckboxSearc
data.addAll(newData);
setCheckedSource(checkedSources);
notifyDataSetChanged();
SearchHelper.putCheckedSources(checkedSources);
}
@ -56,13 +57,13 @@ public class CheckboxSearchAdapter extends ListAdapter<SourceBean, CheckboxSearc
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
SourceBean sourceBean = data.get(position);
public void onBindViewHolder(ViewHolder holder, int position) {
int pos = holder.getAdapterPosition();
SourceBean sourceBean = data.get(pos);
holder.oneSearchSource.setOnCheckedChangeListener(null);
holder.oneSearchSource.setText(sourceBean.getName());
if (mCheckedSources != null) {
holder.oneSearchSource.setChecked(mCheckedSources.containsKey(sourceBean.getKey()));
SearchHelper.putCheckedSources(mCheckedSources);
}
holder.oneSearchSource.setTag(sourceBean);
holder.oneSearchSource.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@ -73,7 +74,8 @@ public class CheckboxSearchAdapter extends ListAdapter<SourceBean, CheckboxSearc
} else {
mCheckedSources.remove(sourceBean.getKey());
}
notifyItemChanged(position);
SearchHelper.putCheckedSource(sourceBean.getKey(), isChecked);
notifyItemChanged(pos);
}
});
}

@ -85,9 +85,7 @@ public class SearchCheckboxDialog extends BaseDialog{
public void onClick(View view) {
FastClickCheckUtil.check(view);
for(SourceBean sourceBean : mSourceList) {
if (mCheckSourcees.containsKey(sourceBean.getKey())) {
mCheckSourcees.remove(sourceBean.getKey());
} else {
if (!mCheckSourcees.containsKey(sourceBean.getKey())) {
mCheckSourcees.put(sourceBean.getKey(), "1");
}
}

@ -1455,6 +1455,13 @@ public class PlayFragment extends BaseLazyFragment {
}
return null;
}
boolean isFilter = VideoParseRuler.isFilter(webUrl, url);
if (isFilter) {
LOG.i( "shouldInterceptLoadRequest filter:" + url);
return null;
}
boolean ad;
if (!loadedUrls.containsKey(url)) {
ad = AdBlocker.isAd(url);
@ -1626,6 +1633,13 @@ public class PlayFragment extends BaseLazyFragment {
}
return null;
}
boolean isFilter = VideoParseRuler.isFilter(webUrl, url);
if (isFilter) {
LOG.i( "shouldInterceptLoadRequest filter:" + url);
return null;
}
boolean ad;
if (!loadedUrls.containsKey(url)) {
ad = AdBlocker.isAd(url);

@ -47,4 +47,26 @@ public class SearchHelper {
Hawk.put(HawkConfig.SOURCES_FOR_SEARCH, mCheckSourcesForApi);
}
public static void putCheckedSource(String siteKey, boolean checked) {
String api = Hawk.get(HawkConfig.API_URL, "");
if (api.isEmpty()) {
return;
}
HashMap<String, HashMap<String, String>> mCheckSourcesForApi = Hawk.get(HawkConfig.SOURCES_FOR_SEARCH, new HashMap<String, HashMap<String, String>>());
if (mCheckSourcesForApi == null || mCheckSourcesForApi.isEmpty()) {
mCheckSourcesForApi = new HashMap<String, HashMap<String, String>>();
}
if (mCheckSourcesForApi.get(api) == null) {
mCheckSourcesForApi.put(api, new HashMap<>());
}
if (checked) {
mCheckSourcesForApi.get(api).put(siteKey, "1");
} else {
if (mCheckSourcesForApi.get(api).containsKey(siteKey)) {
mCheckSourcesForApi.get(api).remove(siteKey);
}
}
Hawk.put(HawkConfig.SOURCES_FOR_SEARCH, mCheckSourcesForApi);
}
}

@ -8,6 +8,7 @@ import java.util.regex.Pattern;
public class VideoParseRuler {
private static final HashMap<String, ArrayList<ArrayList<String>>> HOSTS_RULE = new HashMap<>();
private static final HashMap<String, ArrayList<ArrayList<String>>> HOSTS_FILTER = new HashMap<>();
public static void addHostRule(String host, ArrayList<String> rule) {
ArrayList<ArrayList<String>> rules = new ArrayList<>();
@ -25,6 +26,22 @@ public class VideoParseRuler {
return null;
}
public static void addHostFilter(String host, ArrayList<String> rule) {
ArrayList<ArrayList<String>> filters = new ArrayList<>();
if (HOSTS_FILTER.get(host) != null && HOSTS_FILTER.get(host).size() > 0) {
filters = HOSTS_FILTER.get(host);
}
filters.add(rule);
HOSTS_FILTER.put(host, filters);
}
public static ArrayList<ArrayList<String>> getHostFilters(String host) {
if (HOSTS_FILTER.containsKey(host)) {
return HOSTS_FILTER.get(host);
}
return null;
}
public static boolean checkIsVideoForParse(String webUrl, String url) {
try {
boolean isVideo = DefaultConfig.isVideoFormat(url);
@ -57,7 +74,7 @@ public class VideoParseRuler {
checkIsVideo = false;
break;
}
LOG.i("RULE:" + hostRules.get(i).get(j));
LOG.i("VIDEO RULE:" + hostRules.get(i).get(j));
}
} else {
checkIsVideo = false;
@ -74,4 +91,53 @@ public class VideoParseRuler {
return isVideo;
}
public static boolean isFilter(String webUrl, String url) {
try {
boolean isFilter = false;
if (!HOSTS_FILTER.isEmpty() && webUrl != null) {
Uri uri = Uri.parse(webUrl);
if(getHostFilters(uri.getHost()) != null){
isFilter = checkIsFilterForOneHostRules(uri.getHost(), url);
}
}
return isFilter;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static boolean checkIsFilterForOneHostRules(String host, String url) {
boolean isFilter = false;
ArrayList<ArrayList<String>> hostFilters = getHostFilters(host);
if (hostFilters != null && hostFilters.size() > 0) {
boolean isFilterRuleCheck = false;
for(int i=0; i<hostFilters.size(); i++) {
boolean checkIsFilter = true;
if (hostFilters.get(i) != null && hostFilters.get(i).size() > 0) {
for(int j=0; j<hostFilters.get(i).size(); j++) {
Pattern onePattern = Pattern.compile("" + hostFilters.get(i).get(j));
if (!onePattern.matcher(url).find()) {
checkIsFilter = false;
break;
}
LOG.i("FILTER RULE:" + hostFilters.get(i).get(j));
}
} else {
checkIsFilter = false;
}
if (checkIsFilter) {
isFilterRuleCheck = true;
break;
}
}
if (isFilterRuleCheck) {
isFilter = true;
}
}
return isFilter;
}
}

@ -28,7 +28,7 @@
android:padding="@dimen/vs_30"
android:textColor="@color/color_FFFFFF"
android:textSize="@dimen/ts_26"
android:text="全选/反选" />
android:text="全选" />
<TextView
android:id="@+id/clearAll"

Loading…
Cancel
Save