diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 88d60911d..a21bb3c9d 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -76,10 +76,10 @@ import com.fongmi.android.tv.utils.FileChooser; import com.fongmi.android.tv.utils.ImgUtil; import com.fongmi.android.tv.utils.KeyUtil; import com.fongmi.android.tv.utils.Notify; +import com.fongmi.android.tv.utils.PartUtil; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Sniffer; import com.fongmi.android.tv.utils.Traffic; -import com.fongmi.android.tv.utils.Util; import com.github.bassaer.library.MDColor; import com.github.catvod.utils.Trans; @@ -922,7 +922,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void setPartAdapter() { - mPartAdapter.setItems(Util.getPart(mHistory.getVodName()), null); + mPartAdapter.setItems(PartUtil.split(mHistory.getVodName()), null); mBinding.part.setVisibility(View.VISIBLE); setR2Callback(); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/utils/PartUtil.java b/app/src/leanback/java/com/fongmi/android/tv/utils/PartUtil.java new file mode 100644 index 000000000..b36826438 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/utils/PartUtil.java @@ -0,0 +1,46 @@ +package com.fongmi.android.tv.utils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PartUtil { + + private static final Pattern PATTERN_SEASON = Pattern.compile("^(.*?)第"); + private static final Pattern PATTERN_YEAR = Pattern.compile("^(.*)(19|20)\\d{2}$"); + + public static List split(String text) { + Set items = new LinkedHashSet<>(); + String[] rawSplits; + if (text.contains(":")) rawSplits = text.split(":"); + else if (text.contains("第") && text.contains("季")) rawSplits = extractSeason(text); + else if (text.contains("(")) rawSplits = new String[]{text.split(Pattern.quote("("))[0]}; + else if (text.contains(" ")) rawSplits = text.split(" "); + else rawSplits = extractYear(text); + items.add(text); + Arrays.stream(rawSplits).map(String::trim).map(s -> s.contains(" ") ? s.split(" ")[0].trim() : s).filter(s -> !s.isEmpty()).forEach(items::add); + return new ArrayList<>(items); + } + + private static String[] extractSeason(String text) { + Matcher matcher = PATTERN_SEASON.matcher(text); + if (matcher.find()) { + String s = matcher.group(1).trim(); + if (!s.isEmpty()) return new String[]{s}; + } + return Arrays.stream(text.split("第")).filter(s -> !s.isEmpty() && !s.contains("季")).toArray(String[]::new); + } + + private static String[] extractYear(String text) { + Matcher matcher = PATTERN_YEAR.matcher(text); + if (matcher.find()) { + String s = matcher.group(1).trim(); + if (!s.isEmpty()) return new String[]{s}; + } + return new String[0]; + } +} diff --git a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java index 364009285..291a85816 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java @@ -187,8 +187,8 @@ public class ParseJob implements ParseCallback { private void startWeb(String key, String from, Map headers, String url, String click) { if (WebViewUtil.support()) { - App.post(() -> webViews.add(CustomWebView.create(App.get()).start(key, from, headers, url, click, this, !url.contains("player/?url=")))); App.get().setSniff(true); + App.post(() -> webViews.add(CustomWebView.create(App.get()).start(key, from, headers, url, click, this, !url.contains("player/?url=")))); } else { onParseError(); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Util.java b/app/src/main/java/com/fongmi/android/tv/utils/Util.java index 6154b328a..06b5def1a 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Util.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Util.java @@ -30,7 +30,6 @@ import com.github.catvod.utils.Shell; import java.net.NetworkInterface; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; import java.util.Formatter; import java.util.List; @@ -111,27 +110,6 @@ public class Util { } } - public static List getPart(String text) { - List items = new ArrayList<>(); - String[] splits = new String[0]; - items.add(text); - if (text.contains(":")) { - splits = text.split(":"); - } else if (text.contains("第") && text.contains("季")) { - splits = Arrays.stream(text.split("第")).filter(s -> !s.isEmpty() && !s.contains("季")).toArray(String[]::new); - } else if (text.contains("(")) { - splits = new String[]{text.split("\\(")[0]}; - } else if (text.contains(" ")) { - splits = text.split(" "); - } - for (String s : splits) { - s = s.trim(); - if (s.contains(" ")) s = s.split(" ")[0].trim(); - if (!s.isEmpty()) items.add(s); - } - return items; - } - public static String clean(String text) { StringBuilder sb = new StringBuilder(); text = Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY).toString().replace("\u00A0", "").replace("\u3000", "");