2014-04-19 02:30:29 -04:00
|
|
|
package net.filebot.cli;
|
2011-09-09 10:50:01 -04:00
|
|
|
|
|
|
|
import static java.util.Collections.*;
|
2014-04-19 02:30:29 -04:00
|
|
|
import static net.filebot.util.FileUtilities.*;
|
2011-09-09 10:50:01 -04:00
|
|
|
|
|
|
|
import java.io.File;
|
2014-04-15 08:14:43 -04:00
|
|
|
import java.io.OutputStream;
|
2011-09-09 10:50:01 -04:00
|
|
|
import java.util.ArrayList;
|
2014-04-13 15:35:23 -04:00
|
|
|
import java.util.LinkedHashMap;
|
2011-09-09 10:50:01 -04:00
|
|
|
import java.util.List;
|
2012-01-03 23:09:17 -05:00
|
|
|
import java.util.Locale;
|
2014-04-13 15:35:23 -04:00
|
|
|
import java.util.Map;
|
2011-09-13 14:16:38 -04:00
|
|
|
import java.util.logging.Level;
|
2012-07-05 00:08:34 -04:00
|
|
|
import java.util.logging.Logger;
|
2011-09-09 10:50:01 -04:00
|
|
|
|
2014-04-19 02:30:29 -04:00
|
|
|
import net.filebot.Language;
|
2014-01-09 13:26:25 -05:00
|
|
|
|
2011-09-09 10:50:01 -04:00
|
|
|
import org.kohsuke.args4j.Argument;
|
2014-04-13 15:35:23 -04:00
|
|
|
import org.kohsuke.args4j.CmdLineException;
|
|
|
|
import org.kohsuke.args4j.CmdLineParser;
|
2011-09-09 10:50:01 -04:00
|
|
|
import org.kohsuke.args4j.Option;
|
2013-03-30 00:20:56 -04:00
|
|
|
import org.kohsuke.args4j.spi.ExplicitBooleanOptionHandler;
|
2011-09-09 10:50:01 -04:00
|
|
|
|
|
|
|
public class ArgumentBean {
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-08-14 02:36:49 -04:00
|
|
|
@Option(name = "--mode", usage = "Open GUI in single panel mode", metaVar = "[rename, subtitles, sfv]")
|
|
|
|
public String mode = null;
|
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
@Option(name = "-rename", usage = "Rename episode/movie files", metaVar = "fileset")
|
|
|
|
public boolean rename = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-08-14 02:36:49 -04:00
|
|
|
@Option(name = "--db", usage = "Episode/Movie database", metaVar = "[TheTVDB, AniDB, TVRage] or [TheMovieDB, OMDb] or [xattr]")
|
2011-09-14 14:13:34 -04:00
|
|
|
public String db;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-02-20 10:40:49 -05:00
|
|
|
@Option(name = "--order", usage = "Episode order", metaVar = "[Airdate, Absolute, DVD]")
|
2012-02-13 04:54:57 -05:00
|
|
|
public String order = "Airdate";
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-03-08 00:11:06 -05:00
|
|
|
@Option(name = "--action", usage = "Rename action", metaVar = "[move, copy, keeplink, symlink, hardlink, test]")
|
2012-03-07 09:26:47 -05:00
|
|
|
public String action = "move";
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-08-14 02:36:49 -04:00
|
|
|
@Option(name = "--conflict", usage = "Conflict resolution", metaVar = "[skip, override, auto, fail]")
|
2012-03-09 00:38:22 -05:00
|
|
|
public String conflict = "skip";
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-08-12 05:50:50 -04:00
|
|
|
@Option(name = "--filter", usage = "Filter expression", metaVar = "expression")
|
2012-03-24 22:50:28 -04:00
|
|
|
public String filter = null;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-08-12 05:50:50 -04:00
|
|
|
@Option(name = "--format", usage = "Format expression", metaVar = "expression")
|
2011-09-14 14:13:34 -04:00
|
|
|
public String format;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2013-04-16 03:32:04 -04:00
|
|
|
@Option(name = "-non-strict", usage = "Enable advanced matching and more aggressive guess work")
|
2011-09-13 14:16:38 -04:00
|
|
|
public boolean nonStrict = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
@Option(name = "-get-subtitles", usage = "Fetch subtitles", metaVar = "fileset")
|
|
|
|
public boolean getSubtitles;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-11-28 07:47:11 -05:00
|
|
|
@Option(name = "-get-missing-subtitles", usage = "Fetch missing subtitles", metaVar = "fileset")
|
|
|
|
public boolean getMissingSubtitles;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-06-24 01:43:09 -04:00
|
|
|
@Option(name = "--q", usage = "Force lookup query", metaVar = "series/movie title")
|
2011-09-14 14:13:34 -04:00
|
|
|
public String query;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
@Option(name = "--lang", usage = "Language", metaVar = "2-letter language code")
|
2011-09-09 10:50:01 -04:00
|
|
|
public String lang = "en";
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-08-12 05:50:50 -04:00
|
|
|
@Option(name = "-check", usage = "Create/Check verification files", metaVar = "fileset")
|
2011-09-13 14:16:38 -04:00
|
|
|
public boolean check;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
|
|
|
@Option(name = "--output", usage = "Output path", metaVar = "folder")
|
2011-09-14 14:13:34 -04:00
|
|
|
public String output;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-08-12 05:50:50 -04:00
|
|
|
@Option(name = "--encoding", usage = "Output character encoding", metaVar = "[UTF-8, Windows-1252, GB18030]")
|
2011-09-14 14:13:34 -04:00
|
|
|
public String encoding;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-11-03 07:56:29 -04:00
|
|
|
@Option(name = "-list", usage = "Fetch episode list")
|
|
|
|
public boolean list = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-11-03 07:56:29 -04:00
|
|
|
@Option(name = "-mediainfo", usage = "Get media info")
|
|
|
|
public boolean mediaInfo = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-02-26 07:58:16 -05:00
|
|
|
@Option(name = "-extract", usage = "Extract archives")
|
|
|
|
public boolean extract = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-06-24 01:43:09 -04:00
|
|
|
@Option(name = "-script", usage = "Run Groovy script", metaVar = "path/to/script.groovy")
|
2011-11-03 07:56:29 -04:00
|
|
|
public String script = null;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-08-14 02:36:49 -04:00
|
|
|
@Option(name = "--log", usage = "Log level", metaVar = "[all, fine, info, warning, off]")
|
2012-07-25 16:52:26 -04:00
|
|
|
public String log = "all";
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2013-03-26 11:04:53 -04:00
|
|
|
@Option(name = "--log-file", usage = "Log file", metaVar = "path/to/log.txt")
|
|
|
|
public String logFile = null;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2013-03-30 00:20:56 -04:00
|
|
|
@Option(name = "--log-lock", usage = "Lock log file", metaVar = "[yes, no]", handler = ExplicitBooleanOptionHandler.class)
|
|
|
|
public boolean logLock = true;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-07-05 00:08:34 -04:00
|
|
|
@Option(name = "-r", usage = "Resolve folders recursively")
|
|
|
|
public boolean recursive = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-12-11 06:19:14 -05:00
|
|
|
@Option(name = "-clear-cache", usage = "Clear cached and temporary data")
|
|
|
|
public boolean clearCache = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-12-11 06:19:14 -05:00
|
|
|
@Option(name = "-clear-prefs", usage = "Clear application settings")
|
|
|
|
public boolean clearPrefs = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-08-15 06:47:46 -04:00
|
|
|
@Option(name = "-unixfs", usage = "Do not strip invalid characters from file paths")
|
|
|
|
public boolean unixfs = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2013-07-25 07:16:28 -04:00
|
|
|
@Option(name = "-no-xattr", usage = "Disable extended attributes")
|
|
|
|
public boolean disableExtendedAttributes = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-11-28 22:14:39 -05:00
|
|
|
@Option(name = "-version", usage = "Print version identifier")
|
|
|
|
public boolean version = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-14 19:42:53 -04:00
|
|
|
@Option(name = "-help", usage = "Print this help message")
|
|
|
|
public boolean help = false;
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-07-28 17:17:29 -04:00
|
|
|
@Option(name = "--def", usage = "Define script variables", handler = BindingsHandler.class)
|
2014-04-15 08:14:43 -04:00
|
|
|
public Map<String, String> defines = new LinkedHashMap<String, String>();
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-07-28 17:17:29 -04:00
|
|
|
@Argument
|
2014-04-13 15:35:23 -04:00
|
|
|
public List<String> arguments = new ArrayList<String>();
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-09 10:50:01 -04:00
|
|
|
public boolean runCLI() {
|
2012-12-11 06:19:14 -05:00
|
|
|
return rename || getSubtitles || getMissingSubtitles || check || list || mediaInfo || extract || script != null;
|
2011-09-09 10:50:01 -04:00
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-11-28 22:14:39 -05:00
|
|
|
public boolean printVersion() {
|
|
|
|
return version;
|
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
public boolean printHelp() {
|
|
|
|
return help;
|
2011-09-09 10:50:01 -04:00
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-12-11 06:19:14 -05:00
|
|
|
public boolean clearCache() {
|
|
|
|
return clearCache;
|
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
public boolean clearUserData() {
|
2012-12-11 06:19:14 -05:00
|
|
|
return clearPrefs;
|
2011-09-09 10:50:01 -04:00
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
public List<File> getFiles(boolean resolveFolders) {
|
2012-07-28 17:17:29 -04:00
|
|
|
if (arguments == null || arguments.isEmpty()) {
|
|
|
|
return emptyList();
|
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
// resolve given paths
|
2012-07-28 17:17:29 -04:00
|
|
|
List<File> files = new ArrayList<File>();
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
for (String argument : arguments) {
|
2012-02-09 04:39:13 -05:00
|
|
|
File file = new File(argument).getAbsoluteFile();
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-07-05 00:08:34 -04:00
|
|
|
// resolve relative paths
|
|
|
|
try {
|
|
|
|
file = file.getCanonicalFile();
|
|
|
|
} catch (Exception e) {
|
2014-12-16 21:32:06 -05:00
|
|
|
Logger.getLogger(getClass().getName()).log(Level.WARNING, String.format("Illegal Argument: %s (%s)", e, argument));
|
2012-07-05 00:08:34 -04:00
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-04-17 11:35:33 -04:00
|
|
|
if (resolveFolders && file.isDirectory()) {
|
|
|
|
if (recursive) {
|
|
|
|
files.addAll(listFiles(file));
|
|
|
|
} else {
|
2014-06-23 11:09:43 -04:00
|
|
|
files.addAll(getChildren(file));
|
2014-04-17 11:35:33 -04:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
files.add(file);
|
|
|
|
}
|
2011-09-13 14:16:38 -04:00
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2011-09-13 14:16:38 -04:00
|
|
|
return files;
|
2011-09-09 10:50:01 -04:00
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2012-01-03 23:09:17 -05:00
|
|
|
public Locale getLocale() {
|
|
|
|
return new Locale(lang);
|
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-01-09 13:26:25 -05:00
|
|
|
public Language getLanguage() {
|
|
|
|
return Language.findLanguage(lang);
|
|
|
|
}
|
|
|
|
|
2011-10-29 16:24:01 -04:00
|
|
|
public Level getLogLevel() {
|
|
|
|
return Level.parse(log.toUpperCase());
|
|
|
|
}
|
2013-12-21 01:26:29 -05:00
|
|
|
|
2014-01-05 01:58:31 -05:00
|
|
|
private final String[] array;
|
|
|
|
|
2014-04-13 15:35:23 -04:00
|
|
|
private ArgumentBean(String... array) {
|
2014-01-05 01:58:31 -05:00
|
|
|
this.array = array;
|
|
|
|
}
|
|
|
|
|
2014-08-30 10:34:27 -04:00
|
|
|
public String[] getArray() {
|
|
|
|
return array.clone();
|
2014-01-05 01:58:31 -05:00
|
|
|
}
|
|
|
|
|
2014-04-13 15:35:23 -04:00
|
|
|
public static ArgumentBean parse(String[] args) throws CmdLineException {
|
|
|
|
ArgumentBean bean = new ArgumentBean(args);
|
|
|
|
CmdLineParser parser = new CmdLineParser(bean);
|
|
|
|
parser.parseArgument(args);
|
|
|
|
return bean;
|
|
|
|
}
|
|
|
|
|
2014-04-15 08:14:43 -04:00
|
|
|
public static void printHelp(ArgumentBean argumentBean, OutputStream out) {
|
|
|
|
new CmdLineParser(argumentBean).printUsage(out);
|
2014-04-13 15:35:23 -04:00
|
|
|
}
|
|
|
|
|
2011-09-09 10:50:01 -04:00
|
|
|
}
|