filebot/source/net/sourceforge/filebot/similarity/SeasonEpisodeMetric.java

55 lines
1.2 KiB
Java

package net.sourceforge.filebot.similarity;
import java.io.File;
import java.util.Collection;
import net.sourceforge.filebot.similarity.SeasonEpisodeMatcher.SxE;
public class SeasonEpisodeMetric implements SimilarityMetric {
private final SeasonEpisodeMatcher seasonEpisodeMatcher = new SeasonEpisodeMatcher(null, false);
@Override
public float getSimilarity(Object o1, Object o2) {
Collection<SxE> sxeVector1 = parse(o1);
if (sxeVector1 == null || sxeVector1.isEmpty())
return 0;
Collection<SxE> sxeVector2 = parse(o2);
if (sxeVector2 == null || sxeVector2.isEmpty())
return 0;
float similarity = -1;
for (SxE sxe1 : sxeVector1) {
for (SxE sxe2 : sxeVector2) {
if (sxe1.season == sxe2.season && sxe1.episode == sxe2.episode) {
// vectors have at least one perfect episode match in common
return 1;
}
if (sxe1.season == sxe2.season || sxe1.episode == sxe2.episode) {
// at least we have a partial match
similarity = 0.5f;
}
}
}
return similarity;
}
protected Collection<SxE> parse(Object object) {
if (object instanceof File) {
// parse file name
object = ((File) object).getName();
}
return seasonEpisodeMatcher.match(object.toString());
}
}