1
0
mirror of https://github.com/mitb-archive/filebot synced 2024-08-13 17:03:45 -04:00
filebot/source/net/filebot/cli/ArgumentProcessor.java

118 lines
3.7 KiB
Java
Raw Normal View History

2014-04-19 02:30:29 -04:00
package net.filebot.cli;
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.*;
import java.io.File;
import java.util.Collection;
import java.util.LinkedHashSet;
2016-03-10 13:32:11 -05:00
import java.util.List;
import java.util.logging.Level;
import javax.script.Bindings;
import javax.script.SimpleBindings;
2014-04-19 02:30:29 -04:00
import net.filebot.MediaTypes;
import net.filebot.StandardRenameAction;
public class ArgumentProcessor {
2016-03-10 13:32:11 -05:00
public int run(ArgumentBean args) {
try {
// interactive mode enables basic selection and confirmation dialogs in the CLI
CmdlineInterface cli = args.isInteractive() ? new CmdlineOperationsTextUI() : new CmdlineOperations();
if (args.script == null) {
2016-03-10 13:32:11 -05:00
// execute command
return runCommand(cli, args);
} else {
// execute user script
runScript(cli, args);
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;
}
} 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
}
}
// 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 (°_°)");
return 1;
}
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) {
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;
}
public void runScript(CmdlineInterface cli, ArgumentBean args) throws Throwable {
2016-03-10 13:32:11 -05:00
Bindings bindings = new SimpleBindings();
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));
ScriptSource source = ScriptSource.findScriptProvider(args.script);
ScriptShell shell = new ScriptShell(source.getScriptProvider(args.script), cli, args.defines);
shell.runScript(source.accept(args.script), bindings);
}
}