Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/main/java/com/uwetrottmann/tmdb2/Tmdb.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.uwetrottmann.tmdb2.services.ReviewsService;
import com.uwetrottmann.tmdb2.services.SearchService;
import com.uwetrottmann.tmdb2.services.TimezonesService;
import com.uwetrottmann.tmdb2.services.TrendingService;
import com.uwetrottmann.tmdb2.services.TvEpisodesService;
import com.uwetrottmann.tmdb2.services.TvSeasonsService;
import com.uwetrottmann.tmdb2.services.TvService;
Expand Down Expand Up @@ -361,6 +362,9 @@ public TvEpisodesService tvEpisodesService() {
return getRetrofit().create(TvEpisodesService.class);
}

public TrendingService trendingService() {
return getRetrofit().create(TrendingService.class);
}

public DiscoverMovieBuilder discoverMovie() {
return new DiscoverMovieBuilder(discoverService());
Expand Down
32 changes: 32 additions & 0 deletions src/main/java/com/uwetrottmann/tmdb2/TmdbHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.uwetrottmann.tmdb2.entities.PersonCastCredit;
import com.uwetrottmann.tmdb2.entities.PersonCrewCredit;
import com.uwetrottmann.tmdb2.entities.RatingObject;
import com.uwetrottmann.tmdb2.entities.Trending;
import com.uwetrottmann.tmdb2.enumerations.MediaType;
import com.uwetrottmann.tmdb2.enumerations.Status;
import com.uwetrottmann.tmdb2.enumerations.VideoType;
Expand Down Expand Up @@ -160,6 +161,37 @@ public static GsonBuilder getGsonBuilder() {
return null;
}
});

builder.registerTypeAdapter(Trending.class,
(JsonDeserializer<Trending>) (jsonElement, type, jsonDeserializationContext) -> {
Trending trending = new Trending();
if (jsonElement.getAsJsonObject().get("media_type") != null) {
trending.media_type = jsonDeserializationContext
.deserialize(jsonElement.getAsJsonObject().get("media_type"), MediaType.class);
} else {
if (jsonElement.getAsJsonObject().get("first_air_date") != null) {
trending.media_type = MediaType.TV;
} else if (jsonElement.getAsJsonObject().get("name") != null) {
trending.media_type = MediaType.PERSON;
} else if (jsonElement.getAsJsonObject().get("title") != null) {
trending.media_type = MediaType.MOVIE;
}
}
switch (trending.media_type) {
case MOVIE:
trending.movie = jsonDeserializationContext.deserialize(jsonElement, BaseMovie.class);
break;
case TV:
trending.tvShow = jsonDeserializationContext.deserialize(jsonElement, BaseTvShow.class);
break;
case PERSON:
trending.person = jsonDeserializationContext.deserialize(jsonElement, BasePerson.class);
break;
}


return trending;
});

return builder;
}
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/com/uwetrottmann/tmdb2/entities/Trending.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.uwetrottmann.tmdb2.entities;

import com.uwetrottmann.tmdb2.enumerations.MediaType;

public class Trending {

public BaseTvShow tvShow;
public BaseMovie movie;
public BasePerson person;

public MediaType media_type;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.uwetrottmann.tmdb2.entities;

public class TrendingResultsPage extends BaseResultsPage<Trending> {
}
20 changes: 20 additions & 0 deletions src/main/java/com/uwetrottmann/tmdb2/services/TrendingService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.uwetrottmann.tmdb2.services;

import com.uwetrottmann.tmdb2.entities.TrendingResultsPage;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;

public interface TrendingService {

/**
* Get the daily or weekly trending items
*
* @see <a href="https://developers.themoviedb.org/3/trending/get-trending">Documentation</a>
*/
@GET("trending/{media_type}/{time_window}")
Call<TrendingResultsPage> trending(
@Path("media_type") String mediaType,
@Path("time_window") String timeWindow
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.uwetrottmann.tmdb2.assertions;

import com.uwetrottmann.tmdb2.entities.BaseMovie;
import com.uwetrottmann.tmdb2.entities.BasePerson;
import com.uwetrottmann.tmdb2.entities.BaseTvShow;
import com.uwetrottmann.tmdb2.entities.Trending;
import com.uwetrottmann.tmdb2.entities.TrendingResultsPage;

import static com.uwetrottmann.tmdb2.assertions.GenericAssertions.assertBaseResultsPage;
import static com.uwetrottmann.tmdb2.assertions.MovieAssertions.assertBaseMovie;
import static com.uwetrottmann.tmdb2.assertions.PersonAssertions.assertBasePerson;
import static com.uwetrottmann.tmdb2.assertions.TvAssertions.assertBaseTvShow;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Assert;

public class TrendingAssertions {
public static void assertTrending(Trending trending) {
assertThat(trending).isNotNull();
switch (trending.media_type) {
case MOVIE:
BaseMovie movie = trending.movie;
assertBaseMovie(movie);
break;
case TV:
BaseTvShow tv = trending.tvShow;
assertBaseTvShow(tv);
break;
case PERSON:
BasePerson person = trending.person;
assertBasePerson(person);
break;
default:
Assert.fail("Unknown Media type");

}
}

public static void assertTrendingResultsPage(TrendingResultsPage trendingResultsPage) {
assertBaseResultsPage(trendingResultsPage);
for (Trending trending : trendingResultsPage.results) {
assertTrending(trending);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.uwetrottmann.tmdb2.services;

import static com.uwetrottmann.tmdb2.assertions.TrendingAssertions.assertTrendingResultsPage;

import java.io.IOException;

import org.junit.Test;

import com.uwetrottmann.tmdb2.BaseTestCase;
import com.uwetrottmann.tmdb2.entities.TrendingResultsPage;

import retrofit2.Call;

public class TrendingServiceTest extends BaseTestCase {

@Test
public void test_trending() throws IOException {
Call<TrendingResultsPage> call = getUnauthenticatedInstance().trendingService().trending("all", "week");

TrendingResultsPage trendingResultsPage = call.execute().body();

assertTrendingResultsPage(trendingResultsPage);
}
}