mirror of
https://github.com/mitb-archive/filebot
synced 2024-12-22 07:48:52 -05:00
Fine-tune CLI movie selection and bring it more inline with GUI behaviour
This commit is contained in:
parent
5d59bddebf
commit
dc5b35d3f3
@ -502,34 +502,17 @@ public class CmdlineOperations implements CmdlineInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Movie selectMovie(String query, Collection<Movie> options) throws Exception {
|
protected Movie selectMovie(String query, Collection<Movie> options) throws Exception {
|
||||||
|
query = query.toLowerCase();
|
||||||
|
|
||||||
// auto-select perfect match
|
// auto-select perfect match
|
||||||
for (Movie movie : options) {
|
for (Movie movie : options) {
|
||||||
String movieIdentifier = normalizePunctuation(movie.toString()).toLowerCase();
|
String movieIdentifier = normalizePunctuation(movie.getNameWithYear()).toLowerCase();
|
||||||
if (query.toLowerCase().startsWith(movieIdentifier)) {
|
if (query.startsWith(movieIdentifier)) {
|
||||||
return movie;
|
return movie;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Movie> matches = selectSearchResult(query, options, false, false, false, 1);
|
return selectSearchResult(query, options, false, false, false, 1).stream().findFirst().orElse(null);
|
||||||
return matches.size() > 0 ? matches.get(0) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String checkMovieStripReleaseInfo(File file, boolean strict) {
|
|
||||||
String name = stripReleaseInfo(getName(file));
|
|
||||||
|
|
||||||
// try to redeem possible false negative matches
|
|
||||||
if (name.length() < 2) {
|
|
||||||
try {
|
|
||||||
Movie match = checkMovie(file, strict);
|
|
||||||
if (match != null) {
|
|
||||||
return match.getName();
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
debug.warning(e::toString);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<File> renameMusic(Collection<File> files, RenameAction renameAction, ConflictAction conflictAction, File outputDir, ExpressionFileFormat format, List<MusicIdentificationService> services, ExecCommand exec) throws Exception {
|
public List<File> renameMusic(Collection<File> files, RenameAction renameAction, ConflictAction conflictAction, File outputDir, ExpressionFileFormat format, List<MusicIdentificationService> services, ExecCommand exec) throws Exception {
|
||||||
|
@ -1208,6 +1208,24 @@ public class MediaDetection {
|
|||||||
return stripReleaseInfo(name, true);
|
return stripReleaseInfo(name, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String checkMovieStripReleaseInfo(File file, boolean strict) {
|
||||||
|
String name = stripReleaseInfo(getName(file));
|
||||||
|
|
||||||
|
// try to redeem possible false negative matches
|
||||||
|
if (name.length() < 2) {
|
||||||
|
try {
|
||||||
|
Movie match = checkMovie(file, strict);
|
||||||
|
if (match != null) {
|
||||||
|
return match.getName();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
debug.log(Level.SEVERE, "Failed to strip release info: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
private static final Resource<Pattern> blacklistPattern = Resource.lazy(releaseInfo::getBlacklistPattern);
|
private static final Resource<Pattern> blacklistPattern = Resource.lazy(releaseInfo::getBlacklistPattern);
|
||||||
|
|
||||||
public static List<String> stripBlacklistedTerms(Collection<String> names) {
|
public static List<String> stripBlacklistedTerms(Collection<String> names) {
|
||||||
|
@ -270,20 +270,6 @@ class MovieMatcher implements AutoCompleteMatcher {
|
|||||||
return html.toString();
|
return html.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String checkedStripReleaseInfo(File file, boolean strict) throws Exception {
|
|
||||||
String name = stripReleaseInfo(getName(file));
|
|
||||||
|
|
||||||
// try to redeem possible false negative matches
|
|
||||||
if (name.length() < 2) {
|
|
||||||
Movie match = checkMovie(file, strict);
|
|
||||||
if (match != null) {
|
|
||||||
return match.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Movie selectMovie(File movieFile, boolean strict, String userQuery, List<Movie> options, Component parent) throws Exception {
|
protected Movie selectMovie(File movieFile, boolean strict, String userQuery, List<Movie> options, Component parent) throws Exception {
|
||||||
// just auto-pick singleton results
|
// just auto-pick singleton results
|
||||||
if (options.size() == 1) {
|
if (options.size() == 1) {
|
||||||
@ -291,11 +277,11 @@ class MovieMatcher implements AutoCompleteMatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 1. movie by filename
|
// 1. movie by filename
|
||||||
String fileQuery = (userQuery != null) ? userQuery : checkedStripReleaseInfo(movieFile, strict);
|
String fileQuery = userQuery != null ? userQuery : checkMovieStripReleaseInfo(movieFile, strict);
|
||||||
|
|
||||||
// 2. movie by directory
|
// 2. movie by directory
|
||||||
File movieFolder = guessMovieFolder(movieFile);
|
File movieFolder = guessMovieFolder(movieFile);
|
||||||
String folderQuery = (userQuery != null || movieFolder == null) ? "" : checkedStripReleaseInfo(movieFolder, strict);
|
String folderQuery = userQuery != null || movieFolder == null ? "" : checkMovieStripReleaseInfo(movieFolder, strict);
|
||||||
|
|
||||||
// auto-ignore invalid files
|
// auto-ignore invalid files
|
||||||
if (userQuery == null && fileQuery.length() < 2 && folderQuery.length() < 2) {
|
if (userQuery == null && fileQuery.length() < 2 && folderQuery.length() < 2) {
|
||||||
|
Loading…
Reference in New Issue
Block a user