Adding collection id to owned movies

This commit is contained in:
jhouse
2020-01-23 13:17:07 +09:00
parent d8e05349fa
commit bf709f8baf
5 changed files with 50 additions and 19 deletions

View File

@@ -25,6 +25,8 @@ public class OwnedMovie implements Comparable<OwnedMovie>, MovieMetadata {
public static final String LANGUAGE = "language";
public static final String COLLECTION = "collection";
private final String name;
private final int year;
@@ -39,13 +41,16 @@ public class OwnedMovie implements Comparable<OwnedMovie>, MovieMetadata {
@Nullable
private String language;
public OwnedMovie(String name, int year, String thumbnail, int tvdbId, @Nullable String imdbId, String language) {
private int collection;
public OwnedMovie(String name, int year, String thumbnail, int tvdbId, @Nullable String imdbId, @Nullable String language, int collection) {
this.name = name;
this.year = year;
this.thumbnail = thumbnail;
this.tvdbId = tvdbId;
this.imdbId = imdbId;
this.language = language;
this.collection = collection;
}
@Override
@@ -82,6 +87,14 @@ public class OwnedMovie implements Comparable<OwnedMovie>, MovieMetadata {
return language;
}
public int getCollection() {
return collection;
}
public void setCollection(int collection) {
this.collection = collection;
}
@Override
public int compareTo(@NotNull OwnedMovie o) {
return getName().compareTo(o.getName());
@@ -127,6 +140,7 @@ public class OwnedMovie implements Comparable<OwnedMovie>, MovieMetadata {
", tvdbId=" + tvdbId +
", imdbId='" + imdbId + '\'' +
", language='" + language + '\'' +
", collection='" + collection + '\'' +
'}';
}
}

View File

@@ -32,16 +32,23 @@ public class OwnedMovieDeserializer extends StdDeserializer<OwnedMovie> {
int tvdbId = (Integer) node.get(OwnedMovie.TVDB_ID).numberValue();
String imdbId = node.get(OwnedMovie.IMDB_ID).asText();
String name = node.get(OwnedMovie.NAME).asText();
int year = (Integer) node.get(OwnedMovie.YEAR).numberValue();
String thumbnail = null;
if (node.has(OwnedMovie.THUMBNAIL)) {
thumbnail = node.get(OwnedMovie.THUMBNAIL).asText();
}
int year = (Integer) node.get(OwnedMovie.YEAR).numberValue();
String language = null;
if (node.has(OwnedMovie.LANGUAGE)) {
language = node.get(OwnedMovie.LANGUAGE).asText();
}
return new OwnedMovie(name, year, thumbnail, tvdbId, imdbId, language);
int collection = -1;
if (node.has(OwnedMovie.COLLECTION)) {
collection = node.get(OwnedMovie.COLLECTION).asInt();
}
return new OwnedMovie(name, year, thumbnail, tvdbId, imdbId, language, collection);
}
}

View File

@@ -34,6 +34,7 @@ public class OwnedMovieSerializer extends StdSerializer<OwnedMovie> {
jsonGenerator.writeNumberField(OwnedMovie.YEAR, movie.getYear());
jsonGenerator.writeStringField(OwnedMovie.THUMBNAIL, movie.getThumbnail());
jsonGenerator.writeStringField(OwnedMovie.LANGUAGE, movie.getLanguage());
jsonGenerator.writeNumberField(OwnedMovie.COLLECTION, movie.getCollection());
jsonGenerator.writeEndObject();
}
}

View File

@@ -20,7 +20,7 @@ public class OwnedMovieSerializerTest {
OwnedMovieSerializer movieSerializer = new OwnedMovieSerializer();
OwnedMovieDeserializer movieDeserializer = new OwnedMovieDeserializer();
OwnedMovie ownedMovie = new OwnedMovie("Alien", 1979, "THUMBNAIL", 1235, "TVDB_ID", "ENGLISH");
OwnedMovie ownedMovie = new OwnedMovie("Alien", 1979, "THUMBNAIL", 1235, "TVDB_ID", "ENGLISH", 1234);
ObjectMapper objectMapper = new ObjectMapper();
Writer jsonWriter = new StringWriter();
@@ -44,7 +44,7 @@ public class OwnedMovieSerializerTest {
OwnedMovieSerializer movieSerializer = new OwnedMovieSerializer();
OwnedMovieDeserializer movieDeserializer = new OwnedMovieDeserializer();
OwnedMovie ownedMovie = new OwnedMovie("Alien", 1979, null, 1235, "TVDB_ID", "ENGLISH");
OwnedMovie ownedMovie = new OwnedMovie("Alien", 1979, null, 1235, "TVDB_ID", "ENGLISH", 134);
ObjectMapper objectMapper = new ObjectMapper();
Writer jsonWriter = new StringWriter();
@@ -68,7 +68,7 @@ public class OwnedMovieSerializerTest {
OwnedMovieSerializer movieSerializer = new OwnedMovieSerializer();
OwnedMovieDeserializer movieDeserializer = new OwnedMovieDeserializer();
OwnedMovie ownedMovie = new OwnedMovie("Alien", 1979, "THUMBNAIL", 1235, "TVDB_ID", null);
OwnedMovie ownedMovie = new OwnedMovie("Alien", 1979, "THUMBNAIL", 1235, "TVDB_ID", null, -1);
ObjectMapper objectMapper = new ObjectMapper();
Writer jsonWriter = new StringWriter();

View File

@@ -433,15 +433,15 @@ public class GapsSearchService implements GapsSearch {
//Find out what it looks like in TMDB
//language = ??
guid = guid.substring(guid.indexOf(ID_IDX_START) + ID_IDX_START.length(), guid.indexOf(ID_IDX_END));
ownedMovie = new OwnedMovie(title, year, thumbnail, Integer.parseInt(guid), null, language);
ownedMovie = new OwnedMovie(title, year, thumbnail, Integer.parseInt(guid), null, language, -1);
} else if (guid.contains("com.plexapp.agents.imdb://")) {
language = guid.substring(guid.indexOf("?lang=") + "?lang=".length());
language = new Locale(language, "").getDisplayLanguage();
guid = guid.substring(guid.indexOf(ID_IDX_START) + ID_IDX_START.length(), guid.indexOf(ID_IDX_END));
ownedMovie = new OwnedMovie(title, year, thumbnail, -1, guid, language);
ownedMovie = new OwnedMovie(title, year, thumbnail, -1, guid, language, -1);
} else {
LOGGER.warn("Cannot handle guid value of " + guid);
ownedMovie = new OwnedMovie(title, year, thumbnail, -1, null, language);
ownedMovie = new OwnedMovie(title, year, thumbnail, -1, null, language, -1);
}
ownedMovies.add(ownedMovie);
@@ -515,12 +515,12 @@ public class GapsSearchService implements GapsSearch {
if (movie.getTvdbId() != -1 && movie.getCollectionId() != -1) {
LOGGER.debug("Used Collection ID to get " + movie.getName());
tempTvdbCounter.incrementAndGet();
handleCollection(movie, client, languageCode);
handleCollection(movie, ownedMovie, client, languageCode);
continue;
} else if (movie.getTvdbId() != -1) {
LOGGER.debug("Used TVDB ID to get " + movie.getName());
tempTvdbCounter.incrementAndGet();
searchMovieDetails(movie, client, languageCode);
searchMovieDetails(movie, ownedMovie, client, languageCode);
continue;
} else if (StringUtils.isNotBlank(movie.getImdbId())) {
LOGGER.debug("Used 'find' to search for " + movie.getName());
@@ -585,7 +585,7 @@ public class GapsSearchService implements GapsSearch {
everyMovie.add(newMovie);
}
searchMovieDetails(movie, client, languageCode);
searchMovieDetails(movie, ownedMovie, client, languageCode);
} catch (JsonProcessingException e) {
LOGGER.error("Error parsing movie " + movie + ". " + e.getMessage());
LOGGER.error("URL: " + searchMovieUrl);
@@ -618,7 +618,7 @@ public class GapsSearchService implements GapsSearch {
}
}
private void searchMovieDetails(Movie movie, OkHttpClient client, String languageCode) {
private void searchMovieDetails(Movie movie, OwnedMovie ownedMovie, OkHttpClient client, String languageCode) {
HttpUrl movieDetailUrl = urlGenerator.generateMovieDetailUrl(gapsService.getPlexSearch().getMovieDbApiKey(), String.valueOf(movie.getImdbId()), languageCode);
Request request = new Request.Builder()
@@ -663,14 +663,14 @@ public class GapsSearchService implements GapsSearch {
everyMovie.add(newMovie);
}
handleCollection(movie, client, languageCode);
handleCollection(movie, ownedMovie, client, languageCode);
} catch (IOException e) {
LOGGER.error("Error getting movie details " + movie, e);
}
}
private void handleCollection(Movie movie, OkHttpClient client, String languageCode) {
private void handleCollection(Movie movie, OwnedMovie ownedMovie, OkHttpClient client, String languageCode) {
HttpUrl collectionUrl = urlGenerator.generateCollectionUrl(gapsService.getPlexSearch().getMovieDbApiKey(), String.valueOf(movie.getCollectionId()), languageCode);
Request request = new Request.Builder()
@@ -694,17 +694,26 @@ public class GapsSearchService implements GapsSearch {
return;
} else if (indexOfMovie != -1) {
int id = collection.get("id").asInt();
everyMovie.get(indexOfMovie).setCollectionId(id);
String name = collection.get("name").asText();
everyMovie.get(indexOfMovie).setCollectionId(id);
everyMovie.get(indexOfMovie).setCollection(name);
movie.setCollection(name);
movie.setCollectionId(id);
ownedMovie.setCollection(id);
} else {
int id = collection.get("id").asInt();
String name = collection.get("name").asText();
Movie newMovie = new Movie.Builder(movie.getName(), movie.getYear())
.setTvdbId(movie.getTvdbId())
.setImdbId(movie.getImdbId())
.setCollection(collection.get("name").asText())
.setCollectionId(collection.get("id").asInt())
.setCollection(name)
.setCollectionId(id)
.build();
everyMovie.add(newMovie);
movie.setCollection(name);
movie.setCollectionId(id);
ownedMovie.setCollection(id);
}
ArrayNode parts = (ArrayNode) collection.get("parts");
@@ -741,7 +750,7 @@ public class GapsSearchService implements GapsSearch {
.setPosterUrl(posterUrl)
.build();
OwnedMovie ownedMovieFromCollection = new OwnedMovie(title, year, null, tvdbId, null, null);
OwnedMovie ownedMovieFromCollection = new OwnedMovie(title, year, null, tvdbId, null, null, -1);
indexOfMovie = everyMovie.indexOf(new Movie.Builder(title, year).build());
if (indexOfMovie == -1) {