mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
137 lines
3.3 KiB
Java
137 lines
3.3 KiB
Java
package net.filebot.cli;
|
|
|
|
import static java.util.Arrays.*;
|
|
import static net.filebot.CachedResource.*;
|
|
import static net.filebot.Logging.*;
|
|
import static net.filebot.Settings.*;
|
|
import static net.filebot.util.FileUtilities.*;
|
|
|
|
import java.io.File;
|
|
import java.net.URI;
|
|
import java.time.Duration;
|
|
|
|
import org.tukaani.xz.XZInputStream;
|
|
|
|
import net.filebot.Cache;
|
|
import net.filebot.CacheType;
|
|
import net.filebot.Resource;
|
|
|
|
public enum ScriptSource {
|
|
|
|
GITHUB_STABLE {
|
|
|
|
@Override
|
|
public String accept(String input) {
|
|
return input.startsWith("fn:") ? input.substring(3) : null;
|
|
}
|
|
|
|
@Override
|
|
public ScriptProvider getScriptProvider(String input) throws Exception {
|
|
URI resource = new URI(getApplicationProperty("github.stable"));
|
|
Resource<byte[]> bundle = getCache().bytes(resource, URI::toURL, XZInputStream::new).expire(Cache.ONE_WEEK);
|
|
|
|
return new ScriptBundle(bundle, getClass().getResourceAsStream("repository.cer"));
|
|
}
|
|
|
|
},
|
|
|
|
GITHUB_MASTER {
|
|
|
|
@Override
|
|
public String accept(String input) {
|
|
return input.startsWith("dev:") ? input.substring(4) : null;
|
|
}
|
|
|
|
@Override
|
|
public ScriptProvider getScriptProvider(String input) throws Exception {
|
|
URI parent = new URI(getApplicationProperty("github.master"));
|
|
|
|
// NOTE: GitHub only supports If-None-Match (If-Modified-Since is ignored)
|
|
return n -> getCache().text(n, s -> parent.resolve(s + ".groovy").toURL()).fetch(fetchIfNoneMatch(url -> n, getCache())).expire(Cache.ONE_DAY).get();
|
|
}
|
|
|
|
},
|
|
|
|
INLINE_GROOVY {
|
|
|
|
@Override
|
|
public String accept(String input) {
|
|
return input.startsWith("g:") ? input.substring(2) : null;
|
|
}
|
|
|
|
@Override
|
|
public ScriptProvider getScriptProvider(String input) throws Exception {
|
|
return g -> g;
|
|
}
|
|
|
|
},
|
|
|
|
REMOTE_URL {
|
|
|
|
@Override
|
|
public String accept(String input) {
|
|
// absolute paths on Windows appear to be valid URIs so we need explicitly exclude them (e.g. C:\path\to\script.groovy)
|
|
if (input.length() < 2 || input.charAt(1) == ':') {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
URI uri = new URI(input);
|
|
if (uri.isAbsolute()) {
|
|
return getName(new File(uri.getPath()));
|
|
}
|
|
} catch (Exception e) {
|
|
debug.finest(e::toString);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public ScriptProvider getScriptProvider(String input) throws Exception {
|
|
URI parent = new URI(input).resolve(".");
|
|
|
|
return n -> getCache().text(n, s -> parent.resolve(s + ".groovy").toURL()).expire(Duration.ZERO).get();
|
|
}
|
|
|
|
},
|
|
|
|
LOCAL_FILE {
|
|
|
|
@Override
|
|
public String accept(String input) {
|
|
try {
|
|
File f = new File(input).getCanonicalFile();
|
|
if (f.isFile()) {
|
|
return getName(f);
|
|
}
|
|
} catch (Exception e) {
|
|
debug.finest(e::toString);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public ScriptProvider getScriptProvider(String input) throws Exception {
|
|
File base = new File(input).getCanonicalFile().getParentFile();
|
|
|
|
return f -> readTextFile(new File(base, f + ".groovy"));
|
|
}
|
|
|
|
};
|
|
|
|
public abstract String accept(String input);
|
|
|
|
public abstract ScriptProvider getScriptProvider(String input) throws Exception;
|
|
|
|
public Cache getCache() {
|
|
return Cache.getCache(name(), CacheType.Persistent);
|
|
}
|
|
|
|
public static ScriptSource findScriptProvider(String input) throws Exception {
|
|
return stream(values()).filter(s -> s.accept(input) != null).findFirst().orElseThrow(() -> {
|
|
return new CmdlineException("Bad script source: " + input);
|
|
});
|
|
}
|
|
|
|
}
|