filebot/source/net/sourceforge/filebot/cli/ArgumentProcessor.java

111 lines
3.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package net.sourceforge.filebot.cli;
import static net.sourceforge.filebot.cli.CLILogging.*;
import static net.sourceforge.tuned.FileUtilities.*;
import java.io.File;
import java.io.InputStreamReader;
import java.security.AccessController;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import javax.script.Bindings;
import javax.script.SimpleBindings;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import net.sourceforge.filebot.Analytics;
import net.sourceforge.filebot.MediaTypes;
public class ArgumentProcessor {
public ArgumentBean parse(String[] args) throws CmdLineException {
final ArgumentBean bean = new ArgumentBean();
if (args != null && args.length > 0) {
CmdLineParser parser = new CmdLineParser(bean);
parser.parseArgument(args);
}
return bean;
}
public int process(ArgumentBean args, CmdlineInterface cli) throws Exception {
Analytics.trackView(ArgumentProcessor.class, "FileBot CLI");
CLILogger.setLevel(args.getLogLevel());
try {
// print episode info
if (args.list) {
for (String eps : cli.fetchEpisodeList(args.query, args.format, args.db, args.lang)) {
System.out.println(eps);
}
return 0;
}
// print media info
if (args.mediaInfo) {
for (File file : args.getFiles(true)) {
System.out.println(cli.getMediaInfo(file, args.format));
}
return 0;
}
// execute CLI operations
if (args.script == null) {
// file operations
Set<File> files = new LinkedHashSet<File>(args.getFiles(true));
if (args.getSubtitles) {
List<File> subtitles = cli.getSubtitles(files, args.query, args.lang, args.output, args.encoding);
files.addAll(subtitles);
}
if (args.rename) {
cli.rename(files, args.query, args.format, args.db, 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);
}
}
} else {
// execute user script
String script = readAll(new InputStreamReader(args.getScriptLocation().openStream(), "UTF-8"));
Bindings bindings = new SimpleBindings();
bindings.put("args", args.getFiles(false));
Analytics.trackEvent("CLI", "ExecuteScript", args.getScriptLocation().getProtocol());
ScriptShell shell = new ScriptShell(cli, args, args.trustScript, AccessController.getContext());
shell.evaluate(script, bindings);
}
CLILogger.finest("Done ヾ(@⌒ー⌒@)");
return 0;
} catch (Exception e) {
CLILogger.severe(String.format("%s: %s", e.getClass().getSimpleName(), e.getMessage()));
CLILogger.finest("Failure (°_°)");
return -1;
}
}
public void printHelp(ArgumentBean argumentBean) {
new CmdLineParser(argumentBean).printUsage(System.out);
}
}