mirror of
https://github.com/mitb-archive/filebot
synced 2024-11-11 11:55:03 -05:00
44cd76bae1
* lots of changes because now imdbid/tmdbid exist equally, but may not be available depending on the circumstances, so so there is lots of workarounds in MediaBindingBean to account for both ids * updated artwork scripts to use current TMDb class
97 lines
2.3 KiB
Java
97 lines
2.3 KiB
Java
|
|
package net.sourceforge.filebot.web;
|
|
|
|
|
|
import java.text.FieldPosition;
|
|
import java.text.Format;
|
|
import java.text.ParseException;
|
|
import java.text.ParsePosition;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
public class MovieFormat extends Format {
|
|
|
|
public static final MovieFormat NameYear = new MovieFormat(true, true, true);
|
|
|
|
private final boolean includeYear;
|
|
private final boolean includePartIndex;
|
|
private final boolean smart;
|
|
|
|
|
|
public MovieFormat(boolean includeYear, boolean includePartIndex, boolean smart) {
|
|
this.includeYear = includeYear;
|
|
this.includePartIndex = includePartIndex;
|
|
this.smart = smart;
|
|
}
|
|
|
|
|
|
@Override
|
|
public StringBuffer format(Object obj, StringBuffer sb, FieldPosition pos) {
|
|
// format episode object, e.g. Avatar (2009), Part 1
|
|
Movie movie = (Movie) obj;
|
|
|
|
sb.append(movie.getName());
|
|
|
|
if (includeYear) {
|
|
if (!smart || movie.getYear() > 0) {
|
|
sb.append(' ').append('(').append(movie.getYear()).append(')');
|
|
}
|
|
}
|
|
|
|
if (includePartIndex && movie instanceof MoviePart) {
|
|
MoviePart part = (MoviePart) movie;
|
|
|
|
if (!smart || part.partCount > 1) {
|
|
sb.append(", Part ").append(part.partIndex);
|
|
}
|
|
}
|
|
|
|
return sb;
|
|
}
|
|
|
|
private final Pattern moviePattern = Pattern.compile("([^\\p{Punct}]+?)[\\p{Punct}\\s]+(\\d{4})(?:[\\p{Punct}\\s]+|$)");
|
|
private final Pattern partPattern = Pattern.compile("(?:Part|CD)\\D?(\\d)$", Pattern.CASE_INSENSITIVE);
|
|
|
|
|
|
@Override
|
|
public Movie parseObject(String source, ParsePosition pos) {
|
|
String s = source;
|
|
Matcher m;
|
|
|
|
// extract part information first
|
|
int partIndex = -1;
|
|
int partCount = -1;
|
|
if ((m = partPattern.matcher(s)).find()) {
|
|
partIndex = Integer.parseInt(m.group(1));
|
|
s = m.replaceFirst("");
|
|
}
|
|
|
|
// parse movie information
|
|
if ((m = moviePattern.matcher(s)).matches()) {
|
|
String name = m.group(1).trim();
|
|
int year = Integer.parseInt(m.group(2));
|
|
|
|
Movie movie = new Movie(name, year, -1, -1);
|
|
if (partIndex >= 0) {
|
|
movie = new MoviePart(movie, partIndex, partCount);
|
|
}
|
|
|
|
// did parse input
|
|
pos.setIndex(source.length());
|
|
return movie;
|
|
}
|
|
|
|
// failed to parse input
|
|
pos.setErrorIndex(0);
|
|
return null;
|
|
}
|
|
|
|
|
|
@Override
|
|
public Movie parseObject(String source) throws ParseException {
|
|
return (Movie) super.parseObject(source);
|
|
}
|
|
|
|
}
|