2014-04-19 02:30:29 -04:00
|
|
|
|
package net.filebot.cli;
|
2011-09-09 10:50:01 -04:00
|
|
|
|
|
2016-03-02 10:02:44 -05:00
|
|
|
|
import static net.filebot.Logging.*;
|
2014-04-19 02:30:29 -04:00
|
|
|
|
import static net.filebot.util.ExceptionUtilities.*;
|
|
|
|
|
import static net.filebot.util.FileUtilities.*;
|
2011-09-09 10:50:01 -04:00
|
|
|
|
|
|
|
|
|
import java.io.File;
|
2012-02-26 07:58:16 -05:00
|
|
|
|
import java.util.Collection;
|
2011-09-13 14:16:38 -04:00
|
|
|
|
import java.util.LinkedHashSet;
|
2016-03-10 13:32:11 -05:00
|
|
|
|
import java.util.List;
|
2011-12-30 05:35:26 -05:00
|
|
|
|
import java.util.logging.Level;
|
2011-10-29 16:24:01 -04:00
|
|
|
|
|
|
|
|
|
import javax.script.Bindings;
|
|
|
|
|
import javax.script.SimpleBindings;
|
|
|
|
|
|
2014-04-19 02:30:29 -04:00
|
|
|
|
import net.filebot.MediaTypes;
|
|
|
|
|
import net.filebot.StandardRenameAction;
|
2011-09-09 10:50:01 -04:00
|
|
|
|
|
|
|
|
|
public class ArgumentProcessor {
|
2013-10-13 23:31:24 -04:00
|
|
|
|
|
2016-03-10 13:32:11 -05:00
|
|
|
|
public int run(ArgumentBean args) {
|
2011-10-17 23:58:03 -04:00
|
|
|
|
try {
|
2016-11-24 15:13:39 -05:00
|
|
|
|
// interactive mode enables basic selection and confirmation dialogs in the CLI
|
|
|
|
|
CmdlineInterface cli = args.isInteractive() ? new CmdlineOperationsTextUI() : new CmdlineOperations();
|
|
|
|
|
|
2011-10-29 16:24:01 -04:00
|
|
|
|
if (args.script == null) {
|
2016-03-10 13:32:11 -05:00
|
|
|
|
// execute command
|
2016-11-24 15:13:39 -05:00
|
|
|
|
return runCommand(cli, args);
|
2011-10-29 16:24:01 -04:00
|
|
|
|
} else {
|
|
|
|
|
// execute user script
|
2016-11-24 15:13:39 -05:00
|
|
|
|
runScript(cli, args);
|
2013-10-13 23:31:24 -04:00
|
|
|
|
|
2016-03-10 13:32:11 -05:00
|
|
|
|
// script finished successfully
|
2016-10-18 15:16:31 -04:00
|
|
|
|
log.finest("Done ヾ(@⌒ー⌒@)ノ");
|
2016-03-10 13:32:11 -05:00
|
|
|
|
return 0;
|
2011-09-09 10:50:01 -04:00
|
|
|
|
}
|
2011-12-30 05:35:26 -05:00
|
|
|
|
} catch (Throwable e) {
|
2014-11-05 14:30:37 -05:00
|
|
|
|
if (findCause(e, CmdlineException.class) != null) {
|
2016-03-02 10:02:44 -05:00
|
|
|
|
log.log(Level.WARNING, findCause(e, CmdlineException.class).getMessage());
|
2014-11-05 14:30:37 -05:00
|
|
|
|
} else if (findCause(e, ScriptDeath.class) != null) {
|
2016-03-02 10:02:44 -05:00
|
|
|
|
log.log(Level.WARNING, findCause(e, ScriptDeath.class).getMessage());
|
2014-11-05 14:30:37 -05:00
|
|
|
|
} else {
|
2016-03-27 16:42:06 -04:00
|
|
|
|
log.log(Level.SEVERE, e.getMessage(), e);
|
2014-11-05 14:30:37 -05:00
|
|
|
|
}
|
2011-09-13 14:16:38 -04:00
|
|
|
|
}
|
2014-04-19 12:54:25 -04:00
|
|
|
|
|
2014-11-15 15:18:08 -05:00
|
|
|
|
// script failed with exception -> exit with non-zero exit code (and use positive code to avoid issues with launch4j launcher)
|
2016-10-18 15:16:31 -04:00
|
|
|
|
log.finest("Failure (°_°)");
|
2014-11-15 15:18:08 -05:00
|
|
|
|
return 1;
|
2011-09-13 14:16:38 -04:00
|
|
|
|
}
|
2013-10-13 23:31:24 -04:00
|
|
|
|
|
2016-11-24 15:13:39 -05:00
|
|
|
|
public int runCommand(CmdlineInterface cli, ArgumentBean args) throws Exception {
|
2016-03-10 13:32:11 -05:00
|
|
|
|
// sanity checks
|
|
|
|
|
if (args.getSubtitles && args.recursive) {
|
|
|
|
|
throw new CmdlineException("`filebot -get-subtitles -r` has been disabled due to abuse. Please see http://bit.ly/suball for details.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// print episode info
|
|
|
|
|
if (args.list) {
|
|
|
|
|
List<String> lines = cli.fetchEpisodeList(args.query, args.format, args.db, args.order, args.filter, args.lang);
|
|
|
|
|
lines.forEach(System.out::println);
|
|
|
|
|
return lines.isEmpty() ? 1 : 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// print media info
|
|
|
|
|
if (args.mediaInfo) {
|
|
|
|
|
List<String> lines = cli.getMediaInfo(args.getFiles(true), args.format, args.filter);
|
|
|
|
|
lines.forEach(System.out::println);
|
|
|
|
|
return lines.isEmpty() ? 1 : 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// revert files
|
|
|
|
|
if (args.revert) {
|
|
|
|
|
List<File> files = cli.revert(args.getFiles(false), args.filter, "TEST".equalsIgnoreCase(args.action));
|
|
|
|
|
return files.isEmpty() ? 1 : 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// file operations
|
|
|
|
|
Collection<File> files = new LinkedHashSet<File>(args.getFiles(true));
|
|
|
|
|
|
|
|
|
|
if (args.extract) {
|
|
|
|
|
files.addAll(cli.extract(files, args.output, args.conflict, null, true));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (args.getSubtitles) {
|
2016-07-28 11:22:57 -04:00
|
|
|
|
files.addAll(cli.getMissingSubtitles(files, args.db, args.query, args.lang, args.output, args.encoding, args.format, !args.nonStrict));
|
2016-03-10 13:32:11 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (args.rename) {
|
|
|
|
|
cli.rename(files, StandardRenameAction.forName(args.action), args.conflict, args.output, args.format, args.db, args.query, args.order, args.filter, args.lang, !args.nonStrict);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (args.check) {
|
|
|
|
|
// check verification file
|
|
|
|
|
if (containsOnly(files, MediaTypes.getDefaultFilter("verification"))) {
|
|
|
|
|
if (!cli.check(files)) {
|
|
|
|
|
throw new Exception("Data corruption detected"); // one or more hashes mismatch
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
cli.compute(files, args.output, args.encoding);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-24 15:13:39 -05:00
|
|
|
|
public void runScript(CmdlineInterface cli, ArgumentBean args) throws Throwable {
|
2016-03-10 13:32:11 -05:00
|
|
|
|
Bindings bindings = new SimpleBindings();
|
2016-11-24 15:13:39 -05:00
|
|
|
|
bindings.put(ScriptShell.SHELL_ARGS_BINDING_NAME, args);
|
2016-03-10 13:32:11 -05:00
|
|
|
|
bindings.put(ScriptShell.ARGV_BINDING_NAME, args.getFiles(false));
|
|
|
|
|
|
2016-03-29 23:09:46 -04:00
|
|
|
|
ScriptSource source = ScriptSource.findScriptProvider(args.script);
|
2016-11-24 15:13:39 -05:00
|
|
|
|
ScriptShell shell = new ScriptShell(source.getScriptProvider(args.script), cli, args.defines);
|
2016-03-29 23:09:46 -04:00
|
|
|
|
shell.runScript(source.accept(args.script), bindings);
|
2012-04-29 01:28:38 -04:00
|
|
|
|
}
|
2013-10-13 23:31:24 -04:00
|
|
|
|
|
2011-09-09 10:50:01 -04:00
|
|
|
|
}
|