diff --git a/source/net/filebot/cli/ArgumentProcessor.java b/source/net/filebot/cli/ArgumentProcessor.java index 1f7d8c20..4172474d 100644 --- a/source/net/filebot/cli/ArgumentProcessor.java +++ b/source/net/filebot/cli/ArgumentProcessor.java @@ -55,7 +55,7 @@ public class ArgumentProcessor { // print episode info if (args.list) { - return print(cli.fetchEpisodeList(args.getDatasource(), args.getSearchQuery(), args.getExpressionFormat(), args.getExpressionFilter(), args.getSortOrder(), args.getLanguage().getLocale())); + return print(cli.fetchEpisodeList(args.getDatasource(), args.getSearchQuery(), args.getExpressionFormat(), args.getExpressionFilter(), args.getSortOrder(), args.getLanguage().getLocale(), args.isStrict())); } // print media info diff --git a/source/net/filebot/cli/CmdlineInterface.java b/source/net/filebot/cli/CmdlineInterface.java index cd48f977..bd3e22cd 100644 --- a/source/net/filebot/cli/CmdlineInterface.java +++ b/source/net/filebot/cli/CmdlineInterface.java @@ -34,7 +34,7 @@ public interface CmdlineInterface { File compute(Collection files, File output, HashType hash, Charset encoding) throws Exception; - List fetchEpisodeList(Datasource db, String query, ExpressionFormat format, ExpressionFilter filter, SortOrder order, Locale locale) throws Exception; + List fetchEpisodeList(Datasource db, String query, ExpressionFormat format, ExpressionFilter filter, SortOrder order, Locale locale, boolean strict) throws Exception; List getMediaInfo(Collection files, FileFilter filter, ExpressionFormat format) throws Exception; diff --git a/source/net/filebot/cli/CmdlineOperations.java b/source/net/filebot/cli/CmdlineOperations.java index f25e4ff6..68df0627 100644 --- a/source/net/filebot/cli/CmdlineOperations.java +++ b/source/net/filebot/cli/CmdlineOperations.java @@ -831,10 +831,10 @@ public class CmdlineOperations implements CmdlineInterface { private List applyExpressionFilter(List input, ExpressionFilter filter) throws Exception { if (filter == null) { - return new ArrayList(input); + return input; } - log.fine(format("Apply Filter: {%s}", filter.getExpression())); + log.fine(format("Apply filter [%s] on [%d] items", filter.getExpression(), input.size())); Map context = new EntryList(null, input); List output = new ArrayList(input.size()); for (T it : input) { @@ -986,7 +986,7 @@ public class CmdlineOperations implements CmdlineInterface { } @Override - public List fetchEpisodeList(Datasource db, String query, ExpressionFormat format, ExpressionFilter filter, SortOrder order, Locale locale) throws Exception { + public List fetchEpisodeList(Datasource db, String query, ExpressionFormat format, ExpressionFilter filter, SortOrder order, Locale locale, boolean strict) throws Exception { if (query == null) { throw new IllegalArgumentException("query is not defined"); } @@ -995,13 +995,22 @@ public class CmdlineOperations implements CmdlineInterface { EpisodeListProvider service = db instanceof EpisodeListProvider ? (EpisodeListProvider) db : TheTVDB; // search and select search result - SearchResult option = selectSearchResult(query, service.search(query, locale)); - if (option == null) { - throw new CmdlineException(service.getName() + ": no results"); + List results = service.search(query, locale); + if (results.isEmpty()) { + throw new CmdlineException(String.format("%s: no results", service.getName())); } - // fetch episodes and apply filter - List episodes = applyExpressionFilter(service.getEpisodeList(option, order, locale), filter); + List options = selectSearchResult(query, results, false, false, false, strict ? 1 : 5); + List episodes = new ArrayList(); + + // fetch episodes + for (SearchResult option : options) { + episodes.addAll(service.getEpisodeList(option, order, locale)); + } + + // apply filter + episodes = applyExpressionFilter(episodes, filter); + Map context = new EntryList(null, episodes); // lazy format diff --git a/source/net/filebot/cli/ScriptShellBaseClass.java b/source/net/filebot/cli/ScriptShellBaseClass.java index 58e70d9f..e94a5a4e 100644 --- a/source/net/filebot/cli/ScriptShellBaseClass.java +++ b/source/net/filebot/cli/ScriptShellBaseClass.java @@ -171,7 +171,7 @@ public abstract class ScriptShellBaseClass extends Script { // define global variable: _def public Map get_def() { - return getArgumentBean().defines; + return unmodifiableMap(getArgumentBean().defines); } // define global variable: _system @@ -421,10 +421,10 @@ public abstract class ScriptShellBaseClass extends Script { } public List fetchEpisodeList(Map parameters) throws Exception { - ArgumentBean args = getArgumentBean(); + ArgumentBean args = getArgumentBean(parameters); try { - return getCLI().fetchEpisodeList(args.getDatasource(), args.getSearchQuery(), args.getExpressionFormat(), args.getExpressionFilter(), args.getSortOrder(), args.getLanguage().getLocale()); + return getCLI().fetchEpisodeList(args.getDatasource(), args.getSearchQuery(), args.getExpressionFormat(), args.getExpressionFilter(), args.getSortOrder(), args.getLanguage().getLocale(), args.isStrict()); } catch (Exception e) { printException(e); }