Refactor MovieInfo

This commit is contained in:
Reinhard Pointner 2016-08-07 19:49:17 +08:00
parent becd5a4c7e
commit b425c5e14b
1 changed files with 111 additions and 169 deletions

View File

@ -35,6 +35,7 @@ import javax.swing.Icon;
import net.filebot.Cache; import net.filebot.Cache;
import net.filebot.CacheType; import net.filebot.CacheType;
import net.filebot.CachedResource.Transform;
import net.filebot.Language; import net.filebot.Language;
import net.filebot.ResourceManager; import net.filebot.ResourceManager;
@ -433,20 +434,120 @@ public class TMDbClient implements MovieIdentificationService, ArtworkProvider {
return fields.get(key); return fields.get(key);
} }
private <T> T get(MovieProperty key, Transform<String, T> cast) {
try {
String value = fields.get(key);
if (value != null && !value.isEmpty()) {
return cast.transform(value);
}
} catch (Exception e) {
debug.log(Level.WARNING, format("Failed to parse %s value: %s: %s", key, e, fields));
}
return null;
}
public String getName() {
return get(MovieProperty.title);
}
public String getOriginalName() {
return get(MovieProperty.original_title);
}
public String getCollection() {
return get(MovieProperty.collection); // e.g. Star Wars Collection
}
public String getCertification() {
return get(MovieProperty.certification); // e.g. PG-13
}
public String getTagline() {
return get(MovieProperty.tagline);
}
public String getOverview() {
return get(MovieProperty.overview);
}
public boolean isAdult() { public boolean isAdult() {
return Boolean.valueOf(get(MovieProperty.adult)); return get(MovieProperty.adult, Boolean::valueOf);
}
public Integer getId() {
return get(MovieProperty.id, Integer::new);
}
public Integer getImdbId() {
return get(MovieProperty.imdb_id, s -> new Integer(s.substring(2))); // e.g. tt0379786
}
public Integer getVotes() {
return get(MovieProperty.vote_count, Integer::new);
}
public Double getRating() {
return get(MovieProperty.vote_average, Double::new);
}
public SimpleDate getReleased() {
return get(MovieProperty.release_date, SimpleDate::parse); // e.g. 2005-09-30
}
public Integer getRuntime() {
return get(MovieProperty.runtime, Integer::new);
}
public Long getBudget() {
return get(MovieProperty.budget, Long::new);
}
public Long getRevenue() {
return get(MovieProperty.revenue, Long::new);
}
public Double getPopularity() {
return get(MovieProperty.popularity, Double::new);
}
public URL getHomepage() {
return get(MovieProperty.homepage, URL::new);
}
public URL getPoster() {
return get(MovieProperty.poster_path, URL::new);
}
public List<String> getGenres() {
return unmodifiableList(asList(genres));
} }
public List<Locale> getSpokenLanguages() { public List<Locale> getSpokenLanguages() {
try { return stream(spokenLanguages).map(Locale::new).collect(toList());
List<Locale> locales = new ArrayList<Locale>();
for (String it : spokenLanguages) {
locales.add(new Locale(it));
} }
return locales;
} catch (Exception e) { public List<Person> getPeople() {
return null; return unmodifiableList(asList(people));
} }
public String getDirector() {
return stream(people).filter(Person::isDirector).map(Person::getName).findFirst().orElse(null);
}
public String getWriter() {
return stream(people).filter(Person::isWriter).map(Person::getName).findFirst().orElse(null);
}
public List<Person> getCast() {
return stream(people).filter(Person::isActor).collect(toList());
}
public List<String> getActors() {
return stream(people).filter(Person::isActor).map(Person::getName).collect(toList());
}
public Map<String, String> getCertifications() {
return unmodifiableMap(certifications); // e.g. ['US': PG-13]
} }
public List<String> getProductionCountries() { public List<String> getProductionCountries() {
@ -457,165 +558,6 @@ public class TMDbClient implements MovieIdentificationService, ArtworkProvider {
return unmodifiableList(asList(productionCompanies)); return unmodifiableList(asList(productionCompanies));
} }
public String getOriginalName() {
return get(MovieProperty.original_title);
}
public String getName() {
return get(MovieProperty.title);
}
public Integer getId() {
try {
return new Integer(get(MovieProperty.id));
} catch (Exception e) {
return null;
}
}
public Integer getImdbId() {
// e.g. tt0379786
try {
return new Integer(get(MovieProperty.imdb_id).substring(2));
} catch (Exception e) {
return null;
}
}
public URL getHomepage() {
try {
return new URL(get(MovieProperty.homepage));
} catch (Exception e) {
return null;
}
}
public String getOverview() {
return get(MovieProperty.overview);
}
public Integer getVotes() {
try {
return new Integer(get(MovieProperty.vote_count));
} catch (Exception e) {
return null;
}
}
public Double getRating() {
try {
return new Double(get(MovieProperty.vote_average));
} catch (Exception e) {
return null;
}
}
public String getTagline() {
return get(MovieProperty.tagline);
}
public String getCertification() {
// e.g. PG-13
return get(MovieProperty.certification);
}
public Map<String, String> getCertifications() {
// e.g. ['US': PG-13]
return unmodifiableMap(certifications);
}
public String getCollection() {
// e.g. Star Wars Collection
return get(MovieProperty.collection);
}
public SimpleDate getReleased() {
// e.g. 2005-09-30
try {
return SimpleDate.parse(get(MovieProperty.release_date));
} catch (Exception e) {
return null;
}
}
public String getRuntime() {
return get(MovieProperty.runtime);
}
public Long getBudget() {
try {
return new Long(get(MovieProperty.budget));
} catch (Exception e) {
return null;
}
}
public Long getRevenue() {
try {
return new Long(get(MovieProperty.revenue));
} catch (Exception e) {
return null;
}
}
public Double getPopularity() {
try {
return new Double(get(MovieProperty.popularity));
} catch (Exception e) {
return null;
}
}
public List<String> getGenres() {
return unmodifiableList(asList(genres));
}
public List<Person> getPeople() {
return unmodifiableList(asList(people));
}
public List<Person> getCast() {
List<Person> actors = new ArrayList<Person>();
for (Person person : people) {
if (person.isActor()) {
actors.add(person);
}
}
return actors;
}
public String getDirector() {
for (Person person : people) {
if (person.isDirector())
return person.getName();
}
return null;
}
public String getWriter() {
for (Person person : people) {
if (person.isWriter())
return person.getName();
}
return null;
}
public List<String> getActors() {
List<String> actors = new ArrayList<String>();
for (Person actor : getCast()) {
actors.add(actor.getName());
}
return actors;
}
public URL getPoster() {
try {
return new URL(get(MovieProperty.poster_path));
} catch (Exception e) {
return null;
}
}
public List<Trailer> getTrailers() { public List<Trailer> getTrailers() {
return unmodifiableList(asList(trailers)); return unmodifiableList(asList(trailers));
} }