* find probable show using name similarity in auto-matching

This commit is contained in:
Reinhard Pointner 2009-02-22 12:38:25 +00:00
parent a9f5570dbe
commit b7f0529d88
1 changed files with 14 additions and 7 deletions

View File

@ -34,6 +34,8 @@ import net.miginfocom.swing.MigLayout;
import net.sourceforge.filebot.ResourceManager;
import net.sourceforge.filebot.Settings;
import net.sourceforge.filebot.similarity.Match;
import net.sourceforge.filebot.similarity.NameSimilarityMetric;
import net.sourceforge.filebot.similarity.SimilarityMetric;
import net.sourceforge.filebot.ui.FileBotPanel;
import net.sourceforge.filebot.ui.SelectDialog;
import net.sourceforge.filebot.web.AnidbClient;
@ -227,22 +229,25 @@ public class RenamePanel extends FileBotPanel {
@Override
protected SearchResult selectSearchResult(String query, final Collection<SearchResult> searchResults) throws Exception {
protected SearchResult selectSearchResult(final String query, final Collection<SearchResult> searchResults) throws Exception {
if (searchResults.size() == 1) {
return searchResults.iterator().next();
}
List<SearchResult> exactMatches = new LinkedList<SearchResult>();
List<SearchResult> probableMatches = new LinkedList<SearchResult>();
// find exact matches
// use name similarity metric
SimilarityMetric metric = new NameSimilarityMetric();
// find probable matches using name similarity > 0.9
for (SearchResult result : searchResults) {
if (result.getName().toLowerCase().startsWith(query.toLowerCase())) {
exactMatches.add(result);
if (metric.getSimilarity(query, result.getName()) > 0.9) {
probableMatches.add(result);
}
}
if (exactMatches.size() == 1) {
return exactMatches.get(0);
if (probableMatches.size() == 1) {
return probableMatches.get(0);
}
// show selection dialog on EDT
@ -253,6 +258,8 @@ public class RenamePanel extends FileBotPanel {
// multiple results have been found, user must select one
SelectDialog<SearchResult> selectDialog = new SelectDialog<SearchResult>(SwingUtilities.getWindowAncestor(RenamePanel.this), searchResults);
selectDialog.getHeaderLabel().setText(String.format("Shows matching '%s':", query));
selectDialog.setVisible(true);
// selected value or null if the dialog was canceled by the user