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 sxeVector1 = parse(o1); if (sxeVector1 == null || sxeVector1.isEmpty()) return 0; Collection 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 parse(Object object) { if (object instanceof File) { // parse file name object = ((File) object).getName(); } return seasonEpisodeMatcher.match(object.toString()); } }