pull/606/head
FongMi 3 months ago
parent 5f31055787
commit 67284885c2
  1. 15
      app/src/main/java/com/fongmi/android/tv/bean/Episode.java
  2. 13
      app/src/main/java/com/fongmi/android/tv/bean/Flag.java

@ -108,6 +108,14 @@ public class Episode implements Parcelable, Diffable<Episode> {
return name.toLowerCase().contains(getName().toLowerCase());
}
public int getScore(String remarks, int number) {
if (rule1(remarks)) return 100;
if (number != -1 && rule2(number)) return 80;
if (number == -1 && rule3(remarks)) return 70;
if (number == -1 && rule4(remarks)) return 60;
return 0;
}
public Episode trans() {
if (Trans.pass()) return this;
this.name = Trans.s2t(name);
@ -151,6 +159,13 @@ public class Episode implements Parcelable, Diffable<Episode> {
this.selected = in.readByte() != 0;
}
public record Rule(Episode episode, int score) {
public boolean find() {
return score > 0;
}
}
public static final Creator<Episode> CREATOR = new Creator<>() {
@Override
public Episode createFromParcel(Parcel source) {

@ -3,7 +3,6 @@ package com.fongmi.android.tv.bean;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.Pair;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -106,21 +105,13 @@ public class Flag implements Parcelable, Diffable<Flag> {
for (int i = 0; i < getEpisodes().size(); i++) getEpisodes().get(i).setActivated(i == getPosition());
}
private int getScore(Episode episode, String remarks, int number) {
if (episode.rule1(remarks)) return 100;
if (number != -1 && episode.rule2(number)) return 80;
if (number == -1 && episode.rule3(remarks)) return 70;
if (number == -1 && episode.rule4(remarks)) return 60;
return 0;
}
public Episode find(String remarks, boolean strict) {
if (getEpisodes().isEmpty()) return null;
if (getEpisodes().size() == 1) return getEpisodes().get(0);
int number = Util.getDigit(remarks);
return getEpisodes().stream()
.map(episode -> new Pair<>(episode, getScore(episode, remarks, number)))
.filter(pair -> pair.second > 0).max(Comparator.comparingInt(pair -> pair.second)).map(pair -> pair.first)
.map(episode -> new Episode.Rule(episode, episode.getScore(remarks, number)))
.filter(Episode.Rule::find).max(Comparator.comparingInt(Episode.Rule::score)).map(Episode.Rule::episode)
.orElseGet(() -> getPosition() != -1 ? getEpisodes().get(getPosition()) : strict ? null : getEpisodes().get(0));
}

Loading…
Cancel
Save